Merge pull request #13 from Dolibarr/develop

Update
This commit is contained in:
mattsidnell 2020-07-08 14:18:45 +01:00 committed by GitHub
commit 92e2d5f3e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1236 changed files with 16873 additions and 14996 deletions

View File

@ -115,8 +115,8 @@ NEW: class tool for converting units
NEW: Close #13011 Add button create thirdparty when creating intervention NEW: Close #13011 Add button create thirdparty when creating intervention
NEW: Colorful theme for TakePOS NEW: Colorful theme for TakePOS
NEW: columns units in product list NEW: columns units in product list
NEW: compatibility of translabel with more dict NEW: compatibility of translabel with more dictionaries
NEW: Confirm file delete on fracture card NEW: Confirm file delete on invoice card
NEW: "contact_civility" for ODT templates NEW: "contact_civility" for ODT templates
NEW: CUPS printing compatibility for TakePOS NEW: CUPS printing compatibility for TakePOS
NEW: Customer command list - Add date start & date end NEW: Customer command list - Add date start & date end
@ -124,16 +124,11 @@ NEW: display weight in shipment list
NEW: Documentation about PHP support in Dolibarr NEW: Documentation about PHP support in Dolibarr
NEW: Donation - Update FR CERFA to 11580*04 NEW: Donation - Update FR CERFA to 11580*04
NEW: Easier way to setup the different types of tax. Better visibility. NEW: Easier way to setup the different types of tax. Better visibility.
NEW: enable put for agendaevents api
NEW: Expedition list - Add date start & date end NEW: Expedition list - Add date start & date end
NEW: Experiment supplier packaging with option PRODUCT_USE_SUPPLIER_PACKAGING: Using price according to the minimum quantity NEW: Experiment supplier packaging with option PRODUCT_USE_SUPPLIER_PACKAGING: Using price according to the minimum quantity
NEW: Export module, add extrafields for Contract and Contract line NEW: Export module, add extrafields for Contract and Contract line
NEW: Extend retained warranty to be available for all invoices NEW: Extend retained warranty to be available for all invoices
NEW: filter by product on supplier order API
NEW: French new regions NEW: French new regions
NEW: get documents for categories with RESP API
NEW: get proposal by ref with API
NEW: Hidden option MAIN_TEMP_DIR
NEW: hook and data id NEW: hook and data id
NEW: hook on ics generation to add more events in eventarray NEW: hook on ics generation to add more events in eventarray
NEW: hook on product load stats NEW: hook on product load stats
@ -206,7 +201,6 @@ NEW: API filter bankaccounts by category
NEW: API filter contacts by category NEW: API filter contacts by category
NEW: API filter members by category NEW: API filter members by category
NEW: API filter projects by category NEW: API filter projects by category
NEW: API filter thirdpartie by category
NEW: API filter thirdparty by category NEW: API filter thirdparty by category
NEW: API filter user by category NEW: API filter user by category
NEW: API filter warehouses by categorie NEW: API filter warehouses by categorie
@ -220,6 +214,11 @@ NEW: Bookkeeping by account - Add selectfields & hook
NEW: Can force position of legend of graph on right (instead of top) NEW: Can force position of legend of graph on right (instead of top)
NEW: Can change destination of "Back to list" using a "backtolist" parameter NEW: Can change destination of "Back to list" using a "backtolist" parameter
NEW: add more category types from hook NEW: add more category types from hook
NEW: enable put for agendaevents api
NEW: filter by product on supplier order API
NEW: get documents for categories with RESP API
NEW: get proposal by ref with API
NEW: Hidden option MAIN_TEMP_DIR
WARNING: WARNING:

View File

@ -285,6 +285,7 @@ if ($search_gender != '' && $search_gender != '-1') $sql .= " AND d.gender = '".
if ($search_login) $sql .= natural_search("d.login", $search_login); if ($search_login) $sql .= natural_search("d.login", $search_login);
if ($search_company) $sql .= natural_search("s.nom", $search_company); if ($search_company) $sql .= natural_search("s.nom", $search_company);
if ($search_email) $sql .= natural_search("d.email", $search_email); if ($search_email) $sql .= natural_search("d.email", $search_email);
if ($search_address) $sql .= natural_search("d.address", $search_address);
if ($search_town) $sql .= natural_search("d.town", $search_town); if ($search_town) $sql .= natural_search("d.town", $search_town);
if ($search_zip) $sql .= natural_search("d.zip", $search_zip); if ($search_zip) $sql .= natural_search("d.zip", $search_zip);
if ($search_state) $sql .= natural_search("state.nom", $search_state); if ($search_state) $sql .= natural_search("state.nom", $search_state);

View File

@ -0,0 +1,113 @@
<?php
/* Copyright (C) 2001-2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2003 Jean-Louis Bergamo <jlb@j1b.org>
* Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2012 Regis Houssin <regis.houssin@inodbox.com>
* Copyright (C) 2014 Florian Henry <florian.henry@open-concept.pro>
* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/**
* \file htdocs/admin/bom_extrafields.php
* \ingroup bom
* \brief Page to setup extra fields of BOM
*/
require '../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/bom/lib/bom.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
// Load translation files required by the page
$langs->loadLangs(array('mrp', 'admin'));
$extrafields = new ExtraFields($db);
$form = new Form($db);
// List of supported format
$tmptype2label = ExtraFields::$type2label;
$type2label = array('');
foreach ($tmptype2label as $key => $val) $type2label[$key] = $langs->transnoentitiesnoconv($val);
$action = GETPOST('action', 'alpha');
$attrname = GETPOST('attrname', 'alpha');
$elementtype = 'bom_bom';
if (!$user->admin) accessforbidden();
/*
* Actions
*/
require DOL_DOCUMENT_ROOT.'/core/actions_extrafields.inc.php';
/*
* View
*/
llxHeader('', $langs->trans("BOMsSetup"), $help_url);
$linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
print load_fiche_titre($langs->trans("BOMsSetup"), $linkback, 'title_setup');
$head = bomAdminPrepareHead(null);
dol_fiche_head($head, 'bom_extrafields', $langs->trans("ExtraFields"), -1, 'account');
require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php';
dol_fiche_end();
// Buttons
if ($action != 'create' && $action != 'edit')
{
print '<div class="tabsAction">';
print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
print "</div>";
}
/*
* Creation of an optional field
*/
if ($action == 'create')
{
print '<br><div id="newattrib"></div>';
print load_fiche_titre($langs->trans('NewAttribute'));
require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
}
/*
* Edition of an optional field
*/
if ($action == 'edit' && !empty($attrname))
{
print "<br>";
print load_fiche_titre($langs->trans("FieldEdition", $attrname));
require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
}
// End of page
llxFooter();
$db->close();

View File

@ -209,7 +209,7 @@ $sql .= $hookmanager->resPrint;
/* If a group by is required /* If a group by is required
$sql.= " GROUP BY " $sql.= " GROUP BY "
foreach($object->fields as $key => $val) foreach ($object->fields as $key => $val)
{ {
$sql.='t.'.$key.', '; $sql.='t.'.$key.', ';
} }

View File

@ -0,0 +1,113 @@
<?php
/* Copyright (C) 2001-2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2003 Jean-Louis Bergamo <jlb@j1b.org>
* Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2012 Regis Houssin <regis.houssin@inodbox.com>
* Copyright (C) 2014 Florian Henry <florian.henry@open-concept.pro>
* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/**
* \file htdocs/admin/mrp_extrafields.php
* \ingroup mrp
* \brief Page to setup extra fields of MOs
*/
require '../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/mrp/lib/mrp.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
// Load translation files required by the page
$langs->loadLangs(array('mrp', 'admin'));
$extrafields = new ExtraFields($db);
$form = new Form($db);
// List of supported format
$tmptype2label = ExtraFields::$type2label;
$type2label = array('');
foreach ($tmptype2label as $key => $val) $type2label[$key] = $langs->transnoentitiesnoconv($val);
$action = GETPOST('action', 'alpha');
$attrname = GETPOST('attrname', 'alpha');
$elementtype = 'mrp_mo';
if (!$user->admin) accessforbidden();
/*
* Actions
*/
require DOL_DOCUMENT_ROOT.'/core/actions_extrafields.inc.php';
/*
* View
*/
llxHeader('', $langs->trans("MrpSetupPage"), $help_url);
$linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
print load_fiche_titre($langs->trans("MrpSetupPage"), $linkback, 'title_setup');
$head = mrpAdminPrepareHead(null);
dol_fiche_head($head, 'mrp_extrafields', $langs->trans("ExtraFields"), -1, 'account');
require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php';
dol_fiche_end();
// Buttons
if ($action != 'create' && $action != 'edit')
{
print '<div class="tabsAction">';
print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
print "</div>";
}
/*
* Creation of an optional field
*/
if ($action == 'create')
{
print '<br><div id="newattrib"></div>';
print load_fiche_titre($langs->trans('NewAttribute'));
require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
}
/*
* Edition of an optional field
*/
if ($action == 'edit' && !empty($attrname))
{
print "<br>";
print load_fiche_titre($langs->trans("FieldEdition", $attrname));
require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
}
// End of page
llxFooter();
$db->close();

View File

@ -251,7 +251,7 @@ class BOM extends CommonObject
if ($result > 0 && !empty($object->table_element_line)) $object->fetchLines(); if ($result > 0 && !empty($object->table_element_line)) $object->fetchLines();
// Get lines so they will be clone // Get lines so they will be clone
//foreach($object->lines as $line) //foreach ($object->lines as $line)
// $line->fetch_optionals(); // $line->fetch_optionals();
// Reset some properties // Reset some properties
@ -333,8 +333,10 @@ class BOM extends CommonObject
public function fetch($id, $ref = null) public function fetch($id, $ref = null)
{ {
$result = $this->fetchCommon($id, $ref); $result = $this->fetchCommon($id, $ref);
if ($result > 0 && !empty($this->table_element_line)) $this->fetchLines(); if ($result > 0 && !empty($this->table_element_line)) $this->fetchLines();
$this->calculateCosts(); $this->calculateCosts();
return $result; return $result;
} }

View File

@ -41,6 +41,11 @@ function bomAdminPrepareHead()
$head[$h][2] = 'settings'; $head[$h][2] = 'settings';
$h++; $h++;
$head[$h][0] = dol_buildpath("/admin/bom_extrafields.php", 1);
$head[$h][1] = $langs->trans("ExtraFields");
$head[$h][2] = 'bom_extrafields';
$h++;
/*$head[$h][0] = DOL_URL_ROOT."/bom/admin/about.php"; /*$head[$h][0] = DOL_URL_ROOT."/bom/admin/about.php";
$head[$h][1] = $langs->trans("About"); $head[$h][1] = $langs->trans("About");
$head[$h][2] = 'about'; $head[$h][2] = 'about';

View File

@ -58,7 +58,6 @@ if ($nolinesbefore) {
} }
print '<td class="linecoldescription minwidth500imp">'; print '<td class="linecoldescription minwidth500imp">';
print '<div id="add"></div><span class="hideonsmartphone">'.$langs->trans('AddNewLine').'</span>'; print '<div id="add"></div><span class="hideonsmartphone">'.$langs->trans('AddNewLine').'</span>';
// echo $langs->trans("FreeZone");
print '</td>'; print '</td>';
print '<td class="linecolqty right">'.$langs->trans('Qty').'</td>'; print '<td class="linecolqty right">'.$langs->trans('Qty').'</td>';
if ($conf->global->PRODUCT_USE_UNITS) if ($conf->global->PRODUCT_USE_UNITS)

View File

@ -934,7 +934,7 @@ if ($object->id > 0)
$late = ''; $late = '';
foreach ($contrat->lines as $line) { foreach ($contrat->lines as $line) {
if ($contrat->statut == Contrat::STATUS_VALIDATED && $line->statut == ContratLigne::STATUS_OPEN) { if ($contrat->statut == Contrat::STATUS_VALIDATED && $line->statut == ContratLigne::STATUS_OPEN) {
if (($line->date_fin_validite + $conf->contrat->services->expires->warning_delay) < $now) $late = img_warning($langs->trans("Late")); if (((!empty($line->date_fin_validite)?$line->date_fin_validite:0) + $conf->contrat->services->expires->warning_delay) < $now) $late = img_warning($langs->trans("Late"));
} }
} }

View File

@ -192,7 +192,7 @@ if (empty($reshook))
} }
} }
$result = $object->createFromClone($user, $socid); $result = $object->createFromClone($user, $socid, (GETPOSTISSET('entity') ? GETPOST('entity', 'int') : null));
if ($result > 0) { if ($result > 0) {
header("Location: ".$_SERVER['PHP_SELF'].'?id='.$result); header("Location: ".$_SERVER['PHP_SELF'].'?id='.$result);
exit(); exit();
@ -775,8 +775,16 @@ if (empty($reshook))
} }
} }
} }
} // Add line } elseif ($action == 'addline' && GETPOST('submitforalllines', 'aZ09') && GETPOST('vatforalllines', 'alpha')) {
elseif ($action == 'addline' && $usercancreate) { // Define vat_rate
$vat_rate = (GETPOST('vatforalllines') ? GETPOST('vatforalllines') : 0);
$vat_rate = str_replace('*', '', $vat_rate);
$localtax1_rate = get_localtax($vat_rate, 1, $object->thirdparty, $mysoc);
$localtax2_rate = get_localtax($vat_rate, 2, $object->thirdparty, $mysoc);
foreach ($object->lines as $line) {
$result = $object->updateline($line->id, $line->subprice, $line->qty, $line->remise_percent, $vat_rate, $localtax1_rate, $localtax2_rate, $line->desc, 'HT', $line->info_bits, $line->special_code, $line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->product_type, $line->date_start, $line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice);
}
} elseif ($action == 'addline' && $usercancreate) { // Add line
// Set if we used free entry or predefined product // Set if we used free entry or predefined product
$predef = ''; $predef = '';
$product_desc = (GETPOST('dp_desc') ?GETPOST('dp_desc') : ''); $product_desc = (GETPOST('dp_desc') ?GETPOST('dp_desc') : '');
@ -1085,6 +1093,9 @@ if (empty($reshook))
$outputlangs->setDefaultLang($newlang); $outputlangs->setDefaultLang($newlang);
} }
$ret = $object->fetch($id); // Reload to get new records $ret = $object->fetch($id); // Reload to get new records
if ($ret > 0) {
$object->fetch_thirdparty();
}
$object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref); $object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
} }
@ -1747,10 +1758,9 @@ if ($action == 'create')
print '<tr><td class="tdtop"><input type="radio" name="createmode" value="empty" checked></td>'; print '<tr><td class="tdtop"><input type="radio" name="createmode" value="empty" checked></td>';
print '<td valign="top" colspan="2">'.$langs->trans("CreateEmptyPropal").'</td></tr>'; print '<td valign="top" colspan="2">'.$langs->trans("CreateEmptyPropal").'</td></tr>';
print '</table>';
} }
if (!empty($conf->global->PROPAL_CLONE_ON_CREATE_PAGE)) print '</table>';
dol_fiche_end(); dol_fiche_end();
$langs->load("bills"); $langs->load("bills");
@ -1793,11 +1803,11 @@ if ($action == 'create')
if ($action == 'clone') { if ($action == 'clone') {
// Create an array for form // Create an array for form
$formquestion = array( $formquestion = array(
// 'text' => $langs->trans("ConfirmClone"), // 'text' => $langs->trans("ConfirmClone"),
// array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneMainAttributes"), 'value' => 1), // array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneMainAttributes"), 'value' => 1),
// array('type' => 'checkbox', 'name' => 'update_prices', 'label' => $langs->trans("PuttingPricesUpToDate"), 'value' => // array('type' => 'checkbox', 'name' => 'update_prices', 'label' => $langs->trans("PuttingPricesUpToDate"), 'value' => 1),
// 1), array('type' => 'other', 'name' => 'socid', 'label' => $langs->trans("SelectThirdParty"), 'value' => $form->select_company(GETPOST('socid', 'int'), 'socid', '(s.client=1 OR s.client=2 OR s.client=3)'))
array('type' => 'other', 'name' => 'socid', 'label' => $langs->trans("SelectThirdParty"), 'value' => $form->select_company(GETPOST('socid', 'int'), 'socid', '(s.client=1 OR s.client=2 OR s.client=3)'))); );
if (!empty($conf->global->PROPAL_CLONE_DATE_DELIVERY) && !empty($object->date_livraison)) { if (!empty($conf->global->PROPAL_CLONE_DATE_DELIVERY) && !empty($object->date_livraison)) {
$formquestion[] = array('type' => 'date', 'name' => 'date_delivery', 'label' => $langs->trans("DeliveryDate"), 'value' => $object->date_livraison); $formquestion[] = array('type' => 'date', 'name' => 'date_delivery', 'label' => $langs->trans("DeliveryDate"), 'value' => $object->date_livraison);
} }

View File

@ -725,15 +725,15 @@ class Propal extends CommonObject
/** /**
* Update a proposal line * Update a proposal line
* *
* @param int $rowid Id de la ligne * @param int $rowid Id of line
* @param float $pu Prix unitaire (HT ou TTC selon price_base_type) * @param float $pu Unit price (HT or TTC depending on price_base_type)
* @param float $qty Quantity * @param float $qty Quantity
* @param float $remise_percent Remise effectuee sur le produit * @param float $remise_percent Discount on line
* @param float $txtva Taux de TVA * @param float $txtva VAT Rate (Can be '1.23' or '1.23 (ABC)')
* @param float $txlocaltax1 Local tax 1 rate * @param float $txlocaltax1 Local tax 1 rate
* @param float $txlocaltax2 Local tax 2 rate * @param float $txlocaltax2 Local tax 2 rate
* @param string $desc Description * @param string $desc Description
* @param string $price_base_type HT ou TTC * @param string $price_base_type HT or TTC
* @param int $info_bits Miscellaneous informations * @param int $info_bits Miscellaneous informations
* @param int $special_code Special code (also used by externals modules!) * @param int $special_code Special code (also used by externals modules!)
* @param int $fk_parent_line Id of parent line (0 in most cases, used by modules adding sublevels into lines). * @param int $fk_parent_line Id of parent line (0 in most cases, used by modules adding sublevels into lines).
@ -1289,9 +1289,10 @@ class Propal extends CommonObject
* *
* @param User $user User making the clone * @param User $user User making the clone
* @param int $socid Id of thirdparty * @param int $socid Id of thirdparty
* @param int $forceentity Entity id to force
* @return int New id of clone * @return int New id of clone
*/ */
public function createFromClone(User $user, $socid = 0) public function createFromClone(User $user, $socid = 0, $forceentity = null)
{ {
global $conf, $hookmanager; global $conf, $hookmanager;
@ -1345,6 +1346,7 @@ class Propal extends CommonObject
$object->id = 0; $object->id = 0;
$object->ref = ''; $object->ref = '';
$object->entity = (! empty($forceentity) ? $forceentity : $object->entity);
$object->statut = self::STATUS_DRAFT; $object->statut = self::STATUS_DRAFT;
// Clear fields // Clear fields
@ -4119,6 +4121,8 @@ class PropaleLigne extends CommonObjectLine
$pa_ht_isemptystring = (empty($this->pa_ht) && $this->pa_ht == ''); // If true, we can use a default value. If this->pa_ht = '0', we must use '0'. $pa_ht_isemptystring = (empty($this->pa_ht) && $this->pa_ht == ''); // If true, we can use a default value. If this->pa_ht = '0', we must use '0'.
if (empty($this->id) && ! empty($this->rowid)) $this->id = $this->rowid;
// Clean parameters // Clean parameters
if (empty($this->tva_tx)) $this->tva_tx = 0; if (empty($this->tva_tx)) $this->tva_tx = 0;
if (empty($this->localtax1_tx)) $this->localtax1_tx = 0; if (empty($this->localtax1_tx)) $this->localtax1_tx = 0;
@ -4192,7 +4196,7 @@ class PropaleLigne extends CommonObjectLine
$sql .= ", multicurrency_total_tva=".price2num($this->multicurrency_total_tva).""; $sql .= ", multicurrency_total_tva=".price2num($this->multicurrency_total_tva)."";
$sql .= ", multicurrency_total_ttc=".price2num($this->multicurrency_total_ttc).""; $sql .= ", multicurrency_total_ttc=".price2num($this->multicurrency_total_ttc)."";
$sql .= " WHERE rowid = ".$this->rowid; $sql .= " WHERE rowid = ".$this->id;
dol_syslog(get_class($this)."::update", LOG_DEBUG); dol_syslog(get_class($this)."::update", LOG_DEBUG);
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
@ -4200,7 +4204,6 @@ class PropaleLigne extends CommonObjectLine
{ {
if (!$error) if (!$error)
{ {
$this->id = $this->rowid;
$result = $this->insertExtraFields(); $result = $this->insertExtraFields();
if ($result < 0) if ($result < 0)
{ {

View File

@ -624,10 +624,16 @@ if (empty($reshook))
$result = $object->set_remise($user, GETPOST('remise_percent')); $result = $object->set_remise($user, GETPOST('remise_percent'));
} elseif ($action == 'setremiseabsolue' && $usercancreate) { } elseif ($action == 'setremiseabsolue' && $usercancreate) {
$result = $object->set_remise_absolue($user, GETPOST('remise_absolue')); $result = $object->set_remise_absolue($user, GETPOST('remise_absolue'));
} } elseif ($action == 'addline' && GETPOST('submitforalllines', 'aZ09') && GETPOST('vatforalllines', 'alpha')) {
// Define vat_rate
// Add a new line $vat_rate = (GETPOST('vatforalllines') ? GETPOST('vatforalllines') : 0);
elseif ($action == 'addline' && $usercancreate) $vat_rate = str_replace('*', '', $vat_rate);
$localtax1_rate = get_localtax($vat_rate, 1, $object->thirdparty, $mysoc);
$localtax2_rate = get_localtax($vat_rate, 2, $object->thirdparty, $mysoc);
foreach ($object->lines as $line) {
$result = $object->updateline($line->id, $line->desc, $line->subprice, $line->qty, $line->remise_percent, $vat_rate, $localtax1_rate, $localtax2_rate, 'HT', $line->info_bits, $line->date_start, $line->date_end, $line->product_type, $line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->special_code, $line->array_options, $line->fk_unit, $line->multicurrency_subprice);
}
} elseif ($action == 'addline' && $usercancreate) // Add a new line
{ {
$langs->load('errors'); $langs->load('errors');
$error = 0; $error = 0;

View File

@ -1417,7 +1417,7 @@ if (empty($reshook))
$result = $srcobject->fetch($object->origin_id); $result = $srcobject->fetch($object->origin_id);
$typeamount = GETPOST('typedeposit', 'aZ09'); $typeamount = GETPOST('typedeposit', 'aZ09');
$valuedeposit = GETPOST('valuedeposit', 'int'); $valuedeposit = price2num(GETPOST('valuedeposit', 'alpha'), 'MU');
// If deposit invoice // If deposit invoice
if ($_POST['type'] == Facture::TYPE_DEPOSIT && in_array($typeamount, array('amount', 'variable'))) if ($_POST['type'] == Facture::TYPE_DEPOSIT && in_array($typeamount, array('amount', 'variable')))
@ -1867,8 +1867,16 @@ if (empty($reshook))
$_GET["originid"] = $_POST["originid"]; $_GET["originid"] = $_POST["originid"];
setEventMessages($object->error, $object->errors, 'errors'); setEventMessages($object->error, $object->errors, 'errors');
} }
} // Add a new line } elseif ($action == 'addline' && GETPOST('submitforalllines', 'aZ09') && GETPOST('vatforalllines', 'alpha')) {
elseif ($action == 'addline' && $usercancreate) // Define vat_rate
$vat_rate = (GETPOST('vatforalllines') ? GETPOST('vatforalllines') : 0);
$vat_rate = str_replace('*', '', $vat_rate);
$localtax1_rate = get_localtax($vat_rate, 1, $object->thirdparty, $mysoc);
$localtax2_rate = get_localtax($vat_rate, 2, $object->thirdparty, $mysoc);
foreach ($object->lines as $line) {
$result = $object->updateline($line->id, $line->desc, $line->subprice, $line->qty, $line->remise_percent, $line->date_start, $line->date_end, $vat_rate, $localtax1_rate, $localtax2_rate, 'HT', $line->info_bits, $line->product_type, $line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->special_code, $line->array_options, $line->situation_percent, $line->fk_unit, $line->multicurrency_subprice);
}
} elseif ($action == 'addline' && $usercancreate) // Add a new line
{ {
$langs->load('errors'); $langs->load('errors');
$error = 0; $error = 0;

View File

@ -48,13 +48,12 @@ $ref = GETPOST('ref', 'alpha');
$socid = GETPOST('socid', 'int'); $socid = GETPOST('socid', 'int');
$action = GETPOST('action', 'alpha'); $action = GETPOST('action', 'alpha');
$type = GETPOST('type', 'aZ09'); $type = GETPOST('type', 'aZ09');
$mode = GETPOST('mode', 'aZ09');
$fieldid = (!empty($ref) ? 'ref' : 'rowid'); $fieldid = (!empty($ref) ? 'ref' : 'rowid');
if ($user->socid) $socid = $user->socid; if ($user->socid) $socid = $user->socid;
$result = restrictedArea($user, 'facture', $id, '', '', 'fk_soc', $fieldid); $result = restrictedArea($user, 'facture', $id, '', '', 'fk_soc', $fieldid);
if ($mode == 'bank-transfer') { if ($type == 'bank-transfer') {
$object = new FactureFournisseur($db); $object = new FactureFournisseur($db);
} else { } else {
$object = new Facture($db); $object = new Facture($db);
@ -94,6 +93,7 @@ if (empty($reshook))
$sourcetype = 'facture'; $sourcetype = 'facture';
if ($type == 'bank-transfer') { if ($type == 'bank-transfer') {
$sourcetype = 'supplier_invoice'; $sourcetype = 'supplier_invoice';
$newtype = 'bank-transfer';
} }
$result = $object->demande_prelevement($user, price2num(GETPOST('withdraw_request_amount', 'alpha')), $newtype, $sourcetype); $result = $object->demande_prelevement($user, price2num(GETPOST('withdraw_request_amount', 'alpha')), $newtype, $sourcetype);
@ -117,7 +117,7 @@ if (empty($reshook))
$result = $object->demande_prelevement_delete($user, GETPOST('did', 'int')); $result = $object->demande_prelevement_delete($user, GETPOST('did', 'int'));
if ($result == 0) if ($result == 0)
{ {
header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id.'&mode='.$mode); header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id.'&type='.$type);
exit; exit;
} }
} }
@ -133,7 +133,7 @@ $form = new Form($db);
$now = dol_now(); $now = dol_now();
if ($mode == 'bank-transfer') { if ($type == 'bank-transfer') {
$title = $langs->trans('InvoiceSupplier')." - ".$langs->trans('CreditTransfer'); $title = $langs->trans('InvoiceSupplier')." - ".$langs->trans('CreditTransfer');
$helpurl = ""; $helpurl = "";
} else { } else {
@ -168,7 +168,7 @@ if ($object->id > 0)
if ($object->paye) $resteapayer = 0; if ($object->paye) $resteapayer = 0;
$resteapayeraffiche = $resteapayer; $resteapayeraffiche = $resteapayer;
if ($mode == 'bank-transfer') { if ($type == 'bank-transfer') {
if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { // Never use this if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) { // Never use this
$filterabsolutediscount = "fk_invoice_supplier_source IS NULL"; // If we want deposit to be substracted to payments only and not to total of final invoice $filterabsolutediscount = "fk_invoice_supplier_source IS NULL"; // If we want deposit to be substracted to payments only and not to total of final invoice
$filtercreditnote = "fk_invoice_supplier_source IS NOT NULL"; // If we want deposit to be substracted to payments only and not to total of final invoice $filtercreditnote = "fk_invoice_supplier_source IS NOT NULL"; // If we want deposit to be substracted to payments only and not to total of final invoice
@ -202,7 +202,7 @@ if ($object->id > 0)
$author->fetch($object->user_author); $author->fetch($object->user_author);
} }
if ($mode == 'bank-transfer') { if ($type == 'bank-transfer') {
$head = facturefourn_prepare_head($object); $head = facturefourn_prepare_head($object);
} else { } else {
$head = facture_prepare_head($object); $head = facture_prepare_head($object);
@ -211,7 +211,7 @@ if ($object->id > 0)
dol_fiche_head($head, 'standingorders', $title, -1, 'bill'); dol_fiche_head($head, 'standingorders', $title, -1, 'bill');
// Invoice content // Invoice content
if ($mode == 'bank-transfer') { if ($type == 'bank-transfer') {
$linkback = '<a href="'.DOL_URL_ROOT.'/fourn/facture/list.php?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/fourn/facture/list.php?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
} else { } else {
$linkback = '<a href="'.DOL_URL_ROOT.'/compta/facture/list.php?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>'; $linkback = '<a href="'.DOL_URL_ROOT.'/compta/facture/list.php?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
@ -219,7 +219,7 @@ if ($object->id > 0)
$morehtmlref = '<div class="refidno">'; $morehtmlref = '<div class="refidno">';
// Ref customer // Ref customer
if ($mode == 'bank-transfer') { if ($type == 'bank-transfer') {
$morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', 0, 1);
$morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', null, null, '', 1); $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', null, null, '', 1);
} else { } else {
@ -228,7 +228,7 @@ if ($object->id > 0)
} }
// Thirdparty // Thirdparty
$morehtmlref .= '<br>'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1); $morehtmlref .= '<br>'.$langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1);
if ($mode == 'bank-transfer') { if ($type == 'bank-transfer') {
if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) $morehtmlref .= ' (<a href="'.DOL_URL_ROOT.'/fourn/facture/list.php?socid='.$object->thirdparty->id.'&search_company='.urlencode($object->thirdparty->name).'">'.$langs->trans("OtherBills").'</a>)'; if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) $morehtmlref .= ' (<a href="'.DOL_URL_ROOT.'/fourn/facture/list.php?socid='.$object->thirdparty->id.'&search_company='.urlencode($object->thirdparty->name).'">'.$langs->trans("OtherBills").'</a>)';
} else { } else {
if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) $morehtmlref .= ' (<a href="'.DOL_URL_ROOT.'/compta/facture/list.php?socid='.$object->thirdparty->id.'&search_company='.urlencode($object->thirdparty->name).'">'.$langs->trans("OtherBills").'</a>)'; if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) $morehtmlref .= ' (<a href="'.DOL_URL_ROOT.'/compta/facture/list.php?socid='.$object->thirdparty->id.'&search_company='.urlencode($object->thirdparty->name).'">'.$langs->trans("OtherBills").'</a>)';
@ -288,7 +288,7 @@ if ($object->id > 0)
} }
if ($object->type == $object::TYPE_REPLACEMENT) if ($object->type == $object::TYPE_REPLACEMENT)
{ {
if ($mode == 'bank-transfer') { if ($type == 'bank-transfer') {
$facreplaced = new FactureFournisseur($db); $facreplaced = new FactureFournisseur($db);
} else { } else {
$facreplaced = new Facture($db); $facreplaced = new Facture($db);
@ -298,7 +298,7 @@ if ($object->id > 0)
} }
if ($object->type == $object::TYPE_CREDIT_NOTE) if ($object->type == $object::TYPE_CREDIT_NOTE)
{ {
if ($mode == 'bank-transfer') { if ($type == 'bank-transfer') {
$facusing = new FactureFournisseur($db); $facusing = new FactureFournisseur($db);
} else { } else {
$facusing = new Facture($db); $facusing = new Facture($db);
@ -316,7 +316,7 @@ if ($object->id > 0)
{ {
if ($i == 0) print ' '; if ($i == 0) print ' ';
else print ','; else print ',';
if ($mode == 'bank-transfer') { if ($type == 'bank-transfer') {
$facavoir = new FactureFournisseur($db); $facavoir = new FactureFournisseur($db);
} else { } else {
$facavoir = new Facture($db); $facavoir = new Facture($db);
@ -339,7 +339,7 @@ if ($object->id > 0)
// Discounts // Discounts
print '<tr><td>'.$langs->trans('Discounts').'</td><td colspan="3">'; print '<tr><td>'.$langs->trans('Discounts').'</td><td colspan="3">';
if ($mode == 'bank-transfer') { if ($type == 'bank-transfer') {
//$societe = new Fournisseur($db); //$societe = new Fournisseur($db);
//$result = $societe->fetch($object->socid); //$result = $societe->fetch($object->socid);
$thirdparty = $object->thirdparty; $thirdparty = $object->thirdparty;
@ -355,7 +355,7 @@ if ($object->id > 0)
print '</td></tr>'; print '</td></tr>';
// Label // Label
if ($mode == 'bank-transfer') { if ($type == 'bank-transfer') {
print '<tr>'; print '<tr>';
print '<td>'.$form->editfieldkey("Label", 'label', $object->label, $object, 0).'</td>'; print '<td>'.$form->editfieldkey("Label", 'label', $object->label, $object, 0).'</td>';
print '<td>'.$form->editfieldval("Label", 'label', $object->label, $object, 0).'</td>'; print '<td>'.$form->editfieldval("Label", 'label', $object->label, $object, 0).'</td>';
@ -417,7 +417,7 @@ if ($object->id > 0)
if ($object->type != $object::TYPE_CREDIT_NOTE) if ($object->type != $object::TYPE_CREDIT_NOTE)
{ {
$duedate = $object->date_lim_reglement; $duedate = $object->date_lim_reglement;
if ($mode == 'bank-transfer') { if ($type == 'bank-transfer') {
$duedate = $object->date_echeance; $duedate = $object->date_echeance;
} }
@ -470,7 +470,7 @@ if ($object->id > 0)
print '</tr>'; print '</tr>';
$title = 'CustomerIBAN'; $title = 'CustomerIBAN';
if ($mode == 'bank-transfer') { if ($type == 'bank-transfer') {
$title = 'SupplierIBAN'; $title = 'SupplierIBAN';
} }
print '<tr><td>'.$langs->trans($title).'</td><td colspan="3">'; print '<tr><td>'.$langs->trans($title).'</td><td colspan="3">';
@ -627,7 +627,7 @@ if ($object->id > 0)
print "\n<div class=\"tabsAction\">\n"; print "\n<div class=\"tabsAction\">\n";
$buttonlabel = $langs->trans("MakeWithdrawRequest"); $buttonlabel = $langs->trans("MakeWithdrawRequest");
if ($mode == 'bank-transfer') { if ($type == 'bank-transfer') {
$buttonlabel = $langs->trans("MakeBankTransferOrder"); $buttonlabel = $langs->trans("MakeBankTransferOrder");
} }
@ -643,6 +643,7 @@ if ($object->id > 0)
print '<form method="POST" action="">'; print '<form method="POST" action="">';
print '<input type="hidden" name="token" value="'.newToken().'" />'; print '<input type="hidden" name="token" value="'.newToken().'" />';
print '<input type="hidden" name="id" value="'.$object->id.'" />'; print '<input type="hidden" name="id" value="'.$object->id.'" />';
print '<input type="hidden" name="type" value="'.$type.'" />';
print '<input type="hidden" name="action" value="new" />'; print '<input type="hidden" name="action" value="new" />';
print '<label for="withdraw_request_amount">'.$langs->trans('BankTransferAmount').' </label>'; print '<label for="withdraw_request_amount">'.$langs->trans('BankTransferAmount').' </label>';
print '<input type="text" id="withdraw_request_amount" name="withdraw_request_amount" value="'.$remaintopaylesspendingdebit.'" size="9" />'; print '<input type="text" id="withdraw_request_amount" name="withdraw_request_amount" value="'.$remaintopaylesspendingdebit.'" size="9" />';
@ -667,7 +668,7 @@ if ($object->id > 0)
print "</div><br>\n"; print "</div><br>\n";
if ($mode == 'bank-transfer') { if ($type == 'bank-transfer') {
print '<div class="opacitymedium">'.$langs->trans("DoCreditTransferBeforePayments").'</div><br>'; print '<div class="opacitymedium">'.$langs->trans("DoCreditTransferBeforePayments").'</div><br>';
} else { } else {
print '<div class="opacitymedium">'.$langs->trans("DoStandingOrdersBeforePayments").'</div><br>'; print '<div class="opacitymedium">'.$langs->trans("DoStandingOrdersBeforePayments").'</div><br>';
@ -684,7 +685,7 @@ if ($object->id > 0)
print '<td class="left">'.$langs->trans("DateRequest").'</td>'; print '<td class="left">'.$langs->trans("DateRequest").'</td>';
print '<td class="center">'.$langs->trans("User").'</td>'; print '<td class="center">'.$langs->trans("User").'</td>';
print '<td class="center">'.$langs->trans("Amount").'</td>'; print '<td class="center">'.$langs->trans("Amount").'</td>';
if ($mode == 'bank-transfer') { if ($type == 'bank-transfer') {
print '<td class="center">'.$langs->trans("BankTransferReceipt").'</td>'; print '<td class="center">'.$langs->trans("BankTransferReceipt").'</td>';
} else { } else {
print '<td class="center">'.$langs->trans("WithdrawalReceipt").'</td>'; print '<td class="center">'.$langs->trans("WithdrawalReceipt").'</td>';
@ -696,7 +697,7 @@ if ($object->id > 0)
$sql = "SELECT pfd.rowid, pfd.traite, pfd.date_demande as date_demande,"; $sql = "SELECT pfd.rowid, pfd.traite, pfd.date_demande as date_demande,";
$sql .= " pfd.date_traite as date_traite, pfd.amount,"; $sql .= " pfd.date_traite as date_traite, pfd.amount,";
$sql .= " u.rowid as user_id, u.lastname, u.firstname, u.login"; $sql .= " u.rowid as user_id, u.email, u.lastname, u.firstname, u.login, u.statut as user_status";
$sql .= " FROM ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd"; $sql .= " FROM ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd";
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on pfd.fk_user_demande = u.rowid"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on pfd.fk_user_demande = u.rowid";
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."prelevement_bons as pb ON pb.rowid = pfd.fk_prelevement_bons"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."prelevement_bons as pb ON pb.rowid = pfd.fk_prelevement_bons";
@ -716,14 +717,29 @@ if ($object->id > 0)
{ {
$i = 0; $i = 0;
$tmpuser = new User($db);
$num = $db->num_rows($result); $num = $db->num_rows($result);
while ($i < $num) while ($i < $num)
{ {
$obj = $db->fetch_object($result_sql); $obj = $db->fetch_object($result_sql);
$tmpuser->id = $obj->user_id;
$tmpuser->login = $obj->login;
$tmpuser->ref = $obj->login;
$tmpuser->email = $obj->email;
$tmpuser->lastname = $obj->lastname;
$tmpuser->firstname = $obj->firstname;
$tmpuser->statut = $obj->user_status;
print '<tr class="oddeven">'; print '<tr class="oddeven">';
print '<td class="left">'.dol_print_date($db->jdate($obj->date_demande), 'dayhour')."</td>\n"; print '<td class="left">'.dol_print_date($db->jdate($obj->date_demande), 'dayhour')."</td>\n";
print '<td align="center"><a href="'.DOL_URL_ROOT.'/user/card.php?id='.$obj->user_id.'">'.img_object($langs->trans("ShowUser"), 'user').' '.$obj->login.'</a></td>';
print '<td align="center">';
print $tmpuser->getNomUrl(1, '', 0, 0, 0, 0, 'login');
print '</td>';
print '<td class="center">'.price($obj->amount).'</td>'; print '<td class="center">'.price($obj->amount).'</td>';
print '<td align="center">-</td>'; print '<td align="center">-</td>';
print '<td>&nbsp;</td>'; print '<td>&nbsp;</td>';
@ -731,7 +747,7 @@ if ($object->id > 0)
print '<td class="center">'.$langs->trans("OrderWaiting").'</td>'; print '<td class="center">'.$langs->trans("OrderWaiting").'</td>';
print '<td class="right">'; print '<td class="right">';
print '<a href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=delete&did='.$obj->rowid.'&mode='.$mode.'">'; print '<a href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=delete&did='.$obj->rowid.'&type='.$type.'">';
print img_delete(); print img_delete();
print '</a></td>'; print '</a></td>';
@ -749,7 +765,7 @@ if ($object->id > 0)
$sql = "SELECT pfd.rowid, pfd.traite, pfd.date_demande, pfd.date_traite, pfd.fk_prelevement_bons, pfd.amount,"; $sql = "SELECT pfd.rowid, pfd.traite, pfd.date_demande, pfd.date_traite, pfd.fk_prelevement_bons, pfd.amount,";
$sql .= " pb.ref,"; $sql .= " pb.ref,";
$sql .= " u.rowid as user_id, u.lastname, u.firstname, u.login"; $sql .= " u.rowid as user_id, u.email, u.lastname, u.firstname, u.login, u.statut as user_status";
$sql .= " FROM ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd"; $sql .= " FROM ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd";
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on pfd.fk_user_demande = u.rowid"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on pfd.fk_user_demande = u.rowid";
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."prelevement_bons as pb ON pb.rowid = pfd.fk_prelevement_bons"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."prelevement_bons as pb ON pb.rowid = pfd.fk_prelevement_bons";
@ -769,15 +785,27 @@ if ($object->id > 0)
$numclosed = $num; $numclosed = $num;
$i = 0; $i = 0;
$tmpuser = new User($db);
while ($i < $num) while ($i < $num)
{ {
$obj = $db->fetch_object($result); $obj = $db->fetch_object($result);
$tmpuser->id = $obj->user_id;
$tmpuser->login = $obj->login;
$tmpuser->ref = $obj->login;
$tmpuser->email = $obj->email;
$tmpuser->lastname = $obj->lastname;
$tmpuser->firstname = $obj->firstname;
$tmpuser->statut = $obj->user_status;
print '<tr class="oddeven">'; print '<tr class="oddeven">';
print '<td class="left">'.dol_print_date($db->jdate($obj->date_demande), 'day')."</td>\n"; print '<td class="left">'.dol_print_date($db->jdate($obj->date_demande), 'day')."</td>\n";
print '<td align="center"><a href="'.DOL_URL_ROOT.'/user/card.php?id='.$obj->user_id.'">'.img_object($langs->trans("ShowUser"), 'user').' '.$obj->login.'</a></td>'; print '<td align="center">';
print $tmpuser->getNomUrl(1, '', 0, 0, 0, 0, 'login');
print '</td>';
print '<td class="center">'.price($obj->amount).'</td>'; print '<td class="center">'.price($obj->amount).'</td>';

View File

@ -351,9 +351,10 @@ if ($action == 'new')
$now = dol_now(); $now = dol_now();
print $langs->trans("SelectChequeTransactionAndGenerate").'<br><br>'."\n"; print '<span class="opacitymedium">'.$langs->trans("SelectChequeTransactionAndGenerate").'</span><br><br>'."\n";
print '<form class="nocellnopadd" action="'.$_SERVER["PHP_SELF"].'" method="POST">'; print '<form class="nocellnopadd" action="'.$_SERVER["PHP_SELF"].'" method="POST">';
print '<input type="hidden" name="token" value="'.newToken().'">';
print '<input type="hidden" name="action" value="new">'; print '<input type="hidden" name="action" value="new">';
dol_fiche_head(); dol_fiche_head();

View File

@ -94,11 +94,11 @@ print '</td></tr></table></div><br>';
*/ */
$sql = "SELECT f.ref, f.rowid, f.total_ttc, f.fk_statut, f.paye, f.type,"; $sql = "SELECT f.ref, f.rowid, f.total_ttc, f.fk_statut, f.paye, f.type,";
$sql .= " pfd.date_demande, pfd.amount,"; $sql .= " pfd.date_demande, pfd.amount,";
$sql .= " s.nom as name, s.rowid as socid"; $sql .= " s.nom as name, s.email, s.rowid as socid";
$sql .= " FROM ".MAIN_DB_PREFIX."facture as f,"; $sql .= " FROM ".MAIN_DB_PREFIX."facture_fourn as f,";
$sql .= " ".MAIN_DB_PREFIX."societe as s"; $sql .= " ".MAIN_DB_PREFIX."societe as s";
if (!$user->rights->societe->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; if (!$user->rights->societe->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
$sql .= " , ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd"; $sql .= ", ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd";
$sql .= " WHERE s.rowid = f.fk_soc"; $sql .= " WHERE s.rowid = f.fk_soc";
$sql .= " AND f.entity IN (".getEntity('supplier_invoice').")"; $sql .= " AND f.entity IN (".getEntity('supplier_invoice').")";
$sql .= " AND f.total_ttc > 0"; $sql .= " AND f.total_ttc > 0";
@ -106,7 +106,9 @@ if (empty($conf->global->WITHDRAWAL_ALLOW_ANY_INVOICE_STATUS))
{ {
$sql .= " AND f.fk_statut = ".FactureFournisseur::STATUS_VALIDATED; $sql .= " AND f.fk_statut = ".FactureFournisseur::STATUS_VALIDATED;
} }
$sql .= " AND pfd.traite = 0 AND pfd.fk_facture_fourn = f.rowid"; $sql .= " AND pfd.traite = 0";
$sql .= " AND pfd.ext_payment_id IS NULL";
$sql .= " AND pfd.fk_facture_fourn = f.rowid";
if (!$user->rights->societe->client->voir && !$socid) $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".$user->id; if (!$user->rights->societe->client->voir && !$socid) $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".$user->id;
if ($socid) $sql .= " AND f.fk_soc = ".$socid; if ($socid) $sql .= " AND f.fk_soc = ".$socid;
@ -133,14 +135,15 @@ if ($resql)
$invoicestatic->type = $obj->type; $invoicestatic->type = $obj->type;
$alreadypayed = $invoicestatic->getSommePaiement(); $alreadypayed = $invoicestatic->getSommePaiement();
$thirdpartystatic->id = $obj->socid;
$thirdpartystatic->name = $obj->name;
$thirdpartystatic->email = $obj->email;
print '<tr class="oddeven"><td>'; print '<tr class="oddeven"><td>';
print $invoicestatic->getNomUrl(1, 'withdraw'); print $invoicestatic->getNomUrl(1, 'withdraw');
print '</td>'; print '</td>';
print '<td>'; print '<td>';
$thirdpartystatic->id = $obj->socid;
$thirdpartystatic->name = $obj->name;
print $thirdpartystatic->getNomUrl(1, 'customer'); print $thirdpartystatic->getNomUrl(1, 'customer');
print '</td>'; print '</td>';
@ -190,7 +193,8 @@ if ($result)
print"\n<!-- debut table -->\n"; print"\n<!-- debut table -->\n";
print '<div class="div-table-responsive-no-min">'; print '<div class="div-table-responsive-no-min">';
print '<table class="noborder centpercent">'; print '<table class="noborder centpercent">';
print '<tr class="liste_titre"><th>'.$langs->trans("LatestBankTransferReceipts", $limit).'</th>'; print '<tr class="liste_titre">';
print '<th>'.$langs->trans("LatestBankTransferReceipts", $limit).'</th>';
print '<th>'.$langs->trans("Date").'</th>'; print '<th>'.$langs->trans("Date").'</th>';
print '<th class="right">'.$langs->trans("Amount").'</th>'; print '<th class="right">'.$langs->trans("Amount").'</th>';
print '<th class="right">'.$langs->trans("Status").'</th>'; print '<th class="right">'.$langs->trans("Status").'</th>';
@ -217,7 +221,7 @@ if ($result)
$i++; $i++;
} }
} else { } else {
print '<tr><td class="opacitymedium">'.$langs->trans("None").'</td></tr>'; print '<tr><td class="opacitymedium" colspan="4">'.$langs->trans("None").'</td></tr>';
} }
print "</table></div><br>"; print "</table></div><br>";

View File

@ -28,6 +28,7 @@
require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
@ -118,7 +119,7 @@ class BonPrelevement extends CommonObject
/** /**
* Add invoice to withdrawal * Add invoice to withdrawal
* *
* @param int $facture_id id invoice to add * @param int $invoice_id id invoice to add
* @param int $client_id id invoice customer * @param int $client_id id invoice customer
* @param string $client_nom customer name * @param string $client_nom customer name
* @param int $amount amount of invoice * @param int $amount amount of invoice
@ -126,14 +127,16 @@ class BonPrelevement extends CommonObject
* @param string $code_guichet code of bank's office * @param string $code_guichet code of bank's office
* @param string $number bank account number * @param string $number bank account number
* @param string $number_key number key of account number * @param string $number_key number key of account number
* @param string $type 'debit-order' or 'bank-transfer'
* @return int >0 if OK, <0 if KO * @return int >0 if OK, <0 if KO
*/ */
public function AddFacture($facture_id, $client_id, $client_nom, $amount, $code_banque, $code_guichet, $number, $number_key) public function AddFacture($invoice_id, $client_id, $client_nom, $amount, $code_banque, $code_guichet, $number, $number_key, $type = 'debit-order')
{ {
// phpcs:enable // phpcs:enable
$result = 0; $result = 0;
$line_id = 0; $line_id = 0;
// Add lines
$result = $this->addline($line_id, $client_id, $client_nom, $amount, $code_banque, $code_guichet, $number, $number_key); $result = $this->addline($line_id, $client_id, $client_nom, $amount, $code_banque, $code_guichet, $number, $number_key);
if ($result == 0) if ($result == 0)
@ -141,10 +144,14 @@ class BonPrelevement extends CommonObject
if ($line_id > 0) if ($line_id > 0)
{ {
$sql = "INSERT INTO ".MAIN_DB_PREFIX."prelevement_facture ("; $sql = "INSERT INTO ".MAIN_DB_PREFIX."prelevement_facture (";
$sql .= "fk_facture"; if ($type != 'bank-transfer') {
$sql .= "fk_facture";
} else {
$sql .= "fk_facture_fourn";
}
$sql .= ",fk_prelevement_lignes"; $sql .= ",fk_prelevement_lignes";
$sql .= ") VALUES ("; $sql .= ") VALUES (";
$sql .= $facture_id; $sql .= $invoice_id;
$sql .= ", ".$line_id; $sql .= ", ".$line_id;
$sql .= ")"; $sql .= ")";
@ -153,15 +160,15 @@ class BonPrelevement extends CommonObject
$result = 0; $result = 0;
} else { } else {
$result = -1; $result = -1;
dol_syslog(get_class($this)."::AddFacture Erreur $result"); dol_syslog(get_class($this)."::AddFacture Error $result");
} }
} else { } else {
$result = -2; $result = -2;
dol_syslog(get_class($this)."::AddFacture Erreur $result"); dol_syslog(get_class($this)."::AddFacture Error $result");
} }
} else { } else {
$result = -3; $result = -3;
dol_syslog(get_class($this)."::AddFacture Erreur $result"); dol_syslog(get_class($this)."::AddFacture Error $result");
} }
return $result; return $result;
@ -645,7 +652,7 @@ class BonPrelevement extends CommonObject
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
/** /**
* Returns amount of withdrawal * Returns amount waiting for direct debit payment or credit transfer payment
* *
* @param string $mode 'direct-debit' or 'bank-transfer' * @param string $mode 'direct-debit' or 'bank-transfer'
* @return double <O if KO, Total amount * @return double <O if KO, Total amount
@ -662,11 +669,19 @@ class BonPrelevement extends CommonObject
$sql .= " FROM ".MAIN_DB_PREFIX."facture_fourn as f,"; $sql .= " FROM ".MAIN_DB_PREFIX."facture_fourn as f,";
} }
$sql .= " ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd"; $sql .= " ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd";
$sql .= " WHERE f.fk_statut = 1"; $sql .= " WHERE f.entity IN (".getEntity('invoice').")";
$sql .= " AND f.entity IN (".getEntity('invoice').")"; if (empty($conf->global->WITHDRAWAL_ALLOW_ANY_INVOICE_STATUS))
$sql .= " AND f.rowid = pfd.fk_facture"; {
$sql .= " AND f.fk_statut = ".Facture::STATUS_VALIDATED;
}
if ($mode != 'bank-transfer') {
$sql .= " AND f.rowid = pfd.fk_facture";
} else {
$sql .= " AND f.rowid = pfd.fk_facture_fourn";
}
$sql .= " AND f.paye = 0"; $sql .= " AND f.paye = 0";
$sql .= " AND pfd.traite = 0"; $sql .= " AND pfd.traite = 0";
$sql .= " AND pfd.ext_payment_id IS NULL";
$sql .= " AND f.total_ttc > 0"; $sql .= " AND f.total_ttc > 0";
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
@ -699,18 +714,18 @@ class BonPrelevement extends CommonObject
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
/** /**
* Get number of invoices to withdrawal * Get number of invoices to pay
* *
* @param string $mode 'direct-debit' or 'bank-transfer' * @param string $type 'direct-debit' or 'bank-transfer'
* @return int <O if KO, number of invoices if OK * @return int <O if KO, number of invoices if OK
*/ */
public function NbFactureAPrelever($mode = 'direct-debit') public function NbFactureAPrelever($type = 'direct-debit')
{ {
// phpcs:enable // phpcs:enable
global $conf; global $conf;
$sql = "SELECT count(f.rowid) as nb"; $sql = "SELECT count(f.rowid) as nb";
if ($mode == 'bank-transfer') { if ($type == 'bank-transfer') {
$sql .= " FROM ".MAIN_DB_PREFIX."facture_fourn as f"; $sql .= " FROM ".MAIN_DB_PREFIX."facture_fourn as f";
} else { } else {
$sql .= " FROM ".MAIN_DB_PREFIX."facture as f"; $sql .= " FROM ".MAIN_DB_PREFIX."facture as f";
@ -721,12 +736,13 @@ class BonPrelevement extends CommonObject
{ {
$sql .= " AND f.fk_statut = ".Facture::STATUS_VALIDATED; $sql .= " AND f.fk_statut = ".Facture::STATUS_VALIDATED;
} }
if ($mode == 'bank-transfer') { if ($type == 'bank-transfer') {
$sql .= " AND f.rowid = pfd.fk_facture_fourn"; $sql .= " AND f.rowid = pfd.fk_facture_fourn";
} else { } else {
$sql .= " AND f.rowid = pfd.fk_facture"; $sql .= " AND f.rowid = pfd.fk_facture";
} }
$sql .= " AND pfd.traite = 0"; $sql .= " AND pfd.traite = 0";
$sql .= " AND pfd.ext_payment_id IS NULL";
$sql .= " AND f.total_ttc > 0"; $sql .= " AND f.total_ttc > 0";
dol_syslog(get_class($this)."::NbFactureAPrelever"); dol_syslog(get_class($this)."::NbFactureAPrelever");
@ -748,18 +764,19 @@ class BonPrelevement extends CommonObject
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
/** /**
* Create a withdraw * Create a direct debit order or a credit transfer order
* TODO delete params banque and agence when not necesary * TODO delete params banque and agence when not necessary
* *
* @param int $banque dolibarr mysoc bank * @param int $banque dolibarr mysoc bank
* @param int $agence dolibarr mysoc bank office (guichet) * @param int $agence dolibarr mysoc bank office (guichet)
* @param string $mode real=do action, simu=test only * @param string $mode real=do action, simu=test only
* @param string $format FRST, RCUR or ALL * @param string $format FRST, RCUR or ALL
* @param string $executiondate Date to execute the transfer * @param string $executiondate Date to execute the transfer
* @param int $notrigger Disable triggers * @param int $notrigger Disable triggers
* @return int <0 if KO, nbre of invoice withdrawed if OK * @param string $type 'direct-debit' or 'bank-transfer'
* @return int <0 if KO, No of invoice included into file if OK
*/ */
public function Create($banque = 0, $agence = 0, $mode = 'real', $format = 'ALL', $executiondate = '', $notrigger = 0) public function create($banque = 0, $agence = 0, $mode = 'real', $format = 'ALL', $executiondate = '', $notrigger = 0, $type = 'direct-debit')
{ {
// phpcs:enable // phpcs:enable
global $conf, $langs, $user; global $conf, $langs, $user;
@ -769,7 +786,12 @@ class BonPrelevement extends CommonObject
require_once DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php"; require_once DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php";
require_once DOL_DOCUMENT_ROOT."/societe/class/societe.class.php"; require_once DOL_DOCUMENT_ROOT."/societe/class/societe.class.php";
if (empty($format)) return 'ErrorBadParametersForDirectDebitFileCreate'; if ($type != 'bank-transfer') {
if (empty($format)) {
$this->error = 'ErrorBadParametersForDirectDebitFileCreate';
return -1;
}
}
$error = 0; $error = 0;
@ -796,17 +818,26 @@ class BonPrelevement extends CommonObject
$sql .= ", pfd.code_banque, pfd.code_guichet, pfd.number, pfd.cle_rib"; $sql .= ", pfd.code_banque, pfd.code_guichet, pfd.number, pfd.cle_rib";
$sql .= ", pfd.amount"; $sql .= ", pfd.amount";
$sql .= ", s.nom as name"; $sql .= ", s.nom as name";
$sql .= " FROM ".MAIN_DB_PREFIX."facture as f"; if ($type != 'bank-transfer') {
$sql .= " FROM ".MAIN_DB_PREFIX."facture as f";
} else {
$sql .= " FROM ".MAIN_DB_PREFIX."facture_fourn as f";
}
$sql .= ", ".MAIN_DB_PREFIX."societe as s"; $sql .= ", ".MAIN_DB_PREFIX."societe as s";
$sql .= ", ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd"; $sql .= ", ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd";
$sql .= " WHERE f.rowid = pfd.fk_facture"; $sql .= " WHERE f.entity IN (".getEntity('invoice').')';
$sql .= " AND f.entity IN (".getEntity('invoice').')'; if ($type != 'bank-transfer') {
$sql .= " AND f.rowid = pfd.fk_facture";
} else {
$sql .= " AND f.rowid = pfd.fk_facture_fourn";
}
$sql .= " AND s.rowid = f.fk_soc"; $sql .= " AND s.rowid = f.fk_soc";
//if ($banque || $agence) $sql.= " AND s.rowid = sr.fk_soc"; //if ($banque || $agence) $sql.= " AND s.rowid = sr.fk_soc";
$sql .= " AND f.fk_statut = 1"; $sql .= " AND f.fk_statut = 1";
$sql .= " AND f.paye = 0"; $sql .= " AND f.paye = 0";
$sql .= " AND pfd.traite = 0"; $sql .= " AND pfd.traite = 0";
$sql .= " AND f.total_ttc > 0"; $sql .= " AND f.total_ttc > 0";
$sql .= " AND pfd.ext_payment_id IS NULL";
//if ($banque) $sql.= " AND sr.code_banque = '".$conf->global->PRELEVEMENT_CODE_BANQUE."'"; //if ($banque) $sql.= " AND sr.code_banque = '".$conf->global->PRELEVEMENT_CODE_BANQUE."'";
//if ($agence) $sql.= " AND sr.code_guichet = '".$conf->global->PRELEVEMENT_CODE_GUICHET."'"; //if ($agence) $sql.= " AND sr.code_guichet = '".$conf->global->PRELEVEMENT_CODE_GUICHET."'";
@ -822,6 +853,12 @@ class BonPrelevement extends CommonObject
{ {
$row = $this->db->fetch_row($resql); $row = $this->db->fetch_row($resql);
$factures[$i] = $row; // All fields $factures[$i] = $row; // All fields
if ($row[7] == 0) {
$error++;
dol_syslog(__METHOD__."::Read invoices error Found a null invoice", LOG_ERR);
$this->invoice_in_error[$row[0]] = "Error for invoice id ".$row[0].", found a null amount";
break;
}
$i++; $i++;
} }
$this->db->free($resql); $this->db->free($resql);
@ -837,15 +874,19 @@ class BonPrelevement extends CommonObject
require_once DOL_DOCUMENT_ROOT.'/societe/class/companybankaccount.class.php'; require_once DOL_DOCUMENT_ROOT.'/societe/class/companybankaccount.class.php';
$soc = new Societe($this->db); $soc = new Societe($this->db);
// Check RIB // Check BAN
$i = 0; $i = 0;
dol_syslog(__METHOD__."::Check RIB", LOG_DEBUG); dol_syslog(__METHOD__."::Check BAN", LOG_DEBUG);
if (count($factures) > 0) if (count($factures) > 0)
{ {
foreach ($factures as $key => $fac) foreach ($factures as $key => $fac)
{ {
$fact = new Facture($this->db); if ($type != 'bank-transfer') {
$fact = new Facture($this->db);
} else {
$fact = new FactureFournisseur($this->db);
}
$resfetch = $fact->fetch($fac[0]); $resfetch = $fact->fetch($fac[0]);
if ($resfetch >= 0) // Field 0 of $fac is rowid of invoice if ($resfetch >= 0) // Field 0 of $fac is rowid of invoice
{ {
@ -854,13 +895,15 @@ class BonPrelevement extends CommonObject
$bac = new CompanyBankAccount($this->db); $bac = new CompanyBankAccount($this->db);
$bac->fetch(0, $soc->id); $bac->fetch(0, $soc->id);
if ($format == 'FRST' && $bac->frstrecur != 'FRST') if ($type != 'bank-transfer') {
{ if ($format == 'FRST' && $bac->frstrecur != 'FRST')
continue; {
} continue;
if ($format == 'RCUR' && ($bac->frstrecur != 'RCUR' && $bac->frstrecur != 'RECUR')) }
{ if ($format == 'RCUR' && ($bac->frstrecur != 'RCUR' && $bac->frstrecur != 'RECUR'))
continue; {
continue;
}
} }
if ($bac->verif() >= 1) if ($bac->verif() >= 1)
@ -871,26 +914,26 @@ class BonPrelevement extends CommonObject
$i++; $i++;
//dol_syslog(__METHOD__."::RIB is ok", LOG_DEBUG); //dol_syslog(__METHOD__."::RIB is ok", LOG_DEBUG);
} else { } else {
dol_syslog(__METHOD__."::Check RIB Error on default bank number IBAN/BIC for thirdparty reported by verif() ".$fact->socid." ".$soc->name, LOG_WARNING); dol_syslog(__METHOD__."::Check BAN Error on default bank number IBAN/BIC for thirdparty reported by verif() ".$fact->socid." ".$soc->name, LOG_WARNING);
$this->invoice_in_error[$fac[0]] = "Error on default bank number IBAN/BIC for invoice ".$fact->getNomUrl(0)." for thirdparty ".$soc->getNomUrl(0); $this->invoice_in_error[$fac[0]] = "Error on default bank number IBAN/BIC for invoice ".$fact->getNomUrl(0)." for thirdparty ".$soc->getNomUrl(0);
$this->thirdparty_in_error[$soc->id] = "Error on default bank number IBAN/BIC for invoice ".$fact->getNomUrl(0)." for thirdparty ".$soc->getNomUrl(0); $this->thirdparty_in_error[$soc->id] = "Error on default bank number IBAN/BIC for invoice ".$fact->getNomUrl(0)." for thirdparty ".$soc->getNomUrl(0);
} }
} else { } else {
dol_syslog(__METHOD__."::Check RIB Failed to read company", LOG_WARNING); dol_syslog(__METHOD__."::Check BAN Failed to read company", LOG_WARNING);
} }
} else { } else {
dol_syslog(__METHOD__."::Check RIB Failed to read invoice", LOG_WARNING); dol_syslog(__METHOD__."::Check BAN Failed to read invoice", LOG_WARNING);
} }
} }
} else { } else {
dol_syslog(__METHOD__."::Check RIB No invoice to process", LOG_WARNING); dol_syslog(__METHOD__."::Check BAN No invoice to process", LOG_WARNING);
} }
} }
$ok = 0; $ok = 0;
// Withdraw invoices in factures_prev array // Withdraw invoices in factures_prev array
$out = count($factures_prev)." invoices will be withdrawn."; $out = count($factures_prev)." invoices will be included.";
//print $out."\n"; //print $out."\n";
dol_syslog($out); dol_syslog($out);
@ -918,14 +961,14 @@ class BonPrelevement extends CommonObject
{ {
/* /*
* We are in real mode. * We are in real mode.
* We create withdraw receipt and build withdraw into disk * We create order and build file into disk
*/ */
$this->db->begin(); $this->db->begin();
$now = dol_now(); $now = dol_now();
/* /*
* Traitements * Process order generation
*/ */
if (!$error) if (!$error)
{ {
@ -937,7 +980,7 @@ class BonPrelevement extends CommonObject
$sql .= " AND entity = ".$conf->entity; $sql .= " AND entity = ".$conf->entity;
$sql .= " ORDER BY ref DESC LIMIT 1"; $sql .= " ORDER BY ref DESC LIMIT 1";
dol_syslog(get_class($this)."::Create sql=".$sql, LOG_DEBUG); dol_syslog(get_class($this)."::create sql=".$sql, LOG_DEBUG);
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
if ($resql) if ($resql)
@ -945,18 +988,23 @@ class BonPrelevement extends CommonObject
$row = $this->db->fetch_row($resql); $row = $this->db->fetch_row($resql);
$ref = "T".$ref.str_pad(dol_substr("00".intval($row[0]) + 1, 0, 2), 2, "0", STR_PAD_LEFT); $ref = "T".$ref.str_pad(dol_substr("00".intval($row[0]) + 1, 0, 2), 2, "0", STR_PAD_LEFT);
$dir = $conf->prelevement->dir_output.'/receipts'; if ($type != 'bank-transfer') {
$dir = $conf->prelevement->dir_output.'/receipts';
} else {
$dir = $conf->paymentbybanktransfer->dir_output.'/receipts';
}
if (!is_dir($dir)) dol_mkdir($dir); if (!is_dir($dir)) dol_mkdir($dir);
$this->filename = $dir.'/'.$ref.'.xml'; $this->filename = $dir.'/'.$ref.'.xml';
// Create withdraw receipt in database // Create withdraw receipt in database
$sql = "INSERT INTO ".MAIN_DB_PREFIX."prelevement_bons ("; $sql = "INSERT INTO ".MAIN_DB_PREFIX."prelevement_bons (";
$sql .= " ref, entity, datec"; $sql .= " ref, entity, datec, type";
$sql .= ") VALUES ("; $sql .= ") VALUES (";
$sql .= "'".$this->db->escape($ref)."'"; $sql .= "'".$this->db->escape($ref)."'";
$sql .= ", ".$conf->entity; $sql .= ", ".$conf->entity;
$sql .= ", '".$this->db->idate($now)."'"; $sql .= ", '".$this->db->idate($now)."'";
$sql .= ", '".($type == 'bank-transfer' ? 'bank-transfer' : 'debit-order')."'";
$sql .= ")"; $sql .= ")";
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
@ -987,10 +1035,13 @@ class BonPrelevement extends CommonObject
// Fetch invoice // Fetch invoice
$fact = new Facture($this->db); $fact = new Facture($this->db);
$fact->fetch($fac[0]); $fact->fetch($fac[0]);
/* /*
* Add standing order * Add standing order
* *
* * $fac[0] : invoice_id
* $fac[1] : ???
* $fac[2] : third party id
* $fac[3] : banque * $fac[3] : banque
* $fac[4] : guichet * $fac[4] : guichet
* $fac[5] : number * $fac[5] : number
@ -999,7 +1050,8 @@ class BonPrelevement extends CommonObject
* $fac[8] : client nom * $fac[8] : client nom
* $fac[2] : client id * $fac[2] : client id
*/ */
$ri = $this->AddFacture($fac[0], $fac[2], $fac[8], $fac[7], $fac[3], $fac[4], $fac[5], $fac[6]);
$ri = $this->AddFacture($fac[0], $fac[2], $fac[8], $fac[7], $fac[3], $fac[4], $fac[5], $fac[6], $type);
if ($ri <> 0) if ($ri <> 0)
{ {
$error++; $error++;
@ -1012,13 +1064,12 @@ class BonPrelevement extends CommonObject
$sql .= ", fk_prelevement_bons = ".$this->id; $sql .= ", fk_prelevement_bons = ".$this->id;
$sql .= " WHERE rowid = ".$fac[1]; $sql .= " WHERE rowid = ".$fac[1];
dol_syslog(__METHOD__."::Update Orders::Sql=".$sql, LOG_DEBUG);
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
if (!$resql) if (!$resql)
{ {
$error++; $error++;
dol_syslog(__METHOD__."::Update Orders::Error=".$this->db->error(), LOG_ERR); dol_syslog(__METHOD__."::Update Error=".$this->db->error(), LOG_ERR);
} }
} }
} }
@ -1027,11 +1078,10 @@ class BonPrelevement extends CommonObject
if (!$error) if (!$error)
{ {
/* /*
* Create direct debit order in a XML file * Create file of direct debit order or credit transfer into a XML file
*/ */
dol_syslog(__METHOD__."::Init withdraw receipt for ".count($factures_prev)." invoices", LOG_DEBUG); dol_syslog(__METHOD__."::Init direct debit file for ".count($factures_prev)." invoices", LOG_DEBUG);
if (count($factures_prev) > 0) if (count($factures_prev) > 0)
{ {
@ -1058,14 +1108,15 @@ class BonPrelevement extends CommonObject
$this->context['factures_prev'] = $factures_prev; $this->context['factures_prev'] = $factures_prev;
// Generation of SEPA file $this->filename // Generation of SEPA file $this->filename
$this->generate($format, $executiondate); // This also the the property $this->total that is included into file
$result = $this->generate($format, $executiondate, $type);
} }
dol_syslog(__METHOD__."::End withdraw receipt, file ".$this->filename, LOG_DEBUG); dol_syslog(__METHOD__."::End withdraw receipt, file ".$this->filename, LOG_DEBUG);
} }
//var_dump($factures_prev);exit; //var_dump($factures_prev);exit;
/* /*
* Update total * Update total defined after generation of file
*/ */
$sql = "UPDATE ".MAIN_DB_PREFIX."prelevement_bons"; $sql = "UPDATE ".MAIN_DB_PREFIX."prelevement_bons";
$sql .= " SET amount = ".price2num($this->total); $sql .= " SET amount = ".price2num($this->total);
@ -1081,8 +1132,13 @@ class BonPrelevement extends CommonObject
if (!$error && !$notrigger) if (!$error && !$notrigger)
{ {
$triggername = 'DIRECT_DEBIT_ORDER_CREATE';
if ($type != 'bank-transfer') {
$triggername = 'CREDIT_TRANSFER_ORDER_CREATE';
}
// Call trigger // Call trigger
$result = $this->call_trigger('DIRECT_DEBIT_ORDER_CREATE', $user); $result = $this->call_trigger($triggername, $user);
if ($result < 0) $error++; if ($result < 0) $error++;
// End call triggers // End call triggers
} }
@ -1332,17 +1388,18 @@ class BonPrelevement extends CommonObject
/** /**
* Generate a withdrawal file. * Generate a direct debit or credit transfer file.
* Generation Formats: * Generation Formats:
* - Europe: SEPA (France: CFONB no more supported, Spain: AEB19 if external module EsAEB is enabled) * - Europe: SEPA (France: CFONB no more supported, Spain: AEB19 if external module EsAEB is enabled)
* - Others countries: Warning message * - Others countries: Warning message
* File is generated with name this->filename * File is generated with name this->filename
* *
* @param string $format FRST, RCUR or ALL * @param string $format FRST, RCUR or ALL
* @param string $executiondate Date to execute transfer * @param string $executiondate Date to execute transfer
* @return int 0 if OK, <0 if KO * @param string $type 'direct-debit' or 'credit-transfer'
* @return int >=0 if OK, <0 if KO
*/ */
public function generate($format = 'ALL', $executiondate = '') public function generate($format = 'ALL', $executiondate = '', $type = 'direct-debit')
{ {
global $conf, $langs, $mysoc; global $conf, $langs, $mysoc;
@ -1350,7 +1407,7 @@ class BonPrelevement extends CommonObject
$result = 0; $result = 0;
dol_syslog(get_class($this)."::generate build file ".$this->filename); dol_syslog(get_class($this)."::generate build file=".$this->filename." type=".$type);
$this->file = fopen($this->filename, "w"); $this->file = fopen($this->filename, "w");
if (empty($this->file)) if (empty($this->file))
@ -1360,159 +1417,197 @@ class BonPrelevement extends CommonObject
} }
$found = 0; $found = 0;
$this->total = 0;
// Build file for European countries // Build file for European countries
if ($mysoc->isInEEC()) if ($mysoc->isInEEC())
{ {
$found++; $found++;
/** if ($type == 'bank-transfer') {
* SECTION CREATION FICHIER SEPA print 'TODO';
*/ exit;
// SEPA Initialisation } else {
$CrLf = "\n"; /**
* SECTION CREATION FICHIER SEPA
*/
// SEPA Initialisation
$CrLf = "\n";
$now = dol_now(); $now = dol_now();
$dateTime_ECMA = dol_print_date($now, '%Y-%m-%dT%H:%M:%S'); $dateTime_ECMA = dol_print_date($now, '%Y-%m-%dT%H:%M:%S');
$date_actu = $now; $date_actu = $now;
if (!empty($executiondate)) $date_actu = $executiondate; if (!empty($executiondate)) $date_actu = $executiondate;
$dateTime_YMD = dol_print_date($date_actu, '%Y%m%d'); $dateTime_YMD = dol_print_date($date_actu, '%Y%m%d');
$dateTime_YMDHMS = dol_print_date($date_actu, '%Y%m%d%H%M%S'); $dateTime_YMDHMS = dol_print_date($date_actu, '%Y%m%d%H%M%S');
$fileDebiteurSection = ''; $fileDebiteurSection = '';
$fileEmetteurSection = ''; $fileEmetteurSection = '';
$i = 0; $i = 0;
$this->total = 0;
/* /*
* section Debiteur (sepa Debiteurs bloc lines) * Section Debitor (sepa Debiteurs bloc lines)
*/ */
$sql = "SELECT soc.code_client as code, soc.address, soc.zip, soc.town, c.code as country_code,"; $sql = "SELECT soc.code_client as code, soc.address, soc.zip, soc.town, c.code as country_code,";
$sql .= " pl.client_nom as nom, pl.code_banque as cb, pl.code_guichet as cg, pl.number as cc, pl.amount as somme,"; $sql .= " pl.client_nom as nom, pl.code_banque as cb, pl.code_guichet as cg, pl.number as cc, pl.amount as somme,";
$sql .= " f.ref as fac, pf.fk_facture as idfac, rib.datec, rib.iban_prefix as iban, rib.bic as bic, rib.rowid as drum, rib.rum, rib.date_rum"; $sql .= " f.ref as fac, pf.fk_facture as idfac, rib.datec, rib.iban_prefix as iban, rib.bic as bic, rib.rowid as drum, rib.rum, rib.date_rum";
$sql .= " FROM"; $sql .= " FROM";
$sql .= " ".MAIN_DB_PREFIX."prelevement_lignes as pl,"; $sql .= " ".MAIN_DB_PREFIX."prelevement_lignes as pl,";
$sql .= " ".MAIN_DB_PREFIX."facture as f,"; $sql .= " ".MAIN_DB_PREFIX."facture as f,";
$sql .= " ".MAIN_DB_PREFIX."prelevement_facture as pf,"; $sql .= " ".MAIN_DB_PREFIX."prelevement_facture as pf,";
$sql .= " ".MAIN_DB_PREFIX."societe as soc,"; $sql .= " ".MAIN_DB_PREFIX."societe as soc,";
$sql .= " ".MAIN_DB_PREFIX."c_country as c,"; $sql .= " ".MAIN_DB_PREFIX."c_country as c,";
$sql .= " ".MAIN_DB_PREFIX."societe_rib as rib"; $sql .= " ".MAIN_DB_PREFIX."societe_rib as rib";
$sql .= " WHERE pl.fk_prelevement_bons = ".$this->id; $sql .= " WHERE pl.fk_prelevement_bons = ".$this->id;
$sql .= " AND pl.rowid = pf.fk_prelevement_lignes"; $sql .= " AND pl.rowid = pf.fk_prelevement_lignes";
$sql .= " AND pf.fk_facture = f.rowid"; $sql .= " AND pf.fk_facture = f.rowid";
$sql .= " AND soc.fk_pays = c.rowid"; $sql .= " AND soc.fk_pays = c.rowid";
$sql .= " AND soc.rowid = f.fk_soc"; $sql .= " AND soc.rowid = f.fk_soc";
$sql .= " AND rib.fk_soc = f.fk_soc"; $sql .= " AND rib.fk_soc = f.fk_soc";
$sql .= " AND rib.default_rib = 1"; $sql .= " AND rib.default_rib = 1";
$sql .= " AND rib.type = 'ban'"; $sql .= " AND rib.type = 'ban'";
//print $sql; //print $sql;
// Define $fileDebiteurSection. One section DrctDbtTxInf per invoice. // Define $fileDebiteurSection. One section DrctDbtTxInf per invoice.
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
if ($resql) if ($resql)
{
$num = $this->db->num_rows($resql);
while ($i < $num)
{ {
$obj = $this->db->fetch_object($resql); $num = $this->db->num_rows($resql);
$daterum = (!empty($obj->date_rum)) ? $this->db->jdate($obj->date_rum) : $this->db->jdate($obj->datec); while ($i < $num)
$fileDebiteurSection .= $this->EnregDestinataireSEPA($obj->code, $obj->nom, $obj->address, $obj->zip, $obj->town, $obj->country_code, $obj->cb, $obj->cg, $obj->cc, $obj->somme, $obj->fac, $obj->idfac, $obj->iban, $obj->bic, $daterum, $obj->drum, $obj->rum); {
$this->total = $this->total + $obj->somme; $obj = $this->db->fetch_object($resql);
$i++; $daterum = (!empty($obj->date_rum)) ? $this->db->jdate($obj->date_rum) : $this->db->jdate($obj->datec);
$fileDebiteurSection .= $this->EnregDestinataireSEPA($obj->code, $obj->nom, $obj->address, $obj->zip, $obj->town, $obj->country_code, $obj->cb, $obj->cg, $obj->cc, $obj->somme, $obj->fac, $obj->idfac, $obj->iban, $obj->bic, $daterum, $obj->drum, $obj->rum);
$this->total = $this->total + $obj->somme;
$i++;
}
$nbtotalDrctDbtTxInf = $i;
} else {
fputs($this->file, 'ERROR DEBITOR '.$sql.$CrLf); // DEBITOR = Customers
$result = -2;
} }
$nbtotalDrctDbtTxInf = $i;
} else {
fputs($this->file, 'ERROR DEBITOR '.$sql.$CrLf); // DEBITOR = Customers
$result = -2;
}
// Define $fileEmetteurSection. Start of bloc PmtInf. Will contains all DrctDbtTxInf // Define $fileEmetteurSection. Start of bloc PmtInf. Will contains all DrctDbtTxInf
if ($result != -2) if ($result != -2)
{ {
$fileEmetteurSection .= $this->EnregEmetteurSEPA($conf, $date_actu, $nbtotalDrctDbtTxInf, $this->total, $CrLf, $format); $fileEmetteurSection .= $this->EnregEmetteurSEPA($conf, $date_actu, $nbtotalDrctDbtTxInf, $this->total, $CrLf, $format);
} else { } else {
fputs($this->file, 'ERROR CREDITOR'.$CrLf); // CREDITOR = My company fputs($this->file, 'ERROR CREDITOR'.$CrLf); // CREDITOR = My company
} }
/** /**
* SECTION CREATION SEPA FILE * SECTION CREATION SEPA FILE
*/ */
// SEPA File Header // SEPA File Header
fputs($this->file, '<'.'?xml version="1.0" encoding="UTF-8" standalone="yes"?'.'>'.$CrLf); fputs($this->file, '<'.'?xml version="1.0" encoding="UTF-8" standalone="yes"?'.'>'.$CrLf);
fputs($this->file, '<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'.$CrLf); fputs($this->file, '<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'.$CrLf);
fputs($this->file, ' <CstmrDrctDbtInitn>'.$CrLf); fputs($this->file, ' <CstmrDrctDbtInitn>'.$CrLf);
// SEPA Group header // SEPA Group header
fputs($this->file, ' <GrpHdr>'.$CrLf); fputs($this->file, ' <GrpHdr>'.$CrLf);
fputs($this->file, ' <MsgId>'.('PREL'.$dateTime_YMD.'/REF'.$this->id).'</MsgId>'.$CrLf); fputs($this->file, ' <MsgId>'.('PREL'.$dateTime_YMD.'/REF'.$this->id).'</MsgId>'.$CrLf);
fputs($this->file, ' <CreDtTm>'.$dateTime_ECMA.'</CreDtTm>'.$CrLf); fputs($this->file, ' <CreDtTm>'.$dateTime_ECMA.'</CreDtTm>'.$CrLf);
fputs($this->file, ' <NbOfTxs>'.$i.'</NbOfTxs>'.$CrLf); fputs($this->file, ' <NbOfTxs>'.$i.'</NbOfTxs>'.$CrLf);
fputs($this->file, ' <CtrlSum>'.$this->total.'</CtrlSum>'.$CrLf); fputs($this->file, ' <CtrlSum>'.$this->total.'</CtrlSum>'.$CrLf);
fputs($this->file, ' <InitgPty>'.$CrLf); fputs($this->file, ' <InitgPty>'.$CrLf);
fputs($this->file, ' <Nm>'.strtoupper(dol_string_unaccent($this->raison_sociale)).'</Nm>'.$CrLf); fputs($this->file, ' <Nm>'.strtoupper(dol_string_unaccent($this->raison_sociale)).'</Nm>'.$CrLf);
fputs($this->file, ' <Id>'.$CrLf); fputs($this->file, ' <Id>'.$CrLf);
fputs($this->file, ' <PrvtId>'.$CrLf); fputs($this->file, ' <PrvtId>'.$CrLf);
fputs($this->file, ' <Othr>'.$CrLf); fputs($this->file, ' <Othr>'.$CrLf);
fputs($this->file, ' <Id>'.$conf->global->PRELEVEMENT_ICS.'</Id>'.$CrLf); fputs($this->file, ' <Id>'.$conf->global->PRELEVEMENT_ICS.'</Id>'.$CrLf);
fputs($this->file, ' </Othr>'.$CrLf); fputs($this->file, ' </Othr>'.$CrLf);
fputs($this->file, ' </PrvtId>'.$CrLf); fputs($this->file, ' </PrvtId>'.$CrLf);
fputs($this->file, ' </Id>'.$CrLf); fputs($this->file, ' </Id>'.$CrLf);
fputs($this->file, ' </InitgPty>'.$CrLf); fputs($this->file, ' </InitgPty>'.$CrLf);
fputs($this->file, ' </GrpHdr>'.$CrLf); fputs($this->file, ' </GrpHdr>'.$CrLf);
// SEPA File Emetteur // SEPA File Emetteur
if ($result != -2) if ($result != -2)
{ fputs($this-> file, $fileEmetteurSection); } { fputs($this-> file, $fileEmetteurSection); }
// SEPA File Debiteurs // SEPA File Debiteurs
if ($result != -2) if ($result != -2)
{ fputs($this-> file, $fileDebiteurSection); } { fputs($this-> file, $fileDebiteurSection); }
// SEPA FILE FOOTER // SEPA FILE FOOTER
fputs($this->file, ' </PmtInf>'.$CrLf); fputs($this->file, ' </PmtInf>'.$CrLf);
fputs($this->file, ' </CstmrDrctDbtInitn>'.$CrLf); fputs($this->file, ' </CstmrDrctDbtInitn>'.$CrLf);
fputs($this->file, '</Document>'.$CrLf); fputs($this->file, '</Document>'.$CrLf);
}
} }
// Build file for Other Countries with unknow format // Build file for Other Countries with unknow format
if (!$found) if (!$found)
{ {
$this->total = 0; if ($type == 'bank-transfer') {
$sql = "SELECT pl.amount"; $sql = "SELECT pl.amount";
$sql .= " FROM"; $sql .= " FROM";
$sql .= " ".MAIN_DB_PREFIX."prelevement_lignes as pl,"; $sql .= " ".MAIN_DB_PREFIX."prelevement_lignes as pl,";
$sql .= " ".MAIN_DB_PREFIX."facture as f,"; $sql .= " ".MAIN_DB_PREFIX."facture_fourn as f,";
$sql .= " ".MAIN_DB_PREFIX."prelevement_facture as pf"; $sql .= " ".MAIN_DB_PREFIX."prelevement_facture as pf";
$sql .= " WHERE pl.fk_prelevement_bons = ".$this->id; $sql .= " WHERE pl.fk_prelevement_bons = ".$this->id;
$sql .= " AND pl.rowid = pf.fk_prelevement_lignes"; $sql .= " AND pl.rowid = pf.fk_prelevement_lignes";
$sql .= " AND pf.fk_facture = f.rowid"; $sql .= " AND pf.fk_facture_fourn = f.rowid";
//Lines // Lines
$i = 0; $i = 0;
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
if ($resql) if ($resql)
{
$num = $this->db->num_rows($resql);
while ($i < $num)
{ {
$obj = $this->db->fetch_object($resql); $num = $this->db->num_rows($resql);
$this->total = $this->total + $obj->amount;
$i++; while ($i < $num)
{
$obj = $this->db->fetch_object($resql);
$this->total = $this->total + $obj->amount;
// TODO Write record into file
$i++;
}
} else {
$result = -2;
} }
} else { } else {
$result = -2; $sql = "SELECT pl.amount";
$sql .= " FROM";
$sql .= " ".MAIN_DB_PREFIX."prelevement_lignes as pl,";
$sql .= " ".MAIN_DB_PREFIX."facture as f,";
$sql .= " ".MAIN_DB_PREFIX."prelevement_facture as pf";
$sql .= " WHERE pl.fk_prelevement_bons = ".$this->id;
$sql .= " AND pl.rowid = pf.fk_prelevement_lignes";
$sql .= " AND pf.fk_facture = f.rowid";
// Lines
$i = 0;
$resql = $this->db->query($sql);
if ($resql)
{
$num = $this->db->num_rows($resql);
while ($i < $num)
{
$obj = $this->db->fetch_object($resql);
$this->total = $this->total + $obj->amount;
// TODO Write record into file
$i++;
}
} else {
$result = -2;
}
} }
$langs->load('withdrawals'); $langs->load('withdrawals');
// TODO Add here code to generate a generic file // TODO Add here code to generate a generic file
fputs($this->file, $langs->trans('WithdrawalFileNotCapable', $mysoc->country_code)); fputs($this->file, $langs->transnoentitiesnoconv('WithdrawalFileNotCapable', $mysoc->country_code));
} }
fclose($this->file); fclose($this->file);
if (!empty($conf->global->MAIN_UMASK)) if (!empty($conf->global->MAIN_UMASK)) {
@chmod($this->file, octdec($conf->global->MAIN_UMASK)); @chmod($this->file, octdec($conf->global->MAIN_UMASK));
return $result; }
return $result;
} }

View File

@ -1,11 +1,11 @@
<?php <?php
/* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2010-2015 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2010-2020 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com> * Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
* Copyright (C) 2010-2012 Juanjo Menent <jmenent@2byte.es> * Copyright (C) 2010-2012 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2018 Nicolas ZABOURI <info@inovea-conseil.com> * Copyright (C) 2018 Nicolas ZABOURI <info@inovea-conseil.com>
* Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr> * Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
* Copyright (C) 2019 Markus Welters <markus@welters.de> * Copyright (C) 2019 Markus Welters <markus@welters.de>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -24,7 +24,7 @@
/** /**
* \file htdocs/compta/prelevement/create.php * \file htdocs/compta/prelevement/create.php
* \ingroup prelevement * \ingroup prelevement
* \brief Prelevement creation page * \brief Page to create a direct debit order or a credit transfer order
*/ */
require '../../main.inc.php'; require '../../main.inc.php';
@ -77,11 +77,17 @@ if (empty($reshook))
} }
if ($action == 'create') if ($action == 'create')
{ {
// $conf->global->PRELEVEMENT_CODE_BANQUE and $conf->global->PRELEVEMENT_CODE_GUICHET should be empty $delayindays = 0;
if ($type != 'bank-transfer') {
$conf->global->PRELEVEMENT_ADDDAYS;
} else {
$conf->global->PAYMENTBYBANKTRANSFER_ADDDAYS;
}
$bprev = new BonPrelevement($db); $bprev = new BonPrelevement($db);
$executiondate = dol_mktime(0, 0, 0, GETPOST('remonth'), (GETPOST('reday') + $conf->global->PRELEVEMENT_ADDDAYS), GETPOST('reyear')); $executiondate = dol_mktime(0, 0, 0, GETPOST('remonth', 'int'), (GETPOST('reday', 'int') + $delayindays), GETPOST('reyear', 'int'));
$result = $bprev->create($conf->global->PRELEVEMENT_CODE_BANQUE, $conf->global->PRELEVEMENT_CODE_GUICHET, $mode, $format, $executiondate); // $conf->global->PRELEVEMENT_CODE_BANQUE and $conf->global->PRELEVEMENT_CODE_GUICHET should be empty (we don't use them anymore)
$result = $bprev->create($conf->global->PRELEVEMENT_CODE_BANQUE, $conf->global->PRELEVEMENT_CODE_GUICHET, $mode, $format, $executiondate, 0, $type);
if ($result < 0) if ($result < 0)
{ {
setEventMessages($bprev->error, $bprev->errors, 'errors'); setEventMessages($bprev->error, $bprev->errors, 'errors');
@ -111,7 +117,11 @@ if (empty($reshook))
$form = new Form($db); $form = new Form($db);
$thirdpartystatic = new Societe($db); $thirdpartystatic = new Societe($db);
$invoicestatic = new Facture($db); if ($type != 'bank-transfer') {
$invoicestatic = new Facture($db);
} else {
$invoicestatic = new FactureFournisseur($db);
}
$bprev = new BonPrelevement($db); $bprev = new BonPrelevement($db);
llxHeader('', $langs->trans("NewStandingOrder")); llxHeader('', $langs->trans("NewStandingOrder"));
@ -174,15 +184,25 @@ print '<div class="tabsAction">'."\n";
print '<form action="'.$_SERVER['PHP_SELF'].'?action=create" method="POST">'; print '<form action="'.$_SERVER['PHP_SELF'].'?action=create" method="POST">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="type" value="'.$type.'">';
if ($nb) { if ($nb) {
if ($pricetowithdraw) { if ($pricetowithdraw) {
print $langs->trans('ExecutionDate').' '; print $langs->trans('ExecutionDate').' ';
print $form->selectDate(); $datere = dol_mktime(0, 0, 0, GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int'));
print $form->selectDate($datere, 're');
if ($mysoc->isInEEC()) { if ($mysoc->isInEEC()) {
$title = $langs->trans("CreateForSepa"); $title = $langs->trans("CreateForSepa");
if ($type == 'bank-transfer') {
$title = $langs->trans("CreateSepaFileForPaymentByBankTransfer");
}
print '<select name="format"><option value="FRST">'.$langs->trans('SEPAFRST').'</option><option value="RCUR">'.$langs->trans('SEPARCUR').'</option></select>'; if ($type != 'bank-transfer') {
print '<select name="format">';
print '<option value="FRST"'.(GETPOST('format', 'aZ09') == 'FRST' ? ' selected="selected"' : '').'>'.$langs->trans('SEPAFRST').'</option>';
print '<option value="RCUR"'.(GETPOST('format', 'aZ09') == 'RCUR' ? ' selected="selected"' : '').'>'.$langs->trans('SEPARCUR').'</option>';
print '</select>';
}
print '<input class="butAction" type="submit" value="'.$title.'"/>'; print '<input class="butAction" type="submit" value="'.$title.'"/>';
} else { } else {
$title = $langs->trans("CreateAll"); $title = $langs->trans("CreateAll");
@ -248,8 +268,10 @@ if (empty($conf->global->WITHDRAWAL_ALLOW_ANY_INVOICE_STATUS))
{ {
$sql .= " AND f.fk_statut = ".Facture::STATUS_VALIDATED; $sql .= " AND f.fk_statut = ".Facture::STATUS_VALIDATED;
} }
$sql .= " AND f.total_ttc > 0"; //$sql .= " AND pfd.amount > 0";
$sql .= " AND f.total_ttc > 0"; // Avoid credit notes
$sql .= " AND pfd.traite = 0"; $sql .= " AND pfd.traite = 0";
$sql .= " AND pfd.ext_payment_id IS NULL";
if ($type == 'bank-transfer') { if ($type == 'bank-transfer') {
$sql .= " AND pfd.fk_facture_fourn = f.rowid"; $sql .= " AND pfd.fk_facture_fourn = f.rowid";
} else { } else {
@ -295,9 +317,14 @@ if ($resql)
} }
print_barre_liste($title, $page, $_SERVER['PHP_SELF'], $param, '', '', '', $num, $nbtotalofrecords, 'bill', 0, '', '', $limit); print_barre_liste($title, $page, $_SERVER['PHP_SELF'], $param, '', '', '', $num, $nbtotalofrecords, 'bill', 0, '', '', $limit);
$tradinvoice = "Invoice";
if ($type == 'bank-transfer') {
$tradinvoice = "SupplierInvoice";
}
print '<table class="noborder centpercent">'; print '<table class="noborder centpercent">';
print '<tr class="liste_titre">'; print '<tr class="liste_titre">';
print '<td>'.$langs->trans("Invoice").'</td>'; print '<td>'.$langs->trans($tradinvoice).'</td>';
print '<td>'.$langs->trans("ThirdParty").'</td>'; print '<td>'.$langs->trans("ThirdParty").'</td>';
print '<td>'.$langs->trans("RIB").'</td>'; print '<td>'.$langs->trans("RIB").'</td>';
print '<td>'.$langs->trans("RUM").'</td>'; print '<td>'.$langs->trans("RUM").'</td>';
@ -341,7 +368,9 @@ if ($resql)
print '<td>'; print '<td>';
print $thirdpartystatic->display_rib('rum'); print $thirdpartystatic->display_rib('rum');
$format = $thirdpartystatic->display_rib('format'); $format = $thirdpartystatic->display_rib('format');
if ($format) print ' ('.$format.')'; if ($type != 'bank-transfer') {
if ($format) print ' ('.$format.')';
}
print '</td>'; print '</td>';
// Amount // Amount
print '<td class="right">'; print '<td class="right">';

View File

@ -22,7 +22,7 @@
/** /**
* \file htdocs/compta/prelevement/index.php * \file htdocs/compta/prelevement/index.php
* \ingroup prelevement * \ingroup prelevement
* \brief Prelevement index page * \brief Home page for direct debit orders
*/ */
@ -94,7 +94,7 @@ print '</td></tr></table></div><br>';
*/ */
$sql = "SELECT f.ref, f.rowid, f.total_ttc, f.fk_statut, f.paye, f.type,"; $sql = "SELECT f.ref, f.rowid, f.total_ttc, f.fk_statut, f.paye, f.type,";
$sql .= " pfd.date_demande, pfd.amount,"; $sql .= " pfd.date_demande, pfd.amount,";
$sql .= " s.nom as name, s.rowid as socid"; $sql .= " s.nom as name, s.email, s.rowid as socid";
$sql .= " FROM ".MAIN_DB_PREFIX."facture as f,"; $sql .= " FROM ".MAIN_DB_PREFIX."facture as f,";
$sql .= " ".MAIN_DB_PREFIX."societe as s"; $sql .= " ".MAIN_DB_PREFIX."societe as s";
if (!$user->rights->societe->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; if (!$user->rights->societe->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
@ -106,7 +106,9 @@ if (empty($conf->global->WITHDRAWAL_ALLOW_ANY_INVOICE_STATUS))
{ {
$sql .= " AND f.fk_statut = ".Facture::STATUS_VALIDATED; $sql .= " AND f.fk_statut = ".Facture::STATUS_VALIDATED;
} }
$sql .= " AND pfd.traite = 0 AND pfd.fk_facture = f.rowid"; $sql .= " AND pfd.traite = 0";
$sql .= " AND pfd.ext_payment_id IS NULL";
$sql .= " AND pfd.fk_facture = f.rowid";
if (!$user->rights->societe->client->voir && !$socid) $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".$user->id; if (!$user->rights->societe->client->voir && !$socid) $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".$user->id;
if ($socid) $sql .= " AND f.fk_soc = ".$socid; if ($socid) $sql .= " AND f.fk_soc = ".$socid;
@ -133,14 +135,15 @@ if ($resql)
$invoicestatic->type = $obj->type; $invoicestatic->type = $obj->type;
$alreadypayed = $invoicestatic->getSommePaiement(); $alreadypayed = $invoicestatic->getSommePaiement();
$thirdpartystatic->id = $obj->socid;
$thirdpartystatic->name = $obj->name;
$thirdpartystatic->email = $obj->email;
print '<tr class="oddeven"><td>'; print '<tr class="oddeven"><td>';
print $invoicestatic->getNomUrl(1, 'withdraw'); print $invoicestatic->getNomUrl(1, 'withdraw');
print '</td>'; print '</td>';
print '<td>'; print '<td>';
$thirdpartystatic->id = $obj->socid;
$thirdpartystatic->name = $obj->name;
print $thirdpartystatic->getNomUrl(1, 'customer'); print $thirdpartystatic->getNomUrl(1, 'customer');
print '</td>'; print '</td>';
@ -171,8 +174,9 @@ print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
/* /*
* Withdraw receipts * Direct debit orders
*/ */
$limit = 5; $limit = 5;
$sql = "SELECT p.rowid, p.ref, p.amount, p.datec, p.statut"; $sql = "SELECT p.rowid, p.ref, p.amount, p.datec, p.statut";
$sql .= " FROM ".MAIN_DB_PREFIX."prelevement_bons as p"; $sql .= " FROM ".MAIN_DB_PREFIX."prelevement_bons as p";
@ -189,7 +193,8 @@ if ($result)
print"\n<!-- debut table -->\n"; print"\n<!-- debut table -->\n";
print '<div class="div-table-responsive-no-min">'; print '<div class="div-table-responsive-no-min">';
print '<table class="noborder centpercent">'; print '<table class="noborder centpercent">';
print '<tr class="liste_titre"><th>'.$langs->trans("LastWithdrawalReceipt", $limit).'</th>'; print '<tr class="liste_titre">';
print '<th>'.$langs->trans("LastWithdrawalReceipt", $limit).'</th>';
print '<th>'.$langs->trans("Date").'</th>'; print '<th>'.$langs->trans("Date").'</th>';
print '<th class="right">'.$langs->trans("Amount").'</th>'; print '<th class="right">'.$langs->trans("Amount").'</th>';
print '<th class="right">'.$langs->trans("Status").'</th>'; print '<th class="right">'.$langs->trans("Status").'</th>';
@ -217,7 +222,7 @@ if ($result)
$i++; $i++;
} }
} else { } else {
print '<tr><td class="opacitymedium">'.$langs->trans("None").'</td></tr>'; print '<tr><td class="opacitymedium" colspan="4">'.$langs->trans("None").'</td></tr>';
} }
print "</table></div><br>"; print "</table></div><br>";

View File

@ -2041,13 +2041,6 @@ if ($action == 'create')
else print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotEnoughPermissions").'">'.$langs->trans("Modify").'</a></div>'; else print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotEnoughPermissions").'">'.$langs->trans("Modify").'</a></div>';
} }
if (!empty($conf->facture->enabled) && $object->statut > 0)
{
$langs->load("bills");
if ($user->rights->facture->creer) print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/compta/facture/card.php?action=create&amp;origin='.$object->element.'&amp;originid='.$object->id.'&amp;socid='.$object->thirdparty->id.'">'.$langs->trans("CreateBill").'</a></div>';
else print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotEnoughPermissions").'">'.$langs->trans("CreateBill").'</a></div>';
}
if (!empty($conf->commande->enabled) && $object->statut > 0 && $object->nbofservicesclosed < $nbofservices) if (!empty($conf->commande->enabled) && $object->statut > 0 && $object->nbofservicesclosed < $nbofservices)
{ {
$langs->load("orders"); $langs->load("orders");
@ -2055,9 +2048,11 @@ if ($action == 'create')
else print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotEnoughPermissions").'">'.$langs->trans("CreateOrder").'</a></div>'; else print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotEnoughPermissions").'">'.$langs->trans("CreateOrder").'</a></div>';
} }
// Clone if (!empty($conf->facture->enabled) && $object->statut > 0)
if ($user->rights->contrat->creer) { {
print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&amp;socid='.$object->socid.'&amp;action=clone&amp;object='.$object->element.'">'.$langs->trans("ToClone").'</a></div>'; $langs->load("bills");
if ($user->rights->facture->creer) print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/compta/facture/card.php?action=create&amp;origin='.$object->element.'&amp;originid='.$object->id.'&amp;socid='.$object->thirdparty->id.'">'.$langs->trans("CreateBill").'</a></div>';
else print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotEnoughPermissions").'">'.$langs->trans("CreateBill").'</a></div>';
} }
if ($object->nbofservicesclosed > 0 || $object->nbofserviceswait > 0) if ($object->nbofservicesclosed > 0 || $object->nbofserviceswait > 0)
@ -2086,15 +2081,22 @@ if ($action == 'create')
// print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("CloseRefusedBecauseOneServiceActive").'">'.$langs->trans("Close").'</a></div>'; // print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("CloseRefusedBecauseOneServiceActive").'">'.$langs->trans("Close").'</a></div>';
//} //}
} }
if (! empty($conf->global->CONTRACT_HIDE_CLOSED_SERVICES_BY_DEFAULT) && $object->nbofservicesclosed > 0) if (! empty($conf->global->CONTRACT_HIDE_CLOSED_SERVICES_BY_DEFAULT) && $object->nbofservicesclosed > 0)
{ {
if ($action == 'showclosedlines') print '<div class="inline-block divButAction"><a class="butAction" id="btnhideclosedlines" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=hideclosedlines">'.$langs->trans("HideClosedServices").'</a></div>'; if ($action == 'showclosedlines') print '<div class="inline-block divButAction"><a class="butAction" id="btnhideclosedlines" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=hideclosedlines">'.$langs->trans("HideClosedServices").'</a></div>';
else print '<div class="inline-block divButAction"><a class="butAction" id="btnshowclosedlines" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=showclosedlines">'.$langs->trans("ShowClosedServices").'</a></div>'; else print '<div class="inline-block divButAction"><a class="butAction" id="btnshowclosedlines" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=showclosedlines">'.$langs->trans("ShowClosedServices").'</a></div>';
} }
// Clone
if ($user->rights->contrat->creer) {
print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&amp;socid='.$object->socid.'&amp;action=clone&amp;object='.$object->element.'">'.$langs->trans("ToClone").'</a></div>';
}
// On peut supprimer entite si // On peut supprimer entite si
// - Droit de creer + mode brouillon (erreur creation) // - Droit de creer + mode brouillon (erreur creation)
// - Droit de supprimer // - Droit de supprimer
if (($user->rights->contrat->creer && $object->statut == 0) || $user->rights->contrat->supprimer) if (($user->rights->contrat->creer && $object->statut == $object::STATUS_DRAFT) || $user->rights->contrat->supprimer)
{ {
print '<div class="inline-block divButAction"><a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=delete">'.$langs->trans("Delete").'</a></div>'; print '<div class="inline-block divButAction"><a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=delete">'.$langs->trans("Delete").'</a></div>';
} else { } else {

View File

@ -94,6 +94,12 @@ if ($action == 'add' && !empty($permissiontoadd))
} }
} }
// Fill array 'array_options' with data from add form
if (!$error) {
$ret = $extrafields->setOptionalsFromPost(null, $object);
if ($ret < 0) $error++;
}
if (!$error) if (!$error)
{ {
$result = $object->create($user); $result = $object->create($user);
@ -165,6 +171,12 @@ if ($action == 'update' && !empty($permissiontoadd))
} }
} }
// Fill array 'array_options' with data from add form
if (!$error) {
$ret = $extrafields->setOptionalsFromPost(null, $object, '@GETPOSTISSET');
if ($ret < 0) $error++;
}
if (!$error) if (!$error)
{ {
$result = $object->update($user); $result = $object->update($user);
@ -188,7 +200,14 @@ if ($action == "update_extras" && !empty($permissiontoadd))
$attributekey = GETPOST('attribute', 'alpha'); $attributekey = GETPOST('attribute', 'alpha');
$attributekeylong = 'options_'.$attributekey; $attributekeylong = 'options_'.$attributekey;
$object->array_options['options_'.$attributekey] = GETPOST($attributekeylong, ' alpha');
if (GETPOSTISSET($attributekeylong.'day') && GETPOSTISSET($attributekeylong.'month') && GETPOSTISSET($attributekeylong.'year')) {
// This is properties of a date
$object->array_options['options_'.$attributekey] = dol_mktime(GETPOST($attributekeylong.'hour', 'int'), GETPOST($attributekeylong.'min', 'int'), GETPOST($attributekeylong.'sec', 'int'), GETPOST($attributekeylong.'month', 'int'), GETPOST($attributekeylong.'day', 'int'), GETPOST($attributekeylong.'year', 'int'));
//var_dump(dol_print_date($object->array_options['options_'.$attributekey]));exit;
} else {
$object->array_options['options_'.$attributekey] = GETPOST($attributekeylong, ' alpha');
}
$result = $object->insertExtraFields(empty($triggermodname) ? '' : $triggermodname, $user); $result = $object->insertExtraFields(empty($triggermodname) ? '' : $triggermodname, $user);
if ($result > 0) if ($result > 0)

View File

@ -44,8 +44,10 @@ if (($id > 0 || (!empty($ref) && !in_array($action, array('create', 'createtask'
{ {
setEventMessages('Fetch on object (type '.get_class($object).') return an error without filling $object->error nor $object->errors', null, 'errors'); setEventMessages('Fetch on object (type '.get_class($object).') return an error without filling $object->error nor $object->errors', null, 'errors');
} }
} else setEventMessages($object->error, $object->errors, 'errors'); } else {
$action = ''; setEventMessages($object->error, $object->errors, 'errors');
}
$action = '';
} }
} }
} }

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2010 Regis Houssin <regis.houssin@inodbox.com> /* Copyright (C) 2010 Regis Houssin <regis.houssin@inodbox.com>
* Copyright (C) 2011-204 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2011-2014 Laurent Destailleur <eldy@users.sourceforge.net>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View File

@ -420,7 +420,20 @@ class CMailFile
//$this->message->setFrom(array('john@doe.com' => 'John Doe')); //$this->message->setFrom(array('john@doe.com' => 'John Doe'));
if (!empty($from)) { if (!empty($from)) {
try { try {
$result = $this->message->setFrom($this->getArrayAddress($from)); if (! empty($conf->global->MAIN_FORCE_DISABLE_MAIL_SPOOFING)) {
// Prevent email spoofing for smtp server with a strict configuration
$regexp = '/([a-z0-9_\.\-\+])+\@(([a-z0-9\-])+\.)+([a-z0-9]{2,4})+/i'; // This regular expression extracts all emails from a string
$emailMatchs = preg_match_all($regexp, $from, $adressEmailFrom);
$adressEmailFrom = reset($adressEmailFrom);
if ($emailMatchs !== false && filter_var($conf->global->MAIN_MAIL_SMTPS_ID, FILTER_VALIDATE_EMAIL) && $conf->global->MAIN_MAIL_SMTPS_ID !== $adressEmailFrom)
{
$result = $this->message->setFrom($conf->global->MAIN_MAIL_SMTPS_ID);
} else {
$result = $this->message->setFrom($this->getArrayAddress($from));
}
} else {
$result = $this->message->setFrom($this->getArrayAddress($from));
}
} catch (Exception $e) { } catch (Exception $e) {
$this->errors[] = $e->getMessage(); $this->errors[] = $e->getMessage();
} }

View File

@ -2525,10 +2525,11 @@ abstract class CommonObject
/** /**
* Get children of line * Get children of line
* *
* @param int $id Id of parent line * @param int $id Id of parent line
* @return array Array with list of children lines id * @param int $includealltree 0 = 1st level child, 1 = All level child
* @return array Array with list of children lines id
*/ */
public function getChildrenOfLine($id) public function getChildrenOfLine($id, $includealltree = 0)
{ {
$rows = array(); $rows = array();
@ -2541,16 +2542,13 @@ abstract class CommonObject
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
if ($resql) if ($resql)
{ {
$i = 0; if ($this->db->num_rows($resql) > 0) {
$num = $this->db->num_rows($resql); while ($row = $this->db->fetch_row($resql)) {
while ($i < $num) $rows[] = $row[0];
{ if (!empty($includealltree)) $rows = array_merge($rows, $this->getChildrenOfLine($row[0]), $includealltree);
$row = $this->db->fetch_row($resql); }
$rows[$i] = $row[0];
$i++;
} }
} }
return $rows; return $rows;
} }
@ -5608,7 +5606,7 @@ abstract class CommonObject
* Update an extra field value for the current object. * Update an extra field value for the current object.
* Data to describe values to update are stored into $this->array_options=array('options_codeforfield1'=>'valueforfield1', 'options_codeforfield2'=>'valueforfield2', ...) * Data to describe values to update are stored into $this->array_options=array('options_codeforfield1'=>'valueforfield1', 'options_codeforfield2'=>'valueforfield2', ...)
* *
* @param string $key Key of the extrafield (without starting 'options_') * @param string $key Key of the extrafield to update (without starting 'options_')
* @param string $trigger If defined, call also the trigger (for example COMPANY_MODIFY) * @param string $trigger If defined, call also the trigger (for example COMPANY_MODIFY)
* @param User $userused Object user * @param User $userused Object user
* @return int -1=error, O=did nothing, 1=OK * @return int -1=error, O=did nothing, 1=OK
@ -6834,8 +6832,6 @@ abstract class CommonObject
$html_id = (empty($this->id) ? '' : 'extrarow-'.$this->element.'_'.$key.'_'.$this->id); $html_id = (empty($this->id) ? '' : 'extrarow-'.$this->element.'_'.$key.'_'.$this->id);
$out .= '<tr '.($html_id ? 'id="'.$html_id.'" ' : '').$csstyle.' class="'.$class.$this->element.'_extras_'.$key.' trextrafields_collapse'.$extrafields_collapse_num.'" '.$domData.' >';
if (!empty($conf->global->MAIN_EXTRAFIELDS_USE_TWO_COLUMS) && ($e % 2) == 0) { $colspan = '0'; } if (!empty($conf->global->MAIN_EXTRAFIELDS_USE_TWO_COLUMS) && ($e % 2) == 0) { $colspan = '0'; }
if ($action == 'selectlines') { $colspan++; } if ($action == 'selectlines') { $colspan++; }
@ -6865,6 +6861,7 @@ abstract class CommonObject
$labeltoshow = $langs->trans($label); $labeltoshow = $langs->trans($label);
$helptoshow = $langs->trans($extrafields->attributes[$this->table_element]['help'][$key]); $helptoshow = $langs->trans($extrafields->attributes[$this->table_element]['help'][$key]);
$out .= '<tr '.($html_id ? 'id="'.$html_id.'" ' : '').$csstyle.' class="'.$class.$this->element.'_extras_'.$key.' trextrafields_collapse'.$extrafields_collapse_num.'" '.$domData.' >';
$out .= '<td class="'; $out .= '<td class="';
//$out .= "titlefield"; //$out .= "titlefield";
//if (GETPOST('action', 'none') == 'create') $out.='create'; //if (GETPOST('action', 'none') == 'create') $out.='create';
@ -7758,6 +7755,11 @@ abstract class CommonObject
if ($obj) if ($obj)
{ {
$this->setVarsFromFetchObj($obj); $this->setVarsFromFetchObj($obj);
// Retreive all extrafield
// fetch optionals attributes and labels
$this->fetch_optionals();
return $this->id; return $this->id;
} else { } else {
return 0; return 0;

View File

@ -194,7 +194,7 @@ class EvalMath
* *
* @return string Output * @return string Output
*/ */
private function vars() public function vars()
{ {
$output = $this->v; $output = $this->v;
unset($output['pi']); unset($output['pi']);
@ -270,9 +270,11 @@ class EvalMath
// =============== // ===============
} elseif ($op == ')' and $expecting_op) { // ready to close a parenthesis? } elseif ($op == ')' and $expecting_op) { // ready to close a parenthesis?
while (($o2 = $stack->pop()) != '(') { // pop off the stack back to the last ( while (($o2 = $stack->pop()) != '(') { // pop off the stack back to the last (
if (is_null($o2)) if (is_null($o2)) {
return $this->trigger(5, "unexpected ')'", ")"); return $this->trigger(5, "unexpected ')'", ")");
else $output[] = $o2; } else {
$output[] = $o2;
}
} }
if (preg_match("/^([a-z]\w*)\($/", $stack->last(2), $matches)) { // did we just close a function? if (preg_match("/^([a-z]\w*)\($/", $stack->last(2), $matches)) { // did we just close a function?
$fnn = $matches[1]; // get the function name $fnn = $matches[1]; // get the function name
@ -292,9 +294,11 @@ class EvalMath
// =============== // ===============
} elseif ($op == ',' and $expecting_op) { // did we just finish a function argument? } elseif ($op == ',' and $expecting_op) { // did we just finish a function argument?
while (($o2 = $stack->pop()) != '(') { while (($o2 = $stack->pop()) != '(') {
if (is_null($o2)) if (is_null($o2)) {
return $this->trigger(5, "unexpected ','", ","); // oops, never had a ( return $this->trigger(5, "unexpected ','", ","); // oops, never had a (
else $output[] = $o2; // pop the argument expression stuff and push onto the output } else {
$output[] = $o2; // pop the argument expression stuff and push onto the output
}
} }
// make sure there was a function // make sure there was a function
if (!preg_match("/^([a-z]\w*)\($/", $stack->last(2), $matches)) if (!preg_match("/^([a-z]\w*)\($/", $stack->last(2), $matches))

View File

@ -1621,6 +1621,13 @@ class ExtraFields
$keyList .= implode(', ', $fields_label); $keyList .= implode(', ', $fields_label);
} }
$filter_categorie = false;
if (count($InfoFieldList) > 5) {
if ($InfoFieldList[0] == 'categorie') {
$filter_categorie = true;
}
}
$sql = 'SELECT '.$keyList; $sql = 'SELECT '.$keyList;
$sql .= ' FROM '.MAIN_DB_PREFIX.$InfoFieldList[0]; $sql .= ' FROM '.MAIN_DB_PREFIX.$InfoFieldList[0];
if (strpos($InfoFieldList[4], 'extra') !== false) if (strpos($InfoFieldList[4], 'extra') !== false)
@ -1641,37 +1648,49 @@ class ExtraFields
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
if ($resql) if ($resql)
{ {
$value = ''; // value was used, so now we reste it to use it to build final output if ($filter_categorie === false) {
$value = ''; // value was used, so now we reste it to use it to build final output
$obj = $this->db->fetch_object($resql); $obj = $this->db->fetch_object($resql);
// Several field into label (eq table:code|libelle:rowid) // Several field into label (eq table:code|libelle:rowid)
$fields_label = explode('|', $InfoFieldList[1]); $fields_label = explode('|', $InfoFieldList[1]);
if (is_array($fields_label) && count($fields_label) > 1) if (is_array($fields_label) && count($fields_label) > 1) {
{ foreach ($fields_label as $field_toshow) {
foreach ($fields_label as $field_toshow) $translabel = '';
{ if (!empty($obj->$field_toshow)) {
$translabel = ''; $translabel = $langs->trans($obj->$field_toshow);
if (!empty($obj->$field_toshow)) { }
$translabel = $langs->trans($obj->$field_toshow); if ($translabel != $field_toshow) {
$value .= dol_trunc($translabel, 18) . ' ';
} else {
$value .= $obj->$field_toshow . ' ';
}
} }
if ($translabel != $field_toshow) { } else {
$value .= dol_trunc($translabel, 18).' '; $translabel = '';
if (!empty($obj->{$InfoFieldList[1]})) {
$translabel = $langs->trans($obj->{$InfoFieldList[1]});
}
if ($translabel != $obj->{$InfoFieldList[1]}) {
$value = dol_trunc($translabel, 18);
} else { } else {
$value .= $obj->$field_toshow.' '; $value = $obj->{$InfoFieldList[1]};
} }
} }
} else { } else {
$translabel = ''; require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php';
if (!empty($obj->{$InfoFieldList[1]})) {
$translabel = $langs->trans($obj->{$InfoFieldList[1]}); $toprint = array();
} $obj = $this->db->fetch_object($resql);
if ($translabel != $obj->{$InfoFieldList[1]}) { $c = new Categorie($this->db);
$value = dol_trunc($translabel, 18); $c->fetch($obj->rowid);
} else { $ways = $c->print_all_ways(); // $ways[0] = "ccc2 >> ccc2a >> ccc2a1" with html formatted text
$value = $obj->{$InfoFieldList[1]}; foreach ($ways as $way) {
$toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories"' . ($c->color ? ' style="background: #' . $c->color . ';"' : ' style="background: #aaa"') . '>' . img_object('', 'category') . ' ' . $way . '</li>';
} }
$value = '<div class="select2-container-multi-dolibarr" style="width: 90%;"><ul class="select2-choices-dolibarr">'.implode(' ', $toprint).'</ul></div>';
} }
} else dol_syslog(get_class($this).'::showOutputField error '.$this->db->lasterror(), LOG_WARNING); } else dol_syslog(get_class($this).'::showOutputField error '.$this->db->lasterror(), LOG_WARNING);
} elseif ($type == 'radio') } elseif ($type == 'radio')
@ -1710,6 +1729,13 @@ class ExtraFields
$keyList .= implode(', ', $fields_label); $keyList .= implode(', ', $fields_label);
} }
$filter_categorie = false;
if (count($InfoFieldList) > 5) {
if ($InfoFieldList[0] == 'categorie') {
$filter_categorie = true;
}
}
$sql = 'SELECT '.$keyList; $sql = 'SELECT '.$keyList;
$sql .= ' FROM '.MAIN_DB_PREFIX.$InfoFieldList[0]; $sql .= ' FROM '.MAIN_DB_PREFIX.$InfoFieldList[0];
if (strpos($InfoFieldList[4], 'extra') !== false) { if (strpos($InfoFieldList[4], 'extra') !== false) {
@ -1721,33 +1747,49 @@ class ExtraFields
dol_syslog(get_class($this).':showOutputField:$type=chkbxlst', LOG_DEBUG); dol_syslog(get_class($this).':showOutputField:$type=chkbxlst', LOG_DEBUG);
$resql = $this->db->query($sql); $resql = $this->db->query($sql);
if ($resql) { if ($resql) {
$value = ''; // value was used, so now we reste it to use it to build final output if ($filter_categorie === false) {
$toprint = array(); $value = ''; // value was used, so now we reste it to use it to build final output
while ($obj = $this->db->fetch_object($resql)) { $toprint = array();
// Several field into label (eq table:code|libelle:rowid) while ($obj = $this->db->fetch_object($resql)) {
$fields_label = explode('|', $InfoFieldList[1]); // Several field into label (eq table:code|libelle:rowid)
if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) { $fields_label = explode('|', $InfoFieldList[1]);
if (is_array($fields_label) && count($fields_label) > 1) { if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) {
foreach ($fields_label as $field_toshow) { if (is_array($fields_label) && count($fields_label) > 1) {
$translabel = ''; foreach ($fields_label as $field_toshow) {
if (!empty($obj->$field_toshow)) { $translabel = '';
$translabel = $langs->trans($obj->$field_toshow); if (!empty($obj->$field_toshow)) {
$translabel = $langs->trans($obj->$field_toshow);
}
if ($translabel != $field_toshow) {
$toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">' . dol_trunc($translabel, 18) . '</li>';
} else {
$toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">' . $obj->$field_toshow . '</li>';
}
} }
if ($translabel != $field_toshow) {
$toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.dol_trunc($translabel, 18).'</li>';
} else {
$toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.$obj->$field_toshow.'</li>';
}
}
} else {
$translabel = '';
if (!empty($obj->{$InfoFieldList[1]})) {
$translabel = $langs->trans($obj->{$InfoFieldList[1]});
}
if ($translabel != $obj->{$InfoFieldList[1]}) {
$toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.dol_trunc($translabel, 18).'</li>';
} else { } else {
$toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">'.$obj->{$InfoFieldList[1]}.'</li>'; $translabel = '';
if (!empty($obj->{$InfoFieldList[1]})) {
$translabel = $langs->trans($obj->{$InfoFieldList[1]});
}
if ($translabel != $obj->{$InfoFieldList[1]}) {
$toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">' . dol_trunc($translabel, 18) . '</li>';
} else {
$toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #aaa">' . $obj->{$InfoFieldList[1]} . '</li>';
}
}
}
}
} else {
require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php';
$toprint = array();
while ($obj = $this->db->fetch_object($resql)) {
if (is_array($value_arr) && in_array($obj->rowid, $value_arr)) {
$c = new Categorie($this->db);
$c->fetch($obj->rowid);
$ways = $c->print_all_ways(); // $ways[0] = "ccc2 >> ccc2a >> ccc2a1" with html formatted text
foreach ($ways as $way) {
$toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories"' . ($c->color ? ' style="background: #' . $c->color . ';"' : ' style="background: #aaa"') . '>' . img_object('', 'category') . ' ' . $way . '</li>';
} }
} }
} }
@ -1912,7 +1954,9 @@ class ExtraFields
* *
* @param array $extralabels Deprecated (old $array of extrafields, now set this to null) * @param array $extralabels Deprecated (old $array of extrafields, now set this to null)
* @param object $object Object * @param object $object Object
* @param string $onlykey Only the following key is filled. When we make update of only one extrafield ($action = 'update_extras'), calling page must set this to avoid to have other extrafields being reset. * @param string $onlykey Only some keys are filled:$this
* 'string' => When we make update of only one extrafield ($action = 'update_extras'), calling page can set this to avoid to have other extrafields being reset.
* '@GETPOSTISSET' => When we make update of extrafields ($action = 'update'), calling page can set this to avoid to have fields not into POST being reset.
* @return int 1 if array_options set, 0 if no value, -1 if error (field required missing for example) * @return int 1 if array_options set, 0 if no value, -1 if error (field required missing for example)
*/ */
public function setOptionalsFromPost($extralabels, &$object, $onlykey = '') public function setOptionalsFromPost($extralabels, &$object, $onlykey = '')
@ -1929,7 +1973,8 @@ class ExtraFields
// Get extra fields // Get extra fields
foreach ($extralabels as $key => $value) foreach ($extralabels as $key => $value)
{ {
if (!empty($onlykey) && $key != $onlykey) continue; if (!empty($onlykey) && $onlykey != '@GETPOSTISSET' && $key != $onlykey) continue;
if (!empty($onlykey) && $onlykey == '@GETPOSTISSET' && ! GETPOSTISSET('options_'.$key)) continue;
$key_type = $this->attributes[$object->table_element]['type'][$key]; $key_type = $this->attributes[$object->table_element]['type'][$key];
if ($key_type == 'separate') continue; if ($key_type == 'separate') continue;
@ -1960,28 +2005,26 @@ class ExtraFields
} }
} }
if (in_array($key_type, array('date'))) if (in_array($key_type, array('date'))) {
{
// Clean parameters // Clean parameters
// TODO GMT date in memory must be GMT so we should add gm=true in parameters // TODO GMT date in memory must be GMT so we should add gm=true in parameters
$value_key = dol_mktime(0, 0, 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]); $value_key = dol_mktime(0, 0, 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]);
} elseif (in_array($key_type, array('datetime'))) } elseif (in_array($key_type, array('datetime'))) {
{
// Clean parameters // Clean parameters
// TODO GMT date in memory must be GMT so we should add gm=true in parameters // TODO GMT date in memory must be GMT so we should add gm=true in parameters
$value_key = dol_mktime($_POST["options_".$key."hour"], $_POST["options_".$key."min"], 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]); $value_key = dol_mktime($_POST["options_".$key."hour"], $_POST["options_".$key."min"], 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]);
} elseif (in_array($key_type, array('checkbox', 'chkbxlst'))) } elseif (in_array($key_type, array('checkbox', 'chkbxlst'))) {
{
$value_arr = GETPOST("options_".$key, 'array'); // check if an array $value_arr = GETPOST("options_".$key, 'array'); // check if an array
if (!empty($value_arr)) { if (!empty($value_arr)) {
$value_key = implode($value_arr, ','); $value_key = implode($value_arr, ',');
} else { } else {
$value_key = ''; $value_key = '';
} }
} elseif (in_array($key_type, array('price', 'double'))) } elseif (in_array($key_type, array('price', 'double'))) {
{
$value_arr = GETPOST("options_".$key, 'alpha'); $value_arr = GETPOST("options_".$key, 'alpha');
$value_key = price2num($value_arr); $value_key = price2num($value_arr);
} elseif (in_array($key_type, array('html'))) {
$value_key = GETPOST("options_".$key, 'alpha');
} else { } else {
$value_key = GETPOST("options_".$key); $value_key = GETPOST("options_".$key);
if (in_array($key_type, array('link')) && $value_key == '-1') $value_key = ''; if (in_array($key_type, array('link')) && $value_key == '-1') $value_key = '';

View File

@ -5242,6 +5242,28 @@ class Form
return; return;
} }
/**
* Show 2 HTML widget to input a date or combo list for day, month, years and optionaly hours and minutes.
* Fields are preselected with :
* - set_time date (must be a local PHP server timestamp or string date with format 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM')
* - local date in user area, if set_time is '' (so if set_time is '', output may differs when done from two different location)
* - Empty (fields empty), if set_time is -1 (in this case, parameter empty must also have value 1)
*
* @param integer $set_time Pre-selected date (must be a local PHP server timestamp), -1 to keep date not preselected, '' to use current date with 00:00 hour (Parameter 'empty' must be 0 or 2).
* @param integer $set_time_end Pre-selected date (must be a local PHP server timestamp), -1 to keep date not preselected, '' to use current date with 00:00 hour (Parameter 'empty' must be 0 or 2).
* @param string $prefix Prefix for fields name
* @param string $empty 0=Fields required, 1=Empty inputs are allowed, 2=Empty inputs are allowed for hours only
* @return string Html for selectDate
* @see form_date(), select_month(), select_year(), select_dayofweek()
*/
public function selectDateToDate($set_time = '', $set_time_end = '', $prefix = 're', $empty = 0)
{
$ret = $this->selectDate($set_time, $prefix.'_start', 0, 0, $empty);
$ret .= '<br/>';
$ret .= $this->selectDate($set_time_end, $prefix.'_end', 0, 0, $empty);
return $ret;
}
/** /**
* Show a HTML widget to input a date or combo list for day, month, years and optionaly hours and minutes. * Show a HTML widget to input a date or combo list for day, month, years and optionaly hours and minutes.
* Fields are preselected with : * Fields are preselected with :

View File

@ -184,7 +184,8 @@ print '
{ {
if (this.href) if (this.href)
{ {
this.href=this.href+\'&page_y=\'+page_y; var hrefarray = this.href.split("#", 2);
this.href=hrefarray[0]+\'&page_y=\'+page_y;
console.log("We click on tag with .reposition class. this.ref is now "+this.href); console.log("We click on tag with .reposition class. this.ref is now "+this.href);
} }
else else

View File

@ -1273,7 +1273,27 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin
global $form; global $form;
global $param, $massactionbutton; global $param, $massactionbutton;
$start_year = GETPOST('dateevent_startyear');
$start_month = GETPOST('dateevent_startmonth');
$start_day = GETPOST('dateevent_startday');
$end_year = GETPOST('dateevent_endyear');
$end_month = GETPOST('dateevent_endmonth');
$end_day = GETPOST('dateevent_endday');
if (!empty($start_year) && !empty($start_month) && !empty($start_day)) {
$search_start = $start_year.'-'.$start_month.'-'.$start_day;
$tms_start = strtotime($search_start);
}
if (!empty($end_year) && !empty($end_month) && !empty($end_day)) {
$search_end = $end_year.'-'.$end_month.'-'.$end_day.' 23:59:59';
$tms_end = strtotime($search_end);
}
if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) // All test are required to be compatible with all browsers
{
$search_start = '';
$tms_start = '';
$search_end = '';
$tms_end = '';
}
dol_include_once('/comm/action/class/actioncomm.class.php'); dol_include_once('/comm/action/class/actioncomm.class.php');
// Check parameters // Check parameters
@ -1379,54 +1399,46 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin
} }
} }
// Condition on actioncode if (! empty($search_start) && ! empty($search_end)) {
if (!empty($actioncode)) $sql .= " AND ((a.datep BETWEEN '$search_start' AND '$search_end') OR (a.datep2 BETWEEN '$search_start' AND '$search_end'))";
{ }
if (empty($conf->global->AGENDA_USE_EVENT_TYPE)) elseif (empty($search_start) && ! empty($search_end)) {
{ $sql .= " AND ((a.datep <= '$search_end') OR (a.datep2 <= '$search_end'))";
if ($actioncode == 'AC_NON_AUTO') $sql .= " AND c.type != 'systemauto'"; }
elseif ($actioncode == 'AC_ALL_AUTO') $sql .= " AND c.type = 'systemauto'"; elseif (! empty($search_start) && empty($search_end)) {
else { $sql .= " AND ((a.datep >= '$search_start') OR (a.datep2 >= '$search_start'))";
if ($actioncode == 'AC_OTH') $sql .= " AND c.type != 'systemauto'"; }
elseif ($actioncode == 'AC_OTH_AUTO') $sql .= " AND c.type = 'systemauto'";
if (is_array($actioncode) && ! empty($actioncode)) {
$sql .= ' AND (';
foreach ($actioncode as $key => $code) {
if ($key != 0) $sql .= "OR (";
if (! empty($code)) addEventTypeSQL($sql, $code, $donetodo, $now, $filters, "");
if ($key != 0) $sql .= ")";
}
$sql .= ')';
}
elseif (! empty($actioncode)) addEventTypeSQL($sql, $actioncode, $donetodo, $now, $filters);
if (is_array($actioncode)) {
foreach ($actioncode as $code) {
$sql2 = addMailingEventTypeSQL($code, $objcon, $filterobj);
if (! empty($sql2)) {
if (! empty($sql)) $sql = $sql." UNION ".$sql2;
elseif (empty($sql)) $sql = $sql2;
break;
} }
} else {
if ($actioncode == 'AC_NON_AUTO') $sql .= " AND c.type != 'systemauto'";
elseif ($actioncode == 'AC_ALL_AUTO') $sql .= " AND c.type = 'systemauto'";
else $sql .= " AND c.code = '".$db->escape($actioncode)."'";
} }
} }
if ($donetodo == 'todo') $sql .= " AND ((a.percent >= 0 AND a.percent < 100) OR (a.percent = -1 AND a.datep > '".$db->idate($now)."'))"; else {
elseif ($donetodo == 'done') $sql .= " AND (a.percent = 100 OR (a.percent = -1 AND a.datep <= '".$db->idate($now)."'))"; $sql2 = addMailingEventTypeSQL($actioncode, $objcon, $filterobj);
if (is_array($filters) && $filters['search_agenda_label']) $sql .= natural_search('a.label', $filters['search_agenda_label']); if (! empty($sql) && ! empty($sql2)) {
} $sql = $sql." UNION ".$sql2;
}
// Add also event from emailings. TODO This should be replaced by an automatic event ? May be it's too much for very large emailing. elseif (empty($sql) && ! empty($sql2)) {
if (!empty($conf->mailing->enabled) && !empty($objcon->email) $sql = $sql2;
&& (empty($actioncode) || $actioncode == 'AC_OTH_AUTO' || $actioncode == 'AC_EMAILING')) }
{ }
$langs->load("mails");
$sql2 = "SELECT m.rowid as id, m.titre as label, mc.date_envoi as dp, mc.date_envoi as dp2, '100' as percent, 'mailing' as type";
$sql2 .= ", null as fk_element, '' as elementtype, null as contact_id";
$sql2 .= ", 'AC_EMAILING' as acode, '' as alabel, '' as apicto";
$sql2 .= ", u.rowid as user_id, u.login as user_login, u.photo as user_photo, u.firstname as user_firstname, u.lastname as user_lastname"; // User that valid action
if (is_object($filterobj) && get_class($filterobj) == 'Societe') $sql2 .= ", '' as lastname, '' as firstname";
elseif (is_object($filterobj) && get_class($filterobj) == 'Adherent') $sql2 .= ", '' as lastname, '' as firstname";
elseif (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur') $sql2 .= ", '' as ref";
elseif (is_object($filterobj) && get_class($filterobj) == 'Product') $sql2 .= ", '' as ref";
elseif (is_object($filterobj) && get_class($filterobj) == 'Ticket') $sql2 .= ", '' as ref";
$sql2 .= " FROM ".MAIN_DB_PREFIX."mailing as m, ".MAIN_DB_PREFIX."mailing_cibles as mc, ".MAIN_DB_PREFIX."user as u";
$sql2 .= " WHERE mc.email = '".$db->escape($objcon->email)."'"; // Search is done on email.
$sql2 .= " AND mc.statut = 1";
$sql2 .= " AND u.rowid = m.fk_user_valid";
$sql2 .= " AND mc.fk_mailing = m.rowid";
}
if (!empty($sql) && !empty($sql2)) {
$sql = $sql." UNION ".$sql2;
} elseif (empty($sql) && !empty($sql2)) {
$sql = $sql2;
} }
//TODO Add limit in nb of results //TODO Add limit in nb of results
@ -1550,10 +1562,10 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin
$out .= '<td class="liste_titre"></td>'; $out .= '<td class="liste_titre"></td>';
$out .= '<td class="liste_titre"></td>'; $out .= '<td class="liste_titre"></td>';
$out .= '<td class="liste_titre">'; $out .= '<td class="liste_titre">';
$out .= $formactions->select_type_actions($actioncode, "actioncode", '', empty($conf->global->AGENDA_USE_EVENT_TYPE) ? 1 : -1, 0, 0, 1); $out .= $formactions->select_type_actions($actioncode, "actioncode", '', empty($conf->global->AGENDA_USE_EVENT_TYPE) ? 1 : -1, 0, (empty($conf->global->AGENDA_USE_MULTISELECT_TYPE) ? 0 : 1), 1);
$out .= '</td>'; $out .= '</td>';
$out .= '<td class="liste_titre maxwidth100onsmartphone"><input type="text" class="maxwidth100onsmartphone" name="search_agenda_label" value="'.$filters['search_agenda_label'].'"></td>'; $out .= '<td class="liste_titre maxwidth100onsmartphone"><input type="text" class="maxwidth100onsmartphone" name="search_agenda_label" value="'.$filters['search_agenda_label'].'"></td>';
$out .= '<td class="liste_titre"></td>'; $out .= '<td class="liste_titre center">'.$form->selectDateToDate($tms_start, $tms_end, 'dateevent', 1).'</td>';
$out .= '<td class="liste_titre"></td>'; $out .= '<td class="liste_titre"></td>';
$out .= '<td class="liste_titre"></td>'; $out .= '<td class="liste_titre"></td>';
$out .= '<td class="liste_titre"></td>'; $out .= '<td class="liste_titre"></td>';
@ -1830,3 +1842,74 @@ function show_subsidiaries($conf, $langs, $db, $object)
return $i; return $i;
} }
/**
* Add Event Type SQL
*
* @param string $sql $sql modified
* @param string $actioncode Action code
* @param string $donetodo donetodo
* @param string $now now
* @param string $filters array
* @param string $sqlANDOR "AND", "OR" or "" sql condition
* @return string sql request
*/
function addEventTypeSQL(&$sql, $actioncode, $donetodo, $now, $filters, $sqlANDOR = "AND")
{
global $conf, $db;
// Condition on actioncode
if (empty($conf->global->AGENDA_USE_EVENT_TYPE))
{
if ($actioncode == 'AC_NON_AUTO') $sql .= " $sqlANDOR c.type != 'systemauto'";
elseif ($actioncode == 'AC_ALL_AUTO') $sql .= " $sqlANDOR c.type = 'systemauto'";
else {
if ($actioncode == 'AC_OTH') $sql .= " $sqlANDOR c.type != 'systemauto'";
elseif ($actioncode == 'AC_OTH_AUTO') $sql .= " $sqlANDOR c.type = 'systemauto'";
}
}
else {
if ($actioncode == 'AC_NON_AUTO') $sql .= " $sqlANDOR c.type != 'systemauto'";
elseif ($actioncode == 'AC_ALL_AUTO') $sql .= " $sqlANDOR c.type = 'systemauto'";
else $sql .= " $sqlANDOR c.code = '".$db->escape($actioncode)."'";
}
if ($donetodo == 'todo') $sql .= " AND ((a.percent >= 0 AND a.percent < 100) OR (a.percent = -1 AND a.datep > '".$db->idate($now)."'))";
elseif ($donetodo == 'done') $sql .= " AND (a.percent = 100 OR (a.percent = -1 AND a.datep <= '".$db->idate($now)."'))";
if (is_array($filters) && $filters['search_agenda_label']) $sql .= natural_search('a.label', $filters['search_agenda_label']);
return $sql;
}
/**
* Add Mailing Event Type SQL
*
* @param string $actioncode Action code
* @param string $objcon objcon
* @param Object $filterobj filterobj
* @return string
*/
function addMailingEventTypeSQL($actioncode, $objcon, $filterobj)
{
global $conf, $langs, $db;
// Add also event from emailings. TODO This should be replaced by an automatic event ? May be it's too much for very large emailing.
if (!empty($conf->mailing->enabled) && !empty($objcon->email)
&& (empty($actioncode) || $actioncode == 'AC_OTH_AUTO' || $actioncode == 'AC_EMAILING')) {
$langs->load("mails");
$sql2 = "SELECT m.rowid as id, m.titre as label, mc.date_envoi as dp, mc.date_envoi as dp2, '100' as percent, 'mailing' as type";
$sql2 .= ", '' as fk_element, '' as elementtype, '' as contact_id";
$sql2 .= ", 'AC_EMAILING' as acode, '' as alabel, '' as apicto";
$sql2 .= ", u.rowid as user_id, u.login as user_login, u.photo as user_photo, u.firstname as user_firstname, u.lastname as user_lastname"; // User that valid action
if (is_object($filterobj) && get_class($filterobj) == 'Societe') $sql2 .= ", '' as lastname, '' as firstname";
elseif (is_object($filterobj) && get_class($filterobj) == 'Adherent') $sql2 .= ", '' as lastname, '' as firstname";
elseif (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur') $sql2 .= ", '' as ref";
elseif (is_object($filterobj) && get_class($filterobj) == 'Product') $sql2 .= ", '' as ref";
elseif (is_object($filterobj) && get_class($filterobj) == 'Ticket') $sql2 .= ", '' as ref";
$sql2 .= " FROM ".MAIN_DB_PREFIX."mailing as m, ".MAIN_DB_PREFIX."mailing_cibles as mc, ".MAIN_DB_PREFIX."user as u";
$sql2 .= " WHERE mc.email = '".$db->escape($objcon->email)."'"; // Search is done on email.
$sql2 .= " AND mc.statut = 1";
$sql2 .= " AND u.rowid = m.fk_user_valid";
$sql2 .= " AND mc.fk_mailing=m.rowid";
return $sql2;
}
}

View File

@ -68,7 +68,7 @@ function facturefourn_prepare_head($object)
if ($obj) $nbStandingOrders = $obj->nb; if ($obj) $nbStandingOrders = $obj->nb;
} }
else dol_print_error($db); else dol_print_error($db);
$head[$h][0] = DOL_URL_ROOT.'/compta/facture/prelevement.php?facid='.$object->id.'&mode=bank-transfer'; $head[$h][0] = DOL_URL_ROOT.'/compta/facture/prelevement.php?facid='.$object->id.'&type=bank-transfer';
$head[$h][1] = $langs->trans('BankTransfer'); $head[$h][1] = $langs->trans('BankTransfer');
if ($nbStandingOrders > 0) $head[$h][1] .= '<span class="badge marginleftonlyshort">'.$nbStandingOrders.'</span>'; if ($nbStandingOrders > 0) $head[$h][1] .= '<span class="badge marginleftonlyshort">'.$nbStandingOrders.'</span>';
$head[$h][2] = 'standingorders'; $head[$h][2] = 'standingorders';
@ -233,8 +233,6 @@ function supplierorder_admin_prepare_head()
$head[$h][2] = 'supplierorderdet'; $head[$h][2] = 'supplierorderdet';
$h++; $h++;
$head[$h][0] = DOL_URL_ROOT.'/admin/supplierinvoice_extrafields.php'; $head[$h][0] = DOL_URL_ROOT.'/admin/supplierinvoice_extrafields.php';
$head[$h][1] = $langs->trans("ExtraFieldsSupplierInvoices"); $head[$h][1] = $langs->trans("ExtraFieldsSupplierInvoices");
$head[$h][2] = 'supplierinvoice'; $head[$h][2] = 'supplierinvoice';

View File

@ -3055,7 +3055,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $
'accounting'=>'chart-line', 'category'=>'tag', 'dollyrevert'=>'dolly', 'accounting'=>'chart-line', 'category'=>'tag', 'dollyrevert'=>'dolly',
'hrm'=>'umbrella-beach', 'margin'=>'calculator', 'members'=>'users', 'ticket'=>'ticket-alt', 'globe'=>'external-link-alt', 'lot'=>'barcode', 'hrm'=>'umbrella-beach', 'margin'=>'calculator', 'members'=>'users', 'ticket'=>'ticket-alt', 'globe'=>'external-link-alt', 'lot'=>'barcode',
'email'=>'at', 'email'=>'at',
'edit'=>'pencil-alt', 'grip_title'=>'arrows-alt', 'grip'=>'arrows-alt', 'help'=>'info-circle', 'edit'=>'pencil-alt', 'grip_title'=>'arrows-alt', 'grip'=>'arrows-alt', 'help'=>'question-circle',
'generic'=>'file', 'holiday'=>'umbrella-beach', 'label'=>'layer-group', 'generic'=>'file', 'holiday'=>'umbrella-beach', 'label'=>'layer-group',
'member'=>'users', 'mrp'=>'cubes', 'trip'=>'wallet', 'group'=>'users', 'member'=>'users', 'mrp'=>'cubes', 'trip'=>'wallet', 'group'=>'users',
'sign-out'=>'sign-out-alt', 'sign-out'=>'sign-out-alt',
@ -3143,7 +3143,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $
$arrayconvpictotocolor = array( $arrayconvpictotocolor = array(
'address'=>'#37a', 'building'=>'#37a', 'bom'=>'#a69944', 'address'=>'#37a', 'building'=>'#37a', 'bom'=>'#a69944',
'companies'=>'#37a', 'company'=>'#37a', 'contact'=>'#37a', 'dynamicprice'=>'#a69944', 'companies'=>'#37a', 'company'=>'#37a', 'contact'=>'#37a', 'dynamicprice'=>'#a69944',
'edit'=>'#444', 'note'=>'#999', 'error'=>'', 'listlight'=>'#999', 'edit'=>'#444', 'note'=>'#999', 'error'=>'', 'help'=>'#bbb', 'listlight'=>'#999',
'dolly'=>'#a69944', 'dollyrevert'=>'#a69944', 'lot'=>'#a69944', 'dolly'=>'#a69944', 'dollyrevert'=>'#a69944', 'lot'=>'#a69944',
'map-marker-alt'=>'#aaa', 'mrp'=>'#a69944', 'product'=>'#a69944', 'service'=>'#a69944', 'stock'=>'#a69944', 'map-marker-alt'=>'#aaa', 'mrp'=>'#a69944', 'product'=>'#a69944', 'service'=>'#a69944', 'stock'=>'#a69944',
'other'=>'#ddd', 'other'=>'#ddd',

View File

@ -35,7 +35,7 @@ function holiday_prepare_head($object)
$head = array(); $head = array();
$head[$h][0] = DOL_URL_ROOT.'/holiday/card.php?id='.$object->id; $head[$h][0] = DOL_URL_ROOT.'/holiday/card.php?id='.$object->id;
$head[$h][1] = $langs->trans("Holiday"); $head[$h][1] = $langs->trans("Leave");
$head[$h][2] = 'card'; $head[$h][2] = 'card';
$h++; $h++;

View File

@ -38,6 +38,11 @@ function takepos_prepare_head()
$head[$h][2] = 'setup'; $head[$h][2] = 'setup';
$h++; $h++;
$head[$h][0] = DOL_URL_ROOT.'/takepos/admin/appearance.php';
$head[$h][1] = $langs->trans("Appearance");
$head[$h][2] = 'appearance';
$h++;
$head[$h][0] = DOL_URL_ROOT.'/takepos/admin/receipt.php'; $head[$h][0] = DOL_URL_ROOT.'/takepos/admin/receipt.php';
$head[$h][1] = $langs->trans("Receipt"); $head[$h][1] = $langs->trans("Receipt");
$head[$h][2] = 'receipt'; $head[$h][2] = 'receipt';

View File

@ -1484,7 +1484,7 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM
// Direct debit order // Direct debit order
if (!empty($conf->prelevement->enabled)) if (!empty($conf->prelevement->enabled))
{ {
$newmenu->add("/compta/prelevement/index.php?leftmenu=withdraw&amp;mainmenu=bank", $langs->trans("StandingOrders"), 0, $user->rights->prelevement->bons->lire, '', $mainmenu, 'withdraw'); $newmenu->add("/compta/prelevement/index.php?leftmenu=withdraw&amp;mainmenu=bank", $langs->trans("PaymentByDirectDebit"), 0, $user->rights->prelevement->bons->lire, '', $mainmenu, 'withdraw');
if ($usemenuhider || empty($leftmenu) || $leftmenu == "withdraw") { if ($usemenuhider || empty($leftmenu) || $leftmenu == "withdraw") {
$newmenu->add("/compta/prelevement/create.php?mainmenu=bank", $langs->trans("NewStandingOrder"), 1, $user->rights->prelevement->bons->creer); $newmenu->add("/compta/prelevement/create.php?mainmenu=bank", $langs->trans("NewStandingOrder"), 1, $user->rights->prelevement->bons->creer);

View File

@ -143,8 +143,11 @@ if (empty($reshook) && is_array($extrafields->attributes[$object->table_element]
if ($object->element == 'shipping') $permok = $user->rights->expedition->creer; if ($object->element == 'shipping') $permok = $user->rights->expedition->creer;
if ($object->element == 'delivery') $permok = $user->rights->expedition->livraison->creer; if ($object->element == 'delivery') $permok = $user->rights->expedition->livraison->creer;
if ($object->element == 'productlot') $permok = $user->rights->stock->creer; if ($object->element == 'productlot') $permok = $user->rights->stock->creer;
if ($object->element == 'facturerec') $permok = $user->rights->facture->creer; if ($object->element == 'facturerec') $permok = $user->rights->facture->creer;
if (($object->statut == 0 || !empty($extrafields->attributes[$object->table_element]['alwayseditable'][$key])) if ($object->element == 'mo') $permok = $user->rights->mrp->write;
$isdraft = ((isset($object->statut) && $object->statut == 0) || (isset($object->status) && $object->status == 0));
if (($isdraft || !empty($extrafields->attributes[$object->table_element]['alwayseditable'][$key]))
&& $permok && $enabled != 5 && ($action != 'edit_extras' || GETPOST('attribute') != $key) && $permok && $enabled != 5 && ($action != 'edit_extras' || GETPOST('attribute') != $key)
&& empty($extrafields->attributes[$object->table_element]['computed'][$key])) && empty($extrafields->attributes[$object->table_element]['computed'][$key]))
{ {

View File

@ -85,7 +85,7 @@ if ($nolinesbefore) {
<td class="linecolnum center"></td> <td class="linecolnum center"></td>
<?php } ?> <?php } ?>
<td class="linecoldescription minwidth500imp"> <td class="linecoldescription minwidth500imp">
<div id="add"></div><span class="hideonsmartphone"><?php echo $langs->trans('AddNewLine'); ?></span><?php // echo $langs->trans("FreeZone"); ?> <div id="add"></div><span class="hideonsmartphone"><?php echo $langs->trans('AddNewLine'); ?></span>
</td> </td>
<?php <?php
if ($object->element == 'supplier_proposal' || $object->element == 'order_supplier' || $object->element == 'invoice_supplier') // We must have same test in printObjectLines if ($object->element == 'supplier_proposal' || $object->element == 'order_supplier' || $object->element == 'invoice_supplier') // We must have same test in printObjectLines

View File

@ -59,7 +59,19 @@ if ($this->element == 'supplier_proposal' || $this->element == 'order_supplier'
} }
// VAT // VAT
print '<td class="linecolvat right" style="width: 80px">'.$langs->trans('VAT').'</td>'; print '<td class="linecolvat right" style="width: 80px">'.$langs->trans('VAT');
if (in_array($object->element, array('propal', 'commande', 'facture')) && $object->status == $object::STATUS_DRAFT)
{
global $mysoc;
print img_edit($langs->trans("UpdateForAllLines"), 0, 'class="clickvatforalllines opacitymedium paddingleft"');
print '<script>$(document).ready(function() { $(".clickvatforalllines").click(function() { jQuery(".classvatforalllines").toggle(); }); });</script>';
print '<div class="classvatforalllines hidden inline-block nowraponall">';
//print '<input class="inline-block maxwidth50" type="text" name="vatforalllines" id="vatforalllines" value="">';
print $form->load_tva('vatforalllines', '', $mysoc, $object->thirdparty, 0, 0, '', false, 1);
print '<input class="inline-block" type="submit" name="submitforalllines" value="'.$langs->trans("Update").'">';
print '</div>';
}
print '</td>';
// Price HT // Price HT
print '<td class="linecoluht right" style="width: 80px">'.$langs->trans('PriceUHT').'</td>'; print '<td class="linecoluht right" style="width: 80px">'.$langs->trans('PriceUHT').'</td>';

View File

@ -86,6 +86,10 @@ insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values ( 9
insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values ( 93, 9, '3','0','VAT super reduced rate 0',1); insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values ( 93, 9, '3','0','VAT super reduced rate 0',1);
insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values ( 94, 9, '17','0','VAT standard rate',1); insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values ( 94, 9, '17','0','VAT standard rate',1);
-- CONGO = REPUBLIQUE DU CONGO (id country=72)
insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (721, 72, '0','0','VAT Rate 0',1);
insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,localtax1,localtax1_type,note,active) values (722, 72, '18','0', '0.9', '1', 'VAT Rate 18+0.9', 1);
-- CYPRUS (id country=78) -- CYPRUS (id country=78)
insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (781, 78, '0','0','VAT Rate 0',1); insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (781, 78, '0','0','VAT Rate 0',1);
insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (782, 78, '9','0','VAT Rate 9',1); insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (782, 78, '9','0','VAT Rate 9',1);

View File

@ -81,6 +81,8 @@ delete from llx_const where name in ('PROJECT_HIDE_TASKS', 'MAIN_BUGTRACK_ENABLE
-- For v12 -- For v12
ALTER TABLE llx_bom_bom MODIFY COLUMN duration double(24,8);
ALTER TABLE llx_prelevement_bons ADD COLUMN type varchar(16) DEFAULT 'debit-order'; ALTER TABLE llx_prelevement_bons ADD COLUMN type varchar(16) DEFAULT 'debit-order';
ALTER TABLE llx_ecm_files MODIFY COLUMN src_object_type varchar(64); ALTER TABLE llx_ecm_files MODIFY COLUMN src_object_type varchar(64);
@ -322,3 +324,6 @@ UPDATE llx_prelevement_facture_demande SET entity = 1 WHERE entity IS NULL;
ALTER TABLE llx_prelevement_facture_demande ADD INDEX idx_prelevement_facture_demande_fk_facture (fk_facture); ALTER TABLE llx_prelevement_facture_demande ADD INDEX idx_prelevement_facture_demande_fk_facture (fk_facture);
ALTER TABLE llx_prelevement_facture_demande ADD INDEX idx_prelevement_facture_demande_fk_facture_fourn (fk_facture_fourn); ALTER TABLE llx_prelevement_facture_demande ADD INDEX idx_prelevement_facture_demande_fk_facture_fourn (fk_facture_fourn);
insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (721, 72, '0','0','VAT Rate 0',1);
insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,localtax1,localtax1_type,note,active) values (722, 72, '18','0', '0.9', '1', 'VAT Rate 18+0.9', 1);

View File

@ -35,6 +35,8 @@ ALTER TABLE llx_prelevement_bons ADD COLUMN type varchar(16) DEFAULT 'debit-orde
ALTER TABLE llx_prelevement_facture_demande ADD INDEX idx_prelevement_facture_demande_fk_facture (fk_facture); ALTER TABLE llx_prelevement_facture_demande ADD INDEX idx_prelevement_facture_demande_fk_facture (fk_facture);
ALTER TABLE llx_prelevement_facture_demande ADD INDEX idx_prelevement_facture_demande_fk_facture_fourn (fk_facture_fourn); ALTER TABLE llx_prelevement_facture_demande ADD INDEX idx_prelevement_facture_demande_fk_facture_fourn (fk_facture_fourn);
ALTER TABLE llx_bom_bom MODIFY COLUMN duration double(24,8);
-- For v13 -- For v13

View File

@ -543,7 +543,7 @@ Module54Desc=Management of contracts (services or recurring subscriptions)
Module55Name=Barcodes Module55Name=Barcodes
Module55Desc=Barcode management Module55Desc=Barcode management
Module56Name=Payment by credit transfer Module56Name=Payment by credit transfer
Module56Desc=Management of payment by credit transfer orders. It includes generation of SEPA file for European countries. Module56Desc=Management of payment of suppliers by credit transfer orders. It includes generation of SEPA file for European countries.
Module57Name=Bank Direct Debit payments Module57Name=Bank Direct Debit payments
Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries. Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
Module58Name=ClickToDial Module58Name=ClickToDial
@ -1983,7 +1983,7 @@ SmallerThan=Smaller than
LargerThan=Larger than LargerThan=Larger than
IfTrackingIDFoundEventWillBeLinked=Note that If a tracking ID is found into incoming email, the event will be automatically linked to the related objects. IfTrackingIDFoundEventWillBeLinked=Note that If a tracking ID is found into incoming email, the event will be automatically linked to the related objects.
WithGMailYouCanCreateADedicatedPassword=With a GMail account, if you enabled the 2 steps validation, it is recommanded to create a dedicated second password for the application instead of using your own account passsword from https://myaccount.google.com/. WithGMailYouCanCreateADedicatedPassword=With a GMail account, if you enabled the 2 steps validation, it is recommanded to create a dedicated second password for the application instead of using your own account passsword from https://myaccount.google.com/.
EmailCollectorTargetDir=It may be a desired behaviour to move the email into another tag/directory when it was processed successfully. Just set a value here to use this feature. Note that you must also use a read/write login account. EmailCollectorTargetDir=It may be a desired behaviour to move the email into another tag/directory when it was processed successfully. Just set name of directory here to use this feature (Do NOT use special characters in name). Note that you must also use a read/write login account.
EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body.
EndPointFor=End point for %s : %s EndPointFor=End point for %s : %s
DeleteEmailCollector=Delete email collector DeleteEmailCollector=Delete email collector

View File

@ -63,6 +63,7 @@ ShipmentClassifyClosedInDolibarr=Shipment %s classified billed
ShipmentUnClassifyCloseddInDolibarr=Shipment %s classified re-open ShipmentUnClassifyCloseddInDolibarr=Shipment %s classified re-open
ShipmentBackToDraftInDolibarr=Shipment %s go back to draft status ShipmentBackToDraftInDolibarr=Shipment %s go back to draft status
ShipmentDeletedInDolibarr=Shipment %s deleted ShipmentDeletedInDolibarr=Shipment %s deleted
ReceptionValidatedInDolibarr=Reception %s validated
OrderCreatedInDolibarr=Order %s created OrderCreatedInDolibarr=Order %s created
OrderValidatedInDolibarr=Order %s validated OrderValidatedInDolibarr=Order %s validated
OrderDeliveredInDolibarr=Order %s classified delivered OrderDeliveredInDolibarr=Order %s classified delivered

View File

@ -37,6 +37,7 @@ IbanValid=BAN valid
IbanNotValid=BAN not valid IbanNotValid=BAN not valid
StandingOrders=Direct debit orders StandingOrders=Direct debit orders
StandingOrder=Direct debit order StandingOrder=Direct debit order
PaymentByDirectDebit=Payment by direct debit
PaymentByBankTransfers=Payments by credit transfer PaymentByBankTransfers=Payments by credit transfer
PaymentByBankTransfer=Payment by credit transfer PaymentByBankTransfer=Payment by credit transfer
AccountStatement=Account statement AccountStatement=Account statement
@ -105,8 +106,8 @@ SupplierInvoicePayment=Vendor payment
SubscriptionPayment=Subscription payment SubscriptionPayment=Subscription payment
WithdrawalPayment=Debit payment order WithdrawalPayment=Debit payment order
SocialContributionPayment=Social/fiscal tax payment SocialContributionPayment=Social/fiscal tax payment
BankTransfer=Bank transfer BankTransfer=Credit transfer
BankTransfers=Bank transfers BankTransfers=Credit transfers
MenuBankInternalTransfer=Internal transfer MenuBankInternalTransfer=Internal transfer
TransferDesc=Transfer from one account to another, Dolibarr will write two records (a debit in source account and a credit in target account). The same amount (except sign), label and date will be used for this transaction) TransferDesc=Transfer from one account to another, Dolibarr will write two records (a debit in source account and a credit in target account). The same amount (except sign), label and date will be used for this transaction)
TransferFrom=From TransferFrom=From

View File

@ -441,6 +441,8 @@ BankAccountNumberKey=Checksum
Residence=Address Residence=Address
IBANNumber=IBAN account number IBANNumber=IBAN account number
IBAN=IBAN IBAN=IBAN
CustomerIBAN=IBAN of customer
SupplierIBAN=IBAN of vendor
BIC=BIC/SWIFT BIC=BIC/SWIFT
BICNumber=BIC/SWIFT code BICNumber=BIC/SWIFT code
ExtraInfos=Extra infos ExtraInfos=Extra infos

View File

@ -107,6 +107,13 @@ OrderPrinterToUse=Order printer to use
MainTemplateToUse=Main template to use MainTemplateToUse=Main template to use
OrderTemplateToUse=Order template to use OrderTemplateToUse=Order template to use
BarRestaurant=Bar Restaurant BarRestaurant=Bar Restaurant
AutoOrder=Customer auto order AutoOrder=Order by the customer himself
RestaurantMenu=Menu RestaurantMenu=Menu
CustomerMenu=Customer menu CustomerMenu=Customer menu
ScanToMenu=Scan QR code to see the menu
ScanToOrder=Scan QR code to order
Appearance=Appearance
HideCategoryImages=Hide Category Images
HideProductImages=Hide Product Images
NumberOfLinesToShow=Number of lines to show in image box
DefineTablePlan=Define table plan

View File

@ -99,3 +99,6 @@ TypeContact_contrat_internal_SALESREPFOLL=Sales representative following-up cont
TypeContact_contrat_external_BILLING=Billing customer contact TypeContact_contrat_external_BILLING=Billing customer contact
TypeContact_contrat_external_CUSTOMER=Follow-up customer contact TypeContact_contrat_external_CUSTOMER=Follow-up customer contact
TypeContact_contrat_external_SALESREPSIGN=Signing contract customer contact TypeContact_contrat_external_SALESREPSIGN=Signing contract customer contact
HideClosedServiceByDefault=Hide closed services by default
ShowClosedServices=Show Closed Services
HideClosedServices=Hide Closed Services

View File

@ -36,6 +36,7 @@ ErrorBadSupplierCodeSyntax=Bad syntax for vendor code
ErrorSupplierCodeRequired=Vendor code required ErrorSupplierCodeRequired=Vendor code required
ErrorSupplierCodeAlreadyUsed=Vendor code already used ErrorSupplierCodeAlreadyUsed=Vendor code already used
ErrorBadParameters=Bad parameters ErrorBadParameters=Bad parameters
ErrorWrongParameters=Wrong or missing parameters
ErrorBadValueForParameter=Wrong value '%s' for parameter '%s' ErrorBadValueForParameter=Wrong value '%s' for parameter '%s'
ErrorBadImageFormat=Image file has not a supported format (Your PHP does not support functions to convert images of this format) ErrorBadImageFormat=Image file has not a supported format (Your PHP does not support functions to convert images of this format)
ErrorBadDateFormat=Value '%s' has wrong date format ErrorBadDateFormat=Value '%s' has wrong date format
@ -119,7 +120,7 @@ ErrorLoginHasNoEmail=This user has no email address. Process aborted.
ErrorBadValueForCode=Bad value for security code. Try again with new value... ErrorBadValueForCode=Bad value for security code. Try again with new value...
ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative
ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> cannot be negative on this type of invoice. If you need to add a discount line, just create the discount first (from field '%s' in thirdparty card) and apply it to the invoice. ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> cannot be negative on this type of invoice. If you need to add a discount line, just create the discount first (from field '%s' in thirdparty card) and apply it to the invoice.
ErrorLinesCantBeNegativeForOneVATRate=Total of lines can't be negative for a given VAT rate. ErrorLinesCantBeNegativeForOneVATRate=Total of lines (net of tax) can't be negative for a given not null VAT rate (Found a negative total for VAT rate <b>%s</b>%%).
ErrorLinesCantBeNegativeOnDeposits=Lines can't be negative in a deposit. You will face problems when you will need to consume the deposit in final invoice if you do so. ErrorLinesCantBeNegativeOnDeposits=Lines can't be negative in a deposit. You will face problems when you will need to consume the deposit in final invoice if you do so.
ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that
@ -183,6 +184,7 @@ ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In
ErrorSavingChanges=An error has occurred when saving the changes ErrorSavingChanges=An error has occurred when saving the changes
ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
ErrorFileMustHaveFormat=File must have format %s ErrorFileMustHaveFormat=File must have format %s
ErrorFilenameCantStartWithDot=Filename can't start with a '.'
ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first. ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
ErrorsThirdpartyMerge=Failed to merge the two records. Request canceled. ErrorsThirdpartyMerge=Failed to merge the two records. Request canceled.
ErrorStockIsNotEnoughToAddProductOnOrder=Stock is not enough for product %s to add it into a new order. ErrorStockIsNotEnoughToAddProductOnOrder=Stock is not enough for product %s to add it into a new order.

View File

@ -15,6 +15,7 @@ CancelCP=Canceled
RefuseCP=Refused RefuseCP=Refused
ValidatorCP=Approbator ValidatorCP=Approbator
ListeCP=List of leave ListeCP=List of leave
Leave=Leave request
LeaveId=Leave ID LeaveId=Leave ID
ReviewedByCP=Will be approved by ReviewedByCP=Will be approved by
UserID=User ID UserID=User ID

View File

@ -23,6 +23,9 @@ AddLoan=Create loan
FinancialCommitment=Financial commitment FinancialCommitment=Financial commitment
InterestAmount=Interest InterestAmount=Interest
CapitalRemain=Capital remain CapitalRemain=Capital remain
TermPaidAllreadyPaid = This term is allready paid
CantUseScheduleWithLoanStartedToPaid = Can't use scheduler for a loan with payment started
CantModifyInterestIfScheduleIsUsed = You can't modify interest if you use schedule
# Admin # Admin
ConfigLoan=Configuration of the module loan ConfigLoan=Configuration of the module loan
LOAN_ACCOUNTING_ACCOUNT_CAPITAL=Accounting account capital by default LOAN_ACCOUNTING_ACCOUNT_CAPITAL=Accounting account capital by default

View File

@ -7,7 +7,7 @@ ProjectsArea=Projects Area
ProjectStatus=Project status ProjectStatus=Project status
SharedProject=Everybody SharedProject=Everybody
PrivateProject=Project contacts PrivateProject=Project contacts
ProjectsImContactFor=Projects for I am explicitly a contact ProjectsImContactFor=Projects for which I am explicitly a contact
AllAllowedProjects=All project I can read (mine + public) AllAllowedProjects=All project I can read (mine + public)
AllProjects=All projects AllProjects=All projects
MyProjectsDesc=This view is limited to projects you are a contact for MyProjectsDesc=This view is limited to projects you are a contact for

View File

@ -84,3 +84,4 @@ DefaultModelPropalClosed=Default template when closing a business proposal (unbi
ProposalCustomerSignature=Written acceptance, company stamp, date and signature ProposalCustomerSignature=Written acceptance, company stamp, date and signature
ProposalsStatisticsSuppliers=Vendor proposals statistics ProposalsStatisticsSuppliers=Vendor proposals statistics
CaseFollowedBy=Case followed by CaseFollowedBy=Case followed by
SignedOnly=Signed only

View File

@ -56,16 +56,15 @@ DOL_UNDERLINE=Enable underline
DOL_UNDERLINE_DISABLED=Disable underline DOL_UNDERLINE_DISABLED=Disable underline
DOL_BEEP=Beed sound DOL_BEEP=Beed sound
DOL_PRINT_TEXT=Print text DOL_PRINT_TEXT=Print text
DOL_VALUE_DATE=Invoice date DateInvoiceWithTime=Invoice date and time
DOL_VALUE_DATE_TIME=Invoice date and time YearInvoice=Invoice year
DOL_VALUE_YEAR=Invoice year
DOL_VALUE_MONTH_LETTERS=Invoice month in letters DOL_VALUE_MONTH_LETTERS=Invoice month in letters
DOL_VALUE_MONTH=Invoice month DOL_VALUE_MONTH=Invoice month
DOL_VALUE_DAY=Invoice day DOL_VALUE_DAY=Invoice day
DOL_VALUE_DAY_LETTERS=Inovice day in letters DOL_VALUE_DAY_LETTERS=Inovice day in letters
DOL_LINE_FEED_REVERSE=Line feed reverse DOL_LINE_FEED_REVERSE=Line feed reverse
DOL_VALUE_OBJECT_ID=Invoice ID InvoiceID=Invoice ID
DOL_VALUE_OBJECT_REF=Invoice ref InvoiceRef=Invoice ref
DOL_PRINT_OBJECT_LINES=Invoice lines DOL_PRINT_OBJECT_LINES=Invoice lines
DOL_VALUE_CUSTOMER_FIRSTNAME=Customer first name DOL_VALUE_CUSTOMER_FIRSTNAME=Customer first name
DOL_VALUE_CUSTOMER_LASTNAME=Customer last name DOL_VALUE_CUSTOMER_LASTNAME=Customer last name
@ -76,20 +75,8 @@ DOL_VALUE_CUSTOMER_SKYPE=Customer Skype
DOL_VALUE_CUSTOMER_TAX_NUMBER=Customer tax number DOL_VALUE_CUSTOMER_TAX_NUMBER=Customer tax number
DOL_VALUE_CUSTOMER_ACCOUNT_BALANCE=Customer account balance DOL_VALUE_CUSTOMER_ACCOUNT_BALANCE=Customer account balance
DOL_VALUE_MYSOC_NAME=Your company name DOL_VALUE_MYSOC_NAME=Your company name
DOL_VALUE_MYSOC_ADDRESS=Your company address VendorLastname=Vendor last name
DOL_VALUE_MYSOC_ZIP=Your zip code VendorFirstname=Vendor first name
DOL_VALUE_MYSOC_TOWN=Your town VendorEmail=Vendor email
DOL_VALUE_MYSOC_COUNTRY=Your country
DOL_VALUE_MYSOC_IDPROF1=Your IDPROF1
DOL_VALUE_MYSOC_IDPROF2=Your IDPROF2
DOL_VALUE_MYSOC_IDPROF3=Your IDPROF3
DOL_VALUE_MYSOC_IDPROF4=Your IDPROF4
DOL_VALUE_MYSOC_IDPROF5=Your IDPROF5
DOL_VALUE_MYSOC_IDPROF6=Your IDPROF6
DOL_VALUE_MYSOC_TVA_INTRA=Intra-Community VAT ID
DOL_VALUE_MYSOC_CAPITAL=Capital
DOL_VALUE_VENDOR_LASTNAME=Vendor last name
DOL_VALUE_VENDOR_FIRSTNAME=Vendor first name
DOL_VALUE_VENDOR_MAIL=Vendor mail
DOL_VALUE_CUSTOMER_POINTS=Customer points DOL_VALUE_CUSTOMER_POINTS=Customer points
DOL_VALUE_OBJECT_POINTS=Object points DOL_VALUE_OBJECT_POINTS=Object points

View File

@ -17,6 +17,10 @@ CancelSending=Cancel sending
DeleteSending=Delete sending DeleteSending=Delete sending
Stock=Stock Stock=Stock
Stocks=Stocks Stocks=Stocks
MissingStocks=Missing stocks
StockAtDate=Stock at date
StockAtDateInPast=Date in past
StockAtDateInFuture=Date in future
StocksByLotSerial=Stocks by lot/serial StocksByLotSerial=Stocks by lot/serial
LotSerial=Lots/Serials LotSerial=Lots/Serials
LotSerialList=List of lot/serials LotSerialList=List of lot/serials
@ -30,6 +34,7 @@ StockMovementForId=Movement ID %d
ListMouvementStockProject=List of stock movements associated to project ListMouvementStockProject=List of stock movements associated to project
StocksArea=Warehouses area StocksArea=Warehouses area
AllWarehouses=All warehouses AllWarehouses=All warehouses
IncludeEmptyDesiredStock=Include also undefined desired stock
IncludeAlsoDraftOrders=Include also draft orders IncludeAlsoDraftOrders=Include also draft orders
Location=Location Location=Location
LocationSummary=Short name location LocationSummary=Short name location
@ -59,10 +64,9 @@ AllowAddLimitStockByWarehouse=Manage also value for minimum and desired stock pe
RuleForWarehouse=Rule for warehouses RuleForWarehouse=Rule for warehouses
WarehouseAskWarehouseDuringOrder=Set a warehouse on Sale orders WarehouseAskWarehouseDuringOrder=Set a warehouse on Sale orders
UserDefaultWarehouse=Set a warehouse on Users UserDefaultWarehouse=Set a warehouse on Users
DefaultWarehouseActive=Default warehouse active
MainDefaultWarehouse=Default warehouse MainDefaultWarehouse=Default warehouse
MainDefaultWarehouseUser=Use user warehouse asign default MainDefaultWarehouseUser=Use a default warehouse for each user
MainDefaultWarehouseUserDesc=/!\\ By activating this option the gold of the creation of an article, the warehouse assigned to the user will be defined on this one. If no warehouse is defined on the user, the default warehouse is defined. MainDefaultWarehouseUserDesc=By activating this option, during creation of a product, the warehouse assigned to the product will be defined on this one. If no warehouse is defined on the user, the default warehouse is defined.
IndependantSubProductStock=Product stock and subproduct stock are independent IndependantSubProductStock=Product stock and subproduct stock are independent
QtyDispatched=Quantity dispatched QtyDispatched=Quantity dispatched
QtyDispatchedShort=Qty dispatched QtyDispatchedShort=Qty dispatched
@ -126,6 +130,7 @@ CurentlyUsingPhysicalStock=Physical stock
RuleForStockReplenishment=Rule for stocks replenishment RuleForStockReplenishment=Rule for stocks replenishment
SelectProductWithNotNullQty=Select at least one product with a qty not null and a vendor SelectProductWithNotNullQty=Select at least one product with a qty not null and a vendor
AlertOnly= Alerts only AlertOnly= Alerts only
IncludeProductWithUndefinedAlerts = Include also negative stock for products with no desired quantity defined, to restore them to 0
WarehouseForStockDecrease=The warehouse <b>%s</b> will be used for stock decrease WarehouseForStockDecrease=The warehouse <b>%s</b> will be used for stock decrease
WarehouseForStockIncrease=The warehouse <b>%s</b> will be used for stock increase WarehouseForStockIncrease=The warehouse <b>%s</b> will be used for stock increase
ForThisWarehouse=For this warehouse ForThisWarehouse=For this warehouse
@ -227,3 +232,6 @@ InventoryForASpecificProduct=Inventory for a specific product
StockIsRequiredToChooseWhichLotToUse=Stock is required to choose which lot to use StockIsRequiredToChooseWhichLotToUse=Stock is required to choose which lot to use
ForceTo=Force to ForceTo=Force to
AlwaysShowFullArbo=Display full tree of warehouse on popup of warehouse links (Warning: This may decrease dramatically performances) AlwaysShowFullArbo=Display full tree of warehouse on popup of warehouse links (Warning: This may decrease dramatically performances)
StockAtDatePastDesc=You can view here the stock (real stock) at a given date in the past
StockAtDateFutureDesc=You can view here the stock (virtual stock) at a given date in future
CurrentStock=Current stock

View File

@ -58,7 +58,10 @@ NoPageYet=No pages yet
YouCanCreatePageOrImportTemplate=You can create a new page or import a full website template YouCanCreatePageOrImportTemplate=You can create a new page or import a full website template
SyntaxHelp=Help on specific syntax tips SyntaxHelp=Help on specific syntax tips
YouCanEditHtmlSourceckeditor=You can edit HTML source code using the "Source" button in editor. YouCanEditHtmlSourceckeditor=You can edit HTML source code using the "Source" button in editor.
YouCanEditHtmlSource=<br><span class="fa fa-bug"></span> You can include PHP code into this source using tags <strong>&lt;?php ?&gt;</strong>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.<br><br><span class="fa fa-bug"></span> You can also include content of another Page/Container with the following syntax:<br><strong>&lt;?php includeContainer('alias_of_container_to_include'); ?&gt;</strong><br><br><span class="fa fa-bug"></span> You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):<br><strong>&lt;?php redirectToContainer('alias_of_container_to_redirect_to'); ?&gt;</strong><br><br><span class="fa fa-link"></span> To add a link to another page, use the syntax:<br><strong>&lt;a href="alias_of_page_to_link_to.php"&gt;mylink&lt;a&gt;</strong><br><br><span class="fa fa-download"></span> To include a <strong>link to download</strong> a file stored into the <strong>documents</strong> directory, use the <strong>document.php</strong> wrapper:<br>Example, for a file into documents/ecm (need to be logged), syntax is:<br><strong>&lt;a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file into documents/medias (open directory for public access), syntax is:<br><strong>&lt;a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file shared with a share link (open access using the sharing hash key of file), syntax is:<br><strong>&lt;a href="/document.php?hashp=publicsharekeyoffile"&gt;</strong><br><br><span class="fa fa-picture-o"></span> To include an <strong>image</strong> stored into the <strong>documents</strong> directory, use the <strong>viewimage.php</strong> wrapper:<br>Example, for an image into documents/medias (open directory for public access), syntax is:<br><strong>&lt;img src="/viewimage.php?modulepart=medias&amp;file=[relative_dir/]filename.ext"&gt;</strong><br><br>More examples of HTML or dynamic code available on <a href="%s" target="_blank">the wiki documentation</a><br>. YouCanEditHtmlSource=<br><span class="fa fa-bug"></span> You can include PHP code into this source using tags <strong>&lt;?php ?&gt;</strong>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.<br><br><span class="fa fa-bug"></span> You can also include content of another Page/Container with the following syntax:<br><strong>&lt;?php includeContainer('alias_of_container_to_include'); ?&gt;</strong><br><br><span class="fa fa-bug"></span> You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):<br><strong>&lt;?php redirectToContainer('alias_of_container_to_redirect_to'); ?&gt;</strong><br><br><span class="fa fa-link"></span> To add a link to another page, use the syntax:<br><strong>&lt;a href="alias_of_page_to_link_to.php"&gt;mylink&lt;a&gt;</strong><br><br><span class="fa fa-download"></span> To include a <strong>link to download</strong> a file stored into the <strong>documents</strong> directory, use the <strong>document.php</strong> wrapper:<br>Example, for a file into documents/ecm (need to be logged), syntax is:<br><strong>&lt;a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file into documents/medias (open directory for public access), syntax is:<br><strong>&lt;a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file shared with a share link (open access using the sharing hash key of file), syntax is:<br><strong>&lt;a href="/document.php?hashp=publicsharekeyoffile"&gt;</strong><br><br><span class="fa fa-picture-o"></span> To include an <strong>image</strong> stored into the <strong>documents</strong> directory, use the <strong>viewimage.php</strong> wrapper:<br>Example, for an image into documents/medias (open directory for public access), syntax is:<br><strong>&lt;img src="/viewimage.php?modulepart=medias&amp;file=[relative_dir/]filename.ext"&gt;</strong><br>
#YouCanEditHtmlSource2=<br><span class="fa fa-picture-o"></span> To include a <strong>image</strong> shared publicaly, use the <strong>viewimage.php</strong> wrapper:<br>Example with a shared key 123456789, syntax is:<br><strong>&lt;img src="/viewimage.php?hashp=12345679012..."&gt;</strong><br>
YouCanEditHtmlSource2=For an image shared with a share link (open access using the sharing hash key of file), syntax is:<br><strong>&lt;img src="/viewimage.php?hashp=12345679012..."&gt;</strong><br>
YouCanEditHtmlSourceMore=<br>More examples of HTML or dynamic code available on <a href="%s" target="_blank">the wiki documentation</a><br>.
ClonePage=Clone page/container ClonePage=Clone page/container
CloneSite=Clone site CloneSite=Clone site
SiteAdded=Website added SiteAdded=Website added

View File

@ -10,8 +10,8 @@ PaymentByBankTransferReceipts=Credit transfer orders
PaymentByBankTransferLines=Credit transfer order lines PaymentByBankTransferLines=Credit transfer order lines
WithdrawalsReceipts=Direct debit orders WithdrawalsReceipts=Direct debit orders
WithdrawalReceipt=Direct debit order WithdrawalReceipt=Direct debit order
BankTransferReceipts=Credit transfer receipts BankTransferReceipts=Credit transfer order
BankTransferReceipt=Credit transfer receipt BankTransferReceipt=Credit transfer order
LatestBankTransferReceipts=Latest %s credit transfer orders LatestBankTransferReceipts=Latest %s credit transfer orders
LastWithdrawalReceipts=Latest %s direct debit files LastWithdrawalReceipts=Latest %s direct debit files
WithdrawalsLine=Direct debit order line WithdrawalsLine=Direct debit order line
@ -34,12 +34,13 @@ NoInvoiceToWithdraw=No invoice open for '%s' is waiting. Go on tab '%s' on invoi
NoSupplierInvoiceToWithdraw=No supplier invoice with open 'Direct credit requests' is waiting. Go on tab '%s' on invoice card to make a request. NoSupplierInvoiceToWithdraw=No supplier invoice with open 'Direct credit requests' is waiting. Go on tab '%s' on invoice card to make a request.
ResponsibleUser=User Responsible ResponsibleUser=User Responsible
WithdrawalsSetup=Direct debit payment setup WithdrawalsSetup=Direct debit payment setup
CreditTransferSetup=Crebit transfer setup CreditTransferSetup=Credit transfer setup
WithdrawStatistics=Direct debit payment statistics WithdrawStatistics=Direct debit payment statistics
CreditTransferStatistics=Credit transfer statistics CreditTransferStatistics=Credit transfer statistics
Rejects=Rejects Rejects=Rejects
LastWithdrawalReceipt=Latest %s direct debit receipts LastWithdrawalReceipt=Latest %s direct debit receipts
MakeWithdrawRequest=Make a direct debit payment request MakeWithdrawRequest=Make a direct debit payment request
MakeBankTransferOrder=Make a credit transfer request
WithdrawRequestsDone=%s direct debit payment requests recorded WithdrawRequestsDone=%s direct debit payment requests recorded
ThirdPartyBankCode=Third-party bank code ThirdPartyBankCode=Third-party bank code
NoInvoiceCouldBeWithdrawed=No invoice debited successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode <strong>%s</strong>. NoInvoiceCouldBeWithdrawed=No invoice debited successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode <strong>%s</strong>.
@ -92,7 +93,8 @@ CreditDate=Credit on
WithdrawalFileNotCapable=Unable to generate withdrawal receipt file for your country %s (Your country is not supported) WithdrawalFileNotCapable=Unable to generate withdrawal receipt file for your country %s (Your country is not supported)
ShowWithdraw=Show Direct Debit Order ShowWithdraw=Show Direct Debit Order
IfInvoiceNeedOnWithdrawPaymentWontBeClosed=However, if invoice has at least one direct debit payment order not yet processed, it won't be set as paid to allow prior withdrawal management. IfInvoiceNeedOnWithdrawPaymentWontBeClosed=However, if invoice has at least one direct debit payment order not yet processed, it won't be set as paid to allow prior withdrawal management.
DoStandingOrdersBeforePayments=This tab allows you to request a direct debit payment order. Once done, go into menu Bank->Direct Debit orders to manage the direct debit payment order. When payment order is closed, payment on invoice will be automatically recorded, and invoice closed if remainder to pay is null. DoStandingOrdersBeforePayments=This tab allows you to request a direct debit payment order. Once done, go into menu Bank->Direct Debit orders to generate and manage the direct debit payment order. When direct debit order is closed, payment on invoices will be automatically recorded, and invoices closed if remainder to pay is null.
DoCreditTransferBeforePayments=This tab allows you to request a credit transfer order. Once done, go into menu Bank->Credit transfer orders to generate and manage the credit transfer order. When credit transfer order is closed, payment on invoices will be automatically recorded, and invoices closed if remainder to pay is null.
WithdrawalFile=Withdrawal file WithdrawalFile=Withdrawal file
SetToStatusSent=Set to status "File Sent" SetToStatusSent=Set to status "File Sent"
ThisWillAlsoAddPaymentOnInvoice=This will also record payments on invoices and will classify them as "Paid" if remain to pay is null ThisWillAlsoAddPaymentOnInvoice=This will also record payments on invoices and will classify them as "Paid" if remain to pay is null
@ -103,6 +105,7 @@ RUMLong=Unique Mandate Reference
RUMWillBeGenerated=If empty, a UMR (Unique Mandate Reference) will be generated once the bank account information is saved. RUMWillBeGenerated=If empty, a UMR (Unique Mandate Reference) will be generated once the bank account information is saved.
WithdrawMode=Direct debit mode (FRST or RECUR) WithdrawMode=Direct debit mode (FRST or RECUR)
WithdrawRequestAmount=Amount of Direct debit request: WithdrawRequestAmount=Amount of Direct debit request:
BankTransferAmount=Amount of Credit Transfer request:
WithdrawRequestErrorNilAmount=Unable to create direct debit request for empty amount. WithdrawRequestErrorNilAmount=Unable to create direct debit request for empty amount.
SepaMandate=SEPA Direct Debit Mandate SepaMandate=SEPA Direct Debit Mandate
SepaMandateShort=SEPA Mandate SepaMandateShort=SEPA Mandate
@ -128,7 +131,7 @@ ICS=Creditor Identifier CI
END_TO_END="EndToEndId" SEPA XML tag - Unique id assigned per transaction END_TO_END="EndToEndId" SEPA XML tag - Unique id assigned per transaction
USTRD="Unstructured" SEPA XML tag USTRD="Unstructured" SEPA XML tag
ADDDAYS=Add days to Execution Date ADDDAYS=Add days to Execution Date
NoDefaultIBANFound=No default IBAN found for this third party
### Notifications ### Notifications
InfoCreditSubject=Payment of direct debit payment order %s by the bank InfoCreditSubject=Payment of direct debit payment order %s by the bank
InfoCreditMessage=The direct debit payment order %s has been paid by the bank<br>Data of payment: %s InfoCreditMessage=The direct debit payment order %s has been paid by the bank<br>Data of payment: %s

View File

@ -543,7 +543,7 @@ Module54Desc=Management of contracts (services or recurring subscriptions)
Module55Name=Barcodes Module55Name=Barcodes
Module55Desc=Barcodes إدارة Module55Desc=Barcodes إدارة
Module56Name=Payment by credit transfer Module56Name=Payment by credit transfer
Module56Desc=Management of payment by credit transfer orders. It includes generation of SEPA file for European countries. Module56Desc=Management of payment of suppliers by credit transfer orders. It includes generation of SEPA file for European countries.
Module57Name=Bank Direct Debit payments Module57Name=Bank Direct Debit payments
Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries. Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
Module58Name=انقر للاتصال Module58Name=انقر للاتصال
@ -1983,7 +1983,7 @@ SmallerThan=Smaller than
LargerThan=Larger than LargerThan=Larger than
IfTrackingIDFoundEventWillBeLinked=Note that If a tracking ID is found into incoming email, the event will be automatically linked to the related objects. IfTrackingIDFoundEventWillBeLinked=Note that If a tracking ID is found into incoming email, the event will be automatically linked to the related objects.
WithGMailYouCanCreateADedicatedPassword=With a GMail account, if you enabled the 2 steps validation, it is recommanded to create a dedicated second password for the application instead of using your own account passsword from https://myaccount.google.com/. WithGMailYouCanCreateADedicatedPassword=With a GMail account, if you enabled the 2 steps validation, it is recommanded to create a dedicated second password for the application instead of using your own account passsword from https://myaccount.google.com/.
EmailCollectorTargetDir=It may be a desired behaviour to move the email into another tag/directory when it was processed successfully. Just set a value here to use this feature. Note that you must also use a read/write login account. EmailCollectorTargetDir=It may be a desired behaviour to move the email into another tag/directory when it was processed successfully. Just set name of directory here to use this feature (Do NOT use special characters in name). Note that you must also use a read/write login account.
EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body.
EndPointFor=End point for %s : %s EndPointFor=End point for %s : %s
DeleteEmailCollector=Delete email collector DeleteEmailCollector=Delete email collector

View File

@ -63,6 +63,7 @@ ShipmentClassifyClosedInDolibarr=الشحنة %sتم تصنيفها مدفوعة
ShipmentUnClassifyCloseddInDolibarr=Shipment %s classified re-open ShipmentUnClassifyCloseddInDolibarr=Shipment %s classified re-open
ShipmentBackToDraftInDolibarr=Shipment %s go back to draft status ShipmentBackToDraftInDolibarr=Shipment %s go back to draft status
ShipmentDeletedInDolibarr=الشحنة%sتم حذفها ShipmentDeletedInDolibarr=الشحنة%sتم حذفها
ReceptionValidatedInDolibarr=Reception %s validated
OrderCreatedInDolibarr=الطلب %s تم إنشاؤة OrderCreatedInDolibarr=الطلب %s تم إنشاؤة
OrderValidatedInDolibarr=الطلب %s تم التحقق منه OrderValidatedInDolibarr=الطلب %s تم التحقق منه
OrderDeliveredInDolibarr=الطلب %s مصنف تم التوصيل OrderDeliveredInDolibarr=الطلب %s مصنف تم التوصيل

View File

@ -37,6 +37,7 @@ IbanValid=بان صالحة
IbanNotValid=بان غير صالح IbanNotValid=بان غير صالح
StandingOrders=Direct debit orders StandingOrders=Direct debit orders
StandingOrder=أمر الخصم المباشر StandingOrder=أمر الخصم المباشر
PaymentByDirectDebit=Payment by direct debit
PaymentByBankTransfers=Payments by credit transfer PaymentByBankTransfers=Payments by credit transfer
PaymentByBankTransfer=Payment by credit transfer PaymentByBankTransfer=Payment by credit transfer
AccountStatement=كشف الحساب AccountStatement=كشف الحساب
@ -105,8 +106,8 @@ SupplierInvoicePayment=Vendor payment
SubscriptionPayment=دفع الاشتراك SubscriptionPayment=دفع الاشتراك
WithdrawalPayment=Debit payment order WithdrawalPayment=Debit payment order
SocialContributionPayment=مدفوعات الضرائب الاجتماعية / المالية SocialContributionPayment=مدفوعات الضرائب الاجتماعية / المالية
BankTransfer=حوالة مصرفية BankTransfer=Credit transfer
BankTransfers=حوالات المصرفية BankTransfers=Credit transfers
MenuBankInternalTransfer=حوالة داخلية MenuBankInternalTransfer=حوالة داخلية
TransferDesc=Transfer from one account to another, Dolibarr will write two records (a debit in source account and a credit in target account). The same amount (except sign), label and date will be used for this transaction) TransferDesc=Transfer from one account to another, Dolibarr will write two records (a debit in source account and a credit in target account). The same amount (except sign), label and date will be used for this transaction)
TransferFrom=من TransferFrom=من

View File

@ -441,6 +441,8 @@ BankAccountNumberKey=Checksum
Residence=عنوان Residence=عنوان
IBANNumber=IBAN account number IBANNumber=IBAN account number
IBAN=إيبان IBAN=إيبان
CustomerIBAN=IBAN of customer
SupplierIBAN=IBAN of vendor
BIC=بيك / سويفت BIC=بيك / سويفت
BICNumber=BIC/SWIFT code BICNumber=BIC/SWIFT code
ExtraInfos=معلومات اضافية ExtraInfos=معلومات اضافية

View File

@ -107,6 +107,13 @@ OrderPrinterToUse=Order printer to use
MainTemplateToUse=Main template to use MainTemplateToUse=Main template to use
OrderTemplateToUse=Order template to use OrderTemplateToUse=Order template to use
BarRestaurant=Bar Restaurant BarRestaurant=Bar Restaurant
AutoOrder=Customer auto order AutoOrder=Order by the customer himself
RestaurantMenu=Menu RestaurantMenu=Menu
CustomerMenu=Customer menu CustomerMenu=Customer menu
ScanToMenu=Scan QR code to see the menu
ScanToOrder=Scan QR code to order
Appearance=Appearance
HideCategoryImages=Hide Category Images
HideProductImages=Hide Product Images
NumberOfLinesToShow=Number of lines to show in image box
DefineTablePlan=Define table plan

View File

@ -99,3 +99,6 @@ TypeContact_contrat_internal_SALESREPFOLL=ممثل مبيعات متابعة ا
TypeContact_contrat_external_BILLING=فواتير العملاء الاتصال TypeContact_contrat_external_BILLING=فواتير العملاء الاتصال
TypeContact_contrat_external_CUSTOMER=متابعة العملاء الاتصال TypeContact_contrat_external_CUSTOMER=متابعة العملاء الاتصال
TypeContact_contrat_external_SALESREPSIGN=توقيع عقد خدمات العملاء TypeContact_contrat_external_SALESREPSIGN=توقيع عقد خدمات العملاء
HideClosedServiceByDefault=Hide closed services by default
ShowClosedServices=Show Closed Services
HideClosedServices=Hide Closed Services

View File

@ -36,6 +36,7 @@ ErrorBadSupplierCodeSyntax=Bad syntax for vendor code
ErrorSupplierCodeRequired=Vendor code required ErrorSupplierCodeRequired=Vendor code required
ErrorSupplierCodeAlreadyUsed=Vendor code already used ErrorSupplierCodeAlreadyUsed=Vendor code already used
ErrorBadParameters=بارامترات سيئة ErrorBadParameters=بارامترات سيئة
ErrorWrongParameters=Wrong or missing parameters
ErrorBadValueForParameter=Wrong value '%s' for parameter '%s' ErrorBadValueForParameter=Wrong value '%s' for parameter '%s'
ErrorBadImageFormat=ملف الصورة لم تنسيق معتمد (PHP لديك لا يدعم وظائف لتحويل الصور من هذا الشكل) ErrorBadImageFormat=ملف الصورة لم تنسيق معتمد (PHP لديك لا يدعم وظائف لتحويل الصور من هذا الشكل)
ErrorBadDateFormat='%s' قيمة له خاطئ تنسيق التاريخ ErrorBadDateFormat='%s' قيمة له خاطئ تنسيق التاريخ
@ -119,7 +120,7 @@ ErrorLoginHasNoEmail=هذا المستخدم ليس لديه عنوان البر
ErrorBadValueForCode=سيئة قيمة لرمز الحماية. حاول مرة أخرى مع القيمة الجديدة ... ErrorBadValueForCode=سيئة قيمة لرمز الحماية. حاول مرة أخرى مع القيمة الجديدة ...
ErrorBothFieldCantBeNegative=ويمكن لحقول %s و%s لا تكون سلبية ErrorBothFieldCantBeNegative=ويمكن لحقول %s و%s لا تكون سلبية
ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> cannot be negative on this type of invoice. If you need to add a discount line, just create the discount first (from field '%s' in thirdparty card) and apply it to the invoice. ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> cannot be negative on this type of invoice. If you need to add a discount line, just create the discount first (from field '%s' in thirdparty card) and apply it to the invoice.
ErrorLinesCantBeNegativeForOneVATRate=Total of lines can't be negative for a given VAT rate. ErrorLinesCantBeNegativeForOneVATRate=Total of lines (net of tax) can't be negative for a given not null VAT rate (Found a negative total for VAT rate <b>%s</b>%%).
ErrorLinesCantBeNegativeOnDeposits=Lines can't be negative in a deposit. You will face problems when you will need to consume the deposit in final invoice if you do so. ErrorLinesCantBeNegativeOnDeposits=Lines can't be negative in a deposit. You will face problems when you will need to consume the deposit in final invoice if you do so.
ErrorQtyForCustomerInvoiceCantBeNegative=كمية لخط في فواتير العملاء لا يمكن أن يكون سلبيا ErrorQtyForCustomerInvoiceCantBeNegative=كمية لخط في فواتير العملاء لا يمكن أن يكون سلبيا
ErrorWebServerUserHasNotPermission=<b>%s</b> تستخدم حساب مستخدم لتنفيذ خادم الويب لا يوجد لديه إذن لذلك ErrorWebServerUserHasNotPermission=<b>%s</b> تستخدم حساب مستخدم لتنفيذ خادم الويب لا يوجد لديه إذن لذلك
@ -183,6 +184,7 @@ ErrorBadDefinitionOfMenuArrayInModuleDescriptor=سيئة تعريف القائم
ErrorSavingChanges=An error has occurred when saving the changes ErrorSavingChanges=An error has occurred when saving the changes
ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
ErrorFileMustHaveFormat=File must have format %s ErrorFileMustHaveFormat=File must have format %s
ErrorFilenameCantStartWithDot=Filename can't start with a '.'
ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first. ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
ErrorsThirdpartyMerge=Failed to merge the two records. Request canceled. ErrorsThirdpartyMerge=Failed to merge the two records. Request canceled.
ErrorStockIsNotEnoughToAddProductOnOrder=Stock is not enough for product %s to add it into a new order. ErrorStockIsNotEnoughToAddProductOnOrder=Stock is not enough for product %s to add it into a new order.

View File

@ -15,6 +15,7 @@ CancelCP=ألغيت
RefuseCP=رفض RefuseCP=رفض
ValidatorCP=Approbator ValidatorCP=Approbator
ListeCP=List of leave ListeCP=List of leave
Leave=ترك الطلب
LeaveId=Leave ID LeaveId=Leave ID
ReviewedByCP=سيتم مراجعتها من قبل ReviewedByCP=سيتم مراجعتها من قبل
UserID=User ID UserID=User ID

View File

@ -23,6 +23,9 @@ AddLoan=Create loan
FinancialCommitment=Financial commitment FinancialCommitment=Financial commitment
InterestAmount=اهتمام InterestAmount=اهتمام
CapitalRemain=Capital remain CapitalRemain=Capital remain
TermPaidAllreadyPaid = This term is allready paid
CantUseScheduleWithLoanStartedToPaid = Can't use scheduler for a loan with payment started
CantModifyInterestIfScheduleIsUsed = You can't modify interest if you use schedule
# Admin # Admin
ConfigLoan=التكوين للقرض وحدة ConfigLoan=التكوين للقرض وحدة
LOAN_ACCOUNTING_ACCOUNT_CAPITAL=Accounting account capital by default LOAN_ACCOUNTING_ACCOUNT_CAPITAL=Accounting account capital by default

View File

@ -7,7 +7,7 @@ ProjectsArea=Projects Area
ProjectStatus=حالة المشروع ProjectStatus=حالة المشروع
SharedProject=مشاريع مشتركة SharedProject=مشاريع مشتركة
PrivateProject=مشروع اتصالات PrivateProject=مشروع اتصالات
ProjectsImContactFor=Projects for I am explicitly a contact ProjectsImContactFor=Projects for which I am explicitly a contact
AllAllowedProjects=All project I can read (mine + public) AllAllowedProjects=All project I can read (mine + public)
AllProjects=جميع المشاريع AllProjects=جميع المشاريع
MyProjectsDesc=This view is limited to projects you are a contact for MyProjectsDesc=This view is limited to projects you are a contact for

View File

@ -76,7 +76,7 @@ TypeContact_propal_external_BILLING=الزبون فاتورة الاتصال
TypeContact_propal_external_CUSTOMER=اتصل العملاء اقتراح متابعة TypeContact_propal_external_CUSTOMER=اتصل العملاء اقتراح متابعة
TypeContact_propal_external_SHIPPING=Customer contact for delivery TypeContact_propal_external_SHIPPING=Customer contact for delivery
# Document models # Document models
DocModelAzurDescription=A complete proposal model DocModelAzurDescription=A complete proposal model (old implementation of Cyan template)
DocModelCyanDescription=A complete proposal model DocModelCyanDescription=A complete proposal model
DefaultModelPropalCreate=إنشاء نموذج افتراضي DefaultModelPropalCreate=إنشاء نموذج افتراضي
DefaultModelPropalToBill=القالب الافتراضي عند إغلاق الأعمال المقترح (أن الفاتورة) DefaultModelPropalToBill=القالب الافتراضي عند إغلاق الأعمال المقترح (أن الفاتورة)
@ -84,3 +84,4 @@ DefaultModelPropalClosed=القالب الافتراضي عند إغلاق ال
ProposalCustomerSignature=قبول كتابي، ختم الشركة والتاريخ والتوقيع ProposalCustomerSignature=قبول كتابي، ختم الشركة والتاريخ والتوقيع
ProposalsStatisticsSuppliers=Vendor proposals statistics ProposalsStatisticsSuppliers=Vendor proposals statistics
CaseFollowedBy=Case followed by CaseFollowedBy=Case followed by
SignedOnly=Signed only

View File

@ -56,16 +56,15 @@ DOL_UNDERLINE=Enable underline
DOL_UNDERLINE_DISABLED=Disable underline DOL_UNDERLINE_DISABLED=Disable underline
DOL_BEEP=Beed sound DOL_BEEP=Beed sound
DOL_PRINT_TEXT=Print text DOL_PRINT_TEXT=Print text
DOL_VALUE_DATE=تاريخ الفاتورة DateInvoiceWithTime=Invoice date and time
DOL_VALUE_DATE_TIME=Invoice date and time YearInvoice=Invoice year
DOL_VALUE_YEAR=Invoice year
DOL_VALUE_MONTH_LETTERS=Invoice month in letters DOL_VALUE_MONTH_LETTERS=Invoice month in letters
DOL_VALUE_MONTH=Invoice month DOL_VALUE_MONTH=Invoice month
DOL_VALUE_DAY=Invoice day DOL_VALUE_DAY=Invoice day
DOL_VALUE_DAY_LETTERS=Inovice day in letters DOL_VALUE_DAY_LETTERS=Inovice day in letters
DOL_LINE_FEED_REVERSE=Line feed reverse DOL_LINE_FEED_REVERSE=Line feed reverse
DOL_VALUE_OBJECT_ID=Invoice ID InvoiceID=Invoice ID
DOL_VALUE_OBJECT_REF=فاتورة المرجع InvoiceRef=فاتورة المرجع
DOL_PRINT_OBJECT_LINES=Invoice lines DOL_PRINT_OBJECT_LINES=Invoice lines
DOL_VALUE_CUSTOMER_FIRSTNAME=Customer first name DOL_VALUE_CUSTOMER_FIRSTNAME=Customer first name
DOL_VALUE_CUSTOMER_LASTNAME=Customer last name DOL_VALUE_CUSTOMER_LASTNAME=Customer last name
@ -76,20 +75,8 @@ DOL_VALUE_CUSTOMER_SKYPE=Customer Skype
DOL_VALUE_CUSTOMER_TAX_NUMBER=Customer tax number DOL_VALUE_CUSTOMER_TAX_NUMBER=Customer tax number
DOL_VALUE_CUSTOMER_ACCOUNT_BALANCE=Customer account balance DOL_VALUE_CUSTOMER_ACCOUNT_BALANCE=Customer account balance
DOL_VALUE_MYSOC_NAME=Your company name DOL_VALUE_MYSOC_NAME=Your company name
DOL_VALUE_MYSOC_ADDRESS=Your company address VendorLastname=Vendor last name
DOL_VALUE_MYSOC_ZIP=Your zip code VendorFirstname=Vendor first name
DOL_VALUE_MYSOC_TOWN=Your town VendorEmail=Vendor email
DOL_VALUE_MYSOC_COUNTRY=Your country
DOL_VALUE_MYSOC_IDPROF1=Your IDPROF1
DOL_VALUE_MYSOC_IDPROF2=Your IDPROF2
DOL_VALUE_MYSOC_IDPROF3=Your IDPROF3
DOL_VALUE_MYSOC_IDPROF4=Your IDPROF4
DOL_VALUE_MYSOC_IDPROF5=Your IDPROF5
DOL_VALUE_MYSOC_IDPROF6=Your IDPROF6
DOL_VALUE_MYSOC_TVA_INTRA=Intra-Community VAT ID
DOL_VALUE_MYSOC_CAPITAL=عاصمة
DOL_VALUE_VENDOR_LASTNAME=Vendor last name
DOL_VALUE_VENDOR_FIRSTNAME=Vendor first name
DOL_VALUE_VENDOR_MAIL=Vendor mail
DOL_VALUE_CUSTOMER_POINTS=Customer points DOL_VALUE_CUSTOMER_POINTS=Customer points
DOL_VALUE_OBJECT_POINTS=Object points DOL_VALUE_OBJECT_POINTS=Object points

View File

@ -17,6 +17,10 @@ CancelSending=الغاء ارسال
DeleteSending=حذف ارسال DeleteSending=حذف ارسال
Stock=الأسهم Stock=الأسهم
Stocks=الاسهم Stocks=الاسهم
MissingStocks=Missing stocks
StockAtDate=Stock at date
StockAtDateInPast=Date in past
StockAtDateInFuture=Date in future
StocksByLotSerial=الأسهم عن طريق القرعة / المسلسل StocksByLotSerial=الأسهم عن طريق القرعة / المسلسل
LotSerial=Lots/Serials LotSerial=Lots/Serials
LotSerialList=List of lot/serials LotSerialList=List of lot/serials
@ -30,6 +34,7 @@ StockMovementForId=Movement ID %d
ListMouvementStockProject=List of stock movements associated to project ListMouvementStockProject=List of stock movements associated to project
StocksArea=منطقة المستودعات StocksArea=منطقة المستودعات
AllWarehouses=All warehouses AllWarehouses=All warehouses
IncludeEmptyDesiredStock=Include also undefined desired stock
IncludeAlsoDraftOrders=Include also draft orders IncludeAlsoDraftOrders=Include also draft orders
Location=عوضا عن Location=عوضا عن
LocationSummary=باختصار اسم الموقع LocationSummary=باختصار اسم الموقع
@ -59,10 +64,9 @@ AllowAddLimitStockByWarehouse=Manage also value for minimum and desired stock pe
RuleForWarehouse=Rule for warehouses RuleForWarehouse=Rule for warehouses
WarehouseAskWarehouseDuringOrder=Set a warehouse on Sale orders WarehouseAskWarehouseDuringOrder=Set a warehouse on Sale orders
UserDefaultWarehouse=Set a warehouse on Users UserDefaultWarehouse=Set a warehouse on Users
DefaultWarehouseActive=Default warehouse active
MainDefaultWarehouse=Default warehouse MainDefaultWarehouse=Default warehouse
MainDefaultWarehouseUser=Use user warehouse asign default MainDefaultWarehouseUser=Use a default warehouse for each user
MainDefaultWarehouseUserDesc=/!\\ By activating this option the gold of the creation of an article, the warehouse assigned to the user will be defined on this one. If no warehouse is defined on the user, the default warehouse is defined. MainDefaultWarehouseUserDesc=By activating this option, during creation of a product, the warehouse assigned to the product will be defined on this one. If no warehouse is defined on the user, the default warehouse is defined.
IndependantSubProductStock=Product stock and subproduct stock are independent IndependantSubProductStock=Product stock and subproduct stock are independent
QtyDispatched=ارسال كمية QtyDispatched=ارسال كمية
QtyDispatchedShort=أرسل الكمية QtyDispatchedShort=أرسل الكمية
@ -126,6 +130,7 @@ CurentlyUsingPhysicalStock=المخزون المادي
RuleForStockReplenishment=حكم شراء أسهم التجديد RuleForStockReplenishment=حكم شراء أسهم التجديد
SelectProductWithNotNullQty=Select at least one product with a qty not null and a vendor SelectProductWithNotNullQty=Select at least one product with a qty not null and a vendor
AlertOnly= التنبيهات فقط AlertOnly= التنبيهات فقط
IncludeProductWithUndefinedAlerts = Include also negative stock for products with no desired quantity defined, to restore them to 0
WarehouseForStockDecrease=سيتم استخدام <b>مستودع٪ الصورة</b> لانخفاض الأسهم WarehouseForStockDecrease=سيتم استخدام <b>مستودع٪ الصورة</b> لانخفاض الأسهم
WarehouseForStockIncrease=سيتم استخدام <b>مستودع٪ s للزيادة</b> المخزون WarehouseForStockIncrease=سيتم استخدام <b>مستودع٪ s للزيادة</b> المخزون
ForThisWarehouse=لهذا المستودع ForThisWarehouse=لهذا المستودع
@ -227,3 +232,6 @@ InventoryForASpecificProduct=Inventory for a specific product
StockIsRequiredToChooseWhichLotToUse=Stock is required to choose which lot to use StockIsRequiredToChooseWhichLotToUse=Stock is required to choose which lot to use
ForceTo=Force to ForceTo=Force to
AlwaysShowFullArbo=Display full tree of warehouse on popup of warehouse links (Warning: This may decrease dramatically performances) AlwaysShowFullArbo=Display full tree of warehouse on popup of warehouse links (Warning: This may decrease dramatically performances)
StockAtDatePastDesc=You can view here the stock (real stock) at a given date in the past
StockAtDateFutureDesc=You can view here the stock (virtual stock) at a given date in future
CurrentStock=Current stock

View File

@ -58,7 +58,10 @@ NoPageYet=No pages yet
YouCanCreatePageOrImportTemplate=You can create a new page or import a full website template YouCanCreatePageOrImportTemplate=You can create a new page or import a full website template
SyntaxHelp=Help on specific syntax tips SyntaxHelp=Help on specific syntax tips
YouCanEditHtmlSourceckeditor=You can edit HTML source code using the "Source" button in editor. YouCanEditHtmlSourceckeditor=You can edit HTML source code using the "Source" button in editor.
YouCanEditHtmlSource=<br><span class="fa fa-bug"></span> You can include PHP code into this source using tags <strong>&lt;?php ?&gt;</strong>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.<br><br><span class="fa fa-bug"></span> You can also include content of another Page/Container with the following syntax:<br><strong>&lt;?php includeContainer('alias_of_container_to_include'); ?&gt;</strong><br><br><span class="fa fa-bug"></span> You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):<br><strong>&lt;?php redirectToContainer('alias_of_container_to_redirect_to'); ?&gt;</strong><br><br><span class="fa fa-link"></span> To add a link to another page, use the syntax:<br><strong>&lt;a href="alias_of_page_to_link_to.php"&gt;mylink&lt;a&gt;</strong><br><br><span class="fa fa-download"></span> To include a <strong>link to download</strong> a file stored into the <strong>documents</strong> directory, use the <strong>document.php</strong> wrapper:<br>Example, for a file into documents/ecm (need to be logged), syntax is:<br><strong>&lt;a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file into documents/medias (open directory for public access), syntax is:<br><strong>&lt;a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file shared with a share link (open access using the sharing hash key of file), syntax is:<br><strong>&lt;a href="/document.php?hashp=publicsharekeyoffile"&gt;</strong><br><br><span class="fa fa-picture-o"></span> To include an <strong>image</strong> stored into the <strong>documents</strong> directory, use the <strong>viewimage.php</strong> wrapper:<br>Example, for an image into documents/medias (open directory for public access), syntax is:<br><strong>&lt;img src="/viewimage.php?modulepart=medias&amp;file=[relative_dir/]filename.ext"&gt;</strong><br><br>More examples of HTML or dynamic code available on <a href="%s" target="_blank">the wiki documentation</a><br>. YouCanEditHtmlSource=<br><span class="fa fa-bug"></span> You can include PHP code into this source using tags <strong>&lt;?php ?&gt;</strong>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.<br><br><span class="fa fa-bug"></span> You can also include content of another Page/Container with the following syntax:<br><strong>&lt;?php includeContainer('alias_of_container_to_include'); ?&gt;</strong><br><br><span class="fa fa-bug"></span> You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):<br><strong>&lt;?php redirectToContainer('alias_of_container_to_redirect_to'); ?&gt;</strong><br><br><span class="fa fa-link"></span> To add a link to another page, use the syntax:<br><strong>&lt;a href="alias_of_page_to_link_to.php"&gt;mylink&lt;a&gt;</strong><br><br><span class="fa fa-download"></span> To include a <strong>link to download</strong> a file stored into the <strong>documents</strong> directory, use the <strong>document.php</strong> wrapper:<br>Example, for a file into documents/ecm (need to be logged), syntax is:<br><strong>&lt;a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file into documents/medias (open directory for public access), syntax is:<br><strong>&lt;a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file shared with a share link (open access using the sharing hash key of file), syntax is:<br><strong>&lt;a href="/document.php?hashp=publicsharekeyoffile"&gt;</strong><br><br><span class="fa fa-picture-o"></span> To include an <strong>image</strong> stored into the <strong>documents</strong> directory, use the <strong>viewimage.php</strong> wrapper:<br>Example, for an image into documents/medias (open directory for public access), syntax is:<br><strong>&lt;img src="/viewimage.php?modulepart=medias&amp;file=[relative_dir/]filename.ext"&gt;</strong><br>
#YouCanEditHtmlSource2=<br><span class="fa fa-picture-o"></span> To include a <strong>image</strong> shared publicaly, use the <strong>viewimage.php</strong> wrapper:<br>Example with a shared key 123456789, syntax is:<br><strong>&lt;img src="/viewimage.php?hashp=12345679012..."&gt;</strong><br>
YouCanEditHtmlSource2=For an image shared with a share link (open access using the sharing hash key of file), syntax is:<br><strong>&lt;img src="/viewimage.php?hashp=12345679012..."&gt;</strong><br>
YouCanEditHtmlSourceMore=<br>More examples of HTML or dynamic code available on <a href="%s" target="_blank">the wiki documentation</a><br>.
ClonePage=Clone page/container ClonePage=Clone page/container
CloneSite=Clone site CloneSite=Clone site
SiteAdded=Website added SiteAdded=Website added

View File

@ -10,8 +10,8 @@ PaymentByBankTransferReceipts=Credit transfer orders
PaymentByBankTransferLines=Credit transfer order lines PaymentByBankTransferLines=Credit transfer order lines
WithdrawalsReceipts=Direct debit orders WithdrawalsReceipts=Direct debit orders
WithdrawalReceipt=Direct debit order WithdrawalReceipt=Direct debit order
BankTransferReceipts=Credit transfer receipts BankTransferReceipts=Credit transfer order
BankTransferReceipt=Credit transfer receipt BankTransferReceipt=Credit transfer order
LatestBankTransferReceipts=Latest %s credit transfer orders LatestBankTransferReceipts=Latest %s credit transfer orders
LastWithdrawalReceipts=Latest %s direct debit files LastWithdrawalReceipts=Latest %s direct debit files
WithdrawalsLine=Direct debit order line WithdrawalsLine=Direct debit order line
@ -34,12 +34,13 @@ NoInvoiceToWithdraw=No invoice open for '%s' is waiting. Go on tab '%s' on invoi
NoSupplierInvoiceToWithdraw=No supplier invoice with open 'Direct credit requests' is waiting. Go on tab '%s' on invoice card to make a request. NoSupplierInvoiceToWithdraw=No supplier invoice with open 'Direct credit requests' is waiting. Go on tab '%s' on invoice card to make a request.
ResponsibleUser=User Responsible ResponsibleUser=User Responsible
WithdrawalsSetup=Direct debit payment setup WithdrawalsSetup=Direct debit payment setup
CreditTransferSetup=Crebit transfer setup CreditTransferSetup=Credit transfer setup
WithdrawStatistics=Direct debit payment statistics WithdrawStatistics=Direct debit payment statistics
CreditTransferStatistics=Credit transfer statistics CreditTransferStatistics=Credit transfer statistics
Rejects=ترفض Rejects=ترفض
LastWithdrawalReceipt=Latest %s direct debit receipts LastWithdrawalReceipt=Latest %s direct debit receipts
MakeWithdrawRequest=Make a direct debit payment request MakeWithdrawRequest=Make a direct debit payment request
MakeBankTransferOrder=Make a credit transfer request
WithdrawRequestsDone=%s direct debit payment requests recorded WithdrawRequestsDone=%s direct debit payment requests recorded
ThirdPartyBankCode=Third-party bank code ThirdPartyBankCode=Third-party bank code
NoInvoiceCouldBeWithdrawed=No invoice debited successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode <strong>%s</strong>. NoInvoiceCouldBeWithdrawed=No invoice debited successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode <strong>%s</strong>.
@ -92,7 +93,8 @@ CreditDate=الائتمان على
WithdrawalFileNotCapable=غير قادر على توليد ملف استلام الانسحاب لبلدكم٪ الصورة (لا يتم اعتماد البلد) WithdrawalFileNotCapable=غير قادر على توليد ملف استلام الانسحاب لبلدكم٪ الصورة (لا يتم اعتماد البلد)
ShowWithdraw=Show Direct Debit Order ShowWithdraw=Show Direct Debit Order
IfInvoiceNeedOnWithdrawPaymentWontBeClosed=However, if invoice has at least one direct debit payment order not yet processed, it won't be set as paid to allow prior withdrawal management. IfInvoiceNeedOnWithdrawPaymentWontBeClosed=However, if invoice has at least one direct debit payment order not yet processed, it won't be set as paid to allow prior withdrawal management.
DoStandingOrdersBeforePayments=This tab allows you to request a direct debit payment order. Once done, go into menu Bank->Direct Debit orders to manage the direct debit payment order. When payment order is closed, payment on invoice will be automatically recorded, and invoice closed if remainder to pay is null. DoStandingOrdersBeforePayments=This tab allows you to request a direct debit payment order. Once done, go into menu Bank->Direct Debit orders to generate and manage the direct debit payment order. When direct debit order is closed, payment on invoices will be automatically recorded, and invoices closed if remainder to pay is null.
DoCreditTransferBeforePayments=This tab allows you to request a credit transfer order. Once done, go into menu Bank->Credit transfer orders to generate and manage the credit transfer order. When credit transfer order is closed, payment on invoices will be automatically recorded, and invoices closed if remainder to pay is null.
WithdrawalFile=ملف الانسحاب WithdrawalFile=ملف الانسحاب
SetToStatusSent=تعيين إلى حالة "المرسلة ملف" SetToStatusSent=تعيين إلى حالة "المرسلة ملف"
ThisWillAlsoAddPaymentOnInvoice=This will also record payments on invoices and will classify them as "Paid" if remain to pay is null ThisWillAlsoAddPaymentOnInvoice=This will also record payments on invoices and will classify them as "Paid" if remain to pay is null
@ -103,6 +105,7 @@ RUMLong=Unique Mandate Reference
RUMWillBeGenerated=If empty, a UMR (Unique Mandate Reference) will be generated once the bank account information is saved. RUMWillBeGenerated=If empty, a UMR (Unique Mandate Reference) will be generated once the bank account information is saved.
WithdrawMode=Direct debit mode (FRST or RECUR) WithdrawMode=Direct debit mode (FRST or RECUR)
WithdrawRequestAmount=Amount of Direct debit request: WithdrawRequestAmount=Amount of Direct debit request:
BankTransferAmount=Amount of Credit Transfer request:
WithdrawRequestErrorNilAmount=Unable to create direct debit request for empty amount. WithdrawRequestErrorNilAmount=Unable to create direct debit request for empty amount.
SepaMandate=SEPA Direct Debit Mandate SepaMandate=SEPA Direct Debit Mandate
SepaMandateShort=SEPA Mandate SepaMandateShort=SEPA Mandate
@ -128,7 +131,7 @@ ICS=Creditor Identifier CI
END_TO_END="EndToEndId" SEPA XML tag - Unique id assigned per transaction END_TO_END="EndToEndId" SEPA XML tag - Unique id assigned per transaction
USTRD="Unstructured" SEPA XML tag USTRD="Unstructured" SEPA XML tag
ADDDAYS=Add days to Execution Date ADDDAYS=Add days to Execution Date
NoDefaultIBANFound=No default IBAN found for this third party
### Notifications ### Notifications
InfoCreditSubject=Payment of direct debit payment order %s by the bank InfoCreditSubject=Payment of direct debit payment order %s by the bank
InfoCreditMessage=The direct debit payment order %s has been paid by the bank<br>Data of payment: %s InfoCreditMessage=The direct debit payment order %s has been paid by the bank<br>Data of payment: %s

View File

@ -543,7 +543,7 @@ Module54Desc=Management of contracts (services or recurring subscriptions)
Module55Name=Barcodes Module55Name=Barcodes
Module55Desc=Barcode management Module55Desc=Barcode management
Module56Name=Payment by credit transfer Module56Name=Payment by credit transfer
Module56Desc=Management of payment by credit transfer orders. It includes generation of SEPA file for European countries. Module56Desc=Management of payment of suppliers by credit transfer orders. It includes generation of SEPA file for European countries.
Module57Name=Bank Direct Debit payments Module57Name=Bank Direct Debit payments
Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries. Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
Module58Name=ClickToDial Module58Name=ClickToDial
@ -1983,7 +1983,7 @@ SmallerThan=Smaller than
LargerThan=Larger than LargerThan=Larger than
IfTrackingIDFoundEventWillBeLinked=Note that If a tracking ID is found into incoming email, the event will be automatically linked to the related objects. IfTrackingIDFoundEventWillBeLinked=Note that If a tracking ID is found into incoming email, the event will be automatically linked to the related objects.
WithGMailYouCanCreateADedicatedPassword=With a GMail account, if you enabled the 2 steps validation, it is recommanded to create a dedicated second password for the application instead of using your own account passsword from https://myaccount.google.com/. WithGMailYouCanCreateADedicatedPassword=With a GMail account, if you enabled the 2 steps validation, it is recommanded to create a dedicated second password for the application instead of using your own account passsword from https://myaccount.google.com/.
EmailCollectorTargetDir=It may be a desired behaviour to move the email into another tag/directory when it was processed successfully. Just set a value here to use this feature. Note that you must also use a read/write login account. EmailCollectorTargetDir=It may be a desired behaviour to move the email into another tag/directory when it was processed successfully. Just set name of directory here to use this feature (Do NOT use special characters in name). Note that you must also use a read/write login account.
EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body. EmailCollectorLoadThirdPartyHelp=You can use this action to use the email content to find and load an existing thirdparty in your database. The found (or created) thirdparty will be used for following actions that need it. In the parameter field you can use for example 'EXTRACT:BODY:Name:\\s([^\\s]*)' if you want to extract the name of the thirdparty from a string 'Name: name to find' found into the body.
EndPointFor=End point for %s : %s EndPointFor=End point for %s : %s
DeleteEmailCollector=Delete email collector DeleteEmailCollector=Delete email collector

View File

@ -63,6 +63,7 @@ ShipmentClassifyClosedInDolibarr=Shipment %s classified billed
ShipmentUnClassifyCloseddInDolibarr=Shipment %s classified re-open ShipmentUnClassifyCloseddInDolibarr=Shipment %s classified re-open
ShipmentBackToDraftInDolibarr=Shipment %s go back to draft status ShipmentBackToDraftInDolibarr=Shipment %s go back to draft status
ShipmentDeletedInDolibarr=Shipment %s deleted ShipmentDeletedInDolibarr=Shipment %s deleted
ReceptionValidatedInDolibarr=Reception %s validated
OrderCreatedInDolibarr=Order %s created OrderCreatedInDolibarr=Order %s created
OrderValidatedInDolibarr=Order %s validated OrderValidatedInDolibarr=Order %s validated
OrderDeliveredInDolibarr=Order %s classified delivered OrderDeliveredInDolibarr=Order %s classified delivered

View File

@ -37,6 +37,7 @@ IbanValid=BAN valid
IbanNotValid=BAN not valid IbanNotValid=BAN not valid
StandingOrders=Direct debit orders StandingOrders=Direct debit orders
StandingOrder=Direct debit order StandingOrder=Direct debit order
PaymentByDirectDebit=Payment by direct debit
PaymentByBankTransfers=Payments by credit transfer PaymentByBankTransfers=Payments by credit transfer
PaymentByBankTransfer=Payment by credit transfer PaymentByBankTransfer=Payment by credit transfer
AccountStatement=Account statement AccountStatement=Account statement
@ -105,8 +106,8 @@ SupplierInvoicePayment=Vendor payment
SubscriptionPayment=Subscription payment SubscriptionPayment=Subscription payment
WithdrawalPayment=Debit payment order WithdrawalPayment=Debit payment order
SocialContributionPayment=Social/fiscal tax payment SocialContributionPayment=Social/fiscal tax payment
BankTransfer=Bank transfer BankTransfer=Credit transfer
BankTransfers=Bank transfers BankTransfers=Credit transfers
MenuBankInternalTransfer=Internal transfer MenuBankInternalTransfer=Internal transfer
TransferDesc=Transfer from one account to another, Dolibarr will write two records (a debit in source account and a credit in target account). The same amount (except sign), label and date will be used for this transaction) TransferDesc=Transfer from one account to another, Dolibarr will write two records (a debit in source account and a credit in target account). The same amount (except sign), label and date will be used for this transaction)
TransferFrom=From TransferFrom=From

View File

@ -441,6 +441,8 @@ BankAccountNumberKey=Checksum
Residence=Address Residence=Address
IBANNumber=IBAN account number IBANNumber=IBAN account number
IBAN=IBAN IBAN=IBAN
CustomerIBAN=IBAN of customer
SupplierIBAN=IBAN of vendor
BIC=BIC/SWIFT BIC=BIC/SWIFT
BICNumber=BIC/SWIFT code BICNumber=BIC/SWIFT code
ExtraInfos=Extra infos ExtraInfos=Extra infos

View File

@ -107,6 +107,13 @@ OrderPrinterToUse=Order printer to use
MainTemplateToUse=Main template to use MainTemplateToUse=Main template to use
OrderTemplateToUse=Order template to use OrderTemplateToUse=Order template to use
BarRestaurant=Bar Restaurant BarRestaurant=Bar Restaurant
AutoOrder=Customer auto order AutoOrder=Order by the customer himself
RestaurantMenu=Menu RestaurantMenu=Menu
CustomerMenu=Customer menu CustomerMenu=Customer menu
ScanToMenu=Scan QR code to see the menu
ScanToOrder=Scan QR code to order
Appearance=Appearance
HideCategoryImages=Hide Category Images
HideProductImages=Hide Product Images
NumberOfLinesToShow=Number of lines to show in image box
DefineTablePlan=Define table plan

View File

@ -99,3 +99,6 @@ TypeContact_contrat_internal_SALESREPFOLL=Sales representative following-up cont
TypeContact_contrat_external_BILLING=Billing customer contact TypeContact_contrat_external_BILLING=Billing customer contact
TypeContact_contrat_external_CUSTOMER=Follow-up customer contact TypeContact_contrat_external_CUSTOMER=Follow-up customer contact
TypeContact_contrat_external_SALESREPSIGN=Signing contract customer contact TypeContact_contrat_external_SALESREPSIGN=Signing contract customer contact
HideClosedServiceByDefault=Hide closed services by default
ShowClosedServices=Show Closed Services
HideClosedServices=Hide Closed Services

View File

@ -36,6 +36,7 @@ ErrorBadSupplierCodeSyntax=Bad syntax for vendor code
ErrorSupplierCodeRequired=Vendor code required ErrorSupplierCodeRequired=Vendor code required
ErrorSupplierCodeAlreadyUsed=Vendor code already used ErrorSupplierCodeAlreadyUsed=Vendor code already used
ErrorBadParameters=Bad parameters ErrorBadParameters=Bad parameters
ErrorWrongParameters=Wrong or missing parameters
ErrorBadValueForParameter=Wrong value '%s' for parameter '%s' ErrorBadValueForParameter=Wrong value '%s' for parameter '%s'
ErrorBadImageFormat=Image file has not a supported format (Your PHP does not support functions to convert images of this format) ErrorBadImageFormat=Image file has not a supported format (Your PHP does not support functions to convert images of this format)
ErrorBadDateFormat=Value '%s' has wrong date format ErrorBadDateFormat=Value '%s' has wrong date format
@ -119,7 +120,7 @@ ErrorLoginHasNoEmail=This user has no email address. Process aborted.
ErrorBadValueForCode=Bad value for security code. Try again with new value... ErrorBadValueForCode=Bad value for security code. Try again with new value...
ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative
ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> cannot be negative on this type of invoice. If you need to add a discount line, just create the discount first (from field '%s' in thirdparty card) and apply it to the invoice. ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> cannot be negative on this type of invoice. If you need to add a discount line, just create the discount first (from field '%s' in thirdparty card) and apply it to the invoice.
ErrorLinesCantBeNegativeForOneVATRate=Total of lines can't be negative for a given VAT rate. ErrorLinesCantBeNegativeForOneVATRate=Total of lines (net of tax) can't be negative for a given not null VAT rate (Found a negative total for VAT rate <b>%s</b>%%).
ErrorLinesCantBeNegativeOnDeposits=Lines can't be negative in a deposit. You will face problems when you will need to consume the deposit in final invoice if you do so. ErrorLinesCantBeNegativeOnDeposits=Lines can't be negative in a deposit. You will face problems when you will need to consume the deposit in final invoice if you do so.
ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that
@ -183,6 +184,7 @@ ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In
ErrorSavingChanges=An error has occurred when saving the changes ErrorSavingChanges=An error has occurred when saving the changes
ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
ErrorFileMustHaveFormat=File must have format %s ErrorFileMustHaveFormat=File must have format %s
ErrorFilenameCantStartWithDot=Filename can't start with a '.'
ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first. ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
ErrorsThirdpartyMerge=Failed to merge the two records. Request canceled. ErrorsThirdpartyMerge=Failed to merge the two records. Request canceled.
ErrorStockIsNotEnoughToAddProductOnOrder=Stock is not enough for product %s to add it into a new order. ErrorStockIsNotEnoughToAddProductOnOrder=Stock is not enough for product %s to add it into a new order.

View File

@ -15,6 +15,7 @@ CancelCP=Canceled
RefuseCP=Refused RefuseCP=Refused
ValidatorCP=Approbator ValidatorCP=Approbator
ListeCP=List of leave ListeCP=List of leave
Leave=Leave request
LeaveId=Leave ID LeaveId=Leave ID
ReviewedByCP=Will be approved by ReviewedByCP=Will be approved by
UserID=User ID UserID=User ID

View File

@ -23,6 +23,9 @@ AddLoan=Create loan
FinancialCommitment=Financial commitment FinancialCommitment=Financial commitment
InterestAmount=Interest InterestAmount=Interest
CapitalRemain=Capital remain CapitalRemain=Capital remain
TermPaidAllreadyPaid = This term is allready paid
CantUseScheduleWithLoanStartedToPaid = Can't use scheduler for a loan with payment started
CantModifyInterestIfScheduleIsUsed = You can't modify interest if you use schedule
# Admin # Admin
ConfigLoan=Configuration of the module loan ConfigLoan=Configuration of the module loan
LOAN_ACCOUNTING_ACCOUNT_CAPITAL=Accounting account capital by default LOAN_ACCOUNTING_ACCOUNT_CAPITAL=Accounting account capital by default

View File

@ -7,7 +7,7 @@ ProjectsArea=Projects Area
ProjectStatus=Project status ProjectStatus=Project status
SharedProject=Everybody SharedProject=Everybody
PrivateProject=Project contacts PrivateProject=Project contacts
ProjectsImContactFor=Projects for I am explicitly a contact ProjectsImContactFor=Projects for which I am explicitly a contact
AllAllowedProjects=All project I can read (mine + public) AllAllowedProjects=All project I can read (mine + public)
AllProjects=All projects AllProjects=All projects
MyProjectsDesc=This view is limited to projects you are a contact for MyProjectsDesc=This view is limited to projects you are a contact for

View File

@ -84,3 +84,4 @@ DefaultModelPropalClosed=Default template when closing a business proposal (unbi
ProposalCustomerSignature=Written acceptance, company stamp, date and signature ProposalCustomerSignature=Written acceptance, company stamp, date and signature
ProposalsStatisticsSuppliers=Vendor proposals statistics ProposalsStatisticsSuppliers=Vendor proposals statistics
CaseFollowedBy=Case followed by CaseFollowedBy=Case followed by
SignedOnly=Signed only

View File

@ -56,16 +56,15 @@ DOL_UNDERLINE=Enable underline
DOL_UNDERLINE_DISABLED=Disable underline DOL_UNDERLINE_DISABLED=Disable underline
DOL_BEEP=Beed sound DOL_BEEP=Beed sound
DOL_PRINT_TEXT=Print text DOL_PRINT_TEXT=Print text
DOL_VALUE_DATE=Invoice date DateInvoiceWithTime=Invoice date and time
DOL_VALUE_DATE_TIME=Invoice date and time YearInvoice=Invoice year
DOL_VALUE_YEAR=Invoice year
DOL_VALUE_MONTH_LETTERS=Invoice month in letters DOL_VALUE_MONTH_LETTERS=Invoice month in letters
DOL_VALUE_MONTH=Invoice month DOL_VALUE_MONTH=Invoice month
DOL_VALUE_DAY=Invoice day DOL_VALUE_DAY=Invoice day
DOL_VALUE_DAY_LETTERS=Inovice day in letters DOL_VALUE_DAY_LETTERS=Inovice day in letters
DOL_LINE_FEED_REVERSE=Line feed reverse DOL_LINE_FEED_REVERSE=Line feed reverse
DOL_VALUE_OBJECT_ID=Invoice ID InvoiceID=Invoice ID
DOL_VALUE_OBJECT_REF=Invoice ref InvoiceRef=Invoice ref
DOL_PRINT_OBJECT_LINES=Invoice lines DOL_PRINT_OBJECT_LINES=Invoice lines
DOL_VALUE_CUSTOMER_FIRSTNAME=Customer first name DOL_VALUE_CUSTOMER_FIRSTNAME=Customer first name
DOL_VALUE_CUSTOMER_LASTNAME=Customer last name DOL_VALUE_CUSTOMER_LASTNAME=Customer last name
@ -76,20 +75,8 @@ DOL_VALUE_CUSTOMER_SKYPE=Customer Skype
DOL_VALUE_CUSTOMER_TAX_NUMBER=Customer tax number DOL_VALUE_CUSTOMER_TAX_NUMBER=Customer tax number
DOL_VALUE_CUSTOMER_ACCOUNT_BALANCE=Customer account balance DOL_VALUE_CUSTOMER_ACCOUNT_BALANCE=Customer account balance
DOL_VALUE_MYSOC_NAME=Your company name DOL_VALUE_MYSOC_NAME=Your company name
DOL_VALUE_MYSOC_ADDRESS=Your company address VendorLastname=Vendor last name
DOL_VALUE_MYSOC_ZIP=Your zip code VendorFirstname=Vendor first name
DOL_VALUE_MYSOC_TOWN=Your town VendorEmail=Vendor email
DOL_VALUE_MYSOC_COUNTRY=Your country
DOL_VALUE_MYSOC_IDPROF1=Your IDPROF1
DOL_VALUE_MYSOC_IDPROF2=Your IDPROF2
DOL_VALUE_MYSOC_IDPROF3=Your IDPROF3
DOL_VALUE_MYSOC_IDPROF4=Your IDPROF4
DOL_VALUE_MYSOC_IDPROF5=Your IDPROF5
DOL_VALUE_MYSOC_IDPROF6=Your IDPROF6
DOL_VALUE_MYSOC_TVA_INTRA=Intra-Community VAT ID
DOL_VALUE_MYSOC_CAPITAL=Capital
DOL_VALUE_VENDOR_LASTNAME=Vendor last name
DOL_VALUE_VENDOR_FIRSTNAME=Vendor first name
DOL_VALUE_VENDOR_MAIL=Vendor mail
DOL_VALUE_CUSTOMER_POINTS=Customer points DOL_VALUE_CUSTOMER_POINTS=Customer points
DOL_VALUE_OBJECT_POINTS=Object points DOL_VALUE_OBJECT_POINTS=Object points

View File

@ -17,6 +17,10 @@ CancelSending=Cancel sending
DeleteSending=Delete sending DeleteSending=Delete sending
Stock=Stock Stock=Stock
Stocks=Stocks Stocks=Stocks
MissingStocks=Missing stocks
StockAtDate=Stock at date
StockAtDateInPast=Date in past
StockAtDateInFuture=Date in future
StocksByLotSerial=Stocks by lot/serial StocksByLotSerial=Stocks by lot/serial
LotSerial=Lots/Serials LotSerial=Lots/Serials
LotSerialList=List of lot/serials LotSerialList=List of lot/serials
@ -30,6 +34,7 @@ StockMovementForId=Movement ID %d
ListMouvementStockProject=List of stock movements associated to project ListMouvementStockProject=List of stock movements associated to project
StocksArea=Warehouses area StocksArea=Warehouses area
AllWarehouses=All warehouses AllWarehouses=All warehouses
IncludeEmptyDesiredStock=Include also undefined desired stock
IncludeAlsoDraftOrders=Include also draft orders IncludeAlsoDraftOrders=Include also draft orders
Location=Location Location=Location
LocationSummary=Short name location LocationSummary=Short name location
@ -59,10 +64,9 @@ AllowAddLimitStockByWarehouse=Manage also value for minimum and desired stock pe
RuleForWarehouse=Rule for warehouses RuleForWarehouse=Rule for warehouses
WarehouseAskWarehouseDuringOrder=Set a warehouse on Sale orders WarehouseAskWarehouseDuringOrder=Set a warehouse on Sale orders
UserDefaultWarehouse=Set a warehouse on Users UserDefaultWarehouse=Set a warehouse on Users
DefaultWarehouseActive=Default warehouse active
MainDefaultWarehouse=Default warehouse MainDefaultWarehouse=Default warehouse
MainDefaultWarehouseUser=Use user warehouse asign default MainDefaultWarehouseUser=Use a default warehouse for each user
MainDefaultWarehouseUserDesc=/!\\ By activating this option the gold of the creation of an article, the warehouse assigned to the user will be defined on this one. If no warehouse is defined on the user, the default warehouse is defined. MainDefaultWarehouseUserDesc=By activating this option, during creation of a product, the warehouse assigned to the product will be defined on this one. If no warehouse is defined on the user, the default warehouse is defined.
IndependantSubProductStock=Product stock and subproduct stock are independent IndependantSubProductStock=Product stock and subproduct stock are independent
QtyDispatched=Quantity dispatched QtyDispatched=Quantity dispatched
QtyDispatchedShort=Qty dispatched QtyDispatchedShort=Qty dispatched
@ -126,6 +130,7 @@ CurentlyUsingPhysicalStock=Physical stock
RuleForStockReplenishment=Rule for stocks replenishment RuleForStockReplenishment=Rule for stocks replenishment
SelectProductWithNotNullQty=Select at least one product with a qty not null and a vendor SelectProductWithNotNullQty=Select at least one product with a qty not null and a vendor
AlertOnly= Alerts only AlertOnly= Alerts only
IncludeProductWithUndefinedAlerts = Include also negative stock for products with no desired quantity defined, to restore them to 0
WarehouseForStockDecrease=The warehouse <b>%s</b> will be used for stock decrease WarehouseForStockDecrease=The warehouse <b>%s</b> will be used for stock decrease
WarehouseForStockIncrease=The warehouse <b>%s</b> will be used for stock increase WarehouseForStockIncrease=The warehouse <b>%s</b> will be used for stock increase
ForThisWarehouse=For this warehouse ForThisWarehouse=For this warehouse
@ -227,3 +232,6 @@ InventoryForASpecificProduct=Inventory for a specific product
StockIsRequiredToChooseWhichLotToUse=Stock is required to choose which lot to use StockIsRequiredToChooseWhichLotToUse=Stock is required to choose which lot to use
ForceTo=Force to ForceTo=Force to
AlwaysShowFullArbo=Display full tree of warehouse on popup of warehouse links (Warning: This may decrease dramatically performances) AlwaysShowFullArbo=Display full tree of warehouse on popup of warehouse links (Warning: This may decrease dramatically performances)
StockAtDatePastDesc=You can view here the stock (real stock) at a given date in the past
StockAtDateFutureDesc=You can view here the stock (virtual stock) at a given date in future
CurrentStock=Current stock

View File

@ -58,7 +58,10 @@ NoPageYet=No pages yet
YouCanCreatePageOrImportTemplate=You can create a new page or import a full website template YouCanCreatePageOrImportTemplate=You can create a new page or import a full website template
SyntaxHelp=Help on specific syntax tips SyntaxHelp=Help on specific syntax tips
YouCanEditHtmlSourceckeditor=You can edit HTML source code using the "Source" button in editor. YouCanEditHtmlSourceckeditor=You can edit HTML source code using the "Source" button in editor.
YouCanEditHtmlSource=<br><span class="fa fa-bug"></span> You can include PHP code into this source using tags <strong>&lt;?php ?&gt;</strong>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.<br><br><span class="fa fa-bug"></span> You can also include content of another Page/Container with the following syntax:<br><strong>&lt;?php includeContainer('alias_of_container_to_include'); ?&gt;</strong><br><br><span class="fa fa-bug"></span> You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):<br><strong>&lt;?php redirectToContainer('alias_of_container_to_redirect_to'); ?&gt;</strong><br><br><span class="fa fa-link"></span> To add a link to another page, use the syntax:<br><strong>&lt;a href="alias_of_page_to_link_to.php"&gt;mylink&lt;a&gt;</strong><br><br><span class="fa fa-download"></span> To include a <strong>link to download</strong> a file stored into the <strong>documents</strong> directory, use the <strong>document.php</strong> wrapper:<br>Example, for a file into documents/ecm (need to be logged), syntax is:<br><strong>&lt;a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file into documents/medias (open directory for public access), syntax is:<br><strong>&lt;a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file shared with a share link (open access using the sharing hash key of file), syntax is:<br><strong>&lt;a href="/document.php?hashp=publicsharekeyoffile"&gt;</strong><br><br><span class="fa fa-picture-o"></span> To include an <strong>image</strong> stored into the <strong>documents</strong> directory, use the <strong>viewimage.php</strong> wrapper:<br>Example, for an image into documents/medias (open directory for public access), syntax is:<br><strong>&lt;img src="/viewimage.php?modulepart=medias&amp;file=[relative_dir/]filename.ext"&gt;</strong><br><br>More examples of HTML or dynamic code available on <a href="%s" target="_blank">the wiki documentation</a><br>. YouCanEditHtmlSource=<br><span class="fa fa-bug"></span> You can include PHP code into this source using tags <strong>&lt;?php ?&gt;</strong>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.<br><br><span class="fa fa-bug"></span> You can also include content of another Page/Container with the following syntax:<br><strong>&lt;?php includeContainer('alias_of_container_to_include'); ?&gt;</strong><br><br><span class="fa fa-bug"></span> You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):<br><strong>&lt;?php redirectToContainer('alias_of_container_to_redirect_to'); ?&gt;</strong><br><br><span class="fa fa-link"></span> To add a link to another page, use the syntax:<br><strong>&lt;a href="alias_of_page_to_link_to.php"&gt;mylink&lt;a&gt;</strong><br><br><span class="fa fa-download"></span> To include a <strong>link to download</strong> a file stored into the <strong>documents</strong> directory, use the <strong>document.php</strong> wrapper:<br>Example, for a file into documents/ecm (need to be logged), syntax is:<br><strong>&lt;a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file into documents/medias (open directory for public access), syntax is:<br><strong>&lt;a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file shared with a share link (open access using the sharing hash key of file), syntax is:<br><strong>&lt;a href="/document.php?hashp=publicsharekeyoffile"&gt;</strong><br><br><span class="fa fa-picture-o"></span> To include an <strong>image</strong> stored into the <strong>documents</strong> directory, use the <strong>viewimage.php</strong> wrapper:<br>Example, for an image into documents/medias (open directory for public access), syntax is:<br><strong>&lt;img src="/viewimage.php?modulepart=medias&amp;file=[relative_dir/]filename.ext"&gt;</strong><br>
#YouCanEditHtmlSource2=<br><span class="fa fa-picture-o"></span> To include a <strong>image</strong> shared publicaly, use the <strong>viewimage.php</strong> wrapper:<br>Example with a shared key 123456789, syntax is:<br><strong>&lt;img src="/viewimage.php?hashp=12345679012..."&gt;</strong><br>
YouCanEditHtmlSource2=For an image shared with a share link (open access using the sharing hash key of file), syntax is:<br><strong>&lt;img src="/viewimage.php?hashp=12345679012..."&gt;</strong><br>
YouCanEditHtmlSourceMore=<br>More examples of HTML or dynamic code available on <a href="%s" target="_blank">the wiki documentation</a><br>.
ClonePage=Clone page/container ClonePage=Clone page/container
CloneSite=Clone site CloneSite=Clone site
SiteAdded=Website added SiteAdded=Website added

View File

@ -10,8 +10,8 @@ PaymentByBankTransferReceipts=Credit transfer orders
PaymentByBankTransferLines=Credit transfer order lines PaymentByBankTransferLines=Credit transfer order lines
WithdrawalsReceipts=Direct debit orders WithdrawalsReceipts=Direct debit orders
WithdrawalReceipt=Direct debit order WithdrawalReceipt=Direct debit order
BankTransferReceipts=Credit transfer receipts BankTransferReceipts=Credit transfer order
BankTransferReceipt=Credit transfer receipt BankTransferReceipt=Credit transfer order
LatestBankTransferReceipts=Latest %s credit transfer orders LatestBankTransferReceipts=Latest %s credit transfer orders
LastWithdrawalReceipts=Latest %s direct debit files LastWithdrawalReceipts=Latest %s direct debit files
WithdrawalsLine=Direct debit order line WithdrawalsLine=Direct debit order line
@ -34,12 +34,13 @@ NoInvoiceToWithdraw=No invoice open for '%s' is waiting. Go on tab '%s' on invoi
NoSupplierInvoiceToWithdraw=No supplier invoice with open 'Direct credit requests' is waiting. Go on tab '%s' on invoice card to make a request. NoSupplierInvoiceToWithdraw=No supplier invoice with open 'Direct credit requests' is waiting. Go on tab '%s' on invoice card to make a request.
ResponsibleUser=User Responsible ResponsibleUser=User Responsible
WithdrawalsSetup=Direct debit payment setup WithdrawalsSetup=Direct debit payment setup
CreditTransferSetup=Crebit transfer setup CreditTransferSetup=Credit transfer setup
WithdrawStatistics=Direct debit payment statistics WithdrawStatistics=Direct debit payment statistics
CreditTransferStatistics=Credit transfer statistics CreditTransferStatistics=Credit transfer statistics
Rejects=Rejects Rejects=Rejects
LastWithdrawalReceipt=Latest %s direct debit receipts LastWithdrawalReceipt=Latest %s direct debit receipts
MakeWithdrawRequest=Make a direct debit payment request MakeWithdrawRequest=Make a direct debit payment request
MakeBankTransferOrder=Make a credit transfer request
WithdrawRequestsDone=%s direct debit payment requests recorded WithdrawRequestsDone=%s direct debit payment requests recorded
ThirdPartyBankCode=Third-party bank code ThirdPartyBankCode=Third-party bank code
NoInvoiceCouldBeWithdrawed=No invoice debited successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode <strong>%s</strong>. NoInvoiceCouldBeWithdrawed=No invoice debited successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode <strong>%s</strong>.
@ -92,7 +93,8 @@ CreditDate=Credit on
WithdrawalFileNotCapable=Unable to generate withdrawal receipt file for your country %s (Your country is not supported) WithdrawalFileNotCapable=Unable to generate withdrawal receipt file for your country %s (Your country is not supported)
ShowWithdraw=Show Direct Debit Order ShowWithdraw=Show Direct Debit Order
IfInvoiceNeedOnWithdrawPaymentWontBeClosed=However, if invoice has at least one direct debit payment order not yet processed, it won't be set as paid to allow prior withdrawal management. IfInvoiceNeedOnWithdrawPaymentWontBeClosed=However, if invoice has at least one direct debit payment order not yet processed, it won't be set as paid to allow prior withdrawal management.
DoStandingOrdersBeforePayments=This tab allows you to request a direct debit payment order. Once done, go into menu Bank->Direct Debit orders to manage the direct debit payment order. When payment order is closed, payment on invoice will be automatically recorded, and invoice closed if remainder to pay is null. DoStandingOrdersBeforePayments=This tab allows you to request a direct debit payment order. Once done, go into menu Bank->Direct Debit orders to generate and manage the direct debit payment order. When direct debit order is closed, payment on invoices will be automatically recorded, and invoices closed if remainder to pay is null.
DoCreditTransferBeforePayments=This tab allows you to request a credit transfer order. Once done, go into menu Bank->Credit transfer orders to generate and manage the credit transfer order. When credit transfer order is closed, payment on invoices will be automatically recorded, and invoices closed if remainder to pay is null.
WithdrawalFile=Withdrawal file WithdrawalFile=Withdrawal file
SetToStatusSent=Set to status "File Sent" SetToStatusSent=Set to status "File Sent"
ThisWillAlsoAddPaymentOnInvoice=This will also record payments on invoices and will classify them as "Paid" if remain to pay is null ThisWillAlsoAddPaymentOnInvoice=This will also record payments on invoices and will classify them as "Paid" if remain to pay is null
@ -103,6 +105,7 @@ RUMLong=Unique Mandate Reference
RUMWillBeGenerated=If empty, a UMR (Unique Mandate Reference) will be generated once the bank account information is saved. RUMWillBeGenerated=If empty, a UMR (Unique Mandate Reference) will be generated once the bank account information is saved.
WithdrawMode=Direct debit mode (FRST or RECUR) WithdrawMode=Direct debit mode (FRST or RECUR)
WithdrawRequestAmount=Amount of Direct debit request: WithdrawRequestAmount=Amount of Direct debit request:
BankTransferAmount=Amount of Credit Transfer request:
WithdrawRequestErrorNilAmount=Unable to create direct debit request for empty amount. WithdrawRequestErrorNilAmount=Unable to create direct debit request for empty amount.
SepaMandate=SEPA Direct Debit Mandate SepaMandate=SEPA Direct Debit Mandate
SepaMandateShort=SEPA Mandate SepaMandateShort=SEPA Mandate
@ -128,7 +131,7 @@ ICS=Creditor Identifier CI
END_TO_END="EndToEndId" SEPA XML tag - Unique id assigned per transaction END_TO_END="EndToEndId" SEPA XML tag - Unique id assigned per transaction
USTRD="Unstructured" SEPA XML tag USTRD="Unstructured" SEPA XML tag
ADDDAYS=Add days to Execution Date ADDDAYS=Add days to Execution Date
NoDefaultIBANFound=No default IBAN found for this third party
### Notifications ### Notifications
InfoCreditSubject=Payment of direct debit payment order %s by the bank InfoCreditSubject=Payment of direct debit payment order %s by the bank
InfoCreditMessage=The direct debit payment order %s has been paid by the bank<br>Data of payment: %s InfoCreditMessage=The direct debit payment order %s has been paid by the bank<br>Data of payment: %s

View File

@ -543,7 +543,7 @@ Module54Desc=Управление на договори (услуги или п
Module55Name=Баркодове Module55Name=Баркодове
Module55Desc=Управление на баркодове Module55Desc=Управление на баркодове
Module56Name=Плащане с кредитен превод Module56Name=Плащане с кредитен превод
Module56Desc=Management of payment by credit transfer orders. It includes generation of SEPA file for European countries. Module56Desc=Management of payment of suppliers by credit transfer orders. It includes generation of SEPA file for European countries.
Module57Name=Банкови плащания с директен дебит Module57Name=Банкови плащания с директен дебит
Module57Desc=Управление на платежни нареждания за директен дебит. Включва генериране на SEPA файл за европейските страни. Module57Desc=Управление на платежни нареждания за директен дебит. Включва генериране на SEPA файл за европейските страни.
Module58Name=ClickToDial Module58Name=ClickToDial
@ -1983,7 +1983,7 @@ SmallerThan=По-малък от
LargerThan=По-голям от LargerThan=По-голям от
IfTrackingIDFoundEventWillBeLinked=Обърнете внимание, че ако е намерен проследяващ код във входящата електронна поща, събитието ще бъде автоматично свързано със свързаните обекти. IfTrackingIDFoundEventWillBeLinked=Обърнете внимание, че ако е намерен проследяващ код във входящата електронна поща, събитието ще бъде автоматично свързано със свързаните обекти.
WithGMailYouCanCreateADedicatedPassword=С GMail акаунт, ако сте активирали валидирането в 2 стъпки е препоръчително да създадете специална втора парола за приложението, вместо да използвате своята парола за акаунта от https://myaccount.google.com/. WithGMailYouCanCreateADedicatedPassword=С GMail акаунт, ако сте активирали валидирането в 2 стъпки е препоръчително да създадете специална втора парола за приложението, вместо да използвате своята парола за акаунта от https://myaccount.google.com/.
EmailCollectorTargetDir=В случай, че желаете да преместите имейла в друг таг / директория, когато той е обработен успешно, то просто посочете стойност тук, за да използвате тази функция. Обърнете внимание, че трябва да използвате потребителски профил с права за четене и запис. EmailCollectorTargetDir=It may be a desired behaviour to move the email into another tag/directory when it was processed successfully. Just set name of directory here to use this feature (Do NOT use special characters in name). Note that you must also use a read/write login account.
EmailCollectorLoadThirdPartyHelp=Може да използвате това действие, за да намерите и заредите съществуващ контрагент във вашата база данни, чрез съдържанието на имейла. Намереният (или създаден) контрагент ще бъде използван при следващи действия, които се нуждаят от това. В полето на параметъра може да използвате, например 'EXTRACT:BODY:Name:\\s([^\\s]*)', ако искате да извлечете името на контрагента от низ 'Name: name to find', който е открит в съдържанието на имейла. EmailCollectorLoadThirdPartyHelp=Може да използвате това действие, за да намерите и заредите съществуващ контрагент във вашата база данни, чрез съдържанието на имейла. Намереният (или създаден) контрагент ще бъде използван при следващи действия, които се нуждаят от това. В полето на параметъра може да използвате, например 'EXTRACT:BODY:Name:\\s([^\\s]*)', ако искате да извлечете името на контрагента от низ 'Name: name to find', който е открит в съдържанието на имейла.
EndPointFor=Крайна точка за %s: %s EndPointFor=Крайна точка за %s: %s
DeleteEmailCollector=Изтриване на имейл колекционер DeleteEmailCollector=Изтриване на имейл колекционер

View File

@ -63,6 +63,7 @@ ShipmentClassifyClosedInDolibarr=Пратка %s е фактурирана
ShipmentUnClassifyCloseddInDolibarr=Пратка %s е активна отново ShipmentUnClassifyCloseddInDolibarr=Пратка %s е активна отново
ShipmentBackToDraftInDolibarr=Пратка %s е върната в статус чернова ShipmentBackToDraftInDolibarr=Пратка %s е върната в статус чернова
ShipmentDeletedInDolibarr=Пратка %s е изтрита ShipmentDeletedInDolibarr=Пратка %s е изтрита
ReceptionValidatedInDolibarr=Reception %s validated
OrderCreatedInDolibarr=Поръчка %s е създадена OrderCreatedInDolibarr=Поръчка %s е създадена
OrderValidatedInDolibarr=Поръчка %s е валидирана OrderValidatedInDolibarr=Поръчка %s е валидирана
OrderDeliveredInDolibarr=Поръчка %s е класифицирана като доставена OrderDeliveredInDolibarr=Поръчка %s е класифицирана като доставена

View File

@ -37,6 +37,7 @@ IbanValid=Валиден IBAN номер
IbanNotValid=Невалиден IBAN номер IbanNotValid=Невалиден IBAN номер
StandingOrders=Нареждания с директен дебит StandingOrders=Нареждания с директен дебит
StandingOrder=Поръчка за директен дебит StandingOrder=Поръчка за директен дебит
PaymentByDirectDebit=Payment by direct debit
PaymentByBankTransfers=Плащания с кредитен превод PaymentByBankTransfers=Плащания с кредитен превод
PaymentByBankTransfer=Плащане с кредитен превод PaymentByBankTransfer=Плащане с кредитен превод
AccountStatement=Извлечение по сметка AccountStatement=Извлечение по сметка
@ -105,8 +106,8 @@ SupplierInvoicePayment=Плащане към доставчик
SubscriptionPayment=Плащане на членски внос SubscriptionPayment=Плащане на членски внос
WithdrawalPayment=Платежно нареждане за дебит WithdrawalPayment=Платежно нареждане за дебит
SocialContributionPayment=Плащане на социални / фискални такси SocialContributionPayment=Плащане на социални / фискални такси
BankTransfer=Банков превод BankTransfer=Credit transfer
BankTransfers=Банкови преводи BankTransfers=Credit transfers
MenuBankInternalTransfer=Вътрешен превод MenuBankInternalTransfer=Вътрешен превод
TransferDesc=При прехвърляне от една сметка в друга, Dolibarr ще направи два записа (дебит от сметката на източника и кредит в целевата сметка). За тази транзакция ще се използва (с изключение на подписа) същата сума, име и дата. TransferDesc=При прехвърляне от една сметка в друга, Dolibarr ще направи два записа (дебит от сметката на източника и кредит в целевата сметка). За тази транзакция ще се използва (с изключение на подписа) същата сума, име и дата.
TransferFrom=От TransferFrom=От

View File

@ -441,6 +441,8 @@ BankAccountNumberKey=Контролна сума
Residence=Адрес Residence=Адрес
IBANNumber=IBAN номер на сметка IBANNumber=IBAN номер на сметка
IBAN=IBAN IBAN=IBAN
CustomerIBAN=IBAN of customer
SupplierIBAN=IBAN of vendor
BIC=BIC / SWIFT BIC=BIC / SWIFT
BICNumber=BIC / SWIFT код BICNumber=BIC / SWIFT код
ExtraInfos=Допълнителна информация ExtraInfos=Допълнителна информация

View File

@ -107,6 +107,13 @@ OrderPrinterToUse=Order printer to use
MainTemplateToUse=Main template to use MainTemplateToUse=Main template to use
OrderTemplateToUse=Order template to use OrderTemplateToUse=Order template to use
BarRestaurant=Bar Restaurant BarRestaurant=Bar Restaurant
AutoOrder=Customer auto order AutoOrder=Order by the customer himself
RestaurantMenu=Menu RestaurantMenu=Menu
CustomerMenu=Customer menu CustomerMenu=Customer menu
ScanToMenu=Scan QR code to see the menu
ScanToOrder=Scan QR code to order
Appearance=Appearance
HideCategoryImages=Hide Category Images
HideProductImages=Hide Product Images
NumberOfLinesToShow=Number of lines to show in image box
DefineTablePlan=Define table plan

View File

@ -99,3 +99,6 @@ TypeContact_contrat_internal_SALESREPFOLL=Търговски представи
TypeContact_contrat_external_BILLING=Контакт на клиента за фактуриране TypeContact_contrat_external_BILLING=Контакт на клиента за фактуриране
TypeContact_contrat_external_CUSTOMER=Контакт на клиента (проследяващ) TypeContact_contrat_external_CUSTOMER=Контакт на клиента (проследяващ)
TypeContact_contrat_external_SALESREPSIGN=Контакт на клиента (подписващ) TypeContact_contrat_external_SALESREPSIGN=Контакт на клиента (подписващ)
HideClosedServiceByDefault=Hide closed services by default
ShowClosedServices=Show Closed Services
HideClosedServices=Hide Closed Services

View File

@ -36,6 +36,7 @@ ErrorBadSupplierCodeSyntax=Неправилен синтаксис за код
ErrorSupplierCodeRequired=Необходим е код на доставчик ErrorSupplierCodeRequired=Необходим е код на доставчик
ErrorSupplierCodeAlreadyUsed=Кодът на доставчика вече е използван ErrorSupplierCodeAlreadyUsed=Кодът на доставчика вече е използван
ErrorBadParameters=Неправилни параметри ErrorBadParameters=Неправилни параметри
ErrorWrongParameters=Wrong or missing parameters
ErrorBadValueForParameter=Грешна стойност '%s' за параметър '%s' ErrorBadValueForParameter=Грешна стойност '%s' за параметър '%s'
ErrorBadImageFormat=Файловият формат на изображението не се поддържа (PHP не поддържа функции за конвертиране на изображения от този формат) ErrorBadImageFormat=Файловият формат на изображението не се поддържа (PHP не поддържа функции за конвертиране на изображения от този формат)
ErrorBadDateFormat=Стойността '%s' има грешен формат за дата ErrorBadDateFormat=Стойността '%s' има грешен формат за дата
@ -119,7 +120,7 @@ ErrorLoginHasNoEmail=Този потребител няма имейл адре
ErrorBadValueForCode=Неправилен защитен код. Опитайте отново ... ErrorBadValueForCode=Неправилен защитен код. Опитайте отново ...
ErrorBothFieldCantBeNegative=Полетата %s и %s не може да бъде едновременно отрицателен ErrorBothFieldCantBeNegative=Полетата %s и %s не може да бъде едновременно отрицателен
ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> cannot be negative on this type of invoice. If you need to add a discount line, just create the discount first (from field '%s' in thirdparty card) and apply it to the invoice. ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> cannot be negative on this type of invoice. If you need to add a discount line, just create the discount first (from field '%s' in thirdparty card) and apply it to the invoice.
ErrorLinesCantBeNegativeForOneVATRate=Total of lines can't be negative for a given VAT rate. ErrorLinesCantBeNegativeForOneVATRate=Total of lines (net of tax) can't be negative for a given not null VAT rate (Found a negative total for VAT rate <b>%s</b>%%).
ErrorLinesCantBeNegativeOnDeposits=Редовете не могат да бъдат отрицателни при депозит. Ще се сблъскате с проблеми, когато включите депозита в окончателната фактура. ErrorLinesCantBeNegativeOnDeposits=Редовете не могат да бъдат отрицателни при депозит. Ще се сблъскате с проблеми, когато включите депозита в окончателната фактура.
ErrorQtyForCustomerInvoiceCantBeNegative=Количество за ред в клиентска фактура не може да бъде отрицателно ErrorQtyForCustomerInvoiceCantBeNegative=Количество за ред в клиентска фактура не може да бъде отрицателно
ErrorWebServerUserHasNotPermission=Потребителски акаунт <b>%s</b> използват за извършване на уеб сървър не разполага с разрешение за това ErrorWebServerUserHasNotPermission=Потребителски акаунт <b>%s</b> използват за извършване на уеб сървър не разполага с разрешение за това
@ -183,6 +184,7 @@ ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Лоша дефиниция на
ErrorSavingChanges=Възникна грешка при запазването на промените ErrorSavingChanges=Възникна грешка при запазването на промените
ErrorWarehouseRequiredIntoShipmentLine=Изисква се склад по линията за изпращане ErrorWarehouseRequiredIntoShipmentLine=Изисква се склад по линията за изпращане
ErrorFileMustHaveFormat=Файлът трябва да има формат %s ErrorFileMustHaveFormat=Файлът трябва да има формат %s
ErrorFilenameCantStartWithDot=Filename can't start with a '.'
ErrorSupplierCountryIsNotDefined=Държавата за този доставчик не е дефинирана. Първо коригирайте това. ErrorSupplierCountryIsNotDefined=Държавата за този доставчик не е дефинирана. Първо коригирайте това.
ErrorsThirdpartyMerge=Неуспешно обединяване на двата записа. Заявката е анулирана. ErrorsThirdpartyMerge=Неуспешно обединяване на двата записа. Заявката е анулирана.
ErrorStockIsNotEnoughToAddProductOnOrder=Наличността не е достатъчна, за да може продуктът %s да се добави в нова поръчка. ErrorStockIsNotEnoughToAddProductOnOrder=Наличността не е достатъчна, за да може продуктът %s да се добави в нова поръчка.

View File

@ -15,6 +15,7 @@ CancelCP=Анулирана
RefuseCP=Отхвърлена RefuseCP=Отхвърлена
ValidatorCP=Одобряващ ValidatorCP=Одобряващ
ListeCP=Списък с молби за отпуск ListeCP=Списък с молби за отпуск
Leave=Молба за отпуск
LeaveId=Идентификатор на молба за отпуск LeaveId=Идентификатор на молба за отпуск
ReviewedByCP=Ще бъде одобрена от ReviewedByCP=Ще бъде одобрена от
UserID=Потребител UserID=Потребител

View File

@ -11,21 +11,24 @@ Insurance=Застраховка
Interest=Лихва Interest=Лихва
Nbterms=Брой условия Nbterms=Брой условия
Term=Условие Term=Условие
LoanAccountancyCapitalCode=Счетоводна сметка на капитал LoanAccountancyCapitalCode=Счетоводна сметка за капитал
LoanAccountancyInsuranceCode=Счетоводна сметка на застраховка LoanAccountancyInsuranceCode=Счетоводна сметка за застраховка
LoanAccountancyInterestCode=Счетоводна сметка за лихва LoanAccountancyInterestCode=Счетоводна сметка за лихва
ConfirmDeleteLoan=Потвърдете изтриването на този кредит ConfirmDeleteLoan=Потвърдете изтриването на този кредит
LoanDeleted=Кредитът е успешно изтрит LoanDeleted=Кредитът е успешно изтрит
ConfirmPayLoan=Потвърдете класифицирането на този кредит като платен ConfirmPayLoan=Потвърдете класифицирането на този кредит като платен
LoanPaid=Платен кредит LoanPaid=Кредитът е платен
ListLoanAssociatedProject=Списък на кредити, свързани с проекта ListLoanAssociatedProject=Списък на кредити, свързани с проекта
AddLoan=Създаване на кредит AddLoan=Създаване на кредит
FinancialCommitment=Финансово задължение FinancialCommitment=Финансово задължение
InterestAmount=Лихва InterestAmount=Лихва
CapitalRemain=Оставащ капитал CapitalRemain=Оставащ капитал
TermPaidAllreadyPaid = This term is allready paid
CantUseScheduleWithLoanStartedToPaid = Can't use scheduler for a loan with payment started
CantModifyInterestIfScheduleIsUsed = You can't modify interest if you use schedule
# Admin # Admin
ConfigLoan=Конфигуриране на модула Кредити ConfigLoan=Конфигуриране на модула кредити
LOAN_ACCOUNTING_ACCOUNT_CAPITAL=Счетоводна сметка на капитал по подразбиране LOAN_ACCOUNTING_ACCOUNT_CAPITAL=Счетоводна сметка за капитал по подразбиране
LOAN_ACCOUNTING_ACCOUNT_INTEREST=Счетоводна сметка на лихва по подразбиране LOAN_ACCOUNTING_ACCOUNT_INTEREST=Счетоводна сметка за лихва по подразбиране
LOAN_ACCOUNTING_ACCOUNT_INSURANCE=Счетоводна сметка на застраховка по подразбиране LOAN_ACCOUNTING_ACCOUNT_INSURANCE=Счетоводна сметка за застраховка по подразбиране
CreateCalcSchedule=Променяне на финансово задължение CreateCalcSchedule=Променяне на финансово задължение

View File

@ -7,7 +7,7 @@ ProjectsArea=Секция с проекти
ProjectStatus=Статус на проект ProjectStatus=Статус на проект
SharedProject=Всички SharedProject=Всички
PrivateProject=Участници в проекта PrivateProject=Участници в проекта
ProjectsImContactFor=Проекти, в които съм определен за контакт ProjectsImContactFor=Projects for which I am explicitly a contact
AllAllowedProjects=Всеки проект, който мога да прочета (мой и публичен) AllAllowedProjects=Всеки проект, който мога да прочета (мой и публичен)
AllProjects=Всички проекти AllProjects=Всички проекти
MyProjectsDesc=Този изглед е ограничен до проекти, в които сте определен за контакт MyProjectsDesc=Този изглед е ограничен до проекти, в които сте определен за контакт

View File

@ -3,7 +3,7 @@ Proposals=Търговски предложения
Proposal=Търговско предложение Proposal=Търговско предложение
ProposalShort=Предложение ProposalShort=Предложение
ProposalsDraft=Чернови търговски предложения ProposalsDraft=Чернови търговски предложения
ProposalsOpened=Отворени търговски предложения ProposalsOpened=Активни търговски предложения
CommercialProposal=Търговско предложение CommercialProposal=Търговско предложение
PdfCommercialProposalTitle=Търговско предложение PdfCommercialProposalTitle=Търговско предложение
ProposalCard=Карта ProposalCard=Карта
@ -21,19 +21,19 @@ AllPropals=Всички предложения
SearchAProposal=Търсене na предложение SearchAProposal=Търсене na предложение
NoProposal=Няма предложение NoProposal=Няма предложение
ProposalsStatistics=Статистика на търговски предложения ProposalsStatistics=Статистика на търговски предложения
NumberOfProposalsByMonth=Брой предложения на месец NumberOfProposalsByMonth=Брой предложения за месец
AmountOfProposalsByMonthHT=Обща сума на месец (без ДДС) AmountOfProposalsByMonthHT=Стойност на предложения за месец (без ДДС)
NbOfProposals=Брой търговски предложения NbOfProposals=Брой търговски предложения
ShowPropal=Показване на предложение ShowPropal=Показване на предложение
PropalsDraft=Чернови PropalsDraft=Чернови
PropalsOpened=Отворени PropalsOpened=Активни
PropalStatusDraft=Чернова (нужно е валидиране) PropalStatusDraft=Чернова (нужно е валидиране)
PropalStatusValidated=Валидирано (отворено) PropalStatusValidated=Валидирано (активно)
PropalStatusSigned=Подписано (нужно е фактуриране) PropalStatusSigned=Подписано (нужно е фактуриране)
PropalStatusNotSigned=Отхвърлено (приключено) PropalStatusNotSigned=Отхвърлено (приключено)
PropalStatusBilled=Фактурирано PropalStatusBilled=Фактурирано
PropalStatusDraftShort=Чернова PropalStatusDraftShort=Чернова
PropalStatusValidatedShort=Валидирано (отворено) PropalStatusValidatedShort=Валидирано (активно)
PropalStatusClosedShort=Приключено PropalStatusClosedShort=Приключено
PropalStatusSignedShort=Подписано PropalStatusSignedShort=Подписано
PropalStatusNotSignedShort=Отхвърлено PropalStatusNotSignedShort=Отхвърлено
@ -76,7 +76,7 @@ TypeContact_propal_external_BILLING=Получател на фактура
TypeContact_propal_external_CUSTOMER=Получател на предложение TypeContact_propal_external_CUSTOMER=Получател на предложение
TypeContact_propal_external_SHIPPING=Получател на доставка TypeContact_propal_external_SHIPPING=Получател на доставка
# Document models # Document models
DocModelAzurDescription=Пълен шаблон на предложение DocModelAzurDescription=Пълен шаблон на предложение (стара реализация на шаблон Cyan)
DocModelCyanDescription=Пълен модел на предложение DocModelCyanDescription=Пълен модел на предложение
DefaultModelPropalCreate=Създаване на шаблон по подразбиране DefaultModelPropalCreate=Създаване на шаблон по подразбиране
DefaultModelPropalToBill=Шаблон по подразбиране, когато се приключва търговско предложение (за да бъде фактурирано) DefaultModelPropalToBill=Шаблон по подразбиране, когато се приключва търговско предложение (за да бъде фактурирано)
@ -84,3 +84,4 @@ DefaultModelPropalClosed=Шаблон по подразбиране, когат
ProposalCustomerSignature=Име, фамилия, фирмен печат, дата и подпис ProposalCustomerSignature=Име, фамилия, фирмен печат, дата и подпис
ProposalsStatisticsSuppliers=Статистика на запитвания към доставчици ProposalsStatisticsSuppliers=Статистика на запитвания към доставчици
CaseFollowedBy=Случай, проследяван от CaseFollowedBy=Случай, проследяван от
SignedOnly=Signed only

View File

@ -56,16 +56,15 @@ DOL_UNDERLINE=Активиране на подчертаване
DOL_UNDERLINE_DISABLED=Деактивиране на подчертаване DOL_UNDERLINE_DISABLED=Деактивиране на подчертаване
DOL_BEEP=Звуков сигнал DOL_BEEP=Звуков сигнал
DOL_PRINT_TEXT=Отпечатване на текст DOL_PRINT_TEXT=Отпечатване на текст
DOL_VALUE_DATE=Дата на документ DateInvoiceWithTime=Дата и час на фактура
DOL_VALUE_DATE_TIME=Дата и час на фактура YearInvoice=Година на фактура
DOL_VALUE_YEAR=Година на фактура
DOL_VALUE_MONTH_LETTERS=Месец на фактура с букви DOL_VALUE_MONTH_LETTERS=Месец на фактура с букви
DOL_VALUE_MONTH=Месец на фактура DOL_VALUE_MONTH=Месец на фактура
DOL_VALUE_DAY=Ден на фактура DOL_VALUE_DAY=Ден на фактура
DOL_VALUE_DAY_LETTERS=Ден на фактура с букви DOL_VALUE_DAY_LETTERS=Ден на фактура с букви
DOL_LINE_FEED_REVERSE=Line feed reverse DOL_LINE_FEED_REVERSE=Line feed reverse
DOL_VALUE_OBJECT_ID=Invoice ID InvoiceID=Invoice ID
DOL_VALUE_OBJECT_REF=Съгласно фактура № InvoiceRef=Съгласно фактура №
DOL_PRINT_OBJECT_LINES=Invoice lines DOL_PRINT_OBJECT_LINES=Invoice lines
DOL_VALUE_CUSTOMER_FIRSTNAME=Customer first name DOL_VALUE_CUSTOMER_FIRSTNAME=Customer first name
DOL_VALUE_CUSTOMER_LASTNAME=Customer last name DOL_VALUE_CUSTOMER_LASTNAME=Customer last name
@ -76,20 +75,8 @@ DOL_VALUE_CUSTOMER_SKYPE=Customer Skype
DOL_VALUE_CUSTOMER_TAX_NUMBER=Customer tax number DOL_VALUE_CUSTOMER_TAX_NUMBER=Customer tax number
DOL_VALUE_CUSTOMER_ACCOUNT_BALANCE=Customer account balance DOL_VALUE_CUSTOMER_ACCOUNT_BALANCE=Customer account balance
DOL_VALUE_MYSOC_NAME=Your company name DOL_VALUE_MYSOC_NAME=Your company name
DOL_VALUE_MYSOC_ADDRESS=Your company address VendorLastname=Vendor last name
DOL_VALUE_MYSOC_ZIP=Your zip code VendorFirstname=Vendor first name
DOL_VALUE_MYSOC_TOWN=Your town VendorEmail=Vendor email
DOL_VALUE_MYSOC_COUNTRY=Your country
DOL_VALUE_MYSOC_IDPROF1=Your IDPROF1
DOL_VALUE_MYSOC_IDPROF2=Your IDPROF2
DOL_VALUE_MYSOC_IDPROF3=Your IDPROF3
DOL_VALUE_MYSOC_IDPROF4=Your IDPROF4
DOL_VALUE_MYSOC_IDPROF5=Your IDPROF5
DOL_VALUE_MYSOC_IDPROF6=Your IDPROF6
DOL_VALUE_MYSOC_TVA_INTRA=ДДС №
DOL_VALUE_MYSOC_CAPITAL=Капитал
DOL_VALUE_VENDOR_LASTNAME=Vendor last name
DOL_VALUE_VENDOR_FIRSTNAME=Vendor first name
DOL_VALUE_VENDOR_MAIL=Vendor mail
DOL_VALUE_CUSTOMER_POINTS=Customer points DOL_VALUE_CUSTOMER_POINTS=Customer points
DOL_VALUE_OBJECT_POINTS=Object points DOL_VALUE_OBJECT_POINTS=Object points

View File

@ -17,6 +17,10 @@ CancelSending=Анулиране на изпращане
DeleteSending=Изтриване на изпращане DeleteSending=Изтриване на изпращане
Stock=Наличност Stock=Наличност
Stocks=Наличности Stocks=Наличности
MissingStocks=Missing stocks
StockAtDate=Stock at date
StockAtDateInPast=Date in past
StockAtDateInFuture=Date in future
StocksByLotSerial=Наличности по партида / сериен № StocksByLotSerial=Наличности по партида / сериен №
LotSerial=Партиди / Серийни номера LotSerial=Партиди / Серийни номера
LotSerialList=Списък на партиди / серийни номера LotSerialList=Списък на партиди / серийни номера
@ -30,6 +34,7 @@ StockMovementForId=Идентификатор на движение %d
ListMouvementStockProject=Списък на движения на стокови наличности, свързани с проекта ListMouvementStockProject=Списък на движения на стокови наличности, свързани с проекта
StocksArea=Секция със складове StocksArea=Секция със складове
AllWarehouses=Всички складове AllWarehouses=Всички складове
IncludeEmptyDesiredStock=Include also undefined desired stock
IncludeAlsoDraftOrders=Включва чернови поръчки IncludeAlsoDraftOrders=Включва чернови поръчки
Location=Местоположение Location=Местоположение
LocationSummary=Кратко име на местоположение LocationSummary=Кратко име на местоположение
@ -59,10 +64,9 @@ AllowAddLimitStockByWarehouse=Управляване също и на стойн
RuleForWarehouse=Rule for warehouses RuleForWarehouse=Rule for warehouses
WarehouseAskWarehouseDuringOrder=Set a warehouse on Sale orders WarehouseAskWarehouseDuringOrder=Set a warehouse on Sale orders
UserDefaultWarehouse=Set a warehouse on Users UserDefaultWarehouse=Set a warehouse on Users
DefaultWarehouseActive=Default warehouse active
MainDefaultWarehouse=Склад по подразбиране MainDefaultWarehouse=Склад по подразбиране
MainDefaultWarehouseUser=Use user warehouse asign default MainDefaultWarehouseUser=Use a default warehouse for each user
MainDefaultWarehouseUserDesc=/!\\ By activating this option the gold of the creation of an article, the warehouse assigned to the user will be defined on this one. If no warehouse is defined on the user, the default warehouse is defined. MainDefaultWarehouseUserDesc=By activating this option, during creation of a product, the warehouse assigned to the product will be defined on this one. If no warehouse is defined on the user, the default warehouse is defined.
IndependantSubProductStock=Наличностите за продукти и подпродукти са независими IndependantSubProductStock=Наличностите за продукти и подпродукти са независими
QtyDispatched=Изпратено количество QtyDispatched=Изпратено количество
QtyDispatchedShort=Изпратено кол. QtyDispatchedShort=Изпратено кол.
@ -126,6 +130,7 @@ CurentlyUsingPhysicalStock=Физическа наличност
RuleForStockReplenishment=Правило за попълване на наличности RuleForStockReplenishment=Правило за попълване на наличности
SelectProductWithNotNullQty=Избиране на най-малко един продукт с количество различно от 0 и доставчик SelectProductWithNotNullQty=Избиране на най-малко един продукт с количество различно от 0 и доставчик
AlertOnly= Само предупреждения AlertOnly= Само предупреждения
IncludeProductWithUndefinedAlerts = Include also negative stock for products with no desired quantity defined, to restore them to 0
WarehouseForStockDecrease=Складът <b>%s</b> ще бъде използван за намаляване на наличността WarehouseForStockDecrease=Складът <b>%s</b> ще бъде използван за намаляване на наличността
WarehouseForStockIncrease=Складът <b>%s</b> ще бъде използван за увеличаване на наличността WarehouseForStockIncrease=Складът <b>%s</b> ще бъде използван за увеличаване на наличността
ForThisWarehouse=За този склад ForThisWarehouse=За този склад
@ -227,3 +232,6 @@ InventoryForASpecificProduct=Инвентаризация за конкрете
StockIsRequiredToChooseWhichLotToUse=Необходима е наличност, за да изберете коя партида да използвате. StockIsRequiredToChooseWhichLotToUse=Необходима е наличност, за да изберете коя партида да използвате.
ForceTo=Принуждаване до ForceTo=Принуждаване до
AlwaysShowFullArbo=Display full tree of warehouse on popup of warehouse links (Warning: This may decrease dramatically performances) AlwaysShowFullArbo=Display full tree of warehouse on popup of warehouse links (Warning: This may decrease dramatically performances)
StockAtDatePastDesc=You can view here the stock (real stock) at a given date in the past
StockAtDateFutureDesc=You can view here the stock (virtual stock) at a given date in future
CurrentStock=Current stock

View File

@ -58,7 +58,10 @@ NoPageYet=Все още няма страници
YouCanCreatePageOrImportTemplate=Може да създадете нова страница или да импортирате пълен шаблон на уебсайт YouCanCreatePageOrImportTemplate=Може да създадете нова страница или да импортирате пълен шаблон на уебсайт
SyntaxHelp=Помощ с конкретни съвети за синтаксиса SyntaxHelp=Помощ с конкретни съвети за синтаксиса
YouCanEditHtmlSourceckeditor=Може да редактирате изходния HTML код с помощта на бутона 'Код' в редактора. YouCanEditHtmlSourceckeditor=Може да редактирате изходния HTML код с помощта на бутона 'Код' в редактора.
YouCanEditHtmlSource=<br><span class="fa fa-bug"></span> You can include PHP code into this source using tags <strong>&lt;?php ?&gt;</strong>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.<br><br><span class="fa fa-bug"></span> You can also include content of another Page/Container with the following syntax:<br><strong>&lt;?php includeContainer('alias_of_container_to_include'); ?&gt;</strong><br><br><span class="fa fa-bug"></span> You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):<br><strong>&lt;?php redirectToContainer('alias_of_container_to_redirect_to'); ?&gt;</strong><br><br><span class="fa fa-link"></span> To add a link to another page, use the syntax:<br><strong>&lt;a href="alias_of_page_to_link_to.php"&gt;mylink&lt;a&gt;</strong><br><br><span class="fa fa-download"></span> To include a <strong>link to download</strong> a file stored into the <strong>documents</strong> directory, use the <strong>document.php</strong> wrapper:<br>Example, for a file into documents/ecm (need to be logged), syntax is:<br><strong>&lt;a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file into documents/medias (open directory for public access), syntax is:<br><strong>&lt;a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file shared with a share link (open access using the sharing hash key of file), syntax is:<br><strong>&lt;a href="/document.php?hashp=publicsharekeyoffile"&gt;</strong><br><br><span class="fa fa-picture-o"></span> To include an <strong>image</strong> stored into the <strong>documents</strong> directory, use the <strong>viewimage.php</strong> wrapper:<br>Example, for an image into documents/medias (open directory for public access), syntax is:<br><strong>&lt;img src="/viewimage.php?modulepart=medias&amp;file=[relative_dir/]filename.ext"&gt;</strong><br><br>More examples of HTML or dynamic code available on <a href="%s" target="_blank">the wiki documentation</a><br>. YouCanEditHtmlSource=<br><span class="fa fa-bug"></span> You can include PHP code into this source using tags <strong>&lt;?php ?&gt;</strong>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.<br><br><span class="fa fa-bug"></span> You can also include content of another Page/Container with the following syntax:<br><strong>&lt;?php includeContainer('alias_of_container_to_include'); ?&gt;</strong><br><br><span class="fa fa-bug"></span> You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):<br><strong>&lt;?php redirectToContainer('alias_of_container_to_redirect_to'); ?&gt;</strong><br><br><span class="fa fa-link"></span> To add a link to another page, use the syntax:<br><strong>&lt;a href="alias_of_page_to_link_to.php"&gt;mylink&lt;a&gt;</strong><br><br><span class="fa fa-download"></span> To include a <strong>link to download</strong> a file stored into the <strong>documents</strong> directory, use the <strong>document.php</strong> wrapper:<br>Example, for a file into documents/ecm (need to be logged), syntax is:<br><strong>&lt;a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file into documents/medias (open directory for public access), syntax is:<br><strong>&lt;a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file shared with a share link (open access using the sharing hash key of file), syntax is:<br><strong>&lt;a href="/document.php?hashp=publicsharekeyoffile"&gt;</strong><br><br><span class="fa fa-picture-o"></span> To include an <strong>image</strong> stored into the <strong>documents</strong> directory, use the <strong>viewimage.php</strong> wrapper:<br>Example, for an image into documents/medias (open directory for public access), syntax is:<br><strong>&lt;img src="/viewimage.php?modulepart=medias&amp;file=[relative_dir/]filename.ext"&gt;</strong><br>
#YouCanEditHtmlSource2=<br><span class="fa fa-picture-o"></span> To include a <strong>image</strong> shared publicaly, use the <strong>viewimage.php</strong> wrapper:<br>Example with a shared key 123456789, syntax is:<br><strong>&lt;img src="/viewimage.php?hashp=12345679012..."&gt;</strong><br>
YouCanEditHtmlSource2=For an image shared with a share link (open access using the sharing hash key of file), syntax is:<br><strong>&lt;img src="/viewimage.php?hashp=12345679012..."&gt;</strong><br>
YouCanEditHtmlSourceMore=<br>More examples of HTML or dynamic code available on <a href="%s" target="_blank">the wiki documentation</a><br>.
ClonePage=Клониране на страница / контейнер ClonePage=Клониране на страница / контейнер
CloneSite=Клониране на сайт CloneSite=Клониране на сайт
SiteAdded=Уебсайтът е добавен SiteAdded=Уебсайтът е добавен

Some files were not shown because too many files have changed in this diff Show More