From 59220c05e4070efc304a03bde1d61277eab66b49 Mon Sep 17 00:00:00 2001 From: ATM-Nicolas Date: Thu, 5 Jul 2018 11:18:28 +0200 Subject: [PATCH 01/19] FIX : Select first mail model by default --- htdocs/core/class/html.formmail.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/html.formmail.class.php b/htdocs/core/class/html.formmail.class.php index 2fd38d097c0..0e2f9176492 100644 --- a/htdocs/core/class/html.formmail.class.php +++ b/htdocs/core/class/html.formmail.class.php @@ -299,7 +299,7 @@ class FormMail extends Form { $model_id=$this->param["models_id"]; } - $arraydefaultmessage=$this->getEMailTemplate($this->db, $this->param["models"], $user, $outputlangs, ($model_id ? $model_id : -1)); // we set -1 if model_id empty + $arraydefaultmessage=$this->getEMailTemplate($this->db, $this->param["models"], $user, $outputlangs, $model_id); // If $model_id is empty, preselect the first one } //var_dump($this->param["models"]); //var_dump($model_id); From c13cc5d697cdc6d44033092555292d4b6131ae21 Mon Sep 17 00:00:00 2001 From: Marc de Lima Lucio Date: Wed, 28 Nov 2018 15:46:27 +0100 Subject: [PATCH 02/19] FIX: form actions: select_type_actions could be too small + bad init --- htdocs/core/class/html.formactions.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/html.formactions.class.php b/htdocs/core/class/html.formactions.class.php index bd22470d952..9f4b9e0da89 100644 --- a/htdocs/core/class/html.formactions.class.php +++ b/htdocs/core/class/html.formactions.class.php @@ -321,7 +321,7 @@ class FormActions { global $langs,$user,$form,$conf; - if (! is_object($form)) $form=new Form($db); + if (! is_object($form)) $form=new Form($this->db); require_once DOL_DOCUMENT_ROOT.'/comm/action/class/cactioncomm.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php'; @@ -346,7 +346,7 @@ class FormActions } else { - $out.=$form->selectarray($htmlname, $arraylist, $selected, 0, 0, 0, '', 0, 0, 0, '', '', 1); + $out.=$form->selectarray($htmlname, $arraylist, $selected, 0, 0, 0, '', 0, 0, 0, '', 'minwidth200', 1); } if ($user->admin && empty($onlyautoornot) && $hideinfohelp <= 0) From 5dcb3d2a1fe103515c7ad7ccc5ef045a653b0199 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Fri, 30 Nov 2018 19:23:05 +0100 Subject: [PATCH 03/19] Fix extrafields in import tool --- htdocs/core/modules/modAdherent.class.php | 2 +- htdocs/core/modules/modProduct.class.php | 2 +- htdocs/core/modules/modProjet.class.php | 2 +- htdocs/core/modules/modResource.class.php | 2 +- htdocs/core/modules/modService.class.php | 2 +- htdocs/core/modules/modSociete.class.php | 4 ++-- htdocs/core/modules/modUser.class.php | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/core/modules/modAdherent.class.php b/htdocs/core/modules/modAdherent.class.php index 5a529520bb2..bc01990d659 100644 --- a/htdocs/core/modules/modAdherent.class.php +++ b/htdocs/core/modules/modAdherent.class.php @@ -310,7 +310,7 @@ class modAdherent extends DolibarrModules $this->import_tables_creator_array[$r]=array('a'=>'fk_user_author'); // Fields to store import user id $this->import_fields_array[$r]=array('a.civility'=>"UserTitle",'a.lastname'=>"Lastname*",'a.firstname'=>"Firstname",'a.login'=>"Login*","a.pass"=>"Password","a.fk_adherent_type"=>"MemberType*",'a.morphy'=>'Nature*','a.societe'=>'Company','a.address'=>"Address",'a.zip'=>"Zip",'a.town'=>"Town",'a.state_id'=>'StateId','a.country'=>"CountryId",'a.phone'=>"PhonePro",'a.phone_perso'=>"PhonePerso",'a.phone_mobile'=>"PhoneMobile",'a.email'=>"Email",'a.birth'=>"Birthday",'a.statut'=>"Status*",'a.photo'=>"Photo",'a.note_public'=>"NotePublic",'a.note_private'=>"NotePrivate",'a.datec'=>'DateCreation','a.datefin'=>'DateEndSubscription'); // Add extra fields - $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'adherent' AND entity = ".$conf->entity; + $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'adherent' AND entity IN (0,".$conf->entity.")"; $resql=$this->db->query($sql); if ($resql) // This can fail when class is used on old database (during migration for example) { diff --git a/htdocs/core/modules/modProduct.class.php b/htdocs/core/modules/modProduct.class.php index 5cd66208ec9..dad0fa693fc 100644 --- a/htdocs/core/modules/modProduct.class.php +++ b/htdocs/core/modules/modProduct.class.php @@ -271,7 +271,7 @@ class modProduct extends DolibarrModules if (! empty($conf->global->PRODUCT_USE_UNITS)) $this->import_fields_array[$r]['p.fk_unit'] = 'Unit'; // Add extra fields $import_extrafield_sample=array(); - $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'product' AND entity IN (0, ".$conf->entity.')'; + $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'product' AND entity IN (0, ".$conf->entity.")"; $resql=$this->db->query($sql); if ($resql) // This can fail when class is used on old database (during migration for example) { diff --git a/htdocs/core/modules/modProjet.class.php b/htdocs/core/modules/modProjet.class.php index edf5a1ab050..dcfef83f8e3 100644 --- a/htdocs/core/modules/modProjet.class.php +++ b/htdocs/core/modules/modProjet.class.php @@ -278,7 +278,7 @@ class modProjet extends DolibarrModules $this->import_tables_array[$r]=array('t'=>MAIN_DB_PREFIX.'projet_task','extra'=>MAIN_DB_PREFIX.'projet_task_extrafields'); // List of tables to insert into (insert done in same order) $this->import_fields_array[$r]=array('t.fk_projet'=>'ProjectRef*','t.ref'=>'RefTask*','t.label'=>'LabelTask*','t.dateo'=>"DateStart",'t.datee'=>"DateEnd",'t.planned_workload'=>"PlannedWorkload",'t.progress'=>"Progress",'t.note_private'=>"NotePrivate",'t.note_public'=>"NotePublic",'t.datec'=>"DateCreation"); // Add extra fields - $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'projet_task' AND entity = ".$conf->entity; + $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'projet_task' AND entity IN (0,".$conf->entity.")"; $resql=$this->db->query($sql); if ($resql) // This can fail when class is used on old database (during migration for example) { diff --git a/htdocs/core/modules/modResource.class.php b/htdocs/core/modules/modResource.class.php index 5c41344f320..aa3e2341758 100644 --- a/htdocs/core/modules/modResource.class.php +++ b/htdocs/core/modules/modResource.class.php @@ -287,7 +287,7 @@ class modResource extends DolibarrModules $this->import_tables_array[$r]=array('r'=>MAIN_DB_PREFIX.'resource','extra'=>MAIN_DB_PREFIX.'resource_extrafields'); // List of tables to insert into (insert done in same order) $this->import_fields_array[$r]=array('r.ref'=>"ResourceFormLabel_ref*",'r.fk_code_type_resource'=>'ResourceTypeCode','r.description'=>'ResourceFormLabel_description','r.note_private'=>"NotePrivate",'r.note_public'=>"NotePublic",'r.asset_number'=>'AssetNumber','r.datec'=>'DateCreation'); // Add extra fields - $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'resource' AND entity = ".$conf->entity; + $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'resource' AND entity IN (0,".$conf->entity.")"; $resql=$this->db->query($sql); if ($resql) // This can fail when class is used on old database (during migration for example) { diff --git a/htdocs/core/modules/modService.class.php b/htdocs/core/modules/modService.class.php index 7302ebc673b..8b58bdae8c3 100644 --- a/htdocs/core/modules/modService.class.php +++ b/htdocs/core/modules/modService.class.php @@ -243,7 +243,7 @@ class modService extends DolibarrModules if (! empty($conf->barcode->enabled)) $this->import_fields_array[$r]=array_merge($this->import_fields_array[$r],array('p.barcode'=>'BarCode')); if (! empty($conf->global->PRODUCT_USE_UNITS)) $this->import_fields_array[$r]['p.fk_unit'] = 'Unit'; // Add extra fields - $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'product' AND entity = ".$conf->entity; + $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'product' AND entity IN (0,".$conf->entity.")"; $resql=$this->db->query($sql); if ($resql) // This can fail when class is used on old database (during migration for example) { diff --git a/htdocs/core/modules/modSociete.class.php b/htdocs/core/modules/modSociete.class.php index 2aef12c6a1d..517a24addf6 100644 --- a/htdocs/core/modules/modSociete.class.php +++ b/htdocs/core/modules/modSociete.class.php @@ -347,7 +347,7 @@ class modSociete extends DolibarrModules $this->import_tables_array[$r]=array('s'=>MAIN_DB_PREFIX.'societe','extra'=>MAIN_DB_PREFIX.'societe_extrafields'); // List of tables to insert into (insert done in same order) $this->import_fields_array[$r]=array('s.nom'=>"Name*",'s.name_alias'=>"Alias",'s.status'=>"Status",'s.client'=>"Customer*",'s.fournisseur'=>"Supplier*",'s.code_client'=>"CustomerCode",'s.code_fournisseur'=>"SupplierCode",'s.code_compta'=>"CustomerAccountancyCode",'s.code_compta_fournisseur'=>"SupplierAccountancyCode",'s.address'=>"Address",'s.zip'=>"Zip",'s.town'=>"Town",'s.fk_departement'=>"StateId",'s.fk_pays'=>"CountryCode",'s.phone'=>"Phone",'s.fax'=>"Fax",'s.url'=>"Url",'s.email'=>"Email",'s.siren'=>"ProfId1",'s.siret'=>"ProfId2",'s.ape'=>"ProfId3",'s.idprof4'=>"ProfId4",'s.idprof5'=>"ProfId5",'s.idprof6'=>"ProfId6",'s.tva_intra'=>"VATIntraShort",'s.capital'=>"Capital",'s.note_private'=>"NotePrivate",'s.note_public'=>"NotePublic",'s.fk_typent'=>"ThirdPartyType",'s.fk_effectif'=>"Staff","s.fk_forme_juridique"=>"JuridicalStatus",'s.fk_prospectlevel'=>'ProspectLevel','s.fk_stcomm'=>'ProspectStatus','s.default_lang'=>'DefaultLanguage','s.barcode'=>'BarCode','s.datec'=>"DateCreation"); // Add extra fields - $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'societe' AND entity = ".$conf->entity; + $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'societe' AND entity IN (0,".$conf->entity.")"; $resql=$this->db->query($sql); if ($resql) // This can fail when class is used on old database (during migration for example) { @@ -385,7 +385,7 @@ class modSociete extends DolibarrModules $this->import_tables_array[$r]=array('s'=>MAIN_DB_PREFIX.'socpeople','extra'=>MAIN_DB_PREFIX.'socpeople_extrafields'); // List of tables to insert into (insert done in same order) $this->import_fields_array[$r]=array('s.fk_soc'=>'ThirdPartyName','s.civility'=>'UserTitle','s.lastname'=>"Lastname*",'s.firstname'=>"Firstname",'s.address'=>"Address",'s.zip'=>"Zip",'s.town'=>"Town",'s.fk_pays'=>"CountryCode",'s.birthday'=>"BirthdayDate",'s.poste'=>"Role",'s.phone'=>"Phone",'s.phone_perso'=>"PhonePerso",'s.phone_mobile'=>"PhoneMobile",'s.fax'=>"Fax",'s.email'=>"Email",'s.note_private'=>"Note",'s.note_public'=>"Note",'s.datec'=>"DateCreation"); // Add extra fields - $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'socpeople' AND entity = ".$conf->entity; + $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'socpeople' AND entity IN (0,".$conf->entity.")"; $resql=$this->db->query($sql); if ($resql) // This can fail when class is used on old database (during migration for example) { diff --git a/htdocs/core/modules/modUser.class.php b/htdocs/core/modules/modUser.class.php index 95474ac8921..913004e478b 100644 --- a/htdocs/core/modules/modUser.class.php +++ b/htdocs/core/modules/modUser.class.php @@ -244,7 +244,7 @@ class modUser extends DolibarrModules $this->import_tables_array[$r]=array('u'=>MAIN_DB_PREFIX.'user','extra'=>MAIN_DB_PREFIX.'user_extrafields'); // List of tables to insert into (insert done in same order) $this->import_fields_array[$r]=array('u.lastname'=>"Name*",'u.firstname'=>"Firstname",'u.employee'=>"Employee*",'u.job'=>"Job",'u.gender'=>"Gender",'u.login'=>"Login*",'u.pass_crypted'=>"Password",'u.admin'=>"Administrator",'u.fk_soc'=>"Company*",'u.address'=>"Address",'u.zip'=>"Zip",'u.town'=>"Town",'u.fk_state'=>"StateId",'u.fk_country'=>"CountryCode",'u.office_phone'=>"Phone",'u.user_mobile'=>"Mobile",'u.office_fax'=>"Fax",'u.email'=>"Email",'u.note'=>"Note",'u.signature'=>'Signature','u.fk_user'=>'Supervisor','u.thm'=>'THM','u.tjm'=>'TJM','u.dateemployment'=>'DateEmployment','u.salary'=>'Salary','u.color'=>'Color','u.api_key'=>'ApiKey','u.datec'=>"DateCreation"); // Add extra fields - $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'user' AND entity = ".$conf->entity; + $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'user' AND entity IN (0,".$conf->entity.")"; $resql=$this->db->query($sql); if ($resql) // This can fail when class is used on old database (during migration for example) { From 758546148624ddca7ba8e3d294bc4e1122f752d2 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Fri, 30 Nov 2018 22:16:17 +0100 Subject: [PATCH 04/19] Fix #9070 --- htdocs/install/step1.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/install/step1.php b/htdocs/install/step1.php index a8eed4e26e4..49d8b5393c0 100644 --- a/htdocs/install/step1.php +++ b/htdocs/install/step1.php @@ -491,7 +491,6 @@ if (! $error && $db->connected && $action == "set") 'thirdparties' => 'thirdparty', 'usergroups' => 'usergroups', 'users' => 'user', - 'usergroups' => 'usergroups', ); foreach($docs as $cursordir => $cursorfile) { From e8a02a971d4a33b4fa0d8c7a694c175834c8c6ad Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Fri, 30 Nov 2018 23:05:12 +0100 Subject: [PATCH 05/19] Fix #9074 --- htdocs/fourn/class/paiementfourn.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/fourn/class/paiementfourn.class.php b/htdocs/fourn/class/paiementfourn.class.php index ea979cd607d..a3dcfa5fdf5 100644 --- a/htdocs/fourn/class/paiementfourn.class.php +++ b/htdocs/fourn/class/paiementfourn.class.php @@ -601,6 +601,7 @@ class PaiementFourn extends Paiement $this->ref = 'SPECIMEN'; $this->specimen=1; $this->facid = 1; + $this->socid = 1; $this->datepaye = $nownotime; } From 7a182c788000104f837c8c4bff8f26973c4960dd Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Fri, 30 Nov 2018 23:25:44 +0100 Subject: [PATCH 06/19] fix #10069 --- htdocs/comm/action/index.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/comm/action/index.php b/htdocs/comm/action/index.php index c361d275882..c4d719b2e6f 100644 --- a/htdocs/comm/action/index.php +++ b/htdocs/comm/action/index.php @@ -306,6 +306,7 @@ if ($actioncode || isset($_GET['actioncode']) || isset($_POST['actioncode'])) { if ($resourceid > 0) $param.="&resourceid=".$resourceid; if ($status || isset($_GET['status']) || isset($_POST['status'])) $param.="&status=".$status; if ($filter) $param.="&filter=".$filter; +if ($usergroup) $param.="&usergroup=".$usergroup; if ($filtert) $param.="&filtert=".$filtert; if ($socid) $param.="&socid=".$socid; if ($showbirthday) $param.="&showbirthday=1"; @@ -1276,7 +1277,7 @@ $db->close(); function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventarray, $maxprint=0, $maxnbofchar=16, $newparam='', $showinfo=0, $minheight=60, $nonew=0) { global $user, $conf, $langs; - global $action, $filter, $filtert, $status, $actioncode; // Filters used into search form + global $action, $filter, $filtert, $status, $actioncode, $usergroup; // Filters used into search form global $theme_datacolor; global $cachethirdparties, $cachecontacts, $cacheusers, $colorindexused; @@ -1635,6 +1636,7 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa print ''.img_picto("all","1downarrow_selected.png").' ...'; print ' +'.(count($eventarray[$daykey])-$maxprint); From 335327827d8001278a32bf441fed7ac9c46b14cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 1 Dec 2018 00:34:17 +0100 Subject: [PATCH 07/19] Update 6.0.0-7.0.0.sql --- htdocs/install/mysql/migration/6.0.0-7.0.0.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/install/mysql/migration/6.0.0-7.0.0.sql b/htdocs/install/mysql/migration/6.0.0-7.0.0.sql index b8b1b15051c..9b5243b181b 100644 --- a/htdocs/install/mysql/migration/6.0.0-7.0.0.sql +++ b/htdocs/install/mysql/migration/6.0.0-7.0.0.sql @@ -719,3 +719,5 @@ UPDATE llx_cronjob set entity = 0 where entity = 1 and label in ('PurgeDeleteTem -- VMYSQL4.3 ALTER TABLE llx_c_shipment_mode MODIFY COLUMN tracking varchar(255) NULL; -- VPGSQL8.2 ALTER TABLE llx_c_shipment_mode ALTER COLUMN tracking DROP NOT NULL; + +ALTER TABLE llx_paiementfourn ADD COLUMN fk_user_modif integer AFTER fk_user_author; From 38059ed60d8926a3f7f9caad3e0fae05a84f5e7b Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Sat, 1 Dec 2018 00:39:37 +0100 Subject: [PATCH 08/19] fix #10006 --- htdocs/accountancy/bookkeeping/balance.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/balance.php b/htdocs/accountancy/bookkeeping/balance.php index fa1f4b396d5..bf7881f90bf 100644 --- a/htdocs/accountancy/bookkeeping/balance.php +++ b/htdocs/accountancy/bookkeeping/balance.php @@ -57,7 +57,7 @@ $pagenext = $page + 1; $search_date_start = dol_mktime(0, 0, 0, GETPOST('date_startmonth', 'int'), GETPOST('date_startday', 'int'), GETPOST('date_startyear', 'int')); -$search_date_end = dol_mktime(0, 0, 0, GETPOST('date_endmonth', 'int'), GETPOST('date_endday', 'int'), GETPOST('date_endyear', 'int')); +$search_date_end = dol_mktime(23, 59, 59, GETPOST('date_endmonth', 'int'), GETPOST('date_endday', 'int'), GETPOST('date_endyear', 'int')); $search_accountancy_code_start = GETPOST('search_accountancy_code_start', 'alpha'); if ($search_accountancy_code_start == - 1) { @@ -126,7 +126,6 @@ if (! empty($search_accountancy_code_end)) { $param .= '&search_accountancy_code_end=' . $search_accountancy_code_end; } - /* * Action */ @@ -152,7 +151,7 @@ if ($action == 'export_csv') $filename = 'balance'; include DOL_DOCUMENT_ROOT . '/accountancy/tpl/export_journal.tpl.php'; - $result = $object->fetchAllBalance($sortorder, $sortfield, 0, 0, $filter); + $result = $object->fetchAllBalance($sortorder, $sortfield, $limit, 0, $filter); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } From 2b5bf0e2dd86da02064bb9780b9e47b537415e9d Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Sat, 1 Dec 2018 01:07:15 +0100 Subject: [PATCH 09/19] Fix pdf strato for contract with multipage --- .../contract/doc/pdf_strato.modules.php | 76 ++++++++++++++----- 1 file changed, 56 insertions(+), 20 deletions(-) diff --git a/htdocs/core/modules/contract/doc/pdf_strato.modules.php b/htdocs/core/modules/contract/doc/pdf_strato.modules.php index 2cea64a72a6..da247094e9b 100644 --- a/htdocs/core/modules/contract/doc/pdf_strato.modules.php +++ b/htdocs/core/modules/contract/doc/pdf_strato.modules.php @@ -313,10 +313,43 @@ class pdf_strato extends ModelePDFContract $txt.=$outputlangs->transnoentities("DateStartRealShort")." : ".$daters.''; if ($objectligne->date_cloture) $txt.=" - ".$outputlangs->transnoentities("DateEndRealShort")." : ''".$datere.''; + $pdf->startTransaction(); $pdf->writeHTMLCell(0, 0, $curX, $curY, dol_concatdesc($txtpredefinedservice, dol_concatdesc($txt, $desc)), 0, 1, 0); + $pageposafter=$pdf->getPage(); + if ($pageposafter > $pageposbefore) // There is a pagebreak + { + $pdf->rollbackTransaction(true); + $pageposafter=$pageposbefore; + //print $pageposafter.'-'.$pageposbefore;exit; + $pdf->setPageOrientation('', 1, $heightforfooter); // The only function to edit the bottom margin of current page to set it. + $pdf->writeHTMLCell(0, 0, $curX, $curY, dol_concatdesc($txtpredefinedservice, dol_concatdesc($txt, $desc)), 0, 1, 0); + $pageposafter=$pdf->getPage(); + $posyafter=$pdf->GetY(); + + if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text + { + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page + { + $pdf->AddPage('','',true); + if (! empty($tplidx)) $pdf->useTemplate($tplidx); + if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs); + $pdf->setPage($pageposafter+1); + } + } + else + { + // We found a page break + $showpricebeforepagebreak=0; + } + } + else // No pagebreak + { + $pdf->commitTransaction(); + } $nexY = $pdf->GetY() + 2; $pageposafter=$pdf->getPage(); + $pdf->setPage($pageposbefore); $pdf->setTopMargin($this->marge_haute); $pdf->setPageOrientation('', 1, 0); // The only function to edit the bottom margin of current page to set it. @@ -334,26 +367,27 @@ class pdf_strato extends ModelePDFContract $pdf->setPage($pagenb); if ($pagenb == 1) { - $this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforfooter, 0, $outputlangs, 0, 1); + $this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforfooter - $heightforfreetext, 0, $outputlangs, 0, 1); } else { - $this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforfooter, 0, $outputlangs, 1, 1); + $this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforfooter - $heightforfreetext, 0, $outputlangs, 1, 1); } $this->_pagefoot($pdf,$object,$outputlangs,1); $pagenb++; $pdf->setPage($pagenb); $pdf->setPageOrientation('', 1, 0); // The only function to edit the bottom margin of current page to set it. } + if (isset($object->lines[$i+1]->pagebreak) && $object->lines[$i+1]->pagebreak) { if ($pagenb == 1) { - $this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforfooter, 0, $outputlangs, 0, 1); + $this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforfooter - $heightforfreetext, 0, $outputlangs, 0, 1); } else { - $this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforfooter, 0, $outputlangs, 1, 1); + $this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforfooter - $heightforfreetext, 0, $outputlangs, 1, 1); } $this->_pagefoot($pdf,$object,$outputlangs,1); // New page @@ -368,14 +402,16 @@ class pdf_strato extends ModelePDFContract if ($pagenb == 1) { $this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforinfotot - $heightforfreetext - $heightforfooter, 0, $outputlangs, 0, 0); + $this->_tab_signature($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforinfotot - $heightforfreetext - $heightforfooter, $outputlangs); $bottomlasttab=$this->page_hauteur - $heightforfooter - $heightforfooter + 1; } else { - $this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforinfotot - $heightforfreetext - $heightforfooter, 0, $outputlangs, 1, 0); + $this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforinfotot - $heightforfreetext - $heightforfooter, 0, $outputlangs, 0, 0); + $this->_tab_signature($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforinfotot - $heightforfreetext - $heightforfooter, $outputlangs); $bottomlasttab=$this->page_hauteur - $heightforfooter - $heightforfooter + 1; } - + $this->_pagefoot($pdf,$object,$outputlangs); if (method_exists($pdf,'AliasNbPages')) $pdf->AliasNbPages(); @@ -462,25 +498,25 @@ class pdf_strato extends ModelePDFContract */ // Output Rect - $this->printRect($pdf, $this->marge_gauche, $tab_top, $this->page_largeur-$this->marge_gauche-$this->marge_droite, $tab_height+3, $hidetop, $hidebottom); // Rect prend une longueur en 3eme param et 4eme param + $this->printRect($pdf, $this->marge_gauche, $tab_top, $this->page_largeur-$this->marge_gauche-$this->marge_droite, $tab_height+3); // Rect prend une longueur en 3eme param et 4eme param + } - if (empty($hidebottom)) - { - $posmiddle = $this->marge_gauche + round(($this->page_largeur - $this->marge_gauche - $this->marge_droite)/2); - $posy = $tab_top + $tab_height + 3 + 3; + function _tab_signature(&$pdf, $tab_top, $tab_height, $outputlangs) { + $pdf->SetDrawColor(128,128,128); + $posmiddle = $this->marge_gauche + round(($this->page_largeur - $this->marge_gauche - $this->marge_droite)/2); + $posy = $tab_top + $tab_height + 3 + 3; - $pdf->SetXY($this->marge_gauche, $posy); - $pdf->MultiCell($posmiddle - $this->marge_gauche - 5, 5, $outputlangs->transnoentities("ContactNameAndSignature", $this->emetteur->name),0,'L',0); + $pdf->SetXY($this->marge_gauche, $posy); + $pdf->MultiCell($posmiddle - $this->marge_gauche - 5, 5, $outputlangs->transnoentities("ContactNameAndSignature", $this->emetteur->name),0,'L',0); - $pdf->SetXY($this->marge_gauche, $posy + 5); - $pdf->MultiCell($posmiddle - $this->marge_gauche - 5, 20, '', 1); + $pdf->SetXY($this->marge_gauche, $posy + 5); + $pdf->MultiCell($posmiddle - $this->marge_gauche - 5, 20, '', 1); - $pdf->SetXY($posmiddle + 5, $posy); - $pdf->MultiCell($this->page_largeur-$this->marge_droite - $posmiddle - 5, 5, $outputlangs->transnoentities("ContactNameAndSignature", $this->recipient->name),0,'L',0); + $pdf->SetXY($posmiddle + 5, $posy); + $pdf->MultiCell($this->page_largeur-$this->marge_droite - $posmiddle - 5, 5, $outputlangs->transnoentities("ContactNameAndSignature", $this->recipient->name),0,'L',0); - $pdf->SetXY($posmiddle + 5, $posy + 5); - $pdf->MultiCell($this->page_largeur-$this->marge_droite - $posmiddle - 5, 20, '', 1); - } + $pdf->SetXY($posmiddle + 5, $posy + 5); + $pdf->MultiCell($this->page_largeur-$this->marge_droite - $posmiddle - 5, 20, '', 1); } /** From 1c04c2b5f44a0c76cc1dc9ad3dc018f9fdbea8c1 Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Sat, 1 Dec 2018 10:38:40 +0100 Subject: [PATCH 10/19] Fix #10097 --- htdocs/societe/class/societe.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 53768881b8b..a240c83b89f 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -6,7 +6,7 @@ * Copyright (C) 2006 Andre Cianfarani * Copyright (C) 2005-2017 Regis Houssin * Copyright (C) 2008 Patrick Raguin - * Copyright (C) 2010-2014 Juanjo Menent + * Copyright (C) 2010-2018 Juanjo Menent * Copyright (C) 2013 Florian Henry * Copyright (C) 2013 Alexandre Spangaro * Copyright (C) 2013 Peter Fontaine @@ -72,7 +72,7 @@ class Societe extends CommonObject 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'default'=>1, 'notnull'=>1, 'index'=>1, 'position'=>20), 'note_public' =>array('type'=>'text', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>0, 'position'=>60), 'note_private' =>array('type'=>'text', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>0, 'position'=>61), - 'date_creation' =>array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>500), + 'datec' =>array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>500), 'tms' =>array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>501), //'date_valid' =>array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'position'=>502), 'fk_user_creat' =>array('type'=>'integer', 'label'=>'UserAuthor', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'position'=>510), From 7d4553179db43aeccecd7a3139f50f5ad42061df Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Sat, 1 Dec 2018 15:48:46 +0100 Subject: [PATCH 11/19] Fix #9929 --- htdocs/public/payment/newpayment.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index 3afd590da53..58d6a4d1d2e 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -2,6 +2,7 @@ /* Copyright (C) 2001-2002 Rodolphe Quiedeville * Copyright (C) 2006-2017 Laurent Destailleur * Copyright (C) 2009-2012 Regis Houssin + * Copyright (C) 2018 Juanjo Menent * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -928,7 +929,7 @@ if ($source == 'invoice') if ($action != 'dopayment') // Do not change amount if we just click on first dopayment { - $amount=price2num($invoice->total_ttc - $invoice->getSommePaiement()); + $amount=price2num($invoice->total_ttc - ($invoice->getSommePaiement() + $invoice->getSumCreditNotesUsed())); if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int'); $amount=price2num($amount); } From 8964ec7ea179d2f9f5a109529220b26efac10b07 Mon Sep 17 00:00:00 2001 From: Inovea Conseil Date: Sat, 1 Dec 2018 15:58:37 +0100 Subject: [PATCH 12/19] Fix #9572 Fix #9572 --- htdocs/product/price.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/product/price.php b/htdocs/product/price.php index fc5c20c3d1a..faaef53691b 100644 --- a/htdocs/product/price.php +++ b/htdocs/product/price.php @@ -11,6 +11,7 @@ * Copyright (C) 2015 Alexandre Spangaro * Copyright (C) 2015 Marcos García * Copyright (C) 2016 Ferran Marcet + * Copyright (C) 2018 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 @@ -1451,8 +1452,8 @@ if ((empty($conf->global->PRODUIT_CUSTOMER_PRICES) || $action=='showlog_default_ // Log of previous customer prices $backbutton='' . $langs->trans("Back") . ''; - if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) print_barre_liste($langs->trans("DefaultPrice"), 0, $_SERVER["PHP_SELF"], '', '', '', $backbutton, $num, $num, 'title_accountancy.png'); - else print_barre_liste($langs->trans("PriceByCustomerLog"), 0, $_SERVER["PHP_SELF"], '', '', '', '', $num, $num, 'title_accountancy.png'); + //if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) print_barre_liste($langs->trans("DefaultPrice"), 0, $_SERVER["PHP_SELF"], '', '', '', $backbutton, $num, $num, 'title_accountancy.png'); + //else print_barre_liste($langs->trans("PriceByCustomerLog"), 0, $_SERVER["PHP_SELF"], '', '', '', '', $num, $num, 'title_accountancy.png'); //if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) print_barre_liste($langs->trans("DefaultPrice"),'','','','','',$backbutton, 0, 0, 'title_accountancy.png'); //else print_barre_liste($langs->trans("PriceByCustomerLog"),'','','','','','', 0, 0, 'title_accountancy.png'); From 0ba5fda3daa0ed480acc9b8ed26a9a6ac83ca48d Mon Sep 17 00:00:00 2001 From: Inovea Conseil Date: Sat, 1 Dec 2018 16:11:49 +0100 Subject: [PATCH 13/19] Update price.php --- htdocs/product/price.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/product/price.php b/htdocs/product/price.php index faaef53691b..259f7d24c0a 100644 --- a/htdocs/product/price.php +++ b/htdocs/product/price.php @@ -1452,8 +1452,8 @@ if ((empty($conf->global->PRODUIT_CUSTOMER_PRICES) || $action=='showlog_default_ // Log of previous customer prices $backbutton='' . $langs->trans("Back") . ''; - //if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) print_barre_liste($langs->trans("DefaultPrice"), 0, $_SERVER["PHP_SELF"], '', '', '', $backbutton, $num, $num, 'title_accountancy.png'); - //else print_barre_liste($langs->trans("PriceByCustomerLog"), 0, $_SERVER["PHP_SELF"], '', '', '', '', $num, $num, 'title_accountancy.png'); + if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) print_barre_liste($langs->trans("DefaultPrice"), 0, $_SERVER["PHP_SELF"], '', '', '', $backbutton, 0, $num, 'title_accountancy.png'); + else print_barre_liste($langs->trans("PriceByCustomerLog"), 0, $_SERVER["PHP_SELF"], '', '', '', '', 0, $num, 'title_accountancy.png'); //if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) print_barre_liste($langs->trans("DefaultPrice"),'','','','','',$backbutton, 0, 0, 'title_accountancy.png'); //else print_barre_liste($langs->trans("PriceByCustomerLog"),'','','','','','', 0, 0, 'title_accountancy.png'); From 61322b9ce27a766c71ce3b7267c4b39dae0e31c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 1 Dec 2018 16:19:54 +0100 Subject: [PATCH 14/19] devcamp 2018 fix #9642 --- htdocs/expensereport/card.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index 141260d36f3..e623a76c87c 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -4,6 +4,7 @@ * Copyright (C) 2005-2009 Regis Houssin * Copyright (C) 2015-2017 Alexandre Spangaro * Copyright (C) 2017 Ferran Marcet + * Copyright (C) 2018 Frédéric France * * 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 @@ -288,7 +289,7 @@ if (empty($reshook)) if (! $error) { // Actions on extra fields - $result = $object->insertExtraFields('FICHINTER_MODIFY'); + $result = $object->insertExtraFields('EXPENSEREPORT_MODIFY'); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); From 589511f38cad5838b5c471ebad79afcc9f9255e6 Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Sat, 1 Dec 2018 16:23:40 +0100 Subject: [PATCH 15/19] fix #9999 --- .../doc/doc_generic_shipment_odt.modules.php | 55 +++++++++++++----- .../doc/doc_generic_invoice_odt.modules.php | 22 ++++--- .../shipment/template_shipment.odt | Bin 25555 -> 19845 bytes 3 files changed, 50 insertions(+), 27 deletions(-) mode change 100644 => 100755 htdocs/install/doctemplates/shipment/template_shipment.odt diff --git a/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php b/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php index 9c45c135ac3..73fc323c198 100644 --- a/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php +++ b/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php @@ -275,9 +275,9 @@ class doc_generic_shipment_odt extends ModelePdfExpedition dol_mkdir($conf->expedition->dir_temp); - // If BILLING contact defined on invoice, we use it + // If SHIPMENT contact defined on invoice, we use it $usecontact=false; - $arrayidcontact=$object->getIdContact('external','BILLING'); + $arrayidcontact=$object->getIdContact('external','SHIPPING'); if (count($arrayidcontact) > 0) { $usecontact=true; @@ -285,24 +285,27 @@ class doc_generic_shipment_odt extends ModelePdfExpedition } // Recipient name - if (! empty($usecontact)) - { + $contactobject = null; + if (! empty($usecontact)) { // On peut utiliser le nom de la societe du contact - if (! empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) $socobject = $object->contact; - else $socobject = $object->thirdparty; - } - else - { - $socobject=$object->thirdparty; + if (! empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) + $socobject = $object->contact; + else { + $socobject = $object->thirdparty; + // if we have a SHIIPPING contact and we dont use it as recipient we store the contact object for later use + $contactobject = $object->contact; + } + } else { + $socobject = $object->thirdparty; } // Make substitution $substitutionarray=array( - '__FROM_NAME__' => $this->emetteur->name, - '__FROM_EMAIL__' => $this->emetteur->email, - '__TOTAL_TTC__' => $object->total_ttc, - '__TOTAL_HT__' => $object->total_ht, - '__TOTAL_VAT__' => $object->total_vat + '__FROM_NAME__' => $this->emetteur->name, + '__FROM_EMAIL__' => $this->emetteur->email, + '__TOTAL_TTC__' => $object->total_ttc, + '__TOTAL_HT__' => $object->total_ht, + '__TOTAL_VAT__' => $object->total_vat ); complete_substitutions_array($substitutionarray, $langs, $object); // Call the ODTSubstitution hook @@ -411,6 +414,28 @@ class doc_generic_shipment_odt extends ModelePdfExpedition { } } + + if ($usecontact && is_object($contactobject)) { + $tmparray=$this->get_substitutionarray_contact($contactobject,$outputlangs,'contact'); + foreach($tmparray as $key=>$value) + { + try { + if (preg_match('/logo$/',$key)) // Image + { + if (file_exists($value)) $odfHandler->setImage($key, $value); + else $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); + } + else // Text + { + $odfHandler->setVars($key, $value, true, 'UTF-8'); + } + } + catch(OdfException $e) + { + } + } + } + // Replace tags of object + external modules $tmparray=$this->get_substitutionarray_shipment($object,$outputlangs); complete_substitutions_array($tmparray, $outputlangs, $object); diff --git a/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php b/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php index 7c62bf1e300..8bf2a87efe4 100644 --- a/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php +++ b/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php @@ -286,20 +286,18 @@ class doc_generic_invoice_odt extends ModelePDFFactures } // Recipient name - $contactobject=null; - if (! empty($usecontact)) - { + $contactobject = null; + if (! empty($usecontact)) { // On peut utiliser le nom de la societe du contact - if (! empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) $socobject = $object->contact; + if (! empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) + $socobject = $object->contact; else { - $socobject = $object->thirdparty; - // if we have a BILLING contact and we dont use it as recipient we store the contact object for later use - $contactobject = $object->contact; - } - } - else - { - $socobject=$object->thirdparty; + $socobject = $object->thirdparty; + // if we have a BILLING contact and we dont use it as recipient we store the contact object for later use + $contactobject = $object->contact; + } + } else { + $socobject = $object->thirdparty; } // Fetch info for linked propal diff --git a/htdocs/install/doctemplates/shipment/template_shipment.odt b/htdocs/install/doctemplates/shipment/template_shipment.odt old mode 100644 new mode 100755 index 100afe5dac40738c940a936506829410a2e05243..a7076fd0e00fe5e7b46f212cb266b6c15c83e61e GIT binary patch literal 19845 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 literal 25555 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 Date: Sat, 1 Dec 2018 16:27:14 +0100 Subject: [PATCH 16/19] fix :#9967 --- htdocs/ticket/class/actions_ticket.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/ticket/class/actions_ticket.class.php b/htdocs/ticket/class/actions_ticket.class.php index 6dc946ebad3..3411672bd90 100644 --- a/htdocs/ticket/class/actions_ticket.class.php +++ b/htdocs/ticket/class/actions_ticket.class.php @@ -23,7 +23,7 @@ * \brief File Class ticket */ -require_once "ticket.class.php"; +require_once DOL_DOCUMENT_ROOT . '/ticket/class/ticket.class.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT . '/core/class/extrafields.class.php'; require_once DOL_DOCUMENT_ROOT . '/contrat/class/contrat.class.php'; From 18281d9d439e5037ff7ebd7f39566cff147d21bd Mon Sep 17 00:00:00 2001 From: Inovea Conseil Date: Sat, 1 Dec 2018 16:48:50 +0100 Subject: [PATCH 17/19] FIX #6580 FIX #6580 --- htdocs/core/class/html.form.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 3eb96cf7e6f..bc9aa55f6f6 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -16,6 +16,7 @@ * Copyright (C) 2012 Cedric Salvador * Copyright (C) 2012-2015 Raphaël Doursenaud * Copyright (C) 2014 Alexandre Spangaro + * Copyright (C) 2018 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 @@ -3791,7 +3792,7 @@ class Form if ($("#" + inputname).attr("type") == "radio") { more = ":checked"; } var inputvalue = $("#" + inputname + more).val(); if (typeof inputvalue == "undefined") { inputvalue=""; } - options += "&" + inputname + "=" + inputvalue; + options += "&" + inputname + "=" + encodeURIComponent(inputvalue); }); } var urljump = pageyes + (pageyes.indexOf("?") < 0 ? "?" : "") + options; From 474228cbd63ed378f98b10e4174fcc2ec14e8f6c Mon Sep 17 00:00:00 2001 From: ATM John BOTELLA Date: Sat, 1 Dec 2018 17:01:11 +0100 Subject: [PATCH 18/19] FIX #8741 --- htdocs/contact/list.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index c63467390b4..3e7fb384011 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -302,6 +302,8 @@ if (strlen($search_fax)) $sql.= natural_search('p.fax', $search_fax); if (strlen($search_skype)) $sql.= natural_search('p.skype', $search_skype); if (strlen($search_email)) $sql.= natural_search('p.email', $search_email); if (strlen($search_zip)) $sql.= natural_search("p.zip",$search_zip); +if (strlen($search_town)) $sql.= natural_search("p.town",$search_town); + if ($search_status != '' && $search_status >= 0) $sql.= " AND p.statut = ".$db->escape($search_status); if ($search_import_key) $sql.= natural_search("p.import_key",$search_import_key); if ($type == "o") // filtre sur type From 13806124b2946cbb4aca827afd01731aefc86f60 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Sat, 1 Dec 2018 17:11:04 +0100 Subject: [PATCH 19/19] Fix add missing fk_department and fk_pays in contact/bank imports --- htdocs/core/modules/modSociete.class.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/htdocs/core/modules/modSociete.class.php b/htdocs/core/modules/modSociete.class.php index 517a24addf6..a77d131ab7e 100644 --- a/htdocs/core/modules/modSociete.class.php +++ b/htdocs/core/modules/modSociete.class.php @@ -383,7 +383,7 @@ class modSociete extends DolibarrModules $this->import_icon[$r]='contact'; $this->import_entities_array[$r]=array('s.fk_soc'=>'company'); // We define here only fields that use another icon that the one defined into import_icon $this->import_tables_array[$r]=array('s'=>MAIN_DB_PREFIX.'socpeople','extra'=>MAIN_DB_PREFIX.'socpeople_extrafields'); // List of tables to insert into (insert done in same order) - $this->import_fields_array[$r]=array('s.fk_soc'=>'ThirdPartyName','s.civility'=>'UserTitle','s.lastname'=>"Lastname*",'s.firstname'=>"Firstname",'s.address'=>"Address",'s.zip'=>"Zip",'s.town'=>"Town",'s.fk_pays'=>"CountryCode",'s.birthday'=>"BirthdayDate",'s.poste'=>"Role",'s.phone'=>"Phone",'s.phone_perso'=>"PhonePerso",'s.phone_mobile'=>"PhoneMobile",'s.fax'=>"Fax",'s.email'=>"Email",'s.note_private'=>"Note",'s.note_public'=>"Note",'s.datec'=>"DateCreation"); + $this->import_fields_array[$r]=array('s.fk_soc'=>'ThirdPartyName','s.civility'=>'UserTitle','s.lastname'=>"Lastname*",'s.firstname'=>"Firstname",'s.address'=>"Address",'s.zip'=>"Zip",'s.town'=>"Town",'s.fk_departement'=>"StateId",'s.fk_pays'=>"CountryCode",'s.birthday'=>"BirthdayDate",'s.poste'=>"Role",'s.phone'=>"Phone",'s.phone_perso'=>"PhonePerso",'s.phone_mobile'=>"PhoneMobile",'s.fax'=>"Fax",'s.email'=>"Email",'s.note_private'=>"Note",'s.note_public'=>"Note",'s.datec'=>"DateCreation"); // Add extra fields $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'socpeople' AND entity IN (0,".$conf->entity.")"; $resql=$this->db->query($sql); @@ -401,7 +401,7 @@ class modSociete extends DolibarrModules $this->import_convertvalue_array[$r]=array( 's.fk_soc'=>array('rule'=>'fetchidfromref','file'=>'/societe/class/societe.class.php','class'=>'Societe','method'=>'fetch','element'=>'ThirdParty'), 's.fk_departement'=>array('rule'=>'fetchidfromcodeid','classfile'=>'/core/class/cstate.class.php','class'=>'Cstate','method'=>'fetch','dict'=>'DictionaryState'), - 's.fk_pays'=>array('rule'=>'fetchidfromcodeid','classfile'=>'/core/class/ccountry.class.php','class'=>'Ccountry','method'=>'fetch','dict'=>'DictionaryCountry'), + 's.fk_pays'=>array('rule'=>'fetchidfromcodeid','classfile'=>'/core/class/ccountry.class.php','class'=>'Ccountry','method'=>'fetch','dict'=>'DictionaryCountry'), ); //$this->import_convertvalue_array[$r]=array('s.fk_soc'=>array('rule'=>'lastrowid',table='t'); $this->import_regex_array[$r]=array('s.birthday'=>'^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$','s.datec'=>'^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]( [0-9][0-9]:[0-9][0-9]:[0-9][0-9])?$'); @@ -416,11 +416,14 @@ class modSociete extends DolibarrModules $this->import_tables_array[$r]=array('sr'=>MAIN_DB_PREFIX.'societe_rib'); $this->import_fields_array[$r]=array('sr.fk_soc'=>"ThirdPartyName*",'sr.bank'=>"Bank", 'sr.code_banque'=>"BankCode",'sr.code_guichet'=>"DeskCode",'sr.number'=>"BankAccountNumber*", - 'sr.cle_rib'=>"BankAccountNumberKey",'sr.bic'=>"BIC",'sr.iban_prefix'=>"IBAN", 'sr.domiciliation'=>"BankAccountDomiciliation",'sr.proprio' => "BankAccountOwner", 'sr.owner_address' => "BankAccountOwnerAddress", 'sr.default_rib' => 'Default' + 'sr.cle_rib'=>"BankAccountNumberKey",'sr.bic'=>"BIC",'sr.iban_prefix'=>"IBAN", 'sr.domiciliation'=>"BankAccountDomiciliation",'sr.proprio' => "BankAccountOwner", 'sr.owner_address' => "BankAccountOwnerAddress", 'sr.default_rib' => 'Default', + 'sr.fk_departement'=>"StateId",'sr.fk_pays'=>"CountryCode" ); $this->import_convertvalue_array[$r]=array( - 'sr.fk_soc'=>array('rule'=>'fetchidfromref','classfile'=>'/societe/class/societe.class.php','class'=>'Societe','method'=>'fetch','element'=>'ThirdParty') + 'sr.fk_soc'=>array('rule'=>'fetchidfromref','classfile'=>'/societe/class/societe.class.php','class'=>'Societe','method'=>'fetch','element'=>'ThirdParty'), + 'sr.fk_departement'=>array('rule'=>'fetchidfromcodeid','classfile'=>'/core/class/cstate.class.php','class'=>'Cstate','method'=>'fetch','dict'=>'DictionaryState'), + 'sr.fk_pays'=>array('rule'=>'fetchidfromcodeid','classfile'=>'/core/class/ccountry.class.php','class'=>'Ccountry','method'=>'fetch','dict'=>'DictionaryCountry'), ); $this->import_examplevalues_array[$r]=array('sr.fk_soc'=>"MyBigCompany",'sr.bank'=>"ING", 'sr.code_banque'=>"0000", 'sr.code_guichet'=>"1111",'sr.number'=>"3333333333",