From 243fca9a1a956eceacdf9569979f9ee6c9c4de10 Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Tue, 27 Aug 2019 16:12:07 +0200 Subject: [PATCH 01/60] fix event list with description --- htdocs/comm/action/list.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/comm/action/list.php b/htdocs/comm/action/list.php index bd57005b7bf..2ef4c74f765 100644 --- a/htdocs/comm/action/list.php +++ b/htdocs/comm/action/list.php @@ -452,6 +452,7 @@ if ($resql) if (! empty($arrayfields['owner']['checked'])) print ''; if (! empty($arrayfields['c.libelle']['checked'])) print ''; if (! empty($arrayfields['a.label']['checked'])) print ''; + if (! empty($arrayfields['a.note']['checked'])) print ''; if (! empty($arrayfields['a.datep']['checked'])) { print ''; print $form->selectDate($datestart, 'datestart', 0, 0, 1, '', 1, 0); From 1c28086d4be79090366592539aa2ae8f5ccaa967 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Wed, 28 Aug 2019 13:22:54 +0200 Subject: [PATCH 02/60] FIX logout redirect to takepos.php usefull for terminal locked with POS and use standard dolibarr login with addon as U2F --- htdocs/takepos/takepos.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index b7061c0e135..287689c809c 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -47,6 +47,8 @@ if ($setterminal>0) $_SESSION["takeposterminal"]=$setterminal; } +$_SESSION["urlfrom"]='/takepos/takepos.php'; + $langs->loadLangs(array("bills","orders","commercial","cashdesk","receiptprinter")); $categorie = new Categorie($db); From 4cf2c835c6e2d974f3376576073c8f35c4959784 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Wed, 28 Aug 2019 19:48:45 +0200 Subject: [PATCH 03/60] Update logout.php --- htdocs/user/logout.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/user/logout.php b/htdocs/user/logout.php index ae3fbfcbf8f..7c1a81b594c 100644 --- a/htdocs/user/logout.php +++ b/htdocs/user/logout.php @@ -80,6 +80,7 @@ if (session_status() === PHP_SESSION_ACTIVE) // Not sure this is required unset($_SESSION['dol_login']); unset($_SESSION['dol_entity']); +unset($_SESSION['urlfrom']); if (GETPOST('noredirect')) return; header("Location: ".$url); // Default behaviour is redirect to index.php page From c38e29185c6656ba763f52bfa58faa3811833824 Mon Sep 17 00:00:00 2001 From: a-schild Date: Thu, 29 Aug 2019 09:43:49 +0200 Subject: [PATCH 04/60] Fix for #11783 --- .../modules/mailings/thirdparties.modules.php | 92 ++++++++++--------- 1 file changed, 47 insertions(+), 45 deletions(-) diff --git a/htdocs/core/modules/mailings/thirdparties.modules.php b/htdocs/core/modules/mailings/thirdparties.modules.php index 9a30a063ad3..d86ebebbd77 100644 --- a/htdocs/core/modules/mailings/thirdparties.modules.php +++ b/htdocs/core/modules/mailings/thirdparties.modules.php @@ -77,6 +77,51 @@ class mailing_thirdparties extends MailingTargets } else { + $addFilter =""; + $addDescription= ""; + if (isset($_POST["filter_client"]) && $_POST["filter_client"] <> '-1') + { + $addFilter.= " AND s.client=" . $_POST["filter_client"]; + $addDescription= $langs->trans('ProspectCustomer')."="; + if ($_POST["filter_client"] == 0) + { + $addDescription.= $langs->trans('NorProspectNorCustomer'); + } + elseif ($_POST["filter_client"] == 1) + { + $addDescription.= $langs->trans('Customer'); + } + elseif ($_POST["filter_client"] == 2) + { + $addDescription.= $langs->trans('Prospect'); + } + elseif ($_POST["filter_client"] == 3) + { + $addDescription.= $langs->trans('ProspectCustomer'); + } + else + { + $addDescription.= "Unknown status ".$_POST["filter_client"]; + } + } + if (isset($_POST["filter_status"])) + { + if (strlen($addDescription) > 0) + { + $addDescription.= ";"; + } + $addDescription.= $langs->trans("Status")."="; + if ($_POST["filter_status"] == '1') + { + $addFilter.= " AND s.status=1"; + $addDescription.= $langs->trans("Enabled"); + } + else + { + $addFilter.= " AND s.status=0"; + $addDescription.= $langs->trans("Disabled"); + } + } $sql = "SELECT s.rowid as id, s.email as email, s.nom as name, null as fk_contact, null as firstname, c.label as label"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."categorie_societe as cs, ".MAIN_DB_PREFIX."categorie as c"; $sql.= " WHERE s.email <> ''"; @@ -85,6 +130,7 @@ class mailing_thirdparties extends MailingTargets $sql.= " AND cs.fk_soc = s.rowid"; $sql.= " AND c.rowid = cs.fk_categorie"; $sql.= " AND c.rowid='".$this->db->escape($_POST['filter'])."'"; + $sql.= $addFilter; $sql.= " UNION "; $sql.= "SELECT s.rowid as id, s.email as email, s.nom as name, null as fk_contact, null as firstname, c.label as label"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."categorie_fournisseur as cs, ".MAIN_DB_PREFIX."categorie as c"; @@ -94,51 +140,7 @@ class mailing_thirdparties extends MailingTargets $sql.= " AND cs.fk_soc = s.rowid"; $sql.= " AND c.rowid = cs.fk_categorie"; $sql.= " AND c.rowid='".$this->db->escape($_POST['filter'])."'"; - } - - $addDescription= ""; - if (isset($_POST["filter_client"]) && $_POST["filter_client"] <> '-1') - { - $sql.= " AND s.client=" . $_POST["filter_client"]; - $addDescription= $langs->trans('ProspectCustomer')."="; - if ($_POST["filter_client"] == 0) - { - $addDescription.= $langs->trans('NorProspectNorCustomer'); - } - elseif ($_POST["filter_client"] == 1) - { - $addDescription.= $langs->trans('Customer'); - } - elseif ($_POST["filter_client"] == 2) - { - $addDescription.= $langs->trans('Prospect'); - } - elseif ($_POST["filter_client"] == 3) - { - $addDescription.= $langs->trans('ProspectCustomer'); - } - else - { - $addDescription.= "Unknown status ".$_POST["filter_client"]; - } - } - if (isset($_POST["filter_status"])) - { - if (strlen($addDescription) > 0) - { - $addDescription.= ";"; - } - $addDescription.= $langs->trans("Status")."="; - if ($_POST["filter_status"] == '1') - { - $sql.= " AND s.status=1"; - $addDescription.= $langs->trans("Enabled"); - } - else - { - $sql.= " AND s.status=0"; - $addDescription.= $langs->trans("Disabled"); - } + $sql.= $addFilter; } $sql.= " ORDER BY email"; From ad779bc71442fc84141a843d3c696ea5f1035e16 Mon Sep 17 00:00:00 2001 From: a-schild Date: Thu, 29 Aug 2019 09:46:10 +0200 Subject: [PATCH 05/60] Correctly initialize $addDescription in all cases --- htdocs/core/modules/mailings/thirdparties.modules.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/mailings/thirdparties.modules.php b/htdocs/core/modules/mailings/thirdparties.modules.php index d86ebebbd77..10e5f9e93c9 100644 --- a/htdocs/core/modules/mailings/thirdparties.modules.php +++ b/htdocs/core/modules/mailings/thirdparties.modules.php @@ -66,6 +66,7 @@ class mailing_thirdparties extends MailingTargets $cibles = array(); + $addDescription= ""; // Select the third parties from category if (empty($_POST['filter'])) { @@ -78,7 +79,6 @@ class mailing_thirdparties extends MailingTargets else { $addFilter =""; - $addDescription= ""; if (isset($_POST["filter_client"]) && $_POST["filter_client"] <> '-1') { $addFilter.= " AND s.client=" . $_POST["filter_client"]; From 66d21a5e8d433a546f52652252dfef799639a53f Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Thu, 29 Aug 2019 14:12:07 +0200 Subject: [PATCH 06/60] NEW Add constant MAIN_DISABLE_GLOBAL_WORKBOARD to disable workboard in home --- htdocs/index.php | 800 +++++++++++++++++++++++------------------------ 1 file changed, 395 insertions(+), 405 deletions(-) diff --git a/htdocs/index.php b/htdocs/index.php index 691f7793440..07273f1ae42 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -366,484 +366,474 @@ if (empty($user->societe_id) && empty($conf->global->MAIN_DISABLE_GLOBAL_BOXSTAT /* * Dolibarr Working Board with weather */ -$showweather=(empty($conf->global->MAIN_DISABLE_METEO) || $conf->global->MAIN_DISABLE_METEO == 2) ? 1 : 0; +if (empty($conf->global->MAIN_DISABLE_GLOBAL_WORKBOARD)) { + $showweather = (empty($conf->global->MAIN_DISABLE_METEO) || $conf->global->MAIN_DISABLE_METEO == 2) ? 1 : 0; //Array that contains all WorkboardResponse classes to process them -$dashboardlines=array(); + $dashboardlines = array(); // Do not include sections without management permission -require_once DOL_DOCUMENT_ROOT.'/core/class/workboardresponse.class.php'; + require_once DOL_DOCUMENT_ROOT . '/core/class/workboardresponse.class.php'; // Number of actions to do (late) -if (! empty($conf->agenda->enabled) && $user->rights->agenda->myactions->read) -{ - include_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; - $board=new ActionComm($db); - $dashboardlines[$board->element] = $board->load_board($user); -} + if (!empty($conf->agenda->enabled) && $user->rights->agenda->myactions->read) { + include_once DOL_DOCUMENT_ROOT . '/comm/action/class/actioncomm.class.php'; + $board = new ActionComm($db); + $dashboardlines[$board->element] = $board->load_board($user); + } // Number of project opened -if (! empty($conf->projet->enabled) && $user->rights->projet->lire) -{ - include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; - $board=new Project($db); - $dashboardlines[$board->element] = $board->load_board($user); -} + if (!empty($conf->projet->enabled) && $user->rights->projet->lire) { + include_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php'; + $board = new Project($db); + $dashboardlines[$board->element] = $board->load_board($user); + } // Number of tasks to do (late) -if (! empty($conf->projet->enabled) && empty($conf->global->PROJECT_HIDE_TASKS) && $user->rights->projet->lire) -{ - include_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php'; - $board=new Task($db); - $dashboardlines[$board->element] = $board->load_board($user); -} + if (!empty($conf->projet->enabled) && empty($conf->global->PROJECT_HIDE_TASKS) && $user->rights->projet->lire) { + include_once DOL_DOCUMENT_ROOT . '/projet/class/task.class.php'; + $board = new Task($db); + $dashboardlines[$board->element] = $board->load_board($user); + } // Number of commercial proposals opened (expired) -if (! empty($conf->propal->enabled) && $user->rights->propale->lire) -{ - include_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; - $board=new Propal($db); - $dashboardlines[$board->element.'_opened'] = $board->load_board($user, "opened"); - // Number of commercial proposals CLOSED signed (billed) - $dashboardlines[$board->element.'_signed'] = $board->load_board($user, "signed"); -} + if (!empty($conf->propal->enabled) && $user->rights->propale->lire) { + include_once DOL_DOCUMENT_ROOT . '/comm/propal/class/propal.class.php'; + $board = new Propal($db); + $dashboardlines[$board->element . '_opened'] = $board->load_board($user, "opened"); + // Number of commercial proposals CLOSED signed (billed) + $dashboardlines[$board->element . '_signed'] = $board->load_board($user, "signed"); + } // Number of commercial proposals opened (expired) -if (! empty($conf->supplier_proposal->enabled) && $user->rights->supplier_proposal->lire) -{ - include_once DOL_DOCUMENT_ROOT.'/supplier_proposal/class/supplier_proposal.class.php'; - $board=new SupplierProposal($db); - $dashboardlines[$board->element.'_opened'] = $board->load_board($user, "opened"); - // Number of commercial proposals CLOSED signed (billed) - $dashboardlines[$board->element.'_signed'] = $board->load_board($user, "signed"); -} + if (!empty($conf->supplier_proposal->enabled) && $user->rights->supplier_proposal->lire) { + include_once DOL_DOCUMENT_ROOT . '/supplier_proposal/class/supplier_proposal.class.php'; + $board = new SupplierProposal($db); + $dashboardlines[$board->element . '_opened'] = $board->load_board($user, "opened"); + // Number of commercial proposals CLOSED signed (billed) + $dashboardlines[$board->element . '_signed'] = $board->load_board($user, "signed"); + } // Number of customer orders a deal -if (! empty($conf->commande->enabled) && $user->rights->commande->lire) -{ - include_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; - $board=new Commande($db); - $dashboardlines[$board->element] = $board->load_board($user); -} + if (!empty($conf->commande->enabled) && $user->rights->commande->lire) { + include_once DOL_DOCUMENT_ROOT . '/commande/class/commande.class.php'; + $board = new Commande($db); + $dashboardlines[$board->element] = $board->load_board($user); + } // Number of suppliers orders a deal -if (! empty($conf->supplier_order->enabled) && $user->rights->fournisseur->commande->lire) -{ - include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; - $board=new CommandeFournisseur($db); - $dashboardlines[$board->element] = $board->load_board($user); -} + if (!empty($conf->supplier_order->enabled) && $user->rights->fournisseur->commande->lire) { + include_once DOL_DOCUMENT_ROOT . '/fourn/class/fournisseur.commande.class.php'; + $board = new CommandeFournisseur($db); + $dashboardlines[$board->element] = $board->load_board($user); + } // Number of services enabled (delayed) -if (! empty($conf->contrat->enabled) && $user->rights->contrat->lire) -{ - include_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php'; - $board=new Contrat($db); - $dashboardlines[$board->element.'_inactive'] = $board->load_board($user, "inactive"); - // Number of active services (expired) - $dashboardlines[$board->element.'_active'] = $board->load_board($user, "active"); -} + if (!empty($conf->contrat->enabled) && $user->rights->contrat->lire) { + include_once DOL_DOCUMENT_ROOT . '/contrat/class/contrat.class.php'; + $board = new Contrat($db); + $dashboardlines[$board->element . '_inactive'] = $board->load_board($user, "inactive"); + // Number of active services (expired) + $dashboardlines[$board->element . '_active'] = $board->load_board($user, "active"); + } // Number of invoices customers (has paid) -if (! empty($conf->facture->enabled) && $user->rights->facture->lire) -{ - include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; - $board=new Facture($db); - $dashboardlines[$board->element] = $board->load_board($user); -} + if (!empty($conf->facture->enabled) && $user->rights->facture->lire) { + include_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php'; + $board = new Facture($db); + $dashboardlines[$board->element] = $board->load_board($user); + } // Number of supplier invoices (has paid) -if (! empty($conf->supplier_invoice->enabled) && ! empty($user->rights->fournisseur->facture->lire)) -{ - include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; - $board=new FactureFournisseur($db); - $dashboardlines[$board->element] = $board->load_board($user); -} + if (!empty($conf->supplier_invoice->enabled) && !empty($user->rights->fournisseur->facture->lire)) { + include_once DOL_DOCUMENT_ROOT . '/fourn/class/fournisseur.facture.class.php'; + $board = new FactureFournisseur($db); + $dashboardlines[$board->element] = $board->load_board($user); + } // Number of transactions to conciliate -if (! empty($conf->banque->enabled) && $user->rights->banque->lire && ! $user->societe_id) -{ - include_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; - $board=new Account($db); - $nb = $board::countAccountToReconcile(); // Get nb of account to reconciliate - if ($nb > 0) - { - $dashboardlines[$board->element] = $board->load_board($user); - } -} + if (!empty($conf->banque->enabled) && $user->rights->banque->lire && !$user->societe_id) { + include_once DOL_DOCUMENT_ROOT . '/compta/bank/class/account.class.php'; + $board = new Account($db); + $nb = $board::countAccountToReconcile(); // Get nb of account to reconciliate + if ($nb > 0) { + $dashboardlines[$board->element] = $board->load_board($user); + } + } // Number of cheque to send -if (! empty($conf->banque->enabled) && $user->rights->banque->lire && ! $user->societe_id && empty($conf->global->BANK_DISABLE_CHECK_DEPOSIT)) -{ - include_once DOL_DOCUMENT_ROOT.'/compta/paiement/cheque/class/remisecheque.class.php'; - $board=new RemiseCheque($db); - $dashboardlines['RemiseCheque'] = $board->load_board($user); -} + if (!empty($conf->banque->enabled) && $user->rights->banque->lire && !$user->societe_id && empty($conf->global->BANK_DISABLE_CHECK_DEPOSIT)) { + include_once DOL_DOCUMENT_ROOT . '/compta/paiement/cheque/class/remisecheque.class.php'; + $board = new RemiseCheque($db); + $dashboardlines['RemiseCheque'] = $board->load_board($user); + } // Number of foundation members -if (! empty($conf->adherent->enabled) && $user->rights->adherent->lire && ! $user->societe_id) -{ - include_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; - $board=new Adherent($db); - $dashboardlines['Adherent'] = $board->load_board($user); -} + if (!empty($conf->adherent->enabled) && $user->rights->adherent->lire && !$user->societe_id) { + include_once DOL_DOCUMENT_ROOT . '/adherents/class/adherent.class.php'; + $board = new Adherent($db); + $dashboardlines['Adherent'] = $board->load_board($user); + } // Number of expense reports to approve -if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->approve) -{ - include_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; - $board=new ExpenseReport($db); - $dashboardlines['ExpenseReport'] = $board->load_board($user, 'toapprove'); -} + if (!empty($conf->expensereport->enabled) && $user->rights->expensereport->approve) { + include_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php'; + $board = new ExpenseReport($db); + $dashboardlines['ExpenseReport'] = $board->load_board($user, 'toapprove'); + } // Number of expense reports to pay -if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->to_paid) -{ - include_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; - $board=new ExpenseReport($db); - $dashboardlines['ExpenseReport'] = $board->load_board($user, 'topay'); -} + if (!empty($conf->expensereport->enabled) && $user->rights->expensereport->to_paid) { + include_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php'; + $board = new ExpenseReport($db); + $dashboardlines['ExpenseReport'] = $board->load_board($user, 'topay'); + } // Number of holidays to approve -if (! empty($conf->holiday->enabled) && $user->rights->holiday->approve) -{ - include_once DOL_DOCUMENT_ROOT.'/holiday/class/holiday.class.php'; - $board=new Holiday($db); - $dashboardlines['Holiday'] = $board->load_board($user); -} + if (!empty($conf->holiday->enabled) && $user->rights->holiday->approve) { + include_once DOL_DOCUMENT_ROOT . '/holiday/class/holiday.class.php'; + $board = new Holiday($db); + $dashboardlines['Holiday'] = $board->load_board($user); + } -$object=new stdClass(); -$parameters=array(); -$action=''; -$reshook=$hookmanager->executeHooks('addOpenElementsDashboardLine', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks -if ($reshook == 0) { - $dashboardlines = array_merge($dashboardlines, $hookmanager->resArray); -} + $object = new stdClass(); + $parameters = array(); + $action = ''; + $reshook = $hookmanager->executeHooks('addOpenElementsDashboardLine', $parameters, $object, + $action); // Note that $action and $object may have been modified by some hooks + if ($reshook == 0) { + $dashboardlines = array_merge($dashboardlines, $hookmanager->resArray); + } -/* grouping dashboard stats */ -$dashboardgroup = array ( - 'action' => - array ( - 'groupName' => 'Agenda', - 'stats' => array ('action'), - ), - 'project' => - array ( - 'groupName' => 'Projects', - 'stats' => array ('project','project_task'), - ), - 'propal' => - array ( - 'groupName' => 'Proposals', - 'stats' => - array ('propal_opened','propal_signed'), - ), - 'commande' => - array ( - 'groupName' => 'Orders', - 'stats' => - array ('commande'), - ), - 'facture' => - array ( - 'groupName' => 'Invoices', - 'stats' => - array ('facture'), - ), - 'contrat' => - array ( - 'groupName' => 'Contracts', - 'stats' => - array ('contrat_inactive','contrat_active'), - ), - 'supplier_proposal' => - array ( - 'groupName' => 'SupplierProposals', - 'stats' => - array ('supplier_proposal_opened','supplier_proposal_signed'), - ), - 'order_supplier' => - array ( - 'groupName' => 'SuppliersOrders', - 'stats' => - array ('order_supplier'), - ), - 'invoice_supplier' => - array ( - 'groupName' => 'BillsSuppliers', - 'stats' => - array ('invoice_supplier'), - ), - 'bank_account' => - array ( - 'groupName' => 'BankAccount', - 'stats' => - array ('bank_account','RemiseCheque'), - ), - 'Adherent' => - array ( - 'groupName' => 'Members', - 'stats' => - array ('Adherent'), - ), - 'ExpenseReport' => - array ( - 'groupName' => 'ExpenseReport', - 'stats' => - array ('ExpenseReport'), - ), - 'Holiday' => - array ( - 'groupName' => 'Holidays', - 'stats' => - array ('Holiday'), - ), -); + /* grouping dashboard stats */ + $dashboardgroup = array( + 'action' => + array( + 'groupName' => 'Agenda', + 'stats' => array('action'), + ), + 'project' => + array( + 'groupName' => 'Projects', + 'stats' => array('project', 'project_task'), + ), + 'propal' => + array( + 'groupName' => 'Proposals', + 'stats' => + array('propal_opened', 'propal_signed'), + ), + 'commande' => + array( + 'groupName' => 'Orders', + 'stats' => + array('commande'), + ), + 'facture' => + array( + 'groupName' => 'Invoices', + 'stats' => + array('facture'), + ), + 'contrat' => + array( + 'groupName' => 'Contracts', + 'stats' => + array('contrat_inactive', 'contrat_active'), + ), + 'supplier_proposal' => + array( + 'groupName' => 'SupplierProposals', + 'stats' => + array('supplier_proposal_opened', 'supplier_proposal_signed'), + ), + 'order_supplier' => + array( + 'groupName' => 'SuppliersOrders', + 'stats' => + array('order_supplier'), + ), + 'invoice_supplier' => + array( + 'groupName' => 'BillsSuppliers', + 'stats' => + array('invoice_supplier'), + ), + 'bank_account' => + array( + 'groupName' => 'BankAccount', + 'stats' => + array('bank_account', 'RemiseCheque'), + ), + 'Adherent' => + array( + 'groupName' => 'Members', + 'stats' => + array('Adherent'), + ), + 'ExpenseReport' => + array( + 'groupName' => 'ExpenseReport', + 'stats' => + array('ExpenseReport'), + ), + 'Holiday' => + array( + 'groupName' => 'Holidays', + 'stats' => + array('Holiday'), + ), + ); -$object=new stdClass(); -$parameters=array( - 'dashboardgroup' => $dashboardgroup -); -$reshook=$hookmanager->executeHooks('addOpenElementsDashboardGroup', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks -if ($reshook == 0) { - $dashboardgroup = array_merge($dashboardgroup, $hookmanager->resArray); -} + $object = new stdClass(); + $parameters = array( + 'dashboardgroup' => $dashboardgroup + ); + $reshook = $hookmanager->executeHooks('addOpenElementsDashboardGroup', $parameters, $object, + $action); // Note that $action and $object may have been modified by some hooks + if ($reshook == 0) { + $dashboardgroup = array_merge($dashboardgroup, $hookmanager->resArray); + } // Calculate total nb of late -$totallate=$totaltodo=0; + $totallate = $totaltodo = 0; //Remove any invalid response //load_board can return an integer if failed or WorkboardResponse if OK -$valid_dashboardlines=array(); -foreach($dashboardlines as $infoKey => $tmp) -{ - if ($tmp instanceof WorkboardResponse) $valid_dashboardlines[$infoKey] = $tmp; -} + $valid_dashboardlines = array(); + foreach ($dashboardlines as $infoKey => $tmp) { + if ($tmp instanceof WorkboardResponse) { + $valid_dashboardlines[$infoKey] = $tmp; + } + } // We calculate $totallate. Must be defined before start of next loop because it is show in first fetch on next loop -foreach($valid_dashboardlines as $board) -{ - if ($board->nbtodolate > 0) { - $totaltodo += $board->nbtodo; - $totallate += $board->nbtodolate; + foreach ($valid_dashboardlines as $board) { + if ($board->nbtodolate > 0) { + $totaltodo += $board->nbtodo; + $totallate += $board->nbtodolate; + } } -} -$openedDashBoardSize = 'info-box-sm'; // use sm by default -foreach ($dashboardgroup as $dashbordelement){ - if(is_array($dashbordelement['stats']) && count($dashbordelement['stats'])>2){ - $openedDashBoardSize = ''; // use default info box size : big - break; + $openedDashBoardSize = 'info-box-sm'; // use sm by default + foreach ($dashboardgroup as $dashbordelement) { + if (is_array($dashbordelement['stats']) && count($dashbordelement['stats']) > 2) { + $openedDashBoardSize = ''; // use default info box size : big + break; + } } -} -$totalLateNumber = $totallate; -$totallatePercentage = !empty($totaltodo) ? round($totallate / $totaltodo * 100, 2) : 0; -if(!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)) $totallate = $totallatePercentage; + $totalLateNumber = $totallate; + $totallatePercentage = !empty($totaltodo) ? round($totallate / $totaltodo * 100, 2) : 0; + if (!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)) { + $totallate = $totallatePercentage; + } -$boxwork=''; -$boxwork.='
'; -$boxwork.=''."\n"; -$boxwork.=''; -$boxwork.=''; -$boxwork.=''."\n"; + $boxwork = ''; + $boxwork .= '
'; + $boxwork .= '
'.$langs->trans("DolibarrWorkBoard").'
'; -if ($showweather) -{ - if ($totallate > 0) $text=$langs->transnoentitiesnoconv("WarningYouHaveAtLeastOneTaskLate").' ('.$langs->transnoentitiesnoconv("NActionsLate", $totallate.(!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE) ? '%' : '')).')'; - else $text=$langs->transnoentitiesnoconv("NoItemLate"); - $text.='. '.$langs->transnoentitiesnoconv("LateDesc"); - //$text.=$form->textwithpicto('',$langs->trans("LateDesc")); - $options='height="24px" style="float: right"'; - $boxwork.=showWeather($totallate, $text, $options, 'inline-block valignmiddle'); -} -$boxwork.='
' . "\n"; + $boxwork .= ''; + $boxwork .= ''; + $boxwork .= '' . "\n"; // Show dashboard -$nbworkboardempty=0; -$isIntopOpenedDashBoard = array(); -if (!empty($valid_dashboardlines)) -{ - $openedDashBoard = ''; + $nbworkboardempty = 0; + $isIntopOpenedDashBoard = array(); + if (!empty($valid_dashboardlines)) { + $openedDashBoard = ''; - $boxwork.=''; + } else { + $boxwork .= ''; + $boxwork .= ''; + $boxwork .= ''; } - $boxwork .='
'; - $boxwork .='
'; - $boxwork .='
'; - $boxwork .='
'; + $boxwork .= ''; + + $boxwork .= '
' . $langs->trans("DolibarrWorkBoard") . '
'; + if ($showweather) { + if ($totallate > 0) { + $text = $langs->transnoentitiesnoconv("WarningYouHaveAtLeastOneTaskLate") . ' (' . $langs->transnoentitiesnoconv("NActionsLate", + $totallate . (!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE) ? '%' : '')) . ')'; + } else { + $text = $langs->transnoentitiesnoconv("NoItemLate"); + } + $text .= '. ' . $langs->transnoentitiesnoconv("LateDesc"); + //$text.=$form->textwithpicto('',$langs->trans("LateDesc")); + $options = 'height="24px" style="float: right"'; + $boxwork .= showWeather($totallate, $text, $options, 'inline-block valignmiddle'); + } + $boxwork .= '
'; + $boxwork .= '
'; - foreach($dashboardgroup as $groupKey => $groupElement) { - $boards = array(); + foreach ($dashboardgroup as $groupKey => $groupElement) { + $boards = array(); - if(!empty($conf->global->MAIN_DISPLAY_NEW_OPENED_DASH_BOARD) || !empty($conf->global->MAIN_FEATURES_LEVEL)) - { - foreach ($groupElement['stats'] as $infoKey) - { - if(!empty($valid_dashboardlines[$infoKey])) - { - $boards[] = $valid_dashboardlines[$infoKey]; - $isIntopOpenedDashBoard[]=$infoKey; - } - } - } + if (!empty($conf->global->MAIN_DISPLAY_NEW_OPENED_DASH_BOARD) || !empty($conf->global->MAIN_FEATURES_LEVEL)) { + foreach ($groupElement['stats'] as $infoKey) { + if (!empty($valid_dashboardlines[$infoKey])) { + $boards[] = $valid_dashboardlines[$infoKey]; + $isIntopOpenedDashBoard[] = $infoKey; + } + } + } - if(!empty($boards)) - { - $groupName = $langs->trans($groupElement['groupName']); - $groupKeyLowerCase = strtolower($groupKey); + if (!empty($boards)) { + $groupName = $langs->trans($groupElement['groupName']); + $groupKeyLowerCase = strtolower($groupKey); - $openedDashBoard.= '
'."\n"; - $openedDashBoard.= '
'."\n"; - $openedDashBoard.= ' '."\n"; - $openedDashBoard.= '
'."\n"; - $openedDashBoard .= ' '.$groupName.'' . "\n"; + $openedDashBoard .= '
' . "\n"; + $openedDashBoard .= '
' . "\n"; + $openedDashBoard .= ' ' . "\n"; + $openedDashBoard .= '
' . "\n"; + $openedDashBoard .= ' ' . $groupName . '' . "\n"; - foreach($boards as $board) { - if(!empty($board->labelShort)){ - $infoName = ''.$board->labelShort.''; - } - else{ - $infoName = $board->label ; - } + foreach ($boards as $board) { + if (!empty($board->labelShort)) { + $infoName = '' . $board->labelShort . ''; + } else { + $infoName = $board->label; + } - $textLateTitle = $langs->trans("NActionsLate", $board->nbtodolate); - $textLateTitle.= ' ('.$langs->trans("Late").' = '.$langs->trans("DateReference").' > '.$langs->trans("DateToday").' '.(ceil($board->warning_delay) >= 0 ? '+' : '').ceil($board->warning_delay).' '.$langs->trans("days").')'; + $textLateTitle = $langs->trans("NActionsLate", $board->nbtodolate); + $textLateTitle .= ' (' . $langs->trans("Late") . ' = ' . $langs->trans("DateReference") . ' > ' . $langs->trans("DateToday") . ' ' . (ceil($board->warning_delay) >= 0 ? '+' : '') . ceil($board->warning_delay) . ' ' . $langs->trans("days") . ')'; - $textLate = ''; - if($board->nbtodolate>0) - { - $textLate .= ' '; - $textLate .= ' '.$board->nbtodolate; - $textLate .= ''; - } + $textLate = ''; + if ($board->nbtodolate > 0) { + $textLate .= ' '; + $textLate .= ' ' . $board->nbtodolate; + $textLate .= ''; + } - $nbtodClass = ''; - if($board->nbtodo>0){ - $nbtodClass = 'badge badge-info'; - } + $nbtodClass = ''; + if ($board->nbtodo > 0) { + $nbtodClass = 'badge badge-info'; + } - $openedDashBoard .= ' '.$infoName.' : '.$board->nbtodo.''.$textLate.'' . "\n"; + $openedDashBoard .= ' ' . $infoName . ' : ' . $board->nbtodo . '' . $textLate . '' . "\n"; - if ($board->total > 0 && ! empty($conf->global->MAIN_WORKBOARD_SHOW_TOTAL_WO_TAX)){ - $openedDashBoard .= ''.$langs->trans('Total').' : '.price($board->total) .''; - } - } + if ($board->total > 0 && !empty($conf->global->MAIN_WORKBOARD_SHOW_TOTAL_WO_TAX)) { + $openedDashBoard .= '' . $langs->trans('Total') . ' : ' . price($board->total) . ''; + } + } - $openedDashBoard.= '
'."\n"; - $openedDashBoard.= '
'."\n"; - $openedDashBoard.= '
'."\n"; - $openedDashBoard.="\n"; - } - } - - if ($showweather && !empty($isIntopOpenedDashBoard)) - { - $appendClass = $conf->global->MAIN_DISABLE_METEO == 2 ?' hideonsmartphone' : ''; - $weather = getWeatherStatus($totallate); - - $text=''; - if ($totallate > 0) $text=$langs->transnoentitiesnoconv("WarningYouHaveAtLeastOneTaskLate").' ('.$langs->transnoentitiesnoconv("NActionsLate", $totallate.(!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE) ? '%' : '')).')'; - else $text=$langs->transnoentitiesnoconv("NoItemLate"); - $text.='. '.$langs->transnoentitiesnoconv("LateDesc"); - - $weatherDashBoard= '
'."\n"; - $weatherDashBoard.= '
'."\n"; - $weatherDashBoard.= ' '; - $weatherDashBoard.= img_weather('', $weather->level, '', 0, 'valignmiddle width50'); - $weatherDashBoard.= ' '."\n"; - $weatherDashBoard.= '
'."\n"; - $weatherDashBoard.= ' '.$langs->trans('GlobalOpenedElemView').'' . "\n"; - - if($totallatePercentage>0 && !empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)) { - $weatherDashBoard.= ' '.$langs->transnoentitiesnoconv("NActionsLate", price($totallatePercentage).'%').'' . "\n"; - $weatherDashBoard.= ' '.$langs->trans('NActionsLate', $totalLateNumber).'' . "\n"; - } - else{ - $weatherDashBoard.= ' '.$langs->transnoentitiesnoconv("NActionsLate", $totalLateNumber).'' . "\n"; - if($totallatePercentage>0) { - $weatherDashBoard.= ' '.$langs->trans('NActionsLate', price($totallatePercentage).'%').'' . "\n"; - } - } - - $weatherDashBoard.= '
'."\n"; - $weatherDashBoard.= '
'."\n"; - $weatherDashBoard.= '
'."\n"; - $weatherDashBoard.="\n"; - - $openedDashBoard=$weatherDashBoard.$openedDashBoard; - } - - if(!empty($isIntopOpenedDashBoard)) - { - for ($i = 1; $i <= 10; $i++) { - $openedDashBoard .= '
'; - } - } - - $nbworkboardcount=0; - foreach($valid_dashboardlines as $infoKey => $board) - { - if(in_array($infoKey, $isIntopOpenedDashBoard)) { - // skip if info is present on top - continue; - } - - if (empty($board->nbtodo)) $nbworkboardempty++; - $nbworkboardcount++; - - - $textlate = $langs->trans("NActionsLate", $board->nbtodolate); - $textlate.= ' ('.$langs->trans("Late").' = '.$langs->trans("DateReference").' > '.$langs->trans("DateToday").' '.(ceil($board->warning_delay) >= 0 ? '+' : '').ceil($board->warning_delay).' '.$langs->trans("days").')'; - - - $boxwork .='
'; - $boxwork .= '
'; - $boxwork .= ''.$board->img.' '.$board->label.'
'; - $boxwork .= ''.$board->nbtodo.''; - if ($board->total > 0 && !empty($conf->global->MAIN_WORKBOARD_SHOW_TOTAL_WO_TAX)) - { - $boxwork .= ' / '.price($board->total) .''; + $openedDashBoard .= '
' . "\n"; + $openedDashBoard .= '
' . "\n"; + $openedDashBoard .= '
' . "\n"; + $openedDashBoard .= "\n"; + } } - $boxwork .= '
'; - if ($board->nbtodolate > 0) - { - $boxwork .= '
'; - $boxwork .= ''; - //$boxwork .= img_picto($textlate, "warning_white", 'class="valigntextbottom"').''; - $boxwork .= img_picto($textlate, "warning_white", 'class="inline-block hideonsmartphone valigntextbottom"').''; - $boxwork .= ''; - $boxwork .= $board->nbtodolate; - $boxwork .= ''; - $boxwork .= ''; + + if ($showweather && !empty($isIntopOpenedDashBoard)) { + $appendClass = $conf->global->MAIN_DISABLE_METEO == 2 ? ' hideonsmartphone' : ''; + $weather = getWeatherStatus($totallate); + + $text = ''; + if ($totallate > 0) { + $text = $langs->transnoentitiesnoconv("WarningYouHaveAtLeastOneTaskLate") . ' (' . $langs->transnoentitiesnoconv("NActionsLate", + $totallate . (!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE) ? '%' : '')) . ')'; + } else { + $text = $langs->transnoentitiesnoconv("NoItemLate"); + } + $text .= '. ' . $langs->transnoentitiesnoconv("LateDesc"); + + $weatherDashBoard = '
' . "\n"; + $weatherDashBoard .= '
' . "\n"; + $weatherDashBoard .= ' '; + $weatherDashBoard .= img_weather('', $weather->level, '', 0, 'valignmiddle width50'); + $weatherDashBoard .= ' ' . "\n"; + $weatherDashBoard .= '
' . "\n"; + $weatherDashBoard .= ' ' . $langs->trans('GlobalOpenedElemView') . '' . "\n"; + + if ($totallatePercentage > 0 && !empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)) { + $weatherDashBoard .= ' ' . $langs->transnoentitiesnoconv("NActionsLate", + price($totallatePercentage) . '%') . '' . "\n"; + $weatherDashBoard .= ' ' . $langs->trans('NActionsLate', + $totalLateNumber) . '' . "\n"; + } else { + $weatherDashBoard .= ' ' . $langs->transnoentitiesnoconv("NActionsLate", + $totalLateNumber) . '' . "\n"; + if ($totallatePercentage > 0) { + $weatherDashBoard .= ' ' . $langs->trans('NActionsLate', + price($totallatePercentage) . '%') . '' . "\n"; + } + } + + $weatherDashBoard .= '
' . "\n"; + $weatherDashBoard .= '
' . "\n"; + $weatherDashBoard .= '
' . "\n"; + $weatherDashBoard .= "\n"; + + $openedDashBoard = $weatherDashBoard . $openedDashBoard; + } + + if (!empty($isIntopOpenedDashBoard)) { + for ($i = 1; $i <= 10; $i++) { + $openedDashBoard .= '
'; + } + } + + $nbworkboardcount = 0; + foreach ($valid_dashboardlines as $infoKey => $board) { + if (in_array($infoKey, $isIntopOpenedDashBoard)) { + // skip if info is present on top + continue; + } + + if (empty($board->nbtodo)) { + $nbworkboardempty++; + } + $nbworkboardcount++; + + + $textlate = $langs->trans("NActionsLate", $board->nbtodolate); + $textlate .= ' (' . $langs->trans("Late") . ' = ' . $langs->trans("DateReference") . ' > ' . $langs->trans("DateToday") . ' ' . (ceil($board->warning_delay) >= 0 ? '+' : '') . ceil($board->warning_delay) . ' ' . $langs->trans("days") . ')'; + + + $boxwork .= '
'; + $boxwork .= '
'; + $boxwork .= '' . $board->img . ' ' . $board->label . '
'; + $boxwork .= '' . $board->nbtodo . ''; + if ($board->total > 0 && !empty($conf->global->MAIN_WORKBOARD_SHOW_TOTAL_WO_TAX)) { + $boxwork .= ' / ' . price($board->total) . ''; + } $boxwork .= '
'; + if ($board->nbtodolate > 0) { + $boxwork .= ''; + } + $boxwork .= '
'; + $boxwork .= "\n"; } - $boxwork.='
'; - $boxwork .="\n"; + + $boxwork .= '
'; + $boxwork .= '
'; + $boxwork .= '
'; + $boxwork .= '
'; + + $boxwork .= '
'; + $boxwork .= '
'; + $boxwork .= $langs->trans("NoOpenedElementToProcess"); + $boxwork .= '
'; // End table array of working board + $boxwork .= '
'; + + + if (!empty($isIntopOpenedDashBoard)) { + print '
'; + print '
' . $openedDashBoard . '
'; + print '
'; + } - $boxwork .=''; - $boxwork .=''; -} -else -{ - $boxwork.=''; - $boxwork.=''; - $boxwork.=$langs->trans("NoOpenedElementToProcess"); - $boxwork.=''; - $boxwork.=''; } -$boxwork.=''; - -$boxwork.=''; // End table array of working board -$boxwork.=''; - - -if(!empty($isIntopOpenedDashBoard)) { - print '
'; - print '
' . $openedDashBoard . '
'; - print '
'; -} print '
'; From 26e7fad0fff517fe4762f6230318950215bf7b4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traulle=CC=81?= Date: Fri, 30 Aug 2019 23:42:34 +0200 Subject: [PATCH 07/60] Adding SticklerCI to 10.0 branch --- .stickler.yml | 10 ++++++++++ .travis.yml | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 .stickler.yml diff --git a/.stickler.yml b/.stickler.yml new file mode 100644 index 00000000000..d7594b39c4f --- /dev/null +++ b/.stickler.yml @@ -0,0 +1,10 @@ +--- +linters: + phpcs: + standard: 'dev/setup/codesniffer/ruleset.xml' + extensions: 'php' + tab_width: 4 + fixer: true + +fixers: + enable: true \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 63e48a051f0..5bbfaabbdd2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -304,7 +304,7 @@ script: set -e # Exclusions are defined in the ruleset.xml file #phpcs -s -n -p -d memory_limit=-1 --colors --tab-width=4 --standard=dev/setup/codesniffer/ruleset.xml --encoding=utf-8 . - phpcs -s -p -d memory_limit=-1 --extensions=php --colors --tab-width=4 --standard=dev/setup/codesniffer/ruleset.xml --encoding=utf-8 --runtime-set ignore_warnings_on_exit true . + if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then phpcs -s -p -d memory_limit=-1 --extensions=php --colors --tab-width=4 --standard=dev/setup/codesniffer/ruleset.xml --encoding=utf-8 --runtime-set ignore_warnings_on_exit true .; fi set +e echo From 8ba5387864bf9fb6ff335beb197b1743cdb7d170 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traulle=CC=81?= Date: Fri, 30 Aug 2019 23:45:33 +0200 Subject: [PATCH 08/60] Replace tabs by spaces --- .stickler.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.stickler.yml b/.stickler.yml index d7594b39c4f..b68804448b2 100644 --- a/.stickler.yml +++ b/.stickler.yml @@ -1,10 +1,10 @@ --- linters: - phpcs: - standard: 'dev/setup/codesniffer/ruleset.xml' - extensions: 'php' - tab_width: 4 - fixer: true + phpcs: + standard: 'dev/setup/codesniffer/ruleset.xml' + extensions: 'php' + tab_width: 4 + fixer: true fixers: - enable: true \ No newline at end of file + enable: true From 8f1fba6775bdf421a7c37f5c5c69ce9eaae459ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traulle=CC=81?= Date: Fri, 30 Aug 2019 23:56:52 +0200 Subject: [PATCH 09/60] Fix #11682 Missing origin object ref and thirdparty ref in future bank entries --- htdocs/compta/bank/treso.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index 5a4374f47dd..10b366f0b9c 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -267,9 +267,9 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) $parameters = array('obj' => $obj); $reshook = $hookmanager->executeHooks('moreFamily', $parameters, $object, $action); // Note that $action and $object may have been modified by hook if(empty($reshook)){ - $ref = isset($hookmanager->resArray['ref']) ? $hookmanager->resArray['ref'] : ''; - $refcomp = isset($hookmanager->resArray['refcomp']) ? $hookmanager->resArray['refcomp'] : ''; - $paiement = isset($hookmanager->resArray['paiement']) ? $hookmanager->resArray['paiement'] : 0; + $ref = isset($hookmanager->resArray['ref']) ? $hookmanager->resArray['ref'] : $ref; + $refcomp = isset($hookmanager->resArray['refcomp']) ? $hookmanager->resArray['refcomp'] : $refcomp; + $paiement = isset($hookmanager->resArray['paiement']) ? $hookmanager->resArray['paiement'] : $paiement; } $total_ttc = $obj->total_ttc; From 237c29d4283eb9bcbe0417a9f89527b6b96ffd00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traulle=CC=81?= Date: Sat, 31 Aug 2019 00:07:14 +0200 Subject: [PATCH 10/60] FIX #11427 require product class Fixes POST /supplierinvoices REST API endpoint --- htdocs/fourn/class/fournisseur.facture.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index f8e9dbcdbd1..86fe84f5c4a 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -36,6 +36,7 @@ include_once DOL_DOCUMENT_ROOT.'/core/class/commoninvoice.class.php'; require_once DOL_DOCUMENT_ROOT.'/multicurrency/class/multicurrency.class.php'; +require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; /** * Class to manage suppliers invoices From c84f1baf175ad13c0e33600fe07a3c02385a6a9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traulle=CC=81?= Date: Sat, 31 Aug 2019 00:18:53 +0200 Subject: [PATCH 11/60] Fix #11683 Correct links to create a new product or service from search results --- htdocs/product/list.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 7677e82e1b4..43188c5fe7c 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -450,6 +450,10 @@ if ($resql) if($type == Product::TYPE_SERVICE) $rightskey='service'; if($user->rights->{$rightskey}->creer) { + if ($type === "") { + $newcardbutton.= dolGetButtonTitle($langs->trans('NewProduct'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/product/card.php?action=create&type=0'); + $type = Product::TYPE_SERVICE; + } $label='NewProduct'; if($type == Product::TYPE_SERVICE) $label='NewService'; $newcardbutton.= dolGetButtonTitle($langs->trans($label), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/product/card.php?action=create&type='.$type); From 7dc36846620efcb3fb8066faa5e2e05e4c0a27ba Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Mon, 2 Sep 2019 09:41:30 +0200 Subject: [PATCH 12/60] fix bad substitution for extrafields type checkbox --- htdocs/core/class/commondocgenerator.class.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php index fadd0c02fde..c296411e35d 100644 --- a/htdocs/core/class/commondocgenerator.class.php +++ b/htdocs/core/class/commondocgenerator.class.php @@ -766,10 +766,20 @@ abstract class CommonDocGenerator //Add value to store price with currency $array_to_fill=array_merge($array_to_fill, array($array_key.'_options_'.$key.'_currency' => $object->array_options['options_'.$key.'_currency'])); } - elseif($extrafields->attribute_type[$key] == 'select' || $extrafields->attribute_type[$key] == 'checkbox') + elseif($extrafields->attribute_type[$key] == 'select') { $object->array_options['options_'.$key] = $extrafields->attribute_param[$key]['options'][$object->array_options['options_'.$key]]; } + elseif($extrafields->attribute_type[$key] == 'checkbox') { + $valArray=explode(',', $object->array_options['options_'.$key]); + $output=array(); + foreach($extrafields->attribute_param[$key]['options'] as $keyopt=>$valopt) { + if (in_array($keyopt, $valArray)) { + $output[]=$valopt; + } + } + $object->array_options['options_'.$key] = implode(', ', $output); + } elseif($extrafields->attribute_type[$key] == 'date') { if (strlen($object->array_options['options_'.$key])>0) From c8bfc7441e34cf2ae7ab0cbf2f70a2c99baaa75b Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Mon, 2 Sep 2019 09:44:59 +0200 Subject: [PATCH 13/60] fix avoid error message Divided By 0 --- htdocs/core/class/commondocgenerator.class.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php index fadd0c02fde..c9865cffe59 100644 --- a/htdocs/core/class/commondocgenerator.class.php +++ b/htdocs/core/class/commondocgenerator.class.php @@ -497,8 +497,16 @@ abstract class CommonDocGenerator $resarray['object_total_up'] = $totalUp; $resarray['object_total_up_locale'] = price($resarray['object_total_up'], 0, $outputlangs); if (method_exists($object, 'getTotalDiscount')) { - $resarray['object_total_discount'] = round(100 / $totalUp * $object->getTotalDiscount(), 2); + $totalDiscount=$object->getTotalDiscount(); + } else { + $totalDiscount=0; + } + if (!empty($totalUp) && !empty($totalDiscount)) { + $resarray['object_total_discount'] = round(100 / $totalUp * $totalDiscount, 2); $resarray['object_total_discount_locale'] = price($resarray['object_total_discount'], 0, $outputlangs); + } else { + $resarray['object_total_discount']=''; + $resarray['object_total_discount_locale']=''; } } From b45d3ea1a0f8f4033e9c02bca784695c8d3aeef3 Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Mon, 2 Sep 2019 17:38:59 +0200 Subject: [PATCH 14/60] FIX #11804 --- htdocs/ticket/list.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/htdocs/ticket/list.php b/htdocs/ticket/list.php index 2a4195cb07b..26b9756006c 100644 --- a/htdocs/ticket/list.php +++ b/htdocs/ticket/list.php @@ -2,6 +2,7 @@ /* Copyright (C) 2013-2018 Jean-François FERRY * Copyright (C) 2016 Christophe Battarel * Copyright (C) 2018 Regis Houssin + * Copyright (C) 2019 Juanjo Menent * * 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 @@ -210,6 +211,11 @@ $sql.= " FROM ".MAIN_DB_PREFIX.$object->table_element." as t"; if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (t.rowid = ef.fk_object)"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON (t.fk_soc = s.rowid)"; $sql.= " WHERE t.entity IN (".getEntity($object->element).")"; +if ($socid > 0) +{ + $sql.= " AND t.fk_soc = ".$socid; +} + foreach($search as $key => $val) { if ($key == 'fk_statut') From f9df175efc0cc5e82c27de3e98507b1eda95de75 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Mon, 2 Sep 2019 21:26:44 +0200 Subject: [PATCH 15/60] FIX takepos layout clear or focus search fix focus for compatibility with barcode scanner --- htdocs/takepos/takepos.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index b7061c0e135..70add232ed6 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -149,7 +149,7 @@ if(localStorage.hasKeyboard) { function ClearSearch() { console.log("ClearSearch"); $("#search").val(''); - browser->layer == 'classic') { ?> + browser->layout == 'classic') { ?> setFocusOnSearchField(); } From f7430565725dbbd80ddc2bb8cc903fe96ad8639a Mon Sep 17 00:00:00 2001 From: John Botella Date: Tue, 3 Sep 2019 11:15:35 +0200 Subject: [PATCH 16/60] Add missing agenda hook --- htdocs/public/agenda/agendaexport.php | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/htdocs/public/agenda/agendaexport.php b/htdocs/public/agenda/agendaexport.php index a69c940f7e2..33644e7bb72 100644 --- a/htdocs/public/agenda/agendaexport.php +++ b/htdocs/public/agenda/agendaexport.php @@ -95,6 +95,18 @@ if (empty($conf->global->MAIN_AGENDA_XCAL_EXPORTKEY)) exit; } +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array of hooks +$hookmanager->initHooks(array('agendaexport')); + +$reshook = $hookmanager->executeHooks('doActions', $filters); // Note that $action and $object may have been modified by some +if ($reshook < 0){ + if(!empty($hookmanager->errors) && is_array($hookmanager->errors)){ + print '
'.implode('
', $hookmanager->errors).'
'; + }else{ + print '
'.$hookmanager->error.'
'; + } +} + // Check exportkey if (empty($_GET["exportkey"]) || $conf->global->MAIN_AGENDA_XCAL_EXPORTKEY != $_GET["exportkey"]) { @@ -106,8 +118,6 @@ if (empty($_GET["exportkey"]) || $conf->global->MAIN_AGENDA_XCAL_EXPORTKEY != $_ exit; } -// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array of hooks -$hookmanager->initHooks(array('agendaexport')); // Define filename with prefix on filters predica (each predica set must have on cache file) $shortfilename='dolibarrcalendar'; From 42433f3beb220e7569c1a5d60741089e54305c33 Mon Sep 17 00:00:00 2001 From: John Botella Date: Tue, 3 Sep 2019 11:23:27 +0200 Subject: [PATCH 17/60] Fix: hook replace behavior --- htdocs/public/agenda/agendaexport.php | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/htdocs/public/agenda/agendaexport.php b/htdocs/public/agenda/agendaexport.php index 33644e7bb72..dee0e8267ef 100644 --- a/htdocs/public/agenda/agendaexport.php +++ b/htdocs/public/agenda/agendaexport.php @@ -100,22 +100,24 @@ $hookmanager->initHooks(array('agendaexport')); $reshook = $hookmanager->executeHooks('doActions', $filters); // Note that $action and $object may have been modified by some if ($reshook < 0){ + llxHeaderVierge(); if(!empty($hookmanager->errors) && is_array($hookmanager->errors)){ print '
'.implode('
', $hookmanager->errors).'
'; }else{ print '
'.$hookmanager->error.'
'; } -} - -// Check exportkey -if (empty($_GET["exportkey"]) || $conf->global->MAIN_AGENDA_XCAL_EXPORTKEY != $_GET["exportkey"]) -{ - $user->getrights(); - - llxHeaderVierge(); - print '
Bad value for key.
'; llxFooterVierge(); - exit; +} +elseif(empty($reshook)) { + // Check exportkey + if (empty($_GET["exportkey"]) || $conf->global->MAIN_AGENDA_XCAL_EXPORTKEY != $_GET["exportkey"]) { + $user->getrights(); + + llxHeaderVierge(); + print '
Bad value for key.
'; + llxFooterVierge(); + exit; + } } From 0c5859d2bfffdf47219729ee138718a646edd334 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 3 Sep 2019 11:37:25 +0200 Subject: [PATCH 18/60] Update takepos.php --- htdocs/takepos/takepos.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index 70add232ed6..bfe15aadd32 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -349,6 +349,7 @@ function deleteline() { $("#poslines").load("invoice.php?action=deleteline&place="+place+"&idline="+selectedline, function() { //$('#poslines').scrollTop($('#poslines')[0].scrollHeight); }); + ClearSearch(); } function Customer() { From 6996e83390a34384a5e19a2ed033a39a2fa21113 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 3 Sep 2019 11:40:19 +0200 Subject: [PATCH 19/60] Update takepos.php --- htdocs/takepos/takepos.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index bfe15aadd32..fccaa222fcd 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -399,6 +399,7 @@ function New() { $("#poslines").load("invoice.php?action=delete&place="+place, function() { //$('#poslines').scrollTop($('#poslines')[0].scrollHeight); }); + ClearSearch(); } } From 80624c67f4a7085be83103144c8202dc587b4ae1 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 3 Sep 2019 14:48:46 +0200 Subject: [PATCH 20/60] Fix lang in invoice / takepos --- htdocs/takepos/invoice.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 1729e22427c..6ae5429d062 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -37,7 +37,7 @@ require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php'; require_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php'; require_once DOL_DOCUMENT_ROOT . '/core/class/html.form.class.php'; -$langs->loadLangs(array("companies","commercial","bills", "cashdesk")); +$langs->loadLangs(array("companies", "commercial", "bills", "cashdesk", "stocks")); $id = GETPOST('id', 'int'); $action = GETPOST('action', 'alpha'); From a95e02e3f6caacac8766fdf1b9efbf39bfee8255 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 14:52:03 +0200 Subject: [PATCH 21/60] FIX #11789 FIX #11790 --- htdocs/comm/propal/card.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index 7331d7a86e9..5b37242c8ac 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -2535,10 +2535,13 @@ $formquestion = array_merge($formquestion, array( print ''; } - $arrayofinvoiceforpropal = $object->getInvoiceArrayList(); - if ((is_array($arrayofinvoiceforpropal) && count($arrayofinvoiceforpropal) > 0) || empty($conf->global->WORKFLOW_PROPAL_NEED_INVOICE_TO_BE_CLASSIFIED_BILLED)) + if ($usercanclose) { - print ''; + $arrayofinvoiceforpropal = $object->getInvoiceArrayList(); + if ((is_array($arrayofinvoiceforpropal) && count($arrayofinvoiceforpropal) > 0) || empty($conf->global->WORKFLOW_PROPAL_NEED_INVOICE_TO_BE_CLASSIFIED_BILLED)) + { + print ''; + } } } From 17ccb8fa101988c443be52aa28b35967f213c451 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 14:56:13 +0200 Subject: [PATCH 22/60] Fix missing tooltip --- htdocs/comm/propal/card.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index 5b37242c8ac..9bf00cb6a9c 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -2500,7 +2500,7 @@ $formquestion = array_merge($formquestion, array( if ($usercansend) { print ''; } else - print ''; + print ''; } // Create an order @@ -2543,6 +2543,10 @@ $formquestion = array_merge($formquestion, array( print ''; } } + else + { + print ''; + } } // Set accepted/refused From 52a543953c1bf22f2a4c47af8a5ead06c79fca57 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 14:58:54 +0200 Subject: [PATCH 23/60] Fix position of tests --- htdocs/comm/propal/card.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index 9bf00cb6a9c..180f95e2d4e 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -2535,17 +2535,17 @@ $formquestion = array_merge($formquestion, array( print ''; } - if ($usercanclose) + $arrayofinvoiceforpropal = $object->getInvoiceArrayList(); + if ((is_array($arrayofinvoiceforpropal) && count($arrayofinvoiceforpropal) > 0) || empty($conf->global->WORKFLOW_PROPAL_NEED_INVOICE_TO_BE_CLASSIFIED_BILLED)) { - $arrayofinvoiceforpropal = $object->getInvoiceArrayList(); - if ((is_array($arrayofinvoiceforpropal) && count($arrayofinvoiceforpropal) > 0) || empty($conf->global->WORKFLOW_PROPAL_NEED_INVOICE_TO_BE_CLASSIFIED_BILLED)) + if ($usercanclose) { print ''; } - } - else - { - print ''; + else + { + print ''; + } } } From a5aedacb7e69f81f3915acd965fc22d6f2897018 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 3 Sep 2019 16:49:41 +0200 Subject: [PATCH 24/60] Update productbatch.class.php --- htdocs/product/class/productbatch.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/class/productbatch.class.php b/htdocs/product/class/productbatch.class.php index 4b1e5232abb..22077747b95 100644 --- a/htdocs/product/class/productbatch.class.php +++ b/htdocs/product/class/productbatch.class.php @@ -223,7 +223,7 @@ class Productbatch extends CommonObject $sql.= " batch=".(isset($this->batch)?"'".$this->db->escape($this->batch)."'":"null").","; $sql.= " qty=".(isset($this->qty)?$this->qty:"null").","; $sql.= " import_key=".(isset($this->import_key)?"'".$this->db->escape($this->import_key)."'":"null").""; - $sql.= " WHERE rowid=".$this->id." AND tms='".$this->db->idate($this->tms)."'"; + $sql.= " WHERE rowid=".$this->id; $this->db->begin(); From 65fee73b225ca47daa3667369171fff61403790d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 17:31:20 +0200 Subject: [PATCH 25/60] Update treso.php --- htdocs/compta/bank/treso.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index 10b366f0b9c..8ce3370587f 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -264,12 +264,12 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) $paiement = -1*$socialcontribstatic->getSommePaiement(); // Payment already done } - $parameters = array('obj' => $obj); + $parameters = array('obj' => $obj, 'ref' => $ref, 'refcomp' => $refcomp, 'payment' => $paiement); $reshook = $hookmanager->executeHooks('moreFamily', $parameters, $object, $action); // Note that $action and $object may have been modified by hook if(empty($reshook)){ $ref = isset($hookmanager->resArray['ref']) ? $hookmanager->resArray['ref'] : $ref; $refcomp = isset($hookmanager->resArray['refcomp']) ? $hookmanager->resArray['refcomp'] : $refcomp; - $paiement = isset($hookmanager->resArray['paiement']) ? $hookmanager->resArray['paiement'] : $paiement; + $paiement = isset($hookmanager->resArray['payment']) ? $hookmanager->resArray['payment'] : $paiement; } $total_ttc = $obj->total_ttc; From 7c07e64adcf1b121d410644eda4471c3c87c1224 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 17:32:18 +0200 Subject: [PATCH 26/60] Update treso.php --- htdocs/compta/bank/treso.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index 8ce3370587f..5b39e8fd79b 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -269,7 +269,7 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) if(empty($reshook)){ $ref = isset($hookmanager->resArray['ref']) ? $hookmanager->resArray['ref'] : $ref; $refcomp = isset($hookmanager->resArray['refcomp']) ? $hookmanager->resArray['refcomp'] : $refcomp; - $paiement = isset($hookmanager->resArray['payment']) ? $hookmanager->resArray['payment'] : $paiement; + $paiement = isset($hookmanager->resArray['paiement']) ? $hookmanager->resArray['paiement'] : $paiement; } $total_ttc = $obj->total_ttc; From 481a25cb8fc3b8b9bd71a77a6c101573aa8fcbc7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 17:39:19 +0200 Subject: [PATCH 27/60] The hook "moreFamily" must return payment into var "totalpayment" and no more "paiement" (english replace french). --- ChangeLog | 2 +- htdocs/compta/bank/treso.php | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7efaa290bfc..60cb7dd6ecf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -18,7 +18,7 @@ Following changes may create regressions for some external modules, but were nec * The function show_theme() hase been renamed into showSkins() * Rename 'module_part' parameter into 'modulepart' into document APIs, for consistency. * The deprecated method get_OutstandingBill has been removed. You can use getOutstandingBills() instead. -* The hook "moreFamily" must return payment into var "payment" and no more "paiement". +* The hook "moreFamily" must return payment into var "totalpayment" and no more "paiement" (english replace french). diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index 29bc1db3593..ac4c9c767e8 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -213,9 +213,9 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) $i = 0; while ($i < $num) { - $paiement = ''; $ref = ''; $refcomp = ''; + $totalpayment = ''; $obj = array_shift($tab_sqlobj); @@ -236,7 +236,7 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) $societestatic->name = $obj->name; $refcomp=$societestatic->getNomUrl(1, '', 24); - $paiement = -1*$facturefournstatic->getSommePaiement(); // Payment already done + $totalpayment = -1*$facturefournstatic->getSommePaiement(); // Payment already done } } if ($obj->family == 'invoice') @@ -250,9 +250,9 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) $societestatic->name = $obj->name; $refcomp=$societestatic->getNomUrl(1, '', 24); - $paiement = $facturestatic->getSommePaiement(); // Payment already done - $paiement+= $facturestatic->getSumDepositsUsed(); - $paiement+= $facturestatic->getSumCreditNotesUsed(); + $totalpayment = $facturestatic->getSommePaiement(); // Payment already done + $totalpayment+= $facturestatic->getSumDepositsUsed(); + $totalpayment+= $facturestatic->getSumCreditNotesUsed(); } if ($obj->family == 'social_contribution') { @@ -261,19 +261,19 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) $socialcontribstatic->lib=$obj->type; $ref = $socialcontribstatic->getNomUrl(1, 24); - $paiement = -1*$socialcontribstatic->getSommePaiement(); // Payment already done + $totalpayment = -1*$socialcontribstatic->getSommePaiement(); // Payment already done } - $parameters = array('obj' => $obj, 'ref' => $ref, 'refcomp' => $refcomp, 'payment' => $paiement); + $parameters = array('obj' => $obj, 'ref' => $ref, 'refcomp' => $refcomp, 'totalpayment' => $totalpayment); $reshook = $hookmanager->executeHooks('moreFamily', $parameters, $object, $action); // Note that $action and $object may have been modified by hook if(empty($reshook)){ $ref = isset($hookmanager->resArray['ref']) ? $hookmanager->resArray['ref'] : $ref; $refcomp = isset($hookmanager->resArray['refcomp']) ? $hookmanager->resArray['refcomp'] : $refcomp; - $paiement = isset($hookmanager->resArray['paiement']) ? $hookmanager->resArray['paiement'] : $paiement; + $totalpayment = isset($hookmanager->resArray['totalpayment']) ? $hookmanager->resArray['totalpayment'] : $totalpayment; } $total_ttc = $obj->total_ttc; - if ($paiement) $total_ttc = $obj->total_ttc - $paiement; + if ($totalpayment) $total_ttc = $obj->total_ttc - $totalpayment; $solde += $total_ttc; // We discard lines with a remainder to pay to 0 From 0a17e6bfd5adc6bc1bfc4dc3a99c264b6918cb1f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 22:39:24 +0200 Subject: [PATCH 28/60] FIX Several pb in export of documents FIX Must escape shell FIX Must exclude logs and some dirs for compressed backup FIX gzip and bzip2 must use option -f --- htdocs/admin/tools/dolibarr_export.php | 20 +++++++++++---- htdocs/admin/tools/export_files.php | 34 ++++++++++++++++---------- htdocs/core/class/utils.class.php | 24 +++++++++--------- htdocs/core/lib/files.lib.php | 28 +++++++++++++++------ 4 files changed, 70 insertions(+), 36 deletions(-) diff --git a/htdocs/admin/tools/dolibarr_export.php b/htdocs/admin/tools/dolibarr_export.php index c06314daa9a..0bef19dde56 100644 --- a/htdocs/admin/tools/dolibarr_export.php +++ b/htdocs/admin/tools/dolibarr_export.php @@ -50,10 +50,20 @@ if (! $user->admin) if ($action == 'delete') { - $file=$conf->admin->dir_output.'/backup/'.basename(GETPOST('urlfile', 'alpha')); - $ret=dol_delete_file($file, 1); - if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs'); - else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), null, 'errors'); + if (preg_match('/^backup\//', GETPOST('urlfile', 'alpha'))) + { + $file=$conf->admin->dir_output.'/backup/'.basename(GETPOST('urlfile', 'alpha')); + $ret=dol_delete_file($file, 1); + if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs'); + else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), null, 'errors'); + } + else + { + $file=$conf->admin->dir_output.'/documents/'.basename(GETPOST('urlfile', 'alpha')); + $ret=dol_delete_file($file, 1); + if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs'); + else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), null, 'errors'); + } $action=''; } @@ -577,7 +587,7 @@ print "\n"; ?>
-
" id="buttonGo" />

diff --git a/htdocs/admin/tools/export_files.php b/htdocs/admin/tools/export_files.php index c1ddedfea53..4f9e8b933d2 100644 --- a/htdocs/admin/tools/export_files.php +++ b/htdocs/admin/tools/export_files.php @@ -112,21 +112,27 @@ $utils = new Utils($db); if ($compression == 'zip') { - $ret = dol_compress_dir(DOL_DATA_ROOT, $outputdir."/".$file, $compression); + $ret = dol_compress_dir(DOL_DATA_ROOT, $outputdir."/".$file, $compression, '/(\.log|\/temp\/|documents\/admin\/documents\/)/'); if ($ret < 0) { - $errormsg = $langs->trans("ErrorFailedToWriteInDir", $outputfile); + $errormsg = $langs->trans("ErrorFailedToWriteInDir", $outputdir); } } elseif (in_array($compression, array('gz', 'bz'))) { - $file = substr($file, 0, strrpos($file, '.')); + $userlogin = ($user->login ? $user->login : 'unknown'); + + $outputfile = $conf->admin->dir_temp.'/export_files.'.$userlogin.'.out'; // File used with popen method + + $file = substr($file, 0, strrpos($file, '.')); $file .= '.tar'; - $cmd = 'tar -cf '.$outputdir."/".$file." --exclude=documents/admin/documents -C ".DOL_DATA_ROOT." ".DOL_DATA_ROOT."/../documents/"; - exec($cmd, $out, $retval); - //var_dump($cmd, DOL_DATA_ROOT);exit; - - if ($retval != 0) + // We also exclude '/temp/' dir and 'documents/admin/documents' + $cmd = "tar -cf ".$outputdir."/".$file." --exclude-vcs --exclude 'temp' --exclude 'dolibarr.log' --exclude='documents/admin/documents' -C ".dirname(DOL_DATA_ROOT)." ".basename(DOL_DATA_ROOT); + + $result = $utils->executeCLI($cmd, $outputfile); + + $retval = $result['error']; + if ($result['result'] || ! empty($retval)) { $langs->load("errors"); dol_syslog("Documents tar retval after exec=".$retval, LOG_ERR); @@ -136,15 +142,17 @@ elseif (in_array($compression, array('gz', 'bz'))) { if ($compression == 'gz') { - $cmd = "gzip " . $outputdir."/".$file; + $cmd = "gzip -f " . $outputdir."/".$file; } if ($compression == 'bz') { - $cmd = "bzip2 " . $outputdir."/".$file; + $cmd = "bzip2 -f " . $outputdir."/".$file; } - - exec($cmd, $out, $retval); - if ($retval != 0) + + $result = $utils->executeCLI($cmd, $outputfile); + + $retval = $result['error']; + if ($result['result'] || ! empty($retval)) { $errormsg = 'Error '.$compression.' generation return '.$retval; unlink($outputdir."/".$file); diff --git a/htdocs/core/class/utils.class.php b/htdocs/core/class/utils.class.php index f86d6570e5c..86eff6613c1 100644 --- a/htdocs/core/class/utils.class.php +++ b/htdocs/core/class/utils.class.php @@ -316,27 +316,29 @@ class Utils // TODO Replace with executeCLI function if ($execmethod == 1) { - exec($fullcommandclear, $readt, $retval); - $result = $retval; + $output_arr = array(); $retval = null; + exec($fullcommandclear, $output_arr, $retval); if ($retval != 0) { $langs->load("errors"); dol_syslog("Datadump retval after exec=".$retval, LOG_ERR); - $error = 'Error '.$retval; + $errormsg = 'Error '.$retval; $ok=0; } else { $i=0; - if (!empty($readt)) - foreach($readt as $key=>$read) + if (!empty($output_arr)) { - $i++; // output line number - if ($i == 1 && preg_match('/Warning.*Using a password/i', $read)) continue; - fwrite($handle, $read.($execmethod == 2 ? '' : "\n")); - if (preg_match('/'.preg_quote('-- Dump completed').'/i', $read)) $ok=1; - elseif (preg_match('/'.preg_quote('SET SQL_NOTES=@OLD_SQL_NOTES').'/i', $read)) $ok=1; + foreach($output_arr as $key => $read) + { + $i++; // output line number + if ($i == 1 && preg_match('/Warning.*Using a password/i', $read)) continue; + fwrite($handle, $read.($execmethod == 2 ? '' : "\n")); + if (preg_match('/'.preg_quote('-- Dump completed').'/i', $read)) $ok=1; + elseif (preg_match('/'.preg_quote('SET SQL_NOTES=@OLD_SQL_NOTES').'/i', $read)) $ok=1; + } } } } @@ -534,6 +536,7 @@ class Utils if ($execmethod == 1) { + $retval = null; exec($command, $output_arr, $retval); $result = $retval; if ($retval != 0) @@ -545,7 +548,6 @@ class Utils } if ($execmethod == 2) // With this method, there is no way to get the return code, only output { - $ok=0; $handle = fopen($outputfile, 'w+b'); if ($handle) { diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index c6a5cb14426..d2aee3e6a30 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1221,9 +1221,12 @@ function dol_delete_file($file, $disableglob = 0, $nophperrors = 0, $nohook = 0, } } } - else dol_syslog("Failed to remove file ".$filename, LOG_WARNING); - // TODO Failure to remove can be because file was already removed or because of permission - // If error because it does not exists, we should return true, and we should return false if this is a permission problem + else + { + dol_syslog("Failed to remove file ".$filename, LOG_WARNING); + // TODO Failure to remove can be because file was already removed or because of permission + // If error because it does not exists, we should return true, and we should return false if this is a permission problem + } } } else dol_syslog("No files to delete found", LOG_DEBUG); @@ -2062,9 +2065,10 @@ function dol_uncompress($inputfile, $outputdir) * @param string $inputdir Source dir name * @param string $outputfile Target file name (output directory must exists and be writable) * @param string $mode 'zip' + * @param string $excludefiles A regex pattern. For example: '/\.log$|\/temp\//' * @return int <0 if KO, >0 if OK */ -function dol_compress_dir($inputdir, $outputfile, $mode = "zip") +function dol_compress_dir($inputdir, $outputfile, $mode = "zip", $excludefiles = '') { $foundhandler=0; @@ -2095,6 +2099,7 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip") return 1; } else*/ + //if (class_exists('ZipArchive') && ! empty($conf->global->MAIN_USE_ZIPARCHIVE_FOR_ZIP_COMPRESS)) if (class_exists('ZipArchive')) { $foundhandler=1; @@ -2102,6 +2107,13 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip") // Initialize archive object $zip = new ZipArchive(); $result = $zip->open($outputfile, ZipArchive::CREATE | ZipArchive::OVERWRITE); + if (! $result) + { + global $langs, $errormsg; + $langs->load("errors"); + $errormsg=$langs->trans("ErrorFailedToWriteInFile", $outputfile); + return -4; + } // Create recursive directory iterator /** @var SplFileInfo[] $files */ @@ -2118,9 +2130,11 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip") // Get real and relative path for current file $filePath = $file->getRealPath(); $relativePath = substr($filePath, strlen($inputdir) + 1); - - // Add current file to archive - $zip->addFile($filePath, $relativePath); + if (empty($excludefiles) || ! preg_match($excludefiles, $filePath)) + { + // Add current file to archive + $zip->addFile($filePath, $relativePath); + } } } From c8fd4a2385507cd2f4eb27f2b82107902a730892 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 22:48:35 +0200 Subject: [PATCH 29/60] Fix phpcs --- htdocs/index.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/htdocs/index.php b/htdocs/index.php index 5a22dd2e13f..d50b5248fab 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -825,13 +825,11 @@ if (empty($conf->global->MAIN_DISABLE_GLOBAL_WORKBOARD)) { $boxwork .= ''; // End table array of working board $boxwork .= ''; - if (!empty($isIntopOpenedDashBoard)) { print '
'; print '
' . $openedDashBoard . '
'; print '
'; } - } From 5494fed0a0054b7305e1757c4c2cb7119f9ffdb4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 4 Sep 2019 03:48:12 +0200 Subject: [PATCH 30/60] Removed duplicate images --- doc/images/dolibarr_screenshot5_1280x800.png | Bin 43930 -> 0 bytes ....jpg => dolibarr_screenshot5_1920x1080.jpg} | Bin .../dolibarr_screenshot5_1920x1080_a.jpg | Bin 227972 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 doc/images/dolibarr_screenshot5_1280x800.png rename doc/images/{dolibarr_screenshot5_1920x1080_b.jpg => dolibarr_screenshot5_1920x1080.jpg} (100%) delete mode 100644 doc/images/dolibarr_screenshot5_1920x1080_a.jpg diff --git a/doc/images/dolibarr_screenshot5_1280x800.png b/doc/images/dolibarr_screenshot5_1280x800.png deleted file mode 100644 index 92f6dfa521d19ea04c289488345d87704982c95f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43930 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 lQ|zU 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 diff --git a/doc/images/dolibarr_screenshot5_1920x1080_b.jpg b/doc/images/dolibarr_screenshot5_1920x1080.jpg similarity index 100% rename from doc/images/dolibarr_screenshot5_1920x1080_b.jpg rename to doc/images/dolibarr_screenshot5_1920x1080.jpg diff --git a/doc/images/dolibarr_screenshot5_1920x1080_a.jpg b/doc/images/dolibarr_screenshot5_1920x1080_a.jpg deleted file mode 100644 index 1c6e2cbdbdf0c00a5fb4a513e407f9b907fd067c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227972 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 z 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 EEVlz_q{%zuW;! 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 From cabbdfc650a1f2b4f0fe04bf29bab0b3cfc2ee63 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 4 Sep 2019 10:30:05 +0200 Subject: [PATCH 31/60] Fix injection in User-Agent --- htdocs/main.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 19517973882..4738aa90419 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1775,7 +1775,7 @@ function top_menu_user(User $user, Translate $langs) $dropdownBody.= '
'; $dropdownBody.= '
'.$langs->trans("Session").''; - $dropdownBody.= '
'.$langs->trans("IPAddress").': '.$_SERVER["REMOTE_ADDR"]; + $dropdownBody.= '
'.$langs->trans("IPAddress").': '.dol_escape_htmltag($_SERVER["REMOTE_ADDR"]); if (! empty($conf->global->MAIN_MODULE_MULTICOMPANY)) $dropdownBody.= '
'.$langs->trans("ConnectedOnMultiCompany").': '.$conf->entity.' (user entity '.$user->entity.')'; $dropdownBody.= '
'.$langs->trans("AuthenticationMode").': '.$_SESSION["dol_authmode"].(empty($dolibarr_main_demo)?'':' (demo)'); $dropdownBody.= '
'.$langs->trans("ConnectedSince").': '.dol_print_date($user->datelastlogin, "dayhour", 'tzuser'); @@ -1784,7 +1784,7 @@ function top_menu_user(User $user, Translate $langs) $dropdownBody.= '
'.$langs->trans("CurrentMenuManager").': '.$menumanager->name; $langFlag=picto_from_langcode($langs->getDefaultLang()); $dropdownBody.= '
'.$langs->trans("CurrentUserLanguage").': '.($langFlag?$langFlag.' ':'').$langs->getDefaultLang(); - $dropdownBody.= '
'.$langs->trans("Browser").': '.$conf->browser->name.($conf->browser->version?' '.$conf->browser->version:'').' ('.$_SERVER['HTTP_USER_AGENT'].')'; + $dropdownBody.= '
'.$langs->trans("Browser").': '.$conf->browser->name.($conf->browser->version?' '.$conf->browser->version:'').' ('.dol_escape_htmltag($_SERVER['HTTP_USER_AGENT']).')'; $dropdownBody.= '
'.$langs->trans("Layout").': '.$conf->browser->layout; $dropdownBody.= '
'.$langs->trans("Screen").': '.$_SESSION['dol_screenwidth'].' x '.$_SESSION['dol_screenheight']; if ($conf->browser->layout == 'phone') $dropdownBody.= '
'.$langs->trans("Phone").': '.$langs->trans("Yes"); From a3d417a40f791a9f74548781290eab66435d7337 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 4 Sep 2019 11:21:41 +0200 Subject: [PATCH 32/60] Fix can't change approver of a leave request in some cases --- htdocs/holiday/card.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/htdocs/holiday/card.php b/htdocs/holiday/card.php index 87305a19fd4..2207148e4ea 100644 --- a/htdocs/holiday/card.php +++ b/htdocs/holiday/card.php @@ -122,7 +122,7 @@ if ($action == 'create') elseif ($starthalfday == 'afternoon') $halfday=-1; elseif ($endhalfday == 'morning') $halfday=1; - $valideur = GETPOST('valideur'); + $valideur = GETPOST('valideur', 'int'); $description = trim(GETPOST('description')); // If no type @@ -270,8 +270,8 @@ if ($action == 'update' && ! GETPOSTISSET('savevalidator')) // If this is the requestor or has read/write rights if ($cancreate) { - $valideur = $_POST['valideur']; - $description = trim($_POST['description']); + $valideur = GETPOST('valideur', 'int'); + $description = trim(GETPOST('description', 'none')); // If no start date if (empty($_POST['date_debut_'])) { @@ -1297,7 +1297,8 @@ else if (empty($include_users)) print img_warning().' '.$langs->trans("NobodyHasPermissionToValidateHolidays"); else { - $s=$form->select_dolusers($object->fk_validator, "valideur", (($action == 'editvalidator') ? 0 : 1), ($user->admin ? '' : array($user->id)), 0, $include_users); + $arrayofvalidatorstoexclude = (($user->admin || ($user->id != $userRequest->id))? '' : array($user->id)); // Nobody if we are admin or if we are not the user of the leave. + $s=$form->select_dolusers($object->fk_validator, "valideur", (($action == 'editvalidator') ? 0 : 1), $arrayofvalidatorstoexclude, 0, $include_users); print $form->textwithpicto($s, $langs->trans("AnyOtherInThisListCanValidate")); } if ($action == 'editvalidator') From f2f2621da8dae5fcbe9b6a9f2df0341e5c9701e7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 4 Sep 2019 11:33:07 +0200 Subject: [PATCH 33/60] FIX Can't save setup of mailman module --- htdocs/admin/mailman.php | 11 ++++++++++- htdocs/admin/spip.php | 4 +++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/htdocs/admin/mailman.php b/htdocs/admin/mailman.php index 4ee9e214890..a2403315614 100644 --- a/htdocs/admin/mailman.php +++ b/htdocs/admin/mailman.php @@ -158,8 +158,10 @@ $head = mailmanspip_admin_prepare_head(); if (! empty($conf->global->ADHERENT_USE_MAILMAN)) { print '

'; + print ''; + print ''; - dol_fiche_head($head, 'mailman', $langs->trans("Setup"), 0, 'user'); + dol_fiche_head($head, 'mailman', $langs->trans("Setup"), -1, 'user'); //$link=img_picto($langs->trans("Active"),'tick').' '; $link=''; @@ -227,14 +229,21 @@ else if (! empty($conf->global->ADHERENT_USE_MAILMAN)) { print ''; + print ''; print ''; + print $langs->trans("TestSubscribe").'
'; print $langs->trans("EMail").'
'; + print ''; + print '
'; + print ''; print ''; + print $langs->trans("TestUnSubscribe").'
'; print $langs->trans("EMail").'
'; + print '
'; } diff --git a/htdocs/admin/spip.php b/htdocs/admin/spip.php index e0b4b986969..579363395f3 100644 --- a/htdocs/admin/spip.php +++ b/htdocs/admin/spip.php @@ -123,8 +123,10 @@ $head = mailmanspip_admin_prepare_head(); if (! empty($conf->global->ADHERENT_USE_SPIP)) { print '
'; + print ''; + print ''; - dol_fiche_head($head, 'spip', $langs->trans("Setup"), 0, 'user'); + dol_fiche_head($head, 'spip', $langs->trans("Setup"), -1, 'user'); //$link=img_picto($langs->trans("Active"),'tick').' '; $link=''; From 7d5877b8b1982ef06f0e140f56b8a983dc92d2e0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 4 Sep 2019 13:50:10 +0200 Subject: [PATCH 34/60] Doxygen --- htdocs/core/modules/modDebugBar.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/modDebugBar.class.php b/htdocs/core/modules/modDebugBar.class.php index 8d51a102251..b69406ffb57 100644 --- a/htdocs/core/modules/modDebugBar.class.php +++ b/htdocs/core/modules/modDebugBar.class.php @@ -16,7 +16,7 @@ */ /** - * \defgroup debugbar Debug bar + * \defgroup debugbar Module Debug bar * \brief debugbar module descriptor. * * \file htdocs/core/modules/modDebugBar.class.php From 750182f9cdbc5131ee405c656a271a51e0e10882 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 4 Sep 2019 13:54:36 +0200 Subject: [PATCH 35/60] Removed deprecated method actioncomm->add(), use create() instead --- ChangeLog | 2 +- htdocs/comm/action/class/actioncomm.class.php | 14 -------------- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 60cb7dd6ecf..2e0bbf78352 100644 --- a/ChangeLog +++ b/ChangeLog @@ -19,7 +19,7 @@ Following changes may create regressions for some external modules, but were nec * Rename 'module_part' parameter into 'modulepart' into document APIs, for consistency. * The deprecated method get_OutstandingBill has been removed. You can use getOutstandingBills() instead. * The hook "moreFamily" must return payment into var "totalpayment" and no more "paiement" (english replace french). - +* Removed deprecated method actioncomm->add(), use create() instead ***** ChangeLog for 10.0.1 compared to 10.0.0 ***** diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 2caff8d242c..12926f9b360 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -497,20 +497,6 @@ class ActionComm extends CommonObject } } - /** - * Add an action/event into database. - * $this->type_id OR $this->type_code must be set. - * - * @param User $user Object user making action - * @param int $notrigger 1 = disable triggers, 0 = enable triggers - * @return int Id of created event, < 0 if KO - * @deprecated Use create instead - */ - public function add(User $user, $notrigger = 0) - { - return $this->create($user, $notrigger); - } - /** * Load an object from its id and create a new one in database * From 1950952b058f7ce749255ffe4f70db60fbb145c7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 4 Sep 2019 15:11:06 +0200 Subject: [PATCH 36/60] Missing label --- htdocs/core/modules/modTicket.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/core/modules/modTicket.class.php b/htdocs/core/modules/modTicket.class.php index e16b6e87fd0..620c1639901 100644 --- a/htdocs/core/modules/modTicket.class.php +++ b/htdocs/core/modules/modTicket.class.php @@ -19,6 +19,7 @@ /** * \defgroup ticket Module Ticket + * \brief Module for ticket and request management. * \file core/modules/modTicket.class.php * \ingroup ticket * \brief Description and activation file for module Ticket From 7aaf3ac6293d9618f638a68bc43799c767b90d6a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 4 Sep 2019 15:41:09 +0200 Subject: [PATCH 37/60] Typo --- htdocs/install/mysql/tables/llx_user.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/tables/llx_user.sql b/htdocs/install/mysql/tables/llx_user.sql index c82669df7cc..ac29410873a 100644 --- a/htdocs/install/mysql/tables/llx_user.sql +++ b/htdocs/install/mysql/tables/llx_user.sql @@ -36,7 +36,7 @@ create table llx_user pass_encoding varchar(24), pass varchar(128), pass_crypted varchar(128), - pass_temp varchar(128), -- temporary password when asked for forget password or 'hashtoallowreset:YYYMMDDHHMMSS' (where date is max date of validaity) + pass_temp varchar(128), -- temporary password when asked for forget password or 'hashtoallowreset:YYYMMDDHHMMSS' (where date is max date of validity) api_key varchar(128), -- key to use REST API by this user gender varchar(10), civility varchar(6), From 9666200d6b94a6b959d5c0f287f9fafd877404bc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 4 Sep 2019 19:55:15 +0200 Subject: [PATCH 38/60] Enhance error management --- htdocs/core/lib/files.lib.php | 32 ++++++++++++++++++++++++-------- test/phpunit/FilesLibTest.php | 8 +++++--- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 83d7f6f7614..a5f97b3fa3a 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1884,14 +1884,16 @@ function dol_convert_file($fileinput, $ext = 'png', $fileoutput = '', $page = '' /** - * Compress a file + * Compress a file. + * An error string may be returned into parameters. * * @param string $inputfile Source file name * @param string $outputfile Target file name * @param string $mode 'gz' or 'bz' or 'zip' + * @param string $errorstring Error string * @return int <0 if KO, >0 if OK */ -function dol_compress_file($inputfile, $outputfile, $mode = "gz") +function dol_compress_file($inputfile, $outputfile, $mode = "gz", &$errorstring = null) { global $conf; @@ -1916,8 +1918,12 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz") $zip = new ZipArchive; if ($zip->open($outputfile, ZipArchive::CREATE) !== true) { - $errormsg="Failed to open file ".$outputfile."\n"; - dol_syslog("dol_compress_file failure - ".$errormsg, LOG_ERR); + $errorstring="dol_compress_file failure - Failed to open file ".$outputfile."\n"; + dol_syslog($errorstring, LOG_ERR); + + global $errormsg; + $errormsg = $errorstring; + return -6; } @@ -1961,12 +1967,16 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz") { global $errormsg; $errormsg=$archive->errorInfo(true); - dol_syslog("dol_compress_file failure - ".$errormsg, LOG_ERR); + if ($archive->errorCode() == PCLZIP_ERR_WRITE_OPEN_FAIL) { - dol_syslog("dol_compress_file error PCLZIP_ERR_WRITE_OPEN_FAIL", LOG_ERR); + $errorstring = "PCLZIP_ERR_WRITE_OPEN_FAIL"; + dol_syslog("dol_compress_file error - archive->errorCode() = PCLZIP_ERR_WRITE_OPEN_FAIL", LOG_ERR); return -4; } + + $errorstring = "dol_compress_file error archive->errorCode = ".$archive->errorCode()." errormsg=".$errormsg; + dol_syslog("dol_compress_file failure - ".$errormsg, LOG_ERR); return -3; } else @@ -1986,7 +1996,11 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz") } else { - dol_syslog("Try to zip with format ".$mode." with no handler for this format", LOG_ERR); + $errorstring = "Try to zip with format ".$mode." with no handler for this format"; + dol_syslog($errorstring, LOG_ERR); + + global $errormsg; + $errormsg = $errorstring; return -2; } } @@ -1994,8 +2008,10 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz") { global $langs, $errormsg; $langs->load("errors"); - dol_syslog("Failed to open file ".$outputfile, LOG_ERR); $errormsg=$langs->trans("ErrorFailedToWriteInDir"); + + $errorstring = "Failed to open file ".$outputfile; + dol_syslog($errorstring, LOG_ERR); return -1; } } diff --git a/test/phpunit/FilesLibTest.php b/test/phpunit/FilesLibTest.php index cbe6ad948d8..f52b7d21304 100644 --- a/test/phpunit/FilesLibTest.php +++ b/test/phpunit/FilesLibTest.php @@ -409,13 +409,15 @@ class FilesLibTest extends PHPUnit\Framework\TestCase $count=0; dol_delete_dir_recursive($dirout, $count, 1); - $result=dol_compress_file($filein, $fileout, $format); + $errorstring = ''; + + $result=dol_compress_file($filein, $fileout, $format, $errorstring); print __METHOD__." result=".$result."\n"; - $this->assertGreaterThanOrEqual(1, $result); + $this->assertGreaterThanOrEqual(1, $result, "Pb with dol_compress_file ".$errorstring); $result=dol_uncompress($fileout, $dirout); print __METHOD__." result=".join(',', $result)."\n"; - $this->assertEquals(0, count($result)); + $this->assertEquals(0, count($result), "Pb with dol_uncompress_file"); } /** From 12868413bdaefd386e2fb8ac09ba9769cdc04336 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 13:33:49 +0200 Subject: [PATCH 39/60] Doxygen --- htdocs/core/modules/modDebugBar.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/modDebugBar.class.php b/htdocs/core/modules/modDebugBar.class.php index 8d51a102251..b69406ffb57 100644 --- a/htdocs/core/modules/modDebugBar.class.php +++ b/htdocs/core/modules/modDebugBar.class.php @@ -16,7 +16,7 @@ */ /** - * \defgroup debugbar Debug bar + * \defgroup debugbar Module Debug bar * \brief debugbar module descriptor. * * \file htdocs/core/modules/modDebugBar.class.php From 3f121f07ccbd42958aa09edf68ac2a0df51f55d4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 13:38:38 +0200 Subject: [PATCH 40/60] Removed deprecated properties --- htdocs/contact/class/contact.class.php | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index e064b93504d..c73ceaf13ee 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -82,26 +82,11 @@ class Contact extends CommonObject public $civility_id; // In fact we store civility_code public $civility_code; - public $civility; + public $civility; public $address; public $zip; public $town; - /** - * @deprecated - * @see $state_id - */ - public $fk_departement; - /** - * @deprecated - * @see $state_code - */ - public $departement_code; - /** - * @deprecated - * @see $state - */ - public $departement; public $state_id; // Id of department public $state_code; // Code of department public $state; // Label of department From 1828872bd1007d4a248d9617816351ce732a885a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 13:38:38 +0200 Subject: [PATCH 41/60] Removed deprecated properties --- htdocs/contact/class/contact.class.php | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index bae8632e289..18da6bf476d 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -81,26 +81,11 @@ class Contact extends CommonObject public $civility_id; // In fact we store civility_code public $civility_code; - public $civility; + public $civility; public $address; public $zip; public $town; - /** - * @deprecated - * @see $state_id - */ - public $fk_departement; - /** - * @deprecated - * @see $state_code - */ - public $departement_code; - /** - * @deprecated - * @see $state - */ - public $departement; public $state_id; // Id of department public $state_code; // Code of department public $state; // Label of department From 8d5105e29c88cc5a70704c393383ff6923e3df20 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 13:41:29 +0200 Subject: [PATCH 42/60] Remove deprecated field --- htdocs/holiday/class/holiday.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index 66c212ef4c7..d767bcdc691 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -376,7 +376,6 @@ class Holiday extends CommonObject $obj = $this->db->fetch_object($resql); $this->id = $obj->rowid; - $this->rowid = $obj->rowid; // deprecated $this->ref = ($obj->ref?$obj->ref:$obj->rowid); $this->fk_user = $obj->fk_user; $this->date_create = $this->db->jdate($obj->date_create); From f4a7714f82c4940b5fc42e4830f49be8494fe1f0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 13:42:58 +0200 Subject: [PATCH 43/60] Fix bad log --- htdocs/core/lib/files.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index a5f97b3fa3a..0c72fe35fab 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -2089,7 +2089,7 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip", $excludefiles = { $foundhandler=0; - dol_syslog("Try to zip dir ".$inputdir." into ".$outputdir." mode=".$mode); + dol_syslog("Try to zip dir ".$inputdir." into ".$outputfile." mode=".$mode); if (! dol_is_dir(dirname($outputfile)) || ! is_writable(dirname($outputfile))) { From 4a19f510fd8820e3327b6c76151c5ebb30bd2bea Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 13:58:35 +0200 Subject: [PATCH 44/60] Fix scrutinizer reports --- htdocs/contrat/services_list.php | 2 +- htdocs/core/lib/asset.lib.php | 11 ++++++----- htdocs/core/lib/contract.lib.php | 6 ++---- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/htdocs/contrat/services_list.php b/htdocs/contrat/services_list.php index e86433af85d..9371a9ea835 100644 --- a/htdocs/contrat/services_list.php +++ b/htdocs/contrat/services_list.php @@ -705,7 +705,7 @@ while ($i < min($num, $limit)) print ''; if ($obj->cstatut == 0) // If contract is draft, we say line is also draft { - print $contractstatic->LibStatut(0, 5, ($obj->date_fin_validite && $db->jdate($obj->date_fin_validite) < $now)); + print $contractstatic->LibStatut(0, 5); } else { diff --git a/htdocs/core/lib/asset.lib.php b/htdocs/core/lib/asset.lib.php index b9890533a00..8e8b561ac8e 100644 --- a/htdocs/core/lib/asset.lib.php +++ b/htdocs/core/lib/asset.lib.php @@ -48,7 +48,7 @@ function asset_admin_prepare_head() //$this->tabs = array( // 'entity:-tabname:Title:@assets:/asset/mypage.php?id=__ID__' //); // to remove a tab - complete_head_from_modules($conf, $langs, $object, $head, $h, 'assets_admin'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'assets_admin'); $head[$h][0] = DOL_URL_ROOT . '/asset/admin/assets_extrafields.php'; $head[$h][1] = $langs->trans("ExtraFields"); @@ -60,7 +60,7 @@ function asset_admin_prepare_head() $head[$h][2] = 'attributes_type'; $h++; - complete_head_from_modules($conf, $langs, $object, $head, $h, 'assets_admin', 'remove'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'assets_admin', 'remove'); return $head; } @@ -68,11 +68,12 @@ function asset_admin_prepare_head() /** * Prepare admin pages header * + * @param Contrat $object Object related to tabs * @return array head array with tabs */ -function asset_prepare_head() +function asset_prepare_head(Asset $object) { - global $langs, $conf; + global $db, $langs, $conf; $langs->load("assets"); @@ -96,7 +97,7 @@ function asset_prepare_head() require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php'; - $upload_dir = $conf->assets->dir_output . '/' . get_exdir($filename, 2, 0, 1, $object, 'assets'). '/'. dol_sanitizeFileName($object->ref); + $upload_dir = $conf->assets->dir_output . '/' . dol_sanitizeFileName($object->ref); $nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$')); $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/asset/document.php?id='.$object->id; diff --git a/htdocs/core/lib/contract.lib.php b/htdocs/core/lib/contract.lib.php index d1a4a07689e..80609f524d4 100644 --- a/htdocs/core/lib/contract.lib.php +++ b/htdocs/core/lib/contract.lib.php @@ -101,7 +101,7 @@ function contract_prepare_head(Contrat $object) */ function contract_admin_prepare_head() { - global $langs, $conf, $user; + global $langs, $conf; $h = 0; $head = array(); @@ -127,9 +127,7 @@ function contract_admin_prepare_head() $head[$h][2] = 'attributeslines'; $h++; - - complete_head_from_modules($conf, $langs, null, $head, $h, 'contract_admin', 'remove'); - return $head; + return $head; } From f893854986d74ddeae506ae22cd15eb99f53572f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 14:24:13 +0200 Subject: [PATCH 45/60] Fix remove warnings --- htdocs/contact/class/contact.class.php | 2 +- htdocs/core/lib/agenda.lib.php | 6 ++---- htdocs/core/lib/bank.lib.php | 1 - htdocs/core/lib/donation.lib.php | 2 +- htdocs/core/lib/multicurrency.lib.php | 2 +- htdocs/core/lib/ticket.lib.php | 2 +- htdocs/datapolicy/lib/datapolicy.lib.php | 4 +++- htdocs/dav/dav.lib.php | 4 ++-- htdocs/emailcollector/lib/emailcollector.lib.php | 2 ++ htdocs/modulebuilder/template/lib/mymodule_myobject.lib.php | 2 ++ htdocs/product/inventory/lib/inventory.lib.php | 2 +- htdocs/takepos/lib/takepos.lib.php | 4 +++- htdocs/website/lib/websiteaccount.lib.php | 2 ++ 13 files changed, 21 insertions(+), 14 deletions(-) diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index c73ceaf13ee..ebfafa698b7 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -1008,7 +1008,7 @@ class Contact extends CommonObject // Removed extrafields if ((! $error) && (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED))) { // For avoid conflicts if trigger used - $result=$this->deleteExtraFields($this); + $result=$this->deleteExtraFields(); if ($result < 0) $error++; } diff --git a/htdocs/core/lib/agenda.lib.php b/htdocs/core/lib/agenda.lib.php index c6bc31956d6..9316dcbfeb6 100644 --- a/htdocs/core/lib/agenda.lib.php +++ b/htdocs/core/lib/agenda.lib.php @@ -549,15 +549,13 @@ function calendars_prepare_head($param) $h++; - $object=new stdClass(); - // Show more tabs from modules // Entries must be declared in modules descriptor with line // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab // $this->tabs = array('entity:-tabname); to remove a tab - complete_head_from_modules($conf, $langs, $object, $head, $h, 'agenda'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'agenda'); - complete_head_from_modules($conf, $langs, $object, $head, $h, 'agenda', 'remove'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'agenda', 'remove'); return $head; } diff --git a/htdocs/core/lib/bank.lib.php b/htdocs/core/lib/bank.lib.php index f117bc24daf..54d1c491878 100644 --- a/htdocs/core/lib/bank.lib.php +++ b/htdocs/core/lib/bank.lib.php @@ -163,7 +163,6 @@ function bank_admin_prepare_head($object) */ function various_payment_prepare_head($object) { - global $db, $langs, $conf; $h = 0; diff --git a/htdocs/core/lib/donation.lib.php b/htdocs/core/lib/donation.lib.php index 91c41ffcced..7b78ac96b91 100644 --- a/htdocs/core/lib/donation.lib.php +++ b/htdocs/core/lib/donation.lib.php @@ -80,7 +80,7 @@ function donation_prepare_head($object) require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php'; - $upload_dir = $conf->don->dir_output . '/' . get_exdir($filename, 2, 0, 1, $object, 'donation'). '/'. dol_sanitizeFileName($object->ref); + $upload_dir = $conf->don->dir_output . '/' . dol_sanitizeFileName($object->ref); $nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$')); $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/don/document.php?id='.$object->id; diff --git a/htdocs/core/lib/multicurrency.lib.php b/htdocs/core/lib/multicurrency.lib.php index 339ca2d01bc..e44511fcb97 100644 --- a/htdocs/core/lib/multicurrency.lib.php +++ b/htdocs/core/lib/multicurrency.lib.php @@ -40,7 +40,7 @@ function multicurrencyAdminPrepareHead() $head[$h][2] = 'settings'; $h++; - complete_head_from_modules($conf, $langs, $object, $head, $h, 'multicurrency'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'multicurrency'); return $head; } diff --git a/htdocs/core/lib/ticket.lib.php b/htdocs/core/lib/ticket.lib.php index 84be86f4a15..c1d42bf25b7 100644 --- a/htdocs/core/lib/ticket.lib.php +++ b/htdocs/core/lib/ticket.lib.php @@ -59,7 +59,7 @@ function ticketAdminPrepareHead() //$this->tabs = array( // 'entity:-tabname:Title:@ticket:/ticket/mypage.php?id=__ID__' //); // to remove a tab - complete_head_from_modules($conf, $langs, $object, $head, $h, 'ticketadmin'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'ticketadmin'); return $head; } diff --git a/htdocs/datapolicy/lib/datapolicy.lib.php b/htdocs/datapolicy/lib/datapolicy.lib.php index b72417d7ff9..1ea83696a1b 100644 --- a/htdocs/datapolicy/lib/datapolicy.lib.php +++ b/htdocs/datapolicy/lib/datapolicy.lib.php @@ -48,7 +48,9 @@ function datapolicyAdminPrepareHead() $h++; } - complete_head_from_modules($conf, $langs, $object, $head, $h, 'datapolicy'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'datapolicy'); + + complete_head_from_modules($conf, $langs, null, $head, $h, 'datapolicy', 'remove'); return $head; } diff --git a/htdocs/dav/dav.lib.php b/htdocs/dav/dav.lib.php index 3c213f400c1..058fc635fc7 100644 --- a/htdocs/dav/dav.lib.php +++ b/htdocs/dav/dav.lib.php @@ -63,9 +63,9 @@ function dav_admin_prepare_head() // Entries must be declared in modules descriptor with line // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab // $this->tabs = array('entity:-tabname); to remove a tab - complete_head_from_modules($conf, $langs, $object, $head, $h, 'admindav'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'admindav'); - complete_head_from_modules($conf, $langs, $object, $head, $h, 'admindav', 'remove'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'admindav', 'remove'); return $head; } diff --git a/htdocs/emailcollector/lib/emailcollector.lib.php b/htdocs/emailcollector/lib/emailcollector.lib.php index e7cc3bcb3a0..e9cb3984819 100644 --- a/htdocs/emailcollector/lib/emailcollector.lib.php +++ b/htdocs/emailcollector/lib/emailcollector.lib.php @@ -81,5 +81,7 @@ function emailcollectorPrepareHead($object) //); // to remove a tab complete_head_from_modules($conf, $langs, $object, $head, $h, 'emailcollector'); + complete_head_from_modules($conf, $langs, $object, $head, $h, 'emailcollector', 'remove'); + return $head; } diff --git a/htdocs/modulebuilder/template/lib/mymodule_myobject.lib.php b/htdocs/modulebuilder/template/lib/mymodule_myobject.lib.php index e1af0259062..d9ea2f110cd 100644 --- a/htdocs/modulebuilder/template/lib/mymodule_myobject.lib.php +++ b/htdocs/modulebuilder/template/lib/mymodule_myobject.lib.php @@ -79,5 +79,7 @@ function myobjectPrepareHead($object) //); // to remove a tab complete_head_from_modules($conf, $langs, $object, $head, $h, 'myobject@mymodule'); + complete_head_from_modules($conf, $langs, $object, $head, $h, 'myobject@mymodule', 'remove'); + return $head; } diff --git a/htdocs/product/inventory/lib/inventory.lib.php b/htdocs/product/inventory/lib/inventory.lib.php index 175c772cb61..ad2e8193449 100644 --- a/htdocs/product/inventory/lib/inventory.lib.php +++ b/htdocs/product/inventory/lib/inventory.lib.php @@ -50,7 +50,7 @@ function inventoryAdminPrepareHead() //$this->tabs = array( // 'entity:-tabname:Title:@inventory:/inventory/mypage.php?id=__ID__' //); // to remove a tab - complete_head_from_modules($conf, $langs, $object, $head, $h, 'inventory'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'inventory'); return $head; } diff --git a/htdocs/takepos/lib/takepos.lib.php b/htdocs/takepos/lib/takepos.lib.php index 691f118d2cb..024e1fb9ae5 100644 --- a/htdocs/takepos/lib/takepos.lib.php +++ b/htdocs/takepos/lib/takepos.lib.php @@ -52,7 +52,9 @@ function takeposAdminPrepareHead() //$this->tabs = array( // 'entity:-tabname:Title:@takepos:/takepos/mypage.php?id=__ID__' //); // to remove a tab - complete_head_from_modules($conf, $langs, $object, $head, $h, 'takepos'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'takepos'); + + complete_head_from_modules($conf, $langs, null, $head, $h, 'takepos', 'remove'); return $head; } diff --git a/htdocs/website/lib/websiteaccount.lib.php b/htdocs/website/lib/websiteaccount.lib.php index 0b63be45188..8ade5eee288 100644 --- a/htdocs/website/lib/websiteaccount.lib.php +++ b/htdocs/website/lib/websiteaccount.lib.php @@ -79,5 +79,7 @@ function websiteaccountPrepareHead($object) //); // to remove a tab complete_head_from_modules($conf, $langs, $object, $head, $h, 'websiteaccount@website'); + complete_head_from_modules($conf, $langs, $object, $head, $h, 'websiteaccount@website', 'remove'); + return $head; } From f62c79c4455fa8bc71bdc88f8a3a1f5d1029acc5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 14:26:18 +0200 Subject: [PATCH 46/60] Fix object user must be a param of delete method --- htdocs/core/class/link.class.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/link.class.php b/htdocs/core/class/link.class.php index 283b296b3e3..4ad6b9d5d9a 100644 --- a/htdocs/core/class/link.class.php +++ b/htdocs/core/class/link.class.php @@ -355,11 +355,12 @@ class Link extends CommonObject /** * Delete a link from database * - * @return int <0 if KO, 0 if nothing done, >0 if OK + * @param User $user Object suer + * @return int <0 if KO, 0 if nothing done, >0 if OK */ - public function delete() + public function delete($user) { - global $user, $langs, $conf; + global $langs, $conf; dol_syslog(get_class($this)."::delete", LOG_DEBUG); $error = 0; From 07e647ca10e6d5afe21faee4839df2356522be3b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 14:27:13 +0200 Subject: [PATCH 47/60] Fix sql outside transaction --- htdocs/core/class/link.class.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/link.class.php b/htdocs/core/class/link.class.php index 4ad6b9d5d9a..a5242c597c4 100644 --- a/htdocs/core/class/link.class.php +++ b/htdocs/core/class/link.class.php @@ -365,13 +365,17 @@ class Link extends CommonObject dol_syslog(get_class($this)."::delete", LOG_DEBUG); $error = 0; + $this->db->begin(); + // Call trigger $result=$this->call_trigger('LINK_DELETE', $user); - if ($result < 0) return -1; + if ($result < 0) + { + $this->db->rollback(); + return -1; + } // End call triggers - $this->db->begin(); - // Remove link $sql = "DELETE FROM " . MAIN_DB_PREFIX . "links"; $sql.= " WHERE rowid = " . $this->id; From c816a41006a555d502344f3aa4b8e06628b6de71 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 15:00:46 +0200 Subject: [PATCH 48/60] Fix missing exit --- htdocs/externalsite/frames.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/externalsite/frames.php b/htdocs/externalsite/frames.php index eb8e06919d3..9c232cbe710 100644 --- a/htdocs/externalsite/frames.php +++ b/htdocs/externalsite/frames.php @@ -49,6 +49,7 @@ if (empty($keyforcontent) && empty($conf->global->EXTERNALSITE_URL)) llxHeader(); print '
'.$langs->trans('ExternalSiteModuleNotComplete').'
'; llxFooter(); + exit; } if (! empty($keyforcontent)) From 87c596a93409687b36a5ae0d591248ed9a95b364 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 15:58:54 +0200 Subject: [PATCH 49/60] Fix responsive --- htdocs/core/boxes/box_factures.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/boxes/box_factures.php b/htdocs/core/boxes/box_factures.php index 5aa7d0575c6..05ab5db50fd 100644 --- a/htdocs/core/boxes/box_factures.php +++ b/htdocs/core/boxes/box_factures.php @@ -156,7 +156,7 @@ class box_factures extends ModeleBoxes ); $this->info_box_contents[$line][] = array( - 'td' => '', + 'td' => 'class="tdoverflowmax200"', 'text' => $societestatic->getNomUrl(1, '', 40), 'asis' => 1, ); From 92e7d7bb26389c1633b7dd6bd7909507ac78f489 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 16:18:20 +0200 Subject: [PATCH 50/60] Fix duplicate translation --- htdocs/compta/localtax/quadri_detail.php | 2 +- htdocs/compta/tva/clients.php | 2 +- htdocs/compta/tva/quadri_detail.php | 2 +- htdocs/expensereport/class/expensereport.class.php | 2 +- htdocs/fourn/class/fournisseur.facture.class.php | 2 +- htdocs/langs/en_US/compta.lang | 2 +- htdocs/langs/en_US/main.lang | 1 + htdocs/langs/en_US/paybox.lang | 1 - 8 files changed, 7 insertions(+), 7 deletions(-) diff --git a/htdocs/compta/localtax/quadri_detail.php b/htdocs/compta/localtax/quadri_detail.php index 4bbe5c723e1..54fa04d33a2 100644 --- a/htdocs/compta/localtax/quadri_detail.php +++ b/htdocs/compta/localtax/quadri_detail.php @@ -170,7 +170,7 @@ $amountcust=$langs->trans("AmountHT"); $vatcust=$langs->trans("VATReceived"); $namecust=$langs->trans("Name"); if ($mysoc->tva_assuj) { - $vatcust.=' ('.$langs->trans("ToPay").')'; + $vatcust.=' ('.$langs->trans("StatusToPay").')'; } // Suppliers invoices diff --git a/htdocs/compta/tva/clients.php b/htdocs/compta/tva/clients.php index e0775313dd3..e977b31e5e4 100644 --- a/htdocs/compta/tva/clients.php +++ b/htdocs/compta/tva/clients.php @@ -185,7 +185,7 @@ $productcust=$langs->trans("Description"); $namerate=$langs->trans("VATRate"); $amountcust=$langs->trans("AmountHT"); if ($mysoc->tva_assuj) { - $vatcust.=' ('.$langs->trans("ToPay").')'; + $vatcust.=' ('.$langs->trans("StatusToPay").')'; } $elementsup=$langs->trans("SuppliersInvoices"); $productsup=$langs->trans("Description"); diff --git a/htdocs/compta/tva/quadri_detail.php b/htdocs/compta/tva/quadri_detail.php index c48bc385c53..26601308ccf 100644 --- a/htdocs/compta/tva/quadri_detail.php +++ b/htdocs/compta/tva/quadri_detail.php @@ -173,7 +173,7 @@ $amountcust=$langs->trans("AmountHT"); $vatcust=$langs->trans("VATReceived"); $namecust=$langs->trans("Name"); if ($mysoc->tva_assuj) { - $vatcust.=' ('.$langs->trans("ToPay").')'; + $vatcust.=' ('.$langs->trans("VATToPay").')'; } // Suppliers invoices diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 9b1a62ed402..32915339297 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2340,7 +2340,7 @@ class ExpenseReport extends CommonObject { $response->warning_delay=$conf->expensereport->payment->warning_delay/60/60/24; $response->label=$langs->trans("ExpenseReportsToPay"); - $response->labelShort=$langs->trans("ToPay"); + $response->labelShort=$langs->trans("StatusToPay"); $response->url=DOL_URL_ROOT.'/expensereport/list.php?mainmenu=hrm&statut=5'; } $response->img=img_object('', "trip"); diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index a3e6666f412..ac19cac8a34 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -2203,7 +2203,7 @@ class FactureFournisseur extends CommonInvoice $response = new WorkboardResponse(); $response->warning_delay=$conf->facture->fournisseur->warning_delay/60/60/24; $response->label=$langs->trans("SupplierBillsToPay"); - $response->labelShort=$langs->trans("ToPay"); + $response->labelShort=$langs->trans("StatusToPay"); $response->url=DOL_URL_ROOT.'/fourn/facture/list.php?search_status=1&mainmenu=billing&leftmenu=suppliers_bills'; $response->img=img_object($langs->trans("Bills"), "bill"); diff --git a/htdocs/langs/en_US/compta.lang b/htdocs/langs/en_US/compta.lang index 9a5f9768d24..42d88f3f722 100644 --- a/htdocs/langs/en_US/compta.lang +++ b/htdocs/langs/en_US/compta.lang @@ -63,7 +63,7 @@ LT2SupplierES=IRPF purchases LT2CustomerIN=SGST sales LT2SupplierIN=SGST purchases VATCollected=VAT collected -ToPay=To pay +StatusToPay=To pay SpecialExpensesArea=Area for all special payments SocialContribution=Social or fiscal tax SocialContributions=Social or fiscal taxes diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 5c3e30967de..397e562e265 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -412,6 +412,7 @@ DefaultTaxRate=Default tax rate Average=Average Sum=Sum Delta=Delta +StatusToPay=To pay RemainToPay=Remain to pay Module=Module/Application Modules=Modules/Applications diff --git a/htdocs/langs/en_US/paybox.lang b/htdocs/langs/en_US/paybox.lang index a4eee3680af..35216661140 100644 --- a/htdocs/langs/en_US/paybox.lang +++ b/htdocs/langs/en_US/paybox.lang @@ -11,7 +11,6 @@ YourEMail=Email to receive payment confirmation Creditor=Creditor PaymentCode=Payment code PayBoxDoPayment=Pay with Paybox -ToPay=Do payment YouWillBeRedirectedOnPayBox=You will be redirected on secured Paybox page to input you credit card information Continue=Next ToOfferALinkForOnlinePayment=URL for %s payment From 8e7f83653400d01d98f813f5170849312868b86c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 16:23:04 +0200 Subject: [PATCH 51/60] Fix trans --- htdocs/langs/en_US/admin.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index f59f4449b8e..9b8c6f04c51 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1851,7 +1851,7 @@ SeveralLangugeVariatFound=Several language variants found RemoveSpecialChars=Remove special characters COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX) COMPANY_DIGITARIA_CLEAN_REGEX=Regex filter to clean value (COMPANY_DIGITARIA_CLEAN_REGEX) -COMPANY_DIGITARIA_UNIQUE_CODE=Unauthorized double +COMPANY_DIGITARIA_UNIQUE_CODE=Duplicate not allowed GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact) GDPRContactDesc=If you store data about European companies/citizens, you can name the contact who is responsible for the General Data Protection Regulation here HelpOnTooltip=Help text to show on tooltip From 3802734212a282999190a3e47003ceff63aa60fc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 16:37:30 +0200 Subject: [PATCH 52/60] fix --- build/flatpack/org.flatpak.Dolibarr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/flatpack/org.flatpak.Dolibarr.json b/build/flatpack/org.flatpak.Dolibarr.json index 9e2135cf0a3..69140d32372 100644 --- a/build/flatpack/org.flatpak.Dolibarr.json +++ b/build/flatpack/org.flatpak.Dolibarr.json @@ -1 +1 @@ -Help wanted... \ No newline at end of file +"Help wanted..." \ No newline at end of file From 50957ab621e1a6b759d779a1ce2b081f7b3c1155 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 16:51:20 +0200 Subject: [PATCH 53/60] Sync transifex --- htdocs/langs/en_AU/admin.lang | 4 ---- htdocs/langs/en_AU/withdrawals.lang | 2 -- htdocs/langs/en_CA/admin.lang | 4 ---- htdocs/langs/en_GB/admin.lang | 4 ---- htdocs/langs/en_GB/withdrawals.lang | 1 - htdocs/langs/en_IN/admin.lang | 4 ---- htdocs/langs/es_CL/compta.lang | 1 - htdocs/langs/es_CO/compta.lang | 1 - htdocs/langs/fr_BE/admin.lang | 4 ---- htdocs/langs/fr_BE/withdrawals.lang | 1 - htdocs/langs/fr_CA/admin.lang | 4 ---- htdocs/langs/fr_CA/withdrawals.lang | 1 - htdocs/langs/fr_FR/admin.lang | 8 +++++-- htdocs/langs/fr_FR/bills.lang | 6 ++--- htdocs/langs/fr_FR/compta.lang | 2 +- htdocs/langs/fr_FR/cron.lang | 2 +- htdocs/langs/fr_FR/dict.lang | 34 +++++++++++++-------------- htdocs/langs/fr_FR/holiday.lang | 1 + htdocs/langs/fr_FR/main.lang | 3 +-- htdocs/langs/fr_FR/modulebuilder.lang | 1 + htdocs/langs/fr_FR/paybox.lang | 1 - htdocs/langs/fr_FR/products.lang | 6 ++++- htdocs/langs/fr_FR/website.lang | 4 ++++ 23 files changed, 40 insertions(+), 59 deletions(-) delete mode 100644 htdocs/langs/en_AU/withdrawals.lang diff --git a/htdocs/langs/en_AU/admin.lang b/htdocs/langs/en_AU/admin.lang index 447918b3b95..f792eabe51a 100644 --- a/htdocs/langs/en_AU/admin.lang +++ b/htdocs/langs/en_AU/admin.lang @@ -1,11 +1,7 @@ # Dolibarr language file - Source file is en_US - admin OldVATRates=Old GST rate NewVATRates=New GST rate -Module600Name=Notifications on business event DictionaryVAT=GST Rates or Sales Tax Rates OptionVatMode=GST due -ListOfNotificationsPerUser=List of automatic notifications per user* -ListOfNotificationsPerUserOrContact=List of possible automatic notifications (on business event) available per user* or per contact** -ListOfFixedNotifications=List of automatic fixed notifications LinkColor=Colour of links OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. diff --git a/htdocs/langs/en_AU/withdrawals.lang b/htdocs/langs/en_AU/withdrawals.lang deleted file mode 100644 index 967d1f20411..00000000000 --- a/htdocs/langs/en_AU/withdrawals.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - withdrawals -RUM=Unique Mandate Reference (UMR) diff --git a/htdocs/langs/en_CA/admin.lang b/htdocs/langs/en_CA/admin.lang index ae0ffe7f7c7..e5e33b73dd6 100644 --- a/htdocs/langs/en_CA/admin.lang +++ b/htdocs/langs/en_CA/admin.lang @@ -1,10 +1,6 @@ # Dolibarr language file - Source file is en_US - admin -Module600Name=Notifications on business event LocalTax1Management=PST Management CompanyZip=Postal code LDAPFieldZip=Postal code -ListOfNotificationsPerUser=List of automatic notifications per user* -ListOfNotificationsPerUserOrContact=List of possible automatic notifications (on business event) available per user* or per contact** -ListOfFixedNotifications=List of automatic fixed notifications FormatZip=Postal code OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. diff --git a/htdocs/langs/en_GB/admin.lang b/htdocs/langs/en_GB/admin.lang index 3f23aecf4be..29af3e502f6 100644 --- a/htdocs/langs/en_GB/admin.lang +++ b/htdocs/langs/en_GB/admin.lang @@ -41,14 +41,10 @@ UMaskExplanation=This parameter allows you to define permissions set by default ListOfDirectories=List of OpenDocument template directories ListOfDirectoriesForModelGenODT=List of directories containing template files in OpenDocument format.

Put here full path of directories.
Add a carriage return between each directory.
To add a directory of the GED module, add here DOL_DATA_ROOT/ecm/yourdirectoryname.

Files in those directories must end with .odt or .ods. FollowingSubstitutionKeysCanBeUsed=
To learn how to create your .odt document templates, before storing them in those directories, read wiki documentation: -Module600Name=Notifications on business event Module50200Name=PayPal DictionaryAccountancyJournal=Finance journals CompanyZip=Postcode LDAPFieldZip=Postcode GenbarcodeLocation=Barcode generation command line tool (used by internal engine for some bar code types). Must be compatible with "genbarcode".
For example: /usr/local/bin/genbarcode -ListOfNotificationsPerUser=List of automatic notifications per user* -ListOfNotificationsPerUserOrContact=List of possible automatic notifications (on business event) available per user* or per contact** -ListOfFixedNotifications=List of automatic fixed notifications FormatZip=Postcode OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. diff --git a/htdocs/langs/en_GB/withdrawals.lang b/htdocs/langs/en_GB/withdrawals.lang index b34ed7e8f1f..aaf36937580 100644 --- a/htdocs/langs/en_GB/withdrawals.lang +++ b/htdocs/langs/en_GB/withdrawals.lang @@ -15,7 +15,6 @@ NotifyCredit=Payment Credit WithdrawalFileNotCapable=Unable to generate Payment receipt file for your country %s (Your country is not supported) DoStandingOrdersBeforePayments=This tab allows you to request a direct debit payment order. Once done, go into menu Bank->Direct Debit orders to manage the direct debit payment order. When the payment order is closed, payment on the invoice will be automatically recorded, and the invoice closed if the outstanding balance is null. WithdrawalFile=Payment file -RUM=Unique Mandate Reference (UMR) WithdrawRequestAmount=The amount of Direct Debit request: WithdrawRequestErrorNilAmount=Unable to create a Direct Debit request for an empty amount. SEPALegalText=By signing this mandate form, you authorise (A) %s to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with the instructions from %s. As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited. Your rights regarding the above mandate are explained in a statement that you can obtain from your bank. diff --git a/htdocs/langs/en_IN/admin.lang b/htdocs/langs/en_IN/admin.lang index d19942507b6..e3cc80d5cea 100644 --- a/htdocs/langs/en_IN/admin.lang +++ b/htdocs/langs/en_IN/admin.lang @@ -1,7 +1,6 @@ # Dolibarr language file - Source file is en_US - admin Module20Name=Quotations Module20Desc=Management of quotations -Module600Name=Notifications on business event Permission21=Read quotations Permission22=Create/modify quotations Permission24=Validate quotations @@ -14,8 +13,5 @@ ProposalsNumberingModules=Quotation numbering models ProposalsPDFModules=Quotation documents models FreeLegalTextOnProposal=Free text on quotations WatermarkOnDraftProposal=Watermark on draft quotations (none if empty) -ListOfNotificationsPerUser=List of automatic notifications per user* -ListOfNotificationsPerUserOrContact=List of possible automatic notifications (on business event) available per user* or per contact** -ListOfFixedNotifications=List of automatic fixed notifications MailToSendProposal=Customer quotations OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. diff --git a/htdocs/langs/es_CL/compta.lang b/htdocs/langs/es_CL/compta.lang index 2aa54a47917..499f8f169ef 100644 --- a/htdocs/langs/es_CL/compta.lang +++ b/htdocs/langs/es_CL/compta.lang @@ -54,7 +54,6 @@ LT2CustomerES=Ventas de IRPF LT2SupplierES=Compras de IRPF LT2CustomerIN=Ventas de SGST VATCollected=IVA recaudado -ToPay=Pagar SpecialExpensesArea=Área para todos los pagos especiales SocialContribution=Impuesto social o fiscal LabelContrib=Contribución de etiqueta diff --git a/htdocs/langs/es_CO/compta.lang b/htdocs/langs/es_CO/compta.lang index c35bb1a59e1..be705a0bacc 100644 --- a/htdocs/langs/es_CO/compta.lang +++ b/htdocs/langs/es_CO/compta.lang @@ -50,7 +50,6 @@ LT2Supplier=Impuestos 3 compras LT2CustomerES=Ventas de IRPF LT2SupplierES=Compras IRPF VATCollected=IVA recaudado -ToPay=Pagar SpecialExpensesArea=Área para todos los pagos especiales. SocialContribution=Impuesto social o fiscal SocialContributions=Impuestos sociales o fiscales. diff --git a/htdocs/langs/fr_BE/admin.lang b/htdocs/langs/fr_BE/admin.lang index 7d99260c310..45352a47b83 100644 --- a/htdocs/langs/fr_BE/admin.lang +++ b/htdocs/langs/fr_BE/admin.lang @@ -16,9 +16,5 @@ FormToTestFileUploadForm=Formulaire pour tester l'upload de fichiers (selon la c IfModuleEnabled=Note: oui ne fonctionne que si le module %s est activé Module20Name=Propales Module30Name=Factures -Module600Name=Notifications on business event Target=Objectif -ListOfNotificationsPerUser=List of automatic notifications per user* -ListOfNotificationsPerUserOrContact=List of possible automatic notifications (on business event) available per user* or per contact** -ListOfFixedNotifications=List of automatic fixed notifications OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. diff --git a/htdocs/langs/fr_BE/withdrawals.lang b/htdocs/langs/fr_BE/withdrawals.lang index 305bdf13d8e..eb336cadcc0 100644 --- a/htdocs/langs/fr_BE/withdrawals.lang +++ b/htdocs/langs/fr_BE/withdrawals.lang @@ -1,3 +1,2 @@ # Dolibarr language file - Source file is en_US - withdrawals StatusTrans=Envoyé -RUM=Unique Mandate Reference (UMR) diff --git a/htdocs/langs/fr_CA/admin.lang b/htdocs/langs/fr_CA/admin.lang index 69ce614e588..5990a0d3fa8 100644 --- a/htdocs/langs/fr_CA/admin.lang +++ b/htdocs/langs/fr_CA/admin.lang @@ -89,7 +89,6 @@ WatermarkOnDraftExpenseReports=Filigrane sur les projets de rapports de dépense Module0Desc=Gestion des utilisateurs / employés et des groupes Module42Desc=Installations de journalisation (fichier, syslog, ...). Ces journaux sont à des fins techniques / de débogage. Module75Name=Notes de frais et déplacements -Module600Name=Notifications on business event Module2400Name=Evénements / Agenda Module2600Name=services API / Web ( serveur SOAP ) Module2600Desc=Active le serveur de Web Services de Dolibarr @@ -199,9 +198,6 @@ DeleteFiscalYear=Supprimer la période comptable ConfirmDeleteFiscalYear=Êtes-vous sûr de supprimer cette période comptable? ShowFiscalYear=Afficher la période comptable SalariesSetup=Configuration du module salariés -ListOfNotificationsPerUser=List of automatic notifications per user* -ListOfNotificationsPerUserOrContact=List of possible automatic notifications (on business event) available per user* or per contact** -ListOfFixedNotifications=List of automatic fixed notifications ConfFileMustContainCustom=L'installation ou la construction d'un module externe à partir de l'application doit sauvegarder les fichiers du module dans le répertoire %s. Pour que ce répertoire soit traité par Dolibarr, vous devez configurer votre conf / conf.php pour ajouter les 2 lignes de directive:
$ dolibarr_main_url_root_alt = '/ custom';
$ dolibarr_main_document_root_alt = '%s / custom'; HighlightLinesOnMouseHover=Mettez en surbrillance les lignes de table lorsque déplacement de la souris passe au-dessus PressF5AfterChangingThis=Appuyez sur CTRL + F5 sur le clavier ou effacez votre cache de navigateur après avoir changé cette valeur pour l'avoir efficace diff --git a/htdocs/langs/fr_CA/withdrawals.lang b/htdocs/langs/fr_CA/withdrawals.lang index d8dc0f4bd1a..f0875b5400f 100644 --- a/htdocs/langs/fr_CA/withdrawals.lang +++ b/htdocs/langs/fr_CA/withdrawals.lang @@ -53,7 +53,6 @@ DoStandingOrdersBeforePayments=Cet onglet vous permet de demander une commande d WithdrawalFile=Fichier de retrait SetToStatusSent=Définir le statut "Fichier envoyé" StatisticsByLineStatus=Statistiques par état des lignes -RUM=Unique Mandate Reference (UMR) RUMLong=Référence de mandat unique WithdrawMode=Mode de débit direct (FRST ou RECUR) WithdrawRequestAmount=Montant de la demande de débit direct: diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index 7407396835b..20cdc9175d6 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -462,7 +462,9 @@ EnableAndSetupModuleCron=Si vous voulez avoir cette facture récurrente génér ModuleCompanyCodeCustomerAquarium=%s suivi d'un code client tiers pour un code comptable client ModuleCompanyCodeSupplierAquarium=%s suivi du code fournisseur tiers pour le code comptable fournisseur ModuleCompanyCodePanicum=Retourne un code comptable vide -ModuleCompanyCodeDigitaria=Renvoie un code comptable composé suivant le code tiers. Le code est composé du caractère 'C' en première position suivi des 5 premiers caractères du code tiers. +ModuleCompanyCodeDigitaria=Renvoie un code de comptabilisation composé en fonction du nom du tiers. Le code consiste en un préfixe pouvant être défini dans la première position, suivi d'un nombre de caractères défini dans le code tiers. +ModuleCompanyCodeCustomerDigitaria=%s suivi du nom de client tronqué du nombre de caractères: %s pour le code comptable client. +ModuleCompanyCodeSupplierDigitaria=%s suivi du nom du fournisseur tronqué du nombre de caractères: %s pour le code comptable fournisseur. Use3StepsApproval=Par défaut, les commandes fournisseurs nécessitent d'être créées et approuvées par 2 utilisateurs différents (une étape/utilisateur pour créer et une étape/utilisateur pour approuver. Notez que si un utilisateur à les deux permissions, ces deux actions sont effectuées en une seule fois). Cette option ajoute la nécessité d'une approbation par une troisième étape/utilisateur, si le montant de la commande est supérieur au montant d'une valeur définie (soit 3 étapes nécessaire: 1 =Validation, 2=Première approbation et 3=seconde approbation si le montant l'exige).
Laissez le champ vide si une seule approbation (2 étapes) est suffisante, placez une valeur très faible (0.1) si une deuxième approbation (3 étapes) est toujours exigée. UseDoubleApproval=Activer l'approbation en trois étapes si le montant HT est supérieur à... WarningPHPMail=Attention : Il est préférable de configurer les emails sortant pour utiliser le serveur email de votre fournisseur plutôt que la configuration par défaut. Certains fournisseurs email (comme Yahoo) ne permettent pas l'envoi d'e-mails depuis un autre serveur que le leur si l'adresse d'envoi utilisée est une adresse autre que la leur. Votre configuration actuelle utilise le serveur de l'application pour l'envoi d'e-mails et non le serveur de votre fournisseur de messagerie, aussi certains destinataires (ceux compatibles avec le protocole restrictif DMARC) demanderont au fournisseur d'email si ils peuvent accepter l'email et certains fournisseurs (comme Yahoo) peuvent répondre "non" car le serveur utilisé pour l'envoi n'est pas un serveur appartenant au fournisseur, aussi certains de vos emails envoyés peuvent ne pas etre accepté (faites attention aussi aux quotas de votre fournisseur d'email).
SI votre fournisseur d'email (comme Yahoo) impose cette restriction, vous devrez modifier votre configuration et opter pour l'autre méthode d'envoi "SMTP server" et saisir les identifiants SMTP de votre compte fournis par votre fournisseur d'e-mail (à demander à votre fournisseur d'e-mail) @@ -1846,8 +1848,10 @@ NothingToSetup=Aucune configuration particulière n'est requise pour ce module. SetToYesIfGroupIsComputationOfOtherGroups=Réglez ceci sur Oui si ce groupe est un calcul d'autres groupes EnterCalculationRuleIfPreviousFieldIsYes=Entrez la règle de calcul si le champ précédent a été défini sur Oui (par exemple, 'CODEGRP1 + CODEGRP2') SeveralLangugeVariatFound=Plusieurs variantes de langue trouvées -COMPANY_AQUARIUM_REMOVE_SPECIAL=Supprimer les caractères spéciaux +RemoveSpecialChars=Supprimer les caractères spéciaux COMPANY_AQUARIUM_CLEAN_REGEX=Filtre Regex pour nettoyer la valeur (COMPANY_AQUARIUM_CLEAN_REGEX) +COMPANY_DIGITARIA_CLEAN_REGEX=Filtre de regex pour nettoyer la valeur (COMPANY_DIGITARIA_CLEAN_REGEX) +COMPANY_DIGITARIA_UNIQUE_CODE=Doublons non autorisés GDPRContact=Responsable de la protection des données (DPO ou contact RGPD) GDPRContactDesc=Si vous stockez des données sur des entreprises / citoyens européens, vous pouvez stocker ici le contact responsable du RGPD. HelpOnTooltip=Texte d'aide à afficher dans l'info-bulle diff --git a/htdocs/langs/fr_FR/bills.lang b/htdocs/langs/fr_FR/bills.lang index bdf515ca297..edb61e62406 100644 --- a/htdocs/langs/fr_FR/bills.lang +++ b/htdocs/langs/fr_FR/bills.lang @@ -496,9 +496,9 @@ CantRemovePaymentWithOneInvoicePaid=Suppression impossible quand il existe au mo ExpectedToPay=Paiement attendu CantRemoveConciliatedPayment=Suppression d'un paiement rapproché impossible PayedByThisPayment=Règlé par ce paiement -ClosePaidInvoicesAutomatically=Classifiez "Payée" toutes les factures standard, d'acompte ou de remplacement entièrement payées. -ClosePaidCreditNotesAutomatically=Classer automatiquement à "Payé" les factures avoirs entièrement remboursées. -ClosePaidContributionsAutomatically=Classer "payé" toutes les contributions sociales ou fiscales payées entièrement. +ClosePaidInvoicesAutomatically=Classer "Payée" toutes les factures standard, d'acompte ou de remplacement quand le paiement est complet. +ClosePaidCreditNotesAutomatically=Classer automatiquement à "Payé" les factures d'avoirs quand le remboursement est complet. +ClosePaidContributionsAutomatically=Classer automatiquement à "Payé" toutes les contributions sociales ou fiscales quand les sont complets. AllCompletelyPayedInvoiceWillBeClosed=Toutes les factures avec un reste à payer nul seront automatiquement fermées au statut "Payé". ToMakePayment=Payer ToMakePaymentBack=Rembourser diff --git a/htdocs/langs/fr_FR/compta.lang b/htdocs/langs/fr_FR/compta.lang index d557f85e726..7732a9c8dca 100644 --- a/htdocs/langs/fr_FR/compta.lang +++ b/htdocs/langs/fr_FR/compta.lang @@ -63,7 +63,7 @@ LT2SupplierES=IRPF achats LT2CustomerIN=TVA sur les ventes LT2SupplierIN=TVA sur les achats VATCollected=TVA récupérée -ToPay=A payer +StatusToPay=A payer SpecialExpensesArea=Espace des paiements particuliers SocialContribution=Charge sociale ou fiscale SocialContributions=Charges fiscales ou sociales diff --git a/htdocs/langs/fr_FR/cron.lang b/htdocs/langs/fr_FR/cron.lang index 4a80dd19ac4..38c6d34650d 100644 --- a/htdocs/langs/fr_FR/cron.lang +++ b/htdocs/langs/fr_FR/cron.lang @@ -76,7 +76,7 @@ CronType_method=Appelle d'une méthode d'une classe Dolibarr CronType_command=Commande terminal CronCannotLoadClass=Impossible de charger le fichier %s (pour charger l'objet %s) CronCannotLoadObject=Le fichier de classe %s a été chargé, mais l'objet %s n'a pas été trouvé dedans -UseMenuModuleToolsToAddCronJobs=Aller à la page "
Accueil - Outils administration - Travaux planifiées" pour voir la listes des travaux programmées et les modifier. +UseMenuModuleToolsToAddCronJobs=Aller à la page "Accueil - Outils administration - Travaux planifiées" pour voir la listes des travaux programmés et les modifier. JobDisabled=Travail désactivé MakeLocalDatabaseDumpShort=Sauvegarde locale de base MakeLocalDatabaseDump=Créez un fichier dump de base local. Les paramètres sont: compression ('gz' ou 'bz' ou 'none'), type de sauvegarde ('mysql', 'pgsql', 'auto'), 1, 'auto' ou nom du fichier à générer, nombre de fichiers de sauvegarde à garder diff --git a/htdocs/langs/fr_FR/dict.lang b/htdocs/langs/fr_FR/dict.lang index ac8d667c6e3..8da0543e2c2 100644 --- a/htdocs/langs/fr_FR/dict.lang +++ b/htdocs/langs/fr_FR/dict.lang @@ -332,27 +332,27 @@ PaperFormatCAP6=Format P6 Canadien ExpAutoCat=Voiture ExpCycloCat=2 roues ExpMotoCat=Moto -ExpAuto3CV=3 cv +ExpAuto3CV=3 CV ExpAuto4CV=4 CV -ExpAuto5CV=5 cv +ExpAuto5CV=5 CV ExpAuto6CV=6 CV -ExpAuto7CV=7 cv -ExpAuto8CV=8 cv +ExpAuto7CV=7 CV +ExpAuto8CV=8 CV ExpAuto9CV=9 CV -ExpAuto10CV=10 cv -ExpAuto11CV=11 cv -ExpAuto12CV=12 cv -ExpAuto3PCV=3 cv et plus +ExpAuto10CV=10 CV +ExpAuto11CV=11 CV +ExpAuto12CV=12 CV +ExpAuto3PCV=3 CV et plus ExpAuto4PCV=4 CV et plus -ExpAuto5PCV=5 cv et plus -ExpAuto6PCV=6 cv et plus -ExpAuto7PCV=7 cv et plus -ExpAuto8PCV=8 cv et plus -ExpAuto9PCV=9 cv et plus -ExpAuto10PCV=10 cv et plus -ExpAuto11PCV=11 cv et plus -ExpAuto12PCV=12 cv et plus -ExpAuto13PCV=13 cv et plus +ExpAuto5PCV=5 CV et plus +ExpAuto6PCV=6 CV et plus +ExpAuto7PCV=7 CV et plus +ExpAuto8PCV=8 CV et plus +ExpAuto9PCV=9 CV et plus +ExpAuto10PCV=10 CV et plus +ExpAuto11PCV=11 CV et plus +ExpAuto12PCV=12 CV et plus +ExpAuto13PCV=13 CV et plus ExpCyclo=Capacité inférieure à 50 cm3 ExpMoto12CV=2 roues 1 ou 2 cv ExpMoto345CV=2 roues 3, 4 ou 5 cv diff --git a/htdocs/langs/fr_FR/holiday.lang b/htdocs/langs/fr_FR/holiday.lang index 1dd59973aea..dfc6e33299a 100644 --- a/htdocs/langs/fr_FR/holiday.lang +++ b/htdocs/langs/fr_FR/holiday.lang @@ -18,6 +18,7 @@ ValidatorCP=Approbateur ListeCP=Liste des demandes de congés LeaveId=ID demande de congès ReviewedByCP=Sera approuvé par +UserID=ID Utilisateur UserForApprovalID=ID de l'utilisateur d'approbation UserForApprovalFirstname=Prénom de l'utilisateur d'approbation UserForApprovalLastname=Nom de l'utilisateur d'approbation diff --git a/htdocs/langs/fr_FR/main.lang b/htdocs/langs/fr_FR/main.lang index ec5d8a471df..b375a3e16e0 100644 --- a/htdocs/langs/fr_FR/main.lang +++ b/htdocs/langs/fr_FR/main.lang @@ -348,8 +348,6 @@ PriceUTTC=P.U TTC Amount=Montant AmountInvoice=Montant facture AmountInvoiced=Montant facturé -AmountInvoicedHT=Montant HT facturé -AmountInvoicedTTC=Montant TTC facturé AmountPayment=Montant paiement AmountHTShort=Montant HT AmountTTCShort=Montant TTC @@ -414,6 +412,7 @@ DefaultTaxRate=Taux de taxe par défaut Average=Moyenne Sum=Somme Delta=Écart +StatusToPay=A payer RemainToPay=Reste à payer Module=Module/Application Modules=Modules/Applications diff --git a/htdocs/langs/fr_FR/modulebuilder.lang b/htdocs/langs/fr_FR/modulebuilder.lang index 8aad310a172..5efb048a4a2 100644 --- a/htdocs/langs/fr_FR/modulebuilder.lang +++ b/htdocs/langs/fr_FR/modulebuilder.lang @@ -105,6 +105,7 @@ InitStructureFromExistingTable=Construire la chaîne du tableau de structure d'u UseAboutPage=Désactiver la page "à propos de" UseDocFolder=Désactiver le dossier de la documentation UseSpecificReadme=Utiliser un fichier ReadMe spécifique +ContentOfREADMECustomized=Remarque: le contenu du fichier README.md a été remplacé par la valeur spécifique définie dans la configuration de ModuleBuilder. RealPathOfModule=Chemin réel du dossier du module ContentCantBeEmpty=Le contenu du fichier ne peut pas être vide WidgetDesc=Vous pouvez générer et éditer ici les widgets qui seront intégrés à votre module. diff --git a/htdocs/langs/fr_FR/paybox.lang b/htdocs/langs/fr_FR/paybox.lang index 2f0891171a5..6a79a2196a6 100644 --- a/htdocs/langs/fr_FR/paybox.lang +++ b/htdocs/langs/fr_FR/paybox.lang @@ -11,7 +11,6 @@ YourEMail=Email de confirmation du paiement Creditor=Bénéficiaire PaymentCode=Code de paiement PayBoxDoPayment=Payer avec PayBox -ToPay=Saisir règlement YouWillBeRedirectedOnPayBox=Vous serez redirigé vers la page sécurisée Paybox de saisie de votre carte bancaire Continue=Continuer ToOfferALinkForOnlinePayment=URL de paiement %s diff --git a/htdocs/langs/fr_FR/products.lang b/htdocs/langs/fr_FR/products.lang index a1dc8e412a6..a0473ad8c76 100644 --- a/htdocs/langs/fr_FR/products.lang +++ b/htdocs/langs/fr_FR/products.lang @@ -29,10 +29,14 @@ ProductOrService=Produit ou Service ProductsAndServices=Produits et Services ProductsOrServices=Produits ou Services ProductsPipeServices=Produits | Services +ProductsOnSale=Produits en vente +ProductsOnPurchase=Produits en achat ProductsOnSaleOnly=Produits en vente uniquement ProductsOnPurchaseOnly=Produits seulement en achat ProductsNotOnSell=Produits hors vente et hors achat ProductsOnSellAndOnBuy=Produits en vente et en achat +ServicesOnSale=Services en vente +ServicesOnPurchase=Services en achat ServicesOnSaleOnly=Services en vente uniquement ServicesOnPurchaseOnly=Services en achat uniquement ServicesNotOnSell=Services hors vente et hors achat @@ -340,4 +344,4 @@ ErrorCopyProductCombinations=Une erreur s'est produite lors de la copie des vari ErrorDestinationProductNotFound=Produit destination non trouvé ErrorProductCombinationNotFound=Variante du produit non trouvé ActionAvailableOnVariantProductOnly=Action disponible uniquement sur la variante du produit -ProductsPricePerCustomer=Prix produit par clients \ No newline at end of file +ProductsPricePerCustomer=Prix produit par clients diff --git a/htdocs/langs/fr_FR/website.lang b/htdocs/langs/fr_FR/website.lang index 0858738f1fb..608da399e3a 100644 --- a/htdocs/langs/fr_FR/website.lang +++ b/htdocs/langs/fr_FR/website.lang @@ -114,3 +114,7 @@ CSSContentTooltipHelp=Entrez ici le contenu CSS. Pour éviter tout conflit avec LinkAndScriptsHereAreNotLoadedInEditor=Avertissement: Ce contenu est affiché uniquement lorsque le site est accessible depuis un serveur. Il n'est pas utilisé en mode édition. Par conséquent, si vous devez charger des fichiers javascript également en mode édition, ajoutez simplement la balise 'script src=...' dans la page. Dynamiccontent=Exemple de page à contenu dynamique ImportSite=Importer modèle de site web +EditInLineOnOff=Mode 'Modifier en ligne' est %s +ShowSubContainersOnOff=Mode 'exécution dynamique' est %s +GlobalCSSorJS=Fichier CSS/JS/Header global du site Web +BackToHomePage=Retour à la page d'accueil... From 04174316c81d49825cb61c82b872c4435ff59826 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 17:57:21 +0200 Subject: [PATCH 54/60] Fix css for expanded dir in ecm --- htdocs/theme/eldy/global.inc.php | 3 +++ htdocs/theme/md/style.css.php | 3 +++ 2 files changed, 6 insertions(+) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index bc76fd445c3..a63ce37fdfe 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -2207,6 +2207,9 @@ img.toolbarbutton { height: 30px; } +li.expanded > a.fmdirlia.jqft.ecmjqft { + font-weight: bold !important; +} diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 983d0773f48..c621e909095 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -2351,6 +2351,9 @@ img.toolbarbutton { height: 30px; } +li.expanded > a.fmdirlia.jqft.ecmjqft { + font-weight: bold !important; +} /* ============================================================================== */ From 37a32af7b00763642fc8be05ddf98e7c647230a9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 20:06:09 +0200 Subject: [PATCH 55/60] NEW Add dictionary to store public holidays. --- htdocs/admin/dict.php | 68 ++++++++++--------- htdocs/core/lib/admin.lib.php | 10 ++- .../mysql/data/llx_c_hrm_public_holiday.sql | 43 ++++++++++++ .../install/mysql/migration/10.0.0-11.0.0.sql | 17 ++++- .../install/mysql/tables/llx_c_field_list.sql | 1 - .../tables/llx_c_hrm_public_holiday.key.sql | 21 ++++++ .../mysql/tables/llx_c_hrm_public_holiday.sql | 31 +++++++++ htdocs/langs/en_US/hrm.lang | 1 + 8 files changed, 158 insertions(+), 34 deletions(-) create mode 100644 htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql create mode 100644 htdocs/install/mysql/tables/llx_c_hrm_public_holiday.key.sql create mode 100644 htdocs/install/mysql/tables/llx_c_hrm_public_holiday.sql diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index ee90a0638fb..2c6b41b7796 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -88,7 +88,7 @@ $hookmanager->initHooks(array('admin')); // Put here declaration of dictionaries properties // Sort order to show dictionary (0 is space). All other dictionaries (added by modules) will be at end of this. -$taborder=array(9,0,4,3,2,0,1,8,19,16,27,0,5,11,0,33,34,0,6,0,29,0,7,24,28,17,35,36,0,10,23,12,13,0,14,0,22,20,18,21,0,15,30,0,37,0,25,0); +$taborder=array(9,0,4,3,2,0,1,8,19,16,27,0,5,11,0,32,33,34,0,6,0,29,0,7,24,28,17,35,36,0,10,23,12,13,0,14,0,22,20,18,21,0,15,30,0,37,0,25,0); // Name of SQL tables of dictionaries $tabname=array(); @@ -123,9 +123,10 @@ $tabname[28]= MAIN_DB_PREFIX."c_holiday_types"; $tabname[29]= MAIN_DB_PREFIX."c_lead_status"; $tabname[30]= MAIN_DB_PREFIX."c_format_cards"; //$tabname[31]= MAIN_DB_PREFIX."accounting_system"; -//$tabname[32]= MAIN_DB_PREFIX."c_accounting_category"; +$tabname[32]= MAIN_DB_PREFIX."c_hrm_public_holiday"; $tabname[33]= MAIN_DB_PREFIX."c_hrm_department"; $tabname[34]= MAIN_DB_PREFIX."c_hrm_function"; + $tabname[35]= MAIN_DB_PREFIX."c_exp_tax_cat"; $tabname[36]= MAIN_DB_PREFIX."c_exp_tax_range"; $tabname[37]= MAIN_DB_PREFIX."c_units"; @@ -163,7 +164,7 @@ $tablib[28]= "DictionaryHolidayTypes"; $tablib[29]= "DictionaryOpportunityStatus"; $tablib[30]= "DictionaryFormatCards"; //$tablib[31]= "DictionaryAccountancysystem"; -//$tablib[32]= "DictionaryAccountancyCategory"; +$tablib[32]= "DictionaryPublicHolidays"; $tablib[33]= "DictionaryDepartment"; $tablib[34]= "DictionaryFunction"; $tablib[35]= "DictionaryExpenseTaxCat"; @@ -203,7 +204,7 @@ $tabsql[28]= "SELECT h.rowid as rowid, h.code, h.label, h.affect, h.delay, h.new $tabsql[29]= "SELECT rowid as rowid, code, label, percent, position, active FROM ".MAIN_DB_PREFIX."c_lead_status"; $tabsql[30]= "SELECT rowid, code, name, paper_size, orientation, metric, leftmargin, topmargin, nx, ny, spacex, spacey, width, height, font_size, custom_x, custom_y, active FROM ".MAIN_DB_PREFIX."c_format_cards"; //$tabsql[31]= "SELECT s.rowid as rowid, pcg_version, s.label, s.active FROM ".MAIN_DB_PREFIX."accounting_system as s"; -//$tabsql[32]= "SELECT a.rowid as rowid, a.code as code, a.label, a.range_account, a.sens, a.category_type, a.formula, a.position as position, a.fk_country as country_id, c.code as country_code, c.label as country, a.active FROM ".MAIN_DB_PREFIX."c_accounting_category as a, ".MAIN_DB_PREFIX."c_country as c WHERE a.fk_country=c.rowid and c.active=1"; +$tabsql[32]= "SELECT a.id as rowid, a.entity, a.code, a.fk_country as country_id, c.code as country_code, c.label as country, a.day, a.month, a.year, a.active FROM ".MAIN_DB_PREFIX."c_hrm_public_holiday as a LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON a.fk_country=c.rowid AND c.active=1"; $tabsql[33]= "SELECT rowid, pos, code, label, active FROM ".MAIN_DB_PREFIX."c_hrm_department"; $tabsql[34]= "SELECT rowid, pos, code, label, c_level, active FROM ".MAIN_DB_PREFIX."c_hrm_function"; $tabsql[35]= "SELECT c.rowid, c.label, c.active, c.entity FROM ".MAIN_DB_PREFIX."c_exp_tax_cat c"; @@ -243,7 +244,7 @@ $tabsqlsort[28]="country ASC, code ASC"; $tabsqlsort[29]="position ASC"; $tabsqlsort[30]="code ASC"; //$tabsqlsort[31]="pcg_version ASC"; -//$tabsqlsort[32]="position ASC"; +$tabsqlsort[32]="year ASC, month ASC, day ASC"; $tabsqlsort[33]="code ASC"; $tabsqlsort[34]="code ASC"; $tabsqlsort[35]="c.label ASC"; @@ -283,7 +284,7 @@ $tabfield[28]= "code,label,affect,delay,newbymonth,country_id,country"; $tabfield[29]= "code,label,percent,position"; $tabfield[30]= "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y"; //$tabfield[31]= "pcg_version,label"; -//$tabfield[32]= "code,label,range_account,sens,category_type,formula,position,country_id,country"; +$tabfield[32]= "code,year,month,day,country_id,country"; $tabfield[33]= "code,label"; $tabfield[34]= "code,label"; $tabfield[35]= "label"; @@ -323,7 +324,7 @@ $tabfieldvalue[28]= "code,label,affect,delay,newbymonth,country"; $tabfieldvalue[29]= "code,label,percent,position"; $tabfieldvalue[30]= "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y"; //$tabfieldvalue[31]= "pcg_version,label"; -//$tabfieldvalue[32]= "code,label,range_account,sens,category_type,formula,position,country"; +$tabfieldvalue[32]= "code,day,month,year,country"; $tabfieldvalue[33]= "code,label"; $tabfieldvalue[34]= "code,label"; $tabfieldvalue[35]= "label"; @@ -364,15 +365,16 @@ $tabfieldinsert[29]= "code,label,percent,position"; $tabfieldinsert[30]= "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y"; //$tabfieldinsert[31]= "pcg_version,label"; //$tabfieldinsert[32]= "code,label,range_account,sens,category_type,formula,position,fk_country"; +$tabfieldinsert[32]= "code,day,month,year,fk_country"; $tabfieldinsert[33]= "code,label"; $tabfieldinsert[34]= "code,label"; $tabfieldinsert[35]= "label"; $tabfieldinsert[36]= "range_ik,fk_c_exp_tax_cat"; $tabfieldinsert[37]= "code,label,short_label,unit_type,scale"; -// Rowid name if the field is not autoincrement type -// Example: "" if id field is "rowid" and has autoincrement on -// "nameoffield" if id field is not "rowid" or has not autoincrement on +// Rowid name of field depending if field is autoincrement on or off.. +// Use "" if id field is "rowid" and has autoincrement on +// Use "nameoffield" if id field is not "rowid" or has not autoincrement on $tabrowid=array(); $tabrowid[1] = ""; $tabrowid[2] = ""; @@ -405,7 +407,7 @@ $tabrowid[28]= ""; $tabrowid[29]= ""; $tabrowid[30]= ""; //$tabrowid[31]= ""; -//$tabrowid[32]= ""; +$tabrowid[32]= "id"; $tabrowid[33]= "rowid"; $tabrowid[34]= "rowid"; $tabrowid[35]= ""; @@ -445,7 +447,7 @@ $tabcond[28]= ! empty($conf->holiday->enabled); $tabcond[29]= ! empty($conf->projet->enabled); $tabcond[30]= ! empty($conf->label->enabled); //$tabcond[31]= ! empty($conf->accounting->enabled); -//$tabcond[32]= ! empty($conf->accounting->enabled); +$tabcond[32]= (! empty($conf->holiday->enabled) || ! empty($conf->hrm->enabled)); $tabcond[33]= ! empty($conf->hrm->enabled); $tabcond[34]= ! empty($conf->hrm->enabled); $tabcond[35]= ! empty($conf->expensereport->enabled); @@ -485,12 +487,12 @@ $tabhelp[28] = array('affect'=>$langs->trans("FollowedByACounter"),'delay'=>$lan $tabhelp[29] = array('code'=>$langs->trans("EnterAnyCode"), 'percent'=>$langs->trans("OpportunityPercent"), 'position'=>$langs->trans("PositionIntoComboList")); $tabhelp[30] = array('code'=>$langs->trans("EnterAnyCode"), 'name'=>$langs->trans("LabelName"), 'paper_size'=>$langs->trans("LabelPaperSize")); //$tabhelp[31] = array('pcg_version'=>$langs->trans("EnterAnyCode")); -//$tabhelp[32] = array('code'=>$langs->trans("EnterAnyCode")); +$tabhelp[32] = array('code'=>$langs->trans("EnterAnyCode"), 'daterule'=>"Use 'date'", 'country'=>$langs->trans("EnterACountryOnlyIfSpecificToOneCountry"), 'year'=>$langs->trans("ZeroMeansEveryYear")); $tabhelp[33] = array('code'=>$langs->trans("EnterAnyCode")); $tabhelp[34] = array('code'=>$langs->trans("EnterAnyCode")); -$tabhelp[35]= array(); -$tabhelp[36]= array('range_ik'=>$langs->trans('PrevRangeToThisRange')); -$tabhelp[37]= array('code'=>$langs->trans("EnterAnyCode")); +$tabhelp[35] = array(); +$tabhelp[36] = array('range_ik'=>$langs->trans('PrevRangeToThisRange')); +$tabhelp[37] = array('code'=>$langs->trans("EnterAnyCode")); // List of check for fields (NOT USED YET) $tabfieldcheck=array(); @@ -525,12 +527,12 @@ $tabfieldcheck[28] = array(); $tabfieldcheck[29] = array(); $tabfieldcheck[30] = array(); //$tabfieldcheck[31] = array(); -//$tabfieldcheck[32] = array(); +$tabfieldcheck[32] = array(); $tabfieldcheck[33] = array(); $tabfieldcheck[34] = array(); -$tabfieldcheck[35]= array(); -$tabfieldcheck[36]= array(); -$tabfieldcheck[37]= array(); +$tabfieldcheck[35] = array(); +$tabfieldcheck[36] = array(); +$tabfieldcheck[37] = array(); // Complete all arrays with entries found into modules complete_dictionary_with_modules($taborder, $tabname, $tablib, $tabsql, $tabsqlsort, $tabfield, $tabfieldvalue, $tabfieldinsert, $tabrowid, $tabcond, $tabhelp, $tabfieldcheck); @@ -621,9 +623,11 @@ if (GETPOST('actionadd') || GETPOST('actionmodify')) $ok=1; foreach ($listfield as $f => $value) { - if ($value == 'country_id' && in_array($tablib[$id], array('DictionaryVAT','DictionaryRegion','DictionaryCompanyType','DictionaryHolidayTypes','DictionaryRevenueStamp','DictionaryAccountancysystem','DictionaryAccountancyCategory'))) continue; // For some pages, country is not mandatory - if ($value == 'country' && in_array($tablib[$id], array('DictionaryCanton','DictionaryCompanyType','DictionaryRevenueStamp'))) continue; // For some pages, country is not mandatory - if ($value == 'localtax1' && empty($_POST['localtax1_type'])) continue; + // Discard check of mandatory fields for country for some tables + if ($value == 'country_id' && in_array($tablib[$id], array('DictionaryPublicHolidays','DictionaryVAT','DictionaryRegion','DictionaryCompanyType','DictionaryHolidayTypes','DictionaryRevenueStamp','DictionaryAccountancysystem','DictionaryAccountancyCategory'))) continue; // For some pages, country is not mandatory + if ($value == 'country' && in_array($tablib[$id], array('DictionaryPublicHolidays','DictionaryCanton','DictionaryCompanyType','DictionaryRevenueStamp'))) continue; // For some pages, country is not mandatory + // Discard check of mandatory fiedls for other fields + if ($value == 'localtax1' && empty($_POST['localtax1_type'])) continue; if ($value == 'localtax2' && empty($_POST['localtax2_type'])) continue; if ($value == 'color' && empty($_POST['color'])) continue; if ($value == 'formula' && empty($_POST['formula'])) continue; @@ -992,8 +996,10 @@ if ($id) if (! preg_match('/ WHERE /', $sql)) $sql.= " WHERE 1 = 1"; if ($search_country_id > 0) $sql.= " AND c.rowid = ".$search_country_id; - if ($search_code != '' && $id != 9) $sql.= natural_search("code", $search_code); if ($search_code != '' && $id == 9) $sql.= natural_search("code_iso", $search_code); + elseif ($search_code != '' && $id == 28) $sql.= natural_search("h.code", $search_code); + elseif ($search_code != '' && $id == 32) $sql.= natural_search("a.code", $search_code); + elseif ($search_code != '' && $id != 9) $sql.= natural_search("code", $search_code); if ($sortfield) { @@ -1053,7 +1059,7 @@ if ($id) continue; } - // Define field friedly name from its technical name + // Define field friendly name from its technical name $valuetoshow=ucfirst($fieldlist[$field]); // Par defaut $valuetoshow=$langs->trans($valuetoshow); // try to translate $class=''; @@ -1156,7 +1162,8 @@ if ($id) print ''; // Line to enter new values - print ''; + print ''; + print ''; $obj = new stdClass(); // If data was already input, we define them in obj to populate input fields. @@ -1632,10 +1639,10 @@ if ($id) if ($obj->code == 'RECEP') $canbemodified=1; if ($tabname[$id] == MAIN_DB_PREFIX."c_actioncomm") $canbemodified=1; - // Url + // Build Url. The table is id=, the id of line is rowid= $rowidcol=$tabrowid[$id]; // If rowidcol not defined - if (empty($rowidcol) || in_array($id, array(6,7,8,13,17,19,27))) $rowidcol='rowid'; + if (empty($rowidcol) || in_array($id, array(6,7,8,13,17,19,27,32))) $rowidcol='rowid'; $url = $_SERVER["PHP_SELF"].'?'.($page?'page='.$page.'&':'').'sortfield='.$sortfield.'&sortorder='.$sortorder.'&rowid='.((! empty($obj->{$rowidcol}) || $obj->{$rowidcol} == '0')?$obj->{$rowidcol}:(! empty($obj->code)?urlencode($obj->code):'')).'&code='.(! empty($obj->code)?urlencode($obj->code):''); if (! empty($param)) $url .= '&'.$param; if (! is_null($withentity)) $url .= '&entity='.$withentity; @@ -1971,7 +1978,6 @@ function fieldList($fieldlist, $obj = '', $tabname = '', $context = '') } else { - $fieldValue = isset($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:''; if ($fieldlist[$field]=='sortorder') @@ -1981,11 +1987,11 @@ function fieldList($fieldlist, $obj = '', $tabname = '', $context = '') $classtd=''; $class=''; if ($fieldlist[$field]=='code') $class='maxwidth100'; - if (in_array($fieldlist[$field], array('pos', 'use_default', 'affect', 'delay', 'position', 'sortorder', 'sens', 'category_type'))) $class='maxwidth50'; + if (in_array($fieldlist[$field], array('dayrule', 'day', 'month', 'year', 'pos', 'use_default', 'affect', 'delay', 'position', 'sortorder', 'sens', 'category_type'))) $class='maxwidth50'; if (in_array($fieldlist[$field], array('libelle', 'label', 'tracking'))) $class='quatrevingtpercent'; print ''; $transfound=0; - if (in_array($fieldlist[$field], array('label','libelle'))) + if (in_array($fieldlist[$field], array('label','libelle'))) // For label { $transkey=''; // Special case for labels diff --git a/htdocs/core/lib/admin.lib.php b/htdocs/core/lib/admin.lib.php index 6635220cc23..cf5ab8dc7e0 100644 --- a/htdocs/core/lib/admin.lib.php +++ b/htdocs/core/lib/admin.lib.php @@ -1094,6 +1094,8 @@ function complete_dictionary_with_modules(&$taborder, &$tabname, &$tablib, &$tab { global $db, $modules, $conf, $langs; + dol_syslog("complete_dictionary_with_modules Search external modules to complete the list of dictionnary tables", LOG_DEBUG, 1); + // Search modules $modulesdir = dolGetModulesDirs(); $i = 0; // is a sequencer of modules found @@ -1191,6 +1193,8 @@ function complete_dictionary_with_modules(&$taborder, &$tabname, &$tablib, &$tab } } + dol_syslog("", LOG_DEBUG, -1); + return 1; } @@ -1259,7 +1263,7 @@ function activateModulesRequiredByCountry($country_code) } /** - * Add external modules to list of contact element + * Search external modules to complete the list of contact element * * @param array $elementList elementList * @return int 1 @@ -1278,6 +1282,8 @@ function complete_elementList_with_modules(&$elementList) $i = 0; // is a sequencer of modules found $j = 0; // j is module number. Automatically affected if module number not defined. + dol_syslog("complete_elementList_with_modules Search external modules to complete the list of contact element", LOG_DEBUG, 1); + $modulesdir = dolGetModulesDirs(); foreach ($modulesdir as $dir) @@ -1355,6 +1361,8 @@ function complete_elementList_with_modules(&$elementList) } } + dol_syslog("", LOG_DEBUG, -1); + return 1; } diff --git a/htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql b/htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql new file mode 100644 index 00000000000..5b6f4bf3f0c --- /dev/null +++ b/htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql @@ -0,0 +1,43 @@ +-- Copyright (C) 2001-2004 Rodolphe Quiedeville +-- Copyright (C) 2003 Jean-Louis Bergamo +-- Copyright (C) 2004-2010 Laurent Destailleur +-- Copyright (C) 2004 Benoit Mortier +-- Copyright (C) 2004 Guillaume Delecourt +-- Copyright (C) 2005-2012 Regis Houssin +-- Copyright (C) 2007 Patrick Raguin +-- Copyright (C) 2019 Markus Welters +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- + +-- +-- Ne pas placer de commentaire en fin de ligne, ce fichier est parsé lors +-- de l'install et tous les sigles '--' sont supprimés. +-- + + +-- LIST ON https://fr.wikipedia.org/wiki/Jour_férié + + +-- A lot of countries +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('NEWYEARDAY1', 0, 0, 0, 1, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('LABORDAY1', 0, 0, 0, 5, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('CHRISTMASDAY1', 0, 0, 0, 12, 25, 1); + +-- France only +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRVICTORYDAY', 0, 1, 0, 5, 8, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRNATIONALDAY', 0, 1, 0, 7, 14, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRASSOMPTION', 0, 1, 0, 8, 15, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRTOUSSAINT', 0, 1, 0, 11, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRARMISTICE', 0, 1, 0, 11, 11, 1); diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 8efe44db103..64de0364139 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -89,5 +89,20 @@ ALTER TABLE llx_projet ADD COLUMN usage_organize_event integer DEFAULT 0; UPDATE llx_projet set usage_opportunity = 1 WHERE fk_opp_status > 0; - + +create table llx_c_hrm_public_holiday +( + id integer AUTO_INCREMENT PRIMARY KEY, + entity integer DEFAULT 0 NOT NULL, -- multi company id, 0 = all + fk_country integer, + code varchar(62), + dayrule varchar(255) DEFAULT 'date', -- 'date', 'xxx', ... + day integer, + month integer, + year integer, -- 0 for all years + active integer DEFAULT 1, + import_key varchar(14) +)ENGINE=innodb; + + \ No newline at end of file diff --git a/htdocs/install/mysql/tables/llx_c_field_list.sql b/htdocs/install/mysql/tables/llx_c_field_list.sql index 44b02c35248..fa528bec0ef 100644 --- a/htdocs/install/mysql/tables/llx_c_field_list.sql +++ b/htdocs/install/mysql/tables/llx_c_field_list.sql @@ -36,5 +36,4 @@ create table llx_c_field_list visible tinyint DEFAULT 1 NOT NULL, -- visibility of field. 0=Never visible, 1=Visible on list and forms, 2=Visible on list only enabled varchar(255) DEFAULT 1, -- Condition to show or hide rang integer DEFAULT 0 - )ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.key.sql b/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.key.sql new file mode 100644 index 00000000000..23dcbf355b4 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.key.sql @@ -0,0 +1,21 @@ +-- ======================================================================== +-- Copyright (C) 2019 Laurent Destailleur +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- ======================================================================== + +ALTER TABLE llx_c_hrm_public_holiday ADD UNIQUE INDEX uk_c_hrm_public_holiday(entity, code); +ALTER TABLE llx_c_hrm_public_holiday ADD UNIQUE INDEX uk_c_hrm_public_holiday2(entity, day, month, year); + diff --git a/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.sql b/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.sql new file mode 100644 index 00000000000..7efbe314875 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.sql @@ -0,0 +1,31 @@ +-- ======================================================================== +-- Copyright (C) 2019 Laurent Destailleur +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- ======================================================================== + +create table llx_c_hrm_public_holiday +( + id integer AUTO_INCREMENT PRIMARY KEY, + entity integer DEFAULT 0 NOT NULL, -- multi company id, 0 = all + fk_country integer, + code varchar(62), + dayrule varchar(255) DEFAULT 'date', -- 'date', 'xxx', ... + day integer, + month integer, + year integer, -- 0 for all years + active integer DEFAULT 1, + import_key varchar(14) +)ENGINE=innodb; diff --git a/htdocs/langs/en_US/hrm.lang b/htdocs/langs/en_US/hrm.lang index 12bb1592cbc..3697c47e30d 100644 --- a/htdocs/langs/en_US/hrm.lang +++ b/htdocs/langs/en_US/hrm.lang @@ -9,6 +9,7 @@ ConfirmDeleteEstablishment=Are you sure you wish to delete this establishment? OpenEtablishment=Open establishment CloseEtablishment=Close establishment # Dictionary +DictionaryPublicHolidays=HRM - Public holidays DictionaryDepartment=HRM - Department list DictionaryFunction=HRM - Function list # Module From 04adbd8c80d8bd532a76e942dc4358b2acc17d57 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 01:52:51 +0200 Subject: [PATCH 56/60] Fix conflict between new module reception and old process Fix inventory record does not need status at creation --- htdocs/admin/stock.php | 120 ++++++++---------- htdocs/admin/supplier_order.php | 34 +++-- .../class/fournisseur.commande.class.php | 3 +- htdocs/fourn/commande/card.php | 80 +++++++----- htdocs/langs/en_US/admin.lang | 2 +- htdocs/langs/en_US/orders.lang | 2 +- htdocs/langs/en_US/sendings.lang | 2 + htdocs/langs/en_US/stocks.lang | 4 +- htdocs/langs/fr_FR/orders.lang | 2 +- .../inventory/class/inventory.class.php | 4 +- htdocs/reception/card.php | 4 +- 11 files changed, 135 insertions(+), 122 deletions(-) diff --git a/htdocs/admin/stock.php b/htdocs/admin/stock.php index 7c22d1a4a58..572f034f259 100644 --- a/htdocs/admin/stock.php +++ b/htdocs/admin/stock.php @@ -103,14 +103,14 @@ print '
'; print ''; print ''; print "\n"; -print ''."\n"; +print ''."\n"; print ''."\n"; $found=0; print ''; print ''; -print ''; print ''; -print ''; print ''; -print ''; print ''; -print ''; print "\n"; + // Ref client print ''; + print $langs->trans("SupplierOrder").''; print '\n"; From fbbe49d6dcf8dbe2fae7f06e7bfab1d060a5362d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 02:12:56 +0200 Subject: [PATCH 58/60] Replace deprecated code --- htdocs/reception/card.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/reception/card.php b/htdocs/reception/card.php index f1d32b3ed6e..1dbac0117fa 100644 --- a/htdocs/reception/card.php +++ b/htdocs/reception/card.php @@ -816,7 +816,7 @@ if ($action == 'create') print '\n"; print ''; @@ -1164,10 +1164,10 @@ if ($action == 'create') { print ''; print ''; print ''; } else { @@ -1425,7 +1425,7 @@ elseif ($id || $ref) print ''; print ''; print ''; - print $form->select_date($object->date_delivery?$object->date_delivery:-1, 'liv_', 1, 1, '', "setdate_livraison", 1, 0, 1); + print $form->selectDate($object->date_delivery?$object->date_delivery:-1, 'liv_', 1, 1, '', "setdate_livraison", 1, 0); print ''; print ''; } @@ -1888,9 +1888,9 @@ elseif ($id || $ref) { print ''; } print ''; From c0b8315e1983c3ddc6b3f6a2d0ac759e33338deb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 02:45:00 +0200 Subject: [PATCH 59/60] Replace deprecated code --- htdocs/reception/list.php | 2 +- htdocs/website/index.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/reception/list.php b/htdocs/reception/list.php index 17518df8ab6..8b37df8c779 100644 --- a/htdocs/reception/list.php +++ b/htdocs/reception/list.php @@ -566,7 +566,7 @@ if ($resql) print $langs->trans('DateInvoice'); print ''; print ''; print ''; print ''; diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 1fd5939b4ac..38af5be87e4 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -3080,7 +3080,7 @@ if ($action == 'editmeta' || $action == 'createcontainer') print ''; From ec1751bae9f7342d61fc5bcbd461e83c25cdd56b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 02:47:20 +0200 Subject: [PATCH 60/60] Doxygen --- htdocs/core/class/html.form.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 5e2c754fce6..187df8cf539 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5216,7 +5216,7 @@ class Form * @param datetime $adddateof Add a link "Date of invoice" using the following date. * @return string|void Nothing or string if nooutput is 1 * @deprecated - * @see form_date(), select_month(), select_year(), select_dayofweek() + * @see selectDate(), form_date(), select_month(), select_year(), select_dayofweek() */ public function select_date($set_time = '', $prefix = 're', $h = 0, $m = 0, $empty = 0, $form_name = "", $d = 1, $addnowlink = 0, $nooutput = 0, $disabled = 0, $fullday = '', $addplusone = '', $adddateof = '') {
".$langs->trans("RuleForStockManagementDecrease")."'.$langs->trans("Status").''.$langs->trans("Status").'
'.$langs->trans("DeStockOnBill").''; +print ''; if (! empty($conf->facture->enabled)) { if ($conf->use_javascript_ajax) { @@ -130,7 +130,7 @@ $found++; print '
'.$langs->trans("DeStockOnValidateOrder").''; +print ''; if (! empty($conf->commande->enabled)) { if ($conf->use_javascript_ajax) { @@ -152,7 +152,7 @@ $found++; print '
'.$langs->trans("DeStockOnShipment").''; +print ''; if (! empty($conf->expedition->enabled)) { if ($conf->use_javascript_ajax) { @@ -172,7 +172,7 @@ $found++; print '
'.$langs->trans("DeStockOnShipmentOnClosing").''; +print ''; if (! empty($conf->expedition->enabled)) { if ($conf->use_javascript_ajax) { @@ -205,14 +205,14 @@ print '
'; print ''; print ''; print "\n"; -print ''."\n"; +print ''."\n"; print ''."\n"; $found=0; print ''; print ''; -print ''; print ''; -print ''; - print ''; - print ''; + print ''; - print ''; - print ''; + print ''; print ''; - print '
".$langs->trans("RuleForStockManagementIncrease")."'.$langs->trans("Status").''.$langs->trans("Status").'
'.$langs->trans("ReStockOnBill").''; +print ''; if (! empty($conf->fournisseur->enabled)) { if ($conf->use_javascript_ajax) { @@ -233,7 +233,7 @@ $found++; print '
'.$langs->trans("ReStockOnValidateOrder").''; +print ''; if (! empty($conf->fournisseur->enabled)) { if ($conf->use_javascript_ajax) { @@ -253,8 +253,8 @@ $found++; if (!empty($conf->reception->enabled)) { print '
'.$langs->trans("StockOnReception").''; + print ''.$langs->trans("StockOnReception").''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_CALCULATE_ON_RECEPTION'); @@ -268,8 +268,8 @@ if ($conf->use_javascript_ajax) { print '
'.$langs->trans("StockOnReceptionOnClosing").''; + print ''.$langs->trans("StockOnReceptionOnClosing").''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_CALCULATE_ON_RECEPTION_CLOSE'); @@ -284,7 +284,7 @@ else { print '
'.$langs->trans("ReStockOnDispatchOrder").''; + print ''; if (! empty($conf->fournisseur->enabled)) { if ($conf->use_javascript_ajax) { @@ -313,16 +313,17 @@ if ($conf->use_javascript_ajax) { print '
'; print '
'; + print ''; print ''; print "\n"; -print ''."\n"; +print ''."\n"; print ''."\n"; print ''; print ''; -print ''; print ''; - print ''; print ''; - print ''; print ''; - print ''; + print ''; + print ''; + print "
".$langs->trans("RuleForStockAvailability")."'.$langs->trans("Status").''.$langs->trans("Status").'
'.$langs->trans("WarehouseAllowNegativeTransfer").''; +print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_ALLOW_NEGATIVE_TRANSFER'); } else { @@ -337,7 +338,7 @@ if($conf->invoice->enabled) { print '
'.$langs->trans("StockMustBeEnoughForInvoice").''; + print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_INVOICE'); } else { @@ -352,7 +353,7 @@ if($conf->order->enabled) { print '
'.$langs->trans("StockMustBeEnoughForOrder").''; + print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_ORDER'); } else { @@ -367,7 +368,7 @@ if($conf->expedition->enabled) { print '
'.$langs->trans("StockMustBeEnoughForShipment").''; + print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_SHIPMENT'); } else { @@ -391,12 +392,12 @@ if ($virtualdiffersfromphysical) print ''; print ''; print "\n"; - print ''."\n"; + print ''."\n"; print ''."\n"; print ''; print ''; - print ''; print ''; print ''; print "\n"; -$var=false; -//if ($conf->global->MAIN_FEATURES_LEVEL > 0) -//{ - print '\n"; +print '\n"; -//} // Ask for payment bank during supplier order /* Kept as hidden for the moment @@ -564,6 +560,20 @@ print '\n"; +// Option to add a quality/validation step, on products, after reception. +$langs->load("stocks"); +print ''; +print ''; +print ''; +print '\n\n"; + print '
".$langs->trans("RuleForStockReplenishment")." ".img_help('help', $langs->trans("VirtualDiffersFromPhysical"))."'.$langs->trans("Status").''.$langs->trans("Status").'
'.$langs->trans("UseVirtualStockByDefault").''; + print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_USE_VIRTUAL_STOCK'); } else { @@ -414,12 +415,12 @@ print ''; print ''; print "\n"; -print ''."\n"; +print ''."\n"; print ''."\n"; print ''; print ''; -print ''; print ''; -print '\n"; print ''; print ''; -print '\n"; print "\n"; -if (! empty($conf->fournisseur->enabled) && !empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER)) { - print ''; - print ''; - print '\n\n"; -} - print '
".$langs->trans("Other")."'.$langs->trans("Status").''.$langs->trans("Status").'
'.$langs->trans("UserWarehouseAutoCreate").''; +print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_USERSTOCK_AUTOCREATE'); } else { @@ -433,7 +434,7 @@ print '
'; print $form->textwithpicto($langs->trans("StockSupportServices"), $langs->trans("StockSupportServicesDesc")); print ''; +print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_SUPPORTS_SERVICES'); } else { @@ -445,7 +446,7 @@ print "
'.$langs->trans("AllowAddLimitStockByWarehouse").''; +print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_ALLOW_ADD_LIMIT_STOCK_BY_WAREHOUSE'); } else { @@ -455,19 +456,6 @@ if ($conf->use_javascript_ajax) { print "
'.$langs->trans("UseDispatchStatus").''; -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('SUPPLIER_ORDER_USE_DISPATCH_STATUS'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("SUPPLIER_ORDER_USE_DISPATCH_STATUS", $arrval, $conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS); -} - print "
'; print '
'; @@ -476,43 +464,45 @@ if ($conf->global->MAIN_FEATURES_LEVEL >= 2) print ''; print ''; print ''."\n"; - print ''."\n"; - print ''."\n"; + print ''."\n"; + print ''."\n"; // Example with a yes / no select - print ''; + /*print ''; print ''; - print ''; + */ // Example with a yes / no select - print ''; + /*print ''; print ''; - print ''; + print ''; + */ - // Example with a yes / no select + // Example with a yes / no select print ''; - print ''; - print ''; + print ''; print '
'.$langs->trans("Inventory").''.$langs->trans("Status").'
'.$langs->trans("Status").'
'.$langs->trans("INVENTORY_DISABLE_VIRTUAL").''; -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('INVENTORY_DISABLE_VIRTUAL'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("INVENTORY_DISABLE_VIRTUAL", $arrval, $conf->global->INVENTORY_DISABLE_VIRTUAL); -} + print ''; + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('INVENTORY_DISABLE_VIRTUAL'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("INVENTORY_DISABLE_VIRTUAL", $arrval, $conf->global->INVENTORY_DISABLE_VIRTUAL); + } print '
'.$langs->trans("INVENTORY_USE_MIN_PA_IF_NO_LAST_PA").''; -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('INVENTORY_USE_MIN_PA_IF_NO_LAST_PA'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("INVENTORY_USE_MIN_PA_IF_NO_LAST_PA", $arrval, $conf->global->INVENTORY_USE_MIN_PA_IF_NO_LAST_PA); -} - print '
'; + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('INVENTORY_USE_MIN_PA_IF_NO_LAST_PA'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("INVENTORY_USE_MIN_PA_IF_NO_LAST_PA", $arrval, $conf->global->INVENTORY_USE_MIN_PA_IF_NO_LAST_PA); + } + print '
'.$langs->trans("INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT").''; -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT", $arrval, $conf->global->INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT); -} + print ''.$langs->trans("INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT").''; + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT", $arrval, $conf->global->INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT); + } print '
'; diff --git a/htdocs/admin/supplier_order.php b/htdocs/admin/supplier_order.php index e895a0b4005..f1fbbd4b286 100644 --- a/htdocs/admin/supplier_order.php +++ b/htdocs/admin/supplier_order.php @@ -494,20 +494,16 @@ print '
'.$langs->trans("Parameter").''.$langs->trans("Value").' 
'; - print $form->textwithpicto($langs->trans("UseDoubleApproval"), $langs->trans("Use3StepsApproval"), 1, 'help').'
'; - print $langs->trans("IfSetToYesDontForgetPermission"); - print '
'; - print ''; - print ''; - print ''; - print "
'; +print $form->textwithpicto($langs->trans("UseDoubleApproval"), $langs->trans("Use3StepsApproval"), 1, 'help').'
'; +print $langs->trans("IfSetToYesDontForgetPermission"); +print '
'; +print ''; +print ''; +print ''; +print "
'; print ''; print "
'.$langs->trans("UseDispatchStatus").''; +if ($conf->use_javascript_ajax) { + print ajax_constantonoff('SUPPLIER_ORDER_USE_DISPATCH_STATUS'); +} else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("SUPPLIER_ORDER_USE_DISPATCH_STATUS", $arrval, $conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS); +} +print "

'; print ''; diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index 2edd86d1c10..c38107b14b4 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -1822,10 +1822,9 @@ class CommandeFournisseur extends CommonOrder $error++; } - // Si module stock gere et que incrementation faite depuis un dispatching en stock + // If module stock is enabled and the stock increase is done on purchase order dispatching if (! $error && $entrepot > 0 && ! empty($conf->stock->enabled) && ! empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER)) { - $mouv = new MouvementStock($this->db); if ($product > 0) { diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index ff33a42e2a9..66b48164a9e 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -2346,7 +2346,7 @@ elseif (! empty($object->id)) }*/ // Modify - if ($object->statut == 1) + if ($object->statut == CommandeFournisseur::STATUS_VALIDATED) { if ($user->rights->fournisseur->commande->commander) { @@ -2355,7 +2355,7 @@ elseif (! empty($object->id)) } // Approve - if ($object->statut == 1) + if ($object->statut == CommandeFournisseur::STATUS_VALIDATED) { if ($user->rights->fournisseur->commande->approuver) { @@ -2377,7 +2377,7 @@ elseif (! empty($object->id)) // Second approval (if option SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED is set) if (! empty($conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED) && $conf->global->MAIN_FEATURES_LEVEL > 0 && $object->total_ht >= $conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED) { - if ($object->statut == 1) + if ($object->statut == CommandeFournisseur::STATUS_VALIDATED) { if ($user->rights->fournisseur->commande->approve2) { @@ -2398,7 +2398,7 @@ elseif (! empty($object->id)) } // Refuse - if ($object->statut == 1) + if ($object->statut == CommandeFournisseur::STATUS_VALIDATED) { if ($user->rights->fournisseur->commande->approuver || $user->rights->fournisseur->commande->approve2) { @@ -2411,7 +2411,7 @@ elseif (! empty($object->id)) } // Send - if (in_array($object->statut, array(2, 3, 4, 5))) + if (in_array($object->statut, array(CommandeFournisseur::STATUS_ACCEPTED, 3, 4, 5))) { if ($user->rights->fournisseur->commande->commander) { @@ -2420,7 +2420,7 @@ elseif (! empty($object->id)) } // Reopen - if (in_array($object->statut, array(2))) + if (in_array($object->statut, array(CommandeFournisseur::STATUS_ACCEPTED))) { $buttonshown=0; if (! $buttonshown && $user->rights->fournisseur->commande->approuver) @@ -2462,7 +2462,7 @@ elseif (! empty($object->id)) } } - if ($object->statut == 2) + if ($object->statut == CommandeFournisseur::STATUS_ACCEPTED) { if ($user->rights->fournisseur->commande->commander) { @@ -2474,6 +2474,15 @@ elseif (! empty($object->id)) } } + // Classify received (this does not record reception) + if ($object->statut == CommandeFournisseur::STATUS_ORDERSENT || $object->statut == CommandeFournisseur::STATUS_RECEIVED_PARTIALLY) + { + if ($user->rights->fournisseur->commande->receptionner) + { + print ''; + } + } + // Create bill //if (! empty($conf->facture->enabled)) //{ @@ -2590,38 +2599,41 @@ elseif (! empty($object->id)) print '
'; - if ($user->rights->fournisseur->commande->receptionner && ($object->statut == CommandeFournisseur::STATUS_ORDERSENT || $object->statut == CommandeFournisseur::STATUS_RECEIVED_PARTIALLY)) + if ($action == 'classifyreception') { - // Set status to received (action=livraison) - print ''."\n"; - print '
'; - print ''; - print ''; - print load_fiche_titre($langs->trans("Receive"), '', ''); + if ($user->rights->fournisseur->commande->receptionner && ($object->statut == CommandeFournisseur::STATUS_ORDERSENT || $object->statut == CommandeFournisseur::STATUS_RECEIVED_PARTIALLY)) + { + // Set status to received (action=livraison) + print ''."\n"; + print ''; + print ''; + print ''; + print load_fiche_titre($langs->trans("Receive"), '', ''); - print ''; - //print ''; - print '\n"; + print '
'.$langs->trans("Receive").'
'.$langs->trans("DeliveryDate").''; - $datepreselected = dol_now(); - print $form->selectDate($datepreselected, '', 1, 1, '', "commande", 1, 1); - print "
'; + //print ''; + print '\n"; - print ''; - print ''; - print ''; - print "
'.$langs->trans("Receive").'
'.$langs->trans("DeliveryDate").''; + $datepreselected = dol_now(); + print $form->selectDate($datepreselected, '', 1, 1, '', "commande", 1, 1); + print "
'.$langs->trans("Delivery")."\n"; - $liv = array(); - $liv[''] = ' '; - $liv['tot'] = $langs->trans("CompleteOrNoMoreReceptionExpected"); - $liv['par'] = $langs->trans("PartialWoman"); - $liv['nev'] = $langs->trans("NeverReceived"); - $liv['can'] = $langs->trans("Canceled"); + print '
'.$langs->trans("Delivery")."\n"; + $liv = array(); + $liv[''] = ' '; + $liv['tot'] = $langs->trans("CompleteOrNoMoreReceptionExpected"); + $liv['par'] = $langs->trans("PartialWoman"); + $liv['nev'] = $langs->trans("NeverReceived"); + $liv['can'] = $langs->trans("Canceled"); - print $form->selectarray("type", $liv); + print $form->selectarray("type", $liv); - print '
'.$langs->trans("Comment").'
\n"; - print "
\n"; - print "
"; + print '
'.$langs->trans("Comment").'
\n"; + print "\n"; + print "
"; + } } // List of actions on element diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 9b8c6f04c51..494e7d4a8a3 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1695,7 +1695,7 @@ SuppliersSetup=Vendor module setup SuppliersCommandModel=Complete template of purchase order (logo...) SuppliersInvoiceModel=Complete template of vendor invoice (logo...) SuppliersInvoiceNumberingModel=Vendor invoices numbering models -IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval +IfSetToYesDontForgetPermission=If set to a non null value, don't forget to provide permissions to groups or users allowed for the second approval ##### GeoIPMaxmind ##### GeoIPMaxmindSetup=GeoIP Maxmind module setup PathToGeoIPMaxmindCountryDataFile=Path to file containing Maxmind ip to country translation.
Examples:
/usr/local/share/GeoIP/GeoIP.dat
/usr/share/GeoIP/GeoIP.dat
/usr/share/GeoIP/GeoLite2-Country.mmdb diff --git a/htdocs/langs/en_US/orders.lang b/htdocs/langs/en_US/orders.lang index ad895845488..256bd2a7d4d 100644 --- a/htdocs/langs/en_US/orders.lang +++ b/htdocs/langs/en_US/orders.lang @@ -154,5 +154,5 @@ CreateOrders=Create orders ToBillSeveralOrderSelectCustomer=To create an invoice for several orders, click first onto customer, then choose "%s". OptionToSetOrderBilledNotEnabled=Option (from module Workflow) to set order to 'Billed' automatically when invoice is validated is off, so you will have to set status of order to 'Billed' manually. IfValidateInvoiceIsNoOrderStayUnbilled=If invoice validation is 'No', the order will remain to status 'Unbilled' until the invoice is validated. -CloseReceivedSupplierOrdersAutomatically=Close order to "%s" automatically if all products are received. +CloseReceivedSupplierOrdersAutomatically=Close order to status "%s" automatically if all products are received. SetShippingMode=Set shipping mode diff --git a/htdocs/langs/en_US/sendings.lang b/htdocs/langs/en_US/sendings.lang index ede7fea87b7..f3f023f8dcf 100644 --- a/htdocs/langs/en_US/sendings.lang +++ b/htdocs/langs/en_US/sendings.lang @@ -21,6 +21,7 @@ QtyShipped=Qty shipped QtyShippedShort=Qty ship. QtyPreparedOrShipped=Qty prepared or shipped QtyToShip=Qty to ship +QtyToReceive=Qty to receive QtyReceived=Qty received QtyInOtherShipments=Qty in other shipments KeepToShip=Remain to ship @@ -46,6 +47,7 @@ DateDeliveryPlanned=Planned date of delivery RefDeliveryReceipt=Ref delivery receipt StatusReceipt=Status delivery receipt DateReceived=Date delivery received +ClassifyReception=Classify reception SendShippingByEMail=Send shipment by email SendShippingRef=Submission of shipment %s ActionsOnShipping=Events on shipment diff --git a/htdocs/langs/en_US/stocks.lang b/htdocs/langs/en_US/stocks.lang index d42f1a82243..a98d4e18cbf 100644 --- a/htdocs/langs/en_US/stocks.lang +++ b/htdocs/langs/en_US/stocks.lang @@ -55,7 +55,7 @@ PMPValue=Weighted average price PMPValueShort=WAP EnhancedValueOfWarehouses=Warehouses value UserWarehouseAutoCreate=Create a user warehouse automatically when creating a user -AllowAddLimitStockByWarehouse=Manage also values for minimum and desired stock per pairing (product-warehouse) in addition to values per product +AllowAddLimitStockByWarehouse=Manage also value for minimum and desired stock per pairing (product-warehouse) in addition to the value for minimum and desired stock per product IndependantSubProductStock=Product stock and subproduct stock are independent QtyDispatched=Quantity dispatched QtyDispatchedShort=Qty dispatched @@ -184,7 +184,7 @@ SelectFournisseur=Vendor filter inventoryOnDate=Inventory INVENTORY_DISABLE_VIRTUAL=Virtual product (kit): do not decrement stock of a child product INVENTORY_USE_MIN_PA_IF_NO_LAST_PA=Use the buy price if no last buy price can be found -INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT=Stock movement has date of inventory +INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT=Stock movements will have the date of inventory (instead of the date of inventory validation) inventoryChangePMPPermission=Allow to change PMP value for a product ColumnNewPMP=New unit PMP OnlyProdsInStock=Do not add product without stock diff --git a/htdocs/langs/fr_FR/orders.lang b/htdocs/langs/fr_FR/orders.lang index a4a8827ca05..bbbeb2638e8 100644 --- a/htdocs/langs/fr_FR/orders.lang +++ b/htdocs/langs/fr_FR/orders.lang @@ -154,5 +154,5 @@ CreateOrders=Créer commandes ToBillSeveralOrderSelectCustomer=Pour créer une facture pour plusieurs commandes, cliquez d'abord sur le client, puis choisir "%s". OptionToSetOrderBilledNotEnabled=L'option (issue du module Workflow) pour définir automatiquement les commandes à 'Facturé' que une facture est validée, est désactivée, aussi vous devrez donc définir le statut de la commande sur 'Facturé' manuellement. IfValidateInvoiceIsNoOrderStayUnbilled=Si la validation de facture est à "Non", la commande restera au statut "Non facturé" jusqu'à ce que la facture soit validée. -CloseReceivedSupplierOrdersAutomatically=Fermer la commande "%s" automatiquement si tous les produits ont été reçus. +CloseReceivedSupplierOrdersAutomatically=Fermer la commande au statut "%s" automatiquement si tous les produits ont été reçus. SetShippingMode=Définir la méthode d'expédition diff --git a/htdocs/product/inventory/class/inventory.class.php b/htdocs/product/inventory/class/inventory.class.php index 62cfc476ba8..85b174ea725 100644 --- a/htdocs/product/inventory/class/inventory.class.php +++ b/htdocs/product/inventory/class/inventory.class.php @@ -59,7 +59,7 @@ class Inventory extends CommonObject * 'type' if the field format. * 'label' the translation key. * 'enabled' is a condition when the field must be managed. - * 'visible' says if field is visible in list (Examples: 0=Not visible, 1=Visible on list and create/update/view forms, 2=Visible on list only. Using a negative value means field is not shown by default on list but can be selected for viewing) + * 'visible' says if field is visible in list (Examples: 0=Not visible, 1=Visible on list and create/update/view forms, 2=Visible on list only, 3=Visible on create/update/view form only (not list), 4=Visible on list and update/view form only (not create). Using a negative value means field is not shown by default on list but can be selected for viewing) * 'notnull' is set to 1 if not null in database. Set to -1 if we must set data to null if empty ('' or 0). * 'index' if we want an index in database. * 'foreignkey'=>'tablename.field' if the field is a foreign key (it is recommanded to name the field fk_...). @@ -96,7 +96,7 @@ class Inventory extends CommonObject //'fk_user_valid' =>array('type'=>'integer', 'label'=>'UserValidation', 'enabled'=>1, 'visible'=>-1, 'position'=>512), 'import_key' =>array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'index'=>0, 'position'=>1000), - 'status' => array('type'=>'integer', 'label'=>'Status', 'visible'=>1, 'enabled'=>1, 'position'=>1000, 'default'=>0, 'arrayofkeyval'=>array(0=>'Todo', 1=>'Done', -1=>'Cancel')), + 'status' => array('type'=>'integer', 'label'=>'Status', 'visible'=>4, 'enabled'=>1, 'position'=>1000, 'default'=>0, 'arrayofkeyval'=>array(0=>'ToDo', 1=>'Done', -1=>'Cancel')), ); /** diff --git a/htdocs/reception/card.php b/htdocs/reception/card.php index 2153d8a53c7..e93c4f2d7ad 100644 --- a/htdocs/reception/card.php +++ b/htdocs/reception/card.php @@ -11,7 +11,7 @@ * Copyright (C) 2015 Claudio Aschieri * Copyright (C) 2016 Ferran Marcet * Copyright (C) 2016 Yasser Carreón - * Copyright (C) 2018 Quentin Vial-Gouteyron + * Copyright (C) 2018 Quentin Vial-Gouteyron * * 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 @@ -56,7 +56,7 @@ if (! empty($conf->projet->enabled)) { require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; } -$langs->loadLangs(array("receptions","companies","bills",'deliveries','orders','stocks','other','propal')); +$langs->loadLangs(array("receptions","companies","bills",'deliveries','orders','stocks','other','propal','sendings')); if (!empty($conf->incoterm->enabled)) $langs->load('incoterm'); if (! empty($conf->productbatch->enabled)) $langs->load('productbatch'); From 613886f86b67f231b99cd78dbf531c6436cefa3c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 02:09:37 +0200 Subject: [PATCH 57/60] Fix translation --- htdocs/reception/card.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/reception/card.php b/htdocs/reception/card.php index e93c4f2d7ad..f1d32b3ed6e 100644 --- a/htdocs/reception/card.php +++ b/htdocs/reception/card.php @@ -780,9 +780,10 @@ if ($action == 'create') } print '
'; - if ($origin == 'supplier_order') print $langs->trans('RefSupplierOrder'); + if ($origin == 'supplier_order') print $langs->trans('SupplierOrder'); else print $langs->trans('RefSupplier'); print ''; print ''; @@ -1398,7 +1399,7 @@ elseif ($id || $ref) if ($typeobject == 'CommandeFournisseur' && $object->$typeobject->id && ! empty($conf->propal->enabled)) { print '
'; - print $langs->trans("RefSupplierOrder").''; print $objectsrc->getNomUrl(1, 'reception'); print "'; //print dol_print_date($object->date_livraison,"day"); // date_livraison come from order and will be stored into date_delivery planed. $date_delivery = ($date_delivery?$date_delivery:$object->date_livraison); // $date_delivery comes from GETPOST - print $form->select_date($date_delivery?$date_delivery:-1, 'date_delivery', 1, 1, 1); + print $form->selectDate($date_delivery?$date_delivery:-1, 'date_delivery', 1, 1, 1); print "
'; - print $form->select_date($dispatchLines[$indiceAsked]['DLC'], 'dlc' . $indiceAsked, '', '', 1, ""); + print $form->selectDate($dispatchLines[$indiceAsked]['DLC'], 'dlc' . $indiceAsked, '', '', 1, ""); print ''; - print $form->select_date($dispatchLines[$indiceAsked]['DLUO'], 'dluo' . $indiceAsked, '', '', 1, ""); + print $form->selectDate($dispatchLines[$indiceAsked]['DLUO'], 'dluo' . $indiceAsked, '', '', 1, ""); print '

'; print $langs->trans('EatByDate').' : '; - print $form->select_date($lines[$i]->eatby, 'dlc' .$line_id, '', '', 1, ""). '
'; + print $form->selectDate($lines[$i]->eatby, 'dlc' .$line_id, '', '', 1, ""). '
'; print $langs->trans('SellByDate').' : '; - print $form->select_date($lines[$i]->sellby, 'dluo' .$line_id, '', '', 1, ""); + print $form->selectDate($lines[$i]->sellby, 'dluo' .$line_id, '', '', 1, ""); print '
'; - print $form->select_date('', '', '', '', '', '', 1, 1); + print $form->selectDate('', '', '', '', '', '', 1, 1); print '
'; print $langs->trans('DateCreation'); print ''; - print $form->select_date($pagedatecreation, 'datecreation', 1, 1, 0, '', 1, 1); + print $form->selectDate($pagedatecreation, 'datecreation', 1, 1, 0, '', 1, 1); //print dol_print_date($pagedatecreation, 'dayhour'); print '