From 193699a1b3170bc8fac8da49526d069e5f478f93 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 27 Feb 2016 18:47:02 +0100 Subject: [PATCH 01/10] Fix duration format --- htdocs/projet/activity/index.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/projet/activity/index.php b/htdocs/projet/activity/index.php index e9db844a1f7..d2f2d80bf94 100644 --- a/htdocs/projet/activity/index.php +++ b/htdocs/projet/activity/index.php @@ -502,13 +502,13 @@ if (empty($conf->global->PROJECT_HIDE_TASKS)) print ''.dol_print_date($db->jdate($obj->dateo),'day').''; print ''.dol_print_date($db->jdate($obj->datee),'day').''; print ''; - print convertSecondToTime($obj->planned_workload, 'all'); + print convertSecondToTime($obj->planned_workload, 'allhourmin'); print ''; print ''; print ($obj->taskid>0)?$obj->progress.'%':''; print ''; print ''; - print convertSecondToTime($obj->timespent, 'all'); + print convertSecondToTime($obj->timespent, 'allhourmin'); print ''; print ''; if (! empty($obj->taskid)) From 6b7551c5d279ef943ed01adeb9299230dba01c79 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 27 Feb 2016 19:12:45 +0100 Subject: [PATCH 02/10] Fix: Introduce hidden option to disable feature than hangs when too much data --- htdocs/projet/activity/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/projet/activity/index.php b/htdocs/projet/activity/index.php index d2f2d80bf94..31c1e950ea7 100644 --- a/htdocs/projet/activity/index.php +++ b/htdocs/projet/activity/index.php @@ -375,7 +375,7 @@ if (! empty($conf->global->PROJECT_TASK_TIME_YEAR)) print '
'; -if (empty($conf->global->PROJECT_HIDE_TASKS)) +if (empty($conf->global->PROJECT_HIDE_TASKS) && empty($conf->global->PROJECT_HIDE_LIST_HOME_AREA)) { // Get id of types of contacts for projects (This list never contains a lot of elements) $listofprojectcontacttype=array(); From be9a14443326aba7cf21f4fa3eb89039abe1db67 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 28 Feb 2016 12:43:00 +0100 Subject: [PATCH 03/10] FIX Add a test to show bugged module with a bad declaration of dictionaries to avoid to see clean module to be breaked. --- htdocs/core/lib/admin.lib.php | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/htdocs/core/lib/admin.lib.php b/htdocs/core/lib/admin.lib.php index 12470310ae4..29651b84344 100644 --- a/htdocs/core/lib/admin.lib.php +++ b/htdocs/core/lib/admin.lib.php @@ -591,7 +591,7 @@ function listOfSessions() //$sessValues = 'newtoken|s:32:"1239f7a0c4b899200fe9ca5ea394f307";dol_loginmesg|s:0:"";newtoken|s:32:"1236457104f7ae0f328c2928973f3cb5";dol_loginmesg|s:0:"";token|s:32:"123615ad8d650c5cc4199b9a1a76783f";dol_login|s:5:"admin";dol_authmode|s:8:"dolibarr";dol_tz|s:1:"1";dol_tz_string|s:13:"Europe/Berlin";dol_dst|i:0;dol_dst_observed|s:1:"1";dol_dst_first|s:0:"";dol_dst_second|s:0:"";dol_screenwidth|s:4:"1920";dol_screenheight|s:3:"971";dol_company|s:12:"MyBigCompany";dol_entity|i:1;mainmenu|s:4:"home";leftmenuopened|s:10:"admintools";idmenu|s:0:"";leftmenu|s:10:"admintools";'; if (preg_match('/dol_login/i',$sessValues) && // limit to dolibarr session - (preg_match('/dol_entity\|i:'.$conf->entity.';/i',$sessValues) || preg_match('/dol_entity\|s:([0-9]+):"'.$conf->entity.'"/i',$sessValues)) && // limit to current entity + (preg_match('/dol_entity\|i:'.$conf->entity.';/i',$sessValues) || preg_match('/dol_entity\|s:([0-9]+):"'.$conf->entity.'"/i',$sessValues)) && // limit to current entity preg_match('/dol_company\|s:([0-9]+):"('.$conf->global->MAIN_INFO_SOCIETE_NOM.')"/i',$sessValues)) // limit to company name { $tmp=explode('_', $file); @@ -982,21 +982,29 @@ function complete_dictionary_with_modules(&$taborder,&$tabname,&$tablib,&$tabsql //var_dump($objMod->dictionaries['tabname']); $taborder[] = 0; $tabfieldcheck[] = array(); $tabhelp[] = array(); + $nbtabname=$nbtablib=$nbtabsql=$nbtabsqlsort=$nbtabfield=$nbtabfieldvalue=$nbtabfieldinsert=$nbtabrowid=$nbtabcond=$nbtabfieldcheck=$nbtabhelp=0; foreach($objMod->dictionaries['tabname'] as $val) { $taborder[] = count($tabname)+1; + $nbtabname++; $tabname[] = $val; } - foreach($objMod->dictionaries['tablib'] as $val) $tablib[] = $val; - foreach($objMod->dictionaries['tabsql'] as $val) $tabsql[] = $val; - foreach($objMod->dictionaries['tabsqlsort'] as $val) $tabsqlsort[] = $val; - foreach($objMod->dictionaries['tabfield'] as $val) $tabfield[] = $val; - foreach($objMod->dictionaries['tabfieldvalue'] as $val) $tabfieldvalue[] = $val; - foreach($objMod->dictionaries['tabfieldinsert'] as $val) $tabfieldinsert[] = $val; - foreach($objMod->dictionaries['tabrowid'] as $val) $tabrowid[] = $val; - foreach($objMod->dictionaries['tabcond'] as $val) $tabcond[] = $val; - if (! empty($objMod->dictionaries['tabfieldcheck'])) foreach($objMod->dictionaries['tabfieldcheck'] as $val) $tabfieldcheck[] = $val; - if (! empty($objMod->dictionaries['tabhelp'])) foreach($objMod->dictionaries['tabhelp'] as $val) $tabhelp[] = $val; + foreach($objMod->dictionaries['tablib'] as $val) { $nbtablib++; $tablib[] = $val; } + foreach($objMod->dictionaries['tabsql'] as $val) { $nbtabsql++; $tabsql[] = $val; } + foreach($objMod->dictionaries['tabsqlsort'] as $val) { $nbtabsqlsort++; $tabsqlsort[] = $val; } + foreach($objMod->dictionaries['tabfield'] as $val) { $nbtabfield++; $tabfield[] = $val; } + foreach($objMod->dictionaries['tabfieldvalue'] as $val) { $nbtabfieldvalue++; $tabfieldvalue[] = $val; } + foreach($objMod->dictionaries['tabfieldinsert'] as $val) { $nbtabfieldinsert++; $tabfieldinsert[] = $val; } + foreach($objMod->dictionaries['tabrowid'] as $val) { $nbtabrowid++; $tabrowid[] = $val; } + foreach($objMod->dictionaries['tabcond'] as $val) { $nbtabcond++; $tabcond[] = $val; } + if (! empty($objMod->dictionaries['tabfieldcheck'])) foreach($objMod->dictionaries['tabfieldcheck'] as $val) { $nbtabfieldcheck++; $tabfieldcheck[] = $val; } + if (! empty($objMod->dictionaries['tabhelp'])) foreach($objMod->dictionaries['tabhelp'] as $val) { $nbtabhelp++; $tabhelp[] = $val; } + + if ($nbtabname != $nbtablib || $nbtablib != $nbtabsql || $nbtabsql != $nbtabsqlsort) + { + print 'Error in descriptor of module '.$const_name.'. Array ->dictionaries has not same number of record for key "tabname", "tablib", "tabsql" and "tabsqlsort"'; + //print "$const_name: $nbtabname=$nbtablib=$nbtabsql=$nbtabsqlsort=$nbtabfield=$nbtabfieldvalue=$nbtabfieldinsert=$nbtabrowid=$nbtabcond=$nbtabfieldcheck=$nbtabhelp\n"; + } //foreach($objMod->dictionaries['tabsqlsort'] as $val) $tablib[] = $val; //$tabname = array_merge ($tabname, $objMod->dictionaries['tabname']); //var_dump($tabcond); From 77490bff713824d7d7ccecf7dc2d41dad52b3c51 Mon Sep 17 00:00:00 2001 From: fmarcet Date: Mon, 29 Feb 2016 10:07:48 +0100 Subject: [PATCH 04/10] FIX: Status filter don't work --- htdocs/fourn/facture/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php index a02f2f78440..8704e781a30 100644 --- a/htdocs/fourn/facture/list.php +++ b/htdocs/fourn/facture/list.php @@ -304,7 +304,7 @@ if ($resql) print ''; print ''; $liststatus=array('0'=>$langs->trans("Draft"),'1'=>$langs->trans("Unpaid"), '2'=>$langs->trans("Paid")); - print $form->selectarray('filtre', $liststatus, $search_status, 1); + print $form->selectarray('search_status', $liststatus, $search_status, 1); print ''; print ''; print ''; From 2eaa21ea5c039229e4fb4918b568cac2f174b2fb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 29 Feb 2016 10:50:52 +0100 Subject: [PATCH 05/10] Fix minor css error (pixel size must have "px"). Compatibility with old behaviour. --- htdocs/comm/card.php | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/htdocs/comm/card.php b/htdocs/comm/card.php index e5615aa66ba..2fc860cb116 100644 --- a/htdocs/comm/card.php +++ b/htdocs/comm/card.php @@ -592,7 +592,7 @@ if ($id > 0) if ( ($db->jdate($objp->dp) < ($now - $conf->propal->cloture->warning_delay)) && $objp->fk_statut == 1 ) { print " ".img_warning(); } - print ''.dol_print_date($db->jdate($objp->dp),'day')."\n"; + print ''.dol_print_date($db->jdate($objp->dp),'day')."\n"; print ''.price($objp->total_ht).''; print ''.$propal_static->LibStatut($objp->fk_statut,5).''; $i++; @@ -673,7 +673,7 @@ if ($id > 0) $commande_static->total_tva = $objp->total_tva; $commande_static->total_ttc = $objp->total_ttc; print $commande_static->getNomUrl(1); - print ''.dol_print_date($db->jdate($objp->dc),'day')."\n"; + print ''.dol_print_date($db->jdate($objp->dc),'day')."\n"; print ''.price($objp->total_ht).''; print ''.$commande_static->LibStatut($objp->fk_statut,$objp->facture,5).''; $i++; @@ -737,7 +737,7 @@ if ($id > 0) print $sendingstatic->getNomUrl(1); print ''; if ($objp->date_creation > 0) { - print ''.dol_print_date($db->jdate($objp->date_creation),'day').''; + print ''.dol_print_date($db->jdate($objp->date_creation),'day').''; } else { print '!!!'; } @@ -797,8 +797,8 @@ if ($id > 0) print $contrat->getNomUrl(1,12); print "\n"; print ''.dol_trunc($objp->refsup,12)."\n"; - print ''.dol_print_date($db->jdate($objp->dc),'day')."\n"; - print ''.dol_print_date($db->jdate($objp->dcon),'day')."\n"; + print ''.dol_print_date($db->jdate($objp->dc),'day')."\n"; + print ''.dol_print_date($db->jdate($objp->dcon),'day')."\n"; print ' '; print ''; $contrat->fetch_lines(); @@ -855,9 +855,9 @@ if ($id > 0) print ""; print ''.img_object($langs->trans("ShowPropal"),"propal").' '.$objp->ref.''."\n"; - //print ''.dol_print_date($db->jdate($objp->startdate)).''."\n"; - print ''.convertSecondToTime($objp->duration).''."\n"; - print ''.$fichinter_static->getLibStatut(5).''."\n"; + //print ''.dol_print_date($db->jdate($objp->startdate)).''."\n"; + print ''.convertSecondToTime($objp->duration).''."\n"; + print ''.$fichinter_static->getLibStatut(5).''."\n"; print ''; $var=!$var; $i++; @@ -907,7 +907,7 @@ if ($id > 0) $tableaushown=1; print ''; - print ''; + print ''; print ''; @@ -929,15 +929,24 @@ if ($id > 0) print ''; if ($objp->df > 0) { - print ''; + print ''; } else { print ''; } - print ''; + print ''; - print ''; + if (! empty($conf->global->MAIN_SHOW_PRICE_WITH_TAX_IN_SUMMARIES)) + { + print ''; + } + + print ''; print "\n"; $i++; } From 10d04e63c1c1a59df280c6ee1dc33ec873dde6ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 29 Feb 2016 22:59:08 +0100 Subject: [PATCH 06/10] Update bonprelevement.class.php --- htdocs/compta/prelevement/class/bonprelevement.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php index 3f813e00938..62a2b01dd58 100644 --- a/htdocs/compta/prelevement/class/bonprelevement.class.php +++ b/htdocs/compta/prelevement/class/bonprelevement.class.php @@ -1261,6 +1261,7 @@ class BonPrelevement extends CommonObject $dateTime_ECMA = dol_print_date($date_actu, '%Y-%m-%dT%H:%M:%S'); $fileDebiteurSection = ''; $fileEmetteurSection = ''; + $ListOfFactures = ''; $i = 0; $j = 0; $this->total = 0; @@ -1277,7 +1278,7 @@ class BonPrelevement extends CommonObject while ($j < $num) { $objfac = $this->db->fetch_object($resql); - $ListOfFactures = $ListOfFactures . $objfac->fac . ","; + $ListOfFactures .= ($j>0?',':'') . $objfac->fac; $j++; } } From e63ab857d8b91af98664768b3a43b1cb0cdec621 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Garci=CC=81a=20de=20La=20Fuente?= Date: Wed, 2 Mar 2016 11:21:56 +0100 Subject: [PATCH 07/10] FIX #4583 Incorrect call of Categories::containing throws a DoliDB error Close #4583 --- htdocs/categories/class/categorie.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/categories/class/categorie.class.php b/htdocs/categories/class/categorie.class.php index 18f13a44813..e1e44a475ed 100644 --- a/htdocs/categories/class/categorie.class.php +++ b/htdocs/categories/class/categorie.class.php @@ -1241,7 +1241,7 @@ class Categorie extends CommonObject $sql = "SELECT ct.fk_categorie, c.label, c.rowid"; $sql .= " FROM " . MAIN_DB_PREFIX . "categorie_" . $this->MAP_CAT_TABLE[$type] . " as ct, " . MAIN_DB_PREFIX . "categorie as c"; - $sql .= " WHERE ct.fk_categorie = c.rowid AND ct.fk_" . $this->MAP_CAT_FK[$type] . " = " . $id . " AND c.type = " . $this->MAP_ID[$type]; + $sql .= " WHERE ct.fk_categorie = c.rowid AND ct.fk_" . $this->MAP_CAT_FK[$type] . " = " . (int) $id . " AND c.type = " . $this->MAP_ID[$type]; $sql .= " AND c.entity IN (" . getEntity( 'category', 1 ) . ")"; $res = $this->db->query($sql); From 123d6fb6e57730ab0ac33d69d0e2664de7f501ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Garci=CC=81a=20de=20La=20Fuente?= Date: Wed, 2 Mar 2016 11:29:42 +0100 Subject: [PATCH 08/10] FIX #4425 Missing "VAT" translation in supplier order popup Close #4425 --- htdocs/fourn/class/fournisseur.commande.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index 7685c715494..e7777f82cd5 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -583,7 +583,7 @@ class CommandeFournisseur extends CommonOrder if (! empty($this->total_ht)) $label.= '
' . $langs->trans('AmountHT') . ': ' . price($this->total_ht, 0, $langs, 0, -1, -1, $conf->currency); if (! empty($this->total_tva)) - $label.= '
' . $langs->trans('TVA') . ': ' . price($this->total_tva, 0, $langs, 0, -1, -1, $conf->currency); + $label.= '
' . $langs->trans('VAT') . ': ' . price($this->total_tva, 0, $langs, 0, -1, -1, $conf->currency); if (! empty($this->total_ttc)) $label.= '
' . $langs->trans('AmountTTC') . ': ' . price($this->total_ttc, 0, $langs, 0, -1, -1, $conf->currency); From aa457346835b3fb0379b875882c47dfed387cae5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Garci=CC=81a=20de=20La=20Fuente?= Date: Wed, 2 Mar 2016 11:38:40 +0100 Subject: [PATCH 09/10] FIX #4434 Weird behaviour when enabling multiprices Close #4434 --- htdocs/product/admin/product.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/product/admin/product.php b/htdocs/product/admin/product.php index c188fb94973..b8c07df87a5 100644 --- a/htdocs/product/admin/product.php +++ b/htdocs/product/admin/product.php @@ -56,7 +56,9 @@ if ($conf->global->MAIN_FEATURES_LEVEL >= 2) } // Clean param -if (! empty($conf->global->PRODUIT_MULTIPRICES) && empty($conf->global->PRODUIT_MULTIPRICES_LIMIT)) $conf->global->PRODUIT_MULTIPRICES_LIMIT = 5; +if (! empty($conf->global->PRODUIT_MULTIPRICES) && empty($conf->global->PRODUIT_MULTIPRICES_LIMIT)) { + dolibarr_set_const($db, 'PRODUIT_MULTIPRICES_LIMIT', 5, 'chaine', 0, '', $conf->entity); +} From 6f5481896b7d0926fc4a669cdce84d24f71a0545 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Garci=CC=81a=20de=20La=20Fuente?= Date: Wed, 2 Mar 2016 12:38:34 +0100 Subject: [PATCH 10/10] FIX #4453 SEPA Direct Debit generated XML shows a trailing comma in RmtInf field Close #4453 --- .../prelevement/class/bonprelevement.class.php | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php index 62a2b01dd58..610fe257732 100644 --- a/htdocs/compta/prelevement/class/bonprelevement.class.php +++ b/htdocs/compta/prelevement/class/bonprelevement.class.php @@ -1261,28 +1261,25 @@ class BonPrelevement extends CommonObject $dateTime_ECMA = dol_print_date($date_actu, '%Y-%m-%dT%H:%M:%S'); $fileDebiteurSection = ''; $fileEmetteurSection = ''; - $ListOfFactures = ''; $i = 0; - $j = 0; $this->total = 0; /* * section Debiteur (sepa Debiteurs bloc lines) */ + $tmp_invoices = array(); + $sql = "SELECT f.facnumber as fac FROM ".MAIN_DB_PREFIX."prelevement_lignes as pl, ".MAIN_DB_PREFIX."facture as f, ".MAIN_DB_PREFIX."prelevement_facture as pf, ".MAIN_DB_PREFIX."societe as soc, ".MAIN_DB_PREFIX."c_country as p, ".MAIN_DB_PREFIX."societe_rib as rib WHERE pl.fk_prelevement_bons = ".$this->id." AND pl.rowid = pf.fk_prelevement_lignes AND pf.fk_facture = f.rowid AND soc.fk_pays = p.rowid AND soc.rowid = f.fk_soc AND rib.fk_soc = f.fk_soc AND rib.default_rib = 1"; $resql=$this->db->query($sql); - if ($resql) - { - $num = $this->db->num_rows($resql); - while ($j < $num) - { - $objfac = $this->db->fetch_object($resql); - $ListOfFactures .= ($j>0?',':'') . $objfac->fac; - $j++; + if ($resql) { + while ($objfac = $this->db->fetch_object($resql)) { + $tmp_invoices[] = $objfac->fac; } } + $ListOfFactures = implode($tmp_invoices); + $sql = "SELECT soc.code_client as code, soc.address, soc.zip, soc.town, c.code as country_code,"; $sql.= " pl.client_nom as nom, pl.code_banque as cb, pl.code_guichet as cg, pl.number as cc, pl.amount as somme,"; $sql.= " f.facnumber as fac, pf.fk_facture as idfac, rib.datec, rib.iban_prefix as iban, rib.bic as bic, rib.rowid as drum";
'.$langs->trans("LastCustomersBills",($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllBills").' '.$num.''; print ''; print '
'.$langs->trans("LastCustomersBills",($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllBills").' '.$num.''.img_picto($langs->trans("Statistics"),'stats').'
'.dol_print_date($db->jdate($objp->df),'day').''.dol_print_date($db->jdate($objp->df),'day').'!!!'.price($objp->total_ht).''; + print price($objp->total_ht); + print ''.($facturestatic->LibStatut($objp->paye,$objp->statut,5,$objp->am)).''; + print price($objp->total_ttc); + print ''.($facturestatic->LibStatut($objp->paye,$objp->statut,5,$objp->am)).'