diff --git a/ChangeLog b/ChangeLog index 1c0e96fc27c..2c9e138e1f9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -143,6 +143,123 @@ Following changes may create regressions for some external modules, but were nec +***** ChangeLog for 14.0.4 compared to 14.0.3 ***** + +FIX: $totalarray is overwritten, totals were lost +FIX: 13.0 - due to a typo in the 'mode' parameter, the "first name" column of the list of members displays the full name +FIX: 13.0: end date required to edit a ticket message +FIX: 13.0 feedback of PR #18993: make ticket messages punctual events with attr percentage = -1 +FIX: 13.0 PR #18993: add comment on modified part +FIX: 13.0: sometimes firstname was mistyped as fistname +FIX: 14.0 - civility field of private third party creation form has inadequate width +FIX: 14.0 - civility field width inadequate due to select2 calculating the width while the field has no width (display: none) +FIX: 14.0 - due to a typo in the 'mode' parameter, the "first name" co… +FIX: #18634 : Problem of virtual stock with reception module enabled +FIX: #18695 Added ref_ext to supplier invoice +FIX: #18698 Supplier invoice list - "alert" checkbox not working +FIX: #18735 +FIX: #18767 : Adherent delete +FIX: #18797 +FIX: #18854 +FIX: #18875 in v14 +FIX: #18910 +FIX: #18910 : MRP List SQL query syntax error with more than one extrafileds. +FIX: #18912 Accountancy - SQL error when custom group is added without country defined +FIX: #18934 on-registration in the extrafieldsline database for deliveries +FIX: #18968 +FIX: #19008 +FIX: #19014 - the properties of some fields are not updated when you submit the form +FIX: #19210 +FIX: #19214 : PostgreSQL error on admin/limits.php +FIX: #19241 Project - Fix display salary in overview +FIX: #19305 +FIX: 2 columns for total labels +FIX: Accountancy - Format Quadra export - Missing line type C to create automaticly a subledger account with label +FIX: Accountancy - If deposit invoice is used, force binding in deposit accounting account to solve transaction +FIX: Accountancy - Missing specific filename for export on format FEC2, Ciel & repare it +FIX: Accountancy - Option of export popup are inverted +FIX: Accountancy - PHP8 +FIX: Accountancy - Product admin - SQL error when we affect accounting account with product_perentity activated +FIX: Accountancy simplified - Salaries are not present in report +FIX: Accountancy - Some correction on export name +FIX: Accountancy - Trunc code_journal to 2 in format XIMPORT (Ciel, Sage50) +FIX: add warehouse in projects' overview count +FIX: also on customer index for automatic binding +FIX: Attachment of pdf into shipment when sending email +FIX: autocalculation of the supplier price in main currency. +FIX: avoid warning if $categories is an id +FIX: bad sign of amount stored for multicurrency columns on credit notes +FIX: Bad use of a forced contact of another company on PDF/ODT documents +FIX: Bad use of dol_concatdesc() +FIX: Button text on proposal card for create a invoice +FIX: calculateCosts of BOM must not be included into fetch +FIX: calculation of balance in conciliation page on desc sorting. +FIX: card.php +FIX: Change date format of the inventorycode to be equal as mass stock transfert +FIX: check if greater 0 +FIX: close cash with some terminals in TakePOS +FIX: compatibility with Multicompany +FIX: consistent UX when calling a tab from the invoice card with empty ref/id +FIX: default language defined for IN country +FIX: Expense report - In edit mode, field qty doesn't accept decimal unlike the create mode +FIX: fetch of product with modulebuilder load too much data +FIX: filter for export of accounting documents +FIX: Filter on categories +FIX: generate documents with PDF options +FIX: indentation +FIX: init hookmanager after loading $conf values +FIX: invoice: inpossible to create an invoice because of very bad check + warnings when trying to print tabs for invoice with no ID +FIX: legal issue on expense report pdf (must also show price without tax) +FIX: list of categories in stats of supplier invoices +FIX: load tranlate array after setting lang +FIX: lost superadmin grade after edit user card +FIX: missing filter status=1 on rss feeds +FIX: missing permission check reported by me@lainwir3d.net on product api +FIX: missing return status +FIX: missing sql filter by entity +FIX: move fetch_optionnal into $ac_static->fetch() +FIX: only a superadmin can modify entity +FIX: only ones value is return for dictionaries +FIX: optional visibility on create card +FIX: payment style and html5 tags +FIX: payment using wrong type in takepos when too many payment mode +FIX: PR#18931 Remove useless explicit call to dol_shutdown +FIX: Product accountancy affectation with product_perentity activated (PR #18620) +FIX: products/services card: hidden extrafields were overridden +FIX: project task list: extrafields could not be displayed +FIX: Propal list - Problem of pagination on date +FIX: reload user lang +FIX: Remove not complete order from the virtual stock +FIX: Replenish: SQL error when no warehouse has been created + Warning when there are no warehouses +FIX: resource list : Use standard code to handle list filters +FIX: restrictedArea for payment delete +FIX: Ret PR +FIX: second approval back in stable feature as is the setting for minimum amount (last part from PR#14286) +FIX: selected lines on supplier invoice create +FIX: Selection of type "people" for membership must hide the company +FIX: select list of orders not complete when field type of company is on +FIX: show end hours in events linked to objects +FIX: support of localtax on expense report +FIX: task time: can't filter by user with pgsql + show error message +FIX: task time: keep on using natural_search +FIX: tcpdf vulnerability to roman numeral bomb, cf. tecnickom/TCPDF issue #315 +FIX: Test when date of invoie is in future (pb with TZ and offset) +FIX: Ticket - Card - Wrong font awesome library +FIX: Ticket - Duplicate field project when we create ticket from project +FIX: translation into email for member at membership validation. +FIX: Travis Sanitize SQL +FIX: unprivileged user can see task associated with a not allowed project +FIX: URGENT: impossible to create an invoice +FIX: Use of accent into filename of GED +FIX: user date timezone offset +FIX: User salary card - translation problem +FIX: user without permission can set ticket subject +FIX: We need a default price base type in variant creation case with multiprices when parent has been created with only one level price +FIX: wrong array key value +FIX: wrong check +FIX: wrong position of error message +Sync transifex. + ***** ChangeLog for 14.0.3 compared to 14.0.2 ***** FIX: #18698 Supplier invoice list - "alert" checkbox not working diff --git a/dev/resources/iso-normes/14-pourquoi le format PDF A.pdf b/dev/resources/iso-normes/14-pourquoi le format PDF A.pdf new file mode 100644 index 00000000000..0ceeb5230de Binary files /dev/null and b/dev/resources/iso-normes/14-pourquoi le format PDF A.pdf differ diff --git a/htdocs/accountancy/admin/accountmodel.php b/htdocs/accountancy/admin/accountmodel.php index 97a460beaac..29c2b7d5510 100644 --- a/htdocs/accountancy/admin/accountmodel.php +++ b/htdocs/accountancy/admin/accountmodel.php @@ -495,7 +495,7 @@ if ($id) { if ($valuetoshow != '') { print ''; if (!empty($tabhelp[$id][$value]) && preg_match('/^http(s*):/i', $tabhelp[$id][$value])) { - print ''.$valuetoshow.' '.img_help(1, $valuetoshow).''; + print ''.$valuetoshow.' '.img_help(1, $valuetoshow).''; } elseif (!empty($tabhelp[$id][$value])) { print $form->textwithpicto($valuetoshow, $tabhelp[$id][$value]); } else { diff --git a/htdocs/accountancy/admin/categories_list.php b/htdocs/accountancy/admin/categories_list.php index d914b825b7f..bb629577ab6 100644 --- a/htdocs/accountancy/admin/categories_list.php +++ b/htdocs/accountancy/admin/categories_list.php @@ -520,7 +520,7 @@ if ($tabname[$id]) { if ($valuetoshow != '') { print ''; if (!empty($tabhelp[$id][$value]) && preg_match('/^http(s*):/i', $tabhelp[$id][$value])) { - print ''.$valuetoshow.' '.img_help(1, $valuetoshow).''; + print ''.$valuetoshow.' '.img_help(1, $valuetoshow).''; } elseif (!empty($tabhelp[$id][$value])) { print $form->textwithpicto($valuetoshow, $tabhelp[$id][$value]); } else { diff --git a/htdocs/accountancy/admin/journals_list.php b/htdocs/accountancy/admin/journals_list.php index e60deef59a3..8af707c4626 100644 --- a/htdocs/accountancy/admin/journals_list.php +++ b/htdocs/accountancy/admin/journals_list.php @@ -453,7 +453,7 @@ if ($id) { if ($valuetoshow != '') { print ''; if (!empty($tabhelp[$id][$value]) && preg_match('/^http(s*):/i', $tabhelp[$id][$value])) { - print ''.$valuetoshow.' '.img_help(1, $valuetoshow).''; + print ''.$valuetoshow.' '.img_help(1, $valuetoshow).''; } elseif (!empty($tabhelp[$id][$value])) { print $form->textwithpicto($valuetoshow, $tabhelp[$id][$value]); } else { diff --git a/htdocs/accountancy/admin/productaccount.php b/htdocs/accountancy/admin/productaccount.php index e7616ededf3..a77f049e25f 100644 --- a/htdocs/accountancy/admin/productaccount.php +++ b/htdocs/accountancy/admin/productaccount.php @@ -4,6 +4,7 @@ * Copyright (C) 2014 Florian Henry * Copyright (C) 2014 Juanjo Menent * Copyright (C) 2015 Ari Elbaz (elarifr) + * Copyright (C) 2021 Gauthier VERDOL * * 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 @@ -47,9 +48,12 @@ if (empty($user->rights->accounting->bind->write)) { // search & action GETPOST $action = GETPOST('action', 'aZ09'); +$massaction = GETPOST('massaction', 'alpha'); $codeventil_buy = GETPOST('codeventil_buy', 'array'); $codeventil_sell = GETPOST('codeventil_sell', 'array'); $chk_prod = GETPOST('chk_prod', 'array'); +$default_account = GETPOST('default_account', 'int'); +$confirm = GETPOST('confirm', 'alpha'); $account_number_buy = GETPOST('account_number_buy'); $account_number_sell = GETPOST('account_number_sell'); $changeaccount = GETPOST('changeaccount', 'array'); @@ -68,7 +72,6 @@ $search_onsell = GETPOST('search_onsell', 'alpha'); $search_onpurchase = GETPOST('search_onpurchase', 'alpha'); $accounting_product_mode = GETPOST('accounting_product_mode', 'alpha'); -$btn_changeaccount = GETPOST('changeaccount', 'alpha'); $btn_changetype = GETPOST('changetype', 'alpha'); $optioncss = GETPOST('optioncss', 'alpha'); @@ -165,7 +168,7 @@ if ($action == 'update') { } } - if (!empty($btn_changeaccount)) { + if (!empty($chk_prod) && $massaction === 'changeaccount') { //$msg = '
' . $langs->trans("Processing") . '...
'; if (!empty($chk_prod) && in_array($accounting_product_mode, $accounting_product_modes)) { $accounting = new AccountingAccount($db); @@ -436,11 +439,27 @@ if ($result) { $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage; $selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields + if ($massaction !== 'set_default_account') { + $arrayofmassactions = array( + 'changeaccount'=>img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Save") + ,'set_default_account'=>img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("ConfirmPreselectAccount") + ); + $massactionbutton = $form->selectMassAction('', $arrayofmassactions, 1); + } + $buttonsave = ''; //print '
'.$buttonsave.'
'; $texte = $langs->trans("ListOfProductsServices"); - print_barre_liste($texte, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $buttonsave, $num, $nbtotalofrecords, '', 0, '', '', $limit, 0, 0, 1); + print_barre_liste($texte, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, '', 0, '', '', $limit, 0, 0, 1); + + if ($massaction == 'set_default_account') { + $formquestion[]=array('type' => 'other', + 'name' => 'set_default_account', + 'label' => $langs->trans("AccountancyCode"), + 'value' => $form->select_account('', 'default_account', 1, array(), 0, 0, 'maxwidth200 maxwidthonsmartphone', 'cachewithshowemptyone')); + print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmPreselectAccount"), $langs->trans("ConfirmPreselectAccountQuestion", count($chk_prod)), "confirm_set_default_account", $formquestion, 1, 0, 200, 500, 1); + } print '
'; print ''; @@ -645,7 +664,7 @@ if ($result) { if (!empty($obj->aaid)) { $defaultvalue = ''; // Do not suggest default new value is code is already valid } - print $form->select_account($defaultvalue, 'codeventil_'.$product_static->id, 1, array(), 1, 0, 'maxwidth300 maxwidthonsmartphone productforselect'); + print $form->select_account(($default_account > 0 && $confirm === 'yes' && in_array($product_static->id, $chk_prod)) ? $default_account : $defaultvalue, 'codeventil_'.$product_static->id, 1, array(), 1, 0, 'maxwidth300 maxwidthonsmartphone productforselect'); print ''; } elseif ($accounting_product_mode == 'ACCOUNTANCY_BUY_INTRA') { // Accounting account buy intra (In EEC) @@ -659,7 +678,7 @@ if ($result) { if (!empty($obj->aaid)) { $defaultvalue = ''; // Do not suggest default new value is code is already valid } - print $form->select_account($defaultvalue, 'codeventil_'.$product_static->id, 1, array(), 1, 0, 'maxwidth300 maxwidthonsmartphone productforselect'); + print $form->select_account(($default_account > 0 && $confirm === 'yes' && in_array($product_static->id, $chk_prod)) ? $default_account : $defaultvalue, 'codeventil_'.$product_static->id, 1, array(), 1, 0, 'maxwidth300 maxwidthonsmartphone productforselect'); print ''; } elseif ($accounting_product_mode == 'ACCOUNTANCY_BUY_EXPORT') { // Accounting account buy export (Out of EEC) @@ -673,7 +692,7 @@ if ($result) { if (!empty($obj->aaid)) { $defaultvalue = ''; // Do not suggest default new value is code is already valid } - print $form->select_account($defaultvalue, 'codeventil_'.$product_static->id, 1, array(), 1, 0, 'maxwidth300 maxwidthonsmartphone productforselect'); + print $form->select_account(($default_account > 0 && $confirm === 'yes' && in_array($product_static->id, $chk_prod)) ? $default_account : $defaultvalue, 'codeventil_'.$product_static->id, 1, array(), 1, 0, 'maxwidth300 maxwidthonsmartphone productforselect'); print ''; } elseif ($accounting_product_mode == 'ACCOUNTANCY_SELL') { // Accounting account sell @@ -687,7 +706,7 @@ if ($result) { if (!empty($obj->aaid)) { $defaultvalue = ''; // Do not suggest default new value is code is already valid } - print $form->select_account($defaultvalue, 'codeventil_'.$product_static->id, 1, array(), 1, 0, 'maxwidth300 maxwidthonsmartphone productforselect'); + print $form->select_account(($default_account > 0 && $confirm === 'yes' && in_array($product_static->id, $chk_prod)) ? $default_account : $defaultvalue, 'codeventil_'.$product_static->id, 1, array(), 1, 0, 'maxwidth300 maxwidthonsmartphone productforselect'); print ''; } elseif ($accounting_product_mode == 'ACCOUNTANCY_SELL_INTRA') { // Accounting account sell intra (In EEC) @@ -701,7 +720,7 @@ if ($result) { if (!empty($obj->aaid)) { $defaultvalue = ''; // Do not suggest default new value is code is already valid } - print $form->select_account($defaultvalue, 'codeventil_'.$product_static->id, 1, array(), 1, 0, 'maxwidth300 maxwidthonsmartphone productforselect'); + print $form->select_account(($default_account > 0 && $confirm === 'yes' && in_array($product_static->id, $chk_prod)) ? $default_account : $defaultvalue, 'codeventil_'.$product_static->id, 1, array(), 1, 0, 'maxwidth300 maxwidthonsmartphone productforselect'); print ''; } else { // Accounting account sell export (Out of EEC) @@ -714,13 +733,20 @@ if ($result) { if (!empty($obj->aaid)) { $defaultvalue = ''; // Do not suggest default new value is code is already valid } - print $form->select_account($defaultvalue, 'codeventil_'.$product_static->id, 1, array(), 1, 0, 'maxwidth300 maxwidthonsmartphone productforselect'); + print $form->select_account(($default_account > 0 && $confirm === 'yes' && in_array($product_static->id, $chk_prod)) ? $default_account : $defaultvalue, 'codeventil_'.$product_static->id, 1, array(), 1, 0, 'maxwidth300 maxwidthonsmartphone productforselect'); print ''; } + if (!empty($chk_prod)) { + $ischecked = 0; + if (in_array($product_static->id, $chk_prod)) { + $ischecked=true; + } + } + // Checkbox select print ''; + print ''; print ""; $i++; } diff --git a/htdocs/accountancy/class/accountingaccount.class.php b/htdocs/accountancy/class/accountingaccount.class.php index 5c5faa837b7..730e52c805a 100644 --- a/htdocs/accountancy/class/accountingaccount.class.php +++ b/htdocs/accountancy/class/accountingaccount.class.php @@ -874,7 +874,7 @@ class AccountingAccount extends CommonObject } // Manage Deposit - if ($factureDet->desc == "(DEPOSIT)") { + if ($factureDet->desc == "(DEPOSIT)" || $facture->type == $facture::TYPE_DEPOSIT) { $accountdeposittoventilated = new self($this->db); $result = $accountdeposittoventilated->fetch('', $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER_DEPOSIT, 1); if ($result < 0) { diff --git a/htdocs/accountancy/customer/index.php b/htdocs/accountancy/customer/index.php index 000652f7a26..2b7e624676f 100644 --- a/htdocs/accountancy/customer/index.php +++ b/htdocs/accountancy/customer/index.php @@ -36,6 +36,9 @@ require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php'; // Load translation files required by the page $langs->loadLangs(array("compta", "bills", "other", "accountancy")); +$validatemonth = GETPOST('validatemonth', 'int'); +$validateyear = GETPOST('validateyear', 'int'); + // Security check if (empty($conf->accounting->enabled)) { accessforbidden(); @@ -174,6 +177,9 @@ if ($action == 'validatehistory') { if (!empty($conf->global->ACCOUNTING_DATE_START_BINDING)) { $sql .= " AND f.datef >= '".$db->idate($conf->global->ACCOUNTING_DATE_START_BINDING)."'"; } + if ($validatemonth && $validateyear) { + $sql .= dolSqlDateFilter('f.datef', 0, $validatemonth, $validateyear); + } dol_syslog('htdocs/accountancy/customer/index.php'); @@ -245,6 +251,8 @@ if ($action == 'validatehistory') { $code_sell_p_notset = ''; $code_sell_t_notset = ''; + $suggestedid = 0; + $return=$accountingAccount->getAccountingCodeToBind($thirdpartystatic, $mysoc, $product_static, $facture_static, $facture_static_det, $accountingAccountArray, 'customer'); if (!is_array($return) && $return<0) { setEventMessage($accountingAccount->error, 'errors'); @@ -259,28 +267,7 @@ if ($action == 'validatehistory') { } } - if (!empty($conf->global->ACCOUNTANCY_USE_PRODUCT_ACCOUNT_ON_THIRDPARTY)) { - // Level 3: Search suggested account for this thirdparty (similar code exists in page index.php to make automatic binding) - if (!empty($objp->company_code_sell)) { - $objp->code_sell_t = $objp->company_code_sell; - $objp->aarowid_suggest = $objp->aarowid_thirdparty; - $suggestedaccountingaccountfor = ''; - } - } - - // Manage Deposit - if (!empty($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER_DEPOSIT)) { - if ($objp->description == "(DEPOSIT)" || $objp->ftype == $facture_static::TYPE_DEPOSIT) { - $accountdeposittoventilated = new AccountingAccount($db); - $accountdeposittoventilated->fetch('', $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER_DEPOSIT, 1); - $objp->code_sell_l = $accountdeposittoventilated->ref; - $objp->code_sell_p = ''; - $objp->code_sell_t = ''; - $objp->aarowid_suggest = $accountdeposittoventilated->rowid; - } - } - - if ($objp->aarowid_suggest > 0) { + if ($suggestedid > 0) { $sqlupdate = "UPDATE ".MAIN_DB_PREFIX."facturedet"; $sqlupdate .= " SET fk_code_ventilation = ".((int) $suggestedid); $sqlupdate .= " WHERE fk_code_ventilation <= 0 AND product_type <= 2 AND rowid = ".((int) $facture_static_det->id); @@ -325,7 +312,7 @@ print '
'; $y = $year_current; -$buttonbind = ''.$langs->trans("ValidateHistory").''; +$buttonbind = ''.$langs->trans("ValidateHistory").''; print_barre_liste(img_picto('', 'unlink', 'class="paddingright fa-color-unset"').$langs->trans("OverviewOfAmountOfLinesNotBound"), '', '', '', '', '', '', -1, '', '', 0, $buttonbind, '', 0, 1, 1); //print load_fiche_titre($langs->trans("OverviewOfAmountOfLinesNotBound"), $buttonbind, ''); @@ -339,7 +326,24 @@ for ($i = 1; $i <= 12; $i++) { if ($j > 12) { $j -= 12; } - print ''; + $cursormonth = $j; + if ($cursormonth > 12) { + $cursormonth -= 12; + } + $cursoryear = ($cursormonth < ($conf->global->SOCIETE_FISCAL_MONTH_START ? $conf->global->SOCIETE_FISCAL_MONTH_START : 1)) ? $y + 1 : $y; + $tmp = dol_getdate(dol_get_last_day($cursoryear, $cursormonth, 'gmt'), false, 'gmt'); + + print ''; } print ''; @@ -379,7 +383,8 @@ if ($resql) { $num = $db->num_rows($resql); while ($row = $db->fetch_row($resql)) { - print ''; + print ''; print ''; - for ($i = 2; $i <= 12; $i++) { - print ''; + for ($i = 2; $i <= 13; $i++) { + $cursormonth = (($conf->global->SOCIETE_FISCAL_MONTH_START ? $conf->global->SOCIETE_FISCAL_MONTH_START : 1) + $i - 2); + if ($cursormonth > 12) { + $cursormonth -= 12; + } + $cursoryear = ($cursormonth < ($conf->global->SOCIETE_FISCAL_MONTH_START ? $conf->global->SOCIETE_FISCAL_MONTH_START : 1)) ? $y + 1 : $y; + $tmp = dol_getdate(dol_get_last_day($cursoryear, $cursormonth, 'gmt'), false, 'gmt'); + + print ''; } - print ''; print ''; print ''; } $db->free($resql); + + if ($num == 0) { + print ''; + } } else { print $db->lasterror(); // Show last sql error } @@ -423,7 +442,24 @@ for ($i = 1; $i <= 12; $i++) { if ($j > 12) { $j -= 12; } - print ''; + $cursormonth = $j; + if ($cursormonth > 12) { + $cursormonth -= 12; + } + $cursoryear = ($cursormonth < ($conf->global->SOCIETE_FISCAL_MONTH_START ? $conf->global->SOCIETE_FISCAL_MONTH_START : 1)) ? $y + 1 : $y; + $tmp = dol_getdate(dol_get_last_day($cursoryear, $cursormonth, 'gmt'), false, 'gmt'); + + print ''; } print ''; @@ -463,7 +499,8 @@ if ($resql) { $num = $db->num_rows($resql); while ($row = $db->fetch_row($resql)) { - print ''; + print ''; - for ($i = 2; $i <= 12; $i++) { - print ''; + for ($i = 2; $i <= 13; $i++) { + $cursormonth = (($conf->global->SOCIETE_FISCAL_MONTH_START ? $conf->global->SOCIETE_FISCAL_MONTH_START : 1) + $i - 2); + if ($cursormonth > 12) { + $cursormonth -= 12; + } + $cursoryear = ($cursormonth < ($conf->global->SOCIETE_FISCAL_MONTH_START ? $conf->global->SOCIETE_FISCAL_MONTH_START : 1)) ? $y + 1 : $y; + $tmp = dol_getdate(dol_get_last_day($cursoryear, $cursormonth, 'gmt'), false, 'gmt'); + + print ''; } - print ''; print ''; print ''; } $db->free($resql); + + if ($num == 0) { + print ''; + } } else { print $db->lasterror(); // Show last sql error } diff --git a/htdocs/accountancy/customer/list.php b/htdocs/accountancy/customer/list.php index b61e2e74ad8..6de33911e74 100644 --- a/htdocs/accountancy/customer/list.php +++ b/htdocs/accountancy/customer/list.php @@ -532,6 +532,7 @@ if ($result) { // issue : if we change product_type value in product DB it should differ from the value stored in facturedet DB ! $code_sell_l = ''; $code_sell_p = ''; + $code_sell_t = ''; $thirdpartystatic->id = $objp->socid; $thirdpartystatic->name = $objp->name; @@ -581,6 +582,8 @@ if ($result) { $code_sell_p_notset = ''; $code_sell_t_notset = ''; + $suggestedid = 0; + $return=$accountingAccount->getAccountingCodeToBind($thirdpartystatic, $mysoc, $product_static, $facture_static, $facture_static_det, $accountingAccountArray, 'customer'); if (!is_array($return) && $return<0) { setEventMessage($accountingAccount->error, 'errors'); @@ -594,28 +597,7 @@ if ($result) { } //var_dump($return); - // Level 3: Search suggested account for this thirdparty (similar code exists in page index.php to make automatic binding) - if (!empty($conf->global->ACCOUNTANCY_USE_PRODUCT_ACCOUNT_ON_THIRDPARTY)) { - if (!empty($objp->company_code_sell)) { - $objp->code_sell_t = $objp->company_code_sell; - $objp->aarowid_suggest = $objp->aarowid_thirdparty; - $suggestedaccountingaccountfor = ''; - } - } - - // Manage Deposit - if (!empty($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER_DEPOSIT)) { - if ($objp->description == "(DEPOSIT)" || $objp->ftype == $facture_static::TYPE_DEPOSIT) { - $accountdeposittoventilated = new AccountingAccount($db); - $accountdeposittoventilated->fetch('', $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER_DEPOSIT, 1); - $objp->code_sell_l = $accountdeposittoventilated->ref; - $objp->code_sell_p = ''; - $objp->code_sell_t = ''; - $objp->aarowid_suggest = $accountdeposittoventilated->rowid; - } - } - - if (!empty($objp->code_sell_p)) { + if (!empty($code_sell_p)) { // Value was defined previously } else { $code_sell_p_notset = 'color:orange'; @@ -630,6 +612,7 @@ if ($result) { // $code_sell_l is now default code of product/service // $code_sell_p is now code of product/service // $code_sell_t is now code of thirdparty + //var_dump($code_sell_l.' - '.$code_sell_p.' - '.$code_sell_t.' -> '.$suggestedid.' ('.$suggestedaccountingaccountbydefaultfor.' '.$suggestedaccountingaccountfor.')'); print ''; diff --git a/htdocs/accountancy/expensereport/index.php b/htdocs/accountancy/expensereport/index.php index a7c926f9dab..61b942e99bd 100644 --- a/htdocs/accountancy/expensereport/index.php +++ b/htdocs/accountancy/expensereport/index.php @@ -32,6 +32,9 @@ require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; // Load translation files required by the page $langs->loadLangs(array("compta", "bills", "other", "accountancy")); +$validatemonth = GETPOST('validatemonth', 'int'); +$validateyear = GETPOST('validateyear', 'int'); + $month_start = ($conf->global->SOCIETE_FISCAL_MONTH_START ? ($conf->global->SOCIETE_FISCAL_MONTH_START) : 1); if (GETPOST("year", 'int')) { $year_start = GETPOST("year", 'int'); @@ -106,12 +109,18 @@ if ($action == 'validatehistory') { $sql1 .= " WHERE ".MAIN_DB_PREFIX."expensereport_det.fk_c_type_fees = t.id AND accnt.fk_pcg_version = syst.pcg_version AND syst.rowid = ".((int) $conf->global->CHARTOFACCOUNTS).' AND accnt.entity = '.((int) $conf->entity); $sql1 .= " AND accnt.active = 1 AND t.accountancy_code = accnt.account_number"; $sql1 .= " AND ".MAIN_DB_PREFIX."expensereport_det.fk_code_ventilation = 0"; + if ($validatemonth && $validateyear) { + $sql1 .= dolSqlDateFilter('date', 0, $validatemonth, $validateyear); + } } else { $sql1 = "UPDATE ".MAIN_DB_PREFIX."expensereport_det as erd, ".MAIN_DB_PREFIX."c_type_fees as t, ".MAIN_DB_PREFIX."accounting_account as accnt , ".MAIN_DB_PREFIX."accounting_system as syst"; $sql1 .= " SET erd.fk_code_ventilation = accnt.rowid"; $sql1 .= " WHERE erd.fk_c_type_fees = t.id AND accnt.fk_pcg_version = syst.pcg_version AND syst.rowid = ".((int) $conf->global->CHARTOFACCOUNTS).' AND accnt.entity = '.((int) $conf->entity); $sql1 .= " AND accnt.active = 1 AND t.accountancy_code=accnt.account_number"; $sql1 .= " AND erd.fk_code_ventilation = 0"; + if ($validatemonth && $validateyear) { + $sql1 .= dolSqlDateFilter('erd.date', 0, $validatemonth, $validateyear); + } } dol_syslog('htdocs/accountancy/expensereport/index.php'); @@ -146,7 +155,7 @@ print '
'; $y = $year_current; -$buttonbind = ''.$langs->trans("ValidateHistory").''; +$buttonbind = ''.$langs->trans("ValidateHistory").''; print_barre_liste(img_picto('', 'unlink', 'class="paddingright fa-color-unset"').$langs->trans("OverviewOfAmountOfLinesNotBound"), '', '', '', '', '', '', -1, '', '', 0, $buttonbind, '', 0, 1, 1); @@ -195,7 +204,8 @@ if ($resql) { $num = $db->num_rows($resql); while ($row = $db->fetch_row($resql)) { - print ''; + print ''; print ''; - for ($i = 2; $i <= 12; $i++) { - print ''; + for ($i = 2; $i <= 13; $i++) { + print ''; } - print ''; print ''; print ''; } @@ -274,7 +285,8 @@ if ($resql) { $num = $db->num_rows($resql); while ($row = $db->fetch_row($resql)) { - print ''; + print ''; - for ($i = 2; $i <= 12; $i++) { - print ''; + for ($i = 2; $i <= 13; $i++) { + print ''; } - print ''; print ''; print ''; } diff --git a/htdocs/accountancy/supplier/index.php b/htdocs/accountancy/supplier/index.php index 6fafaf1f88d..406701d2500 100644 --- a/htdocs/accountancy/supplier/index.php +++ b/htdocs/accountancy/supplier/index.php @@ -34,6 +34,9 @@ require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php'; // Load translation files required by the page $langs->loadLangs(array("compta", "bills", "other", "accountancy")); +$validatemonth = GETPOST('validatemonth', 'int'); +$validateyear = GETPOST('validateyear', 'int'); + // Security check if (empty($conf->accounting->enabled)) { accessforbidden(); @@ -172,6 +175,9 @@ if ($action == 'validatehistory') { if (!empty($conf->global->ACCOUNTING_DATE_START_BINDING)) { $sql .= " AND f.datef >= '".$db->idate($conf->global->ACCOUNTING_DATE_START_BINDING)."'"; } + if ($validatemonth && $validateyear) { + $sql .= dolSqlDateFilter('f.datef', 0, $validatemonth, $validateyear); + } dol_syslog('htdocs/accountancy/supplier/index.php'); @@ -241,6 +247,8 @@ if ($action == 'validatehistory') { $code_buy_p_notset = ''; $code_buy_t_notset = ''; + $suggestedid = 0; + $return = $accountingAccount->getAccountingCodeToBind($mysoc, $thirdpartystatic, $product_static, $facture_static, $facture_static_det, $accountingAccountArray, 'supplier'); if (!is_array($return) && $return<0) { setEventMessage($accountingAccount->error, 'errors'); @@ -255,16 +263,7 @@ if ($action == 'validatehistory') { } } - if (!empty($conf->global->ACCOUNTANCY_USE_PRODUCT_ACCOUNT_ON_THIRDPARTY)) { - // Level 3: Search suggested account for this thirdparty (similar code exists in page index.php to make automatic binding) - if (!empty($objp->company_code_buy)) { - $objp->code_buy_t = $objp->company_code_buy; - $objp->aarowid_suggest = $objp->aarowid_thirdparty; - $suggestedaccountingaccountfor = ''; - } - } - - if ($objp->aarowid_suggest > 0) { + if ($suggestedid > 0) { $sqlupdate = "UPDATE ".MAIN_DB_PREFIX."facture_fourn_det"; $sqlupdate .= " SET fk_code_ventilation = ".((int) $suggestedid); $sqlupdate .= " WHERE fk_code_ventilation <= 0 AND product_type <= 2 AND rowid = ".((int) $facture_static_det->id); @@ -307,7 +306,7 @@ print '
'; $y = $year_current; -$buttonbind = ''.$langs->trans("ValidateHistory").''; +$buttonbind = ''.$langs->trans("ValidateHistory").''; print_barre_liste(img_picto('', 'unlink', 'class="paddingright fa-color-unset"').$langs->trans("OverviewOfAmountOfLinesNotBound"), '', '', '', '', '', '', -1, '', '', 0, $buttonbind, '', 0, 1, 1); @@ -322,7 +321,24 @@ for ($i = 1; $i <= 12; $i++) { if ($j > 12) { $j -= 12; } - print ''; + $cursormonth = $j; + if ($cursormonth > 12) { + $cursormonth -= 12; + } + $cursoryear = ($cursormonth < ($conf->global->SOCIETE_FISCAL_MONTH_START ? $conf->global->SOCIETE_FISCAL_MONTH_START : 1)) ? $y + 1 : $y; + $tmp = dol_getdate(dol_get_last_day($cursoryear, $cursormonth, 'gmt'), false, 'gmt'); + + print ''; } print ''; @@ -357,7 +373,8 @@ if ($resql) { $num = $db->num_rows($resql); while ($row = $db->fetch_row($resql)) { - print ''; + print ''; print ''; - for ($i = 2; $i <= 12; $i++) { - print ''; + for ($i = 2; $i <= 13; $i++) { + print ''; } - print ''; print ''; print ''; } $db->free($resql); + + if ($num == 0) { + print ''; + } } else { print $db->lasterror(); // Show last sql error } @@ -401,7 +425,24 @@ for ($i = 1; $i <= 12; $i++) { if ($j > 12) { $j -= 12; } - print ''; + $cursormonth = $j; + if ($cursormonth > 12) { + $cursormonth -= 12; + } + $cursoryear = ($cursormonth < ($conf->global->SOCIETE_FISCAL_MONTH_START ? $conf->global->SOCIETE_FISCAL_MONTH_START : 1)) ? $y + 1 : $y; + $tmp = dol_getdate(dol_get_last_day($cursoryear, $cursormonth, 'gmt'), false, 'gmt'); + + print ''; } print ''; @@ -436,7 +477,8 @@ if ($resql) { $num = $db->num_rows($resql); while ($row = $db->fetch_row($resql)) { - print ''; + print ''; print ''; - for ($i = 2; $i <= 12; $i++) { - print ''; + for ($i = 2; $i <= 13; $i++) { + print ''; } - print ''; print ''; print ''; } $db->free($resql); + + if ($num == 0) { + print ''; + } } else { print $db->lasterror(); // Show last sql error } diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index 18cb15d61a5..2b1260ea0da 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -532,9 +532,9 @@ if ($result) { // product_type: 0 = service, 1 = product // if product does not exist we use the value of product_type provided in facturedet to define if this is a product or service // issue : if we change product_type value in product DB it should differ from the value stored in facturedet DB ! - $objp->code_buy_l = ''; - $objp->code_buy_p = ''; - $objp->aarowid_suggest = ''; // Will be set later + $code_buy_l = ''; + $code_buy_p = ''; + $code_buy_t = ''; $thirdpartystatic->id = $objp->socid; $thirdpartystatic->name = $objp->name; @@ -585,6 +585,8 @@ if ($result) { $code_buy_p_notset = ''; $code_buy_t_notset = ''; + $suggestedid = 0; + $return=$accountingAccount->getAccountingCodeToBind($mysoc, $thirdpartystatic, $product_static, $facturefourn_static, $facturefourn_static_det, $accountingAccountArray, 'supplier'); if (!is_array($return) && $return<0) { setEventMessage($accountingAccount->error, 'errors'); @@ -598,9 +600,6 @@ if ($result) { } //var_dump($return); - // Level 3: Search suggested account for this thirdparty (similar code exists in page index.php to make automatic binding) - // Not supported for suppliers - if (!empty($code_buy_p)) { // Value was defined previously } else { @@ -616,6 +615,7 @@ if ($result) { // $code_buy_l is now default code of product/service // $code_buy_p is now code of product/service // $code_buy_t is now code of thirdparty + //var_dump($code_buy_l.' - '.$code_buy_p.' - '.$code_buy_t.' -> '.$suggestedid.' ('.$suggestedaccountingaccountbydefaultfor.' '.$suggestedaccountingaccountfor.')'); print ''; diff --git a/htdocs/adherents/admin/website.php b/htdocs/adherents/admin/website.php index f00fbb6b0de..cef6edec36e 100644 --- a/htdocs/adherents/admin/website.php +++ b/htdocs/adherents/admin/website.php @@ -265,7 +265,7 @@ if (!empty($conf->global->MEMBER_ENABLE_PUBLIC)) { print ''; print ajax_autoselect('publicurlmember'); } diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 0b5fddd5da4..a0d542bd79e 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -14,6 +14,7 @@ * Copyright (C) 2019 Nicolas ZABOURI * Copyright (C) 2020 Josep Lluís Amador * Copyright (C) 2021 Waël Almoman + * Copyright (C) 2021 Philippe Grand * * 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 @@ -1520,7 +1521,7 @@ class Adherent extends CommonObject { global $langs; - require_once DOL_DOCUMENT_ROOT.'/parntership/class/partnership.class.php'; + require_once DOL_DOCUMENT_ROOT.'/partnership/class/partnership.class.php'; $this->partnerships[] = array(); diff --git a/htdocs/admin/agenda_xcal.php b/htdocs/admin/agenda_xcal.php index f854649962c..0166769660a 100644 --- a/htdocs/admin/agenda_xcal.php +++ b/htdocs/admin/agenda_xcal.php @@ -159,7 +159,7 @@ $getentity = ($conf->entity > 1 ? "&entity=".$conf->entity : ""); // Show message $message = ''; -$urlvcal = ''; +$urlvcal = ''; $urlvcal .= $urlwithroot.'/public/agenda/agendaexport.php?format=vcal'.$getentity.'&exportkey='.($conf->global->MAIN_AGENDA_XCAL_EXPORTKEY ?urlencode($conf->global->MAIN_AGENDA_XCAL_EXPORTKEY) : 'KEYNOTDEFINED').''; $message .= img_picto('', 'globe').' '.str_replace('{url}', $urlvcal, ''.$langs->trans("WebCalUrlForVCalExport", 'vcal', '').''); $message .= ''; $message .= ajax_autoselect('onlinepaymenturl1'); $message .= '
'; -$urlical = ''; +$urlical = ''; $urlical .= $urlwithroot.'/public/agenda/agendaexport.php?format=ical&type=event'.$getentity.'&exportkey='.($conf->global->MAIN_AGENDA_XCAL_EXPORTKEY ?urlencode($conf->global->MAIN_AGENDA_XCAL_EXPORTKEY) : 'KEYNOTDEFINED').''; $message .= img_picto('', 'globe').' '.str_replace('{url}', $urlical, ''.$langs->trans("WebCalUrlForVCalExport", 'ical/ics', '').''); $message .= ''; $message .= ajax_autoselect('onlinepaymenturl2'); $message .= '
'; -$urlrss = ''; +$urlrss = ''; $urlrss .= $urlwithroot.'/public/agenda/agendaexport.php?format=rss'.$getentity.'&exportkey='.($conf->global->MAIN_AGENDA_XCAL_EXPORTKEY ?urlencode($conf->global->MAIN_AGENDA_XCAL_EXPORTKEY) : 'KEYNOTDEFINED').''; $message .= img_picto('', 'globe').' '.str_replace('{url}', $urlrss, ''.$langs->trans("WebCalUrlForVCalExport", 'rss', '').''); $message .= '
'; - print '
'.$langs->trans('MonthShort'.str_pad($j, 2, '0', STR_PAD_LEFT)).''; + if (!empty($tmp['mday'])) { + $param = 'search_date_startday=1&search_date_startmonth='.$cursormonth.'&search_date_startyear='.$cursoryear; + $param .= '&search_date_endday='.$tmp['mday'].'&search_date_endmonth='.$tmp['mon'].'&search_date_endyear='.$tmp['year']; + print ''; + } + print $langs->trans('MonthShort'.str_pad($j, 2, '0', STR_PAD_LEFT)); + if (!empty($tmp['mday'])) { + print ''; + } + print ''.$langs->trans("Total").'
'; + print '
'; if ($row[0] == 'tobind') { print ''.$langs->trans("Unknown").''; } else { @@ -388,19 +393,33 @@ if ($resql) { print ''; if ($row[0] == 'tobind') { - print $langs->trans("UseMenuToSetBindindManualy", DOL_URL_ROOT.'/accountancy/customer/list.php?search_year='.$y, $langs->transnoentitiesnoconv("ToBind")); + print $langs->trans("UseMenuToSetBindindManualy", DOL_URL_ROOT.'/accountancy/customer/list.php?search_year='.((int) $y), $langs->transnoentitiesnoconv("ToBind")); } else { print $row[1]; } print ''.price($row[$i]).''; + print price($row[$i]); + print ''.price($row[13]).''.price($row[14]).'
'; + print ''.$langs->trans("NoRecordFound").''; + print '
'.$langs->trans('MonthShort'.str_pad($j, 2, '0', STR_PAD_LEFT)).''; + if (!empty($tmp['mday'])) { + $param = 'search_date_startday=1&search_date_startmonth='.$cursormonth.'&search_date_startyear='.$cursoryear; + $param .= '&search_date_endday='.$tmp['mday'].'&search_date_endmonth='.$tmp['mon'].'&search_date_endyear='.$tmp['year']; + print ''; + } + print $langs->trans('MonthShort'.str_pad($j, 2, '0', STR_PAD_LEFT)); + if (!empty($tmp['mday'])) { + print ''; + } + print ''.$langs->trans("Total").'
'; + print '
'; if ($row[0] == 'tobind') { print $langs->trans("Unknown"); } else { @@ -473,20 +510,34 @@ if ($resql) { print ''; if ($row[0] == 'tobind') { - print $langs->trans("UseMenuToSetBindindManualy", DOL_URL_ROOT.'/accountancy/customer/list.php?search_year='.$y, $langs->transnoentitiesnoconv("ToBind")); + print $langs->trans("UseMenuToSetBindindManualy", DOL_URL_ROOT.'/accountancy/customer/list.php?search_year='.((int) $y), $langs->transnoentitiesnoconv("ToBind")); } else { print $row[1]; } print ''.price($row[$i]).''; + print price($row[$i]); + print ''.price($row[13]).''.price($row[14]).'
'; + print ''.$langs->trans("NoRecordFound").''; + print '
'; + print '
'; if ($row[0] == 'tobind') { print ''.$langs->trans("Unknown").''; } else { @@ -204,15 +214,16 @@ if ($resql) { print ''; if ($row[0] == 'tobind') { - print $langs->trans("UseMenuToSetBindindManualy", DOL_URL_ROOT.'/accountancy/expensereport/list.php?search_year='.$y, $langs->transnoentitiesnoconv("ToBind")); + print $langs->trans("UseMenuToSetBindindManualy", DOL_URL_ROOT.'/accountancy/expensereport/list.php?search_year='.((int) $y), $langs->transnoentitiesnoconv("ToBind")); } else { print $row[1]; } print ''.price($row[$i]).''; + print price($row[$i]); + print ''.price($row[13]).''.price($row[14]).'
'; + print '
'; if ($row[0] == 'tobind') { print ''.$langs->trans("Unknown").''; } else { @@ -284,15 +296,16 @@ if ($resql) { print ''; if ($row[0] == 'tobind') { - print $langs->trans("UseMenuToSetBindindManualy", DOL_URL_ROOT.'/accountancy/expensereport/list.php?search_year='.$y, $langs->transnoentitiesnoconv("ToBind")); + print $langs->trans("UseMenuToSetBindindManualy", DOL_URL_ROOT.'/accountancy/expensereport/list.php?search_year='.((int) $y), $langs->transnoentitiesnoconv("ToBind")); } else { print $row[1]; } print ''.price($row[$i]).''; + print price($row[$i]); + print ''.price($row[13]).''.price($row[14]).'
'.$langs->trans('MonthShort'.str_pad($j, 2, '0', STR_PAD_LEFT)).''; + if (!empty($tmp['mday'])) { + $param = 'search_date_startday=1&search_date_startmonth='.$cursormonth.'&search_date_startyear='.$cursoryear; + $param .= '&search_date_endday='.$tmp['mday'].'&search_date_endmonth='.$tmp['mon'].'&search_date_endyear='.$tmp['year']; + print ''; + } + print $langs->trans('MonthShort'.str_pad($j, 2, '0', STR_PAD_LEFT)); + if (!empty($tmp['mday'])) { + print ''; + } + print ''.$langs->trans("Total").'
'; + print '
'; if ($row[0] == 'tobind') { print ''.$langs->trans("Unknown").''; } else { @@ -366,19 +383,26 @@ if ($resql) { print ''; if ($row[0] == 'tobind') { - print $langs->trans("UseMenuToSetBindindManualy", DOL_URL_ROOT.'/accountancy/supplier/list.php?search_year='.$y, $langs->transnoentitiesnoconv("ToBind")); + print $langs->trans("UseMenuToSetBindindManualy", DOL_URL_ROOT.'/accountancy/supplier/list.php?search_year='.((int) $y), $langs->transnoentitiesnoconv("ToBind")); } else { print $row[1]; } print ''.price($row[$i]).''; + print price($row[$i]); + print ''.price($row[13]).''.price($row[14]).'
'; + print ''.$langs->trans("NoRecordFound").''; + print '
'.$langs->trans('MonthShort'.str_pad($j, 2, '0', STR_PAD_LEFT)).''; + if (!empty($tmp['mday'])) { + $param = 'search_date_startday=1&search_date_startmonth='.$cursormonth.'&search_date_startyear='.$cursoryear; + $param .= '&search_date_endday='.$tmp['mday'].'&search_date_endmonth='.$tmp['mon'].'&search_date_endyear='.$tmp['year']; + print ''; + } + print $langs->trans('MonthShort'.str_pad($j, 2, '0', STR_PAD_LEFT)); + if (!empty($tmp['mday'])) { + print ''; + } + print ''.$langs->trans("Total").'
'; + print '
'; if ($row[0] == 'tobind') { print $langs->trans("Unknown"); } else { @@ -445,19 +487,26 @@ if ($resql) { print ''; if ($row[0] == 'tobind') { - print $langs->trans("UseMenuToSetBindindManualy", DOL_URL_ROOT.'/accountancy/supplier/list.php?search_year='.$y, $langs->transnoentitiesnoconv("ToBind")); + print $langs->trans("UseMenuToSetBindindManualy", DOL_URL_ROOT.'/accountancy/supplier/list.php?search_year='.((int) $y), $langs->transnoentitiesnoconv("ToBind")); } else { print $row[1]; } print ''.price($row[$i]).''; + print price($row[$i]); + print ''.price($row[13]).''.price($row[14]).'
'; + print ''.$langs->trans("NoRecordFound").''; + print '
'; print ''; -print ''; +print ''; +print ''; +print ''; +print ''; print "\n"; @@ -119,9 +122,9 @@ foreach ($listofnetworks as $key => $value) { $networkconstname = 'MAIN_INFO_SOCIETE_'.strtoupper($key).'_URL'; $networkconstid = 'MAIN_INFO_SOCIETE_'.strtoupper($key); print ''; print ''; print ''."\n"; diff --git a/htdocs/admin/dav.php b/htdocs/admin/dav.php index fab1787f5b9..9edc123a784 100644 --- a/htdocs/admin/dav.php +++ b/htdocs/admin/dav.php @@ -173,11 +173,11 @@ $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT; // This is to use external domai // Show message $message = ''; -$url = ''.$urlwithroot.'/dav/fileserver.php'; +$url = ''.$urlwithroot.'/dav/fileserver.php'; $message .= img_picto('', 'globe').' '.str_replace('{url}', $url, $langs->trans("WebDavServer", 'WebDAV', '')); $message .= ''; @@ -186,11 +186,11 @@ $message .= ajax_autoselect('webdavpublicurl'); $message .= '
'; if (!empty($conf->global->DAV_ALLOW_PUBLIC_DIR)) { $urlEntity = (!empty($conf->multicompany->enabled) ? '?entity='.$conf->entity : ''); - $url = ''.$urlwithroot.'/dav/fileserver.php/public/'.$urlEntity.''; + $url = ''.$urlwithroot.'/dav/fileserver.php/public/'.$urlEntity.''; $message .= img_picto('', 'globe').' '.str_replace('{url}', $url, $langs->trans("WebDavServer", 'WebDAV public', '')); $message .= ''; diff --git a/htdocs/admin/dolistore/class/dolistore.class.php b/htdocs/admin/dolistore/class/dolistore.class.php index 25446dbed4d..00d902f1bbb 100644 --- a/htdocs/admin/dolistore/class/dolistore.class.php +++ b/htdocs/admin/dolistore/class/dolistore.class.php @@ -268,7 +268,7 @@ class Dolistore // add image or default ? if ($product->id_default_image != '') { $image_url = DOL_URL_ROOT.'/admin/dolistore/ajax/image.php?id_product='.((int) $product->id).'&id_image='.((int) $product->id_default_image); - $images = ''; + $images = ''; $images .= ''; } else { $images = ''; @@ -280,8 +280,8 @@ class Dolistore $download_link = ''; } else { $price = '

'.$langs->trans('Free').'

'; - $download_link = ''; - $download_link .= '

'; + $download_link = ''; + $download_link .= '

'; } //checking versions @@ -316,8 +316,6 @@ class Dolistore $compatible = 'NotCompatible'; } - //.'
'.$langs->trans("SeeInMarkerPlace").' - //output template $html .= ' diff --git a/htdocs/admin/emailcollector_card.php b/htdocs/admin/emailcollector_card.php index be3ab2d63c1..dca93b9a506 100644 --- a/htdocs/admin/emailcollector_card.php +++ b/htdocs/admin/emailcollector_card.php @@ -583,6 +583,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $arrayoftypes = array( 'loadthirdparty'=>$langs->trans('LoadThirdPartyFromName', $langs->transnoentities("ThirdPartyName")), 'loadandcreatethirdparty'=>$langs->trans('LoadThirdPartyFromNameOrCreate', $langs->transnoentities("ThirdPartyName")), + 'recordjoinpiece'=>$langs->trans('recordjoinpieceonobject'), 'recordevent'=>'RecordEvent'); if ($conf->projet->enabled) { $arrayoftypes['project'] = 'CreateLeadAndThirdParty'; diff --git a/htdocs/admin/geoipmaxmind.php b/htdocs/admin/geoipmaxmind.php index 35def897445..e662c0576a2 100644 --- a/htdocs/admin/geoipmaxmind.php +++ b/htdocs/admin/geoipmaxmind.php @@ -144,12 +144,12 @@ print '
'; print $langs->trans("NoteOnPathLocation").'
'; $url1 = 'http://www.maxmind.com/en/city?rId=awstats'; -print $langs->trans("YouCanDownloadFreeDatFileTo", ''.$url1.''); +print $langs->trans("YouCanDownloadFreeDatFileTo", ''.$url1.''); print '
'; $url2 = 'http://www.maxmind.com/en/city?rId=awstats'; -print $langs->trans("YouCanDownloadAdvancedDatFileTo", ''.$url2.''); +print $langs->trans("YouCanDownloadAdvancedDatFileTo", ''.$url2.''); if ($geoip) { print '

'; diff --git a/htdocs/admin/mails_templates.php b/htdocs/admin/mails_templates.php index b896c8962b4..f1d641029d0 100644 --- a/htdocs/admin/mails_templates.php +++ b/htdocs/admin/mails_templates.php @@ -654,7 +654,7 @@ if ($action == 'view') { if ($valuetoshow != '') { print ''."\n"; $url = 'https://www.dolistore.com'; - print ''; + print ''; print ''; - print ''; + print ''; print ''; print "
'.$langs->trans("SocialNetworksInformation").''.$langs->trans("Url").''.$langs->trans("SocialNetworkId").''.$langs->trans("SocialNetworksInformation").''.$langs->trans("SocialNetworkId").''.$form->textwithpicto($langs->trans("Url"), $langs->trans("KeepEmptyToUseDefault")).'
'; - print ''; - print ''; print ''; + print ''; + print ''; print ''.dol_print_socialnetworks((!empty($conf->global->$networkconstid) ? dol_escape_htmltag($conf->global->$networkconstid) : ''), 0, 0, $key, $listofnetworks).'
'.dol_escape_htmltag($newapp.$images).'
'; if (!empty($tabhelp[$id][$value]) && preg_match('/^http(s*):/i', $tabhelp[$id][$value])) { - print ''.$valuetoshow.' '.img_help(1, $valuetoshow).''; + print ''.$valuetoshow.' '.img_help(1, $valuetoshow).''; } elseif (!empty($tabhelp[$id][$value])) { if (in_array($value, array('topic'))) { print $form->textwithpicto($valuetoshow, $tabhelp[$id][$value], 1, 'help', '', 0, 2, $value); // Tooltip on click diff --git a/htdocs/admin/modulehelp.php b/htdocs/admin/modulehelp.php index da76f01fd6c..a3c7c3d5c08 100644 --- a/htdocs/admin/modulehelp.php +++ b/htdocs/admin/modulehelp.php @@ -334,7 +334,7 @@ if ($mode == 'desc') { $editor_url = 'http://'.$editor_url; } if (!empty($objMod->editor_url) && !preg_match('/dolibarr\.org/i', $objMod->editor_url)) { - $textexternal .= ($objMod->editor_name != 'dolibarr' ? ' - ' : '').img_picto('', 'globe').' '.$objMod->editor_url.''; + $textexternal .= ($objMod->editor_name != 'dolibarr' ? ' - ' : '').img_picto('', 'globe').' '.$objMod->editor_url.''; } $text .= $textexternal; $text .= '
'; diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index 2cbb14bb2dd..a45154d72d4 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -1000,9 +1000,9 @@ if ($mode == 'marketplace') { print '
'.$langs->trans("DoliStoreDesc").''.$url.''.$url.'
\n"; @@ -1081,7 +1081,7 @@ if ($mode == 'deploy') { $allowonlineinstall = false; } - $fullurl = ''.$urldolibarrmodules.''; + $fullurl = ''.$urldolibarrmodules.''; $message = ''; if (!empty($allowonlineinstall)) { if (!in_array('/custom', explode(',', $dolibarr_main_url_root_alt))) { @@ -1273,10 +1273,10 @@ if ($mode == 'develop') { print ''."\n"; $url = 'https://partners.dolibarr.org'; print ''; - print''; + print''; print ''; print ''.$langs->trans("DoliPartnersDesc").''; - print ''.$url.''; + print ''.$url.''; print ''; print "\n"; diff --git a/htdocs/admin/multicurrency.php b/htdocs/admin/multicurrency.php index e8619219471..b622ef192ce 100644 --- a/htdocs/admin/multicurrency.php +++ b/htdocs/admin/multicurrency.php @@ -169,6 +169,7 @@ $head = multicurrencyAdminPrepareHead(); print dol_get_fiche_head($head, 'settings', $langs->trans($page_name), -1, "multicurrency"); +print '
'; print ''; print ''; print ''."\n"; @@ -191,7 +192,7 @@ print ''; print ''; print ''; */ print '
'.$langs->trans("Parameters").'
'.$langs->transnoentitiesnoconv("multicurrency_useOriginTx").''; if ($conf->use_javascript_ajax) { - print ajax_constantonoff('MULTICURRENCY_USE_ORIGIN_TX'); + print ajax_constantonoff('MULTICURRENCY_USE_ORIGIN_TX', null, null, 0, 0, 0, 2, 0, 1); } else { $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); print $form->selectarray("MULTICURRENCY_USE_ORIGIN_TX", $arrval, $conf->global->MULTICURRENCY_USE_ORIGIN_TX); @@ -242,6 +243,7 @@ print '
'; +print '
'; print '
'; @@ -264,7 +266,7 @@ if (!empty($conf->global->MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION)) { print ''; print ''; - print ''.$langs->transnoentitiesnoconv("multicurrency_appId").''; + print ''.$langs->transnoentitiesnoconv("multicurrency_appId").''; print ''; print ' '; print ''; @@ -290,7 +292,7 @@ if (!empty($conf->global->MAIN_MULTICURRENCY_ALLOW_SYNCHRONIZATION)) { } print '
'; -print ''; +print '
'; print ''; print ''."\n"; @@ -305,7 +307,7 @@ print ''; print ''; print ''; print ''; diff --git a/htdocs/admin/system/about.php b/htdocs/admin/system/about.php index f0ecc0fc160..de6f0c146f3 100644 --- a/htdocs/admin/system/about.php +++ b/htdocs/admin/system/about.php @@ -72,8 +72,8 @@ print ''; print $langs->trans("Developpers").':'; print ''; //print "
\n"; @@ -82,56 +82,56 @@ print $langs->trans("OtherInformations").':'; print ''; print $langs->trans("Demo").':'; print ''; print $langs->trans("ModulesMarketPlaces").':'; print ''; @@ -143,7 +143,7 @@ print $langs->trans("HelpCenter").':'; print ''; @@ -158,15 +158,15 @@ if (preg_match('/^fr_/i', $langs->getDefaultLang())) { if (preg_match('/^es_/i', $langs->getDefaultLang())) { $url = 'https://wiki.dolibarr.org/index.php/Subscribirse'; } -print '
  • '.$langs->trans("SubscribeToFoundation").'
  • '; +print '
  • '.$langs->trans("SubscribeToFoundation").'
  • '; print ''; print $langs->trans("SocialNetworks").':'; print ''; @@ -182,11 +182,11 @@ if (preg_match('/^es_/i', $langs->getDefaultLang())) { $url = 'https://wiki.dolibarr.org/index.php/Soluciones_en_la_Nube'; } print '
  • '; -print ''.$title.''; +print ''.$title.''; print '
  • '; $url = 'https://partners.dolibarr.org'; $title = $langs->trans("ReferencedPreferredPartners"); print '
  • '; -print ''.$title.''; +print ''.$title.''; print '
  • '; print ''; diff --git a/htdocs/admin/system/dolibarr.php b/htdocs/admin/system/dolibarr.php index cfc12375050..d10e789f39c 100644 --- a/htdocs/admin/system/dolibarr.php +++ b/htdocs/admin/system/dolibarr.php @@ -93,7 +93,7 @@ $version = DOL_VERSION; if (preg_match('/[a-z]+/i', $version)) { $version = 'develop'; // If version contains text, it is not an official tagged version, so we use the full change log. } -print '   '.$langs->trans("SeeChangeLog").''; +print '   '.$langs->trans("SeeChangeLog").''; $newversion = ''; if (function_exists('curl_init')) { @@ -120,7 +120,7 @@ if (function_exists('curl_init')) { // Show version print $langs->trans("LastStableVersion").' : '.(($version != '0.0') ? $version : $langs->trans("Unknown")).''; if ($version != '0.0') { - print '   '.$langs->trans("SeeChangeLog").''; + print '   '.$langs->trans("SeeChangeLog").''; } } else { print $langs->trans("LastStableVersion").' : '.$langs->trans("UpdateServerOffline").''; diff --git a/htdocs/admin/ticket_public.php b/htdocs/admin/ticket_public.php index 68dbfb429b8..818141e5cde 100644 --- a/htdocs/admin/ticket_public.php +++ b/htdocs/admin/ticket_public.php @@ -180,7 +180,7 @@ $head = ticketAdminPrepareHead(); print dol_get_fiche_head($head, 'public', $langs->trans("Module56000Name"), -1, "ticket"); -print ''.$langs->trans("TicketPublicAccess").' : '.dol_buildpath('/public/ticket/index.php', 2).''; +print ''.$langs->trans("TicketPublicAccess").' : '.dol_buildpath('/public/ticket/index.php', 2).''; print dol_get_fiche_end(); diff --git a/htdocs/admin/tools/update.php b/htdocs/admin/tools/update.php index 8de6e32e8a0..ea9ca86e994 100644 --- a/htdocs/admin/tools/update.php +++ b/htdocs/admin/tools/update.php @@ -116,14 +116,14 @@ print $langs->trans("Upgrade").'
    '; print '
    '; print $langs->trans("ThisIsProcessToFollow").'
    '; print ''.$langs->trans("StepNb", 1).': '; -$fullurl = ''.$urldolibarr.''; +$fullurl = ''.$urldolibarr.''; print str_replace('{s}', $fullurl, $langs->trans("DownloadPackageFromWebSite", '{s}')).'
    '; print ''.$langs->trans("StepNb", 2).': '; print str_replace('{s}', $dolibarrroot, $langs->trans("UnpackPackageInDolibarrRoot", '{s}')).'
    '; print ''.$langs->trans("StepNb", 3).': '; print $langs->trans("RemoveLock", $dolibarrdataroot.'/install.lock').'
    '; print ''.$langs->trans("StepNb", 4).': '; -$fullurl = ''.DOL_URL_ROOT.'/install/'; +$fullurl = ''.DOL_URL_ROOT.'/install/'; print str_replace('{s}', $fullurl, $langs->trans("CallUpdatePage", '{s}')).'
    '; print ''.$langs->trans("StepNb", 5).': '; print $langs->trans("RestoreLock", $dolibarrdataroot.'/install.lock').'
    '; diff --git a/htdocs/admin/translation.php b/htdocs/admin/translation.php index e9a6eaeb390..4f8f8e04012 100644 --- a/htdocs/admin/translation.php +++ b/htdocs/admin/translation.php @@ -268,7 +268,7 @@ if ($mode == 'overwrite') { print '
    '; print img_info().' '.$langs->trans("SomeTranslationAreUncomplete"); $urlwikitranslatordoc = 'https://wiki.dolibarr.org/index.php/Translator_documentation'; - print ' ('.str_replace('{s1}', ''.$langs->trans("Here").'', $langs->trans("SeeAlso", '{s1}')).')
    '; + print ' ('.str_replace('{s1}', ''.$langs->trans("Here").'', $langs->trans("SeeAlso", '{s1}')).')
    '; print $langs->trans("TranslationOverwriteDesc", $langs->transnoentitiesnoconv("Language"), $langs->transnoentitiesnoconv("Key"), $langs->transnoentitiesnoconv("NewTranslationStringToShow"))."\n"; print ' ('.$langs->trans("TranslationOverwriteDesc2").').'."
    \n"; print '
    '; diff --git a/htdocs/admin/website.php b/htdocs/admin/website.php index c6ad8e08ed0..d1a24ff072c 100644 --- a/htdocs/admin/website.php +++ b/htdocs/admin/website.php @@ -460,7 +460,7 @@ if ($id) { if ($valuetoshow != '') { print '
    '.$form->textwithpicto($langs->trans("CurrenciesUsed"), $langs->transnoentitiesnoconv("CurrenciesUsed_help_to_add")).'
    '.$form->selectCurrency('', 'code', 1).''; print ' '; -print ''; +print ''; print '
    '; if (!empty($tabhelp[$id][$value]) && preg_match('/^http(s*):/i', $tabhelp[$id][$value])) { - print ''.$valuetoshow.' '.img_help(1, $valuetoshow).''; + print ''.$valuetoshow.' '.img_help(1, $valuetoshow).''; } elseif (!empty($tabhelp[$id][$value])) { if ($value == 'virtualhost') { print $form->textwithpicto($valuetoshow, $tabhelp[$id][$value], 1, 'help', '', 0, 2, 'tooltipvirtual'); diff --git a/htdocs/admin/workflow.php b/htdocs/admin/workflow.php index ada5a6e0b3b..a58c3378ecd 100644 --- a/htdocs/admin/workflow.php +++ b/htdocs/admin/workflow.php @@ -123,9 +123,25 @@ $workflowcodes = array( ), // Automatic classification supplier order + 'WORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION'=>array( + 'family'=>'classify_supplier_order', + 'position'=>63, + 'enabled'=>(!empty($conf->global->MAIN_FEATURES_LEVEL) && (!empty($conf->reception->enabled)) && ((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || empty($conf->supplier_order->enabled))), + 'picto'=>'supplier_order', + 'warning'=>'' + ), + + 'WORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION_CLOSED'=>array( + 'family'=>'classify_supplier_order', + 'position'=>64, + 'enabled'=>(!empty($conf->global->MAIN_FEATURES_LEVEL) && (!empty($conf->reception->enabled)) && ((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || empty($conf->supplier_order->enabled))), + 'picto'=>'supplier_order', + 'warning'=>'' + ), + 'WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER'=>array( 'family'=>'classify_supplier_order', - 'position'=>62, + 'position'=>65, 'enabled'=>((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || !empty($conf->supplier_order->enabled) || !empty($conf->supplier_invoice->enabled)), 'picto'=>'supplier_order', 'warning'=>'' @@ -134,7 +150,7 @@ $workflowcodes = array( // Automatic classification reception 'WORKFLOW_BILL_ON_RECEPTION'=>array( 'family'=>'classify_reception', - 'position'=>64, + 'position'=>80, 'enabled'=>(!empty($conf->reception->enabled) && ((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || !empty($conf->supplier_order->enabled) || !empty($conf->supplier_invoice->enabled))), 'picto'=>'reception' ), @@ -142,7 +158,7 @@ $workflowcodes = array( // Automatic classification shipping 'WORKFLOW_SHIPPING_CLASSIFY_CLOSED_INVOICE' => array( 'family' => 'classify_shipping', - 'position' => 66, + 'position' => 90, 'enabled' => ! empty($conf->expedition->enabled) && ! empty($conf->facture->enabled), 'picto' => 'shipment' ) diff --git a/htdocs/api/admin/index.php b/htdocs/api/admin/index.php index 1697318c5e8..54e24de8263 100644 --- a/htdocs/api/admin/index.php +++ b/htdocs/api/admin/index.php @@ -152,11 +152,11 @@ print '
    '; print ''.$langs->trans("ApiExporerIs").':
    '; if (dol_is_dir(DOL_DOCUMENT_ROOT.'/includes/restler/framework/Luracast/Restler/explorer')) { $url = DOL_MAIN_URL_ROOT.'/api/index.php/explorer'; - print '
    \n"; + print '
    \n"; print '

    '.$langs->trans("SwaggerDescriptionFile").':
    '; $urlswagger = DOL_MAIN_URL_ROOT.'/api/index.php/explorer/swagger.json?DOLAPIKEY=youruserapikey'; //$urlswaggerreal = DOL_MAIN_URL_ROOT.'/api/index.php/explorer/swagger.json?DOLAPIKEY='.$user->api_key; - print '
    \n"; + print '
    \n"; print '
    '; } else { $langs->load("errors"); diff --git a/htdocs/bookmarks/bookmarks.lib.php b/htdocs/bookmarks/bookmarks.lib.php index d24ba63ef55..67816321198 100644 --- a/htdocs/bookmarks/bookmarks.lib.php +++ b/htdocs/bookmarks/bookmarks.lib.php @@ -90,7 +90,7 @@ function printDropdownBookmarksList() $bookmarkList = ''; + } elseif ($reshook > 0) { + print $hookmanager->resPrint; } - print '
    '; - print '
    '; } } diff --git a/htdocs/core/db/DoliDB.class.php b/htdocs/core/db/DoliDB.class.php index 1ebea289470..daa5f657549 100644 --- a/htdocs/core/db/DoliDB.class.php +++ b/htdocs/core/db/DoliDB.class.php @@ -77,7 +77,8 @@ abstract class DoliDB implements Database */ public function ifsql($test, $resok, $resko) { - return 'IF('.$test.','.$resok.','.$resko.')'; + //return 'IF('.$test.','.$resok.','.$resko.')'; // Not sql standard + return '(CASE WHEN '.$test.' THEN '.$resok.' ELSE '.$resko.' END)'; } /** diff --git a/htdocs/core/get_info.php b/htdocs/core/get_info.php index ee21aac0de3..d5e79f21e01 100644 --- a/htdocs/core/get_info.php +++ b/htdocs/core/get_info.php @@ -158,7 +158,7 @@ if (empty($conf->global->MAIN_PRINT_DISABLELINK) && empty($conf->global->MAIN_OP } } $qs.=(($qs && $morequerystring)?'&':'').$morequerystring; - $text =''; + $text =''; //$text.= img_picto(":".$langs->trans("PrintContentArea"), 'printer_top.png', 'class="printer"'); $text.=''; $text.=''; @@ -191,7 +191,7 @@ if (empty($conf->global->MAIN_HELP_DISABLELINK) && empty($conf->global->MAIN_OPT $title=$appli.'
    '; $title.=$langs->trans($mode == 'wiki' ? 'GoToWikiHelpPage': 'GoToHelpPage'); if ($mode == 'wiki') $title.=' - '.$langs->trans("PageWiki").' "'.dol_escape_htmltag(strtr($helppage,'_',' ')).'"'; - $text.=''; diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index ddaf1d320c3..313dd5d8fbe 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -295,7 +295,7 @@ function societe_prepare_head(Societe $object) // Notifications if (!empty($conf->notification->enabled)) { $nbNotif = 0; - // Enable caching of thirdrparty count notifications + // Enable caching of thirdparty count notifications require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php'; $cachekey = 'count_notifications_thirdparty_'.$object->id; $dataretrieved = dol_getcache($cachekey); diff --git a/htdocs/core/lib/cron.lib.php b/htdocs/core/lib/cron.lib.php index 5216ff554e4..b4c728fd611 100644 --- a/htdocs/core/lib/cron.lib.php +++ b/htdocs/core/lib/cron.lib.php @@ -100,10 +100,10 @@ function dol_print_cron_urls() print '
    '; print $langs->trans("URLToLaunchCronJobs").':
    '; $url = $urlwithroot.'/public/cron/cron_run_jobs_by_url.php?'.(empty($conf->global->CRON_KEY) ? '' : 'securitykey='.$conf->global->CRON_KEY.'&').'userlogin='.$user->login; - print img_picto('', 'globe').'
    '.$url."
    \n"; + print img_picto('', 'globe').' '.$url."
    \n"; print ' '.$langs->trans("OrToLaunchASpecificJob").'
    '; $url = $urlwithroot.'/public/cron/cron_run_jobs_by_url.php?'.(empty($conf->global->CRON_KEY) ? '' : 'securitykey='.$conf->global->CRON_KEY.'&').'userlogin='.$user->login.'&id=cronjobid'; - print img_picto('', 'globe').' '.$url."
    \n"; + print img_picto('', 'globe').' '.$url."
    \n"; print '
    '; print '
    '; diff --git a/htdocs/core/lib/doleditor.lib.php b/htdocs/core/lib/doleditor.lib.php index 79f38a8990a..fecf10f48fe 100644 --- a/htdocs/core/lib/doleditor.lib.php +++ b/htdocs/core/lib/doleditor.lib.php @@ -66,10 +66,6 @@ function show_skin($fuser, $edit = 0) // Title print ''.$langs->trans("DefaultSkin").''; print ''; - $url = 'http://ckeditor.com/addons/skins/all'; - /*print ''; - print $langs->trans('DownloadMoreSkins'); - print '';*/ print ''; print ''; diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 48fcdaa5010..9ed0c8e1ae6 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -2887,7 +2887,7 @@ function dol_print_socialnetworks($value, $cid, $socid, $type, $dictsocialnetwor } else { if (!empty($dictsocialnetworks[$type]['url'])) { $link = str_replace('{socialid}', $value, $dictsocialnetworks[$type]['url']); - $htmllink .= ' '.$value.''; + $htmllink .= ' '.$value.''; } else { $htmllink .= $value; } @@ -3140,7 +3140,7 @@ function dol_print_phone($phone, $countrycode = '', $cid = 0, $socid = 0, $addli // Old method $newphone = 'global->CLICKTODIAL_FORCENEWTARGET)) { - $newphone .= ' target="_blank"'; + $newphone .= ' target="_blank" rel="noopener noreferrer"'; } $newphone .= '>'.$newphonesav.''; } @@ -8132,10 +8132,10 @@ function dol_getIdFromCode($db, $key, $tablename, $fieldkey = 'code', $fieldid = /** * Verify if condition in string is ok or not * - * @param string $strRights String with condition to check - * @return boolean True or False. Return True if strRights is '' + * @param string $strToEvaluate String with condition to check + * @return boolean True or False. Note: It returns True if $strToEvaluate is '' */ -function verifCond($strRights) +function verifCond($strToEvaluate) { global $user, $conf, $langs; global $leftmenu; @@ -8143,8 +8143,8 @@ function verifCond($strRights) //print $strRights."
    \n"; $rights = true; - if ($strRights != '') { - $str = 'if(!('.$strRights.')) { $rights = false; }'; + if ($strToEvaluate !== '') { + $str = 'if(!('.$strToEvaluate.')) { $rights = false; }'; dol_eval($str); // The dol_eval must contains all the global $xxx used into a condition } return $rights; @@ -9157,9 +9157,9 @@ function ajax_autoselect($htmlname, $addlink = '', $textonlink = 'Link') '; if ($addlink) { if ($textonlink === 'image') { - $out .= ' '.img_picto('', 'globe').''; + $out .= ' '.img_picto('', 'globe').''; } else { - $out .= ' '.$langs->trans("Link").''; + $out .= ' '.$langs->trans("Link").''; } } return $out; diff --git a/htdocs/core/lib/payments.lib.php b/htdocs/core/lib/payments.lib.php index 2bb1cf1d0cf..d8087e6e73f 100644 --- a/htdocs/core/lib/payments.lib.php +++ b/htdocs/core/lib/payments.lib.php @@ -187,7 +187,7 @@ function showOnlinePaymentUrl($type, $ref) $out = img_picto('', 'globe').' '.$langs->trans("ToOfferALinkForOnlinePayment", $servicename).'
    '; $url = getOnlinePaymentUrl(0, $type, $ref); $out .= ''; $out .= ajax_autoselect("onlinepaymenturl", 0); return $out; @@ -205,7 +205,7 @@ function getHtmlOnlinePaymentLink($type, $ref, $label = '') { $url = getOnlinePaymentUrl(0, $type, $ref); $label = $label ? $label : $url; - return''.$label.''; + return ''.$label.''; } diff --git a/htdocs/core/lib/signature.lib.php b/htdocs/core/lib/signature.lib.php index 13df1ad8d9d..6bc4a4668a3 100644 --- a/htdocs/core/lib/signature.lib.php +++ b/htdocs/core/lib/signature.lib.php @@ -41,7 +41,7 @@ function showOnlineSignatureUrl($type, $ref) } else { $out .= ''; } - $out .= ''.img_picto('', 'globe', 'class="paddingleft"').''; + $out .= ''.img_picto('', 'globe', 'class="paddingleft"').''; $out .= '
    '; $out .= ajax_autoselect("onlinesignatureurl", 0); return $out; diff --git a/htdocs/core/lib/ticket.lib.php b/htdocs/core/lib/ticket.lib.php index e2067240c45..16b39354de9 100644 --- a/htdocs/core/lib/ticket.lib.php +++ b/htdocs/core/lib/ticket.lib.php @@ -164,7 +164,7 @@ function showDirectPublicLink($object) if ($url) { $out .= ''; $out .= ajax_autoselect("directpubliclink", 0); } else { @@ -850,7 +850,7 @@ function show_ticket_messaging($conf, $langs, $db, $filterobj, $objcon = '', $no $class .= ' documentpreview'; } - $footer .= ''; + $footer .= ''; $footer .= img_mime($filePath).' '.$doc->filename; $footer .= ''; diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php index 84b0ada3487..accbd84ba8c 100644 --- a/htdocs/core/lib/usergroups.lib.php +++ b/htdocs/core/lib/usergroups.lib.php @@ -364,7 +364,7 @@ function showSkins($fuser, $edit = 0, $foruserprofile = false) print ''; print ''; $url = 'https://www.dolistore.com/9-skins'; - print ''; + print ''; print $langs->trans('DownloadMoreSkins'); print ''; print ''; diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 8dd4e625d9d..ca907ae6f1c 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -836,7 +836,7 @@ function getSocialNetworkSharingLinks() // Reddit $out .= ''."\n"; diff --git a/htdocs/core/lib/website2.lib.php b/htdocs/core/lib/website2.lib.php index c3d2ee92c37..7b075ad6fb7 100644 --- a/htdocs/core/lib/website2.lib.php +++ b/htdocs/core/lib/website2.lib.php @@ -523,7 +523,7 @@ function showWebsiteTemplates(Website $website) print ''; print ''; $url = 'https://www.dolistore.com/43-web-site-templates'; - print ''; + print ''; print $langs->trans('DownloadMoreSkins'); print ''; print ''; diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 32dc909f2e2..07ecf19de63 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -2104,7 +2104,11 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM print ''."\n"; $lastlevel0 = 'enabled'; } elseif ($showmenu) { // Not enabled but visible (so greyed) - print ''."\n"; + print ''."\n"; $lastlevel0 = 'greyed'; } else { $lastlevel0 = 'hidden'; @@ -2145,7 +2149,8 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM // Not enabled but visible (so greyed), except if parent was not enabled. print ''."\n"; + print ''.$menu_array[$i]['titre'].'
    '; + print ''."\n"; } } diff --git a/htdocs/core/modules/modSociete.class.php b/htdocs/core/modules/modSociete.class.php index 2826091155c..e70011a2195 100644 --- a/htdocs/core/modules/modSociete.class.php +++ b/htdocs/core/modules/modSociete.class.php @@ -197,6 +197,13 @@ class modSociete extends DolibarrModules $this->rights[$r][3] = 0; // La permission est-elle une permission par defaut $this->rights[$r][4] = 'export'; + $r++; + $this->rights[$r][0] = 130; + $this->rights[$r][1] = 'Modify thirdparty information payment'; + $this->rights[$r][3] = 0; + $this->rights[$r][4] = 'thirdparty_paymentinformation_advance'; // Visible if option MAIN_USE_ADVANCED_PERMS is on + $this->rights[$r][5] = 'write'; + // 262 : Restrict access to sales representative $r++; $this->rights[$r][0] = 262; diff --git a/htdocs/core/modules/modWorkflow.class.php b/htdocs/core/modules/modWorkflow.class.php index eaaf15d40a1..4122f347664 100644 --- a/htdocs/core/modules/modWorkflow.class.php +++ b/htdocs/core/modules/modWorkflow.class.php @@ -90,8 +90,10 @@ class modWorkflow extends DolibarrModules 3=>array('WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED', 'chaine', '1', 'WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED', 0, 'current', 0), 4=>array('WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER', 'chaine', '1', 'WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER', 0, 'current', 0), 5=>array('WORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL', 'chaine', '1', 'WORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL', 0, 'current', 0), - 6=>array('WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER', 'chaine', '1', 'WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER', 0, 'current', 0), - 7=>array('WORKFLOW_BILL_ON_RECEPTION', 'chaine', '1', 'WORKFLOW_BILL_ON_RECEPTION', 0, 'current', 0) + 6=>array('WORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION', 'chaine', '1', 'WORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION', 0, 'current', 0), + 7=>array('WORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION_CLOSED', 'chaine', '1', 'WORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION_CLOSED', 0, 'current', 0), + 8=>array('WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER', 'chaine', '1', 'WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER', 0, 'current', 0), + 9=>array('WORKFLOW_BILL_ON_RECEPTION', 'chaine', '1', 'WORKFLOW_BILL_ON_RECEPTION', 0, 'current', 0) ); // Boxes diff --git a/htdocs/core/modules/usergroup/doc/doc_generic_usergroup_odt.modules.php b/htdocs/core/modules/usergroup/doc/doc_generic_usergroup_odt.modules.php index 134c5e00362..a934c7a50d9 100644 --- a/htdocs/core/modules/usergroup/doc/doc_generic_usergroup_odt.modules.php +++ b/htdocs/core/modules/usergroup/doc/doc_generic_usergroup_odt.modules.php @@ -258,7 +258,7 @@ class doc_generic_usergroup_odt extends ModelePDFUserGroup } } - $dir = $conf->usergroup->dir_output; + $dir = $conf->user->dir_output.'/usergroups'; $objectref = dol_sanitizeFileName($object->ref); if (!preg_match('/specimen/i', $objectref)) { $dir .= "/".$objectref; diff --git a/htdocs/core/tpl/contacts.tpl.php b/htdocs/core/tpl/contacts.tpl.php index 3def83f4e0d..2dd9751a4c6 100644 --- a/htdocs/core/tpl/contacts.tpl.php +++ b/htdocs/core/tpl/contacts.tpl.php @@ -111,17 +111,17 @@ if ($permission) {
    global->MAIN_INFO_SOCIETE_NOM; ?>
    -
    select_dolusers($user->id, 'userid', 0, (!empty($userAlreadySelected) ? $userAlreadySelected : null), 0, null, null, 0, 56, '', 0, '', 'minwidth200imp'); ?>
    +
    select_dolusers($user->id, 'userid', 0, (!empty($userAlreadySelected) ? $userAlreadySelected : null), 0, null, null, 0, 56, 0, '', 0, '', 'minwidth100imp widthcentpercentminusxx maxwidth400'); ?>
    element == 'shipping' || $object->element == 'reception') && is_object($objectsrc)) { $tmpobject = $objectsrc; } - $formcompany->selectTypeContact($tmpobject, '', 'type', 'internal'); + $formcompany->selectTypeContact($tmpobject, '', 'type', 'internal', 'position', 0, 'minwidth125imp widthcentpercentminusx maxwidth400'); ?>
     
    -
    ">
    +
    ">
    element == 'shipping' || $object->element == 'reception') && is_object($objectsrc)) { $tmpobject = $objectsrc; } - $formcompany->selectTypeContact($tmpobject, $preselectedtypeofcontact, 'typecontact', 'external', 'position', 0, 'minwidth100imp'); + $formcompany->selectTypeContact($tmpobject, $preselectedtypeofcontact, 'typecontact', 'external', 'position', 0, 'minwidth125imp widthcentpercentminusx maxwidth400'); ?>
     
    - "trans("Add"); ?>"> + } ?>>
    diff --git a/htdocs/core/tpl/login.tpl.php b/htdocs/core/tpl/login.tpl.php index 9f2f2f68712..338d2bd1a19 100644 --- a/htdocs/core/tpl/login.tpl.php +++ b/htdocs/core/tpl/login.tpl.php @@ -147,7 +147,7 @@ $(document).ready(function () { '; @@ -1257,7 +1276,7 @@ if ($id > 0 || !empty($ref)) { // Add button to check/uncheck disaptching print ''; - if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->fournisseur->commande->receptionner)) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->fournisseur->commande_advance->check))) { + if (!$permissiontocontrol) { if (empty($objp->status)) { print ''.$langs->trans("Approve").''; print ''.$langs->trans("Deny").''; diff --git a/htdocs/imports/import.php b/htdocs/imports/import.php index cd416585101..d516a67278c 100644 --- a/htdocs/imports/import.php +++ b/htdocs/imports/import.php @@ -519,7 +519,7 @@ if ($step == 2 && $datatoimport) { $text = $objmodelimport->getDriverDescForKey($key); print ''.$form->textwithpicto($objmodelimport->getDriverLabelForKey($key), $text).''; print ''; - print img_picto('', 'download', 'class="paddingright opacitymedium"').''.$langs->trans("DownloadEmptyExample"); + print img_picto('', 'download', 'class="paddingright opacitymedium"').''.$langs->trans("DownloadEmptyExample"); print ''; print ' ('.$langs->trans("StarAreMandatory").')'; print ''; @@ -608,7 +608,7 @@ if ($step == 3 && $datatoimport) { $text = $objmodelimport->getDriverDescForKey($format); print $form->textwithpicto($objmodelimport->getDriverLabelForKey($format), $text); print ''; - print img_picto('', 'download', 'class="paddingright opacitymedium"').''.$langs->trans("DownloadEmptyExample"); + print img_picto('', 'download', 'class="paddingright opacitymedium"').''.$langs->trans("DownloadEmptyExample"); print ''; print ' ('.$langs->trans("StarAreMandatory").')'; print ''; @@ -735,7 +735,7 @@ if ($step == 3 && $datatoimport) { print ''; print ''; print img_mime($file, '', 'pictofixedwidth'); - print ''; + print ''; print $file; print ''; print ''; @@ -937,7 +937,7 @@ if ($step == 4 && $datatoimport) { print ''; $modulepart = 'import'; $relativepath = GETPOST('filetoimport'); - print ''; + print ''; print img_mime($file, '', 'pictofixedwidth'); print $filetoimport; print ''; @@ -1435,7 +1435,7 @@ if ($step == 5 && $datatoimport) { print ''; $modulepart = 'import'; $relativepath = GETPOST('filetoimport'); - print ''; + print ''; print img_mime($file, '', 'pictofixedwidth'); print $filetoimport; print ''; @@ -1881,7 +1881,7 @@ if ($step == 6 && $datatoimport) { print ''; $modulepart = 'import'; $relativepath = GETPOST('filetoimport'); - print ''; + print ''; print img_mime($file, '', 'pictofixedwidth'); print $filetoimport; print ''; diff --git a/htdocs/install/check.php b/htdocs/install/check.php index c138dc42fdb..14448841217 100644 --- a/htdocs/install/check.php +++ b/htdocs/install/check.php @@ -93,7 +93,7 @@ if (versioncompare(versionphparray(), $arrayphpminversionerror) < 0) { // print 'Ok '.$langs->trans("PHPVersion")." ".versiontostring(versionphparray()); } if (empty($force_install_nophpinfo)) { - print ' ('.$langs->trans("MoreInformation").')'; + print ' ('.$langs->trans("MoreInformation").')'; } print "
    \n"; diff --git a/htdocs/install/mysql/data/llx_c_paiement.sql b/htdocs/install/mysql/data/llx_c_paiement.sql index ffe129ec501..e29b47639f2 100644 --- a/htdocs/install/mysql/data/llx_c_paiement.sql +++ b/htdocs/install/mysql/data/llx_c_paiement.sql @@ -30,13 +30,18 @@ -- Types paiement -- -insert into llx_c_paiement (id,code,libelle,type,active) values ( 1, 'TIP', 'TIP', 2,0); -insert into llx_c_paiement (id,code,libelle,type,active) values ( 2, 'VIR', 'Transfer', 2,1); -insert into llx_c_paiement (id,code,libelle,type,active) values ( 3, 'PRE', 'Debit order', 2,1); -insert into llx_c_paiement (id,code,libelle,type,active) values ( 4, 'LIQ', 'Cash', 2,1); -insert into llx_c_paiement (id,code,libelle,type,active) values ( 6, 'CB', 'Credit card', 2,1); -insert into llx_c_paiement (id,code,libelle,type,active) values ( 7, 'CHQ', 'Cheque', 2,1); -insert into llx_c_paiement (id,code,libelle,type,active) values (50, 'VAD', 'Online payment', 2,0); -insert into llx_c_paiement (id,code,libelle,type,active) values (51, 'TRA', 'Traite', 2,0); -insert into llx_c_paiement (id,code,libelle,type,active) values (52, 'LCR', 'LCR', 2,0); -insert into llx_c_paiement (id,code,libelle,type,active) values (53, 'FAC', 'Factor', 2,0); +insert into llx_c_paiement (id,code,libelle,type,active) values ( 1, 'TIP', 'TIP', 2, 0); +insert into llx_c_paiement (id,code,libelle,type,active) values ( 2, 'VIR', 'Transfer', 2, 1); +insert into llx_c_paiement (id,code,libelle,type,active) values ( 3, 'PRE', 'Debit order', 2, 1); +insert into llx_c_paiement (id,code,libelle,type,active) values ( 4, 'LIQ', 'Cash', 2, 1); +insert into llx_c_paiement (id,code,libelle,type,active) values ( 6, 'CB', 'Credit card', 2, 1); +insert into llx_c_paiement (id,code,libelle,type,active) values ( 7, 'CHQ', 'Cheque', 2, 1); +insert into llx_c_paiement (id,code,libelle,type,active) values (50, 'VAD', 'Online payment', 2, 0); +insert into llx_c_paiement (id,code,libelle,type,active) values (51, 'TRA', 'Traite', 2, 0); +insert into llx_c_paiement (id,code,libelle,type,active) values (52, 'LCR', 'LCR', 2, 0); +insert into llx_c_paiement (id,code,libelle,type,active) values (53, 'FAC', 'Factor', 2, 0); +INSERT INTO llx_c_paiement (id,code,libelle,type,active) values (100, 'KLA', 'Klarna', 1, 0); +INSERT INTO llx_c_paiement (id,code,libelle,type,active) values (101, 'SOF', 'Sofort', 1, 0); +INSERT INTO llx_c_paiement (id,code,libelle,type,active) values (102, 'BAN', 'Bancontact', 1, 0); +INSERT INTO llx_c_paiement (id,code,libelle,type,active) values (103, 'IDE', 'iDeal', 1, 0); +INSERT INTO llx_c_paiement (id,code,libelle,type,active) values (104, 'GIR', 'Giropay', 1, 0); diff --git a/htdocs/install/mysql/migration/14.0.0-15.0.0.sql b/htdocs/install/mysql/migration/14.0.0-15.0.0.sql index 0a8be50ee92..01204e0bd55 100644 --- a/htdocs/install/mysql/migration/14.0.0-15.0.0.sql +++ b/htdocs/install/mysql/migration/14.0.0-15.0.0.sql @@ -448,3 +448,48 @@ ALTER TABLE llx_socpeople DROP COLUMN googleplus; ALTER TABLE llx_socpeople DROP COLUMN youtube; ALTER TABLE llx_socpeople DROP COLUMN whatsapp; +INSERT INTO llx_c_paiement (id,code,libelle,type,active) values (100, 'KLA', 'Klarna', 1, 0); +INSERT INTO llx_c_paiement (id,code,libelle,type,active) values (101, 'SOF', 'Sofort', 1, 0); +INSERT INTO llx_c_paiement (id,code,libelle,type,active) values (102, 'BAN', 'Bancontact', 1, 0); +INSERT INTO llx_c_paiement (id,code,libelle,type,active) values (103, 'IDE', 'iDeal', 1, 0); +INSERT INTO llx_c_paiement (id,code,libelle,type,active) values (104, 'GIR', 'Giropay', 1, 0); + +ALTER TABLE llx_paiement_facture ADD COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_paiement_facture ADD COLUMN multicurrency_tx double(24,8) DEFAULT 1; +ALTER TABLE llx_paiement_facture ADD COLUMN multicurrency_amount double(24,8) DEFAULT 0; + +ALTER TABLE llx_paiementfourn_facturefourn ADD COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_paiementfourn_facturefourn ADD COLUMN multicurrency_tx double(24,8) DEFAULT 1; +ALTER TABLE llx_paiementfourn_facturefourn ADD COLUMN multicurrency_amount double(24,8) DEFAULT 0; + + +ALTER TABLE llx_commande_fournisseur MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_commande_fournisseurdet MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_commande MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_commandedet MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_contratdet MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_expensereport_det MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_expensereport MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_facture_fourn_det MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_facture_fourn MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_facture_rec MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_facture MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_facturedet_rec MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_facturedet MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_paiement_facture MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_paiementfourn_facturefourn MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_product_fournisseur_price_log MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_product_fournisseur_price MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_product_price_by_qty MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_product_price MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_propal MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_propaldet MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_societe MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_supplier_proposal MODIFY COLUMN multicurrency_code varchar(3); +ALTER TABLE llx_supplier_proposaldet MODIFY COLUMN multicurrency_code varchar(3); + +ALTER TABLE llx_propal ADD COLUMN online_sign_ip varchar(48); +ALTER TABLE llx_propal ADD COLUMN online_sign_name varchar(64); + +ALTER TABLE llx_entrepot ADD COLUMN warehouse_usage integer DEFAULT 1; + diff --git a/htdocs/install/mysql/tables/llx_commande.sql b/htdocs/install/mysql/tables/llx_commande.sql index e3a075933c2..5b8a78c7bf8 100644 --- a/htdocs/install/mysql/tables/llx_commande.sql +++ b/htdocs/install/mysql/tables/llx_commande.sql @@ -77,7 +77,7 @@ create table llx_commande extraparams varchar(255), -- for stock other parameters with json format fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_tx double(24,8) DEFAULT 1, multicurrency_total_ht double(24,8) DEFAULT 0, multicurrency_total_tva double(24,8) DEFAULT 0, diff --git a/htdocs/install/mysql/tables/llx_commande_fournisseur.sql b/htdocs/install/mysql/tables/llx_commande_fournisseur.sql index 56486b551c8..e7d1d7b6c1d 100644 --- a/htdocs/install/mysql/tables/llx_commande_fournisseur.sql +++ b/htdocs/install/mysql/tables/llx_commande_fournisseur.sql @@ -70,7 +70,7 @@ create table llx_commande_fournisseur extraparams varchar(255), -- for stock other parameters with json format fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_tx double(24,8) DEFAULT 1, multicurrency_total_ht double(24,8) DEFAULT 0, multicurrency_total_tva double(24,8) DEFAULT 0, diff --git a/htdocs/install/mysql/tables/llx_commande_fournisseurdet.sql b/htdocs/install/mysql/tables/llx_commande_fournisseurdet.sql index b780d24f1e2..f6092bc4c74 100644 --- a/htdocs/install/mysql/tables/llx_commande_fournisseurdet.sql +++ b/htdocs/install/mysql/tables/llx_commande_fournisseurdet.sql @@ -53,7 +53,7 @@ create table llx_commande_fournisseurdet fk_unit integer DEFAULT NULL, fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_subprice double(24,8) DEFAULT 0, multicurrency_total_ht double(24,8) DEFAULT 0, multicurrency_total_tva double(24,8) DEFAULT 0, diff --git a/htdocs/install/mysql/tables/llx_commandedet.sql b/htdocs/install/mysql/tables/llx_commandedet.sql index caff1ce7028..d269e2ddfe2 100644 --- a/htdocs/install/mysql/tables/llx_commandedet.sql +++ b/htdocs/install/mysql/tables/llx_commandedet.sql @@ -62,7 +62,7 @@ create table llx_commandedet fk_commandefourndet integer DEFAULT NULL, -- link to detail line of commande fourn (resplenish) fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_subprice double(24,8) DEFAULT 0, multicurrency_total_ht double(24,8) DEFAULT 0, multicurrency_total_tva double(24,8) DEFAULT 0, diff --git a/htdocs/install/mysql/tables/llx_contratdet.sql b/htdocs/install/mysql/tables/llx_contratdet.sql index e9be3c4ad0c..075de80270d 100644 --- a/htdocs/install/mysql/tables/llx_contratdet.sql +++ b/htdocs/install/mysql/tables/llx_contratdet.sql @@ -66,7 +66,7 @@ create table llx_contratdet fk_unit integer DEFAULT NULL, fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_subprice double(24,8) DEFAULT 0, multicurrency_total_ht double(24,8) DEFAULT 0, multicurrency_total_tva double(24,8) DEFAULT 0, diff --git a/htdocs/install/mysql/tables/llx_entrepot.sql b/htdocs/install/mysql/tables/llx_entrepot.sql index be49978f6b7..b2e814c15c6 100644 --- a/htdocs/install/mysql/tables/llx_entrepot.sql +++ b/htdocs/install/mysql/tables/llx_entrepot.sql @@ -35,9 +35,10 @@ create table llx_entrepot fk_pays integer DEFAULT 0, phone varchar(20), -- phone number fax varchar(20), -- fax number + warehouse_usage integer DEFAULT 1, -- 1=internal, 2=external (virtual warehouse or stock out of company) statut tinyint DEFAULT 1, -- 1 open, 0 close fk_user_author integer, model_pdf varchar(255), - import_key varchar(14), + import_key varchar(14), fk_parent integer DEFAULT 0 )ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_expensereport.sql b/htdocs/install/mysql/tables/llx_expensereport.sql index 36bd5efb50c..e5c44ec0f36 100644 --- a/htdocs/install/mysql/tables/llx_expensereport.sql +++ b/htdocs/install/mysql/tables/llx_expensereport.sql @@ -56,7 +56,7 @@ CREATE TABLE llx_expensereport ( last_main_doc varchar(255), -- relative filepath+filename of last main generated document fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_tx double(24,8) DEFAULT 1, multicurrency_total_ht double(24,8) DEFAULT 0, multicurrency_total_tva double(24,8) DEFAULT 0, diff --git a/htdocs/install/mysql/tables/llx_expensereport_det.sql b/htdocs/install/mysql/tables/llx_expensereport_det.sql index e6304f64c7f..7855ad16643 100644 --- a/htdocs/install/mysql/tables/llx_expensereport_det.sql +++ b/htdocs/install/mysql/tables/llx_expensereport_det.sql @@ -45,7 +45,7 @@ CREATE TABLE llx_expensereport_det info_bits integer DEFAULT 0, -- TVA NPR ou non special_code integer DEFAULT 0, -- code for special lines fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_subprice double(24,8) DEFAULT 0, multicurrency_total_ht double(24,8) DEFAULT 0, multicurrency_total_tva double(24,8) DEFAULT 0, diff --git a/htdocs/install/mysql/tables/llx_facture.sql b/htdocs/install/mysql/tables/llx_facture.sql index 562d29efe97..081213868cc 100644 --- a/htdocs/install/mysql/tables/llx_facture.sql +++ b/htdocs/install/mysql/tables/llx_facture.sql @@ -100,7 +100,7 @@ create table llx_facture extraparams varchar(255), -- for other parameters with json format fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_tx double(24,8) DEFAULT 1, multicurrency_total_ht double(24,8) DEFAULT 0, multicurrency_total_tva double(24,8) DEFAULT 0, diff --git a/htdocs/install/mysql/tables/llx_facture_fourn.sql b/htdocs/install/mysql/tables/llx_facture_fourn.sql index 1b7401898ab..683f15623a6 100644 --- a/htdocs/install/mysql/tables/llx_facture_fourn.sql +++ b/htdocs/install/mysql/tables/llx_facture_fourn.sql @@ -83,7 +83,7 @@ create table llx_facture_fourn extraparams varchar(255), -- for stock other parameters with json format fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_tx double(24,8) DEFAULT 1, multicurrency_total_ht double(24,8) DEFAULT 0, multicurrency_total_tva double(24,8) DEFAULT 0, diff --git a/htdocs/install/mysql/tables/llx_facture_fourn_det.sql b/htdocs/install/mysql/tables/llx_facture_fourn_det.sql index 4012fb7087d..30f57fa184b 100644 --- a/htdocs/install/mysql/tables/llx_facture_fourn_det.sql +++ b/htdocs/install/mysql/tables/llx_facture_fourn_det.sql @@ -54,7 +54,7 @@ create table llx_facture_fourn_det fk_unit integer DEFAULT NULL, fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_subprice double(24,8) DEFAULT 0, multicurrency_total_ht double(24,8) DEFAULT 0, multicurrency_total_tva double(24,8) DEFAULT 0, diff --git a/htdocs/install/mysql/tables/llx_facture_rec.sql b/htdocs/install/mysql/tables/llx_facture_rec.sql index c3cb6aeed46..bb65ea4b6d8 100644 --- a/htdocs/install/mysql/tables/llx_facture_rec.sql +++ b/htdocs/install/mysql/tables/llx_facture_rec.sql @@ -57,7 +57,7 @@ create table llx_facture_rec modelpdf varchar(255), fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_tx double(24,8) DEFAULT 1, multicurrency_total_ht double(24,8) DEFAULT 0, multicurrency_total_tva double(24,8) DEFAULT 0, diff --git a/htdocs/install/mysql/tables/llx_facturedet.sql b/htdocs/install/mysql/tables/llx_facturedet.sql index 5e48b16be09..9fabf237c62 100644 --- a/htdocs/install/mysql/tables/llx_facturedet.sql +++ b/htdocs/install/mysql/tables/llx_facturedet.sql @@ -70,7 +70,7 @@ create table llx_facturedet fk_user_modif integer, -- user making last change fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_subprice double(24,8) DEFAULT 0, multicurrency_total_ht double(24,8) DEFAULT 0, multicurrency_total_tva double(24,8) DEFAULT 0, diff --git a/htdocs/install/mysql/tables/llx_facturedet_rec.sql b/htdocs/install/mysql/tables/llx_facturedet_rec.sql index f515276c442..c84c517d390 100644 --- a/htdocs/install/mysql/tables/llx_facturedet_rec.sql +++ b/htdocs/install/mysql/tables/llx_facturedet_rec.sql @@ -62,7 +62,7 @@ create table llx_facturedet_rec fk_user_modif integer, -- user making last change fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_subprice double(24,8) DEFAULT 0, multicurrency_total_ht double(24,8) DEFAULT 0, multicurrency_total_tva double(24,8) DEFAULT 0, diff --git a/htdocs/install/mysql/tables/llx_paiement_facture.sql b/htdocs/install/mysql/tables/llx_paiement_facture.sql index f15f651f7ae..1728b698f34 100644 --- a/htdocs/install/mysql/tables/llx_paiement_facture.sql +++ b/htdocs/install/mysql/tables/llx_paiement_facture.sql @@ -23,7 +23,7 @@ create table llx_paiement_facture fk_facture integer, amount double(24,8) DEFAULT 0, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_tx double(24,8) DEFAULT 1, multicurrency_amount double(24,8) DEFAULT 0 )ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_paiementfourn_facturefourn.sql b/htdocs/install/mysql/tables/llx_paiementfourn_facturefourn.sql index cb1b8441444..ab2e2bfa0f2 100644 --- a/htdocs/install/mysql/tables/llx_paiementfourn_facturefourn.sql +++ b/htdocs/install/mysql/tables/llx_paiementfourn_facturefourn.sql @@ -25,7 +25,7 @@ create table llx_paiementfourn_facturefourn fk_facturefourn INTEGER DEFAULT NULL, amount double(24,8) DEFAULT 0, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_tx double(24,8) DEFAULT 1, multicurrency_amount double(24,8) DEFAULT 0 )ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_product_fournisseur_price.sql b/htdocs/install/mysql/tables/llx_product_fournisseur_price.sql index 51b691e8ae2..725d2bb30e2 100644 --- a/htdocs/install/mysql/tables/llx_product_fournisseur_price.sql +++ b/htdocs/install/mysql/tables/llx_product_fournisseur_price.sql @@ -53,7 +53,7 @@ create table llx_product_fournisseur_price packaging varchar(64), fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_tx double(24,8) DEFAULT 1, multicurrency_unitprice double(24,8) DEFAULT NULL, -- unit price without tax multicurrency_price double(24,8) DEFAULT NULL diff --git a/htdocs/install/mysql/tables/llx_product_fournisseur_price_log.sql b/htdocs/install/mysql/tables/llx_product_fournisseur_price_log.sql index cb59cc78bef..fdfc4176c0a 100644 --- a/htdocs/install/mysql/tables/llx_product_fournisseur_price_log.sql +++ b/htdocs/install/mysql/tables/llx_product_fournisseur_price_log.sql @@ -27,7 +27,7 @@ create table llx_product_fournisseur_price_log fk_user integer, fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_tx double(24,8) DEFAULT 1, multicurrency_unitprice double(24,8) DEFAULT NULL, -- unit price without tax multicurrency_price double(24,8) DEFAULT NULL diff --git a/htdocs/install/mysql/tables/llx_product_price.sql b/htdocs/install/mysql/tables/llx_product_price.sql index 9ebbeed9f96..77a00939428 100644 --- a/htdocs/install/mysql/tables/llx_product_price.sql +++ b/htdocs/install/mysql/tables/llx_product_price.sql @@ -48,7 +48,7 @@ create table llx_product_price import_key varchar(14), fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_tx double(24,8) DEFAULT 1, multicurrency_price double(24,8) DEFAULT NULL, multicurrency_price_ttc double(24,8) DEFAULT NULL diff --git a/htdocs/install/mysql/tables/llx_product_price_by_qty.sql b/htdocs/install/mysql/tables/llx_product_price_by_qty.sql index dc3a21bfedb..86cf28244ad 100644 --- a/htdocs/install/mysql/tables/llx_product_price_by_qty.sql +++ b/htdocs/install/mysql/tables/llx_product_price_by_qty.sql @@ -35,7 +35,7 @@ create table llx_product_price_by_qty fk_user_modif integer, fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_tx double(24,8) DEFAULT 1, multicurrency_price double(24,8) DEFAULT NULL, multicurrency_price_ttc double(24,8) DEFAULT NULL, diff --git a/htdocs/install/mysql/tables/llx_propal.sql b/htdocs/install/mysql/tables/llx_propal.sql index 7c94086b3b9..3499a51e8b8 100644 --- a/htdocs/install/mysql/tables/llx_propal.sql +++ b/htdocs/install/mysql/tables/llx_propal.sql @@ -60,6 +60,9 @@ create table llx_propal fk_cond_reglement integer, -- condition de reglement (30 jours, fin de mois ...) fk_mode_reglement integer, -- mode de reglement (Virement, Prelevement) + online_sign_ip varchar(48), + online_sign_name varchar(64), + note_private text, note_public text, @@ -78,7 +81,7 @@ create table llx_propal fk_delivery_address integer, -- delivery address (deprecated) fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_tx double(24,8) DEFAULT 1, multicurrency_total_ht double(24,8) DEFAULT 0, multicurrency_total_tva double(24,8) DEFAULT 0, diff --git a/htdocs/install/mysql/tables/llx_propaldet.sql b/htdocs/install/mysql/tables/llx_propaldet.sql index 4dc9d570838..103118d6b77 100644 --- a/htdocs/install/mysql/tables/llx_propaldet.sql +++ b/htdocs/install/mysql/tables/llx_propaldet.sql @@ -57,7 +57,7 @@ create table llx_propaldet fk_unit integer DEFAULT NULL, -- lien vers table des unités fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_subprice double(24,8) DEFAULT 0, multicurrency_total_ht double(24,8) DEFAULT 0, multicurrency_total_tva double(24,8) DEFAULT 0, diff --git a/htdocs/install/mysql/tables/llx_societe.sql b/htdocs/install/mysql/tables/llx_societe.sql index c30c934b792..c8b78d42fae 100644 --- a/htdocs/install/mysql/tables/llx_societe.sql +++ b/htdocs/install/mysql/tables/llx_societe.sql @@ -125,7 +125,7 @@ create table llx_societe fk_user_modif integer, -- utilisateur qui a modifie l'info fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), import_key varchar(14) -- import key )ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_supplier_proposal.sql b/htdocs/install/mysql/tables/llx_supplier_proposal.sql index cf64d76d7d1..0008f08642f 100644 --- a/htdocs/install/mysql/tables/llx_supplier_proposal.sql +++ b/htdocs/install/mysql/tables/llx_supplier_proposal.sql @@ -56,7 +56,7 @@ CREATE TABLE llx_supplier_proposal ( extraparams varchar(255) DEFAULT NULL, fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_tx double(24,8) DEFAULT 1, multicurrency_total_ht double(24,8) DEFAULT 0, multicurrency_total_tva double(24,8) DEFAULT 0, diff --git a/htdocs/install/mysql/tables/llx_supplier_proposaldet.sql b/htdocs/install/mysql/tables/llx_supplier_proposaldet.sql index 4e3d8bd13f9..bbf3decd7fa 100644 --- a/htdocs/install/mysql/tables/llx_supplier_proposaldet.sql +++ b/htdocs/install/mysql/tables/llx_supplier_proposaldet.sql @@ -49,7 +49,7 @@ CREATE TABLE llx_supplier_proposaldet ( rang integer DEFAULT 0, ref_fourn varchar(30) DEFAULT NULL, fk_multicurrency integer, - multicurrency_code varchar(255), + multicurrency_code varchar(3), multicurrency_subprice double(24,8) DEFAULT 0, multicurrency_total_ht double(24,8) DEFAULT 0, multicurrency_total_tva double(24,8) DEFAULT 0, diff --git a/htdocs/langs/de_AT/modulebuilder.lang b/htdocs/langs/de_AT/modulebuilder.lang new file mode 100644 index 00000000000..5db0d6ffc2c --- /dev/null +++ b/htdocs/langs/de_AT/modulebuilder.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - modulebuilder +TriggerDefDesc=Define in the trigger file the code that you want to execute when a business event external to your module is executed (events recorded by other modules). diff --git a/htdocs/langs/de_CH/modulebuilder.lang b/htdocs/langs/de_CH/modulebuilder.lang new file mode 100644 index 00000000000..5db0d6ffc2c --- /dev/null +++ b/htdocs/langs/de_CH/modulebuilder.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - modulebuilder +TriggerDefDesc=Define in the trigger file the code that you want to execute when a business event external to your module is executed (events recorded by other modules). diff --git a/htdocs/langs/el_CY/propal.lang b/htdocs/langs/el_CY/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/el_CY/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/en_AE/accountancy.lang b/htdocs/langs/en_AE/accountancy.lang new file mode 100644 index 00000000000..fd4bce2d49b --- /dev/null +++ b/htdocs/langs/en_AE/accountancy.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - accountancy +NotifiedExportDate=Flag exported lines as exported (modification of the lines will not be possible) +NotifiedValidationDate=Validate the exported entries (modification or deletion of the lines will not be possible) diff --git a/htdocs/langs/en_AE/cashdesk.lang b/htdocs/langs/en_AE/cashdesk.lang new file mode 100644 index 00000000000..19dc45d5847 --- /dev/null +++ b/htdocs/langs/en_AE/cashdesk.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - cashdesk +NotAvailableWithBrowserPrinter=Not available when printer for receipt is set to browser diff --git a/htdocs/langs/en_AE/compta.lang b/htdocs/langs/en_AE/compta.lang new file mode 100644 index 00000000000..21e186d2a79 --- /dev/null +++ b/htdocs/langs/en_AE/compta.lang @@ -0,0 +1,8 @@ +# Dolibarr language file - Source file is en_US - compta +VATReportByThirdParties=Sales tax report by third party +InvoiceLate30Days =Invoices late (> 30 days) +InvoiceLate15Days =Invoices late (15 to 30 days) +InvoiceLateMinus15Days =Invoices late (< 15 days) +InvoiceNotLate =To be collected (< 15 days) +InvoiceNotLate15Days =To be collected (15 to 30 days) +InvoiceNotLate30Days =To be collected (> 30 days) diff --git a/htdocs/langs/en_AE/errors.lang b/htdocs/langs/en_AE/errors.lang new file mode 100644 index 00000000000..b701bac654c --- /dev/null +++ b/htdocs/langs/en_AE/errors.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - errors +ErrorRecordHasAtLeastOneChildOfType=Object %s has at least one child of type %s diff --git a/htdocs/langs/en_AE/eventorganization.lang b/htdocs/langs/en_AE/eventorganization.lang new file mode 100644 index 00000000000..dac8822b8d7 --- /dev/null +++ b/htdocs/langs/en_AE/eventorganization.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - eventorganization +EventOrganizationDescriptionLong=Manage the organization of an event (show, conferences, attendees or speakers, with public pages for suggestion, vote or registration) diff --git a/htdocs/langs/en_AE/members.lang b/htdocs/langs/en_AE/members.lang new file mode 100644 index 00000000000..a4efe013601 --- /dev/null +++ b/htdocs/langs/en_AE/members.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - members +MembersTickets=Membership address sheet +NewSubscription=New contribution diff --git a/htdocs/langs/en_AE/modulebuilder.lang b/htdocs/langs/en_AE/modulebuilder.lang new file mode 100644 index 00000000000..5db0d6ffc2c --- /dev/null +++ b/htdocs/langs/en_AE/modulebuilder.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - modulebuilder +TriggerDefDesc=Define in the trigger file the code that you want to execute when a business event external to your module is executed (events recorded by other modules). diff --git a/htdocs/langs/en_AE/mrp.lang b/htdocs/langs/en_AE/mrp.lang new file mode 100644 index 00000000000..e0e12fc5350 --- /dev/null +++ b/htdocs/langs/en_AE/mrp.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - mrp +ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order? diff --git a/htdocs/langs/en_AE/orders.lang b/htdocs/langs/en_AE/orders.lang new file mode 100644 index 00000000000..bed33ccde24 --- /dev/null +++ b/htdocs/langs/en_AE/orders.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - orders +SaleOrderLines=Sales order lines diff --git a/htdocs/langs/en_AE/printing.lang b/htdocs/langs/en_AE/printing.lang new file mode 100644 index 00000000000..31440f79aed --- /dev/null +++ b/htdocs/langs/en_AE/printing.lang @@ -0,0 +1,7 @@ +# Dolibarr language file - Source file is en_US - printing +Module64000Name=One click Printing +Module64000Desc=Enable One click Printing System +PrintingSetup=Setup of One click Printing System +PrintingDesc=This module adds a Print button to various modules to allow documents to be printed directly to a printer with no need to open the document into another application. +MenuDirectPrinting=One click Printing jobs +DirectPrint=One click Print diff --git a/htdocs/langs/en_AE/products.lang b/htdocs/langs/en_AE/products.lang new file mode 100644 index 00000000000..a50a97fd8db --- /dev/null +++ b/htdocs/langs/en_AE/products.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - products +IncludingProductWithTag=Including products/services with the tag +UseProductFournDesc=Add a feature to define the product description defined by the vendors (for each vendor reference) in addition to the description for customers diff --git a/htdocs/langs/en_AE/propal.lang b/htdocs/langs/en_AE/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/en_AE/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/en_AE/receptions.lang b/htdocs/langs/en_AE/receptions.lang new file mode 100644 index 00000000000..088c09f1f33 --- /dev/null +++ b/htdocs/langs/en_AE/receptions.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - receptions +ReceptionCreationIsDoneFromOrder=For the moment, creation of a new reception is done from the Purchase Order record. diff --git a/htdocs/langs/en_AE/sendings.lang b/htdocs/langs/en_AE/sendings.lang new file mode 100644 index 00000000000..c4a28b980b9 --- /dev/null +++ b/htdocs/langs/en_AE/sendings.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - sendings +ShipmentCreationIsDoneFromOrder=For the moment, creation of a new shipment is done from the Sales Order record. diff --git a/htdocs/langs/en_AE/stocks.lang b/htdocs/langs/en_AE/stocks.lang new file mode 100644 index 00000000000..eaebe0207bc --- /dev/null +++ b/htdocs/langs/en_AE/stocks.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - stocks +WarehouseAskWarehouseDuringOrder=Set a warehouse on Sales Orders +VirtualStockAtDate=Virtual stock at a future date diff --git a/htdocs/langs/en_AE/ticket.lang b/htdocs/langs/en_AE/ticket.lang new file mode 100644 index 00000000000..64a5c8d3778 --- /dev/null +++ b/htdocs/langs/en_AE/ticket.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - ticket +BoxNewTicketVSClose=Number of tickets versus closed tickets (today) diff --git a/htdocs/langs/en_AE/trips.lang b/htdocs/langs/en_AE/trips.lang new file mode 100644 index 00000000000..dd9decdd4fe --- /dev/null +++ b/htdocs/langs/en_AE/trips.lang @@ -0,0 +1,6 @@ +# Dolibarr language file - Source file is en_US - trips +ExpenseReportRulesDesc=You can define max amount rules for expense reports. These rules will be applied when a new expense is added to an expense report +ExpenseReportLimitAmount=Max amount +ExpenseReportRestrictive=Exceeding forbidden +ExpenseReportConstraintViolationError=Max amount exceeded (rule %s): %s is higher than %s (Exceeding forbidden) +ExpenseReportConstraintViolationWarning=Max amount exceeded (rule %s): %s is higher than %s (Exceeding authorized) diff --git a/htdocs/langs/en_AU/modulebuilder.lang b/htdocs/langs/en_AU/modulebuilder.lang new file mode 100644 index 00000000000..5db0d6ffc2c --- /dev/null +++ b/htdocs/langs/en_AU/modulebuilder.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - modulebuilder +TriggerDefDesc=Define in the trigger file the code that you want to execute when a business event external to your module is executed (events recorded by other modules). diff --git a/htdocs/langs/en_AU/propal.lang b/htdocs/langs/en_AU/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/en_AU/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/en_AU/ticket.lang b/htdocs/langs/en_AU/ticket.lang new file mode 100644 index 00000000000..64a5c8d3778 --- /dev/null +++ b/htdocs/langs/en_AU/ticket.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - ticket +BoxNewTicketVSClose=Number of tickets versus closed tickets (today) diff --git a/htdocs/langs/en_CA/modulebuilder.lang b/htdocs/langs/en_CA/modulebuilder.lang new file mode 100644 index 00000000000..5db0d6ffc2c --- /dev/null +++ b/htdocs/langs/en_CA/modulebuilder.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - modulebuilder +TriggerDefDesc=Define in the trigger file the code that you want to execute when a business event external to your module is executed (events recorded by other modules). diff --git a/htdocs/langs/en_CA/propal.lang b/htdocs/langs/en_CA/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/en_CA/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/en_CA/ticket.lang b/htdocs/langs/en_CA/ticket.lang new file mode 100644 index 00000000000..64a5c8d3778 --- /dev/null +++ b/htdocs/langs/en_CA/ticket.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - ticket +BoxNewTicketVSClose=Number of tickets versus closed tickets (today) diff --git a/htdocs/langs/en_GB/modulebuilder.lang b/htdocs/langs/en_GB/modulebuilder.lang new file mode 100644 index 00000000000..5db0d6ffc2c --- /dev/null +++ b/htdocs/langs/en_GB/modulebuilder.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - modulebuilder +TriggerDefDesc=Define in the trigger file the code that you want to execute when a business event external to your module is executed (events recorded by other modules). diff --git a/htdocs/langs/en_GB/ticket.lang b/htdocs/langs/en_GB/ticket.lang new file mode 100644 index 00000000000..64a5c8d3778 --- /dev/null +++ b/htdocs/langs/en_GB/ticket.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - ticket +BoxNewTicketVSClose=Number of tickets versus closed tickets (today) diff --git a/htdocs/langs/en_IN/modulebuilder.lang b/htdocs/langs/en_IN/modulebuilder.lang new file mode 100644 index 00000000000..5db0d6ffc2c --- /dev/null +++ b/htdocs/langs/en_IN/modulebuilder.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - modulebuilder +TriggerDefDesc=Define in the trigger file the code that you want to execute when a business event external to your module is executed (events recorded by other modules). diff --git a/htdocs/langs/en_IN/ticket.lang b/htdocs/langs/en_IN/ticket.lang new file mode 100644 index 00000000000..64a5c8d3778 --- /dev/null +++ b/htdocs/langs/en_IN/ticket.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - ticket +BoxNewTicketVSClose=Number of tickets versus closed tickets (today) diff --git a/htdocs/langs/en_SG/modulebuilder.lang b/htdocs/langs/en_SG/modulebuilder.lang new file mode 100644 index 00000000000..5db0d6ffc2c --- /dev/null +++ b/htdocs/langs/en_SG/modulebuilder.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - modulebuilder +TriggerDefDesc=Define in the trigger file the code that you want to execute when a business event external to your module is executed (events recorded by other modules). diff --git a/htdocs/langs/en_SG/propal.lang b/htdocs/langs/en_SG/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/en_SG/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/en_SG/ticket.lang b/htdocs/langs/en_SG/ticket.lang new file mode 100644 index 00000000000..64a5c8d3778 --- /dev/null +++ b/htdocs/langs/en_SG/ticket.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - ticket +BoxNewTicketVSClose=Number of tickets versus closed tickets (today) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 28d585b8f6f..4601f2c15b9 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -265,8 +265,8 @@ OtherResources=Other resources ExternalResources=External Resources SocialNetworks=Social Networks SocialNetworkId=Social Network ID -ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),
    take a look at the Dolibarr Wiki:
    %s -ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:
    %s +ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),
    take a look at the Dolibarr Wiki:
    %s +ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:
    %s HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr. HelpCenterDesc2=Some of these resources are only available in english. CurrentMenuHandler=Current menu handler @@ -762,6 +762,7 @@ Permission121=Read third parties linked to user Permission122=Create/modify third parties linked to user Permission125=Delete third parties linked to user Permission126=Export third parties +Permission130=Create/modify third parties payment information Permission141=Read all projects and tasks (also private projects for which I am not a contact) Permission142=Create/modify all projects and tasks (also private projects for which I am not a contact) Permission144=Delete all projects and tasks (also private projects i am not contact for) diff --git a/htdocs/langs/en_US/bills.lang b/htdocs/langs/en_US/bills.lang index 3aaa5465ca0..930a6489b83 100644 --- a/htdocs/langs/en_US/bills.lang +++ b/htdocs/langs/en_US/bills.lang @@ -604,3 +604,4 @@ SituationTotalProgress=Total progress %d %% SearchUnpaidInvoicesWithDueDate=Search unpaid invoices with a due date = %s NoPaymentAvailable=No payment available for %s PaymentRegisteredAndInvoiceSetToPaid=Payment registered and invoice %s set to paid +SendEmailsRemindersOnInvoiceDueDate=Send reminder by email for unpaid invoices diff --git a/htdocs/langs/en_US/companies.lang b/htdocs/langs/en_US/companies.lang index 616619adb92..3a97af20788 100644 --- a/htdocs/langs/en_US/companies.lang +++ b/htdocs/langs/en_US/companies.lang @@ -369,7 +369,7 @@ VATIntraCheck=Check VATIntraCheckDesc=The VAT ID must include the country prefix. The link %s uses the European VAT checker service (VIES) which requires internet access from the Dolibarr server. VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do VATIntraCheckableOnEUSite=Check the intra-Community VAT ID on the European Commission website -VATIntraManualCheck=You can also check manually on the European Commission website %s +VATIntraManualCheck=You can also check manually on the European Commission website %s ErrorVATCheckMS_UNAVAILABLE=Check not possible. Check service is not provided by the member state (%s). NorProspectNorCustomer=Not prospect, nor customer JuridicalStatus=Business entity type diff --git a/htdocs/langs/en_US/compta.lang b/htdocs/langs/en_US/compta.lang index ace3e518003..0a17b937b1f 100644 --- a/htdocs/langs/en_US/compta.lang +++ b/htdocs/langs/en_US/compta.lang @@ -294,4 +294,6 @@ InvoiceNotLate15Days = To be collected (15 to 30 days) InvoiceNotLate30Days = To be collected (> 30 days) InvoiceToPay=To pay (< 15 days) InvoiceToPay15Days=To pay (15 to 30 days) -InvoiceToPay30Days=To pay (> 30 days) \ No newline at end of file +InvoiceToPay30Days=To pay (> 30 days) +ConfirmPreselectAccount=Preselect accountancy code +ConfirmPreselectAccountQuestion=Are you sure you want to preselect the %s selected lines with this accountancy code ? diff --git a/htdocs/langs/en_US/help.lang b/htdocs/langs/en_US/help.lang index 048de16d3c0..d699cb56fd2 100644 --- a/htdocs/langs/en_US/help.lang +++ b/htdocs/langs/en_US/help.lang @@ -20,4 +20,4 @@ BackToHelpCenter=Otherwise, go back to Help center home page. LinkToGoldMember=You can call one of the trainers preselected by Dolibarr for your language (%s) by clicking their Widget (status and maximum price are automatically updated): PossibleLanguages=Supported languages SubscribeToFoundation=Help the Dolibarr project, subscribe to the foundation -SeeOfficalSupport=For official Dolibarr support in your language:
    %s +SeeOfficalSupport=For official Dolibarr support in your language:
    %s diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index a81aa0a836a..4544525e020 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -906,7 +906,7 @@ ViewFlatList=View flat list ViewAccountList=View ledger ViewSubAccountList=View subaccount ledger RemoveString=Remove string '%s' -SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at https://transifex.com/projects/p/dolibarr/ to add your improvements. +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at https://transifex.com/projects/p/dolibarr/ to add your improvements. DirectDownloadLink=Public download link PublicDownloadLinkDesc=Only the link is required to download the file DirectDownloadInternalLink=Private download link @@ -1159,4 +1159,6 @@ hasBeenValidated=%s has been validated ClientTZ=Client Time Zone (user) NotClosedYet=Not yet closed ClearSignature=Signature reset +CanceledHidden=Canceled hidden +CanceledShown=Canceled shown AddLineOnPosition=Add line on position (at the end if empty) diff --git a/htdocs/langs/en_US/modulebuilder.lang b/htdocs/langs/en_US/modulebuilder.lang index e479438769d..bc4e3b5be59 100644 --- a/htdocs/langs/en_US/modulebuilder.lang +++ b/htdocs/langs/en_US/modulebuilder.lang @@ -1,5 +1,5 @@ # Dolibarr language file - Source file is en_US - loan -ModuleBuilderDesc=This tool must be used only by experienced users or developers. It provides utilities to build or edit your own module. Documentation for alternative manual development is here. +ModuleBuilderDesc=This tool must be used only by experienced users or developers. It provides utilities to build or edit your own module. Documentation for alternative manual development is here. EnterNameOfModuleDesc=Enter name of the module/application to create with no spaces. Use uppercase to separate words (For example: MyModule, EcommerceForShop, SyncWithMySystem...) EnterNameOfObjectDesc=Enter name of the object to create with no spaces. Use uppercase to separate words (For example: MyObject, Student, Teacher...). The CRUD class file, but also API file, pages to list/add/edit/delete object and SQL files will be generated. ModuleBuilderDesc2=Path where modules are generated/edited (first directory for external modules defined into %s): %s diff --git a/htdocs/langs/en_US/oauth.lang b/htdocs/langs/en_US/oauth.lang index d52422a194a..dda6f1bdf73 100644 --- a/htdocs/langs/en_US/oauth.lang +++ b/htdocs/langs/en_US/oauth.lang @@ -23,10 +23,10 @@ TOKEN_DELETE=Delete saved token OAUTH_GOOGLE_NAME=OAuth Google service OAUTH_GOOGLE_ID=OAuth Google Id OAUTH_GOOGLE_SECRET=OAuth Google Secret -OAUTH_GOOGLE_DESC=Go to this page then "Credentials" to create OAuth credentials +OAUTH_GOOGLE_DESC=Go to this page then "Credentials" to create OAuth credentials OAUTH_GITHUB_NAME=OAuth GitHub service OAUTH_GITHUB_ID=OAuth GitHub Id OAUTH_GITHUB_SECRET=OAuth GitHub Secret -OAUTH_GITHUB_DESC=Go to this page then "Register a new application" to create OAuth credentials +OAUTH_GITHUB_DESC=Go to this page then "Register a new application" to create OAuth credentials OAUTH_STRIPE_TEST_NAME=OAuth Stripe Test OAUTH_STRIPE_LIVE_NAME=OAuth Stripe Live \ No newline at end of file diff --git a/htdocs/langs/en_US/paybox.lang b/htdocs/langs/en_US/paybox.lang index 6f320c03181..a2bfb1773e4 100644 --- a/htdocs/langs/en_US/paybox.lang +++ b/htdocs/langs/en_US/paybox.lang @@ -1,6 +1,6 @@ # Dolibarr language file - Source file is en_US - paybox PayBoxSetup=PayBox module setup -PayBoxDesc=This module offer pages to allow payment on Paybox by customers. This can be used for a free payment or for a payment on a particular Dolibarr object (invoice, order, ...) +PayBoxDesc=This module offer pages to allow payment on Paybox by customers. This can be used for a free payment or for a payment on a particular Dolibarr object (invoice, order, ...) FollowingUrlAreAvailableToMakePayments=Following URLs are available to offer a page to a customer to make a payment on Dolibarr objects PaymentForm=Payment form WelcomeOnPaymentPage=Welcome to our online payment service diff --git a/htdocs/langs/en_US/paypal.lang b/htdocs/langs/en_US/paypal.lang index 5eb5f389445..beaf9a5ea3f 100644 --- a/htdocs/langs/en_US/paypal.lang +++ b/htdocs/langs/en_US/paypal.lang @@ -1,6 +1,6 @@ # Dolibarr language file - Source file is en_US - paypal PaypalSetup=PayPal module setup -PaypalDesc=This module allows payment by customers via PayPal. This can be used for a ad-hoc payment or for a payment related to a Dolibarr object (invoice, order, ...) +PaypalDesc=This module allows payment by customers via PayPal. This can be used for a ad-hoc payment or for a payment related to a Dolibarr object (invoice, order, ...) PaypalOrCBDoPayment=Pay with PayPal (Card or PayPal) PaypalDoPayment=Pay with PayPal PAYPAL_API_SANDBOX=Mode test/sandbox diff --git a/htdocs/langs/en_US/projects.lang b/htdocs/langs/en_US/projects.lang index 0b713a2197b..c19f32a0396 100644 --- a/htdocs/langs/en_US/projects.lang +++ b/htdocs/langs/en_US/projects.lang @@ -281,6 +281,6 @@ AddPersonToTask=Add also to tasks UsageOrganizeEvent=Usage: Event Organization PROJECT_CLASSIFY_CLOSED_WHEN_ALL_TASKS_DONE=Classify project as closed when all its tasks are completed (100%% progress) PROJECT_CLASSIFY_CLOSED_WHEN_ALL_TASKS_DONE_help=Note: existing projects with all tasks at 100 %% progress won't be affected: you will have to close them manually. This option only affects open projects. -SelectLinesOfTimeSpentToInvoice=Select lines of time spent that are unbilled, then bulk action "Generate Invoice" to bill them +SelectLinesOfTimeSpentToInvoice=Select lines of time spent that are unbilled, then bulk action "Generate Invoice" to bill them ProjectTasksWithoutTimeSpent=Project tasks without time spent -FormForNewLeadDesc=Thanks to fill the following form to contact us. You can also send us an email directly to %s. \ No newline at end of file +FormForNewLeadDesc=Thanks to fill the following form to contact us. You can also send us an email directly to %s. diff --git a/htdocs/langs/en_US/receptions.lang b/htdocs/langs/en_US/receptions.lang index 46b2d689609..d9e8bdeebb7 100644 --- a/htdocs/langs/en_US/receptions.lang +++ b/htdocs/langs/en_US/receptions.lang @@ -23,7 +23,9 @@ ReceptionsAndReceivingForSameOrder=Receptions and receipts for this order ReceptionsToValidate=Receptions to validate StatusReceptionCanceled=Canceled StatusReceptionDraft=Draft -StatusReceptionValidated=Validated (products to ship or already shipped) +StatusReceptionValidated=Validated (products to receive or already received) +StatusReceptionValidatedToReceive=Validated (products to receive) +StatusReceptionValidatedReceived=Validated (products received) StatusReceptionProcessed=Processed StatusReceptionDraftShort=Draft StatusReceptionValidatedShort=Validated @@ -36,7 +38,7 @@ StatsOnReceptionsOnlyValidated=Statistics conducted on receptions only validated SendReceptionByEMail=Send reception by email SendReceptionRef=Submission of reception %s ActionsOnReception=Events on reception -ReceptionCreationIsDoneFromOrder=For the moment, creation of a new reception is done from the Purchase Order record. +ReceptionCreationIsDoneFromOrder=For the moment, creation of a new reception is done from the Purchase Order. ReceptionLine=Reception line ProductQtyInReceptionAlreadySent=Product quantity from open sales order already sent ProductQtyInSuppliersReceptionAlreadyRecevied=Product quantity from open supplier order already received @@ -46,3 +48,6 @@ ReceptionsReceiptModel=Document templates for receptions NoMorePredefinedProductToDispatch=No more predefined products to dispatch ReceptionExist=A reception exists ByingPrice=Bying price +ReceptionBackToDraftInDolibarr=Reception %s back to draft +ReceptionClassifyClosedInDolibarr=Reception %s classified Closed +ReceptionUnClassifyCloseddInDolibarr=Reception %s re-open \ No newline at end of file diff --git a/htdocs/langs/en_US/salaries.lang b/htdocs/langs/en_US/salaries.lang index c0e115a20df..20a10694500 100644 --- a/htdocs/langs/en_US/salaries.lang +++ b/htdocs/langs/en_US/salaries.lang @@ -24,3 +24,4 @@ SalariesStatistics=Salary statistics SalariesAndPayments=Salaries and payments ConfirmDeleteSalaryPayment=Do you want to delete this salary payment ? FillFieldFirst=Fill employee field first +UpdateAmountWithLastSalary=Set amount with last salary diff --git a/htdocs/langs/en_US/stocks.lang b/htdocs/langs/en_US/stocks.lang index 19875f55148..0110943b000 100644 --- a/htdocs/langs/en_US/stocks.lang +++ b/htdocs/langs/en_US/stocks.lang @@ -178,6 +178,7 @@ ProductStockWarehouseDeleted=Stock limit for alert and desired optimal stock cor AddNewProductStockWarehouse=Set new limit for alert and desired optimal stock AddStockLocationLine=Decrease quantity then click to add another warehouse for this product InventoryDate=Inventory date +Inventories=Inventories NewInventory=New inventory inventorySetup = Inventory Setup inventoryCreatePermission=Create new inventory @@ -206,8 +207,8 @@ INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT=Stock movements will have the date inventoryChangePMPPermission=Allow to change PMP value for a product ColumnNewPMP=New unit PMP OnlyProdsInStock=Do not add product without stock -TheoricalQty=Theorique qty -TheoricalValue=Theorique qty +TheoricalQty=Theorical qty +TheoricalValue=Theorical qty LastPA=Last BP CurrentPA=Curent BP RecordedQty=Recorded Qty @@ -264,3 +265,5 @@ ProductBatchDoesNotExist=Product with batch/serial does not exist ProductBarcodeDoesNotExist=Product with barcode does not exist WarehouseId=Warehouse ID WarehouseRef=Warehouse Ref +SaveQtyFirst=Save the real inventoried quantities first, before asking creation of the stock movement. +InventoryStartedShort=Started \ No newline at end of file diff --git a/htdocs/langs/en_US/stripe.lang b/htdocs/langs/en_US/stripe.lang index 0eba2f5c286..d245df3f6cb 100644 --- a/htdocs/langs/en_US/stripe.lang +++ b/htdocs/langs/en_US/stripe.lang @@ -1,6 +1,6 @@ # Dolibarr language file - Source file is en_US - stripe StripeSetup=Stripe module setup -StripeDesc=Offer customers a Stripe online payment page for payments with credit/cebit cards via Stripe. This can be used to allow your customers to make ad-hoc payments or for payments related to a particular Dolibarr object (invoice, order, ...) +StripeDesc=Offer customers a Stripe online payment page for payments with credit/cebit cards via Stripe. This can be used to allow your customers to make ad-hoc payments or for payments related to a particular Dolibarr object (invoice, order, ...) StripeOrCBDoPayment=Pay with credit card or Stripe FollowingUrlAreAvailableToMakePayments=Following URLs are available to offer a page to a customer to make a payment on Dolibarr objects PaymentForm=Payment form diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index cd1964ff383..b5ef14bd118 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -45,7 +45,7 @@ ViewWebsiteInProduction=View web site using home URLs SetHereVirtualHost=Use with Apache/NGinx/...
    Create on your web server (Apache, Nginx, ...) a dedicated Virtual Host with PHP enabled and a Root directory on
    %s ExampleToUseInApacheVirtualHostConfig=Example to use in Apache virtual host setup: YouCanAlsoTestWithPHPS=Use with PHP embedded server
    On develop environment, you may prefer to test the site with the PHP embedded web server (PHP 5.5 required) by running
    php -S 0.0.0.0:8080 -t %s -YouCanAlsoDeployToAnotherWHP=Run your web site with another Dolibarr Hosting provider
    If you don't have a web server like Apache or NGinx available on internet, you can export and import your web site onto another Dolibarr instance provided by another Dolibarr hosting provider that provide full integration with the Website module. You can find a list of some Dolibarr hosting providers on https://saas.dolibarr.org +YouCanAlsoDeployToAnotherWHP=Run your web site with another Dolibarr Hosting provider
    If you don't have a web server like Apache or NGinx available on internet, you can export and import your web site onto another Dolibarr instance provided by another Dolibarr hosting provider that provide full integration with the Website module. You can find a list of some Dolibarr hosting providers on https://saas.dolibarr.org CheckVirtualHostPerms=Check also that the virtual host user (for example www-data) has %s permissions on files into
    %s ReadPerm=Read WritePerm=Write @@ -60,7 +60,7 @@ YouCanEditHtmlSourceckeditor=You can edit HTML source code using the "Source" bu YouCanEditHtmlSource=
    You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs, $pagelangs.

    You can also include content of another Page/Container with the following syntax:
    <?php includeContainer('alias_of_container_to_include'); ?>

    You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
    <?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

    To add a link to another page, use the syntax:
    <a href="alias_of_page_to_link_to.php">mylink<a>

    To include a link to download a file stored into the documents directory, use the document.php wrapper:
    Example, for a file into documents/ecm (need to be logged), syntax is:
    <a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
    For a file into documents/medias (open directory for public access), syntax is:
    <a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
    For a file shared with a share link (open access using the sharing hash key of file), syntax is:
    <a href="/document.php?hashp=publicsharekeyoffile">

    To include an image stored into the documents directory, use the viewimage.php wrapper:
    Example, for an image into documents/medias (open directory for public access), syntax is:
    <img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
    #YouCanEditHtmlSource2=
    To include a image shared publicaly, use the viewimage.php wrapper:
    Example with a shared key 123456789, syntax is:
    <img src="/viewimage.php?hashp=12345679012...">
    YouCanEditHtmlSource2=For an image shared with a share link (open access using the sharing hash key of file), syntax is:
    <img src="/viewimage.php?hashp=12345679012...">
    -YouCanEditHtmlSourceMore=
    More examples of HTML or dynamic code available on the wiki documentation
    . +YouCanEditHtmlSourceMore=
    More examples of HTML or dynamic code available on the wiki documentation
    . ClonePage=Clone page/container CloneSite=Clone site SiteAdded=Website added diff --git a/htdocs/langs/en_US/workflow.lang b/htdocs/langs/en_US/workflow.lang index fafbc6e8d8a..b65f8449fef 100644 --- a/htdocs/langs/en_US/workflow.lang +++ b/htdocs/langs/en_US/workflow.lang @@ -14,9 +14,13 @@ descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source sales o descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is set to paid (and if the amount of the invoice is the same as the total amount of the linked order) descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source sales order as shipped when a shipment is validated (and if the quantity shipped by all shipments is the same as in the order to update) descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING_CLOSED=Classify linked source sales order as shipped when a shipment is closed (and if the quantity shipped by all shipments is the same as in the order to update) -# Autoclassify purchase order +# Autoclassify purchase proposal descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked proposal) +# Autoclassify purchase order descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order) +descWORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION=Classify linked source purchase order as received when a reception is validated (and if the quantity received by all receptions is the same as in the purchase order to update) +descWORKFLOW_ORDER_CLASSIFY_RECEIVED_RECEPTION_CLOSED=Classify linked source purchase order as received when a reception is closed (and if the quantity received by all rceptions is the same as in the purchase order to update) +# Autoclassify purchase invoice descWORKFLOW_BILL_ON_RECEPTION=Classify receptions to "billed" when a linked supplier order is validated # Autoclose intervention descWORKFLOW_TICKET_CLOSE_INTERVENTION=Close all interventions linked to the ticket when a ticket is closed diff --git a/htdocs/langs/en_ZA/accountancy.lang b/htdocs/langs/en_ZA/accountancy.lang new file mode 100644 index 00000000000..fd4bce2d49b --- /dev/null +++ b/htdocs/langs/en_ZA/accountancy.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - accountancy +NotifiedExportDate=Flag exported lines as exported (modification of the lines will not be possible) +NotifiedValidationDate=Validate the exported entries (modification or deletion of the lines will not be possible) diff --git a/htdocs/langs/en_ZA/cashdesk.lang b/htdocs/langs/en_ZA/cashdesk.lang new file mode 100644 index 00000000000..19dc45d5847 --- /dev/null +++ b/htdocs/langs/en_ZA/cashdesk.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - cashdesk +NotAvailableWithBrowserPrinter=Not available when printer for receipt is set to browser diff --git a/htdocs/langs/en_ZA/compta.lang b/htdocs/langs/en_ZA/compta.lang new file mode 100644 index 00000000000..21e186d2a79 --- /dev/null +++ b/htdocs/langs/en_ZA/compta.lang @@ -0,0 +1,8 @@ +# Dolibarr language file - Source file is en_US - compta +VATReportByThirdParties=Sales tax report by third party +InvoiceLate30Days =Invoices late (> 30 days) +InvoiceLate15Days =Invoices late (15 to 30 days) +InvoiceLateMinus15Days =Invoices late (< 15 days) +InvoiceNotLate =To be collected (< 15 days) +InvoiceNotLate15Days =To be collected (15 to 30 days) +InvoiceNotLate30Days =To be collected (> 30 days) diff --git a/htdocs/langs/en_ZA/errors.lang b/htdocs/langs/en_ZA/errors.lang new file mode 100644 index 00000000000..b701bac654c --- /dev/null +++ b/htdocs/langs/en_ZA/errors.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - errors +ErrorRecordHasAtLeastOneChildOfType=Object %s has at least one child of type %s diff --git a/htdocs/langs/en_ZA/eventorganization.lang b/htdocs/langs/en_ZA/eventorganization.lang new file mode 100644 index 00000000000..dac8822b8d7 --- /dev/null +++ b/htdocs/langs/en_ZA/eventorganization.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - eventorganization +EventOrganizationDescriptionLong=Manage the organization of an event (show, conferences, attendees or speakers, with public pages for suggestion, vote or registration) diff --git a/htdocs/langs/en_ZA/members.lang b/htdocs/langs/en_ZA/members.lang new file mode 100644 index 00000000000..a4efe013601 --- /dev/null +++ b/htdocs/langs/en_ZA/members.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - members +MembersTickets=Membership address sheet +NewSubscription=New contribution diff --git a/htdocs/langs/en_ZA/modulebuilder.lang b/htdocs/langs/en_ZA/modulebuilder.lang new file mode 100644 index 00000000000..5db0d6ffc2c --- /dev/null +++ b/htdocs/langs/en_ZA/modulebuilder.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - modulebuilder +TriggerDefDesc=Define in the trigger file the code that you want to execute when a business event external to your module is executed (events recorded by other modules). diff --git a/htdocs/langs/en_ZA/mrp.lang b/htdocs/langs/en_ZA/mrp.lang new file mode 100644 index 00000000000..e0e12fc5350 --- /dev/null +++ b/htdocs/langs/en_ZA/mrp.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - mrp +ConfirmDeleteMo=Are you sure you want to delete this Manufacturing Order? diff --git a/htdocs/langs/en_ZA/orders.lang b/htdocs/langs/en_ZA/orders.lang new file mode 100644 index 00000000000..bed33ccde24 --- /dev/null +++ b/htdocs/langs/en_ZA/orders.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - orders +SaleOrderLines=Sales order lines diff --git a/htdocs/langs/en_ZA/printing.lang b/htdocs/langs/en_ZA/printing.lang new file mode 100644 index 00000000000..31440f79aed --- /dev/null +++ b/htdocs/langs/en_ZA/printing.lang @@ -0,0 +1,7 @@ +# Dolibarr language file - Source file is en_US - printing +Module64000Name=One click Printing +Module64000Desc=Enable One click Printing System +PrintingSetup=Setup of One click Printing System +PrintingDesc=This module adds a Print button to various modules to allow documents to be printed directly to a printer with no need to open the document into another application. +MenuDirectPrinting=One click Printing jobs +DirectPrint=One click Print diff --git a/htdocs/langs/en_ZA/products.lang b/htdocs/langs/en_ZA/products.lang new file mode 100644 index 00000000000..a50a97fd8db --- /dev/null +++ b/htdocs/langs/en_ZA/products.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - products +IncludingProductWithTag=Including products/services with the tag +UseProductFournDesc=Add a feature to define the product description defined by the vendors (for each vendor reference) in addition to the description for customers diff --git a/htdocs/langs/en_ZA/propal.lang b/htdocs/langs/en_ZA/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/en_ZA/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/en_ZA/receptions.lang b/htdocs/langs/en_ZA/receptions.lang new file mode 100644 index 00000000000..088c09f1f33 --- /dev/null +++ b/htdocs/langs/en_ZA/receptions.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - receptions +ReceptionCreationIsDoneFromOrder=For the moment, creation of a new reception is done from the Purchase Order record. diff --git a/htdocs/langs/en_ZA/sendings.lang b/htdocs/langs/en_ZA/sendings.lang new file mode 100644 index 00000000000..c4a28b980b9 --- /dev/null +++ b/htdocs/langs/en_ZA/sendings.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - sendings +ShipmentCreationIsDoneFromOrder=For the moment, creation of a new shipment is done from the Sales Order record. diff --git a/htdocs/langs/en_ZA/stocks.lang b/htdocs/langs/en_ZA/stocks.lang new file mode 100644 index 00000000000..eaebe0207bc --- /dev/null +++ b/htdocs/langs/en_ZA/stocks.lang @@ -0,0 +1,3 @@ +# Dolibarr language file - Source file is en_US - stocks +WarehouseAskWarehouseDuringOrder=Set a warehouse on Sales Orders +VirtualStockAtDate=Virtual stock at a future date diff --git a/htdocs/langs/en_ZA/ticket.lang b/htdocs/langs/en_ZA/ticket.lang new file mode 100644 index 00000000000..64a5c8d3778 --- /dev/null +++ b/htdocs/langs/en_ZA/ticket.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - ticket +BoxNewTicketVSClose=Number of tickets versus closed tickets (today) diff --git a/htdocs/langs/en_ZA/trips.lang b/htdocs/langs/en_ZA/trips.lang new file mode 100644 index 00000000000..dd9decdd4fe --- /dev/null +++ b/htdocs/langs/en_ZA/trips.lang @@ -0,0 +1,6 @@ +# Dolibarr language file - Source file is en_US - trips +ExpenseReportRulesDesc=You can define max amount rules for expense reports. These rules will be applied when a new expense is added to an expense report +ExpenseReportLimitAmount=Max amount +ExpenseReportRestrictive=Exceeding forbidden +ExpenseReportConstraintViolationError=Max amount exceeded (rule %s): %s is higher than %s (Exceeding forbidden) +ExpenseReportConstraintViolationWarning=Max amount exceeded (rule %s): %s is higher than %s (Exceeding authorized) diff --git a/htdocs/langs/es_BO/propal.lang b/htdocs/langs/es_BO/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/es_BO/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/es_DO/propal.lang b/htdocs/langs/es_DO/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/es_DO/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/es_ES/projects.lang b/htdocs/langs/es_ES/projects.lang index 54d9951485b..5d94f8a82c4 100644 --- a/htdocs/langs/es_ES/projects.lang +++ b/htdocs/langs/es_ES/projects.lang @@ -37,6 +37,8 @@ OpportunitiesStatusForOpenedProjects=Importe oportunidades de proyectos por esta OpportunitiesStatusForProjects=Importe oportunidades de proyectos por estado ShowProject=Ver proyecto ShowTask=Ver tarea +ShowCanceled=Mostrar cancelados +HideCanceled=Ocultar cancelados SetProject=Definir proyecto NoProject=Ningún proyecto definido NbOfProjects=Numero de proyectos diff --git a/htdocs/langs/es_GT/propal.lang b/htdocs/langs/es_GT/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/es_GT/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/es_HN/propal.lang b/htdocs/langs/es_HN/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/es_HN/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/es_PA/propal.lang b/htdocs/langs/es_PA/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/es_PA/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/es_PY/propal.lang b/htdocs/langs/es_PY/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/es_PY/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/es_US/propal.lang b/htdocs/langs/es_US/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/es_US/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/es_UY/propal.lang b/htdocs/langs/es_UY/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/es_UY/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/fr_BE/propal.lang b/htdocs/langs/fr_BE/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/fr_BE/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/fr_CH/propal.lang b/htdocs/langs/fr_CH/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/fr_CH/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/fr_CI/propal.lang b/htdocs/langs/fr_CI/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/fr_CI/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/fr_CM/propal.lang b/htdocs/langs/fr_CM/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/fr_CM/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/fr_GA/propal.lang b/htdocs/langs/fr_GA/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/fr_GA/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/it_CH/propal.lang b/htdocs/langs/it_CH/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/it_CH/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/pt_AO/propal.lang b/htdocs/langs/pt_AO/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/pt_AO/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/langs/ru_UA/propal.lang b/htdocs/langs/ru_UA/propal.lang new file mode 100644 index 00000000000..de4e2e63224 --- /dev/null +++ b/htdocs/langs/ru_UA/propal.lang @@ -0,0 +1,2 @@ +# Dolibarr language file - Source file is en_US - propal +PdfCommercialProposalTitle=Proposal diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 34abf5f5759..a15b17b8566 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1894,7 +1894,7 @@ function top_menu($head, $title = '', $target = '', $disablejs = 0, $disablehead } } $qs .= (($qs && $morequerystring) ? '&' : '').$morequerystring; - $text = ''; + $text = ''; //$text.= img_picto(":".$langs->trans("PrintContentArea"), 'printer_top.png', 'class="printer"'); $text .= ''; $text .= ''; @@ -1934,7 +1934,7 @@ function top_menu($head, $title = '', $target = '', $disablejs = 0, $disablehead $title .= ' ('.$langs->trans("HomePage").')'; } } - $text .= ''; if ($doliurl) { - print ''; + print ''; } else { print ''; } @@ -2885,7 +2885,7 @@ function left_menu($menu_array_before, $helppagename = '', $notused = '', $menu_ } print ''; } diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index 1ab03743747..093b7c8c101 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -2067,8 +2067,8 @@ if ($module == 'initmodule') { print $langs->trans("Numero"); print ''; print $moduleobj->numero; - print '   ('.$langs->trans("SeeIDsInUse").''; - print ' - '.$langs->trans("SeeReservedIDsRangeHere").')'; + print '   ('.$langs->trans("SeeIDsInUse").''; + print ' - '.$langs->trans("SeeReservedIDsRangeHere").')'; print ''; print ''; @@ -2697,7 +2697,7 @@ if ($module == 'initmodule') { print ''; print ''; print ''; print ''; $url = 'http://www.takepos.com'; print ''."\n"; -print ''; +print ''; print ''; -print ''; +print ''; print ''; print "
    '.$langs->trans("Property"); - print ' ('.$langs->trans("SeeExamples").')'; + print ' ('.$langs->trans("SeeExamples").')'; print ''; print $form->textwithpicto($langs->trans("Label"), $langs->trans("YouCanUseTranslationKey")); @@ -3840,7 +3840,7 @@ if ($module == 'initmodule') { print ''.$langs->trans("FileNotYetGenerated").''; } else { print ''; - print ''; + print ''; print $outputfiledoc; print ''; print ''; @@ -3854,7 +3854,7 @@ if ($module == 'initmodule') { print ''.$langs->trans("FileNotYetGenerated").''; } else { print ''; - print ''; + print ''; print $outputfiledocpdf; print ''; print ''; diff --git a/htdocs/multicurrency/multicurrency_rate.php b/htdocs/multicurrency/multicurrency_rate.php index 36a6af12750..2c32e0b03e8 100644 --- a/htdocs/multicurrency/multicurrency_rate.php +++ b/htdocs/multicurrency/multicurrency_rate.php @@ -229,7 +229,7 @@ if (empty($reshook)) { * View */ -$htmlother = new FormOther($db); +$form = new Form($db); $title = $langs->trans("CurrencyRate"); $page_name = "MultiCurrencySetup"; @@ -247,12 +247,6 @@ print dol_get_fiche_head($head, 'ratelist', $langs->trans("ModuleSetup"), -1, "m // ACTION if (!in_array($action, array("updateRate", "deleteRate"))) { - print ''; - print ''; - print ''."\n"; - print '
    '.$langs->trans("FormCreateRate").'
    '; - - $form = new Form($db); print '
    '; print ''; @@ -410,8 +404,8 @@ if ($resql) { $selectedfields .= $form->showCheckAddButtons('checkforselect', 1); } - print '
    '; - print ''."\n"; + print '
    '; + print '
    '."\n"; // Lines with input filters print ''; diff --git a/htdocs/partnership/admin/website.php b/htdocs/partnership/admin/website.php index 96ebb4ba6e9..5fb48248280 100644 --- a/htdocs/partnership/admin/website.php +++ b/htdocs/partnership/admin/website.php @@ -248,7 +248,7 @@ if (!empty($conf->global->PARTNERSHIP_ENABLE_PUBLIC)) { print ''; print ajax_autoselect('publicurlmember'); } diff --git a/htdocs/paypal/admin/paypal.php b/htdocs/paypal/admin/paypal.php index f4edec7630c..df5bb4161a5 100644 --- a/htdocs/paypal/admin/paypal.php +++ b/htdocs/paypal/admin/paypal.php @@ -350,7 +350,7 @@ $sandboxpaypalurl = 'developer.paypal.com'; print '
    '; print 'Your API authentication information can be found with following steps. We recommend that you open a separate Web browser session when carrying out this procedure.
    -1. Log in to your PayPal account (on real paypal '.$realpaypalurl.' (or sandbox '.$sandboxpaypalurl.').
    +1. Log in to your PayPal account (on real paypal '.$realpaypalurl.' (or sandbox '.$sandboxpaypalurl.').
    2. Click the "Profile" or "Preferencies" subtab located under the My Account heading.
    3. Click the link "API Access".
    4. Click the View API Certificate link in the right column.
    diff --git a/htdocs/product/composition/card.php b/htdocs/product/composition/card.php index 2cecfc84bc4..d5325029771 100644 --- a/htdocs/product/composition/card.php +++ b/htdocs/product/composition/card.php @@ -339,7 +339,7 @@ if ($id > 0 || !empty($ref)) { print '
    '; // Rank - print ''; + print ''; // Product ref print ''; // Product label @@ -401,8 +401,8 @@ if ($id > 0 || !empty($ref)) { $totalline = price2num($value['nb'] * ($fourn_unitprice * (1 - ($fourn_remise_percent / 100)) - $fourn_remise), 'MT'); $total += $totalline; - print ''; // Best selling price @@ -414,11 +414,11 @@ if ($id > 0 || !empty($ref)) { $totalsell += $totallinesell; } print ''; @@ -603,6 +603,7 @@ if ($id > 0 || !empty($ref)) { print ''; print ''; print ''; + print '
    '.$langs->trans('Rank').''.$langs->trans('Position').''.$langs->trans('ComposedProduct').''; - print ($notdefined ? '' : ($value['nb'] > 1 ? $value['nb'].'x' : '').price($unitline, '', '', 0, 0, -1, $conf->currency)); + print ''; + print ($notdefined ? '' : ($value['nb'] > 1 ? $value['nb'].'x ' : '').''.price($unitline, '', '', 0, 0, -1, $conf->currency)).''; print ''; - print ($notdefined ? '' : ($value['nb'] > 1 ? $value['nb'].'x' : '')); + print ($notdefined ? '' : ($value['nb'] > 1 ? $value['nb'].'x ' : '')); if (is_numeric($pricesell)) { - print price($pricesell, '', '', 0, 0, -1, $conf->currency); + print ''.price($pricesell, '', '', 0, 0, -1, $conf->currency).''; } else { - print $langs->trans($pricesell); + print ''.$langs->trans($pricesell).''; } print '
    '; print ''; print ''; - print ''; if ($object->status == $object::STATUS_VALIDATED) { @@ -692,7 +695,7 @@ if ($object->id > 0) { print ''; } print ''; - print ''; // Actions @@ -764,17 +767,22 @@ if ($object->id > 0) { print ''; // Real quantity - print ''; + print ''; $qty_tmp = price2num(GETPOST("id_".$obj->rowid."_input_tmp", 'MS')) >= 0 ? GETPOST("id_".$obj->rowid."_input_tmp") : $qty_view; @@ -801,10 +809,13 @@ if ($object->id > 0) { print ''; + // Call method to disable the button if no qty entered yet for inventory + if ($object->status != $object::STATUS_VALIDATED || !$hasinput) { print ''; diff --git a/htdocs/product/stock/class/mouvementstock.class.php b/htdocs/product/stock/class/mouvementstock.class.php index 3a43d9ee6bb..da06076fe97 100644 --- a/htdocs/product/stock/class/mouvementstock.class.php +++ b/htdocs/product/stock/class/mouvementstock.class.php @@ -156,7 +156,7 @@ class MouvementStock extends CommonObject * @param int $price Unit price HT of product, used to calculate average weighted price (AWP or PMP in french). If 0, average weighted price is not changed. * @param string $label Label of stock movement * @param string $inventorycode Inventory code - * @param string $datem Force date of movement + * @param integer|string $datem Force date of movement * @param integer|string $eatby eat-by date. Will be used if lot does not exists yet and will be created. * @param integer|string $sellby sell-by date. Will be used if lot does not exists yet and will be created. * @param string $batch batch number @@ -439,7 +439,7 @@ class MouvementStock extends CommonObject $sql .= " datem, fk_product, batch, eatby, sellby,"; $sql .= " fk_entrepot, value, type_mouvement, fk_user_author, label, inventorycode, price, fk_origin, origintype, fk_projet"; $sql .= ")"; - $sql .= " VALUES ('".$this->db->idate($now)."', ".((int) $this->product_id).", "; + $sql .= " VALUES ('".$this->db->idate($this->datem)."', ".((int) $this->product_id).", "; $sql .= " ".($batch ? "'".$this->db->escape($batch)."'" : "null").", "; $sql .= " ".($eatby ? "'".$this->db->idate($eatby)."'" : "null").", "; $sql .= " ".($sellby ? "'".$this->db->idate($sellby)."'" : "null").", "; @@ -764,19 +764,19 @@ class MouvementStock extends CommonObject /** * Decrease stock for product and subproducts * - * @param User $user Object user - * @param int $fk_product Id product - * @param int $entrepot_id Warehouse id - * @param int $qty Quantity - * @param int $price Price - * @param string $label Label of stock movement - * @param string $datem Force date of movement - * @param integer $eatby eat-by date - * @param integer $sellby sell-by date - * @param string $batch batch number - * @param int $id_product_batch Id product_batch - * @param string $inventorycode Inventory code - * @return int <0 if KO, >0 if OK + * @param User $user Object user + * @param int $fk_product Id product + * @param int $entrepot_id Warehouse id + * @param int $qty Quantity + * @param int $price Price + * @param string $label Label of stock movement + * @param integer|string $datem Force date of movement + * @param integer $eatby eat-by date + * @param integer $sellby sell-by date + * @param string $batch batch number + * @param int $id_product_batch Id product_batch + * @param string $inventorycode Inventory code + * @return int <0 if KO, >0 if OK */ public function livraison($user, $fk_product, $entrepot_id, $qty, $price = 0, $label = '', $datem = '', $eatby = '', $sellby = '', $batch = '', $id_product_batch = 0, $inventorycode = '') { @@ -799,7 +799,7 @@ class MouvementStock extends CommonObject * @param integer|string $eatby eat-by date * @param integer|string $sellby sell-by date * @param string $batch batch number - * @param string $datem Force date of movement + * @param integer|string $datem Force date of movement * @param int $id_product_batch Id product_batch * @param string $inventorycode Inventory code * @return int <0 if KO, >0 if OK @@ -813,28 +813,6 @@ class MouvementStock extends CommonObject return $this->_create($user, $fk_product, $entrepot_id, $qty, 3, $price, $label, $inventorycode, $datem, $eatby, $sellby, $batch, $skip_batch, $id_product_batch); } - - // /** - // * Return nb of subproducts lines for a product - // * - // * @param int $id Id of product - // * @return int <0 if KO, nb of subproducts if OK - // * @deprecated A count($product->getChildsArbo($id,1)) is same. No reason to have this in this class. - // */ - // public function nbOfSubProducts($id) - // { - // $nbSP=0; - - // $resql = "SELECT count(*) as nb FROM ".MAIN_DB_PREFIX."product_association"; - // $resql.= " WHERE fk_product_pere = ".((int) $id); - // if ($this->db->query($resql)) - // { - // $obj=$this->db->fetch_object($resql); - // $nbSP=$obj->nb; - // } - // return $nbSP; - // } - /** * Count number of product in stock before a specific date * diff --git a/htdocs/projet/admin/website.php b/htdocs/projet/admin/website.php index 893c3765736..1af6b72c196 100644 --- a/htdocs/projet/admin/website.php +++ b/htdocs/projet/admin/website.php @@ -159,7 +159,7 @@ if (!empty($conf->global->PROJECT_ENABLE_PUBLIC)) { $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file //$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current - print ''.$urlwithroot.'/public/project/new.php'.$entity_qr.''; + print ''.$urlwithroot.'/public/project/new.php'.$entity_qr.''; } // End of page diff --git a/htdocs/projet/element.php b/htdocs/projet/element.php index ff68d9fbb05..e455d6f599f 100644 --- a/htdocs/projet/element.php +++ b/htdocs/projet/element.php @@ -1016,6 +1016,9 @@ foreach ($listofreferent as $key => $value) { } } + $elementarray = $object->get_element_list($key, $tablename, $datefieldname, $dates, $datee, !empty($project_field) ? $project_field : 'fk_projet'); + + if (empty($conf->global->PROJECT_LINK_ON_OVERWIEW_DISABLED) && $idtofilterthirdparty && !in_array($tablename, $exclude_select_element)) { $selectList = $formproject->select_element($tablename, $idtofilterthirdparty, 'minwidth300 minwidth75imp', -2, !empty($project_field) ? $project_field : 'fk_projet'); if ($selectList < 0) { @@ -1046,6 +1049,30 @@ foreach ($listofreferent as $key => $value) { } $addform .= '
    '; } + if (is_array($elementarray) && !count($elementarray) > 0 && $key == "order_supplier") { + $addform = '
    + '.$langs->trans("CanceledShown").' + +
    '.$addform; + } print load_fiche_titre($langs->trans($title), $addform, ''); @@ -1113,7 +1140,6 @@ foreach ($listofreferent as $key => $value) { } print '
    '; - $elementarray = $object->get_element_list($key, $tablename, $datefieldname, $dates, $datee, !empty($project_field) ? $project_field : 'fk_projet'); if (is_array($elementarray) && count($elementarray) > 0) { $total_ht = 0; $total_ttc = 0; @@ -1168,9 +1194,16 @@ foreach ($listofreferent as $key => $value) { if (!empty($element->close_code) && $element->close_code == 'replaced') { $qualifiedfortotal = false; // Replacement invoice, do not include into total } + } elseif ($key == 'order_supplier' && $element->status == 7) { + $qualifiedfortotal = false; // It makes no sense to include canceled orders in the total + } + + if ($key == "order_supplier" && $element->status == 7) { + print ''; + } else { + print ''; } - print ''; // Remove link print ''; } else { - if ($object->statut <= 1) { + $statusreceived = $object::STATUS_CLOSED; + if (getDolGlobalInt("STOCK_CALCULATE_ON_RECEPTION")) { + $statusreceived = $object::STATUS_VALIDATED; + } + if (getDolGlobalInt("STOCK_CALCULATE_ON_RECEPTION_CLOSE")) { + $statusreceived = $object::STATUS_CLOSED; + } + if ($object->statut < $statusreceived) { print ''; } else { print ''; @@ -1988,14 +2004,14 @@ if ($action == 'create') { if ($object->statut == Reception::STATUS_DRAFT && $num_prod > 0) { if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->reception->creer)) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->reception->reception_advance->validate))) { - print ''.$langs->trans("Validate").''; + print ''.$langs->trans("Validate").''; } else { print ''.$langs->trans("Validate").''; } } - // Edit + // Back to draft if ($object->statut == Reception::STATUS_VALIDATED && $user->rights->reception->creer) { - print ''; + print ''; } // TODO add alternative status diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index 7f3451ad1ba..954e7f192cd 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -138,7 +138,14 @@ class Reception extends CommonObject $this->statuts = array(); $this->statuts[-1] = 'StatusReceptionCanceled'; $this->statuts[0] = 'StatusReceptionDraft'; + // product to receive if stock increase is on close or already received if stock increase is on validation $this->statuts[1] = 'StatusReceptionValidated'; + if (getDolGlobalInt("STOCK_CALCULATE_ON_RECEPTION")) { + $this->statuts[1] = 'StatusReceptionValidatedReceived'; + } + if (getDolGlobalInt("STOCK_CALCULATE_ON_RECEPTION_CLOSE")) { + $this->statuts[1] = 'StatusReceptionValidatedToReceive'; + } $this->statuts[2] = 'StatusReceptionProcessed'; // List of short language codes for status @@ -590,10 +597,11 @@ class Reception extends CommonObject // line without batch detail // We decrement stock of product (and sub-products) -> update table llx_product_stock (key of this table is fk_product+fk_entrepot) and add a movement record. + $inventorycode = ''; if (!empty($conf->global->STOCK_CALCULATE_ON_RECEPTION || $conf->global->STOCK_CALCULATE_ON_RECEPTION_CLOSE)) { - $result = $mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, $qty, $obj->cost_price, $langs->trans("ReceptionValidatedInDolibarr", $numref)); + $result = $mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, $qty, $obj->cost_price, $langs->trans("ReceptionValidatedInDolibarr", $numref), '', '', '', '', 0, $inventorycode); } else { - $result = $mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, $qty, $obj->subprice, $langs->trans("ReceptionValidatedInDolibarr", $numref)); + $result = $mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, $qty, $obj->subprice, $langs->trans("ReceptionValidatedInDolibarr", $numref), '', '', '', '', 0, $inventorycode); } if ($result < 0) { $error++; @@ -606,10 +614,11 @@ class Reception extends CommonObject // We decrement stock of product (and sub-products) -> update table llx_product_stock (key of this table is fk_product+fk_entrepot) and add a movement record. // Note: ->fk_origin_stock = id into table llx_product_batch (may be rename into llx_product_stock_batch in another version) + $inventorycode = ''; if (!empty($conf->global->STOCK_CALCULATE_ON_RECEPTION || $conf->global->STOCK_CALCULATE_ON_RECEPTION_CLOSE)) { - $result = $mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, $qty, $obj->cost_price, $langs->trans("ReceptionValidatedInDolibarr", $numref), $this->db->jdate($obj->eatby), $this->db->jdate($obj->sellby), $obj->batch); + $result = $mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, $qty, $obj->cost_price, $langs->trans("ReceptionValidatedInDolibarr", $numref), $this->db->jdate($obj->eatby), $this->db->jdate($obj->sellby), $obj->batch, '', 0, $inventorycode); } else { - $result = $mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, $qty, $obj->subprice, $langs->trans("ReceptionValidatedInDolibarr", $numref), $this->db->jdate($obj->eatby), $this->db->jdate($obj->sellby), $obj->batch); + $result = $mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, $qty, $obj->subprice, $langs->trans("ReceptionValidatedInDolibarr", $numref), $this->db->jdate($obj->eatby), $this->db->jdate($obj->sellby), $obj->batch, '', 0, $inventorycode); } if ($result < 0) { $error++; @@ -1437,14 +1446,14 @@ class Reception extends CommonObject if (!empty($tracking) && !empty($value)) { $url = str_replace('{TRACKID}', $value, $tracking); - $this->tracking_url = sprintf(''.($value ? $value : 'url').'', $url, $url); + $this->tracking_url = sprintf(''.($value ? $value : 'url').'', $url, $url); } else { $this->tracking_url = $value; } } /** - * Classify the reception as closed. + * Classify the reception as closed (this record also the stock movement) * * @return int <0 if KO, >0 if OK */ @@ -1526,7 +1535,8 @@ class Reception extends CommonObject // line without batch detail // We decrement stock of product (and sub-products) -> update table llx_product_stock (key of this table is fk_product+fk_entrepot) and add a movement record - $result = $mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, $qty, $obj->subprice, $langs->trans("ReceptionClassifyClosedInDolibarr", $numref)); + $inventorycode = ''; + $result = $mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, $qty, $obj->subprice, $langs->trans("ReceptionClassifyClosedInDolibarr", $this->ref), '', '', '', '', 0, $inventorycode); if ($result < 0) { $this->error = $mouvS->error; $this->errors = $mouvS->errors; @@ -1536,7 +1546,8 @@ class Reception extends CommonObject // line with batch detail // We decrement stock of product (and sub-products) -> update table llx_product_stock (key of this table is fk_product+fk_entrepot) and add a movement record - $result = $mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, $qty, $obj->subprice, $langs->trans("ReceptionClassifyClosedInDolibarr", $numref), $this->db->jdate($obj->eatby), $this->db->jdate($obj->sellby), $obj->batch); + $inventorycode = ''; + $result = $mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, $qty, $obj->subprice, $langs->trans("ReceptionClassifyClosedInDolibarr", $this->ref), $this->db->jdate($obj->eatby), $this->db->jdate($obj->sellby), $obj->batch, '', 0, $inventorycode); if ($result < 0) { $this->error = $mouvS->error; @@ -1688,7 +1699,9 @@ class Reception extends CommonObject // line without batch detail // We decrement stock of product (and sub-products) -> update table llx_product_stock (key of this table is fk_product+fk_entrepot) and add a movement record - $result = $mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, -$qty, $obj->subprice, $langs->trans("ReceptionUnClassifyCloseddInDolibarr", $numref)); + $inventorycode = ''; + $result = $mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, -$qty, $obj->subprice, $langs->trans("ReceptionUnClassifyCloseddInDolibarr", $numref), '', '', '', '', 0, $inventorycode); + if ($result < 0) { $this->error = $mouvS->error; $this->errors = $mouvS->errors; @@ -1698,7 +1711,8 @@ class Reception extends CommonObject // line with batch detail // We decrement stock of product (and sub-products) -> update table llx_product_stock (key of this table is fk_product+fk_entrepot) and add a movement record - $result = $mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, -$qty, $obj->subprice, $langs->trans("ReceptionUnClassifyCloseddInDolibarr", $numref), $this->db->jdate($obj->eatby), $this->db->jdate($obj->sellby), $obj->batch, $obj->fk_origin_stock); + $inventorycode = ''; + $result = $mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, -$qty, $obj->subprice, $langs->trans("ReceptionUnClassifyCloseddInDolibarr", $numref), $this->db->jdate($obj->eatby), $this->db->jdate($obj->sellby), $obj->batch, '', $obj->fk_origin_stock, $inventorycode); if ($result < 0) { $this->error = $mouvS->error; $this->errors = $mouvS->errors; @@ -1720,10 +1734,15 @@ class Reception extends CommonObject } } - if ($this->origin == 'order_supplier') { + if (!$error && $this->origin == 'order_supplier') { $commande = new CommandeFournisseur($this->db); $commande->fetch($this->origin_id); - $commande->setStatus($user, 4); + $result = $commande->setStatus($user, 4); + if ($result < 0) { + $error++; + $this->error = $commande->error; + $this->errors = $commande->errors; + } } } else { $error++; @@ -1810,7 +1829,8 @@ class Reception extends CommonObject // line without batch detail // We decrement stock of product (and sub-products) -> update table llx_product_stock (key of this table is fk_product+fk_entrepot) and add a movement record - $result = $mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, -$qty, $obj->subprice, $langs->trans("ReceptionBackToDraftInDolibarr", $this->ref)); + $inventorycode = ''; + $result = $mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, -$qty, $obj->subprice, $langs->trans("ReceptionBackToDraftInDolibarr", $this->ref), '', '', '', '', 0, $inventorycode); if ($result < 0) { $this->error = $mouvS->error; $this->errors = $mouvS->errors; @@ -1821,7 +1841,8 @@ class Reception extends CommonObject // line with batch detail // We decrement stock of product (and sub-products) -> update table llx_product_stock (key of this table is fk_product+fk_entrepot) and add a movement record - $result = $mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, -$qty, $obj->subprice, $langs->trans("ReceptionBackToDraftInDolibarr", $this->ref), $this->db->jdate($obj->eatby), $this->db->jdate($obj->sellby), $obj->batch); + $inventorycode = ''; + $result = $mouvS->reception($user, $obj->fk_product, $obj->fk_entrepot, -$qty, $obj->subprice, $langs->trans("ReceptionBackToDraftInDolibarr", $this->ref), $this->db->jdate($obj->eatby), $this->db->jdate($obj->sellby), $obj->batch, '', 0, $inventorycode); if ($result < 0) { $this->error = $mouvS->error; $this->errors = $mouvS->errors; diff --git a/htdocs/recruitment/admin/public_interface.php b/htdocs/recruitment/admin/public_interface.php index 01a79a87dd8..3d431d026bc 100644 --- a/htdocs/recruitment/admin/public_interface.php +++ b/htdocs/recruitment/admin/public_interface.php @@ -192,7 +192,7 @@ if (!empty($conf->global->RECRUITMENT_ENABLE_PUBLIC_INTERFACE)) { $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file //$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current - print ''.$urlwithroot.'/public/members/new.php'.$entity_qr.''; + print ''.$urlwithroot.'/public/members/new.php'.$entity_qr.''; } */ diff --git a/htdocs/recruitment/recruitmentjobposition_card.php b/htdocs/recruitment/recruitmentjobposition_card.php index f7bf9f9da23..ab065411ac0 100644 --- a/htdocs/recruitment/recruitmentjobposition_card.php +++ b/htdocs/recruitment/recruitmentjobposition_card.php @@ -550,7 +550,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea $url = getPublicJobPositionUrl(0, $object->ref); $out .= ''; + $out .= ''.img_picto('', 'globe').''; $out .= ajax_autoselect("recruitmentjobpositionurl", 0); print $out; diff --git a/htdocs/salaries/ajax/ajaxsalaries.php b/htdocs/salaries/ajax/ajaxsalaries.php index dc7715ff6ba..adea28ee8ce 100644 --- a/htdocs/salaries/ajax/ajaxsalaries.php +++ b/htdocs/salaries/ajax/ajaxsalaries.php @@ -47,8 +47,14 @@ require_once DOL_DOCUMENT_ROOT.'/salaries/class/salary.class.php'; restrictedArea($user, 'salaries'); + +/* + * View + */ + $fk_user = GETPOST('fk_user', 'int'); $return_arr = array(); + if (!empty(GETPOST('fk_user', 'int'))) { $sql = "SELECT s.amount, s.rowid FROM ".MAIN_DB_PREFIX."salary as s"; $sql .= " WHERE s.fk_user = ".((int) $fk_user); @@ -60,7 +66,7 @@ if (!empty(GETPOST('fk_user', 'int'))) { $obj = $db->fetch_object($resql); $label = "Salary amount"; $row_array['label'] = $label; - $row_array['value'] = $obj->amount; + $row_array['value'] = price2num($obj->amount, 'MT'); $row_array['key'] = "Amount"; array_push($return_arr, $row_array); diff --git a/htdocs/salaries/card.php b/htdocs/salaries/card.php index 3caf2afa7bd..b0abeeb134a 100755 --- a/htdocs/salaries/card.php +++ b/htdocs/salaries/card.php @@ -668,7 +668,7 @@ if ($action == 'create') { ); } else { - alert("'.$langs->trans("FillFieldFirst").'"); + alert("'.dol_escape_js($langs->trans("FillFieldFirst")).'"); } }); diff --git a/htdocs/societe/ajax/company.php b/htdocs/societe/ajax/company.php index b2578ea6562..7edd00db4d5 100644 --- a/htdocs/societe/ajax/company.php +++ b/htdocs/societe/ajax/company.php @@ -114,7 +114,7 @@ if (!empty($action) && $action == 'fetch' && !empty($id)) { return; } - if (!is_object($form)) { + if (empty($form) || !is_object($form)) { $form = new Form($db); } diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index 7c820f92e8e..82fb7b77523 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -1535,7 +1535,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { $s .= ''.$langs->trans("VATIntraCheck").''; $s = $form->textwithpicto($s, $langs->trans("VATIntraCheckDesc", $langs->transnoentitiesnoconv("VATIntraCheck")), 1); } else { - $s .= 'country_id).'" target="_blank">'.img_picto($langs->trans("VATIntraCheckableOnEUSite"), 'help').''; + $s .= 'country_id).'" target="_blank" rel="noopener noreferrer">'.img_picto($langs->trans("VATIntraCheckableOnEUSite"), 'help').''; } } print $s; @@ -2248,7 +2248,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { $s .= ''.$langs->trans("VATIntraCheck").''; $s = $form->textwithpicto($s, $langs->trans("VATIntraCheckDesc", $langs->transnoentitiesnoconv("VATIntraCheck")), 1); } else { - $s .= 'country_id).'" class="hideonsmartphone" target="_blank">'.img_picto($langs->trans("VATIntraCheckableOnEUSite"), 'help').''; + $s .= 'country_id).'" class="hideonsmartphone" target="_blank" rel="noopener noreferrer">'.img_picto($langs->trans("VATIntraCheckableOnEUSite"), 'help').''; } } print $s; @@ -2682,7 +2682,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { $s .= ''.$langs->trans("VATIntraCheck").''; $s = $form->textwithpicto($s, $langs->trans("VATIntraCheckDesc", $langs->transnoentitiesnoconv("VATIntraCheck")), 1); } else { - $s .= 'country_id).'" class="hideonsmartphone" target="_blank">'.img_picto($langs->trans("VATIntraCheckableOnEUSite"), 'help').''; + $s .= 'country_id).'" class="hideonsmartphone" target="_blank" rel="noopener noreferrer">'.img_picto($langs->trans("VATIntraCheckableOnEUSite"), 'help').''; } } print $s; diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 5c7eac48240..22276cc7bee 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -3762,7 +3762,7 @@ class Societe extends CommonObject } if ($url) { - return ''.$langs->trans("Check").''; + return ''.$langs->trans("Check").''; } } else { return $hookmanager->resPrint; diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index faef5e5beaf..40da31fa619 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -343,6 +343,7 @@ if (empty($reshook)) { $search_town = ""; $search_zip = ""; $search_state = ""; + $search_region = ""; $search_country = ''; $search_email = ''; $search_phone = ''; @@ -492,7 +493,7 @@ $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as country on (country.rowid = s $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_typent as typent on (typent.id = s.fk_typent)"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_effectif as staff on (staff.id = s.fk_effectif)"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as state on (state.rowid = s.fk_departement)"; -$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_regions as region on (region. code_region = state.fk_region)"; +$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_regions as region on (region.code_region = state.fk_region)"; // We'll need this table joined to the select in order to filter by categ if (!empty($search_categ_cus) && $search_categ_cus != '-1') { $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_societe as cc ON s.rowid = cc.fk_soc"; // We'll need this table joined to the select in order to filter by categ @@ -774,6 +775,9 @@ if ($search_url != '') { if ($search_state != '') { $param .= "&search_state=".urlencode($search_state); } +if ($search_region != '') { + $param .= "&search_region=".urlencode($search_region); +} if ($search_country != '') { $param .= "&search_country=".urlencode($search_country); } diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 995558ae2f5..7d93a7d347e 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -1,12 +1,13 @@ - * Copyright (C) 2003 Jean-Louis Bergamo - * Copyright (C) 2004-2018 Laurent Destailleur - * Copyright (C) 2005-2009 Regis Houssin - * Copyright (C) 2013 Peter Fontaine - * Copyright (C) 2015-2016 Marcos García - * Copyright (C) 2017 Ferran Marcet - * Copyright (C) 2018 -2021Thibault FOUCART +/* Copyright (C) 2002-2004 Rodolphe Quiedeville + * Copyright (C) 2003 Jean-Louis Bergamo + * Copyright (C) 2004-2018 Laurent Destailleur + * Copyright (C) 2005-2009 Regis Houssin + * Copyright (C) 2013 Peter Fontaine + * Copyright (C) 2015-2016 Marcos García + * Copyright (C) 2017 Ferran Marcet + * Copyright (C) 2018-2021 Thibault FOUCART + * Copyright (C) 2021 Alexandre Spangaro * * 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 @@ -41,7 +42,6 @@ require_once DOL_DOCUMENT_ROOT.'/stripe/class/stripe.class.php'; $langs->loadLangs(array("companies", "commercial", "banks", "bills", 'paypal', 'stripe', 'withdrawals')); - // Security check $socid = GETPOST("socid", "int"); if ($user->socid) { @@ -70,6 +70,10 @@ $extrafields->fetch_name_optionals_label($object->table_element); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('thirdpartybancard', 'globalcard')); +$permissiontoread = $user->rights->societe->lire; +$permissiontoadd = $user->rights->societe->creer; // Used by the include of actions_addupdatedelete.inc.php and actions_builddoc.inc.php + +$permissiontoaddupdatepaymentinformation = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $permissiontoadd) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->societe->thirdparty_paymentinformation_advance->write))); if (!empty($conf->stripe->enabled)) { $service = 'StripeTest'; @@ -455,7 +459,6 @@ if (empty($reshook)) { $id = $socid; $upload_dir = $conf->societe->multidir_output[$object->entity]; - $permissiontoadd = $user->rights->societe->creer; include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php'; $id = $savid; @@ -703,7 +706,7 @@ if (empty($companybankaccount->socid)) { $companybankaccount->socid = $object->id; } -if ($socid && ($action == 'edit' || $action == 'editcard') && $user->rights->societe->creer) { +if ($socid && ($action == 'edit' || $action == 'editcard') && $permissiontoaddupdatepaymentinformation) { print ''; print ''; $actionforadd = 'update'; @@ -713,7 +716,7 @@ if ($socid && ($action == 'edit' || $action == 'editcard') && $user->rights->soc print ''; print ''; } -if ($socid && ($action == 'create' || $action == 'createcard') && $user->rights->societe->creer) { +if ($socid && ($action == 'create' || $action == 'createcard') && $permissiontoaddupdatepaymentinformation) { print ''; print ''; $actionforadd = 'add'; @@ -787,12 +790,11 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' } if (!empty($conf->stripe->enabled)) { - $permissiontowrite = $user->rights->societe->creer; // Stripe customer key 'cu_....' stored into llx_societe_account print ''; print ''; print ''; } diff --git a/htdocs/takepos/admin/other.php b/htdocs/takepos/admin/other.php index e5114a446bd..64088473c69 100644 --- a/htdocs/takepos/admin/other.php +++ b/htdocs/takepos/admin/other.php @@ -95,9 +95,9 @@ print ''; $url = 'https://www.dolistore.com/45-pos'; print ''."\n"; -print ''; +print ''; print ''; -print ''; +print ''; print ''; print "
    '.$langs->trans("ComposedProduct").''; diff --git a/htdocs/product/inventory/card.php b/htdocs/product/inventory/card.php index 91edba380cd..1f036e1fa3c 100644 --- a/htdocs/product/inventory/card.php +++ b/htdocs/product/inventory/card.php @@ -109,6 +109,7 @@ if ($reshook < 0) { } if (empty($reshook)) { + $savaction = $action; $error = 0; $backurlforlist = DOL_URL_ROOT.'/product/inventory/list.php'; @@ -152,6 +153,12 @@ if (empty($reshook)) { $autocopy = 'MAIN_MAIL_AUTOCOPY_INVENTORY_TO'; $trackid = 'stockinv'.$object->id; include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php'; + + if (!$error && $savaction == 'confirm_validate' && $action == '' && $object->id > 0) { + // Switch to the tab inventory + header("Location: ".DOL_URL_ROOT.'/product/inventory/inventory.php?id='.$object->id); + exit; + } } diff --git a/htdocs/product/inventory/class/inventory.class.php b/htdocs/product/inventory/class/inventory.class.php index 57abc333a58..b972e44245b 100644 --- a/htdocs/product/inventory/class/inventory.class.php +++ b/htdocs/product/inventory/class/inventory.class.php @@ -59,10 +59,10 @@ class Inventory extends CommonObject */ public $picto = 'inventory'; - const STATUS_DRAFT = 0; - const STATUS_VALIDATED = 1; - const STATUS_RECORDED = 2; - const STATUS_CANCELED = 9; + const STATUS_DRAFT = 0; // Draft + const STATUS_VALIDATED = 1; // Inventory is in process + const STATUS_RECORDED = 2; // Inventory is finisged. Stock movement has been recorded. + const STATUS_CANCELED = 9; // Canceled /** * 'type' field format ('integer', 'integer:ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter]]', 'sellist:TableName:LabelFieldName[:KeyFieldName[:KeyFieldParent[:Filter]]]', 'varchar(x)', 'double(24,8)', 'real', 'price', 'text', 'text:none', 'html', 'date', 'datetime', 'timestamp', 'duration', 'mail', 'phone', 'url', 'password') @@ -101,8 +101,7 @@ class Inventory extends CommonObject 'title' => array('type'=>'varchar(255)', 'label'=>'Label', 'visible'=>1, 'enabled'=>1, 'position'=>25, 'css'=>'minwidth300', 'csslist'=>'tdoverflowmax200'), 'fk_warehouse' => array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php', 'label'=>'Warehouse', 'visible'=>1, 'enabled'=>1, 'position'=>30, 'index'=>1, 'help'=>'InventoryForASpecificWarehouse', 'picto'=>'stock', 'css'=>'minwidth300 maxwidth500 widthcentpercentminusx', 'csslist'=>'tdoverflowmax200'), 'fk_product' => array('type'=>'integer:Product:product/class/product.class.php', 'label'=>'Product', 'visible'=>1, 'enabled'=>1, 'position'=>32, 'index'=>1, 'help'=>'InventoryForASpecificProduct', 'picto'=>'product', 'css'=>'minwidth300 maxwidth500 widthcentpercentminusx', 'csslist'=>'tdoverflowmax200'), - 'date_inventory' => array('type'=>'date', 'label'=>'DateValue', 'visible'=>1, 'enabled'=>1, 'position'=>35), - + 'date_inventory' => array('type'=>'date', 'label'=>'DateValue', 'visible'=>1, 'enabled'=>'$conf->global->STOCK_INVENTORY_ADD_A_VALUE_DATE', 'position'=>35), // This date is not used so disabled by default. 'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>500), 'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>501), 'date_validation' => array('type'=>'datetime', 'label'=>'DateValidation', 'visible'=>-2, 'enabled'=>1, 'position'=>502), @@ -368,7 +367,7 @@ class Inventory extends CommonObject } /** - * Set to Recorded + * Set to inventory to status "Closed". It means all stock movements were recorded. * * @param User $user User that creates * @param bool $notrigger false=launch triggers after, true=disable triggers @@ -616,11 +615,11 @@ class Inventory extends CommonObject $labelStatus = array(); $labelStatus[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv('Draft'); - $labelStatus[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv('Validated').' ('.$langs->transnoentitiesnoconv('Started').')'; + $labelStatus[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv('Validated').' ('.$langs->transnoentitiesnoconv('InventoryStartedShort').')'; $labelStatus[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv('Canceled'); $labelStatus[self::STATUS_RECORDED] = $langs->transnoentitiesnoconv('Closed'); $labelStatusShort[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv('Draft'); - $labelStatusShort[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv('Started'); + $labelStatusShort[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv('InventoryStartedShort'); $labelStatusShort[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv('Canceled'); $labelStatusShort[self::STATUS_RECORDED] = $langs->transnoentitiesnoconv('Closed'); diff --git a/htdocs/product/inventory/inventory.php b/htdocs/product/inventory/inventory.php index 9a4d61209ba..ce657f1c9d6 100644 --- a/htdocs/product/inventory/inventory.php +++ b/htdocs/product/inventory/inventory.php @@ -310,20 +310,22 @@ $help_url = ''; llxHeader('', $langs->trans('Inventory'), $help_url); -// Disable button Generate movement if data were not saved +// Disable button Generate movement if data were modified and not saved print ''; @@ -639,12 +640,14 @@ if ($object->id > 0) { //Call method to undo changes in real qty print ''; @@ -667,7 +670,7 @@ if ($object->id > 0) { print ''; } print ''.$langs->trans("ExpectedQty").''; + print ''; print $form->textwithpicto($langs->trans("RealQty"), $langs->trans("InventoryRealQtyHelp")); print ''; + print ''; print ''; print ''; + print ''; if ($object->status == $object::STATUS_VALIDATED) { $qty_view = GETPOST("id_".$obj->rowid) && price2num(GETPOST("id_".$obj->rowid), 'MS') >= 0 ? GETPOST("id_".$obj->rowid) : $obj->qty_view; - if (!$hasinput && $qty_view !== null && $obj->qty_stock != $qty_view) { + + //if (!$hasinput && $qty_view !== null && $obj->qty_stock != $qty_view) { + if ($qty_view != '') { $hasinput = true; } + print ''; + print img_picto('', 'eraser', 'class="opacitymedium"'); + print ''; print ''; print ''; - print '  '; print ''.img_delete().''; print '
    '; diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index a5e24312ded..8eefd77e746 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -1591,7 +1591,7 @@ if ($source == 'member' || $source == 'membersubscription') { print ' ('.$langs->trans("ToComplete"); } if (!empty($conf->global->MEMBER_EXT_URL_SUBSCRIPTION_INFO)) { - print ' - '.$langs->trans("SeeHere").''; + print ' - '.$langs->trans("SeeHere").''; } if (empty($conf->global->MEMBER_NEWFORM_AMOUNT)) { print ')'; @@ -1752,7 +1752,7 @@ if ($source == 'donation') { print ' ('.$langs->trans("ToComplete"); } if (!empty($conf->global->MEMBER_EXT_URL_SUBSCRIPTION_INFO)) { - print ' - '.$langs->trans("SeeHere").''; + print ' - '.$langs->trans("SeeHere").''; } if (empty($conf->global->MEMBER_NEWFORM_AMOUNT)) { print ')'; diff --git a/htdocs/public/test/test_csrf.php b/htdocs/public/test/test_csrf.php index 1c23dc7070a..c66ac19c423 100644 --- a/htdocs/public/test/test_csrf.php +++ b/htdocs/public/test/test_csrf.php @@ -5,7 +5,7 @@ This is a form to test if a CSRF exists into a Dolibarr page.

    -- Change url to send request to into this file (server B, hard coded page)
    +- Change url to send request to into this file (URL to a hard coded page on a server B)
    - Open this form into a virtual server A.
    - Send the request to the virtual server B by clicking submit.
    - Check that Anticsrf protection is triggered.
    diff --git a/htdocs/reception/card.php b/htdocs/reception/card.php index 63eda493c9a..f84b8bd4d6c 100644 --- a/htdocs/reception/card.php +++ b/htdocs/reception/card.php @@ -112,9 +112,6 @@ include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be includ // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('receptioncard', 'globalcard')); -$permissiondellink = $user->rights->reception->creer; // Used by the include of actions_dellink.inc.php -//var_dump($object->lines[0]->detail_batch); - $date_delivery = dol_mktime(GETPOST('date_deliveryhour', 'int'), GETPOST('date_deliverymin', 'int'), 0, GETPOST('date_deliverymonth', 'int'), GETPOST('date_deliveryday', 'int'), GETPOST('date_deliveryyear', 'int')); if ($id > 0 || !empty($ref)) { @@ -142,9 +139,10 @@ if ($user->socid) { $socid = $user->socid; } -if ($origin == 'reception') { +if (!empty($conf->reception->enabled) || $origin == 'reception' || empty($origin)) { $result = restrictedArea($user, 'reception', $id); } else { + // We do not use the reception module, so we test permission on the supplier orders if ($origin == 'supplierorder' || $origin == 'order_supplier') { $result = restrictedArea($user, 'fournisseur', $origin_id, 'commande_fournisseur', 'commande'); } elseif (empty($user->rights->{$origin}->lire) && empty($user->rights->{$origin}->read)) { @@ -152,6 +150,20 @@ if ($origin == 'reception') { } } +if (!empty($conf->reception->enabled)) { + $permissiontoread = $user->rights->reception->lire; + $permissiontoadd = $user->rights->reception->creer; + $permissiondellink = $user->rights->reception->creer; // Used by the include of actions_dellink.inc.php + $permissiontovalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->reception->creer)) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->reception->reception_advance->validate))); + $permissiontodelete = $user->rights->reception->supprimer; +} else { + $permissiontoread = $user->rights->fournisseur->commande->receptionner; + $permissiontoadd = $user->rights->fournisseur->commande->receptionner; + $permissiondellink = $user->rights->fournisseur->commande->receptionner; // Used by the include of actions_dellink.inc.php + $permissiontovalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->fournisseur->commande->receptionner)) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->fournisseur->commande_advance->check))); + $permissiontodelete = $user->rights->fournisseur->commande->receptionner; +} + /* * Actions @@ -171,12 +183,12 @@ if (empty($reshook)) { include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php'; // Must be include, not include_once // Reopen - if ($action == 'reopen' && $user->rights->reception->creer) { + if ($action == 'reopen' && $permissiontoadd) { $result = $object->reOpen(); } // Confirm back to draft status - if ($action == 'modif' && $user->rights->reception->creer) { + if ($action == 'modif' && $permissiontoadd) { $result = $object->setDraft($user); if ($result >= 0) { // Define output language @@ -201,11 +213,11 @@ if (empty($reshook)) { } // Set incoterm - if ($action == 'set_incoterms' && !empty($conf->incoterm->enabled)) { + if ($action == 'set_incoterms' && !empty($conf->incoterm->enabled) && $permissiontoadd) { $result = $object->setIncoterms(GETPOST('incoterm_id', 'int'), GETPOST('location_incoterms', 'alpha')); } - if ($action == 'setref_supplier') { + if ($action == 'setref_supplier' && $permissiontoadd) { if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } @@ -220,7 +232,7 @@ if (empty($reshook)) { } } - if ($action == 'update_extras') { + if ($action == 'update_extras' && $permissiontoadd) { $object->oldcopy = dol_clone($object); // Fill array 'array_options' with data from update form @@ -244,7 +256,7 @@ if (empty($reshook)) { } // Create reception - if ($action == 'add' && $user->rights->reception->creer) { + if ($action == 'add' && $permissiontoadd) { $error = 0; $predef = ''; @@ -405,10 +417,7 @@ if (empty($reshook)) { $_GET["commande_id"] = GETPOST('commande_id', 'int'); $action = 'create'; } - } elseif ($action == 'confirm_valid' && $confirm == 'yes' && - ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->reception->creer)) - || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->reception->reception_advance->validate))) - ) { + } elseif ($action == 'confirm_valid' && $confirm == 'yes' && $permissiontovalidate) { $object->fetch_thirdparty(); $result = $object->valid($user); @@ -440,7 +449,7 @@ if (empty($reshook)) { } } } - } elseif ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->reception->supprimer) { + } elseif ($action == 'confirm_delete' && $confirm == 'yes' && $permissiontodelete) { $result = $object->delete($user); if ($result > 0) { header("Location: ".DOL_URL_ROOT.'/reception/index.php'); @@ -455,7 +464,7 @@ if (empty($reshook)) { if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); }*/ - } elseif ($action == 'setdate_livraison' && $user->rights->reception->creer) { + } elseif ($action == 'setdate_livraison' && $permissiontoadd) { //print "x ".$_POST['liv_month'].", ".$_POST['liv_day'].", ".$_POST['liv_year']; $datedelivery = dol_mktime(GETPOST('liv_hour', 'int'), GETPOST('liv_min', 'int'), 0, GETPOST('liv_month', 'int'), GETPOST('liv_day', 'int'), GETPOST('liv_year', 'int')); @@ -506,7 +515,7 @@ if (empty($reshook)) { } $action = ""; - } elseif ($action == 'builddoc') { + } elseif ($action == 'builddoc' && $permissiontoread) { // Build document // En get ou en post // Save last template used to generate document @@ -532,7 +541,7 @@ if (empty($reshook)) { setEventMessages($object->error, $object->errors, 'errors'); $action = ''; } - } elseif ($action == 'remove_file') { + } elseif ($action == 'remove_file' && $permissiontoadd) { // Delete file in doc form require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; @@ -550,13 +559,13 @@ if (empty($reshook)) { header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id); exit(); } - } elseif ($action == 'classifyclosed') { + } elseif ($action == 'classifyclosed' && $permissiontoread) { $result = $object->setClosed(); if ($result >= 0) { header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id); exit(); } - } elseif ($action == 'deleteline' && !empty($line_id)) { + } elseif ($action == 'deleteline' && !empty($line_id) && $permissiontoread) { // delete a line $lines = $object->lines; $line = new CommandeFournisseurDispatch($db); @@ -579,7 +588,7 @@ if (empty($reshook)) { } else { setEventMessages($line->error, $line->errors, 'errors'); } - } elseif ($action == 'updateline' && $user->rights->reception->creer && GETPOST('save')) { + } elseif ($action == 'updateline' && GETPOST('save') && $permissiontoadd) { // Update a line // Clean parameters $qty = 0; @@ -666,11 +675,11 @@ if (empty($reshook)) { $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref); } } else { - header('Location: '.$_SERVER['PHP_SELF'].'?id='.$object->id); // Pour reaffichage de la fiche en cours d'edition + header('Location: '.$_SERVER['PHP_SELF'].'?id='.$object->id); // To reshow the record we edit exit(); } - } elseif ($action == 'updateline' && $user->rights->reception->creer && GETPOST('cancel', 'alpha') == $langs->trans("Cancel")) { - header('Location: '.$_SERVER['PHP_SELF'].'?id='.$object->id); // Pour reaffichage de la fiche en cours d'edition + } elseif ($action == 'updateline' && $permissiontoadd && GETPOST('cancel', 'alpha') == $langs->trans("Cancel")) { + header('Location: '.$_SERVER['PHP_SELF'].'?id='.$object->id); // To reshow the record we edit exit(); } @@ -1649,7 +1658,14 @@ if ($action == 'create') { } print '
    '.$langs->trans("QtyToReceive").''.$langs->trans("QtyReceived").'
    '; - print $form->editfieldkey("StripeCustomerId", 'key_account', $stripecu, $object, $permissiontowrite, 'string', '', 0, 2, 'socid'); + print $form->editfieldkey("StripeCustomerId", 'key_account', $stripecu, $object, $permissiontoaddupdatepaymentinformation, 'string', '', 0, 2, 'socid'); print ''; - print $form->editfieldval("StripeCustomerId", 'key_account', $stripecu, $object, $permissiontowrite, 'string', '', null, null, '', 2, '', 'socid'); + print $form->editfieldval("StripeCustomerId", 'key_account', $stripecu, $object, $permissiontoaddupdatepaymentinformation, 'string', '', null, null, '', 2, '', 'socid'); if (!empty($conf->stripe->enabled) && $stripecu && $action != 'editkey_account') { $connect = ''; if (!empty($stripeacc)) { @@ -849,14 +851,13 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' } if (!empty($conf->stripe->enabled) && !empty($conf->stripeconnect->enabled) && getDolGlobalInt('MAIN_FEATURES_LEVEL') >= 2) { - $permissiontowrite = $user->rights->societe->creer; $stripesupplieracc = $stripe->getStripeAccount($service, $object->id); // Get Stripe OAuth connect account (no network access here) // Stripe customer key 'cu_....' stored into llx_societe_account print '
    '; - print $form->editfieldkey("StripeConnectAccount", 'key_account_supplier', $stripesupplieracc, $object, $permissiontowrite, 'string', '', 0, 2, 'socid'); + print $form->editfieldkey("StripeConnectAccount", 'key_account_supplier', $stripesupplieracc, $object, $permissiontoaddupdatepaymentinformation, 'string', '', 0, 2, 'socid'); print ''; - print $form->editfieldval("StripeConnectAccount", 'key_account_supplier', $stripesupplieracc, $object, $permissiontowrite, 'string', '', null, null, '', 2, '', 'socid'); + print $form->editfieldval("StripeConnectAccount", 'key_account_supplier', $stripesupplieracc, $object, $permissiontoaddupdatepaymentinformation, 'string', '', null, null, '', 2, '', 'socid'); if (!empty($conf->stripe->enabled) && $stripesupplieracc && $action != 'editkey_account_supplier') { $connect = ''; @@ -1061,7 +1062,7 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' print $hookmanager->resPrint; // Action column print ''; - if ($user->rights->societe->creer) { + if ($permissiontoaddupdatepaymentinformation) { if ($stripecu && empty($companypaymentmodetemp->stripe_card_ref)) { print ''.$langs->trans("CreateCardOnStripe").''; } @@ -1214,7 +1215,7 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' print $hookmanager->resPrint; // Action column print ''; - if ($user->rights->societe->creer) { + if ($permissiontoaddupdatepaymentinformation) { print ''; print img_picto($langs->trans("Delete"), 'delete'); print ''; @@ -1281,14 +1282,15 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' } // List of bank accounts - - $morehtmlright = dolGetButtonTitle($langs->trans('Add'), '', 'fa fa-plus-circle', $_SERVER["PHP_SELF"].'?socid='.$object->id.'&action=create'); + if ($permissiontoaddupdatepaymentinformation) { + $morehtmlright = dolGetButtonTitle($langs->trans('Add'), '', 'fa fa-plus-circle', $_SERVER["PHP_SELF"] . '?socid=' . $object->id . '&action=create'); + } print load_fiche_titre($langs->trans("BankAccounts"), $morehtmlright, 'bank'); $rib_list = $object->get_all_rib(); if (is_array($rib_list)) { - print '
    '; // You can use div-table-responsive-no-min if you dont need reserved height for your table + print '
    '; // You can use div-table-responsive-no-min if you don't need reserved height for your table print ''; print ''; @@ -1448,7 +1450,7 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' // Edit/Delete print ''; print "\n"; print ''; print ''; print '
    '; - if ($user->rights->societe->creer) { + if ($permissiontoaddupdatepaymentinformation) { print ''; print img_picto($langs->trans("Modify"), 'edit'); print ''; @@ -1488,10 +1490,8 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' */ $filedir = $conf->societe->multidir_output[$object->entity].'/'.$object->id; $urlsource = $_SERVER["PHP_SELF"]."?socid=".$object->id; - $genallowed = $user->rights->societe->lire; - $delallowed = $user->rights->societe->creer; - print $formfile->showdocuments('company', $object->id, $filedir, $urlsource, $genallowed, $delallowed, $object->model_pdf, 0, 0, 0, 28, 0, 'entity='.$object->entity, 0, '', $object->default_lang); + print $formfile->showdocuments('company', $object->id, $filedir, $urlsource, $permissiontoread, $permissiontoaddupdatepaymentinformation, $object->model_pdf, 0, 0, 0, 28, 0, 'entity='.$object->entity, 0, '', $object->default_lang); // Show direct download link if (!empty($conf->global->BANK_ACCOUNT_ALLOW_EXTERNAL_DOWNLOAD)) { @@ -1538,7 +1538,7 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' } // Edit BAN -if ($socid && $action == 'edit' && $user->rights->societe->creer) { +if ($socid && $action == 'edit' && $permissiontoaddupdatepaymentinformation) { print dol_get_fiche_head($head, 'rib', $langs->trans("ThirdParty"), 0, 'company'); $linkback = ''.$langs->trans("BackToList").''; @@ -1657,7 +1657,7 @@ if ($socid && $action == 'edit' && $user->rights->societe->creer) { } // Edit Card -if ($socid && $action == 'editcard' && $user->rights->societe->creer) { +if ($socid && $action == 'editcard' && $permissiontoaddupdatepaymentinformation) { print dol_get_fiche_head($head, 'rib', $langs->trans("ThirdParty"), 0, 'company'); $linkback = ''.$langs->trans("BackToList").''; @@ -1700,7 +1700,7 @@ if ($socid && $action == 'editcard' && $user->rights->societe->creer) { // Create BAN -if ($socid && $action == 'create' && $user->rights->societe->creer) { +if ($socid && $action == 'create' && $permissiontoaddupdatepaymentinformation) { print dol_get_fiche_head($head, 'rib', $langs->trans("ThirdParty"), 0, 'company'); $linkback = ''.$langs->trans("BackToList").''; @@ -1815,7 +1815,7 @@ if ($socid && $action == 'create' && $user->rights->societe->creer) { } // Create Card -if ($socid && $action == 'createcard' && $user->rights->societe->creer) { +if ($socid && $action == 'createcard' && $permissiontoaddupdatepaymentinformation) { print dol_get_fiche_head($head, 'rib', $langs->trans("ThirdParty"), 0, 'company'); $linkback = ''.$langs->trans("BackToList").''; @@ -1859,10 +1859,10 @@ if ($socid && $action == 'createcard' && $user->rights->societe->creer) { print $form->buttonsSaveCancel("Add"); } -if ($socid && ($action == 'edit' || $action == 'editcard') && $user->rights->societe->creer) { +if ($socid && ($action == 'edit' || $action == 'editcard') && $permissiontoaddupdatepaymentinformation) { print ''; } -if ($socid && ($action == 'create' || $action == 'createcard') && $user->rights->societe->creer) { +if ($socid && ($action == 'create' || $action == 'createcard') && $permissiontoaddupdatepaymentinformation) { print ''; } diff --git a/htdocs/takepos/admin/bar.php b/htdocs/takepos/admin/bar.php index 794cb47290e..db6d6c8c67d 100644 --- a/htdocs/takepos/admin/bar.php +++ b/htdocs/takepos/admin/bar.php @@ -213,10 +213,10 @@ if (!empty($conf->global->TAKEPOS_BAR_RESTAURANT)) { print ''.$langs->trans("URL").' - '.$langs->trans("CustomerMenu").''.$langs->trans("QR").'
    '; - print ''.$urlwithroot.'/takepos/public/menu.php'; + print ''.$urlwithroot.'/takepos/public/menu.php'; print ''; - print ''; + print ''; print '
    '; } @@ -239,10 +239,10 @@ if (!empty($conf->global->TAKEPOS_BAR_RESTAURANT)) { print $langs->trans("Table")." ".$row['label']; print '
    '; - print "".$urlwithroot."/takepos/public/auto_order.php?key=".dol_encode($row['rowid']).""; + print ''.$urlwithroot."/takepos/public/auto_order.php?key=".dol_encode($row['rowid']).''; print ''; - print ""; + print ''; print '
    '.$langs->trans("DolistorePosCategory").''.$url.''.$url.'
    \n"; @@ -119,9 +119,9 @@ print '
    TakePOS original developers'.$url.''.$url.'
    \n"; diff --git a/htdocs/takepos/admin/receipt.php b/htdocs/takepos/admin/receipt.php index 7da8436fab8..8ba37a69ab3 100644 --- a/htdocs/takepos/admin/receipt.php +++ b/htdocs/takepos/admin/receipt.php @@ -147,7 +147,7 @@ print $langs->trans('TakeposConnectorMethodDescription'); if ($conf->global->TAKEPOS_PRINT_METHOD == "takeposconnector") { print '
    '; - print $langs->trans("URL")." / ".$langs->trans("IPAddress").' ('.$langs->trans("TakeposConnectorNecesary").')'; + print $langs->trans("URL")." / ".$langs->trans("IPAddress").' ('.$langs->trans("TakeposConnectorNecesary").')'; print ' '; } diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 348ba82d9d9..218d2a20be0 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -1455,6 +1455,7 @@ table[summary="list_of_modules"] .fa-cog { .minwidth50imp { min-width: 50px !important; } .minwidth75imp { min-width: 75px !important; } .minwidth100imp { min-width: 100px !important; } + .minwidth125imp { min-width: 125px !important; } .minwidth150imp { min-width: 150px !important; } .minwidth200imp { min-width: 200px !important; } .minwidth250imp { min-width: 250px !important; } @@ -1474,6 +1475,7 @@ table[summary="list_of_modules"] .fa-cog { .minwidth50imp { min-width: 50px !important; } .minwidth75imp { min-width: 75px !important; } .minwidth100imp { min-width: 100px !important; } + .minwidth125imp { min-width: 125px !important; } .minwidth150imp { min-width: 110px !important; } .minwidth200imp { min-width: 110px !important; } .minwidth250imp { min-width: 115px !important; } @@ -2870,7 +2872,7 @@ input.vmenusearchselectcombo[type=text] { a.vmenu:link, a.vmenu:visited, a.vmenu:hover, a.vmenu:active, span.vmenu, span.vsmenu { white-space: nowrap; font-family: ; text-align: ; } a.vmenu:link, a.vmenu:visited, a.vmenu:hover, a.vmenu:active, span.vmenu, span.vmenu:link, span.vmenu:visited, span.vmenu:hover, span.vmenu:active { font-weight: bold; } /* bold = 600, 500 is ko with Edge on 1200x960 */ -font.vmenudisabled { font-family: ; text-align: ; font-weight: bold; color: #aaa; margin-left: 4px; white-space: nowrap; } /* bold = 600, 500 is ko with Edge on 1200x960 */ +span.vmenudisabled, font.vmenudisabled { font-family: ; text-align: ; font-weight: bold; color: #aaa; margin-left: 4px; white-space: nowrap; } /* bold = 600, 500 is ko with Edge on 1200x960 */ a.vmenu:link, a.vmenu:visited { color: var(--colortextbackvmenu); } a.vsmenu:link, a.vsmenu:visited, a.vsmenu:hover, a.vsmenu:active, span.vsmenu { @@ -2879,12 +2881,12 @@ a.vsmenu:link, a.vsmenu:visited, a.vsmenu:hover, a.vsmenu:active, span.vsmenu { color: #202020; margin: 1px 1px 1px 6px; } -font.vsmenudisabled { font-family: ; text-align: ; color: #aaa; } +span.vsmenudisabled, font.vsmenudisabled { font-family: ; text-align: ; color: #aaa; } a.vsmenu:link, a.vsmenu:visited { color: var(--colortextbackvmenu); white-space: nowrap; } -font.vsmenudisabledmargin { margin: 1px 1px 1px 6px; } +span.vsmenudisabledmargin, font.vsmenudisabledmargin { margin: 1px 1px 1px 6px; } li a.vsmenudisabled, li.vsmenudisabled { color: #aaa !important; } a.help:link, a.help:visited, a.help:hover, a.help:active, span.help { text-align: ; color: #aaa; text-decoration: none; } diff --git a/htdocs/theme/md/btn.inc.php b/htdocs/theme/md/btn.inc.php index 1bf0333e574..136af6b273e 100644 --- a/htdocs/theme/md/btn.inc.php +++ b/htdocs/theme/md/btn.inc.php @@ -44,12 +44,20 @@ if (!empty($conf->global->THEME_DARKMODEENABLED)) { /* ============================================================================== */ -div.divButAction { +/*div.divButAction { margin-bottom: 1.4em; -} +}*/ + div.tabsAction > a.butAction, div.tabsAction > a.butActionRefused, div.tabsAction > a.butActionDelete, -div.tabsAction > span.butAction, div.tabsAction > span.butActionRefused, div.tabsAction > span.butActionDelete { +div.tabsAction > span.butAction, div.tabsAction > span.butActionRefused, div.tabsAction > span.butActionDelete, +div.tabsAction > div.divButAction > span.butAction, +div.tabsAction > div.divButAction > span.butActionDelete, +div.tabsAction > div.divButAction > span.butActionRefused, +div.tabsAction > div.divButAction > a.butAction, +div.tabsAction > div.divButAction > a.butActionDelete, +div.tabsAction > div.divButAction > a.butActionRefused { margin-bottom: 1.4em !important; + margin-right: 0px !important; } div.tabsActionNoBottom > a.butAction, div.tabsActionNoBottom > a.butActionRefused { margin-bottom: 0 !important; @@ -81,9 +89,8 @@ span.butAction, span.butActionDelete { display: inline-block; text-align: center; cursor: pointer; - /* color: #fff; */ - /* background: rgb(); */ color: #444; + /* border: 1px solid #aaa; */ /* border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25); */ @@ -251,6 +258,7 @@ span.butActionNewRefused>span.fa, span.butActionNewRefused>span.fa:hover text-align: center; cursor: pointer; color: #999 !important; + border: 1px solid #ccc; box-sizing: border-box; -moz-box-sizing: border-box; @@ -351,7 +359,7 @@ a.btnTitle.btnTitleSelected { } .btnTitle:hover .btnTitle-label{ - color: #ffffff; + color:var(--btncolorborderhover); } div.pagination .btnTitle:hover .btnTitle-label{ color: rgb(); diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 0a8da62bdba..c39bf34d74a 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -657,6 +657,10 @@ input:-webkit-autofill { -webkit-box-shadow: 0 0 0 50px #FBFFEA inset; } +input[type=checkbox], input[type=radio] { + margin: 0 3px 0 3px; +} + /* CSS for placeholder */ .placeholder { color: #ccc; } ::-webkit-input-placeholder { color:#ccc; } @@ -922,6 +926,19 @@ textarea.centpercent { .marginright2 { margin-: 2px; } +.paddingtop { + padding-top: 4px; +} +.paddingtop2 { + padding-top: 2px; +} +.paddingbottom { + padding-bottom: 4px; +} +.paddingbottom2 { + padding-bottom: 2px; +} + .cursordefault { cursor: default; } @@ -1438,6 +1455,7 @@ tr.nobottom td { .minwidth50imp { min-width: 50px !important; } .minwidth75imp { min-width: 75px !important; } .minwidth100imp { min-width: 100px !important; } + .minwidth125imp { min-width: 125px !important; } .minwidth200imp { min-width: 200px !important; } .minwidth250imp { min-width: 250px !important; } .minwidth300imp { min-width: 300px !important; } @@ -1497,6 +1515,7 @@ tr.nobottom td { .minwidth50imp { min-width: 50px !important; } .minwidth75imp { min-width: 75px !important; } .minwidth100imp { min-width: 100px !important; } + .minwidth125imp { min-width: 125px !important; } .minwidth150imp { min-width: 150px !important; } .minwidth200imp { min-width: 200px !important; } .minwidth250imp { min-width: 250px !important; } @@ -1516,6 +1535,7 @@ tr.nobottom td { .minwidth50imp { min-width: 50px !important; } .minwidth75imp { min-width: 70px !important; } .minwidth100imp { min-width: 100px !important; } + .minwidth125imp { min-width: 125px !important; } .minwidth150imp { min-width: 110px !important; } .minwidth200imp { min-width: 110px !important; } .minwidth250imp { min-width: 115px !important; } @@ -1662,6 +1682,7 @@ select.widthcentpercentminusxx, span.widthcentpercentminusxx:not(.select2-select .minwidth50imp { min-width: 50px !important; } .minwidth75imp { min-width: 75px !important; } .minwidth100imp { min-width: 100px !important; } + .minwidth125imp { min-width: 125px !important; } .minwidth150imp { min-width: 110px !important; } .minwidth200imp { min-width: 110px !important; } .minwidth250imp { min-width: 115px !important; } @@ -2903,13 +2924,13 @@ div.vmenu, td.vmenu { .searchform .bordertransp { border: 0; } a.vmenu:link, a.vmenu:visited, a.vmenu:hover, a.vmenu:active, span.vmenu, span.vsmenu { white-space: nowrap; font-size:px; font-family: ; text-align: ; font-weight: bold; } -font.vmenudisabled { font-size:px; font-family: ; text-align: ; font-weight: bold; color: #aaa; margin-left: 4px; white-space: nowrap; } +span.vmenudisabled, font.vmenudisabled { font-size:px; font-family: ; text-align: ; font-weight: bold; color: #aaa; margin-left: 4px; white-space: nowrap; } a.vmenu:link, a.vmenu:visited { color: #; } a.vsmenu:link, a.vsmenu:visited, a.vsmenu:hover, a.vsmenu:active, span.vsmenu { font-size:px; font-family: ; text-align: ; font-weight: normal; color: #202020; margin: 1px 1px 1px 8px; } -font.vsmenudisabled { font-size:px; font-family: ; text-align: ; font-weight: normal; color: #aaa; } +span.vsmenudisabled, font.vsmenudisabled { font-size:px; font-family: ; text-align: ; font-weight: normal; color: #aaa; } a.vsmenu:link, a.vsmenu:visited { color: #; white-space: nowrap; } -font.vsmenudisabledmargin { margin: 1px 1px 1px 8px; } +span.vsmenudisabledmargin, font.vsmenudisabledmargin { margin: 1px 1px 1px 8px; } a.help:link, a.help:visited, a.help:hover, a.help:active, span.help { text-align: ; font-weight: normal; color: #999; text-decoration: none; } @@ -3124,10 +3145,10 @@ div.tabsElem a { } div.tabBar { color: #; - padding-top: 21px; + padding-top: 23px; padding-left: 24px; padding-right: 24px; - padding-bottom: 18px; + padding-bottom: 23px; margin: 0px 0px 18px 0px; -webkit-border-radius: 3px; border-radius: 3px; @@ -3324,18 +3345,7 @@ tr.nocellnopadd td.nobordernopadding, tr.nocellnopadd td.nocellnopadd .smallpaddingimp { padding: 4px !important; } -.nopaddingleft { - padding-: 0px; -} -.nopaddingright { - padding-: 0px; -} -.nopaddingtopimp { - padding-top: 0px !important; -} -.nopaddingbottomimp { - padding-bottom: 0px !important; -} + .notopnoleft { border-collapse: collapse; border: 0px; @@ -3453,7 +3463,7 @@ div.colorback border-left: 1px solid #ccc; } table.liste, table.noborder, table.formdoc, div.noborder { - width: calc(100% - 1px); /* -1 to fix a bug. Without, a scroll appears due to overflow-x: auto; of div-table-responsive */ + width: calc(100% - 2px); /* -2 to fix a bug. Without, a scroll appears due to overflow-x: auto; of div-table-responsive */ border-collapse: separate !important; border-spacing: 0px; diff --git a/htdocs/theme/md/theme_vars.inc.php b/htdocs/theme/md/theme_vars.inc.php index 18869ccb8c6..216a5043111 100644 --- a/htdocs/theme/md/theme_vars.inc.php +++ b/htdocs/theme/md/theme_vars.inc.php @@ -79,10 +79,10 @@ $colorblind_deuteranopes_textWarning = $textWarning; // currently not tested wit // Badges colors $badgePrimary = '#007bff'; $badgeSecondary = '#999999'; +$badgeInfo = '#17a2b8'; $badgeSuccess = '#28a745'; $badgeWarning = '#a37c0d'; // See $textWarning $badgeDanger = '#8c4446'; // See $textDanger -$badgeInfo = '#17a2b8'; $badgeDark = '#343a40'; $badgeLight = '#f8f9fa'; @@ -96,11 +96,13 @@ $colorblind_deuteranopes_badgeDanger = $badgeDanger; // currently not tested * So this badges status uses default value according to theme eldy status img * TODO: use color definition vars above for define badges color status X -> exemple $badgeStatusValidate, $badgeStatusClosed, $badgeStatusActive .... */ -$badgeStatus0 = '#cbd3d3'; -$badgeStatus1 = '#bc9526'; -$badgeStatus2 = '#e6f0f0'; +$badgeStatus0 = '#cbd3d3'; // draft +$badgeStatus1 = '#bc9526'; // validated +$badgeStatus1b = '#bc9526'; // validated +$badgeStatus2 = '#e6f0f0'; // approved $badgeStatus3 = '#bca52b'; -$badgeStatus4 = '#25a580'; +$badgeStatus4 = '#25a580'; // Color ok +$badgeStatus4b = '#25a580'; // Color ok $badgeStatus5 = '#cad2d2'; $badgeStatus6 = '#cad2d2'; $badgeStatus7 = '#277d1e'; diff --git a/htdocs/ticket/class/ticket.class.php b/htdocs/ticket/class/ticket.class.php index 43bb2cd5835..aa59108f523 100644 --- a/htdocs/ticket/class/ticket.class.php +++ b/htdocs/ticket/class/ticket.class.php @@ -492,6 +492,13 @@ class Ticket extends CommonObject } } + if (!$error && ! empty($conf->global->TICKET_ADD_AUTHOR_AS_CONTACT)) { + // add creator as contributor + if ($this->add_contact($user->id, 'CONTRIBUTOR', 'internal') < 0) { + $error++; + } + } + //Update extrafield if (!$error) { $result = $this->insertExtraFields(); diff --git a/htdocs/user/group/card.php b/htdocs/user/group/card.php index 3e1f31602b2..f24c4232a8e 100644 --- a/htdocs/user/group/card.php +++ b/htdocs/user/group/card.php @@ -237,7 +237,7 @@ if (empty($reshook)) { } // Actions to build doc - $upload_dir = $conf->usergroup->dir_output; + $upload_dir = $conf->user->dir_output.'/usergroups'; $permissiontoadd = $user->rights->user->user->creer; include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php'; } @@ -478,7 +478,7 @@ if ($action == 'create') { */ $filename = dol_sanitizeFileName($object->ref); - $filedir = $conf->usergroup->dir_output."/".dol_sanitizeFileName($object->ref); + $filedir = $conf->user->dir_output."/usergroups/".dol_sanitizeFileName($object->ref); $urlsource = $_SERVER["PHP_SELF"]."?id=".$object->id; $genallowed = $user->rights->user->user->creer; $delallowed = $user->rights->user->user->supprimer; diff --git a/htdocs/user/perms.php b/htdocs/user/perms.php index d3ba33a5acf..4571ed48884 100644 --- a/htdocs/user/perms.php +++ b/htdocs/user/perms.php @@ -317,6 +317,19 @@ if ($result) { continue; } + // Special cases + if (!empty($conf->reception->enabled)) { + // The 2 permission in fournisseur modules has been replaced by permissions into reception module + if ($obj->module == 'fournisseur' && $obj->perms == 'commande' && $obj->subperms == 'receptionner') { + $i++; + continue; + } + if ($obj->module == 'fournisseur' && $obj->perms == 'commande_advance' && $obj->subperms == 'check') { + $i++; + continue; + } + } + $objMod = $modules[$obj->module]; // Save field module_position in database if value is wrong diff --git a/htdocs/webservices/admin/index.php b/htdocs/webservices/admin/index.php index eec667c8a74..f70a990ee95 100644 --- a/htdocs/webservices/admin/index.php +++ b/htdocs/webservices/admin/index.php @@ -120,7 +120,7 @@ foreach ($webservices as $name => $right) { continue; } $url = DOL_MAIN_URL_ROOT.'/webservices/server_'.$name.'.php?wsdl'; - print img_picto('', 'globe').' '.$url."
    \n"; + print img_picto('', 'globe').' '.$url."
    \n"; } print '
    '; @@ -132,7 +132,7 @@ foreach ($webservices as $name => $right) { continue; } $url = DOL_MAIN_URL_ROOT.'/webservices/server_'.$name.'.php'; - print img_picto('', 'globe').' '.$url."
    \n"; + print img_picto('', 'globe').' '.$url."
    \n"; } print '
    '; diff --git a/scripts/odt2pdf/odt2pdf.sh b/scripts/odt2pdf/odt2pdf.sh index befdaeedcf5..fb44b2329ab 100755 --- a/scripts/odt2pdf/odt2pdf.sh +++ b/scripts/odt2pdf/odt2pdf.sh @@ -5,13 +5,18 @@ # @copyright GPL License 2019 - Camille Lafitte - cam.lafit@azerttyu.net # # Convert an ODT into a PDF using "native" or "jodconverter" or "pyodconverter" or "unoconv" tool. -# Dolibarr variable MAIN_ODT_AS_PDF must be defined -# to value "native" to call soffice native exporter feature +# Dolibarr variable MAIN_ODT_AS_PDF must be defined ... +# to value "libreoffice" to call soffice native exporter feature (in such a case, this script is useless) # or value "unoconv" to call unoconv CLI tool after ODT generation. # or value "pyodconverter" to call DocumentConverter.py after ODT generation. # or value "jodconverter" to call jodconverter wrapper after ODT generation # or value "/pathto/jodconverter-cli-file.jar" to call jodconverter java tool without wrapper after ODT generation. # Dolibarr variable MAIN_DOL_SCRIPTS_ROOT must be defined to path of script directories (otherwise dolibarr will try to guess). +# +# NOTE: Using this script is depcrecated, you can now convert generated ODT to PDF on the fly by setting the value MAIN_ODT_AS_PDF +# to 'libreoffice'. It requires only soffice (OpenOffice or LibreOffice) installed on server (use apt install soffice libreoffice-common libreoffice-writer). +# If you got this error: javaldx failed! Warning: failed to read path from javaldx with no return to prompt when running soffice --headless -env:UserInstallation=file:"/tmp" --convert-to pdf --outdir xxx ./yyy.odt, +# check that directory defined into env:UserInstallation parameters exists and is writeable. if [ "x$1" == "x" ] diff --git a/test/phpunit/FunctionsLibTest.php b/test/phpunit/FunctionsLibTest.php index 5287b65b0c7..1bf3b6378fb 100644 --- a/test/phpunit/FunctionsLibTest.php +++ b/test/phpunit/FunctionsLibTest.php @@ -1048,13 +1048,19 @@ class FunctionsLibTest extends PHPUnit\Framework\TestCase $this->assertFalse($verifcond, 'Test a false comparison'); $verifcond=verifCond('$conf->facture->enabled'); - $this->assertTrue($verifcond, 'Test that conf property of a module report true when enabled'); + $this->assertTrue($verifcond, 'Test that the conf property of a module reports true when enabled'); $verifcond=verifCond('$conf->moduledummy->enabled'); - $this->assertFalse($verifcond, 'Test that conf property of a module report false when disabled'); + $this->assertFalse($verifcond, 'Test that the conf property of a module reports false when disabled'); + + $verifcond=verifCond(0); + $this->assertFalse($verifcond, 'Test that verifConf(0) return False'); + + $verifcond=verifCond("0"); + $this->assertFalse($verifcond, 'Test that verifConf("0") return False'); $verifcond=verifCond(''); - $this->assertTrue($verifcond); + $this->assertTrue($verifcond, 'Test that verifConf("") return False (special case)'); } /**