From 64e91fa25b1ccfdb8ba510293fcf0582be0dec01 Mon Sep 17 00:00:00 2001 From: Cristian Torres Date: Wed, 27 Mar 2019 17:09:59 -0600 Subject: [PATCH 001/133] [CHANGE] Making State available in .odt templates... ...making use of the same strategy when loading Country info from single attribute. Previously attempted on PR #10463 which has been closed This also relates to #7428 --- htdocs/admin/company.php | 12 +++++++++++- htdocs/societe/class/societe.class.php | 25 +++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/htdocs/admin/company.php b/htdocs/admin/company.php index 949038b4413..1a5f963a46a 100644 --- a/htdocs/admin/company.php +++ b/htdocs/admin/company.php @@ -74,11 +74,21 @@ if ( ($action == 'update' && ! GETPOST("cancel",'alpha')) activateModulesRequiredByCountry($mysoc->country_code); } + $tmparray=getState(GETPOST('state_id','int'),'all',$db,$langs,0); + if (! empty($tmparray['id'])) + { + $mysoc->state_id =$tmparray['id']; + $mysoc->state_code =$tmparray['code']; + $mysoc->state_label=$tmparray['label']; + + $s=$mysoc->state_id.':'.$mysoc->state_code.':'.$mysoc->state_label; + dolibarr_set_const($db, "MAIN_INFO_SOCIETE_STATE", $s,'chaine',0,'',$conf->entity); + } + dolibarr_set_const($db, "MAIN_INFO_SOCIETE_NOM", GETPOST("nom",'nohtml'),'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_INFO_SOCIETE_ADDRESS", GETPOST("MAIN_INFO_SOCIETE_ADDRESS",'nohtml'),'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_INFO_SOCIETE_TOWN", GETPOST("MAIN_INFO_SOCIETE_TOWN",'nohtml'),'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_INFO_SOCIETE_ZIP", GETPOST("MAIN_INFO_SOCIETE_ZIP",'alpha'),'chaine',0,'',$conf->entity); - dolibarr_set_const($db, "MAIN_INFO_SOCIETE_STATE", GETPOST("state_id",'alpha'),'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_INFO_SOCIETE_REGION", GETPOST("region_code",'alpha'),'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_MONNAIE", GETPOST("currency",'aZ09'),'chaine',0,'',$conf->entity); dolibarr_set_const($db, "MAIN_INFO_SOCIETE_TEL", GETPOST("tel",'alpha'),'chaine',0,'',$conf->entity); diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 38d07e8e4db..ba268b0b269 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -3310,6 +3310,31 @@ class Societe extends CommonObject $this->country=$country_label; if (is_object($langs)) $this->country=($langs->trans('Country'.$country_code)!='Country'.$country_code)?$langs->trans('Country'.$country_code):$country_label; + //TODO This could be replicated for region but function `getRegion` didn't exist, so I didn't added it. + // We define state_id, state_code and state + $state_id=$state_code=$state_label=''; + if (! empty($conf->global->MAIN_INFO_SOCIETE_STATE)) + { + $tmp=explode(':',$conf->global->MAIN_INFO_SOCIETE_STATE); + $state_id=$tmp[0]; + if (! empty($tmp[1])) // If $conf->global->MAIN_INFO_SOCIETE_STATE is "id:code:label" + { + $state_code=$tmp[1]; + $state_label=$tmp[2]; + } + else // For backward compatibility + { + dol_syslog("Your state setup use an old syntax. Reedit it using setup area.", LOG_ERR); + include_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; + $state_code=getState($state_id,2,$this->db); // This need a SQL request, but it's the old feature that should not be used anymore + $state_label=getState($state_id,0,$this->db); // This need a SQL request, but it's the old feature that should not be used anymore + } + } + $this->state_id=$state_id; + $this->state_code=$state_code; + $this->state=$state_label; + if (is_object($langs)) $this->state=($langs->trans('State'.$state_code)!='State'.$state_code)?$langs->trans('State'.$state_code):$state_label; + $this->phone=empty($conf->global->MAIN_INFO_SOCIETE_TEL)?'':$conf->global->MAIN_INFO_SOCIETE_TEL; $this->fax=empty($conf->global->MAIN_INFO_SOCIETE_FAX)?'':$conf->global->MAIN_INFO_SOCIETE_FAX; $this->url=empty($conf->global->MAIN_INFO_SOCIETE_WEB)?'':$conf->global->MAIN_INFO_SOCIETE_WEB; From a7a8eb3648b2d0a634d76583c24249ee19924900 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laurent=20L=C3=A9onard?= Date: Sat, 4 May 2019 06:33:23 +0200 Subject: [PATCH 002/133] Add customer code in customer orders documents --- htdocs/core/modules/commande/doc/pdf_einstein.modules.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php index 9d73384cf3a..0aada45f7f0 100644 --- a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php @@ -1320,6 +1320,14 @@ class pdf_einstein extends ModelePDFCommandes $pdf->SetTextColor(0, 0, 60); $pdf->MultiCell(100, 3, $outputlangs->transnoentities("OrderDate")." : " . dol_print_date($object->date, "%d %b %Y", false, $outputlangs, true), '', 'R'); + if ($object->thirdparty->code_client) + { + $posy+=4; + $pdf->SetXY($posx, $posy); + $pdf->SetTextColor(0, 0, 60); + $pdf->MultiCell(100, 3, $outputlangs->transnoentities("CustomerCode")." : " . $outputlangs->transnoentities($object->thirdparty->code_client), '', 'R'); + } + // Get contact if (!empty($conf->global->DOC_SHOW_FIRST_SALES_REP)) { From 11ece5603816221f531c35dbede74d84e61b58a0 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 5 May 2019 19:08:27 +0200 Subject: [PATCH 003/133] NEW add API shipment mode --- htdocs/api/class/api_setup.class.php | 62 ++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index 783ec6540e3..e3bb7f4a799 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -4,6 +4,7 @@ * Copyright (C) 2017 Regis Houssin * Copyright (C) 2017 Neil Orley * Copyright (C) 2018 Frédéric France + * Copyright (C) 2018 Thibault FOUCART * * * This program is free software; you can redistribute it and/or modify @@ -706,6 +707,67 @@ class Setup extends DolibarrApi return $list; } + + /** + * Get the list of shipping methods. + * + * @param int $limit Number of items per page + * @param int $page Page number {@min 0} + * @param int $active Shipping methodsm is active or not {@min 0} {@max 1} + * @param string $sqlfilters SQL criteria to filter. Syntax example "(t.code:=:'CHQ')" + * + * @url GET dictionary/shipping_methods + * + * @return array List of shipping methods + * + * @throws 400 RestException + * @throws 200 OK + */ + public function getShippingModes($limit = 100, $page = 0, $active = 1, $sqlfilters = '') + { + $list = array(); + + $sql = "SELECT rowid as id, code, libelle as label, description, tracking, module"; + $sql.= " FROM ".MAIN_DB_PREFIX."c_shipment_mode as t"; + $sql.= " WHERE t.entity IN (".getEntity('c_shipment_mode').")"; + $sql.= " AND t.active = ".$active; + // Add sql filters + if ($sqlfilters) + { + if (! DolibarrApi::_checkFilters($sqlfilters)) + { + throw new RestException(400, 'Error when validating parameter sqlfilters '.$sqlfilters); + } + $regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)'; + $sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")"; + } + + + //$sql.= $this->db->order($sortfield, $sortorder); + + if ($limit) { + if ($page < 0) { + $page = 0; + } + $offset = $limit * $page; + + $sql .= $this->db->plimit($limit, $offset); + } + + $result = $this->db->query($sql); + + if ($result) { + $num = $this->db->num_rows($result); + $min = min($num, ($limit <= 0 ? $num : $limit)); + for ($i = 0; $i < $min; $i++) { + $list[] = $this->db->fetch_object($result); + } + } else { + throw new RestException(400, $this->db->lasterror()); + } + + return $list; + } /** * Get the list of tickets categories. From 15cff25bbc68738e6c11a7d12081fa7842c2f9b0 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 5 May 2019 19:10:39 +0200 Subject: [PATCH 004/133] Update llx_c_shipment_mode.sql --- htdocs/install/mysql/tables/llx_c_shipment_mode.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/install/mysql/tables/llx_c_shipment_mode.sql b/htdocs/install/mysql/tables/llx_c_shipment_mode.sql index 7945c9f9fb0..efacec420c9 100644 --- a/htdocs/install/mysql/tables/llx_c_shipment_mode.sql +++ b/htdocs/install/mysql/tables/llx_c_shipment_mode.sql @@ -19,6 +19,7 @@ create table llx_c_shipment_mode ( rowid integer AUTO_INCREMENT PRIMARY KEY, + entity integer DEFAULT 1 NOT NULL, -- multi company id tms timestamp, code varchar(30) NOT NULL, libelle varchar(50) NOT NULL, From 499798b2e01b725b35027dd94dcc2dadf2bb2340 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 5 May 2019 19:11:18 +0200 Subject: [PATCH 005/133] Update llx_c_shipment_mode.key.sql --- htdocs/install/mysql/tables/llx_c_shipment_mode.key.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/tables/llx_c_shipment_mode.key.sql b/htdocs/install/mysql/tables/llx_c_shipment_mode.key.sql index 15058c0630e..3a90d15330f 100644 --- a/htdocs/install/mysql/tables/llx_c_shipment_mode.key.sql +++ b/htdocs/install/mysql/tables/llx_c_shipment_mode.key.sql @@ -16,5 +16,5 @@ -- -- =================================================================== -ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (code); +ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (entity, code); From e65c8399e60b0310648bd8368dc48fd0c6428706 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 5 May 2019 19:14:09 +0200 Subject: [PATCH 006/133] Update 9.0.0-10.0.0.sql --- htdocs/install/mysql/migration/9.0.0-10.0.0.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index e5b925b0d83..2e143209d9a 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -108,6 +108,8 @@ ALTER TABLE llx_prelevement_facture_demande ADD COLUMN ext_payment_id varchar(12 ALTER TABLE llx_prelevement_facture_demande ADD COLUMN ext_payment_site varchar(128) NULL; -- Fix if table exists +ALTER TABLE llx_c_shipment_mode ADD COLUMN entity integer; + ALTER TABLE llx_c_units DROP INDEX uk_c_units_code; ALTER TABLE llx_c_units ADD COLUMN scale integer; ALTER TABLE llx_c_units ADD COLUMN unit_type varchar(10); From a0ba8d98a1fee2b2d414c4a6ed137e792cfaa755 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sun, 5 May 2019 20:54:31 +0200 Subject: [PATCH 007/133] Update api_setup.class.php --- htdocs/api/class/api_setup.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index e3bb7f4a799..78b794a996c 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -4,7 +4,7 @@ * Copyright (C) 2017 Regis Houssin * Copyright (C) 2017 Neil Orley * Copyright (C) 2018 Frédéric France - * Copyright (C) 2018 Thibault FOUCART + * Copyright (C) 2018 Thibault FOUCART * * * This program is free software; you can redistribute it and/or modify @@ -767,7 +767,7 @@ class Setup extends DolibarrApi } return $list; - } + } /** * Get the list of tickets categories. From 77d3f221631a1a92e7c27c82126c33f505eea90c Mon Sep 17 00:00:00 2001 From: ATM-Nicolas Date: Mon, 6 May 2019 11:21:39 +0200 Subject: [PATCH 008/133] NEW : Amount invoiced column in propal list --- htdocs/comm/propal/list.php | 30 ++++++++++++++++++++++++++++++ htdocs/langs/fr_FR/main.lang | 1 + 2 files changed, 31 insertions(+) diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index 24c53d26526..7355ea83269 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -160,6 +160,7 @@ $arrayfields=array( 'p.total_ht'=>array('label'=>$langs->trans("AmountHT"), 'checked'=>1), 'p.total_vat'=>array('label'=>$langs->trans("AmountVAT"), 'checked'=>0), 'p.total_ttc'=>array('label'=>$langs->trans("AmountTTC"), 'checked'=>0), + 'p.total_invoiced'=>array('label'=>$langs->trans("AmountInvoicedTTC"), 'checked'=>0), 'u.login'=>array('label'=>$langs->trans("Author"), 'checked'=>1, 'position'=>10), 'sale_representative'=>array('label'=>$langs->trans("SaleRepresentativesOfThirdParty"), 'checked'=>1), 'p.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500), @@ -637,6 +638,12 @@ if ($resql) print ''; print ''; } + if (! empty($arrayfields['p.total_invoiced']['checked'])) + { + // Amount invoiced + print ''; + print ''; + } if (! empty($arrayfields['u.login']['checked'])) { // Author @@ -701,6 +708,7 @@ if ($resql) if (! empty($arrayfields['p.total_ht']['checked'])) print_liste_field_titre($arrayfields['p.total_ht']['label'], $_SERVER["PHP_SELF"], 'p.total_ht', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['p.total_vat']['checked'])) print_liste_field_titre($arrayfields['p.total_vat']['label'], $_SERVER["PHP_SELF"], 'p.tva', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['p.total_ttc']['checked'])) print_liste_field_titre($arrayfields['p.total_ttc']['label'], $_SERVER["PHP_SELF"], 'p.total', '', $param, 'class="right"', $sortfield, $sortorder); + if (! empty($arrayfields['p.total_invoiced']['checked'])) print_liste_field_titre($arrayfields['p.total_invoiced']['label'], $_SERVER["PHP_SELF"], 'p.total', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['u.login']['checked'])) print_liste_field_titre($arrayfields['u.login']['label'], $_SERVER["PHP_SELF"], 'u.login', '', $param, 'align="center"', $sortfield, $sortorder); if (! empty($arrayfields['sale_representative']['checked'])) print_liste_field_titre($arrayfields['sale_representative']['label'], $_SERVER["PHP_SELF"], "", "", "$param", '', $sortfield, $sortorder); // Extra fields @@ -911,6 +919,27 @@ if ($resql) if (! $i) $totalarray['totalttcfield']=$totalarray['nbfield']; $totalarray['totalttc'] += $obj->total_ttc; } + // Amount invoiced + if(! empty($arrayfields['p.total_invoiced']['checked'])) { + $totalInvoiced = 0; + $p = new Propal($db); + $TInvoiceData = $p->InvoiceArrayList($obj->rowid); + + if(! empty($TInvoiceData)) { + foreach($TInvoiceData as $invoiceData) { + $invoice = new Facture($db); + $invoice->fetch($invoiceData->facid); + + if(! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS) && $invoice->type == Facture::TYPE_DEPOSIT) continue; + $totalInvoiced += $invoice->total_ttc; + } + } + + print ''.price($totalInvoiced)."\n"; + if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['totalinvoicedfield']=$totalarray['nbfield']; + $totalarray['totalinvoiced'] += $totalInvoiced; + } $userstatic->id=$obj->fk_user_author; $userstatic->login=$obj->login; @@ -1037,6 +1066,7 @@ if ($resql) elseif ($totalarray['totalhtfield'] == $i) print ''.price($totalarray['totalht']).''; elseif ($totalarray['totalvatfield'] == $i) print ''.price($totalarray['totalvat']).''; elseif ($totalarray['totalttcfield'] == $i) print ''.price($totalarray['totalttc']).''; + elseif ($totalarray['totalinvoicedfield'] == $i) print ''.price($totalarray['totalinvoiced']).''; elseif ($totalarray['totalizable']) { $printed = false; foreach ($totalarray['totalizable'] as $totalizable) { diff --git a/htdocs/langs/fr_FR/main.lang b/htdocs/langs/fr_FR/main.lang index 552c3334bbe..22e6914dcd9 100644 --- a/htdocs/langs/fr_FR/main.lang +++ b/htdocs/langs/fr_FR/main.lang @@ -347,6 +347,7 @@ PriceUTTC=P.U TTC Amount=Montant AmountInvoice=Montant facture AmountInvoiced=Montant facturé +AmountInvoicedTTC=Montant TTC facturé AmountPayment=Montant paiement AmountHTShort=Montant HT AmountTTCShort=Montant TTC From 53b1dec317f9b8bee27e39437916f899021cbd37 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 8 May 2019 01:56:52 +0200 Subject: [PATCH 009/133] Update 9.0.0-10.0.0.sql --- htdocs/install/mysql/migration/9.0.0-10.0.0.sql | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index 2e143209d9a..66839713bb7 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -107,9 +107,11 @@ ALTER TABLE llx_prelevement_facture_demande ADD COLUMN sourcetype varchar(32); ALTER TABLE llx_prelevement_facture_demande ADD COLUMN ext_payment_id varchar(128) NULL; ALTER TABLE llx_prelevement_facture_demande ADD COLUMN ext_payment_site varchar(128) NULL; --- Fix if table exists -ALTER TABLE llx_c_shipment_mode ADD COLUMN entity integer; +ALTER TABLE llx_c_shipment_mode ADD COLUMN entity integer DEFAULT 1; +ALTER TABLE llx_c_shipment_mode DROP INDEX uk_c_shipment_mode; +ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (entity, code); +-- Fix if table exists ALTER TABLE llx_c_units DROP INDEX uk_c_units_code; ALTER TABLE llx_c_units ADD COLUMN scale integer; ALTER TABLE llx_c_units ADD COLUMN unit_type varchar(10); From 249893a4ab1774b55fb8bf4e066aebb962ba450a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 8 May 2019 01:57:23 +0200 Subject: [PATCH 010/133] Update 9.0.0-10.0.0.sql --- htdocs/install/mysql/migration/9.0.0-10.0.0.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index 66839713bb7..43e12c6c05f 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -109,7 +109,7 @@ ALTER TABLE llx_prelevement_facture_demande ADD COLUMN ext_payment_site varchar( ALTER TABLE llx_c_shipment_mode ADD COLUMN entity integer DEFAULT 1; ALTER TABLE llx_c_shipment_mode DROP INDEX uk_c_shipment_mode; -ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (entity, code); +ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (code, entity); -- Fix if table exists ALTER TABLE llx_c_units DROP INDEX uk_c_units_code; From 95bb8a1f755f323fef09be8a8f6129a3951ef612 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 8 May 2019 01:57:39 +0200 Subject: [PATCH 011/133] Update llx_c_shipment_mode.key.sql --- htdocs/install/mysql/tables/llx_c_shipment_mode.key.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/tables/llx_c_shipment_mode.key.sql b/htdocs/install/mysql/tables/llx_c_shipment_mode.key.sql index 3a90d15330f..a75dfaf2740 100644 --- a/htdocs/install/mysql/tables/llx_c_shipment_mode.key.sql +++ b/htdocs/install/mysql/tables/llx_c_shipment_mode.key.sql @@ -16,5 +16,5 @@ -- -- =================================================================== -ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (entity, code); +ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (code, entity); From 3dbfc08a1353c66d81c368f850cd5149b0250420 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Fri, 10 May 2019 12:24:02 +0200 Subject: [PATCH 012/133] NEW add "printBucktrackInfo" hook, an external module can add info --- ChangeLog | 1 + htdocs/main.inc.php | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/ChangeLog b/ChangeLog index 355d9baa561..4e36f831197 100644 --- a/ChangeLog +++ b/ChangeLog @@ -14,6 +14,7 @@ FIX: Disallow line start date if after end date. For Developers: NEW: Module "DebugBar" is available as a stable module. +NEW: add "printBucktrackInfo" hook, an external module can add info WARNING: diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index f195d5f945e..2f3455f7631 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -2030,6 +2030,16 @@ function left_menu($menu_array_before, $helppagename = '', $notused = '', $menu_ $bugbaseurl.= urlencode("- **PHP**: " . php_sapi_name() . ' ' . phpversion() . "\n"); $bugbaseurl.= urlencode("- **Database**: " . $db::LABEL . ' ' . $db->getVersion() . "\n"); $bugbaseurl.= urlencode("- **URL**: " . $_SERVER["REQUEST_URI"] . "\n"); + + // Execute hook printBugtrackInfo + $parameters=array('searchform'=>$searchform); + $reshook=$hookmanager->executeHooks('printBugtrackInfo', $parameters); // Note that $action and $object may have been modified by some hooks + if (empty($reshook)) + { + $bugbaseurl.=$hookmanager->resPrint; + } + else $bugbaseurl=$hookmanager->resPrint; + $bugbaseurl.= urlencode("\n"); $bugbaseurl.= urlencode("## Report\n"); print '
'; From a91b462a898cb871fe7e91c886194853b42c7128 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Fri, 10 May 2019 12:28:27 +0200 Subject: [PATCH 013/133] FIX wrong parameter --- htdocs/main.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 2f3455f7631..7dc8df05499 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -2032,7 +2032,7 @@ function left_menu($menu_array_before, $helppagename = '', $notused = '', $menu_ $bugbaseurl.= urlencode("- **URL**: " . $_SERVER["REQUEST_URI"] . "\n"); // Execute hook printBugtrackInfo - $parameters=array('searchform'=>$searchform); + $parameters=array('bugbaseurl'=>$bugbaseurl); $reshook=$hookmanager->executeHooks('printBugtrackInfo', $parameters); // Note that $action and $object may have been modified by some hooks if (empty($reshook)) { From bdd4f3e2973ec48a3d4d51286959383fdecb1e48 Mon Sep 17 00:00:00 2001 From: ATM John BOTELLA Date: Sat, 18 May 2019 18:59:55 +0200 Subject: [PATCH 014/133] add css for html5 ::invalid pseudo element --- htdocs/theme/eldy/global.inc.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index c1167524bf5..3ab314a5321 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -95,6 +95,10 @@ input.button.massactionconfirmed { margin: 4px; } +input:invalid, select:invalid { + border-color: #ea1212; +} + /* Focus definitions must be after standard definition */ textarea:focus { /* v6 box-shadow: 0 0 4px #8091BF; */ From 6be48e69521262c461b91d61095362239acec38e Mon Sep 17 00:00:00 2001 From: ATM-Nicolas Date: Mon, 20 May 2019 08:59:44 +0200 Subject: [PATCH 015/133] NEW : Amount HT invoiced column in propal list --- htdocs/comm/propal/list.php | 32 +++++++++++++++++++++++++++++++- htdocs/langs/fr_FR/main.lang | 1 + 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index 7355ea83269..cd98800f606 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -160,6 +160,7 @@ $arrayfields=array( 'p.total_ht'=>array('label'=>$langs->trans("AmountHT"), 'checked'=>1), 'p.total_vat'=>array('label'=>$langs->trans("AmountVAT"), 'checked'=>0), 'p.total_ttc'=>array('label'=>$langs->trans("AmountTTC"), 'checked'=>0), + 'p.total_ht_invoiced'=>array('label'=>$langs->trans("AmountInvoicedHT"), 'checked'=>0), 'p.total_invoiced'=>array('label'=>$langs->trans("AmountInvoicedTTC"), 'checked'=>0), 'u.login'=>array('label'=>$langs->trans("Author"), 'checked'=>1, 'position'=>10), 'sale_representative'=>array('label'=>$langs->trans("SaleRepresentativesOfThirdParty"), 'checked'=>1), @@ -638,6 +639,12 @@ if ($resql) print ''; print ''; } + if (! empty($arrayfields['p.total_ht_invoiced']['checked'])) + { + // Amount invoiced + print ''; + print ''; + } if (! empty($arrayfields['p.total_invoiced']['checked'])) { // Amount invoiced @@ -708,7 +715,8 @@ if ($resql) if (! empty($arrayfields['p.total_ht']['checked'])) print_liste_field_titre($arrayfields['p.total_ht']['label'], $_SERVER["PHP_SELF"], 'p.total_ht', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['p.total_vat']['checked'])) print_liste_field_titre($arrayfields['p.total_vat']['label'], $_SERVER["PHP_SELF"], 'p.tva', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['p.total_ttc']['checked'])) print_liste_field_titre($arrayfields['p.total_ttc']['label'], $_SERVER["PHP_SELF"], 'p.total', '', $param, 'class="right"', $sortfield, $sortorder); - if (! empty($arrayfields['p.total_invoiced']['checked'])) print_liste_field_titre($arrayfields['p.total_invoiced']['label'], $_SERVER["PHP_SELF"], 'p.total', '', $param, 'class="right"', $sortfield, $sortorder); + if (! empty($arrayfields['p.total_ht_invoiced']['checked'])) print_liste_field_titre($arrayfields['p.total_ht_invoiced']['label'], $_SERVER["PHP_SELF"], '', '', $param, 'class="right"', $sortfield, $sortorder); + if (! empty($arrayfields['p.total_invoiced']['checked'])) print_liste_field_titre($arrayfields['p.total_invoiced']['label'], $_SERVER["PHP_SELF"], '', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['u.login']['checked'])) print_liste_field_titre($arrayfields['u.login']['label'], $_SERVER["PHP_SELF"], 'u.login', '', $param, 'align="center"', $sortfield, $sortorder); if (! empty($arrayfields['sale_representative']['checked'])) print_liste_field_titre($arrayfields['sale_representative']['label'], $_SERVER["PHP_SELF"], "", "", "$param", '', $sortfield, $sortorder); // Extra fields @@ -920,6 +928,27 @@ if ($resql) $totalarray['totalttc'] += $obj->total_ttc; } // Amount invoiced + if(! empty($arrayfields['p.total_ht_invoiced']['checked'])) { + $totalInvoiced = 0; + $p = new Propal($db); + $TInvoiceData = $p->InvoiceArrayList($obj->rowid); + + if(! empty($TInvoiceData)) { + foreach($TInvoiceData as $invoiceData) { + $invoice = new Facture($db); + $invoice->fetch($invoiceData->facid); + + if(! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS) && $invoice->type == Facture::TYPE_DEPOSIT) continue; + $totalInvoiced += $invoice->total_ht; + } + } + + print ''.price($totalInvoiced)."\n"; + if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['totalhtinvoicedfield']=$totalarray['nbfield']; + $totalarray['totalhtinvoiced'] += $totalInvoiced; + } + // Amount invoiced if(! empty($arrayfields['p.total_invoiced']['checked'])) { $totalInvoiced = 0; $p = new Propal($db); @@ -1066,6 +1095,7 @@ if ($resql) elseif ($totalarray['totalhtfield'] == $i) print ''.price($totalarray['totalht']).''; elseif ($totalarray['totalvatfield'] == $i) print ''.price($totalarray['totalvat']).''; elseif ($totalarray['totalttcfield'] == $i) print ''.price($totalarray['totalttc']).''; + elseif ($totalarray['totalhtinvoicedfield'] == $i) print ''.price($totalarray['totalhtinvoiced']).''; elseif ($totalarray['totalinvoicedfield'] == $i) print ''.price($totalarray['totalinvoiced']).''; elseif ($totalarray['totalizable']) { $printed = false; diff --git a/htdocs/langs/fr_FR/main.lang b/htdocs/langs/fr_FR/main.lang index 22e6914dcd9..3cbcf89574e 100644 --- a/htdocs/langs/fr_FR/main.lang +++ b/htdocs/langs/fr_FR/main.lang @@ -347,6 +347,7 @@ 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 From 45fabede280fcf2ede6519b6be6c751a182740bf Mon Sep 17 00:00:00 2001 From: andreubisquerra Date: Sun, 26 May 2019 16:44:17 +0200 Subject: [PATCH 016/133] Basic phone layout for Restaurants in TakePOS --- htdocs/langs/en_US/cashdesk.lang | 3 +- htdocs/takepos/admin/setup.php | 10 +++ htdocs/takepos/invoice.php | 127 +++++++++++++++++++++++++++++-- htdocs/takepos/takepos.php | 7 ++ 4 files changed, 138 insertions(+), 9 deletions(-) diff --git a/htdocs/langs/en_US/cashdesk.lang b/htdocs/langs/en_US/cashdesk.lang index 8ba3bda053f..83c217b06f7 100644 --- a/htdocs/langs/en_US/cashdesk.lang +++ b/htdocs/langs/en_US/cashdesk.lang @@ -67,4 +67,5 @@ ValidateAndClose=Validate and close Terminal=Terminal NumberOfTerminals=Number of Terminals TerminalSelect=Select terminal you want to use: -POSTicket=POS Ticket \ No newline at end of file +POSTicket=POS Ticket +BasicPhoneLayout=Use basic layout for phones \ No newline at end of file diff --git a/htdocs/takepos/admin/setup.php b/htdocs/takepos/admin/setup.php index f331587723b..3fb9d869cd0 100644 --- a/htdocs/takepos/admin/setup.php +++ b/htdocs/takepos/admin/setup.php @@ -73,6 +73,7 @@ if (GETPOST('action', 'alpha') == 'set') $res = dolibarr_set_const($db, "TAKEPOS_PRINT_SERVER", GETPOST('TAKEPOS_PRINT_SERVER', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_ORDER_PRINTERS", GETPOST('TAKEPOS_ORDER_PRINTERS', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_ORDER_NOTES", GETPOST('TAKEPOS_ORDER_NOTES', 'alpha'), 'chaine', 0, '', $conf->entity); + $res = dolibarr_set_const($db, "TAKEPOS_PHONE_BASIC_LAYOUT", GETPOST('TAKEPOS_PHONE_BASIC_LAYOUT', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_AUTO_PRINT_TICKETS", GETPOST('TAKEPOS_AUTO_PRINT_TICKETS', 'int'), 'int', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_HEADER", GETPOST('TAKEPOS_HEADER', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_FOOTER", GETPOST('TAKEPOS_FOOTER', 'alpha'), 'chaine', 0, '', $conf->entity); @@ -199,6 +200,15 @@ if ($conf->global->TAKEPOS_BAR_RESTAURANT && $conf->global->TAKEPOSCONNECTOR){ print ''; } +if ($conf->global->TAKEPOS_BAR_RESTAURANT) +{ + print ''; + print $langs->trans("BasicPhoneLayout"); + print ''; + print $form->selectyesno("TAKEPOS_PHONE_BASIC_LAYOUT", $conf->global->TAKEPOS_PHONE_BASIC_LAYOUT, 1); + print ''; +} + print ''; print $langs->trans('TicketVatGrouped'); print ''; diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 510b949b92b..aac6f7ecaf8 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -44,6 +44,31 @@ $action = GETPOST('action', 'alpha'); $idproduct = GETPOST('idproduct', 'int'); $place = (GETPOST('place', 'int') > 0 ? GETPOST('place', 'int') : 0); // $place is id of table for Ba or Restaurant +if ($conf->global->TAKEPOS_PHONE_BASIC_LAYOUT==1 && $conf->browser->layout == 'phone') +{ + // DIRECT LINK TO THIS PAGE FROM MOBILE AND NO TERMINAL SELECTED + if ($_SESSION["takeposterminal"]=="") + { + if ($conf->global->TAKEPOS_NUM_TERMINALS=="1") $_SESSION["takeposterminal"]=1; + else + { + header("Location: takepos.php"); + exit; + } + } + $mobilepage = GETPOST('mobilepage', 'alpha'); + $title='TakePOS - Dolibarr '.DOL_VERSION; + if (! empty($conf->global->MAIN_APPLICATION_TITLE)) $title='TakePOS - '.$conf->global->MAIN_APPLICATION_TITLE; + $head=' + + + '; + top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss); + print ' + + '; +} + /** * Abort invoice creationg with a given error message * @@ -497,13 +522,88 @@ print $langs->trans('TotalTTC'); print ' : '.price($invoice->total_ttc, 1, '', 1, - 1, - 1, $conf->currency).''; print '
'.$sectionwithinvoicelink; print ''; -print '' . $langs->trans('ReductionShort') . ''; -print '' . $langs->trans('Qty') . ''; -print '' . $langs->trans('TotalHTShort') . ''; +if ($_SESSION["basiclayout"]!=1) +{ + print '' . $langs->trans('ReductionShort') . ''; + print '' . $langs->trans('Qty') . ''; + print '' . $langs->trans('TotalHTShort') . ''; +} print "\n"; +if ($_SESSION["basiclayout"]==1) +{ + if ($mobilepage=="cats") + { + require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; + $categorie = new Categorie($db); + $categories = $categorie->get_full_arbo('product'); + $htmlforlines = ''; + foreach ($categories as $row){ + $htmlforlines.= ''; + $htmlforlines.= ''; + $htmlforlines.= $row['label']; + $htmlforlines.= ''; + $htmlforlines.= ''."\n"; + } + $htmlforlines.= ''; + $htmlforlines.= '
'; + $htmlforlines.= ''.$langs->trans("Floors").''; + $htmlforlines.= '
'; + print $htmlforlines; + } + + if ($mobilepage=="products") + { + require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; + $object = new Categorie($db); + $catid = GETPOST('catid', 'int'); + $result=$object->fetch($catid); + $prods = $object->getObjectsInCateg("product"); + $htmlforlines = ''; + foreach ($prods as $row) { + $htmlforlines.= ''; + $htmlforlines.= ''; + $htmlforlines.= $row->label; + $htmlforlines.= ''; + $htmlforlines.= ''."\n"; + } + $htmlforlines.= ''; + $htmlforlines.= '
'; + $htmlforlines.= ''.$langs->trans("Categories").''; + $htmlforlines.= ''.$langs->trans("Floors").''; + $htmlforlines.= '
'; + print $htmlforlines; + } + + if ($mobilepage=="places") + { + $sql="SELECT rowid, entity, label, leftpos, toppos, floor FROM ".MAIN_DB_PREFIX."takepos_floor_tables"; + $resql = $db->query($sql); + $rows = array(); + $htmlforlines = ''; + while($row = $db->fetch_array($resql)){ + $rows[] = $row; + $htmlforlines.= ''; + $htmlforlines.= ''; + $htmlforlines.= $row['label']; + $htmlforlines.= ''; + $htmlforlines.= ''."\n"; + } + $htmlforlines.= ''; + $htmlforlines.= '
'; + $htmlforlines.= ''.$langs->trans("Categories").''; + $htmlforlines.= ''.$langs->trans("Floors").''; + $htmlforlines.= '
'; + print $htmlforlines; + } +} + if ($placeid > 0) { + if ($_SESSION["basiclayout"]==1 && $mobilepage!="invoice") return; if (is_array($invoice->lines) && count($invoice->lines)) { $tmplines = array_reverse($invoice->lines); @@ -538,11 +638,14 @@ if ($placeid > 0) } } if (!empty($line->array_options['options_order_notes'])) $htmlforlines.= "
(".$line->array_options['options_order_notes'].")"; - $htmlforlines.= ''; - $htmlforlines.= '' . vatrate($line->remise_percent, true) . ''; - $htmlforlines.= '' . $line->qty . ''; - $htmlforlines.= '' . price($line->total_ttc) . ''; - $htmlforlines.= ''."\n"; + if ($_SESSION["basiclayout"]!=1) + { + $htmlforlines.= ''; + $htmlforlines.= '' . vatrate($line->remise_percent, true) . ''; + $htmlforlines.= '' . $line->qty . ''; + $htmlforlines.= '' . price($line->total_ttc) . ''; + } + $htmlforlines.= ''."\n"; print $htmlforlines; } @@ -558,6 +661,14 @@ else { // No invoice generated yet print ''; +if ($_SESSION["basiclayout"]==1 && $mobilepage=="invoice") +{ + print ''; +} + if ($invoice->socid != $conf->global->{'CASHDESK_ID_THIRDPARTY'.$_SESSION["takeposterminal"]}) { $soc = new Societe($db); diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index c0a37881cf9..7e55bbc5936 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -57,6 +57,13 @@ if ($conf->browser->layout == 'phone') { $maxcategbydefaultforthisdevice=8; $maxproductbydefaultforthisdevice=16; + //REDIRECT TO BASIC LAYOUT IF TERMINAL SELECTED AND BASIC MOBILE LAYOUT ENABLED + if ($_SESSION["takeposterminal"]!="" && $conf->global->TAKEPOS_PHONE_BASIC_LAYOUT==1) + { + $_SESSION["basiclayout"]=1; + header("Location: invoice.php?mobilepage=invoice"); + exit; + } } $MAXCATEG = (empty($conf->global->TAKEPOS_NB_MAXCATEG)?$maxcategbydefaultforthisdevice:$conf->global->TAKEPOS_NB_MAXCATEG); $MAXPRODUCT = (empty($conf->global->TAKEPOS_NB_MAXPRODUCT)?$maxproductbydefaultforthisdevice:$conf->global->TAKEPOS_NB_MAXPRODUCT); From 43ada3fcd44b35bdbf8771ec409146848bd158b7 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Mon, 3 Jun 2019 09:36:00 +0200 Subject: [PATCH 017/133] FIX better method to check if pdf is protected/encrypted --- htdocs/core/lib/pdf.lib.php | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index 14c0435b4ad..1932fca31a2 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -175,18 +175,29 @@ function pdf_getInstance($format = '', $metric = 'mm', $pagetype = 'P') /** * Return if pdf file is protected/encrypted * - * @param TCPDF $pdf PDF initialized object * @param string $pathoffile Path of file * @return boolean True or false */ -function pdf_getEncryption(&$pdf, $pathoffile) +function pdf_getEncryption($pathoffile) { + require_once TCPDF_PATH.'tcpdf_parser.php'; + $isencrypted = false; - $pdfparser = $pdf->_getPdfParser($pathoffile); - $data = $pdfparser->getParsedData(); - if (isset($data[0]['trailer'][1]['/Encrypt'])) { - $isencrypted = true; + $content = file_get_contents($pathoffile); + + ob_start(); + @($parser = new \TCPDF_PARSER(ltrim($content))); + list($xref, $data) = $parser->getParsedData(); + unset($parser); + ob_end_clean(); + + if (isset($xref['trailer']['encrypt'])) { + $isencrypted = true; // Secured pdf file are currently not supported + } + + if (empty($data)) { + $isencrypted = true; // Object list not found. Possible secured file } return $isencrypted; From 439eafb6377780f9347aa4fabd185949621c73a6 Mon Sep 17 00:00:00 2001 From: Lionel VESSILLER Date: Mon, 3 Jun 2019 15:44:17 +0200 Subject: [PATCH 018/133] NEW add extrafields in warehouses - create table - admin extrafields - object fecth, insert, update and delete extrafields - card and list --- htdocs/admin/stock.php | 5 + htdocs/core/lib/stock.lib.php | 34 +++++ .../install/mysql/migration/10.0.0-11.0.0.sql | 15 +++ .../tables/llx_entrepot_extrafields.key.sql | 20 +++ .../mysql/tables/llx_entrepot_extrafields.sql | 26 ++++ htdocs/install/pgsql/functions/functions.sql | 1 + htdocs/product/admin/stock_extrafields.php | 116 +++++++++++++++++ htdocs/product/stock/card.php | 118 +++++++++++++----- htdocs/product/stock/class/entrepot.class.php | 66 ++++++++-- htdocs/product/stock/list.php | 73 +++++++++-- 10 files changed, 424 insertions(+), 50 deletions(-) create mode 100644 htdocs/install/mysql/migration/10.0.0-11.0.0.sql create mode 100644 htdocs/install/mysql/tables/llx_entrepot_extrafields.key.sql create mode 100644 htdocs/install/mysql/tables/llx_entrepot_extrafields.sql create mode 100644 htdocs/product/admin/stock_extrafields.php diff --git a/htdocs/admin/stock.php b/htdocs/admin/stock.php index 2e934211970..7c22d1a4a58 100644 --- a/htdocs/admin/stock.php +++ b/htdocs/admin/stock.php @@ -27,6 +27,7 @@ */ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/stock.lib.php'; // Load translation files required by the page $langs->loadLangs(array("admin", "stocks")); @@ -77,6 +78,10 @@ llxHeader('', $langs->trans("StockSetup")); $linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("StockSetup"), $linkback, 'title_setup'); +$head = stock_admin_prepare_head(); + +dol_fiche_head($head, 'general', $langs->trans("StockSetup"), -1, 'stock'); + $form=new Form($db); diff --git a/htdocs/core/lib/stock.lib.php b/htdocs/core/lib/stock.lib.php index 7b3ef796432..fc7701877bc 100644 --- a/htdocs/core/lib/stock.lib.php +++ b/htdocs/core/lib/stock.lib.php @@ -78,3 +78,37 @@ function stock_prepare_head($object) return $head; } + +/** + * Return array head with list of tabs to view object informations. + * + * @return array head array with tabs + */ +function stock_admin_prepare_head() +{ + global $langs, $conf, $user; + + $h = 0; + $head = array(); + + $head[$h][0] = DOL_URL_ROOT.'/admin/stock.php'; + $head[$h][1] = $langs->trans("Miscellaneous"); + $head[$h][2] = 'general'; + $h++; + + // 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:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to remove a tab + complete_head_from_modules($conf, $langs, null, $head, $h, 'stock_admin'); + + $head[$h][0] = DOL_URL_ROOT.'/product/admin/stock_extrafields.php'; + $head[$h][1] = $langs->trans("ExtraFields"); + $head[$h][2] = 'attributes'; + $h++; + + complete_head_from_modules($conf, $langs, null, $head, $h, 'stock_admin', 'remove'); + + return $head; +} + 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 new file mode 100644 index 00000000000..9f758b6bc40 --- /dev/null +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -0,0 +1,15 @@ +-- +-- Be carefull to requests order. +-- This file must be loaded by calling /install/index.php page +-- when current version is 11.0.0 or higher. + + +create table llx_entrepot_extrafields +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + tms timestamp, + fk_object integer NOT NULL, + import_key varchar(14) -- import key +) ENGINE=innodb; + +ALTER TABLE llx_entrepot_extrafields ADD INDEX idx_entrepot_extrafields (fk_object); \ No newline at end of file diff --git a/htdocs/install/mysql/tables/llx_entrepot_extrafields.key.sql b/htdocs/install/mysql/tables/llx_entrepot_extrafields.key.sql new file mode 100644 index 00000000000..72973186918 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_entrepot_extrafields.key.sql @@ -0,0 +1,20 @@ +-- =================================================================== +-- Copyright (C) 2011 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_entrepot_extrafields ADD INDEX idx_entrepot_extrafields (fk_object); diff --git a/htdocs/install/mysql/tables/llx_entrepot_extrafields.sql b/htdocs/install/mysql/tables/llx_entrepot_extrafields.sql new file mode 100644 index 00000000000..c7a209eba8b --- /dev/null +++ b/htdocs/install/mysql/tables/llx_entrepot_extrafields.sql @@ -0,0 +1,26 @@ +-- ======================================================================== +-- Copyright (C) 2011 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_entrepot_extrafields +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + tms timestamp, + fk_object integer NOT NULL, + import_key varchar(14) -- import key +) ENGINE=innodb; + diff --git a/htdocs/install/pgsql/functions/functions.sql b/htdocs/install/pgsql/functions/functions.sql index 66b1fbaf370..fc4e4116c84 100644 --- a/htdocs/install/pgsql/functions/functions.sql +++ b/htdocs/install/pgsql/functions/functions.sql @@ -106,6 +106,7 @@ CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_emailcollector_email CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_emailcollector_emailcollectoraction FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_emailcollector_emailcollectorfilter FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_entrepot FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); +CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_entrepot_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_events FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_expedition FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_expensereport FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms(); diff --git a/htdocs/product/admin/stock_extrafields.php b/htdocs/product/admin/stock_extrafields.php new file mode 100644 index 00000000000..8b2a016415e --- /dev/null +++ b/htdocs/product/admin/stock_extrafields.php @@ -0,0 +1,116 @@ + + * Copyright (C) 2003 Jean-Louis Bergamo + * Copyright (C) 2004-2011 Laurent Destailleur + * Copyright (C) 2012 Regis Houssin + * + * 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 . + */ + +/** + * \file htdocs/product/admin/stock_extrafields.php + * \ingroup stock + * \brief Page to setup extra fields of third party + */ + +require '../../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/stock.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; + +// Load translation files required by the page +$langs->loadLangs(array('companies', 'admin', 'stock')); + +$extrafields = new ExtraFields($db); +$form = new Form($db); + +// List of supported format +$tmptype2label=ExtraFields::$type2label; +$type2label=array(''); +foreach ($tmptype2label as $key => $val) $type2label[$key]=$langs->transnoentitiesnoconv($val); + +$action=GETPOST('action', 'alpha'); +$attrname=GETPOST('attrname', 'alpha'); +$elementtype='entrepot'; //Must be the $table_element of the class that manage extrafield + +if (!$user->admin) accessforbidden(); + + +/* + * Actions + */ + +require DOL_DOCUMENT_ROOT.'/core/actions_extrafields.inc.php'; + + + +/* + * View + */ + +$textobject=$langs->transnoentitiesnoconv("Warehouses"); + +llxHeader('', $langs->trans("StockSetup")); + +$linkback=''.$langs->trans("BackToModuleList").''; +print load_fiche_titre($langs->trans("StockSetup"), $linkback, 'title_setup'); + + +$head = stock_admin_prepare_head(); + +dol_fiche_head($head, 'attributes', $langs->trans("Warehouses"), -1, 'stock'); + +require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php'; + +dol_fiche_end(); + + +// Buttons +if ($action != 'create' && $action != 'edit') +{ + print '
'; + print ''; + print "
"; +} + + +/* ************************************************************************** */ +/* */ +/* Creation of an optional field */ +/* */ +/* ************************************************************************** */ + +if ($action == 'create') +{ + print "
"; + print load_fiche_titre($langs->trans('NewAttribute')); + + require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php'; +} + +/* ************************************************************************** */ +/* */ +/* Edition of an optional field */ +/* */ +/* ************************************************************************** */ +if ($action == 'edit' && ! empty($attrname)) +{ + print "
"; + print load_fiche_titre($langs->trans("FieldEdition", $attrname)); + + require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php'; +} + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/product/stock/card.php b/htdocs/product/stock/card.php index ae2150e8464..89d7258e3cc 100644 --- a/htdocs/product/stock/card.php +++ b/htdocs/product/stock/card.php @@ -33,6 +33,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/stock.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php'; +require_once DOL_DOCUMENT_ROOT . '/core/class/extrafields.class.php'; // Load translation files required by the page $langs->loadLangs(array('products', 'stocks', 'companies', 'categories')); @@ -55,16 +56,32 @@ $backtopage=GETPOST('backtopage', 'alpha'); //$result=restrictedArea($user,'stock', $id, 'entrepot&stock'); $result=restrictedArea($user, 'stock'); +$object = new Entrepot($db); +$extrafields = new ExtraFields($db); + +// fetch optionals attributes and labels +$extralabels = $extrafields->fetch_name_optionals_label('entrepot'); + +// Load object +if ($id > 0 || ! empty($ref)) { + $ret = $object->fetch($id, $ref); +// if ($ret > 0) +// $ret = $object->fetch_thirdparty(); + if ($ret <= 0) { + setEventMessages($object->error, $object->errors, 'errors'); + $action = ''; + } +} + // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('warehousecard','globalcard')); -$object = new Entrepot($db); - - /* * Actions */ +$error = 0; + $usercanread = (($user->rights->stock->lire)); $usercancreate = (($user->rights->stock->creer)); $usercandelete = (($user->rights->stock->supprimer)); @@ -85,27 +102,30 @@ if ($action == 'add' && $user->rights->stock->creer) if (! empty($object->libelle)) { - $id = $object->create($user); - if ($id > 0) - { - setEventMessages($langs->trans("RecordSaved"), null, 'mesgs'); + // Fill array 'array_options' with data from add form + $ret = $extrafields->setOptionalsFromPost($extralabels, $object); + if ($ret < 0) { + $error++; + $action = 'create'; + } - if (! empty($backtopage)) - { - header("Location: ".$backtopage); - exit; - } - else - { - header("Location: card.php?id=".$id); - exit; - } - } - else - { - $action = 'create'; - setEventMessages($object->error, $object->errors, 'errors'); - } + if (! $error) { + $id = $object->create($user); + if ($id > 0) { + setEventMessages($langs->trans("RecordSaved"), null, 'mesgs'); + + if (!empty($backtopage)) { + header("Location: " . $backtopage); + exit; + } else { + header("Location: card.php?id=" . $id); + exit; + } + } else { + $action = 'create'; + setEventMessages($object->error, $object->errors, 'errors'); + } + } } else { @@ -147,15 +167,21 @@ if ($action == 'update' && $cancel <> $langs->trans("Cancel")) $object->town = GETPOST("town"); $object->country_id = GETPOST("country_id"); - if ( $object->update($id, $user) > 0) - { - $action = ''; - } - else - { + // Fill array 'array_options' with data from add form + $ret = $extrafields->setOptionalsFromPost($extralabels, $object); + if ($ret < 0) $error++; + + if (! $error) { + $ret = $object->update($id, $user); + if ($ret < 0) $error++; + } + + if ($error) { $action = 'edit'; setEventMessages($object->error, $object->errors, 'errors'); - } + } else { + $action = ''; + } } else { @@ -163,6 +189,22 @@ if ($action == 'update' && $cancel <> $langs->trans("Cancel")) setEventMessages($object->error, $object->errors, 'errors'); } } +elseif ($action == 'update_extras') { + $object->oldcopy = dol_clone($object); + + // Fill array 'array_options' with data from update form + $extralabels = $extrafields->fetch_name_optionals_label($object->table_element); + $ret = $extrafields->setOptionalsFromPost($extralabels, $object, GETPOST('attribute', 'none')); + if ($ret < 0) $error++; + if (! $error) { + $result = $object->insertExtraFields(); + if ($result < 0) { + setEventMessages($object->error, $object->errors, 'errors'); + $error++; + } + } + if ($error) $action = 'edit_extras'; +} if ($cancel == $langs->trans("Cancel")) { @@ -257,6 +299,9 @@ if ($action == 'create') print ''; print ''; + // Other attributes + include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_add.tpl.php'; + print ''; dol_fiche_end(); @@ -392,6 +437,9 @@ else } print ""; + // Other attributes + include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; + print ""; print '
'; @@ -638,6 +686,7 @@ else if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); print ''; + // Status print ''.$langs->trans("Status").''; print ''; print ''; + // Other attributes + $parameters=array('colspan' => ' colspan="3"', 'cols'=>3); + $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + if (empty($reshook)) + { + print $object->showOptionals($extrafields, 'edit'); + } + print ''; dol_fiche_end(); diff --git a/htdocs/product/stock/class/entrepot.class.php b/htdocs/product/stock/class/entrepot.class.php index 0032d17f97e..4593037da10 100644 --- a/htdocs/product/stock/class/entrepot.class.php +++ b/htdocs/product/stock/class/entrepot.class.php @@ -163,6 +163,19 @@ class Entrepot extends CommonObject } } + // Actions on extra fields + if (! $error) + { + if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used + { + $result=$this->insertExtraFields(); + if ($result < 0) + { + $error++; + } + } + } + if (! $error) { $this->db->commit(); @@ -199,6 +212,10 @@ class Entrepot extends CommonObject */ public function update($id, $user) { + global $conf; + + $error=0; + if (empty($id)) $id = $this->id; // Check if new parent is already a child of current warehouse @@ -239,13 +256,24 @@ class Entrepot extends CommonObject dol_syslog(get_class($this)."::update", LOG_DEBUG); $resql=$this->db->query($sql); - if ($resql) - { + + if (! $resql) { + $error++; + $this->errors[]="Error ".$this->db->lasterror(); + } + + if (! $error && empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && is_array($this->array_options) && count($this->array_options)>0) { + $result=$this->insertExtraFields(); + if ($result < 0) + { + $error++; + } + } + + if (!$error) { $this->db->commit(); return 1; - } - else - { + } else { $this->db->rollback(); $this->error=$this->db->lasterror(); return -1; @@ -262,6 +290,10 @@ class Entrepot extends CommonObject */ public function delete($user, $notrigger = 0) { + global $conf; + + $error = 0; + $this->db->begin(); if (! $error && empty($notrigger)) @@ -293,17 +325,30 @@ class Entrepot extends CommonObject { $sql = "DELETE FROM ".MAIN_DB_PREFIX."entrepot"; $sql.= " WHERE rowid = " . $this->id; - dol_syslog(get_class($this)."::delete", LOG_DEBUG); $resql1=$this->db->query($sql); + if (!$resql1) $error++; // Update denormalized fields because we change content of produt_stock. Warning: Do not use "SET p.stock", does not works with pgsql $sql = "UPDATE ".MAIN_DB_PREFIX."product as p SET stock = (SELECT SUM(ps.reel) FROM ".MAIN_DB_PREFIX."product_stock as ps WHERE ps.fk_product = p.rowid)"; - dol_syslog(get_class($this)."::delete", LOG_DEBUG); $resql2=$this->db->query($sql); + if (!$resql2) $error++; - if ($resql1 && $resql2) + // Removed extrafields + if (! $error) { + if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used + { + $result=$this->deleteExtraFields(); + if ($result < 0) { + $error++; + $errorflag=-4; + dol_syslog(get_class($this)."::delete erreur ".$errorflag." ".$this->error, LOG_ERR); + } + } + } + + if (!$error) { $this->db->commit(); return 1; @@ -377,6 +422,10 @@ class Entrepot extends CommonObject $this->town = $obj->town; $this->country_id = $obj->country_id; + // Retreive all extrafield + // fetch optionals attributes and labels + $this->fetch_optionals(); + include_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; $tmp=getCountry($this->country_id, 'all'); $this->country=$tmp['label']; @@ -386,6 +435,7 @@ class Entrepot extends CommonObject } else { + $this->error="Record Not Found"; return 0; } } diff --git a/htdocs/product/stock/list.php b/htdocs/product/stock/list.php index b9876bdf36a..8178df6b03c 100644 --- a/htdocs/product/stock/list.php +++ b/htdocs/product/stock/list.php @@ -49,6 +49,16 @@ $offset = $limit * $page; $year = strftime("%Y", time()); +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +$object = new Entrepot($db); +$hookmanager->initHooks(array('stocklist')); +$extrafields = new ExtraFields($db); + +// fetch optionals attributes and labels +$extralabels = $extrafields->fetch_name_optionals_label('entrepot'); +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element, '', 'search_'); + + // List of fields to search into when doing a "search in all" $fieldstosearchall = array( 'e.ref'=>"Ref", @@ -60,6 +70,16 @@ $fieldstosearchall = array( ); +// Extra fields +if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) +{ + foreach($extrafields->attribute_label as $key => $val) + { + if (! empty($extrafields->attribute_list[$key])) $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>(($extrafields->attribute_list[$key]<0)?0:1), 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>(abs($extrafields->attribute_list[$key])!=3 && $extrafields->attribute_perms[$key])); + } +} + + /* * Actions */ @@ -85,14 +105,19 @@ $warehouse=new Entrepot($db); $sql = "SELECT e.rowid, e.ref, e.statut, e.lieu, e.address, e.zip, e.town, e.fk_pays, e.fk_parent,"; $sql.= " SUM(p.pmp * ps.reel) as estimatedvalue, SUM(p.price * ps.reel) as sellvalue, SUM(ps.reel) as stockqty"; +// Add fields from extrafields +foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ", ef.".$key.' as options_'.$key : ''); $sql.= " FROM ".MAIN_DB_PREFIX."entrepot as e"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_stock as ps ON e.rowid = ps.fk_entrepot"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON ps.fk_product = p.rowid"; +if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."entrepot_extrafields as ef on (e.rowid = ef.fk_object)"; $sql.= " WHERE e.entity IN (".getEntity('stock').")"; if ($search_ref) $sql.= natural_search("e.ref", $search_ref); // ref if ($search_label) $sql.= natural_search("e.lieu", $search_label); // label if ($search_status != '' && $search_status >= 0) $sql.= " AND e.statut = ".$search_status; if ($sall) $sql .= natural_search(array_keys($fieldstosearchall), $sall); +// Add where from extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; $sql.= " GROUP BY e.rowid, e.ref, e.statut, e.lieu, e.address, e.zip, e.town, e.fk_pays, e.fk_parent"; $totalnboflines=0; $result=$db->query($sql); @@ -131,6 +156,9 @@ if ($result) if ($search_status) $param.="&search_status=".urlencode($search_status); if ($sall) $param.="&sall=".urlencode($sall); + // Add $param from extra fields + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; + $newcardbutton=''; if ($user->rights->stock->creer) { @@ -173,6 +201,9 @@ if ($result) print ''; print ''; + // Extra fields + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; + print ''; print $form->selectarray('search_status', $warehouse->statuts, $search_status, 1, 0, 0, '', 1); print ''; @@ -190,7 +221,9 @@ if ($result) print_liste_field_titre("PhysicalStock", $_SERVER["PHP_SELF"], "stockqty", '', $param, '', $sortfield, $sortorder, 'right '); print_liste_field_titre("EstimatedStockValue", $_SERVER["PHP_SELF"], "estimatedvalue", '', $param, '', $sortfield, $sortorder, 'right '); print_liste_field_titre("EstimatedStockValueSell", $_SERVER["PHP_SELF"], "", '', $param, '', $sortfield, $sortorder, 'right '); - print_liste_field_titre("Status", $_SERVER["PHP_SELF"], "e.statut", '', $param, '', $sortfield, $sortorder, 'right '); + // Extra fields + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; + print_liste_field_titre("Status", $_SERVER["PHP_SELF"], "e.statut", '', $param, '', $sortfield, $sortorder, 'right '); print_liste_field_titre('', $_SERVER["PHP_SELF"], "", '', $param, '', $sortfield, $sortorder, 'maxwidthsearch '); print "\n"; @@ -198,40 +231,55 @@ if ($result) { $warehouse=new Entrepot($db); $var=false; + $totalarray=array(); while ($i < min($num, $limit)) { - $objp = $db->fetch_object($result); + $obj = $db->fetch_object($result); - $warehouse->id = $objp->rowid; - $warehouse->ref = $objp->ref; - $warehouse->label = $objp->ref; - $warehouse->lieu = $objp->lieu; - $warehouse->fk_parent = $objp->fk_parent; + $warehouse->id = $obj->rowid; + $warehouse->ref = $obj->ref; + $warehouse->label = $obj->ref; + $warehouse->lieu = $obj->lieu; + $warehouse->fk_parent = $obj->fk_parent; print ''; print '' . $warehouse->getNomUrl(1) . ''; + if (! $i) $totalarray['nbfield']++; // Location - print ''.$objp->lieu.''; + print ''.$obj->lieu.''; + if (! $i) $totalarray['nbfield']++; + // Stock qty - print ''.price2num($objp->stockqty, 5).''; + print ''.price2num($obj->stockqty, 5).''; + if (! $i) $totalarray['nbfield']++; + // PMP value print ''; - if (price2num($objp->estimatedvalue, 'MT')) print price(price2num($objp->estimatedvalue, 'MT'), 1); + if (price2num($obj->estimatedvalue, 'MT')) print price(price2num($obj->estimatedvalue, 'MT'), 1); else print ''; print ''; + if (! $i) $totalarray['nbfield']++; + // Selling value print ''; - if (empty($conf->global->PRODUIT_MULTIPRICES)) print price(price2num($objp->sellvalue, 'MT'), 1); + if (empty($conf->global->PRODUIT_MULTIPRICES)) print price(price2num($obj->sellvalue, 'MT'), 1); else { $htmltext=$langs->trans("OptionMULTIPRICESIsOn"); print $form->textwithtooltip($langs->trans("Variable"), $htmltext); } print ''; + if (! $i) $totalarray['nbfield']++; + + // Extra fields + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; + // Status - print ''.$warehouse->LibStatut($objp->statut, 5).''; + print ''.$warehouse->LibStatut($obj->statut, 5).''; + if (! $i) $totalarray['nbfield']++; print ''; + if (! $i) $totalarray['nbfield']++; print "\n"; @@ -255,6 +303,7 @@ if ($result) print ''; print ''; print ''; + print ''; print "\n"; } } From 9a974814fac002004afd5d9b8a90a501b6947653 Mon Sep 17 00:00:00 2001 From: Lionel VESSILLER Date: Mon, 3 Jun 2019 15:53:21 +0200 Subject: [PATCH 019/133] NEW add extrafields in warehouses - fix load lang stocks --- htdocs/product/admin/stock_extrafields.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/admin/stock_extrafields.php b/htdocs/product/admin/stock_extrafields.php index 8b2a016415e..5dc2aa63357 100644 --- a/htdocs/product/admin/stock_extrafields.php +++ b/htdocs/product/admin/stock_extrafields.php @@ -29,7 +29,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/stock.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; // Load translation files required by the page -$langs->loadLangs(array('companies', 'admin', 'stock')); +$langs->loadLangs(array('companies', 'admin', 'stocks')); $extrafields = new ExtraFields($db); $form = new Form($db); From 490e85f4941b1eb71013a6b06c432a5b7cb1762b Mon Sep 17 00:00:00 2001 From: Lionel VESSILLER Date: Mon, 3 Jun 2019 16:34:49 +0200 Subject: [PATCH 020/133] Fix PSR2 --- htdocs/core/lib/stock.lib.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/core/lib/stock.lib.php b/htdocs/core/lib/stock.lib.php index fc7701877bc..50a7611af82 100644 --- a/htdocs/core/lib/stock.lib.php +++ b/htdocs/core/lib/stock.lib.php @@ -111,4 +111,3 @@ function stock_admin_prepare_head() return $head; } - From 20448475527b115affe098811b5d79564157e733 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Mon, 10 Jun 2019 22:33:11 +0200 Subject: [PATCH 021/133] New : add file area at bottom of supplier invoices list --- htdocs/fourn/facture/list.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php index fe3deb6459b..aba34d52e1b 100644 --- a/htdocs/fourn/facture/list.php +++ b/htdocs/fourn/facture/list.php @@ -1133,7 +1133,6 @@ if ($resql) print "\n"; - /* $hidegeneratedfilelistifempty=1; if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files) $hidegeneratedfilelistifempty=0; @@ -1145,8 +1144,7 @@ if ($resql) $genallowed=$user->rights->facture->lire; $delallowed=$user->rights->facture->creer; - print $formfile->showdocuments('massfilesarea_invoices','',$filedir,$urlsource,0,$delallowed,'',1,1,0,48,1,$param,$title,'','','',null,$hidegeneratedfilelistifempty); - */ + print $formfile->showdocuments('massfilesarea_supplier_invoice','',$filedir,$urlsource,0,$delallowed,'',1,1,0,48,1,$param,$title,'','','',null,$hidegeneratedfilelistifempty); } else { From 330842d67eebc30f56ebc7dc9ed00246ec0a19a8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 12 Jun 2019 13:14:44 +0200 Subject: [PATCH 022/133] Update list.php --- htdocs/comm/propal/list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index ee8dacde380..555e89e7a61 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -162,8 +162,8 @@ $arrayfields=array( 'p.total_ht'=>array('label'=>"AmountHT", 'checked'=>1), 'p.total_vat'=>array('label'=>"AmountVAT", 'checked'=>0), 'p.total_ttc'=>array('label'=>"AmountTTC", 'checked'=>0), - 'p.total_ht_invoiced'=>array('label'=>$langs->trans("AmountInvoicedHT"), 'checked'=>0), - 'p.total_invoiced'=>array('label'=>$langs->trans("AmountInvoicedTTC"), 'checked'=>0), + 'p.total_ht_invoiced'=>array('label'=>$langs->trans("AmountInvoicedHT"), 'checked'=>0, 'enabled'=>$conf->global->PROPOSAL_SHOW_INVOICED_AMOUNT), + 'p.total_invoiced'=>array('label'=>$langs->trans("AmountInvoicedTTC"), 'checked'=>0, 'enabled'=>$conf->global->PROPOSAL_SHOW_INVOICED_AMOUNT), 'u.login'=>array('label'=>"Author", 'checked'=>1, 'position'=>10), 'sale_representative'=>array('label'=>"SaleRepresentativesOfThirdParty", 'checked'=>1), 'p.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>500), From 3afd4e15ad135b74b781a0170d79547fde4208da Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Mon, 17 Jun 2019 07:09:19 +0200 Subject: [PATCH 023/133] FIX try to remove ob_* functions --- htdocs/core/lib/pdf.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index 1932fca31a2..56ca215e118 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -186,11 +186,11 @@ function pdf_getEncryption($pathoffile) $content = file_get_contents($pathoffile); - ob_start(); + //ob_start(); @($parser = new \TCPDF_PARSER(ltrim($content))); list($xref, $data) = $parser->getParsedData(); unset($parser); - ob_end_clean(); + //ob_end_clean(); if (isset($xref['trailer']['encrypt'])) { $isencrypted = true; // Secured pdf file are currently not supported From a399e3f63de7b2c652789a069886decd3777c51f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 17 Jun 2019 13:33:44 +0200 Subject: [PATCH 024/133] Update companies.lang --- htdocs/langs/fr_FR/companies.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/fr_FR/companies.lang b/htdocs/langs/fr_FR/companies.lang index 7a423b0b007..dc2cf3b95b2 100644 --- a/htdocs/langs/fr_FR/companies.lang +++ b/htdocs/langs/fr_FR/companies.lang @@ -318,7 +318,7 @@ CompanyDeleted=La société "%s" a été supprimée de la base. ListOfContacts=Liste des contacts ListOfContactsAddresses=Liste des contacts/adresses ListOfThirdParties=Liste des tiers -ShowCompany=Affichier tiers +ShowCompany=Afficher tiers ShowContact=Afficher contact ContactsAllShort=Tous (pas de filtre) ContactType=Type de contact From 1a1f3493c90d5297509af0bf592a51b43bf8d6c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 17 Jun 2019 14:03:57 +0200 Subject: [PATCH 025/133] NEW can specify hour start end for selectDate and step for minutes --- htdocs/core/class/html.form.class.php | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 63246fb0287..29f2dd6ed6a 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5234,10 +5234,12 @@ class Form * @param int $fullday When a checkbox with this html name is on, hour and day are set with 00:00 or 23:59 * @param string $addplusone Add a link "+1 hour". Value must be name of another selectDate field. * @param datetime $adddateof Add a link "Date of invoice" using the following date. + * @param string $openinghours Specify hour strat and hour end for the select ex 8,20 + * @param int $stepminutes Specify step for minutes between 1 and 30 * @return string Html for selectDate * @see form_date(), select_month(), select_year(), select_dayofweek() */ - public function selectDate($set_time = '', $prefix = 're', $h = 0, $m = 0, $empty = 0, $form_name = "", $d = 1, $addnowlink = 0, $disabled = 0, $fullday = '', $addplusone = '', $adddateof = '') + public function selectDate($set_time = '', $prefix = 're', $h = 0, $m = 0, $empty = 0, $form_name = "", $d = 1, $addnowlink = 0, $disabled = 0, $fullday = '', $addplusone = '', $adddateof = '', $openinghours = '', $stepminutes = 1) { global $conf,$langs; @@ -5248,6 +5250,7 @@ class Form if ($m == '') $m=0; $emptydate=0; $emptyhours=0; + if ($stepminutes<=0 || $stepminutes>30) $stepminutes = 1; if ($empty == 1) { $emptydate=1; $emptyhours=1; } if ($empty == 2) { $emptydate=0; $emptyhours=1; } $orig_set_time=$set_time; @@ -5468,10 +5471,18 @@ class Form if ($h) { + $hourstart = 0; + $hourend = 24; + if ($openinghours != '') { + $openinghours = explode(',', $openinghours); + $hourstart = $openinghours[0]; + $hourend = $openinghours[1]; + if ($hourend<$hourstart) $hourend = $hourstart; + } // Show hour $retstring.=''; if ($emptyhours) $retstring.=''; - for ($hour = 0; $hour < 24; $hour++) + for ($hour = $hourstart; $hour < $hourend; $hour++) { if (strlen($hour) < 2) $hour = "0" . $hour; $retstring.=''; @@ -5485,7 +5496,7 @@ class Form // Show minutes $retstring.=''; if ($emptyhours) $retstring.=''; - for ($min = 0; $min < 60 ; $min++) + for ($min = 0; $min < 60 ; $min+=$stepminutes) { if (strlen($min) < 2) $min = "0" . $min; $retstring.=''; From aa92bfd1e0a42fea433c2668ebc44533b895d404 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 17 Jun 2019 15:31:48 +0200 Subject: [PATCH 026/133] Update bom_card.php --- htdocs/bom/bom_card.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/bom/bom_card.php b/htdocs/bom/bom_card.php index c2ed2ca6705..d788be5354a 100644 --- a/htdocs/bom/bom_card.php +++ b/htdocs/bom/bom_card.php @@ -173,7 +173,6 @@ if (empty($reshook)) $action = ''; } } - } From c62f37095909cc179b3c1b10fdf120b85e2fb395 Mon Sep 17 00:00:00 2001 From: Ferran Marcet Date: Mon, 17 Jun 2019 16:30:56 +0200 Subject: [PATCH 027/133] FIX: Wrong stock movement on supplier credit notes --- htdocs/fourn/class/fournisseur.facture.class.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 3a27690e7ac..f96caf89207 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -9,7 +9,7 @@ * Copyright (C) 2013 Florian Henry * Copyright (C) 2014-2016 Marcos García * Copyright (C) 2015 Bahfir Abbes - * Copyright (C) 2015 Ferran Marcet + * Copyright (C) 2015-2019 Ferran Marcet * Copyright (C) 2016 Alexandre Spangaro * Copyright (C) 2018 Nicolas ZABOURI * @@ -1318,7 +1318,8 @@ class FactureFournisseur extends CommonInvoice // We increase stock for product $up_ht_disc=$this->lines[$i]->pu_ht; if (! empty($this->lines[$i]->remise_percent) && empty($conf->global->STOCK_EXCLUDE_DISCOUNT_FOR_PMP)) $up_ht_disc=price2num($up_ht_disc * (100 - $this->lines[$i]->remise_percent) / 100, 'MU'); - $result=$mouvP->reception($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, $up_ht_disc, $langs->trans("InvoiceValidatedInDolibarr",$num)); + if ($this->type == FactureFournisseur::TYPE_CREDIT_NOTE) $result=$mouvP->livraison($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, $up_ht_disc, $langs->trans("InvoiceValidatedInDolibarr",$num)); + else $result=$mouvP->reception($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, $up_ht_disc, $langs->trans("InvoiceValidatedInDolibarr",$num)); if ($result < 0) { $error++; } unset($this->line); } @@ -1441,7 +1442,8 @@ class FactureFournisseur extends CommonInvoice $mouvP = new MouvementStock($this->db); $mouvP->origin = &$this; // We increase stock for product - $result=$mouvP->livraison($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, $this->lines[$i]->subprice, $langs->trans("InvoiceBackToDraftInDolibarr", $this->ref)); + if ($this->type == FactureFournisseur::TYPE_CREDIT_NOTE) $result=$mouvP->reception($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, $this->lines[$i]->subprice, $langs->trans("InvoiceBackToDraftInDolibarr", $this->ref)); + else $result=$mouvP->livraison($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, $this->lines[$i]->subprice, $langs->trans("InvoiceBackToDraftInDolibarr", $this->ref)); } } } From 80d4d8754d5e548902878c50fca8a7571349e2a2 Mon Sep 17 00:00:00 2001 From: Eric Seigne <1468823+rycks@users.noreply.github.com> Date: Mon, 17 Jun 2019 18:28:11 +0200 Subject: [PATCH 028/133] allow zero as accountancy code nomber (replace all empty tests by != '') --- .../accountancy/bookkeeping/listbyaccount.php | 2 +- htdocs/accountancy/class/lettering.class.php | 30 +++++++++--------- htdocs/accountancy/journal/bankjournal.php | 14 ++++----- .../journal/expensereportsjournal.php | 14 ++++----- .../accountancy/journal/purchasesjournal.php | 2 +- htdocs/accountancy/journal/sellsjournal.php | 14 ++++----- htdocs/compta/journal/purchasesjournal.php | 4 +-- htdocs/compta/journal/sellsjournal.php | 2 +- .../core/class/html.formaccounting.class.php | 2 +- htdocs/core/lib/accounting.lib.php | 31 ++++++++++++++----- .../societe/mod_codecompta_panicum.php | 4 +-- htdocs/societe/class/societe.class.php | 4 +-- 12 files changed, 70 insertions(+), 53 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/listbyaccount.php b/htdocs/accountancy/bookkeeping/listbyaccount.php index d1ef1377994..bacfdcb714a 100644 --- a/htdocs/accountancy/bookkeeping/listbyaccount.php +++ b/htdocs/accountancy/bookkeeping/listbyaccount.php @@ -348,7 +348,7 @@ while ($i < min($num, $limit)) $colspan = 9; print ""; print ''; - if (! empty($line->numero_compte) && $line->numero_compte != '-1') print length_accountg($line->numero_compte) . ' : ' . $object->get_compte_desc($line->numero_compte); + if ($line->numero_compte != "" && $line->numero_compte != '-1') print length_accountg($line->numero_compte) . ' : ' . $object->get_compte_desc($line->numero_compte); else print ''.$langs->trans("Unknown").''; print ''; print ''; diff --git a/htdocs/accountancy/class/lettering.class.php b/htdocs/accountancy/class/lettering.class.php index a0c977a8d5a..2a89c6c1c96 100644 --- a/htdocs/accountancy/class/lettering.class.php +++ b/htdocs/accountancy/class/lettering.class.php @@ -67,11 +67,11 @@ class Lettering extends BookKeeping $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping as bk"; $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "bank_url as bu ON(bk.fk_doc = bu.fk_bank AND bu.type IN ('payment', 'payment_supplier') ) "; $sql .= " WHERE ( "; - if (! empty($object->code_compta)) + if ($object->code_compta != "") $sql .= " bk.subledger_account = '" . $object->code_compta . "' "; - if (! empty($object->code_compta) && ! empty($object->code_compta_fournisseur)) + if ($object->code_compta != "" && $object->code_compta_fournisseur != "") $sql .= " OR "; - if (! empty($object->code_compta_fournisseur)) + if ($object->code_compta_fournisseur != "") $sql .= " bk.subledger_account = '" . $object->code_compta_fournisseur . "' "; $sql .= " ) AND (bk.date_lettering ='' OR bk.date_lettering IS NULL) "; @@ -99,13 +99,13 @@ class Lettering extends BookKeeping $sql .= " AND facf.entity = ".$conf->entity; $sql .= " AND code_journal IN (SELECT code FROM " . MAIN_DB_PREFIX . "accounting_journal WHERE nature=4 AND entity=".$conf->entity.") "; $sql .= " AND ( "; - if (! empty($object->code_compta)) { + if ($object->code_compta != "") { $sql .= " bk.subledger_account = '" . $object->code_compta . "' "; } - if (! empty($object->code_compta) && ! empty($object->code_compta_fournisseur)) { + if ($object->code_compta != "" && $object->code_compta_fournisseur != "") { $sql .= " OR "; } - if (! empty($object->code_compta_fournisseur)) { + if ($object->code_compta_fournisseur != "") { $sql .= " bk.subledger_account = '" . $object->code_compta_fournisseur . "' "; } $sql .= " ) "; @@ -127,13 +127,13 @@ class Lettering extends BookKeeping $sql .= " WHERE bk.code_journal IN (SELECT code FROM " . MAIN_DB_PREFIX . "accounting_journal WHERE nature=3 AND entity=".$conf->entity.") "; $sql .= " AND facf.entity = ".$conf->entity; $sql .= " AND ( "; - if (! empty($object->code_compta)) { + if ($object->code_compta != "") { $sql .= " bk.subledger_account = '" . $object->code_compta . "' "; } - if (! empty($object->code_compta) && ! empty($object->code_compta_fournisseur)) { + if ($object->code_compta != "" && $object->code_compta_fournisseur != "") { $sql .= " OR "; } - if (! empty($object->code_compta_fournisseur)) { + if ($object->code_compta_fournisseur != "") { $sql .= " bk.subledger_account = '" . $object->code_compta_fournisseur . "' "; } $sql .= ") "; @@ -159,13 +159,13 @@ class Lettering extends BookKeeping $sql .= " AND bk.code_journal IN (SELECT code FROM " . MAIN_DB_PREFIX . "accounting_journal WHERE nature=4 AND entity=".$conf->entity.") "; $sql .= " AND fac.entity IN (".getEntity('invoice', 0).")";// We don't share object for accountancy $sql .= " AND ( "; - if (! empty($object->code_compta)) { + if ($object->code_compta != "") { $sql .= " bk.subledger_account = '" . $object->code_compta . "' "; } - if (! empty($object->code_compta) && ! empty($object->code_compta_fournisseur)) { + if ($object->code_compta != "" && $object->code_compta_fournisseur != "") { $sql .= " OR "; } - if (! empty($object->code_compta_fournisseur)) { + if ($object->code_compta_fournisseur != "") { $sql .= " bk.subledger_account = '" . $object->code_compta_fournisseur . "' "; } $sql .= " ) "; @@ -187,13 +187,13 @@ class Lettering extends BookKeeping $sql .= " WHERE code_journal IN (SELECT code FROM " . MAIN_DB_PREFIX . "accounting_journal WHERE nature=2 AND entity=".$conf->entity.") "; $sql .= " AND fac.entity IN (".getEntity('invoice', 0).")";// We don't share object for accountancy $sql .= " AND ( "; - if (! empty($object->code_compta)) { + if ($object->code_compta != "") { $sql .= " bk.subledger_account = '" . $object->code_compta . "' "; } - if (! empty($object->code_compta) && ! empty($object->code_compta_fournisseur)) { + if ($object->code_compta != "" && $object->code_compta_fournisseur != "") { $sql .= " OR "; } - if (! empty($object->code_compta_fournisseur)) { + if ($object->code_compta_fournisseur != "") { $sql .= " bk.subledger_account = '" . $object->code_compta_fournisseur . "' "; } $sql .= " ) "; diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index e4e07831b44..0f22789d630 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -171,8 +171,8 @@ if ($result) { //print $sql; // Variables - $account_supplier = (! empty($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER) ? $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER : 'NotDefined'); // NotDefined is a reserved word - $account_customer = (! empty($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER) ? $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER : 'NotDefined'); // NotDefined is a reserved word + $account_supplier = (($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER != "") ? $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER : 'NotDefined'); // NotDefined is a reserved word + $account_customer = ($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER != "") ? $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER : 'NotDefined'); // NotDefined is a reserved word $account_employee = (! empty($conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT) ? $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT : 'NotDefined'); // NotDefined is a reserved word $account_pay_vat = (! empty($conf->global->ACCOUNTING_VAT_PAY_ACCOUNT) ? $conf->global->ACCOUNTING_VAT_PAY_ACCOUNT : 'NotDefined'); // NotDefined is a reserved word $account_pay_donation = (! empty($conf->global->DONATION_ACCOUNTINGACCOUNT) ? $conf->global->DONATION_ACCOUNTINGACCOUNT : 'NotDefined'); // NotDefined is a reserved word @@ -218,7 +218,7 @@ if ($result) { // Set accountancy code for thirdparty $compta_soc = 'NotDefined'; if ($lineisapurchase > 0) - $compta_soc = (! empty($obj->code_compta_fournisseur) ? $obj->code_compta_fournisseur : $account_supplier); + $compta_soc = (($obj->code_compta_fournisseur != "") ? $obj->code_compta_fournisseur : $account_supplier); if ($lineisasale > 0) $compta_soc = (! empty($obj->code_compta) ? $obj->code_compta : $account_customer); @@ -938,8 +938,8 @@ if (empty($action) || $action == 'view') { // Button to write into Ledger - if (empty($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER) || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1' - || empty($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER) || $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == '-1' + if (($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == "") || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1' + || ($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == "") || $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == '-1' || empty($conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT) || $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT == '-1') { print '
'.img_warning().' '.$langs->trans("SomeMandatoryStepsOfSetupWereNotDone"); print ' : '.$langs->trans("AccountancyAreaDescMisc", 4, ''.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("MenuDefaultAccounts").''); @@ -950,8 +950,8 @@ if (empty($action) || $action == 'view') { if (! empty($conf->global->ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL)) print ''; - if (empty($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER) || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1' - || empty($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER) || $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == '-1') { + if (($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == "") || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1' + || ($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == "") || $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == '-1') { print ''; } else { diff --git a/htdocs/accountancy/journal/expensereportsjournal.php b/htdocs/accountancy/journal/expensereportsjournal.php index 4c50015a2ba..d82381533cf 100644 --- a/htdocs/accountancy/journal/expensereportsjournal.php +++ b/htdocs/accountancy/journal/expensereportsjournal.php @@ -444,10 +444,10 @@ if ($action == 'exportcsv') { // ISO and not UTF8 ! foreach ($taber as $key => $val) { $date = dol_print_date($val["date"], 'day'); - + $userstatic->id = $tabuser[$key]['id']; $userstatic->name = $tabuser[$key]['name']; - + // Fees foreach ($tabht[$key] as $k => $mt) { $accountingaccount = new AccountingAccount($db); @@ -474,7 +474,7 @@ if ($action == 'exportcsv') { // ISO and not UTF8 ! print "\n"; } } - + // Third party foreach ($tabttc[$key] as $k => $mt) { print '"' . $date . '"' . $sep; @@ -585,7 +585,7 @@ if (empty($action) || $action == 'view') { // Account print ""; $accountoshow = length_accountg($k); - if (empty($accountoshow) || $accountoshow == 'NotDefined') + if (($accountoshow == "") || $accountoshow == 'NotDefined') { print ''.$langs->trans("FeeAccountNotDefined").''; } @@ -615,7 +615,7 @@ if (empty($action) || $action == 'view') { // Account print ""; $accountoshow = length_accounta($conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT); - if (empty($accountoshow) || $accountoshow == 'NotDefined') + if (($accountoshow == "") || $accountoshow == 'NotDefined') { print ''.$langs->trans("MainAccountForUsersNotDefined").''; } @@ -624,7 +624,7 @@ if (empty($action) || $action == 'view') { // Subledger account print ""; $accountoshow = length_accounta($k); - if (empty($accountoshow) || $accountoshow == 'NotDefined') + if (($accountoshow == "") || $accountoshow == 'NotDefined') { print ''.$langs->trans("UserAccountNotDefined").''; } @@ -652,7 +652,7 @@ if (empty($action) || $action == 'view') { // Account print ""; $accountoshow = length_accountg($k); - if (empty($accountoshow) || $accountoshow == 'NotDefined') + if (($accountoshow == "") || $accountoshow == 'NotDefined') { print ''.$langs->trans("VATAccountNotDefined").''; } diff --git a/htdocs/accountancy/journal/purchasesjournal.php b/htdocs/accountancy/journal/purchasesjournal.php index cab5069e1f8..cd82e9f2f27 100644 --- a/htdocs/accountancy/journal/purchasesjournal.php +++ b/htdocs/accountancy/journal/purchasesjournal.php @@ -749,7 +749,7 @@ if (empty($action) || $action == 'view') { } print '
'; if (! empty($conf->global->ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL)) print ''; - if (empty($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER) || $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == '-1') { + if (($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == "") || $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == '-1') { print ''; } else { diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php index 8f82fd95afb..3b0607d34a7 100644 --- a/htdocs/accountancy/journal/sellsjournal.php +++ b/htdocs/accountancy/journal/sellsjournal.php @@ -146,7 +146,7 @@ if ($result) { $num = $db->num_rows($result); // Variables - $cptcli = (! empty($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER)) ? $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER : 'NotDefined'; + $cptcli = (($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER != "")) ? $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER : 'NotDefined'; $cpttva = (! empty($conf->global->ACCOUNTING_VAT_SOLD_ACCOUNT)) ? $conf->global->ACCOUNTING_VAT_SOLD_ACCOUNT : 'NotDefined'; $i = 0; @@ -679,14 +679,14 @@ if (empty($action) || $action == 'view') { journalHead($nom, $nomlink, $period, $periodlink, $description, $builddate, $exportlink, array('action' => ''), '', $varlink); // Button to write into Ledger - if (empty($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER) || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1') { + if (($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == "") || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1') { print '
'; print img_warning().' '.$langs->trans("SomeMandatoryStepsOfSetupWereNotDone"); print ' : '.$langs->trans("AccountancyAreaDescMisc", 4, ''.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("MenuDefaultAccounts").''); } print '
'; if (! empty($conf->global->ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL)) print ''; - if (empty($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER) || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1') { + if (($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == "") || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1') { print ''; } else { @@ -813,7 +813,7 @@ if (empty($action) || $action == 'view') { // Account print ""; $accountoshow = length_accounta($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER); - if (empty($accountoshow) || $accountoshow == 'NotDefined') + if (($accountoshow == "") || $accountoshow == 'NotDefined') { print ''.$langs->trans("MainAccountForCustomersNotDefined").''; } @@ -822,7 +822,7 @@ if (empty($action) || $action == 'view') { // Subledger account print ""; $accountoshow = length_accounta($k); - if (empty($accountoshow) || $accountoshow == 'NotDefined') + if (($accountoshow == "") || $accountoshow == 'NotDefined') { print ''.$langs->trans("ThirdpartyAccountNotDefined").''; } @@ -849,7 +849,7 @@ if (empty($action) || $action == 'view') { // Account print ""; $accountoshow = length_accountg($k); - if (empty($accountoshow) || $accountoshow == 'NotDefined') + if (($accountoshow == "") || $accountoshow == 'NotDefined') { print ''.$langs->trans("ProductNotDefined").''; } @@ -884,7 +884,7 @@ if (empty($action) || $action == 'view') { // Account print ""; $accountoshow = length_accountg($k); - if (empty($accountoshow) || $accountoshow == 'NotDefined') + if (($accountoshow == "") || $accountoshow == 'NotDefined') { print ''.$langs->trans("VATAccountNotDefined").' ('.$langs->trans("Sale").')'.''; } diff --git a/htdocs/compta/journal/purchasesjournal.php b/htdocs/compta/journal/purchasesjournal.php index cd3bf06f43a..5b4e54fd807 100644 --- a/htdocs/compta/journal/purchasesjournal.php +++ b/htdocs/compta/journal/purchasesjournal.php @@ -123,7 +123,7 @@ if ($result) { $num = $db->num_rows($result); // les variables - $cptfour = (! empty($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER)?$conf->global->ACCOUNTING_ACCOUNT_SUPPLIER:$langs->trans("CodeNotDef")); + $cptfour = (($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER != "")?$conf->global->ACCOUNTING_ACCOUNT_SUPPLIER:$langs->trans("CodeNotDef")); $cpttva = (! empty($conf->global->ACCOUNTING_VAT_BUY_ACCOUNT)?$conf->global->ACCOUNTING_VAT_BUY_ACCOUNT:$langs->trans("CodeNotDef")); $tabfac = array(); @@ -139,7 +139,7 @@ if ($result) { $obj = $db->fetch_object($result); // contrôles - $compta_soc = (! empty($obj->code_compta_fournisseur)?$obj->code_compta_fournisseur:$cptfour); + $compta_soc = (($obj->code_compta_fournisseur != "")?$obj->code_compta_fournisseur:$cptfour); $compta_prod = $obj->accountancy_code_buy; if (empty($compta_prod)) { diff --git a/htdocs/compta/journal/sellsjournal.php b/htdocs/compta/journal/sellsjournal.php index fe51665163e..123bb3c7770 100644 --- a/htdocs/compta/journal/sellsjournal.php +++ b/htdocs/compta/journal/sellsjournal.php @@ -146,7 +146,7 @@ if ($result) { $obj = $db->fetch_object($result); // les variables - $cptcli = (! empty($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER)?$conf->global->ACCOUNTING_ACCOUNT_CUSTOMER:$langs->trans("CodeNotDef")); + $cptcli = (($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER != "")?$conf->global->ACCOUNTING_ACCOUNT_CUSTOMER:$langs->trans("CodeNotDef")); $compta_soc = (! empty($obj->code_compta)?$obj->code_compta:$cptcli); $compta_prod = $obj->accountancy_code_sell; if (empty($compta_prod)) diff --git a/htdocs/core/class/html.formaccounting.class.php b/htdocs/core/class/html.formaccounting.class.php index 87b32902684..cf95e471ddd 100644 --- a/htdocs/core/class/html.formaccounting.class.php +++ b/htdocs/core/class/html.formaccounting.class.php @@ -392,7 +392,7 @@ class FormAccounting extends Form $resql = $this->db->query($sql); if ($resql) { while ($obj = $this->db->fetch_object($resql)) { - if (!empty($obj->code_compta_fournisseur)) { + if ($obj->code_compta_fournisseur != "") { $aux_account[$obj->code_compta_fournisseur] = $obj->code_compta_fournisseur.' ('.$obj->nom.')'; } } diff --git a/htdocs/core/lib/accounting.lib.php b/htdocs/core/lib/accounting.lib.php index 889d9da8a2c..4b5345da62b 100644 --- a/htdocs/core/lib/accounting.lib.php +++ b/htdocs/core/lib/accounting.lib.php @@ -2,6 +2,7 @@ /* Copyright (C) 2013-2014 Olivier Geffroy * Copyright (C) 2013-2017 Alexandre Spangaro * Copyright (C) 2014 Florian Henry + * Copyright (C) 2019 Eric Seigne * * 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 @@ -23,6 +24,22 @@ * \brief Library of accountancy functions */ + /** + * Check if a value is empty with some options + * + * @param allow_false : setting this to true will make the function consider a boolean value of false as NOT empty. This parameter is false by default. + * @param allow_ws : setting this to true will make the function consider a string with nothing but white space as NOT empty. This parameter is false by default. + * @return array Bool + * @author Michael - https://www.php.net/manual/fr/function.empty.php#90767 + */ + function is_empty($var, $allow_false = false, $allow_ws = false) { + if (!isset($var) || is_null($var) || ($allow_ws == false && trim($var) == "" && !is_bool($var)) || ($allow_false === false && is_bool($var) && $var === false) || (is_array($var) && empty($var))) { + return true; + } else { + return false; + } + } + /** * Prepare array with list of tabs * @@ -75,12 +92,12 @@ function length_accountg($account) { global $conf; - if ($account < 0 || empty($account)) return ''; + if ($account < 0 || is_empty($account)) return ''; - if (! empty($conf->global->ACCOUNTING_MANAGE_ZERO)) return $account; + if (! is_empty($conf->global->ACCOUNTING_MANAGE_ZERO)) return $account; $g = $conf->global->ACCOUNTING_LENGTH_GACCOUNT; - if (! empty($g)) { + if (! is_empty($g)) { // Clean parameters $i = strlen($account); @@ -110,12 +127,12 @@ function length_accounta($accounta) { global $conf; - if ($accounta < 0 || empty($accounta)) return ''; + if ($accounta < 0 || is_empty($accounta)) return ''; - if (! empty($conf->global->ACCOUNTING_MANAGE_ZERO)) return $accounta; + if (! is_empty($conf->global->ACCOUNTING_MANAGE_ZERO)) return $accounta; $a = $conf->global->ACCOUNTING_LENGTH_AACCOUNT; - if (! empty($a)) { + if (! is_empty($a)) { // Clean parameters $i = strlen($accounta); @@ -158,7 +175,7 @@ function journalHead($nom, $variante, $period, $periodlink, $description, $build print "\n\n\n"; - if(! empty($varlink)) $varlink = '?'.$varlink; + if(! is_empty($varlink)) $varlink = '?'.$varlink; $head=array(); $h=0; diff --git a/htdocs/core/modules/societe/mod_codecompta_panicum.php b/htdocs/core/modules/societe/mod_codecompta_panicum.php index 4c5ffcd66c5..f3106cef761 100644 --- a/htdocs/core/modules/societe/mod_codecompta_panicum.php +++ b/htdocs/core/modules/societe/mod_codecompta_panicum.php @@ -96,8 +96,8 @@ class mod_codecompta_panicum extends ModeleAccountancyCode $this->code=''; if (is_object($societe)) { - if ($type == 'supplier') $this->code = (! empty($societe->code_compta_fournisseur)?$societe->code_compta_fournisseur:''); - else $this->code = (! empty($societe->code_compta)?$societe->code_compta:''); + if ($type == 'supplier') $this->code = (($societe->code_compta_fournisseur != "")?$societe->code_compta_fournisseur:''); + else $this->code = (($societe->code_compta != "")?$societe->code_compta:''); } return 0; // return ok diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 84bda8abd54..ce7617f003d 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -928,7 +928,7 @@ class Societe extends CommonObject if (! empty($allowmodcodefournisseur) && ! empty($this->fournisseur)) { // Attention get_codecompta peut modifier le code suivant le module utilise - if (empty($this->code_compta_fournisseur)) + if ($this->code_compta_fournisseur == "") { $ret=$this->get_codecompta('supplier'); if ($ret < 0) return -1; @@ -1085,7 +1085,7 @@ class Societe extends CommonObject if ($supplier) { $sql .= ", code_fournisseur = ".(! empty($this->code_fournisseur)?"'".$this->db->escape($this->code_fournisseur)."'":"null"); - $sql .= ", code_compta_fournisseur = ".(! empty($this->code_compta_fournisseur)?"'".$this->db->escape($this->code_compta_fournisseur)."'":"null"); + $sql .= ", code_compta_fournisseur = ".(($this->code_compta_fournisseur != "")?"'".$this->db->escape($this->code_compta_fournisseur)."'":"null"); } $sql .= ", fk_user_modif = ".($user->id > 0 ? $user->id:"null"); $sql .= ", fk_multicurrency = ".(int) $this->fk_multicurrency; From e4f5ca79f8d20ddff3c8b5d305c78d4bba9c9a96 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Mon, 17 Jun 2019 19:36:21 +0200 Subject: [PATCH 029/133] Fix access category API --- htdocs/categories/class/api_categories.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/categories/class/api_categories.class.php b/htdocs/categories/class/api_categories.class.php index c82d803f31c..c389e1b63d1 100644 --- a/htdocs/categories/class/api_categories.class.php +++ b/htdocs/categories/class/api_categories.class.php @@ -86,7 +86,7 @@ class Categories extends DolibarrApi throw new RestException(404, 'category not found'); } - if ( ! DolibarrApi::_checkAccessToResource('category', $this->category->id)) { + if ( ! DolibarrApi::_checkAccessToResource('categorie', $this->category->id)) { throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); } From 27c928d9d9f5685c2b6da463ae8ba652f649ad9a Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Mon, 17 Jun 2019 20:53:10 +0200 Subject: [PATCH 030/133] NEW list of measuring units API --- htdocs/api/class/api_setup.class.php | 61 ++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php index 783ec6540e3..a38a7cd83c2 100644 --- a/htdocs/api/class/api_setup.class.php +++ b/htdocs/api/class/api_setup.class.php @@ -4,6 +4,7 @@ * Copyright (C) 2017 Regis Houssin * Copyright (C) 2017 Neil Orley * Copyright (C) 2018 Frédéric France + * Copyright (C) 2019 Thibault FOUCART * * * This program is free software; you can redistribute it and/or modify @@ -707,6 +708,66 @@ class Setup extends DolibarrApi return $list; } + /** + * Get the list of measuring units. + * + * @param string $sortfield Sort field + * @param string $sortorder Sort order + * @param int $limit Number of items per page + * @param int $page Page number (starting from zero) + * @param int $active Payment term is active or not {@min 0} {@max 1} + * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.code:like:'A%') and (t.active:>=:0)" + * @return List of events types + * + * @url GET dictionary/units + * + * @throws RestException + */ + public function getListOfMeasuringUnits($sortfield = "rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $active = 1, $sqlfilters = '') + { + $list = array(); + //TODO link with multicurrency module + $sql = "SELECT t.rowid, t.code, t.label,t.short_label, t.active, t.scale, t.unit_type"; + $sql.= " FROM ".MAIN_DB_PREFIX."c_units as t"; + $sql.= " WHERE t.active = ".$active; + // Add sql filters + if ($sqlfilters) + { + if (! DolibarrApi::_checkFilters($sqlfilters)) + { + throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters); + } + $regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)'; + $sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")"; + } + + + $sql.= $this->db->order($sortfield, $sortorder); + + if ($limit) { + if ($page < 0) { + $page = 0; + } + $offset = $limit * $page; + + $sql .= $this->db->plimit($limit, $offset); + } + + $result = $this->db->query($sql); + + if ($result) { + $num = $this->db->num_rows($result); + $min = min($num, ($limit <= 0 ? $num : $limit)); + for ($i = 0; $i < $min; $i++) { + $list[] = $this->db->fetch_object($result); + } + } else { + throw new RestException(503, 'Error when retrieving list of measuring units: '.$this->db->lasterror()); + } + + return $list; + } + /** * Get the list of tickets categories. * From f1d64ad164152252a9cb901a966493e6b82aeb1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 17 Jun 2019 23:02:54 +0200 Subject: [PATCH 031/133] Update peruser.php --- htdocs/comm/action/peruser.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/htdocs/comm/action/peruser.php b/htdocs/comm/action/peruser.php index 754cb736bc9..d4020f4df92 100644 --- a/htdocs/comm/action/peruser.php +++ b/htdocs/comm/action/peruser.php @@ -1186,33 +1186,34 @@ function show_day_events2($username, $day, $month, $year, $monthshown, $style, & } } - $ids1='';$ids2=''; - if (count($cases1[$h]) && array_keys($cases1[$h])) $ids1=join(',', array_keys($cases1[$h])); - if (count($cases2[$h]) && array_keys($cases2[$h])) $ids2=join(',', array_keys($cases2[$h])); + $ids1=''; + $ids2=''; + if (is_array($cases1[$h]) && count($cases1[$h]) && array_keys($cases1[$h])) $ids1=join(',', array_keys($cases1[$h])); + if (is_array($cases2[$h]) && count($cases2[$h]) && array_keys($cases2[$h])) $ids2=join(',', array_keys($cases2[$h])); if ($h == $begin_h) echo ''; else echo ''; - if (count($cases1[$h]) == 1) // only 1 event + if (is_array($cases1[$h]) && count($cases1[$h]) == 1) // only 1 event { $output = array_slice($cases1[$h], 0, 1); $title1=$langs->trans("Ref").' '.$ids1.($title1?' - '.$title1:''); if ($output[0]['string']) $title1.=($title1?' - ':'').$output[0]['string']; if ($output[0]['color']) $color1 = $output[0]['color']; } - elseif (count($cases1[$h]) > 1) + elseif (is_array($cases1[$h]) && count($cases1[$h]) > 1) { $title1=$langs->trans("Ref").' '.$ids1.($title1?' - '.$title1:''); $color1='222222'; } - if (count($cases2[$h]) == 1) // only 1 event + if (is_array($cases2[$h]) && count($cases2[$h]) == 1) // only 1 event { $output = array_slice($cases2[$h], 0, 1); $title2=$langs->trans("Ref").' '.$ids2.($title2?' - '.$title2:''); if ($output[0]['string']) $title2.=($title2?' - ':'').$output[0]['string']; if ($output[0]['color']) $color2 = $output[0]['color']; } - elseif (count($cases2[$h]) > 1) + elseif (is_array($cases2[$h]) && count($cases2[$h]) > 1) { $title2=$langs->trans("Ref").' '.$ids2.($title2?' - '.$title2:''); $color2='222222'; From fd263cb316b34100ec1c4bd0d76a858b0fb0f0fe Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Tue, 18 Jun 2019 07:15:59 +0200 Subject: [PATCH 032/133] FIX add v10 in virtualmin script --- build/perl/virtualmin/dolibarr.pl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/build/perl/virtualmin/dolibarr.pl b/build/perl/virtualmin/dolibarr.pl index a28fc430caa..343cebc6abe 100644 --- a/build/perl/virtualmin/dolibarr.pl +++ b/build/perl/virtualmin/dolibarr.pl @@ -1,7 +1,7 @@ #---------------------------------------------------------------------------- # \file dolibarr.pl # \brief Dolibarr script install for Virtualmin Pro -# \author (c)2009-2018 Regis Houssin +# \author (c)2009-2019 Regis Houssin #---------------------------------------------------------------------------- @@ -30,7 +30,7 @@ return "Regis Houssin"; # script_dolibarr_versions() sub script_dolibarr_versions { -return ( "9.0.0", "8.0.3", "7.0.4", "6.0.8", "5.0.7" ); +return ( "10.0.0", "9.0.3", "8.0.5", "7.0.5", "6.0.8" ); } sub script_dolibarr_release @@ -390,6 +390,7 @@ sub script_dolibarr_check_latest { local ($ver) = @_; local @vers = &osdn_package_versions("dolibarr", + $ver >= 10.0 ? "dolibarr\\-(10\\.0\\.[0-9\\.]+)\\.tgz" : $ver >= 9.0 ? "dolibarr\\-(9\\.0\\.[0-9\\.]+)\\.tgz" : $ver >= 8.0 ? "dolibarr\\-(8\\.0\\.[0-9\\.]+)\\.tgz" : $ver >= 7.0 ? "dolibarr\\-(7\\.0\\.[0-9\\.]+)\\.tgz" : From 96c699482791ebd62614a0209849057799cdb924 Mon Sep 17 00:00:00 2001 From: Nicolas ZABOURI Date: Tue, 18 Jun 2019 10:55:16 +0200 Subject: [PATCH 033/133] =?UTF-8?q?FIX=202=20d=C3=A9clarations=20of=20date?= =?UTF-8?q?=5Fvalid=20in=20SQL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- htdocs/install/mysql/tables/llx_bom_bom.sql | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/htdocs/install/mysql/tables/llx_bom_bom.sql b/htdocs/install/mysql/tables/llx_bom_bom.sql index 9c6e014586d..11e1ce74ffd 100644 --- a/htdocs/install/mysql/tables/llx_bom_bom.sql +++ b/htdocs/install/mysql/tables/llx_bom_bom.sql @@ -27,10 +27,9 @@ CREATE TABLE llx_bom_bom( qty double(24,8), efficiency double(8,4) DEFAULT 1, date_creation datetime NOT NULL, - date_valid datetime NOT NULL, + date_valid datetime, tms timestamp, - date_valid datetime, - fk_user_creat integer NOT NULL, + fk_user_creat integer NOT NULL, fk_user_modif integer, fk_user_valid integer, import_key varchar(14), From 820c420ae5221f0d96a19624a72828c28e7cdd45 Mon Sep 17 00:00:00 2001 From: ICstage Date: Tue, 18 Jun 2019 14:07:52 +0200 Subject: [PATCH 034/133] FIX Missing hooks --- htdocs/adherents/index.php | 15 ++++++++++++--- htdocs/comm/index.php | 9 +++++++++ htdocs/comm/mailing/index.php | 9 +++++++++ htdocs/comm/propal/index.php | 9 +++++++++ htdocs/commande/index.php | 8 ++++++++ htdocs/compta/charges/index.php | 12 +++++++++++- htdocs/compta/index.php | 7 ++++++- htdocs/contrat/index.php | 8 ++++++++ htdocs/don/index.php | 8 ++++++++ htdocs/expedition/index.php | 9 +++++++++ htdocs/expensereport/index.php | 11 ++++++++++- htdocs/fichinter/index.php | 11 +++++++++-- htdocs/fourn/commande/index.php | 15 ++++++++++++--- htdocs/hrm/index.php | 8 ++++++++ htdocs/mrp/index.php | 15 ++++++++++++--- htdocs/opensurvey/index.php | 12 +++++++++++- htdocs/product/index.php | 4 ++++ htdocs/product/stock/index.php | 9 +++++++++ htdocs/projet/activity/index.php | 9 +++++++++ htdocs/projet/index.php | 9 +++++++++ htdocs/reception/index.php | 16 ++++++++++++---- htdocs/societe/index.php | 11 ++++++++++- htdocs/supplier_proposal/index.php | 9 +++++++++ htdocs/ticket/index.php | 11 ++++++++++- htdocs/user/home.php | 5 +++++ 25 files changed, 228 insertions(+), 21 deletions(-) diff --git a/htdocs/adherents/index.php b/htdocs/adherents/index.php index 1d1232a9d58..481a8e8fffd 100644 --- a/htdocs/adherents/index.php +++ b/htdocs/adherents/index.php @@ -1,8 +1,9 @@ - * Copyright (C) 2003 Jean-Louis Bergamo - * Copyright (C) 2004-2017 Laurent Destailleur - * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2003 Jean-Louis Bergamo + * Copyright (C) 2004-2017 Laurent Destailleur + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -29,6 +30,11 @@ require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php'; require_once DOL_DOCUMENT_ROOT.'/adherents/class/subscription.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('membersindex')); + // Load translation files required by the page $langs->loadLangs(array("companies","members")); @@ -435,6 +441,9 @@ print "
"; print '
'; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardUsersGroups', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/comm/index.php b/htdocs/comm/index.php index 651d2c54ec7..15e4e226587 100644 --- a/htdocs/comm/index.php +++ b/htdocs/comm/index.php @@ -3,6 +3,7 @@ * Copyright (C) 2004-2015 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2015 Jean-François Ferry + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -37,6 +38,11 @@ if (! empty($conf->fournisseur->enabled)) require_once DOL_DOCUMENT_ROOT.'/fourn if (! $user->rights->societe->lire) accessforbidden(); +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('commercialindex')); + // Load translation files required by the page $langs->loadLangs(array("commercial", "propal")); @@ -897,6 +903,9 @@ if (! empty($conf->commande->enabled) && $user->rights->commande->lire) print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardCommercials', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/comm/mailing/index.php b/htdocs/comm/mailing/index.php index c5d8bc47232..a835ca241a3 100644 --- a/htdocs/comm/mailing/index.php +++ b/htdocs/comm/mailing/index.php @@ -2,6 +2,7 @@ /* Copyright (C) 2005 Rodolphe Quiedeville * Copyright (C) 2005-2009 Laurent Destailleur * Copyright (C) 2010 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -27,6 +28,11 @@ require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT .'/comm/mailing/class/mailing.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('mailingindex')); + // Load translation files required by the page $langs->loadLangs(array('commercial', 'orders')); @@ -207,6 +213,9 @@ if ($langs->file_exists("html/spam.html", 0)) { print '
'; } +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardEmailings', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/comm/propal/index.php b/htdocs/comm/propal/index.php index e69dbbc8b6c..309712ae76b 100644 --- a/htdocs/comm/propal/index.php +++ b/htdocs/comm/propal/index.php @@ -2,6 +2,7 @@ /* Copyright (C) 2003-2004 Rodolphe Quiedeville * Copyright (C) 2004-2017 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -27,6 +28,11 @@ require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; require_once DOL_DOCUMENT_ROOT .'/comm/propal/class/propal.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('proposalindex')); + // Load translation files required by the page $langs->loadLangs(array('propal', 'companies')); @@ -540,6 +546,9 @@ if (! empty($conf->propal->enabled)) //print ''; print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardPropals', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/commande/index.php b/htdocs/commande/index.php index c0091b43af0..a0e87bf63a3 100644 --- a/htdocs/commande/index.php +++ b/htdocs/commande/index.php @@ -2,6 +2,7 @@ /* Copyright (C) 2003-2004 Rodolphe Quiedeville * Copyright (C) 2004-2011 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -31,6 +32,11 @@ require_once DOL_DOCUMENT_ROOT .'/commande/class/commande.class.php'; if (!$user->rights->commande->lire) accessforbidden(); +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('ordersindex')); + // Load translation files required by the page $langs->loadLangs(array('orders', 'bills')); @@ -478,6 +484,8 @@ if (! empty($conf->commande->enabled)) print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardOrders', $parameters, $object); // Note that $action and $object may have been modified by hook // End of page llxFooter(); diff --git a/htdocs/compta/charges/index.php b/htdocs/compta/charges/index.php index 33a06e09136..4b62a98b80b 100644 --- a/htdocs/compta/charges/index.php +++ b/htdocs/compta/charges/index.php @@ -3,8 +3,9 @@ * Copyright (C) 2004-2016 Laurent Destailleur * Copyright (C) 2005-2010 Regis Houssin * Copyright (C) 2011-2016 Alexandre Spangaro - * Copyright (C) 2011-2014 Juanjo Menent + * Copyright (C) 2011-2014 Juanjo Menent * Copyright (C) 2015 Jean-François Ferry + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -34,6 +35,12 @@ require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; + +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('specialexpensesindex')); + // Load translation files required by the page $langs->loadLangs(array('compta', 'bills')); @@ -568,6 +575,9 @@ if (! empty($conf->salaries->enabled) && ! empty($user->rights->salaries->read)) print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardSpecialBills', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/compta/index.php b/htdocs/compta/index.php index c57b073b487..932d9ed758c 100644 --- a/htdocs/compta/index.php +++ b/htdocs/compta/index.php @@ -2,10 +2,11 @@ /* Copyright (C) 2001-2005 Rodolphe Quiedeville * Copyright (C) 2004-2013 Laurent Destailleur * Copyright (C) 2005-2015 Regis Houssin - * Copyright (C) 2015-2016 Juanjo Menent + * Copyright (C) 2015-2016 Juanjo Menent * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2015 Raphaël Doursenaud * Copyright (C) 2016 Marcos García + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -63,6 +64,7 @@ if ($user->societe_id > 0) $max=3; +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array $hookmanager->initHooks(array('invoiceindex')); /* @@ -1080,6 +1082,9 @@ if ($resql) print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardAccountancy', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/contrat/index.php b/htdocs/contrat/index.php index 10c2e2915b9..3bf047c87c8 100644 --- a/htdocs/contrat/index.php +++ b/htdocs/contrat/index.php @@ -3,6 +3,7 @@ * Copyright (C) 2004-2011 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2015 Jean-François Ferry + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -28,6 +29,11 @@ require "../main.inc.php"; require_once DOL_DOCUMENT_ROOT."/contrat/class/contrat.class.php"; require_once DOL_DOCUMENT_ROOT."/product/class/product.class.php"; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('contractindex')); + // Load translation files required by the page $langs->loadLangs(array('products', 'companies', 'contracts')); @@ -609,6 +615,8 @@ else //print ''; print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardContracts', $parameters, $object); // Note that $action and $object may have been modified by hook llxFooter(); diff --git a/htdocs/don/index.php b/htdocs/don/index.php index d632f316a25..4af0f0d81b0 100644 --- a/htdocs/don/index.php +++ b/htdocs/don/index.php @@ -2,6 +2,7 @@ /* Copyright (C) 2001-2002 Rodolphe Quiedeville * Copyright (C) 2004-2015 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -26,6 +27,11 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('donationindex')); + $langs->load("donations"); // Security check @@ -238,6 +244,8 @@ else dol_print_error($db); print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardDonation', $parameters, $object); // Note that $action and $object may have been modified by hook llxFooter(); diff --git a/htdocs/expedition/index.php b/htdocs/expedition/index.php index bbb5ef58c36..61838cc321b 100644 --- a/htdocs/expedition/index.php +++ b/htdocs/expedition/index.php @@ -2,6 +2,7 @@ /* Copyright (C) 2003-2005 Rodolphe Quiedeville * Copyright (C) 2004-2011 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -27,6 +28,11 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; require_once DOL_DOCUMENT_ROOT.'/expedition/class/expedition.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('sendingindex')); + // Load translation files required by the page $langs->loadLangs(array('orders', 'sendings')); @@ -291,6 +297,9 @@ else dol_print_error($db); print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardWarehouseSendings', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/expensereport/index.php b/htdocs/expensereport/index.php index f7d4e2a8405..461a7aec4fe 100644 --- a/htdocs/expensereport/index.php +++ b/htdocs/expensereport/index.php @@ -3,7 +3,8 @@ * Copyright (C) 2004-2015 Laurent Destailleur * Copyright (C) 2004 Eric Seigne * Copyright (C) 2005-2011 Regis Houssin - * Copyright (C) 2015 Alexandre Spangaro + * Copyright (C) 2015 Alexandre Spangaro + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -30,6 +31,11 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT . '/compta/tva/class/tva.class.php'; require_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('expensereportindex')); + // Load translation files required by the page $langs->loadLangs(array('companies', 'users', 'trips')); @@ -230,6 +236,9 @@ else dol_print_error($db); print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardExpenseReport', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/fichinter/index.php b/htdocs/fichinter/index.php index d240aadf42d..f97c99dc839 100644 --- a/htdocs/fichinter/index.php +++ b/htdocs/fichinter/index.php @@ -2,8 +2,8 @@ /* Copyright (C) 2003-2004 Rodolphe Quiedeville * Copyright (C) 2004-2015 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin - * Copyright (C) 2015 Charlie Benke - + * Copyright (C) 2015 Charlie Benke + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -32,6 +32,11 @@ require_once DOL_DOCUMENT_ROOT .'/fichinter/class/fichinter.class.php'; if (!$user->rights->ficheinter->lire) accessforbidden(); +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('interventionindex')); + // Load translation files required by the page $langs->load("interventions"); @@ -356,6 +361,8 @@ if (! empty($conf->ficheinter->enabled)) print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardInterventions', $parameters, $object); // Note that $action and $object may have been modified by hook llxFooter(); diff --git a/htdocs/fourn/commande/index.php b/htdocs/fourn/commande/index.php index 6c2b66bc7f3..e66054dc750 100644 --- a/htdocs/fourn/commande/index.php +++ b/htdocs/fourn/commande/index.php @@ -1,8 +1,9 @@ - * Copyright (C) 2004-2012 Laurent Destailleur - * Copyright (C) 2005-2012 Regis Houssin - * Copyright (C) 2012 Vinicius Nogueira + * Copyright (C) 2004-2012 Laurent Destailleur + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2012 Vinicius Nogueira + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -34,6 +35,11 @@ $orderid = GETPOST('orderid'); if ($user->societe_id) $socid=$user->societe_id; $result = restrictedArea($user, 'fournisseur', $orderid, '', 'commande'); +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('orderssuppliersindex')); + // Load translation files required by the page $langs->loadLangs(array("suppliers", "orders")); @@ -432,6 +438,9 @@ print "
"; print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardOrdersSuppliers', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/hrm/index.php b/htdocs/hrm/index.php index 066a21ebad0..0dad608a5a5 100644 --- a/htdocs/hrm/index.php +++ b/htdocs/hrm/index.php @@ -3,6 +3,7 @@ * Copyright (C) 2013-2015 Laurent Destailleur * Copyright (C) 2012-2014 Regis Houssin * Copyright (C) 2015-2016 Alexandre Spangaro + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -36,6 +37,9 @@ if ($conf->deplacement->enabled) require_once DOL_DOCUMENT_ROOT.'/compta/deplace if ($conf->expensereport->enabled) require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; require_once DOL_DOCUMENT_ROOT.'/holiday/class/holiday.class.php'; +$hookmanager = new HookManager($db); +$hookmanager->initHooks('hrmindex'); + // Load translation files required by the page $langs->loadLangs(array('users', 'holidays', 'trips', 'boxes')); @@ -392,6 +396,10 @@ if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->lire print ''; +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardHRM', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/mrp/index.php b/htdocs/mrp/index.php index c30d75b1d40..a587706dbb7 100644 --- a/htdocs/mrp/index.php +++ b/htdocs/mrp/index.php @@ -1,8 +1,9 @@ - * Copyright (C) 2003 Jean-Louis Bergamo - * Copyright (C) 2004-2017 Laurent Destailleur - * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2003 Jean-Louis Bergamo + * Copyright (C) 2004-2017 Laurent Destailleur + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -27,6 +28,11 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/bom/class/bom.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('mrpindex')); + // Load translation files required by the page $langs->loadLangs(array("companies","mrp")); @@ -122,6 +128,9 @@ else print ''; +$parameters = array('type' => $type, 'user' => $user); +$reshook = $hookmanager->executeHooks('dashboardBOM', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/opensurvey/index.php b/htdocs/opensurvey/index.php index 413572ca4f6..0a9e3483348 100644 --- a/htdocs/opensurvey/index.php +++ b/htdocs/opensurvey/index.php @@ -1,6 +1,7 @@ - * + * Copyright (C) 2019 Nicolas ZABOURI + * * 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 @@ -32,6 +33,12 @@ if (!$user->rights->opensurvey->read) accessforbidden(); * View */ + +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('opensurveyindex')); + // Load translation files required by the page $langs->load("opensurvey"); @@ -78,6 +85,9 @@ print ''; print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardOpenSurvey', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/product/index.php b/htdocs/product/index.php index 950f4d47b5f..fe93c4b5e6e 100644 --- a/htdocs/product/index.php +++ b/htdocs/product/index.php @@ -6,6 +6,7 @@ * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2019 Pierre Ardoin * Copyright (C) 2019 Frédéric France + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -397,6 +398,9 @@ if (! empty($conf->global->MAIN_SHOW_PRODUCT_ACTIVITY_TRIM)) print ''; +$parameters = array('type' => $type, 'user' => $user); +$reshook = $hookmanager->executeHooks('dashboardProductsServices', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/product/stock/index.php b/htdocs/product/stock/index.php index a19025b5dd6..a0b4895b669 100644 --- a/htdocs/product/stock/index.php +++ b/htdocs/product/stock/index.php @@ -2,6 +2,7 @@ /* Copyright (C) 2003-2006 Rodolphe Quiedeville * Copyright (C) 2004-2016 Laurent Destailleur * Copyright (C) 2005-2009 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -27,6 +28,11 @@ require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/product/stock/class/entrepot.class.php'; require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('stockindex')); + // Load translation files required by the page $langs->loadLangs(array('stocks', 'productbatch')); @@ -184,6 +190,9 @@ if ($resql) //print ''; print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardWarehouse', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/projet/activity/index.php b/htdocs/projet/activity/index.php index b3fb66116bf..2148ba576d8 100644 --- a/htdocs/projet/activity/index.php +++ b/htdocs/projet/activity/index.php @@ -2,6 +2,7 @@ /* Copyright (C) 2001-2005 Rodolphe Quiedeville * Copyright (C) 2006-2015 Laurent Destailleur * Copyright (C) 2010 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -39,6 +40,11 @@ if ($user->societe_id > 0) $socid=$user->societe_id; //$result = restrictedArea($user, 'projet', $projectid); if (!$user->rights->projet->lire) accessforbidden(); +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('activityindex')); + // Load translation files required by the page $langs->load("projects"); @@ -573,6 +579,9 @@ if (empty($conf->global->PROJECT_HIDE_TASKS) && ! empty($conf->global->PROJECT_S print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardActivities', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/projet/index.php b/htdocs/projet/index.php index fa77cb4b52c..da148c1eda6 100644 --- a/htdocs/projet/index.php +++ b/htdocs/projet/index.php @@ -2,6 +2,7 @@ /* Copyright (C) 2001-2005 Rodolphe Quiedeville * Copyright (C) 2004-2016 Laurent Destailleur * Copyright (C) 2005-2010 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -30,6 +31,11 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('projectsindex')); + // Load translation files required by the page $langs->loadLangs(array('projects', 'companies')); @@ -319,6 +325,9 @@ if (! empty($conf->global->PROJECT_SHOW_PROJECT_LIST_ON_PROJECT_AREA)) print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardProjects', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/reception/index.php b/htdocs/reception/index.php index 3b0bb7a05e0..97e25ab39e5 100644 --- a/htdocs/reception/index.php +++ b/htdocs/reception/index.php @@ -1,8 +1,9 @@ - * Copyright (C) 2004-2011 Laurent Destailleur - * Copyright (C) 2005-2012 Regis Houssin - * Copyright (C) 2018 Quentin Vial-Gouteyron +/* Copyright (C) 2003-2005 Rodolphe Quiedeville + * Copyright (C) 2004-2011 Laurent Destailleur + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2018 Quentin Vial-Gouteyron + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -28,6 +29,11 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; require_once DOL_DOCUMENT_ROOT.'/reception/class/reception.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('receptionindex')); + $langs->load("orders"); $langs->load("receptions"); @@ -292,6 +298,8 @@ else dol_print_error($db); print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardWarehouseReceptions', $parameters, $object); // Note that $action and $object may have been modified by hook llxFooter(); $db->close(); diff --git a/htdocs/societe/index.php b/htdocs/societe/index.php index 2404c11861e..d6df59f4740 100644 --- a/htdocs/societe/index.php +++ b/htdocs/societe/index.php @@ -2,9 +2,10 @@ /* Copyright (C) 2001-2006 Rodolphe Quiedeville * Copyright (C) 2004-2018 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin - * Copyright (C) 2014 Charles-Fr Benke + * Copyright (C) 2014 Charles-Fr Benke * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2016 Ferran Marcet + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -29,6 +30,11 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('thirdpartiesindex')); + $langs->load("companies"); $socid = GETPOST('socid', 'int'); @@ -366,6 +372,9 @@ else //print ''; print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardThirdparties', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/supplier_proposal/index.php b/htdocs/supplier_proposal/index.php index 5a2e6df2f29..d75d0c1647c 100644 --- a/htdocs/supplier_proposal/index.php +++ b/htdocs/supplier_proposal/index.php @@ -2,6 +2,7 @@ /* Copyright (C) 2003-2004 Rodolphe Quiedeville * Copyright (C) 2004-2011 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -27,6 +28,11 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; require_once DOL_DOCUMENT_ROOT .'/supplier_proposal/class/supplier_proposal.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('suppliersproposalsindex')); + // Load translation files required by the page $langs->loadLangs(array('supplier_proposal', 'companies')); @@ -375,6 +381,9 @@ if (! empty($conf->supplier_proposal->enabled) && $user->rights->supplier_propos print ''; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardSupplierProposal', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); diff --git a/htdocs/ticket/index.php b/htdocs/ticket/index.php index 824b1f1833e..09b8a208c3c 100644 --- a/htdocs/ticket/index.php +++ b/htdocs/ticket/index.php @@ -1,5 +1,6 @@ +/* Copyright (C) - 2013-2016 Jean-François FERRY + * Copyright (C) - 2019 Nicolas ZABOURI * * 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 @@ -25,6 +26,11 @@ require_once DOL_DOCUMENT_ROOT . '/ticket/class/actions_ticket.class.php'; require_once DOL_DOCUMENT_ROOT . '/ticket/class/ticketstats.class.php'; require_once DOL_DOCUMENT_ROOT . '/core/class/dolgraph.class.php'; +$hookmanager = new HookManager($db); + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$hookmanager->initHooks(array('ticketsindex')); + // Load translation files required by the page $langs->loadLangs(array('companies', 'other', 'ticket')); @@ -371,6 +377,9 @@ if ($result) { print ''; print '
'; +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardTickets', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(''); $db->close(); diff --git a/htdocs/user/home.php b/htdocs/user/home.php index 9a7d0ab94fd..bc766f4dc4b 100644 --- a/htdocs/user/home.php +++ b/htdocs/user/home.php @@ -1,6 +1,7 @@ * Copyright (C) 2005-2018 Regis Houssin + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -286,6 +287,10 @@ if ($canreadperms) //print ''; print ''; +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array +$parameters = array('user' => $user); +$reshook = $hookmanager->executeHooks('dashboardUsersGroups', $parameters, $object); // Note that $action and $object may have been modified by hook + // End of page llxFooter(); $db->close(); From 492c3b5625f28f2fe117ed6c8041d9415a0eaac8 Mon Sep 17 00:00:00 2001 From: Nicolas ZABOURI Date: Tue, 18 Jun 2019 15:13:08 +0200 Subject: [PATCH 035/133] FIX hook --- htdocs/adherents/index.php | 2 +- htdocs/mrp/index.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/adherents/index.php b/htdocs/adherents/index.php index 481a8e8fffd..3e26ae1ce3a 100644 --- a/htdocs/adherents/index.php +++ b/htdocs/adherents/index.php @@ -442,7 +442,7 @@ print ""; print ''; $parameters = array('user' => $user); -$reshook = $hookmanager->executeHooks('dashboardUsersGroups', $parameters, $object); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('dashboardMembers', $parameters, $object); // Note that $action and $object may have been modified by hook // End of page llxFooter(); diff --git a/htdocs/mrp/index.php b/htdocs/mrp/index.php index a587706dbb7..325017c4fb7 100644 --- a/htdocs/mrp/index.php +++ b/htdocs/mrp/index.php @@ -129,7 +129,7 @@ else print ''; $parameters = array('type' => $type, 'user' => $user); -$reshook = $hookmanager->executeHooks('dashboardBOM', $parameters, $object); // Note that $action and $object may have been modified by hook +$reshook = $hookmanager->executeHooks('dashboardMRP', $parameters, $object); // Note that $action and $object may have been modified by hook // End of page llxFooter(); From 181375ff958955a0bd55684d8e4cd97592811672 Mon Sep 17 00:00:00 2001 From: Nicolas ZABOURI Date: Tue, 18 Jun 2019 17:09:46 +0200 Subject: [PATCH 036/133] FIX travis space left --- htdocs/opensurvey/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/opensurvey/index.php b/htdocs/opensurvey/index.php index 0a9e3483348..6ed0f2148fa 100644 --- a/htdocs/opensurvey/index.php +++ b/htdocs/opensurvey/index.php @@ -1,7 +1,7 @@ * Copyright (C) 2019 Nicolas ZABOURI - * + * * 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 From 20e00ca2905f05474fb441d637c7eafb4029cdb2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 18 Jun 2019 19:41:16 +0200 Subject: [PATCH 037/133] FIX if last char of customercode is accent making the truncate of first chars wrong. --- htdocs/core/lib/functions2.lib.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php index 649988e785b..5d0f25892c8 100644 --- a/htdocs/core/lib/functions2.lib.php +++ b/htdocs/core/lib/functions2.lib.php @@ -716,8 +716,8 @@ function get_next_value($db,$mask,$table,$field,$where='',$objsoc='',$date='',$m global $conf,$user; if (! is_object($objsoc)) $valueforccc=$objsoc; - else if ($table == "commande_fournisseur" || $table == "facture_fourn" ) $valueforccc=$objsoc->code_fournisseur; - else $valueforccc=$objsoc->code_client; + else if ($table == "commande_fournisseur" || $table == "facture_fourn" ) $valueforccc=dol_string_unaccent($objsoc->code_fournisseur); + else $valueforccc=dol_string_unaccent($objsoc->code_client); $sharetable = $table; if ($table == 'facture' || $table == 'invoice') $sharetable = 'invoicenumber'; // for getEntity function @@ -965,6 +965,7 @@ function get_next_value($db,$mask,$table,$field,$where='',$objsoc='',$date='',$m // Define $maskLike $maskLike = dol_string_nospecial($mask); $maskLike = str_replace("%","_",$maskLike); + // Replace protected special codes with matching number of _ as wild card caracter $maskLike = preg_replace('/\{yyyy\}/i','____',$maskLike); $maskLike = preg_replace('/\{yy\}/i','__',$maskLike); @@ -1140,7 +1141,7 @@ function get_next_value($db,$mask,$table,$field,$where='',$objsoc='',$date='',$m // Now we replace the refclient if ($maskrefclient) { - //print "maskrefclient=".$maskrefclient." maskwithonlyymcode=".$maskwithonlyymcode." maskwithnocode=".$maskwithnocode."\n
"; + //print "maskrefclient=".$maskrefclient." maskwithonlyymcode=".$maskwithonlyymcode." maskwithnocode=".$maskwithnocode." maskrefclient_clientcode=".$maskrefclient_clientcode."\n
";exit; $maskrefclient_maskbefore='{'.$maskrefclient.'}'; $maskrefclient_maskafter=$maskrefclient_clientcode.str_pad($maskrefclient_counter,dol_strlen($maskrefclient_maskcounter),"0",STR_PAD_LEFT); $numFinal = str_replace($maskrefclient_maskbefore,$maskrefclient_maskafter,$numFinal); From bcd5949bacffd3fdd722bc268e70d3556d5419e4 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 18 Jun 2019 21:39:30 +0200 Subject: [PATCH 038/133] Responsive on project index --- htdocs/projet/index.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/projet/index.php b/htdocs/projet/index.php index fa77cb4b52c..38ef7ee7cf2 100644 --- a/htdocs/projet/index.php +++ b/htdocs/projet/index.php @@ -179,6 +179,7 @@ $sql.= $db->plimit($max, 0); $resql=$db->query($sql); if ($resql) { + print '
'; print ''; print ''; print ''; @@ -242,7 +243,7 @@ if ($resql) $i++; } } - print "
'.$langs->trans("LatestModifiedProjects", $max).'

"; + print "

"; } else dol_print_error($db); From 30fb89ad5e55b520588327de1bea36f93c6a8d03 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 18 Jun 2019 22:03:29 +0200 Subject: [PATCH 039/133] Responsive HRM index --- htdocs/hrm/index.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/hrm/index.php b/htdocs/hrm/index.php index 066a21ebad0..54a0837e1fe 100644 --- a/htdocs/hrm/index.php +++ b/htdocs/hrm/index.php @@ -134,6 +134,7 @@ if (! empty($conf->holiday->enabled)) { $user_id = $user->id; + print '
'; print ''; print ''; print ""; @@ -152,7 +153,7 @@ if (! empty($conf->holiday->enabled)) print ''; print ''; - print '
'.$langs->trans("Holidays").'

'; + print '

'; } elseif (! is_numeric($conf->global->HOLIDAY_HIDE_BALANCE)) { From c59de4989455dfc1e438908c4c6d2bc49950e261 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 18 Jun 2019 22:38:52 +0200 Subject: [PATCH 040/133] Translate rights --- htdocs/core/class/html.formaccounting.class.php | 2 +- htdocs/core/lib/accounting.lib.php | 2 +- htdocs/langs/en_US/admin.lang | 6 ++++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/html.formaccounting.class.php b/htdocs/core/class/html.formaccounting.class.php index 87b32902684..7d9e778ac41 100644 --- a/htdocs/core/class/html.formaccounting.class.php +++ b/htdocs/core/class/html.formaccounting.class.php @@ -21,7 +21,7 @@ /** * \file htdocs/core/class/html.formaccounting.class.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief File of class with all html predefined components */ require_once DOL_DOCUMENT_ROOT .'/core/class/html.form.class.php'; diff --git a/htdocs/core/lib/accounting.lib.php b/htdocs/core/lib/accounting.lib.php index 889d9da8a2c..e55083c4822 100644 --- a/htdocs/core/lib/accounting.lib.php +++ b/htdocs/core/lib/accounting.lib.php @@ -19,7 +19,7 @@ /** * \file htdocs/core/lib/accounting.lib.php - * \ingroup Advanced accountancy + * \ingroup Accountancy (Double entries) * \brief Library of accountancy functions */ diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 5fc1994247c..5f69be03dba 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -885,6 +885,12 @@ Permission2802=Use FTP client in write mode (delete or upload files) Permission50101=Use Point of Sale Permission50201=Read transactions Permission50202=Import transactions +Permission50401=Bind products and invoices with accounting accounts +Permission50411=Read operations in ledger +Permission50412=Write/Edit operations in ledger +Permission50420=Report and export reports (turnover, balance, journals, ledger) +Permission50430=Define and close a fiscal year +Permission50440=Manage chart of accounts, setup of accountancy Permission54001=Print Permission55001=Read polls Permission55002=Create/modify polls From ce375440884d31c60a60e80e422870a966c8b47d Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 18 Jun 2019 22:41:18 +0200 Subject: [PATCH 041/133] Translate rights --- htdocs/langs/en_US/admin.lang | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 5f69be03dba..f26088f747c 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -804,6 +804,7 @@ Permission401=Read discounts Permission402=Create/modify discounts Permission403=Validate discounts Permission404=Delete discounts +Permission430=Use Debug Bar Permission511=Read payments of salaries Permission512=Create/modify payments of salaries Permission514=Delete payments of salaries From 4de0a57f5cc435afb5c1192e55bac6cf5753dff1 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 18 Jun 2019 22:44:43 +0200 Subject: [PATCH 042/133] Translate rights --- htdocs/langs/en_US/admin.lang | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index f26088f747c..56a8381021e 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -883,6 +883,10 @@ Permission2503=Submit or delete documents Permission2515=Setup documents directories Permission2801=Use FTP client in read mode (browse and download only) Permission2802=Use FTP client in write mode (delete or upload files) +Permission10001=Read website content +Permission10002=Create/modify website content (html and javascript content) +Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. +Permission10005=Delete website content Permission50101=Use Point of Sale Permission50201=Read transactions Permission50202=Import transactions From a0ae1e96a374e4e243b73f6b4f53757b49da3d5f Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 18 Jun 2019 22:52:37 +0200 Subject: [PATCH 043/133] Translate rights --- htdocs/langs/en_US/admin.lang | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 56a8381021e..cfc244b0fe0 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -838,6 +838,12 @@ Permission1101=Read delivery orders Permission1102=Create/modify delivery orders Permission1104=Validate delivery orders Permission1109=Delete delivery orders +Permission1121=Read supplier proposals +Permission1122=Create/modify supplier proposals +Permission1123=Validate supplier proposals +Permission1124=Send supplier proposals +Permission1125=Delete supplier proposals +Permission1126=Close supplier price requests Permission1181=Read suppliers Permission1182=Read purchase orders Permission1183=Create/modify purchase orders From 42b03ec85893b0083161abcafa33b7082e118209 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 18 Jun 2019 22:53:50 +0200 Subject: [PATCH 044/133] Translate rights --- htdocs/langs/en_US/admin.lang | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index cfc244b0fe0..60a80bb15bc 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -902,6 +902,10 @@ Permission50412=Write/Edit operations in ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) Permission50430=Define and close a fiscal year Permission50440=Manage chart of accounts, setup of accountancy +Permission51001=Read assets +Permission51002=Create/Update assets +Permission51003=Delete assets +Permission51005=Setup types of asset Permission54001=Print Permission55001=Read polls Permission55002=Create/modify polls From e1c476e744da16429c72e99b80263e844b0818dc Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 05:48:04 +0200 Subject: [PATCH 045/133] Translate rights --- htdocs/langs/en_US/admin.lang | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 60a80bb15bc..0c4d7de3962 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -819,6 +819,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services +Permission650=Read bom of Bom +Permission651=Create/Update bom of Bom +Permission652=Delete bom of Bom Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations From 9234a5446872983f6cfa4bf01f46234c1b17a445 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 05:49:23 +0200 Subject: [PATCH 046/133] Translate rights --- htdocs/langs/en_US/admin.lang | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 0c4d7de3962..820fac9e2d4 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -892,6 +892,7 @@ Permission2503=Submit or delete documents Permission2515=Setup documents directories Permission2801=Use FTP client in read mode (browse and download only) Permission2802=Use FTP client in write mode (delete or upload files) +Permission3200=Read archived events and fingerprints Permission10001=Read website content Permission10002=Create/modify website content (html and javascript content) Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. From f91c40a45c2907c9cd927330b9e58b8f4f8466c3 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 06:00:11 +0200 Subject: [PATCH 047/133] Translate rights --- htdocs/langs/en_US/admin.lang | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 820fac9e2d4..c135fe86206 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -869,16 +869,6 @@ Permission1251=Run mass imports of external data into database (data load) Permission1321=Export customer invoices, attributes and payments Permission1322=Reopen a paid bill Permission1421=Export sales orders and attributes -Permission20001=Read leave requests (your leave and those of your subordinates) -Permission20002=Create/modify your leave requests (your leave and those of your subordinates) -Permission20003=Delete leave requests -Permission20004=Read all leave requests (even of user not subordinates) -Permission20005=Create/modify leave requests for everybody (even of user not subordinates) -Permission20006=Admin leave requests (setup and update balance) -Permission23001=Read Scheduled job -Permission23002=Create/update Scheduled job -Permission23003=Delete Scheduled job -Permission23004=Execute Scheduled job Permission2401=Read actions (events or tasks) linked to his account Permission2402=Create/modify actions (events or tasks) linked to his account Permission2403=Delete actions (events or tasks) linked to his account @@ -893,10 +883,24 @@ Permission2515=Setup documents directories Permission2801=Use FTP client in read mode (browse and download only) Permission2802=Use FTP client in write mode (delete or upload files) Permission3200=Read archived events and fingerprints +Permission4001=See employees +Permission4002=Create employees +Permission4003=Delete employees +Permission4004=Export employees Permission10001=Read website content Permission10002=Create/modify website content (html and javascript content) Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. Permission10005=Delete website content +Permission20001=Read leave requests (your leave and those of your subordinates) +Permission20002=Create/modify your leave requests (your leave and those of your subordinates) +Permission20003=Delete leave requests +Permission20004=Read all leave requests (even of user not subordinates) +Permission20005=Create/modify leave requests for everybody (even of user not subordinates) +Permission20006=Admin leave requests (setup and update balance) +Permission23001=Read Scheduled job +Permission23002=Create/update Scheduled job +Permission23003=Delete Scheduled job +Permission23004=Execute Scheduled job Permission50101=Use Point of Sale Permission50201=Read transactions Permission50202=Import transactions From 13836d3e219514d5aaf84c1287fd9835c65d0634 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 06:21:53 +0200 Subject: [PATCH 048/133] Missing language ley --- htdocs/core/modules/modSalaries.class.php | 2 +- htdocs/langs/en_US/salaries.lang | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/core/modules/modSalaries.class.php b/htdocs/core/modules/modSalaries.class.php index e111e81ef6b..ed3aec4a48b 100644 --- a/htdocs/core/modules/modSalaries.class.php +++ b/htdocs/core/modules/modSalaries.class.php @@ -144,7 +144,7 @@ class modSalaries extends DolibarrModules $r++; $this->export_code[$r]=$this->rights_class.'_'.$r; - $this->export_label[$r]='Salaries and payments'; + $this->export_label[$r]='SalariesAndPayments'; $this->export_permission[$r]=array(array("salaries","export")); $this->export_fields_array[$r]=array('u.firstname'=>"Firstname",'u.lastname'=>"Lastname",'u.login'=>"Login",'u.salary'=>'CurrentSalary','p.datep'=>'DatePayment','p.datesp'=>'DateStartPeriod','p.dateep'=>'DateEndPeriod','p.amount'=>'AmountPayment','p.num_payment'=>'Numero','p.label'=>'Label','p.note'=>'Note'); $this->export_TypeFields_array[$r]=array('u.firstname'=>"Text",'u.lastname'=>"Text",'u.login'=>'Text','u.salary'=>"Numeric",'p.datep'=>'Date','p.datesp'=>'Date','p.dateep'=>'Date','p.amount'=>'Numeric','p.num_payment'=>'Numeric','p.label'=>'Text'); diff --git a/htdocs/langs/en_US/salaries.lang b/htdocs/langs/en_US/salaries.lang index 1e3607ce7cc..7c3c08a65bd 100644 --- a/htdocs/langs/en_US/salaries.lang +++ b/htdocs/langs/en_US/salaries.lang @@ -17,3 +17,5 @@ TJMDescription=This value is currently for information only and is not used for LastSalaries=Latest %s salary payments AllSalaries=All salary payments SalariesStatistics=Salary statistics +# Export +SalariesAndPayments=Salaries and payments From ffbb14f40ef59410e0a01efcf7f51af2fbfbe1c6 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 06:28:22 +0200 Subject: [PATCH 049/133] Missing language key --- htdocs/langs/en_US/website.lang | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index 43f82e9f1fb..2683c9a90eb 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -100,4 +100,6 @@ DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contai NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. ReplaceWebsiteContent=Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? -DeleteAlsoMedias=Delete also all medias files specific to this website? \ No newline at end of file +DeleteAlsoMedias=Delete also all medias files specific to this website? +# Export +MyWebsitePages=My website pages \ No newline at end of file From a849fbe42e812929ac43c6e90b40c506d03ac8bc Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 07:15:52 +0200 Subject: [PATCH 050/133] Nowrap on amount --- 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..1318dbd4e2d 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -293,9 +293,9 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) }else print ""; } print "".$refcomp.""; - if ($obj->total_ttc < 0) { print "".price(abs($total_ttc))." "; }; - if ($obj->total_ttc >= 0) { print " ".price($total_ttc).""; }; - print ''.price($solde).''; + if ($obj->total_ttc < 0) { print "".price(abs($total_ttc))." "; }; + if ($obj->total_ttc >= 0) { print " ".price($total_ttc).""; }; + print ''.price($solde).''; print ""; } From 9a32117b1d172f6a5e31cf086639be9e5c2cd286 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 08:43:57 +0200 Subject: [PATCH 051/133] Nowrap on amount --- htdocs/compta/resultat/index.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/resultat/index.php b/htdocs/compta/resultat/index.php index addc56a240b..70129e80403 100644 --- a/htdocs/compta/resultat/index.php +++ b/htdocs/compta/resultat/index.php @@ -943,7 +943,7 @@ for ($mois = 1+$nb_mois_decalage ; $mois <= 12+$nb_mois_decalage ; $mois++) } print ""; - print ' '; + print ' '; if ($modecompta == 'BOOKKEEPING') { if (isset($encaiss[$case])) @@ -978,8 +978,8 @@ print ''; for ($annee = $year_start ; $annee <= $year_end ; $annee++) { $nbcols+=2; - print ''.(isset($totsorties[$annee])?price(price2num($totsorties[$annee], 'MT')):' ').''; - print ''.(isset($totentrees[$annee])?price(price2num($totentrees[$annee], 'MT')):' ').''; + print ''.(isset($totsorties[$annee])?price(price2num($totsorties[$annee], 'MT')):' ').''; + print ''.(isset($totentrees[$annee])?price(price2num($totentrees[$annee], 'MT')):' ').''; } print "\n"; From b8311da26212e95c0a727e542dc2a7e60c8cbc5b Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 08:56:45 +0200 Subject: [PATCH 052/133] Nowrap on amount --- htdocs/accountancy/customer/index.php | 20 ++++++++++---------- htdocs/accountancy/customer/lines.php | 2 +- htdocs/accountancy/customer/list.php | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/htdocs/accountancy/customer/index.php b/htdocs/accountancy/customer/index.php index 0131f51d515..f063f832f54 100644 --- a/htdocs/accountancy/customer/index.php +++ b/htdocs/accountancy/customer/index.php @@ -211,10 +211,10 @@ if ($resql) { else print $row[1]; print ''; for($i = 2; $i <= 12; $i ++) { - print '' . price($row[$i]) . ''; + print '' . price($row[$i]) . ''; } - print '' . price($row[13]) . ''; - print '' . price($row[14]) . ''; + print '' . price($row[13]) . ''; + print '' . price($row[14]) . ''; print ''; } $db->free($resql); @@ -289,10 +289,10 @@ if ($resql) { print ''; for($i = 2; $i <= 12; $i++) { - print '' . price($row[$i]) . ''; + print '' . price($row[$i]) . ''; } - print '' . price($row[13]) . ''; - print '' . price($row[14]) . ''; + print '' . price($row[13]) . ''; + print '' . price($row[14]) . ''; print ''; } $db->free($resql); @@ -348,9 +348,9 @@ if ($conf->global->MAIN_FEATURES_LEVEL > 0) // This part of code looks strange. while ($row = $db->fetch_row($resql)) { print '' . $row[0] . ''; for($i = 1; $i <= 12; $i ++) { - print '' . price($row[$i]) . ''; + print '' . price($row[$i]) . ''; } - print '' . price($row[13]) . ''; + print '' . price($row[13]) . ''; print ''; } $db->free($resql); @@ -401,9 +401,9 @@ if ($conf->global->MAIN_FEATURES_LEVEL > 0) // This part of code looks strange. print '' . $row[0] . ''; for($i = 1; $i <= 12; $i ++) { - print '' . price(price2num($row[$i])) . ''; + print '' . price(price2num($row[$i])) . ''; } - print '' . price(price2num($row[13])) . ''; + print '' . price(price2num($row[13])) . ''; print ''; } $db->free($resql); diff --git a/htdocs/accountancy/customer/lines.php b/htdocs/accountancy/customer/lines.php index 19e85cdb651..ea174638a2a 100644 --- a/htdocs/accountancy/customer/lines.php +++ b/htdocs/accountancy/customer/lines.php @@ -385,7 +385,7 @@ if ($result) { print $form->textwithtooltip(dol_trunc($text, $trunclength), $objp->description); print ''; - print '' . price($objp->total_ht) . ''; + print '' . price($objp->total_ht) . ''; print '' . vatrate($objp->tva_tx.($objp->vat_src_code?' ('.$objp->vat_src_code.')':'')) . ''; diff --git a/htdocs/accountancy/customer/list.php b/htdocs/accountancy/customer/list.php index ed1c40a6ad7..5314099db1f 100644 --- a/htdocs/accountancy/customer/list.php +++ b/htdocs/accountancy/customer/list.php @@ -503,7 +503,7 @@ if ($result) { print $form->textwithtooltip(dol_trunc($text, $trunclength), $objp->description); print ''; - print ''; + print ''; print price($objp->total_ht); print ''; From ec7523d3d2906975fab9e1cf662ff3eae3c074ee Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 09:01:37 +0200 Subject: [PATCH 053/133] Nowrap on amount --- htdocs/accountancy/expensereport/index.php | 16 ++++++++-------- htdocs/accountancy/supplier/index.php | 16 ++++++++-------- htdocs/accountancy/supplier/lines.php | 2 +- htdocs/accountancy/supplier/list.php | 2 +- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/htdocs/accountancy/expensereport/index.php b/htdocs/accountancy/expensereport/index.php index a5026f920a0..4fe2ee3120b 100644 --- a/htdocs/accountancy/expensereport/index.php +++ b/htdocs/accountancy/expensereport/index.php @@ -203,10 +203,10 @@ if ($resql) { else print $row[1]; print ''; for($i = 2; $i <= 12; $i ++) { - print '' . price($row[$i]) . ''; + print '' . price($row[$i]) . ''; } - print '' . price($row[13]) . ''; - print '' . price($row[14]) . ''; + print '' . price($row[13]) . ''; + print '' . price($row[14]) . ''; print ''; } $db->free($resql); @@ -276,10 +276,10 @@ if ($resql) { else print $row[1]; print ''; for($i = 2; $i <= 12; $i ++) { - print '' . price($row[$i]) . ''; + print '' . price($row[$i]) . ''; } - print '' . price($row[13]) . ''; - print '' . price($row[14]) . ''; + print '' . price($row[13]) . ''; + print '' . price($row[14]) . ''; print ''; } $db->free($resql); @@ -331,9 +331,9 @@ if ($conf->global->MAIN_FEATURES_LEVEL > 0) // This part of code looks strange. while ($row = $db->fetch_row($resql)) { print '' . $row[0] . ''; for($i = 1; $i <= 12; $i ++) { - print '' . price($row[$i]) . ''; + print '' . price($row[$i]) . ''; } - print '' . price($row[13]) . ''; + print '' . price($row[13]) . ''; print ''; } diff --git a/htdocs/accountancy/supplier/index.php b/htdocs/accountancy/supplier/index.php index ca60735fcf0..bc632118da7 100644 --- a/htdocs/accountancy/supplier/index.php +++ b/htdocs/accountancy/supplier/index.php @@ -203,10 +203,10 @@ if ($resql) { else print $row[1]; print ''; for($i = 2; $i <= 12; $i ++) { - print '' . price($row[$i]) . ''; + print '' . price($row[$i]) . ''; } - print '' . price($row[13]) . ''; - print '' . price($row[14]) . ''; + print '' . price($row[13]) . ''; + print '' . price($row[14]) . ''; print ''; } $db->free($resql); @@ -274,10 +274,10 @@ if ($resql) { else print $row[1]; print ''; for($i = 2; $i <= 12; $i++) { - print '' . price($row[$i]) . ''; + print '' . price($row[$i]) . ''; } - print '' . price($row[13]) . ''; - print '' . price($row[14]) . ''; + print '' . price($row[13]) . ''; + print '' . price($row[14]) . ''; print ''; } $db->free($resql); @@ -329,9 +329,9 @@ if ($conf->global->MAIN_FEATURES_LEVEL > 0) // This part of code looks strange. while ($row = $db->fetch_row($resql)) { print '' . $row[0] . ''; for($i = 1; $i <= 12; $i ++) { - print '' . price($row[$i]) . ''; + print '' . price($row[$i]) . ''; } - print '' . price($row[13]) . ''; + print '' . price($row[13]) . ''; print ''; } $db->free($resql); diff --git a/htdocs/accountancy/supplier/lines.php b/htdocs/accountancy/supplier/lines.php index 352a73200fb..a67386f6fbd 100644 --- a/htdocs/accountancy/supplier/lines.php +++ b/htdocs/accountancy/supplier/lines.php @@ -396,7 +396,7 @@ if ($result) { print $form->textwithtooltip(dol_trunc($text, $trunclength), $objp->description); print ''; - print '' . price($objp->total_ht) . ''; + print '' . price($objp->total_ht) . ''; print '' . vatrate($objp->tva_tx.($objp->vat_src_code?' ('.$objp->vat_src_code.')':'')) . ''; diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index fc8cc10fec4..17284513650 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -491,7 +491,7 @@ if ($result) { print $form->textwithtooltip(dol_trunc($text, $trunclength), $objp->description); print ''; - print ''; + print ''; print price($objp->total_ht); print ''; From e44b9113b7410a71ca423c1830f05c4ca3208d98 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 09:01:57 +0200 Subject: [PATCH 054/133] Nowrap on amount --- htdocs/accountancy/expensereport/lines.php | 2 +- htdocs/accountancy/expensereport/list.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/accountancy/expensereport/lines.php b/htdocs/accountancy/expensereport/lines.php index 508dfb7136e..d15ef52ad39 100644 --- a/htdocs/accountancy/expensereport/lines.php +++ b/htdocs/accountancy/expensereport/lines.php @@ -319,7 +319,7 @@ if ($result) { print $form->textwithtooltip(dol_trunc($text, $trunclength), $objp->comments); print ''; - print '' . price($objp->total_ht) . ''; + print '' . price($objp->total_ht) . ''; print '' . vatrate($objp->tva_tx.($objp->vat_src_code?' ('.$objp->vat_src_code.')':'')) . ''; diff --git a/htdocs/accountancy/expensereport/list.php b/htdocs/accountancy/expensereport/list.php index 9f70d175d40..60b24638775 100644 --- a/htdocs/accountancy/expensereport/list.php +++ b/htdocs/accountancy/expensereport/list.php @@ -376,7 +376,7 @@ if ($result) { print $form->textwithtooltip(dol_trunc($text, $trunclength), $objp->comments); print ''; - print ''; + print ''; print price($objp->price); print ''; From b6bd4119d9a9f02b00d12b551b43fc600b893452 Mon Sep 17 00:00:00 2001 From: Nicolas ZABOURI Date: Wed, 19 Jun 2019 09:12:01 +0200 Subject: [PATCH 055/133] FIX travis Public underscore in load_ldap_info --- htdocs/adherents/class/adherent.class.php | 4 +++- htdocs/contact/class/contact.class.php | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 1856de6182f..cda3a461027 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -11,6 +11,7 @@ * Copyright (C) 2015 Raphaël Doursenaud * Copyright (C) 2016 Juanjo Menent * Copyright (C) 2018-2019 Thibault FOUCART + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -2460,7 +2461,8 @@ class Adherent extends CommonObject // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps - /** + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore + /** * Initialise tableau info (tableau des attributs LDAP) * * @return array Tableau info des attributs diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index 5c4df6ab3f9..ca58882b224 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -9,6 +9,7 @@ * Copyright (C) 2013 Alexandre Spangaro * Copyright (C) 2013 Juanjo Menent * Copyright (C) 2015 Marcos García + * Copyright (C) 2019 Nicolas ZABOURI * * 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 @@ -520,6 +521,7 @@ class Contact extends CommonObject // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Initialise tableau info (tableau des attributs LDAP) * From 9bde7c5229fc3584af4853e4f9707dd7751b238f Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 09:21:18 +0200 Subject: [PATCH 056/133] Nowrap on amount --- htdocs/core/boxes/box_activity.php | 2 +- htdocs/core/boxes/box_commandes.php | 2 +- htdocs/core/boxes/box_factures_fourn_imp.php | 2 +- htdocs/core/boxes/box_factures_imp.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/boxes/box_activity.php b/htdocs/core/boxes/box_activity.php index 300040639a8..995ba93fb64 100644 --- a/htdocs/core/boxes/box_activity.php +++ b/htdocs/core/boxes/box_activity.php @@ -422,7 +422,7 @@ class box_activity extends ModeleBoxes ); $totalnb += $data[$j]->nb; $this->info_box_contents[$line][3] = array( - 'td' => 'class="right"', + 'td' => 'class="nowrap right"', 'text' => price($data[$j]->Mnttot, 1, $langs, 0, 0, -1, $conf->currency), ); $this->info_box_contents[$line][4] = array( diff --git a/htdocs/core/boxes/box_commandes.php b/htdocs/core/boxes/box_commandes.php index 8575e739946..956e73b4acf 100644 --- a/htdocs/core/boxes/box_commandes.php +++ b/htdocs/core/boxes/box_commandes.php @@ -146,7 +146,7 @@ class box_commandes extends ModeleBoxes ); $this->info_box_contents[$line][] = array( - 'td' => 'class="right"', + 'td' => 'class="nowrap right"', 'text' => price($objp->total_ht, 0, $langs, 0, -1, -1, $conf->currency), ); diff --git a/htdocs/core/boxes/box_factures_fourn_imp.php b/htdocs/core/boxes/box_factures_fourn_imp.php index 09de3b874e3..74f8cbc6b64 100644 --- a/htdocs/core/boxes/box_factures_fourn_imp.php +++ b/htdocs/core/boxes/box_factures_fourn_imp.php @@ -151,7 +151,7 @@ class box_factures_fourn_imp extends ModeleBoxes ); $this->info_box_contents[$line][] = array( - 'td' => 'class="right"', + 'td' => 'class="nowrap right"', 'text' => price($objp->total_ht, 0, $langs, 0, -1, -1, $conf->currency), ); diff --git a/htdocs/core/boxes/box_factures_imp.php b/htdocs/core/boxes/box_factures_imp.php index fd85f136f96..a0692c791b2 100644 --- a/htdocs/core/boxes/box_factures_imp.php +++ b/htdocs/core/boxes/box_factures_imp.php @@ -161,7 +161,7 @@ class box_factures_imp extends ModeleBoxes ); $this->info_box_contents[$line][] = array( - 'td' => 'class="right"', + 'td' => 'class="nowrap right"', 'text' => price($objp->total_ht, 0, $langs, 0, -1, -1, $conf->currency), ); From 7331e43db8e12ac4ee3ae0f2602c39053a1eb696 Mon Sep 17 00:00:00 2001 From: gauthier Date: Wed, 19 Jun 2019 10:19:33 +0200 Subject: [PATCH 057/133] FIX : we need to fetch fourn invoice with ref in current entity --- htdocs/fourn/class/fournisseur.facture.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 3a27690e7ac..d7ded8546f1 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -504,7 +504,7 @@ class FactureFournisseur extends CommonInvoice */ public function fetch($id='',$ref='') { - global $langs; + global $langs, $conf; $sql = "SELECT"; $sql.= " t.rowid,"; @@ -555,7 +555,7 @@ class FactureFournisseur extends CommonInvoice $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_paiement as p ON t.fk_mode_reglement = p.id"; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_incoterms as i ON t.fk_incoterms = i.rowid'; if ($id) $sql.= " WHERE t.rowid=".$id; - if ($ref) $sql.= " WHERE t.ref='".$this->db->escape($ref)."'"; + if ($ref) $sql.= " WHERE t.ref='".$this->db->escape($ref)."' AND t.entity = ".$conf->entity; dol_syslog(get_class($this)."::fetch", LOG_DEBUG); $resql=$this->db->query($sql); From 3ad13adf31d6925760587c685f79bd6e694e90fd Mon Sep 17 00:00:00 2001 From: gauthier Date: Wed, 19 Jun 2019 10:43:42 +0200 Subject: [PATCH 058/133] FIX : better syntax --- htdocs/fourn/class/fournisseur.facture.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index d7ded8546f1..4f9cd93021f 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -504,7 +504,7 @@ class FactureFournisseur extends CommonInvoice */ public function fetch($id='',$ref='') { - global $langs, $conf; + global $langs; $sql = "SELECT"; $sql.= " t.rowid,"; @@ -555,7 +555,7 @@ class FactureFournisseur extends CommonInvoice $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_paiement as p ON t.fk_mode_reglement = p.id"; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_incoterms as i ON t.fk_incoterms = i.rowid'; if ($id) $sql.= " WHERE t.rowid=".$id; - if ($ref) $sql.= " WHERE t.ref='".$this->db->escape($ref)."' AND t.entity = ".$conf->entity; + if ($ref) $sql.= " WHERE t.ref='".$this->db->escape($ref)."' AND t.entity IN (".getEntity('supplier_invoice').")"; dol_syslog(get_class($this)."::fetch", LOG_DEBUG); $resql=$this->db->query($sql); From c109eebe383f240b4340732d5457e26a3f9e0384 Mon Sep 17 00:00:00 2001 From: Abbes Bahfir Date: Wed, 19 Jun 2019 14:42:56 +0100 Subject: [PATCH 059/133] New:Show c_country elements in modulebuilder --- htdocs/core/class/ccountry.class.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/ccountry.class.php b/htdocs/core/class/ccountry.class.php index a97d992bf89..5e744fbdb73 100644 --- a/htdocs/core/class/ccountry.class.php +++ b/htdocs/core/class/ccountry.class.php @@ -47,8 +47,8 @@ class Ccountry // extends CommonObject */ public $errors = array(); - //var $element='ccountry'; //!< Id that identify managed objects - //var $table_element='ccountry'; //!< Name of table without prefix where object is stored + var $element='ccountry'; //!< Id that identify managed objects + var $table_element='c_country'; //!< Name of table without prefix where object is stored /** * @var int ID @@ -65,7 +65,8 @@ class Ccountry // extends CommonObject public $active; - + public $fields=array( + 'label' => array('type'=>'varchar(250)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>15, 'notnull'=>-1, 'showoncombobox'=>'1',)); /** From 5b5028254f8d33215d96c60fdb83a9c526de1f3f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 19 Jun 2019 16:30:03 +0200 Subject: [PATCH 060/133] Fix label --- htdocs/langs/en_US/accountancy.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index 449a30acbbb..91234f72aef 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -291,7 +291,7 @@ Modelcsv_cogilog=Export for Cogilog Modelcsv_agiris=Export for Agiris Modelcsv_openconcerto=Export for OpenConcerto (Test) Modelcsv_configurable=Export CSV Configurable -Modelcsv_FEC=Export FEC (Art. L47 A) +Modelcsv_FEC=Export FEC Modelcsv_Sage50_Swiss=Export for Sage 50 Switzerland ChartofaccountsId=Chart of accounts Id From 7c4cddf28d3aacf718d226078b3d23dfcb78fc07 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 19 Jun 2019 16:34:01 +0200 Subject: [PATCH 061/133] Fix missing trad --- htdocs/langs/en_US/accountancy.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index 91234f72aef..7797fdef7b1 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -336,7 +336,7 @@ UseMenuToSetBindindManualy=Lines not yet bound, use menu %s to ## Import ImportAccountingEntries=Accounting entries - +DateExport=Date export WarningReportNotReliable=Warning, this report is not based on the Ledger, so does not contains transaction modified manually in the Ledger. If your journalization is up to date, the bookkeeping view is more accurate. ExpenseReportJournal=Expense Report Journal InventoryJournal=Inventory Journal From 31a53b72aec1bcd2b6524e17bd922a8eda05f028 Mon Sep 17 00:00:00 2001 From: John Botella Date: Wed, 19 Jun 2019 16:55:45 +0200 Subject: [PATCH 062/133] FIX var name --- htdocs/core/actions_massactions.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 34ba465ebff..07766ac7fef 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -209,7 +209,7 @@ if (! $error && $massaction == 'confirm_presend') $resaction.='
'.$langs->trans('ErrorOnlyProposalNotDraftCanBeSentInMassAction',$objectobj->ref).'

'; continue; // Payment done or started or canceled } - if ($objectclass == 'Commande' && $objectoj->statut == Commande::STATUS_DRAFT) + if ($objectclass == 'Commande' && $objectobj->statut == Commande::STATUS_DRAFT) { $langs->load("errors"); $nbignored++; From 47c2f6fac4be2b9a56854d0df42e4182622f1647 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 19 Jun 2019 21:35:35 +0200 Subject: [PATCH 063/133] NEW Add column VAT rate in product list --- htdocs/product/list.php | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 7677e82e1b4..5e348c2fe70 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -56,6 +56,7 @@ $search_barcode=GETPOST("search_barcode", 'alpha'); $search_label=GETPOST("search_label", 'alpha'); $search_type = GETPOST("search_type", 'int'); $search_sale = GETPOST("search_sale", 'int'); +$search_vatrate=GETPOST("search_vatrate", 'alpha'); $search_categ = GETPOST("search_categ", 'int'); $search_tosell = GETPOST("search_tosell", 'int'); $search_tobuy = GETPOST("search_tobuy", 'int'); @@ -174,7 +175,8 @@ $arrayfields=array( 'p.sellprice'=>array('label'=>$langs->trans("SellingPrice"), 'checked'=>1, 'enabled'=>empty($conf->global->PRODUIT_MULTIPRICES)), 'p.minbuyprice'=>array('label'=>$langs->trans("BuyingPriceMinShort"), 'checked'=>1, 'enabled'=>(! empty($user->rights->fournisseur->lire))), 'p.numbuyprice'=>array('label'=>$langs->trans("BuyingPriceNumShort"), 'checked'=>0, 'enabled'=>(! empty($user->rights->fournisseur->lire))), - 'p.pmp'=>array('label'=>$langs->trans("PMPValueShort"), 'checked'=>0, 'enabled'=>(! empty($user->rights->fournisseur->lire))), + 'p.tva_tx'=>array('label'=>$langs->trans("VATRate"), 'checked'=>0, 'enabled'=>(! empty($user->rights->fournisseur->lire))), + 'p.pmp'=>array('label'=>$langs->trans("PMPValueShort"), 'checked'=>0, 'enabled'=>(! empty($user->rights->fournisseur->lire))), 'p.seuil_stock_alerte'=>array('label'=>$langs->trans("StockLimit"), 'checked'=>0, 'enabled'=>(! empty($conf->stock->enabled) && $user->rights->stock->lire && $contextpage != 'service')), 'p.desiredstock'=>array('label'=>$langs->trans("DesiredStock"), 'checked'=>1, 'enabled'=>(! empty($conf->stock->enabled) && $user->rights->stock->lire && $contextpage != 'service')), 'p.stock'=>array('label'=>$langs->trans("PhysicalStock"), 'checked'=>1, 'enabled'=>(! empty($conf->stock->enabled) && $user->rights->stock->lire && $contextpage != 'service')), @@ -229,6 +231,7 @@ if (empty($reshook)) $search_categ=0; $search_tosell=""; $search_tobuy=""; + $search_vatrate=""; $search_tobatch=''; //$search_type=''; // There is 2 types of list: a list of product and a list of services. No list with both. So when we clear search criteria, we must keep the filter on type. @@ -276,7 +279,7 @@ else $texte = $langs->trans("ProductsAndServices"); } -$sql = 'SELECT DISTINCT p.rowid, p.ref, p.label, p.fk_product_type, p.barcode, p.price, p.price_ttc, p.price_base_type, p.entity,'; +$sql = 'SELECT DISTINCT p.rowid, p.ref, p.label, p.fk_product_type, p.barcode, p.price, p.tva_tx, p.price_ttc, p.price_base_type, p.entity,'; $sql.= ' p.fk_product_type, p.duration, p.tosell, p.tobuy, p.seuil_stock_alerte, p.desiredstock,'; $sql.= ' p.tobatch, p.accountancy_code_sell, p.accountancy_code_sell_intra, p.accountancy_code_sell_export, p.accountancy_code_buy,'; $sql.= ' p.datec as date_creation, p.tms as date_update, p.pmp, p.stock,'; @@ -323,6 +326,7 @@ if ($search_label) $sql .= natural_search('p.label', $search_label); if ($search_barcode) $sql .= natural_search('p.barcode', $search_barcode); if (isset($search_tosell) && dol_strlen($search_tosell) > 0 && $search_tosell!=-1) $sql.= " AND p.tosell = ".$db->escape($search_tosell); if (isset($search_tobuy) && dol_strlen($search_tobuy) > 0 && $search_tobuy!=-1) $sql.= " AND p.tobuy = ".$db->escape($search_tobuy); +if ($search_vatrate) $sql .= natural_search('p.tva_tx', $search_vatrate); if (dol_strlen($canvas) > 0) $sql.= " AND p.canvas = '".$db->escape($canvas)."'"; if ($catid > 0) $sql.= " AND cp.fk_categorie = ".$catid; if ($catid == -2) $sql.= " AND cp.fk_categorie IS NULL"; @@ -341,7 +345,7 @@ include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListWhere', $parameters); // Note that $action and $object may have been modified by hook $sql.=$hookmanager->resPrint; -$sql.= " GROUP BY p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type,"; +$sql.= " GROUP BY p.rowid, p.ref, p.label, p.barcode, p.price, p.tva_tx, p.price_ttc, p.price_base_type,"; $sql.= " p.fk_product_type, p.duration, p.tosell, p.tobuy, p.seuil_stock_alerte, p.desiredstock,"; $sql.= ' p.datec, p.tms, p.entity, p.tobatch, p.accountancy_code_sell, p.accountancy_code_sell_intra, p.accountancy_code_sell_export, p.accountancy_code_buy, p.pmp, p.stock,'; $sql.= ' p.weight, p.weight_units, p.length, p.length_units, p.surface, p.surface_units, p.volume, p.volume_units, p.width, p.width_units, p.height, p.height_units'; @@ -421,6 +425,7 @@ if ($resql) if ($search_label) $param.="&search_label=".urlencode($search_label); if ($search_tosell != '') $param.="&search_tosell=".urlencode($search_tosell); if ($search_tobuy != '') $param.="&search_tobuy=".urlencode($search_tobuy); + if ($search_vatrate) $sql .= natural_search('p.tva_tx', $search_vatrate); if ($fourn_id > 0) $param.=($fourn_id?"&fourn_id=".$fourn_id:""); if ($seach_categ) $param.=($search_categ?"&search_categ=".urlencode($search_categ):""); if ($show_childproducts) $param.=($show_childproducts?"&search_show_childproducts=".urlencode($show_childproducts):""); @@ -613,6 +618,13 @@ if ($resql) print ' '; print ''; } + // Sell price + if (! empty($arrayfields['p.tva_tx']['checked'])) + { + print ''; + print ''; + print ''; + } // WAP if (! empty($arrayfields['p.pmp']['checked'])) { @@ -715,6 +727,9 @@ if ($resql) if (! empty($arrayfields['p.numbuyprice']['checked'])) { print_liste_field_titre($arrayfields['p.numbuyprice']['label'], $_SERVER["PHP_SELF"], "", "", $param, '', $sortfield, $sortorder, 'right '); } + if (! empty($arrayfields['p.tva_tx']['checked'])) { + print_liste_field_titre($arrayfields['p.tva_tx']['label'], $_SERVER["PHP_SELF"], "", "", $param, '', $sortfield, $sortorder, 'right '); + } if (! empty($arrayfields['p.pmp']['checked'])) { print_liste_field_titre($arrayfields['p.pmp']['label'], $_SERVER["PHP_SELF"], "", "", $param, '', $sortfield, $sortorder, 'right '); } @@ -983,6 +998,15 @@ if ($resql) print ''; } + // Sell Tax Rate + if (! empty($arrayfields['p.tva_tx']['checked'])) + { + print ''; + print vatrate($obj->tva_tx,true); + print ''; + if (! $i) $totalarray['nbfield']++; + } + // WAP if (! empty($arrayfields['p.pmp']['checked'])) { From 68e9712f0c30e17b7c4a78bd593cb8a60ceaf33d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 19 Jun 2019 22:05:38 +0200 Subject: [PATCH 064/133] Fix support domains with 3 levels --- htdocs/core/lib/geturl.lib.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/geturl.lib.php b/htdocs/core/lib/geturl.lib.php index 714bc26b7da..83e483b3e97 100644 --- a/htdocs/core/lib/geturl.lib.php +++ b/htdocs/core/lib/geturl.lib.php @@ -172,14 +172,21 @@ function getURLContent($url, $postorget = 'GET', $param = '', $followlocation = * For example: https://www.abc.mydomain.com/dir/page.html return 'mydomain' * * @param string $url Full URL. - * @param int $mode 0=return 'mydomain', 1=return 'mydomain.com' + * @param int $mode 0=return 'mydomain', 1=return 'mydomain.com', 2=return 'abc.mydomain.com' * @return string Returns domaine name */ function getDomainFromURL($url, $mode = 0) { $tmpdomain = preg_replace('/^https?:\/\//i', '', $url); // Remove http(s):// $tmpdomain = preg_replace('/\/.*$/i', '', $tmpdomain); // Remove part after domain - $tmpdomain = preg_replace('/^.*\.([^\.]+)\.([^\.]+)$/', '\1.\2', $tmpdomain); // Remove part www.abc before domain name + if ($mode == 2) + { + $tmpdomain = preg_replace('/^.*\.([^\.]+)\.([^\.]+)\.([^\.]+)$/', '\1.\2.\3', $tmpdomain); // Remove part 'www.' before 'abc.mydomain.com' + } + else + { + $tmpdomain = preg_replace('/^.*\.([^\.]+)\.([^\.]+)$/', '\1.\2', $tmpdomain); // Remove part 'www.abc.' before 'mydomain.com' + } if (empty($mode)) { $tmpdomain = preg_replace('/\.[^\.]+$/', '', $tmpdomain); // Remove first level domain (.com, .net, ...) From d6b6f77e74beeab3cb41cbdbbd59b255e4c0614c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 19 Jun 2019 22:05:38 +0200 Subject: [PATCH 065/133] Fix support domains with 3 levels --- htdocs/core/lib/geturl.lib.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/geturl.lib.php b/htdocs/core/lib/geturl.lib.php index 714bc26b7da..83e483b3e97 100644 --- a/htdocs/core/lib/geturl.lib.php +++ b/htdocs/core/lib/geturl.lib.php @@ -172,14 +172,21 @@ function getURLContent($url, $postorget = 'GET', $param = '', $followlocation = * For example: https://www.abc.mydomain.com/dir/page.html return 'mydomain' * * @param string $url Full URL. - * @param int $mode 0=return 'mydomain', 1=return 'mydomain.com' + * @param int $mode 0=return 'mydomain', 1=return 'mydomain.com', 2=return 'abc.mydomain.com' * @return string Returns domaine name */ function getDomainFromURL($url, $mode = 0) { $tmpdomain = preg_replace('/^https?:\/\//i', '', $url); // Remove http(s):// $tmpdomain = preg_replace('/\/.*$/i', '', $tmpdomain); // Remove part after domain - $tmpdomain = preg_replace('/^.*\.([^\.]+)\.([^\.]+)$/', '\1.\2', $tmpdomain); // Remove part www.abc before domain name + if ($mode == 2) + { + $tmpdomain = preg_replace('/^.*\.([^\.]+)\.([^\.]+)\.([^\.]+)$/', '\1.\2.\3', $tmpdomain); // Remove part 'www.' before 'abc.mydomain.com' + } + else + { + $tmpdomain = preg_replace('/^.*\.([^\.]+)\.([^\.]+)$/', '\1.\2', $tmpdomain); // Remove part 'www.abc.' before 'mydomain.com' + } if (empty($mode)) { $tmpdomain = preg_replace('/\.[^\.]+$/', '', $tmpdomain); // Remove first level domain (.com, .net, ...) From bf71731fc945afdf66216daf3e37359813638d15 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 19 Jun 2019 22:28:33 +0200 Subject: [PATCH 066/133] Fix phpcs --- htdocs/adherents/class/adherent.class.php | 1 + htdocs/contact/class/contact.class.php | 1 + 2 files changed, 2 insertions(+) diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 1856de6182f..c1bb04d90fc 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -2460,6 +2460,7 @@ class Adherent extends CommonObject // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Initialise tableau info (tableau des attributs LDAP) * diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index 5c4df6ab3f9..de9494fca8b 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -520,6 +520,7 @@ class Contact extends CommonObject // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Initialise tableau info (tableau des attributs LDAP) * From b4e47d289b5bb183fcb845b236aa6615a62cc8ff Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 02:43:56 +0200 Subject: [PATCH 067/133] Code comment --- htdocs/user/class/user.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index a151fdb5574..8e52ba3028b 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -520,8 +520,8 @@ class User extends CommonObject * Add a right to the user * * @param int $rid Id of permission to add or 0 to add several permissions - * @param string $allmodule Add all permissions of module $allmodule - * @param string $allperms Add all permissions of module $allmodule, subperms $allperms only + * @param string $allmodule Add all permissions of module $allmodule or 'allmodules' to include all modules. + * @param string $allperms Add all permissions of module $allmodule, subperms $allperms only or '' to include all permissions. * @param int $entity Entity to use * @param int $notrigger 1=Does not execute triggers, 0=Execute triggers * @return int > 0 if OK, < 0 if KO From e060af5c977b9a37cf6c054e77f483d617f583c5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 02:50:23 +0200 Subject: [PATCH 068/133] 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 1318dbd4e2d..f17e622210e 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -293,8 +293,8 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) }else print ""; } print "".$refcomp.""; - if ($obj->total_ttc < 0) { print "".price(abs($total_ttc))." "; }; - if ($obj->total_ttc >= 0) { print " ".price($total_ttc).""; }; + if ($obj->total_ttc < 0) { print ''.price(abs($total_ttc))." "; }; + if ($obj->total_ttc >= 0) { print ' '.price($total_ttc).""; }; print ''.price($solde).''; print ""; } From 6d38f5ec9cb1fe927106243ab6463c3a39e6d630 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 02:56:44 +0200 Subject: [PATCH 069/133] FIX #11369 --- htdocs/bom/class/bom.class.php | 16 ++++++++-------- .../class/emailcollector.class.php | 6 +++--- .../class/emailcollectoraction.class.php | 8 ++++---- .../class/emailcollectorfilter.class.php | 8 ++++---- .../template/class/myobject.class.php | 6 +++--- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 731136fb7f4..99331de8c62 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -165,7 +165,7 @@ class BOM extends CommonObject */ public function __construct(DoliDB $db) { - global $conf, $langs, $user; + global $conf, $langs; $this->db = $db; @@ -184,11 +184,11 @@ class BOM extends CommonObject // Translate some data of arrayofkeyval foreach($this->fields as $key => $val) { - if (is_array($this->fields['status']['arrayofkeyval'])) + if (is_array($this->fields[$key]['arrayofkeyval'])) { - foreach($this->fields['status']['arrayofkeyval'] as $key2 => $val2) + foreach($this->fields[$key]['arrayofkeyval'] as $key2 => $val2) { - $this->fields['status']['arrayofkeyval'][$key2]=$langs->trans($val2); + $this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); } } } @@ -1066,7 +1066,7 @@ class BOMLine extends CommonObject */ public function __construct(DoliDB $db) { - global $conf, $langs, $user; + global $conf, $langs; $this->db = $db; @@ -1085,11 +1085,11 @@ class BOMLine extends CommonObject // Translate some data of arrayofkeyval foreach($this->fields as $key => $val) { - if (is_array($this->fields['status']['arrayofkeyval'])) + if (is_array($this->fields[$key]['arrayofkeyval'])) { - foreach($this->fields['status']['arrayofkeyval'] as $key2 => $val2) + foreach($this->fields[$key]['arrayofkeyval'] as $key2 => $val2) { - $this->fields['status']['arrayofkeyval'][$key2]=$langs->trans($val2); + $this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); } } } diff --git a/htdocs/emailcollector/class/emailcollector.class.php b/htdocs/emailcollector/class/emailcollector.class.php index f60051df970..ff4be06fcab 100644 --- a/htdocs/emailcollector/class/emailcollector.class.php +++ b/htdocs/emailcollector/class/emailcollector.class.php @@ -205,11 +205,11 @@ class EmailCollector extends CommonObject // Translate some data of arrayofkeyval foreach($this->fields as $key => $val) { - if (is_array($this->fields['status']['arrayofkeyval'])) + if (is_array($this->fields[$key]['arrayofkeyval'])) { - foreach($this->fields['status']['arrayofkeyval'] as $key2 => $val2) + foreach($this->fields[$key]['arrayofkeyval'] as $key2 => $val2) { - $this->fields['status']['arrayofkeyval'][$key2]=$langs->trans($val2); + $this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); } } } diff --git a/htdocs/emailcollector/class/emailcollectoraction.class.php b/htdocs/emailcollector/class/emailcollectoraction.class.php index 11ccfbc858e..ca710f99216 100644 --- a/htdocs/emailcollector/class/emailcollectoraction.class.php +++ b/htdocs/emailcollector/class/emailcollectoraction.class.php @@ -145,7 +145,7 @@ class EmailCollectorAction extends CommonObject */ public function __construct(DoliDB $db) { - global $conf, $langs, $user; + global $conf, $langs; $this->db = $db; @@ -164,11 +164,11 @@ class EmailCollectorAction extends CommonObject // Translate some data of arrayofkeyval foreach($this->fields as $key => $val) { - if (is_array($this->fields['status']['arrayofkeyval'])) + if (is_array($this->fields[$key]['arrayofkeyval'])) { - foreach($this->fields['status']['arrayofkeyval'] as $key2 => $val2) + foreach($this->fields[$key]['arrayofkeyval'] as $key2 => $val2) { - $this->fields['status']['arrayofkeyval'][$key2]=$langs->trans($val2); + $this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); } } } diff --git a/htdocs/emailcollector/class/emailcollectorfilter.class.php b/htdocs/emailcollector/class/emailcollectorfilter.class.php index f93ac51f673..5c7c7184ffc 100644 --- a/htdocs/emailcollector/class/emailcollectorfilter.class.php +++ b/htdocs/emailcollector/class/emailcollectorfilter.class.php @@ -114,7 +114,7 @@ class EmailCollectorFilter extends CommonObject */ public function __construct(DoliDB $db) { - global $conf, $langs, $user; + global $conf, $langs; $this->db = $db; @@ -133,11 +133,11 @@ class EmailCollectorFilter extends CommonObject // Translate some data of arrayofkeyval foreach($this->fields as $key => $val) { - if (is_array($this->fields['status']['arrayofkeyval'])) + if (is_array($this->fields[$key]['arrayofkeyval'])) { - foreach($this->fields['status']['arrayofkeyval'] as $key2 => $val2) + foreach($this->fields[$key]['arrayofkeyval'] as $key2 => $val2) { - $this->fields['status']['arrayofkeyval'][$key2]=$langs->trans($val2); + $this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); } } } diff --git a/htdocs/modulebuilder/template/class/myobject.class.php b/htdocs/modulebuilder/template/class/myobject.class.php index 266b8d1925f..1b4d1c7b52d 100644 --- a/htdocs/modulebuilder/template/class/myobject.class.php +++ b/htdocs/modulebuilder/template/class/myobject.class.php @@ -227,11 +227,11 @@ class MyObject extends CommonObject // Translate some data of arrayofkeyval foreach($this->fields as $key => $val) { - if (is_array($this->fields['status']['arrayofkeyval'])) + if (is_array($this->fields[$key]['arrayofkeyval'])) { - foreach($this->fields['status']['arrayofkeyval'] as $key2 => $val2) + foreach($this->fields[$key]['arrayofkeyval'] as $key2 => $val2) { - $this->fields['status']['arrayofkeyval'][$key2]=$langs->trans($val2); + $this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); } } } From 2b0b7b0dab0603a99d9a379a0dcef814976a0ebe Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 03:32:28 +0200 Subject: [PATCH 070/133] Update ccountry.class.php --- htdocs/core/class/ccountry.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/ccountry.class.php b/htdocs/core/class/ccountry.class.php index 5e744fbdb73..ef89fbcd9b6 100644 --- a/htdocs/core/class/ccountry.class.php +++ b/htdocs/core/class/ccountry.class.php @@ -66,7 +66,8 @@ class Ccountry // extends CommonObject public $active; public $fields=array( - 'label' => array('type'=>'varchar(250)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>15, 'notnull'=>-1, 'showoncombobox'=>'1',)); + 'label' => array('type'=>'varchar(250)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>15, 'notnull'=>-1, 'showoncombobox'=>'1') + ); /** From d8c2007d920200b0ac057c03b1eb0c522f3ea263 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 03:53:33 +0200 Subject: [PATCH 071/133] Prepare v11 alpha --- htdocs/install/check.php | 3 +- .../install/mysql/migration/10.0.0-11.0.0.sql | 31 ++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/htdocs/install/check.php b/htdocs/install/check.php index 55331634aff..6075ad14702 100644 --- a/htdocs/install/check.php +++ b/htdocs/install/check.php @@ -451,7 +451,8 @@ else array('from'=>'6.0.0', 'to'=>'7.0.0'), array('from'=>'7.0.0', 'to'=>'8.0.0'), array('from'=>'8.0.0', 'to'=>'9.0.0'), - array('from'=>'9.0.0', 'to'=>'10.0.0') + array('from'=>'9.0.0', 'to'=>'10.0.0'), + array('from'=>'10.0.0', 'to'=>'11.0.0') ); $count=0; 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 9f758b6bc40..520007e453c 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 @@ -2,6 +2,30 @@ -- Be carefull to requests order. -- This file must be loaded by calling /install/index.php page -- when current version is 11.0.0 or higher. +-- +-- To restrict request to Mysql version x.y minimum use -- VMYSQLx.y +-- To restrict request to Pgsql version x.y minimum use -- VPGSQLx.y +-- To rename a table: ALTER TABLE llx_table RENAME TO llx_table_new; +-- To add a column: ALTER TABLE llx_table ADD COLUMN newcol varchar(60) NOT NULL DEFAULT '0' AFTER existingcol; +-- To rename a column: ALTER TABLE llx_table CHANGE COLUMN oldname newname varchar(60); +-- To drop a column: ALTER TABLE llx_table DROP COLUMN oldname; +-- To change type of field: ALTER TABLE llx_table MODIFY COLUMN name varchar(60); +-- To drop a foreign key: ALTER TABLE llx_table DROP FOREIGN KEY fk_name; +-- To create a unique index ALTER TABLE llx_table ADD UNIQUE INDEX uk_table_field (field); +-- To drop an index: -- VMYSQL4.1 DROP INDEX nomindex on llx_table +-- To drop an index: -- VPGSQL8.2 DROP INDEX nomindex +-- To make pk to be auto increment (mysql): -- VMYSQL4.3 ALTER TABLE llx_table CHANGE COLUMN rowid rowid INTEGER NOT NULL AUTO_INCREMENT; +-- To make pk to be auto increment (postgres): +-- -- VPGSQL8.2 CREATE SEQUENCE llx_table_rowid_seq OWNED BY llx_table.rowid; +-- -- VPGSQL8.2 ALTER TABLE llx_table ADD PRIMARY KEY (rowid); +-- -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN rowid SET DEFAULT nextval('llx_table_rowid_seq'); +-- -- VPGSQL8.2 SELECT setval('llx_table_rowid_seq', MAX(rowid)) FROM llx_table; +-- To set a field as NULL: -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NULL; +-- To set a field as NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name DROP NOT NULL; +-- To set a field as NOT NULL: -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NOT NULL; +-- To set a field as NOT NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET NOT NULL; +-- To set a field as default NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET DEFAULT NULL; +-- Note: fields with type BLOB/TEXT can't have default value. create table llx_entrepot_extrafields @@ -12,4 +36,9 @@ create table llx_entrepot_extrafields import_key varchar(14) -- import key ) ENGINE=innodb; -ALTER TABLE llx_entrepot_extrafields ADD INDEX idx_entrepot_extrafields (fk_object); \ No newline at end of file +ALTER TABLE llx_entrepot_extrafields ADD INDEX idx_entrepot_extrafields (fk_object); + + +ALTER TABLE llx_c_shipment_mode ADD COLUMN entity integer DEFAULT 1; +ALTER TABLE llx_c_shipment_mode DROP INDEX uk_c_shipment_mode; +ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (code, entity); From 5f32b5e23e79664156f01c02500a97c30df6acd4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 03:54:11 +0200 Subject: [PATCH 072/133] Prepare v11 alpha --- htdocs/filefunc.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php index 6f1a773b7c1..d3aafe94f26 100644 --- a/htdocs/filefunc.inc.php +++ b/htdocs/filefunc.inc.php @@ -31,7 +31,7 @@ */ if (! defined('DOL_APPLICATION_TITLE')) define('DOL_APPLICATION_TITLE', 'Dolibarr'); -if (! defined('DOL_VERSION')) define('DOL_VERSION', '10.0.0'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c +if (! defined('DOL_VERSION')) define('DOL_VERSION', '11.0.0-alpha'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c if (! defined('EURO')) define('EURO', chr(128)); From 5fe91afdc29e0aed5e87a7456e4aef69c94f390b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 03:54:50 +0200 Subject: [PATCH 073/133] Update 9.0.0-10.0.0.sql --- htdocs/install/mysql/migration/9.0.0-10.0.0.sql | 4 ---- 1 file changed, 4 deletions(-) diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index 43e12c6c05f..e5b925b0d83 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -107,10 +107,6 @@ ALTER TABLE llx_prelevement_facture_demande ADD COLUMN sourcetype varchar(32); ALTER TABLE llx_prelevement_facture_demande ADD COLUMN ext_payment_id varchar(128) NULL; ALTER TABLE llx_prelevement_facture_demande ADD COLUMN ext_payment_site varchar(128) NULL; -ALTER TABLE llx_c_shipment_mode ADD COLUMN entity integer DEFAULT 1; -ALTER TABLE llx_c_shipment_mode DROP INDEX uk_c_shipment_mode; -ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (code, entity); - -- Fix if table exists ALTER TABLE llx_c_units DROP INDEX uk_c_units_code; ALTER TABLE llx_c_units ADD COLUMN scale integer; From 77a45b878b94d2b6223effe83da164a29d37e89a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 03:56:42 +0200 Subject: [PATCH 074/133] Fix migration --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 520007e453c..5f0d04040de 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 @@ -39,6 +39,7 @@ create table llx_entrepot_extrafields ALTER TABLE llx_entrepot_extrafields ADD INDEX idx_entrepot_extrafields (fk_object); -ALTER TABLE llx_c_shipment_mode ADD COLUMN entity integer DEFAULT 1; +ALTER TABLE llx_c_shipment_mode ADD COLUMN entity integer DEFAULT 1 NOT NULL; + ALTER TABLE llx_c_shipment_mode DROP INDEX uk_c_shipment_mode; ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (code, entity); From d15a300f02e0feec85e411e83a882de42cdec564 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 04:10:58 +0200 Subject: [PATCH 075/133] Removed not used var --- htdocs/compta/facture/card.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 10de9581dfe..44be21898f8 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -1295,7 +1295,6 @@ if (empty($reshook)) $TTotalByTva[$line->tva_tx] += $line->total_ttc ; } - $amount_to_diff = 0; foreach ($TTotalByTva as $tva => &$total) { $coef = $total / $srcobject->total_ttc; // Calc coef From e60020140d01d3a17b4ca467641c083c410854fa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 04:11:10 +0200 Subject: [PATCH 076/133] Update societe.class.php --- htdocs/societe/class/societe.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 6419eb11420..44b38856b90 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -3455,7 +3455,7 @@ class Societe extends CommonObject } else // For backward compatibility { - dol_syslog("Your country setup use an old syntax. Reedit it using setup area.", LOG_ERR); + dol_syslog("Your country setup use an old syntax. Reedit it using setup area.", LOG_WARNING); include_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; $country_code=getCountry($country_id, 2, $this->db); // This need a SQL request, but it's the old feature that should not be used anymore $country_label=getCountry($country_id, 0, $this->db); // This need a SQL request, but it's the old feature that should not be used anymore From 1a6dc83d4c886cb69c5c845dd6339fc9f71e3522 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 12:25:58 +0200 Subject: [PATCH 077/133] Fix: default accounting account for eec and export sales were not used. --- htdocs/accountancy/customer/list.php | 66 +++++++++++++------ htdocs/accountancy/supplier/list.php | 44 ++++++++----- .../fourn/class/fournisseur.product.class.php | 6 +- htdocs/langs/en_US/accountancy.lang | 3 + htdocs/product/class/product.class.php | 14 ++-- 5 files changed, 90 insertions(+), 43 deletions(-) diff --git a/htdocs/accountancy/customer/list.php b/htdocs/accountancy/customer/list.php index 5314099db1f..192585ccedd 100644 --- a/htdocs/accountancy/customer/list.php +++ b/htdocs/accountancy/customer/list.php @@ -92,9 +92,6 @@ if (! $user->rights->accounting->bind->write) $hookmanager->initHooks(array('accountancycustomerlist')); $formaccounting = new FormAccounting($db); -$accounting = new AccountingAccount($db); -$aarowid_s = $accounting->fetch('', $conf->global->ACCOUNTING_SERVICE_SOLD_ACCOUNT, 1); -$aarowid_p = $accounting->fetch('', $conf->global->ACCOUNTING_PRODUCT_SOLD_ACCOUNT, 1); $chartaccountcode = dol_getIdFromCode($db, $conf->global->CHARTOFACCOUNTS, 'accounting_system', 'rowid', 'pcg_version'); @@ -384,11 +381,11 @@ if ($result) { print ''; print ''; //print ''; - print ''; + print ''; print ''; print ''; print ''; - print $form->select_country($search_country, 'search_country', '', 0, 'maxwidth200', 'code2', 1, 0, 1); + print $form->select_country($search_country, 'search_country', '', 0, 'maxwidth150', 'code2', 1, 0, 1); //print ''; print ''; print ''; @@ -444,29 +441,50 @@ if ($result) { $isBuyerInEEC = isInEEC($objp); + $suggestedaccountingaccountbydefaultfor = ''; if ($objp->type_l == 1) { - $objp->code_sell_l = (! empty($conf->global->ACCOUNTING_SERVICE_SOLD_ACCOUNT) ? $conf->global->ACCOUNTING_SERVICE_SOLD_ACCOUNT : ''); - if ($objp->aarowid == '') { - $objp->aarowid_suggest = $aarowid_s; - } + if ($objp->country_code == $mysoc->country_code || empty($objp->country_code)) { // If buyer in same country than seller (if not defined, we assume it is same country) + $objp->code_sell_l = (! empty($conf->global->ACCOUNTING_SERVICE_SOLD_ACCOUNT) ? $conf->global->ACCOUNTING_SERVICE_SOLD_ACCOUNT : ''); + $suggestedaccountingaccountbydefaultfor = ''; + } else { + if ($isSellerInEEC && $isBuyerInEEC) { // European intravat sale + $objp->code_sell_l = (! empty($conf->global->ACCOUNTING_SERVICE_SOLD_INTRA_ACCOUNT) ? $conf->global->ACCOUNTING_SERVICE_SOLD_INTRA_ACCOUNT : ''); + $suggestedaccountingaccountbydefaultfor = 'eec'; + } else { // Foreign sale + $objp->code_sell_l = (! empty($conf->global->ACCOUNTING_SERVICE_SOLD_EXPORT_ACCOUNT) ? $conf->global->ACCOUNTING_SERVICE_SOLD_EXPORT_ACCOUNT : ''); + $suggestedaccountingaccountbydefaultfor = 'export'; + } + } } elseif ($objp->type_l == 0) { - $objp->code_sell_l = (! empty($conf->global->ACCOUNTING_PRODUCT_SOLD_ACCOUNT) ? $conf->global->ACCOUNTING_PRODUCT_SOLD_ACCOUNT : ''); - if ($objp->aarowid == '') { - $objp->aarowid_suggest = $aarowid_p; + if ($objp->country_code == $mysoc->country_code || empty($objp->country_code)) { // If buyer in same country than seller (if not defined, we assume it is same country) + $objp->code_sell_l = (! empty($conf->global->ACCOUNTING_PRODUCT_SOLD_ACCOUNT) ? $conf->global->ACCOUNTING_PRODUCT_SOLD_ACCOUNT : ''); + $suggestedaccountingaccountbydefaultfor = ''; + } else { + if ($isSellerInEEC && $isBuyerInEEC) { // European intravat sale + $objp->code_sell_l = (! empty($conf->global->ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT) ? $conf->global->ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT : ''); + $suggestedaccountingaccountbydefaultfor = 'eec'; + } else { + $objp->code_sell_l = (! empty($conf->global->ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT) ? $conf->global->ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT : ''); + $suggestedaccountingaccountbydefaultfor = 'export'; + } } } if ($objp->code_sell_l == -1) $objp->code_sell_l=''; + $suggestedaccountingaccountfor = ''; if ($objp->country_code == $mysoc->country_code || empty($objp->country_code)) { // If buyer in same country than seller (if not defined, we assume it is same country) $objp->code_sell_p = $objp->code_sell; $objp->aarowid_suggest = $objp->aarowid; + $suggestedaccountingaccountfor = ''; } else { if ($isSellerInEEC && $isBuyerInEEC) { // European intravat sale $objp->code_sell_p = $objp->code_sell_intra; $objp->aarowid_suggest = $objp->aarowid_intra; + $suggestedaccountingaccountfor = 'eec'; } else { // Foreign sale $objp->code_sell_p = $objp->code_sell_export; $objp->aarowid_suggest = $objp->aarowid_export; + $suggestedaccountingaccountfor = 'export'; } } @@ -477,8 +495,8 @@ if ($result) { } if (empty($objp->code_sell_l) && empty($objp->code_sell_p)) $code_sell_p_notset = 'color:red'; - // $objp->code_sell_p is now code of product/service // $objp->code_sell_l is now default code of product/service + // $objp->code_sell_p is now code of product/service print ''; @@ -492,7 +510,7 @@ if ($result) { // Ref Product print ''; - if ($product_static->id) + if ($product_static->id > 0) print $product_static->getNomUrl(1); if ($objp->product_label) print '
'.$objp->product_label; print ''; @@ -514,7 +532,7 @@ if ($result) { print vatrate($objp->tva_tx_line.($objp->vat_src_code?' ('.$objp->vat_src_code.')':'')); print ''; - print ''; + print ''; $labelcountry=($objp->country_code && ($langs->trans("Country".$objp->country_code)!="Country".$objp->country_code))?$langs->trans("Country".$objp->country_code):$objp->country_label; print $labelcountry; print ''; @@ -523,17 +541,27 @@ if ($result) { // Current account print ''; - print (($objp->type_l == 1)?$langs->trans("DefaultForService"):$langs->trans("DefaultForProduct")) . ' = ' . ($objp->code_sell_l > 0 ? length_accountg($objp->code_sell_l) : $langs->trans("Unknown")); - if ($objp->product_id > 0) + $s = (($objp->type_l == 1)?$langs->trans("DefaultForService"):$langs->trans("DefaultForProduct")).': '; + $shelp = ''; + if ($suggestedaccountingaccountbydefaultfor == 'eec') $shelp.= $langs->trans("SaleEEC"); + elseif ($suggestedaccountingaccountbydefaultfor == 'export') $shelp.= $langs->trans("SaleExport"); + $s.= ($objp->code_sell_l > 0 ? length_accountg($objp->code_sell_l) : $langs->trans("NotDefined")); + print $form->textwithpicto($s, $shelp, 1, 'help', '', 0, 2, '', 1); + if ($objp->product_id > 0) { print '
'; - print (($objp->type_l == 1)?$langs->trans("ThisService"):$langs->trans("ThisProduct")) . ' = ' . (empty($objp->code_sell_p) ? $langs->trans("Unknown") : length_accountg($objp->code_sell_p)); + $s = (($objp->type_l == 1)?$langs->trans("ThisService"):$langs->trans("ThisProduct")).': '; + $shelp = ''; + if ($suggestedaccountingaccountfor == 'eec') $shelp = $langs->trans("SaleEEC"); + elseif ($suggestedaccountingaccountfor == 'export') $shelp = $langs->trans("SaleExport"); + $s.= (empty($objp->code_sell_p) ? $langs->trans("NotDefined") : length_accountg($objp->code_sell_p)); + print $form->textwithpicto($s, $shelp, 1, 'help', '', 0, 2, '', 1); } print ''; // Suggested accounting account print ''; - print $formaccounting->select_account($objp->aarowid_suggest, 'codeventil'.$objp->rowid, 1, array(), 0, 0, 'codeventil maxwidth300 maxwidthonsmartphone', 'cachewithshowemptyone'); + print $formaccounting->select_account($objp->aarowid_suggest, 'codeventil'.$objp->rowid, 1, array(), 0, 0, 'codeventil maxwidth200 maxwidthonsmartphone', 'cachewithshowemptyone'); print ''; // Column with checkbox diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index 17284513650..b3a426bbf5e 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -332,8 +332,8 @@ if ($result) { if ($search_desc) $param.='&search_desc='.urlencode($search_desc); if ($search_amount) $param.='&search_amount='.urlencode($search_amount); if ($search_vat) $param.='&search_vat='.urlencode($search_vat); - if ($search_country) $param .= "&search_country=" . urlencode($search_country); - if ($search_tvaintra) $param .= "&search_tvaintra=" . urlencode($search_tvaintra); + if ($search_country) $param.="&search_country=".urlencode($search_country); + if ($search_tvaintra) $param.="&search_tvaintra=".urlencode($search_tvaintra); $arrayofmassactions = array( 'ventil'=>$langs->trans("Ventilate") @@ -382,11 +382,11 @@ if ($result) { print ''; print ''; //print ''; - print ''; + print ''; print ''; print ''; print ''; - print $form->select_country($search_country, 'search_country', '', 0, 'maxwidth200', 'code2', 1, 0, 1); + print $form->select_country($search_country, 'search_country', '', 0, 'maxwidth150', 'code2', 1, 0, 1); //print ''; print ''; print ''; @@ -418,7 +418,7 @@ if ($result) { print "\n"; $facturefourn_static = new FactureFournisseur($db); - $productfourn_static = new ProductFournisseur($db); + $product_static = new Product($db); while ($i < min($num_lines, $limit)) { $objp = $db->fetch_object($result); @@ -430,10 +430,10 @@ if ($result) { $objp->code_buy_p = ''; $objp->aarowid_suggest = ''; - $productfourn_static->ref = $objp->product_ref; - $productfourn_static->id = $objp->product_id; - $productfourn_static->type = $objp->type; - $productfourn_static->label = $objp->product_label; + $product_static->ref = $objp->product_ref; + $product_static->id = $objp->product_id; + $product_static->type = $objp->type; + $product_static->label = $objp->product_label; $facturefourn_static->ref = $objp->ref; $facturefourn_static->id = $objp->facid; @@ -479,8 +479,8 @@ if ($result) { // Ref product print ''; - if ($productfourn_static->id) - print $productfourn_static->getNomUrl(1); + if ($product_static->id > 0) + print $product_static->getNomUrl(1); if ($objp->product_label) print '
'.$objp->product_label; print ''; @@ -502,26 +502,38 @@ if ($result) { print vatrate($objp->tva_tx_line.($objp->vat_src_code?' ('.$objp->vat_src_code.')':'')); print ''; - print ''; + // Country + print ''; $labelcountry=($objp->country_code && ($langs->trans("Country".$objp->country_code)!="Country".$objp->country_code))?$langs->trans("Country".$objp->country_code):$objp->country_label; print $labelcountry; print ''; + // VAT Num print '' . $objp->tva_intra . ''; // Current account print ''; - print (($objp->type_l == 1)?$langs->trans("DefaultForService"):$langs->trans("DefaultForProduct")) . ' = ' . ($objp->code_buy_l > 0 ? length_accountg($objp->code_buy_l) : $langs->trans("Unknown")); + $s = (($objp->type_l == 1)?$langs->trans("DefaultForService"):$langs->trans("DefaultForProduct")).': '; + $shelp = ''; + if ($suggestedaccountingaccountbydefaultfor == 'eec') $shelp.= $langs->trans("SaleEEC"); + elseif ($suggestedaccountingaccountbydefaultfor == 'export') $shelp.= $langs->trans("SaleExport"); + $s.= ($objp->code_buy_l > 0 ? length_accountg($objp->code_buy_l) : $langs->trans("NotDefined")); + print $form->textwithpicto($s, $shelp, 1, 'help', '', 0, 2, '', 1); if ($objp->product_id > 0) { - print '
'; - print (($objp->type_l == 1)?$langs->trans("ThisService"):$langs->trans("ThisProduct")) . ' = ' . (empty($objp->code_buy_p) ? $langs->trans("Unknown") : length_accountg($objp->code_buy_p)); + print '
'; + $s = (($objp->type_l == 1)?$langs->trans("ThisService"):$langs->trans("ThisProduct")).': '; + $shelp = ''; + if ($suggestedaccountingaccountfor == 'eec') $shelp = $langs->trans("SaleEEC"); + elseif ($suggestedaccountingaccountfor == 'export') $shelp = $langs->trans("SaleExport"); + $s.= (empty($objp->code_buy_p) ? $langs->trans("NotDefined") : length_accountg($objp->code_buy_p)); + print $form->textwithpicto($s, $shelp, 1, 'help', '', 0, 2, '', 1); } print ''; // Suggested accounting account print ''; - print $formaccounting->select_account($objp->aarowid_suggest, 'codeventil'.$objp->rowid, 1, array(), 0, 0, 'codeventil maxwidth300 maxwidthonsmartphone', 'cachewithshowemptyone'); + print $formaccounting->select_account($objp->aarowid_suggest, 'codeventil'.$objp->rowid, 1, array(), 0, 0, 'codeventil maxwidth200 maxwidthonsmartphone', 'cachewithshowemptyone'); print ''; // Column with checkbox diff --git a/htdocs/fourn/class/fournisseur.product.class.php b/htdocs/fourn/class/fournisseur.product.class.php index f2384b13cf2..fc74890f150 100644 --- a/htdocs/fourn/class/fournisseur.product.class.php +++ b/htdocs/fourn/class/fournisseur.product.class.php @@ -1009,7 +1009,8 @@ class ProductFournisseur extends Product /** - * Return a link to the object card (with optionaly the picto) + * Return a link to the object card (with optionaly the picto). + * Used getNomUrl of ProductFournisseur if a specific supplier ref is loaded. Otherwise use Product->getNomUrl(). * * @param int $withpicto Include picto in link (0=No picto, 1=Include picto into link, 2=Only picto) * @param string $option On what the link point to ('nolink', ...) @@ -1025,11 +1026,10 @@ class ProductFournisseur extends Product if (! empty($conf->dol_no_mouse_hover)) $notooltip=1; // Force disable tooltips $result = ''; - $companylink = ''; $label = '' . $langs->trans("SupplierRef") . ''; $label.= '
'; - $label.= '' . $langs->trans('Ref') . ': ' . $this->fourn_ref; + $label.= '' . $langs->trans('Ref') . ': ' . $this->ref_supplier; $logPrices = $this->listProductFournisseurPriceLog($this->product_fourn_price_id, 'pfpl.datec', 'DESC'); // set sort order here if (is_array($logPrices) && count($logPrices) > 0) { diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index 7797fdef7b1..3a08e422600 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -316,6 +316,9 @@ WithoutValidAccount=Without valid dedicated account WithValidAccount=With valid dedicated account ValueNotIntoChartOfAccount=This value of accounting account does not exist into chart of account AccountRemovedFromGroup=Account removed from group +SaleLocal=Local sale +SaleExport=Export sale +SaleEEC=Sale in EEC ## Dictionary Range=Range of accounting account diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index de0d28cee83..a5491045c16 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -4059,16 +4059,18 @@ class Product extends CommonObject } } - $linkstart = ''; $linkend=''; $result.=$linkstart; if ($withpicto) { - if ($this->type == Product::TYPE_PRODUCT) { $result.=(img_object(($notooltip?'':$label), 'product', ($notooltip?'class="paddingright"':'class="paddingright classfortooltip"'), 0, 0, $notooltip?0:1)); + if ($this->type == Product::TYPE_PRODUCT) { + $result.=(img_object(($notooltip?'':$label), 'product', ($notooltip?'class="paddingright"':'class="paddingright classfortooltip"'), 0, 0, $notooltip?0:1)); } - if ($this->type == Product::TYPE_SERVICE) { $result.=(img_object(($notooltip?'':$label), 'service', ($notooltip?'class="paddinright"':'class="paddingright classfortooltip"'), 0, 0, $notooltip?0:1)); + if ($this->type == Product::TYPE_SERVICE) { + $result.=(img_object(($notooltip?'':$label), 'service', ($notooltip?'class="paddinright"':'class="paddingright classfortooltip"'), 0, 0, $notooltip?0:1)); } } $result.= $newref; @@ -4078,8 +4080,10 @@ class Product extends CommonObject $hookmanager->initHooks(array('productdao')); $parameters=array('id'=>$this->id, 'getnomurl'=>$result); $reshook=$hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks - if ($reshook > 0) { $result = $hookmanager->resPrint; - } else { $result .= $hookmanager->resPrint; + if ($reshook > 0) { + $result = $hookmanager->resPrint; + } else { + $result .= $hookmanager->resPrint; } return $result; From cb057e9c6db20b120fbebb0b11239cfb554904d1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 12:32:14 +0200 Subject: [PATCH 078/133] NEW Add hidden option to be ready for BREXIT --- htdocs/core/lib/company.lib.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index c3b9bcec2cf..1e27cb112d3 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -649,6 +649,8 @@ function getFormeJuridiqueLabel($code) */ function getCountriesInEEC() { + global $conf; + // List of all country codes that are in europe for european vat rules // List found on http://ec.europa.eu/taxation_customs/common/faq/faq_1179_en.htm#9 $country_code_in_EEC=array( @@ -687,6 +689,12 @@ function getCountriesInEEC() //'CH', // Switzerland - No. Swizerland in not in EEC ); + if (! empty($conf->global->MAIN_COUNTRIES_IN_EEC)) + { + // For example MAIN_COUNTRIES_IN_EEC = 'AT,BE,BG,CY,CZ,DE,DK,EE,ES,FI,FR,GB,GR,HR,NL,HU,IE,IM,IT,LT,LU,LV,MC,MT,PL,PT,RO,SE,SK,SI,UK' + $country_code_in_EEC = explode(',', $conf->global->MAIN_COUNTRIES_IN_EEC); + } + return $country_code_in_EEC; } From 6e069385bc054a2bd2c0032f32f500cfc755b3eb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 12:32:38 +0200 Subject: [PATCH 079/133] Update doc --- ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog b/ChangeLog index e0f4159c49e..9b91afd128f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -114,6 +114,7 @@ NEW: Option in workflow module to set a reception billed on validate supplier bi NEW: Autocompletion on lists should be available on mobile applications. NEW: Add mass action to close several members. NEW: Add hidden option ADD_UNSPLASH_LOGIN_BACKGROUND for random background +NEW: Add hidden option to be ready for BREXIT For Developers: NEW: Module "DebugBar" is available as a stable module. From bff6260983d0a47f49d04f4e6b1629023b1e013a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 12:34:29 +0200 Subject: [PATCH 080/133] Fix syntax error --- htdocs/accountancy/journal/bankjournal.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index 0f22789d630..a9009e725b8 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -172,7 +172,7 @@ if ($result) { // Variables $account_supplier = (($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER != "") ? $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER : 'NotDefined'); // NotDefined is a reserved word - $account_customer = ($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER != "") ? $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER : 'NotDefined'); // NotDefined is a reserved word + $account_customer = (($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER != "") ? $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER : 'NotDefined'); // NotDefined is a reserved word $account_employee = (! empty($conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT) ? $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT : 'NotDefined'); // NotDefined is a reserved word $account_pay_vat = (! empty($conf->global->ACCOUNTING_VAT_PAY_ACCOUNT) ? $conf->global->ACCOUNTING_VAT_PAY_ACCOUNT : 'NotDefined'); // NotDefined is a reserved word $account_pay_donation = (! empty($conf->global->DONATION_ACCOUNTINGACCOUNT) ? $conf->global->DONATION_ACCOUNTINGACCOUNT : 'NotDefined'); // NotDefined is a reserved word From afb63623178365f31be9b37658f805ead993c4b5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 20 Jun 2019 13:37:06 +0200 Subject: [PATCH 081/133] Fix look and feel v10 Fix link to direct debit payment order --- htdocs/accountancy/admin/accountmodel.php | 4 +- htdocs/accountancy/admin/categories_list.php | 2 +- htdocs/accountancy/admin/closure.php | 5 +- htdocs/accountancy/admin/defaultaccounts.php | 3 +- htdocs/accountancy/admin/export.php | 5 +- htdocs/accountancy/admin/productaccount.php | 2 +- .../class/accountancyexport.class.php | 78 +++++++++---------- htdocs/accountancy/journal/bankjournal.php | 4 +- .../journal/expensereportsjournal.php | 2 +- .../accountancy/journal/purchasesjournal.php | 2 +- htdocs/accountancy/journal/sellsjournal.php | 2 +- htdocs/admin/dict.php | 3 +- htdocs/compta/bank/bankentries_list.php | 12 ++- .../class/bonprelevement.class.php | 70 +++++++++++++---- htdocs/langs/en_US/banks.lang | 2 +- htdocs/langs/en_US/withdrawals.lang | 4 +- 16 files changed, 121 insertions(+), 79 deletions(-) diff --git a/htdocs/accountancy/admin/accountmodel.php b/htdocs/accountancy/admin/accountmodel.php index f44ff0071d2..102d268e218 100644 --- a/htdocs/accountancy/admin/accountmodel.php +++ b/htdocs/accountancy/admin/accountmodel.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004-2015 Laurent Destailleur + * Copyright (C) 2004-2019 Laurent Destailleur * Copyright (C) 2004 Benoit Mortier * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2010-2016 Juanjo Menent @@ -462,8 +462,6 @@ $linkback=''; print load_fiche_titre($titre, $linkback, 'title_accountancy'); -print "
\n"; - // Confirmation de la suppression de la ligne if ($action == 'delete') diff --git a/htdocs/accountancy/admin/categories_list.php b/htdocs/accountancy/admin/categories_list.php index 3a55e092d94..e7cdc800aee 100644 --- a/htdocs/accountancy/admin/categories_list.php +++ b/htdocs/accountancy/admin/categories_list.php @@ -412,7 +412,7 @@ $titlepicto='title_setup'; print load_fiche_titre($titre, $linkback, $titlepicto); -print $langs->trans("AccountingAccountGroupsDesc", $langs->transnoentitiesnoconv("ByPersonalizedAccountGroups")).'

'; +print ''.$langs->trans("AccountingAccountGroupsDesc", $langs->transnoentitiesnoconv("ByPersonalizedAccountGroups")).'

'; // Confirmation de la suppression de la ligne if ($action == 'delete') diff --git a/htdocs/accountancy/admin/closure.php b/htdocs/accountancy/admin/closure.php index a638d598ac9..479dd410f33 100644 --- a/htdocs/accountancy/admin/closure.php +++ b/htdocs/accountancy/admin/closure.php @@ -21,9 +21,8 @@ * \ingroup Accountancy (Double entries) * \brief Setup page to configure accounting expert module */ -require '../../main.inc.php'; -// Class +require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php'; require_once DOL_DOCUMENT_ROOT . '/core/class/html.formaccounting.class.php'; @@ -89,7 +88,7 @@ llxHeader(); $linkback = ''; print load_fiche_titre($langs->trans('MenuClosureAccounts'), $linkback, 'title_accountancy'); -print $langs->trans("DefaultClosureDesc").'
'; +print ''.$langs->trans("DefaultClosureDesc").'
'; print '
'; print '
'; diff --git a/htdocs/accountancy/admin/defaultaccounts.php b/htdocs/accountancy/admin/defaultaccounts.php index cba9ac92f3b..079e3585341 100644 --- a/htdocs/accountancy/admin/defaultaccounts.php +++ b/htdocs/accountancy/admin/defaultaccounts.php @@ -78,7 +78,6 @@ $list_account = array ( $accounting_mode = empty($conf->global->ACCOUNTING_MODE) ? 'RECETTES-DEPENSES' : $conf->global->ACCOUNTING_MODE; - if (GETPOST('change_chart', 'alpha')) { $chartofaccounts = GETPOST('chartofaccounts', 'int'); @@ -132,7 +131,7 @@ llxHeader(); $linkback = ''; print load_fiche_titre($langs->trans('MenuDefaultAccounts'), $linkback, 'title_accountancy'); -print $langs->trans("DefaultBindingDesc").'
'; +print ''.$langs->trans("DefaultBindingDesc").'
'; print '
'; print ''; diff --git a/htdocs/accountancy/admin/export.php b/htdocs/accountancy/admin/export.php index 74090e54120..81dc83b2ae5 100644 --- a/htdocs/accountancy/admin/export.php +++ b/htdocs/accountancy/admin/export.php @@ -76,6 +76,7 @@ $model_option = array ( ), ); + /* * Actions */ @@ -138,6 +139,7 @@ $form = new Form($db); // $linkback = '' . $langs->trans("BackToModuleList") . ''; print load_fiche_titre($langs->trans('ConfigAccountingExpert'), $linkback, 'title_setup'); + print "\n".'