diff --git a/ChangeLog b/ChangeLog index fc959306666..0badc99c911 100644 --- a/ChangeLog +++ b/ChangeLog @@ -28,6 +28,8 @@ Fix: TCPDF error file not found in member card generation. Fix: [ bug #1380 ] Customer invoices are not grouped in company results report. Fix: [ bug #1393 ] PHP Warning when creating a supplier invoice. Fix: [ bug #1399 ] [pgsql] Silent warning when setting a propal as "facturée" in propal.php +Fix: When number reach 9999 with default numbering module, next number + will be 10000 instead of 0000 and error. Fix: element page on project give wrong href link ***** ChangeLog for 3.5.2 compared to 3.5.1 ***** diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index 616244767d1..62e78ae95e2 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -522,9 +522,7 @@ if (GETPOST('actionadd') || GETPOST('actionmodify')) $result = $db->query($sql); if ($result) // Add is ok { - //$oldid=$id; - //$_POST=array('id'=>$oldid); // Clean $_POST array, we keep only - //$_GET["id"]=$_POST["id"]; // Force affichage dictionnaire en cours d'edition + $_POST=array('id'=>$id); // Clean $_POST array, we keep only } else { diff --git a/htdocs/core/db/pgsql.class.php b/htdocs/core/db/pgsql.class.php index cb63f012114..010fcf191cc 100644 --- a/htdocs/core/db/pgsql.class.php +++ b/htdocs/core/db/pgsql.class.php @@ -214,7 +214,8 @@ class DoliDBPgsql extends DoliDB // nuke unsigned $line=preg_replace('/(int\w+|smallint)\s+unsigned/i','\\1',$line); - + $line=preg_replace('/as signed/i','as integer',$line); + // blob -> text $line=preg_replace('/\w*blob/i','text',$line); diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php index 1a090087bb4..2bd3c757e47 100644 --- a/htdocs/core/lib/functions2.lib.php +++ b/htdocs/core/lib/functions2.lib.php @@ -536,7 +536,7 @@ function array2table($data,$tableMarkup=1,$tableoptions='',$troptions='',$tdopti * @param Societe $objsoc The company that own the object we need a counter for * @param string $date Date to use for the {y},{m},{d} tags. * @param string $mode 'next' for next value or 'last' for last value - * @return string New value + * @return string New value (numeric) or error message */ function get_next_value($db,$mask,$table,$field,$where='',$objsoc='',$date='',$mode='next') { @@ -798,6 +798,12 @@ function get_next_value($db,$mask,$table,$field,$where='',$objsoc='',$date='',$m { $counter++; + // If value for $counter has a length higher than $maskcounter chars + if ($counter >= pow(10, dol_strlen($maskcounter))) + { + $counter='ErrorMaxNumberReachForThisMask'; + } + if (! empty($maskrefclient_maskcounter)) { //print "maskrefclient_maskcounter=".$maskrefclient_maskcounter." maskwithnocode=".$maskwithnocode." maskrefclient=".$maskrefclient."\n
"; @@ -839,6 +845,7 @@ function get_next_value($db,$mask,$table,$field,$where='',$objsoc='',$date='',$m $maskrefclient_counter = $maskrefclient_obj->val; } else dol_print_error($db); + if (empty($maskrefclient_counter) || preg_match('/[^0-9]/i',$maskrefclient_counter)) $maskrefclient_counter=$maskrefclient_maskoffset; $maskrefclient_counter++; } diff --git a/htdocs/core/modules/commande/mod_commande_marbre.php b/htdocs/core/modules/commande/mod_commande_marbre.php index b26f265cb25..b68dbc1644c 100644 --- a/htdocs/core/modules/commande/mod_commande_marbre.php +++ b/htdocs/core/modules/commande/mod_commande_marbre.php @@ -71,7 +71,7 @@ class mod_commande_marbre extends ModeleNumRefCommandes $coyymm=''; $max=''; $posindice=8; - $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql.= " FROM ".MAIN_DB_PREFIX."commande"; $sql.= " WHERE ref LIKE '".$this->prefix."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -105,7 +105,7 @@ class mod_commande_marbre extends ModeleNumRefCommandes // D'abord on recupere la valeur max $posindice=8; - $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql.= " FROM ".MAIN_DB_PREFIX."commande"; $sql.= " WHERE ref like '".$this->prefix."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -126,7 +126,9 @@ class mod_commande_marbre extends ModeleNumRefCommandes //$date=time(); $date=$object->date; $yymm = strftime("%y%m",$date); - $num = sprintf("%04s",$max+1); + + if ($max >= (pow(10, 4) - 1)) $num=$max+1; // If counter > 9999, we do not format on 4 chars, we take number as it is + else $num = sprintf("%04s",$max+1); dol_syslog("mod_commande_marbre::getNextValue return ".$this->prefix.$yymm."-".$num); return $this->prefix.$yymm."-".$num; diff --git a/htdocs/core/modules/contract/mod_contract_serpis.php b/htdocs/core/modules/contract/mod_contract_serpis.php index d819fb06af8..cd21c5164ac 100644 --- a/htdocs/core/modules/contract/mod_contract_serpis.php +++ b/htdocs/core/modules/contract/mod_contract_serpis.php @@ -69,7 +69,7 @@ class mod_contract_serpis extends ModelNumRefContracts $coyymm=''; $max=''; $posindice=8; - $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql.= " FROM ".MAIN_DB_PREFIX."contrat"; $sql.= " WHERE ref LIKE '".$this->prefix."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -102,7 +102,7 @@ class mod_contract_serpis extends ModelNumRefContracts global $db,$conf; $posindice=8; - $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql.= " FROM ".MAIN_DB_PREFIX."contrat"; $sql.= " WHERE ref like '".$this->prefix."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -122,7 +122,9 @@ class mod_contract_serpis extends ModelNumRefContracts $date=$contract->date_contrat; $yymm = strftime("%y%m",$date); - $num = sprintf("%04s",$max+1); + + if ($max >= (pow(10, 4) - 1)) $num=$max+1; // If counter > 9999, we do not format on 4 chars, we take number as it is + else $num = sprintf("%04s",$max+1); dol_syslog("mod_contract_serpis::getNextValue return ".$this->prefix.$yymm."-".$num); return $this->prefix.$yymm."-".$num; diff --git a/htdocs/core/modules/expedition/mod_expedition_safor.php b/htdocs/core/modules/expedition/mod_expedition_safor.php index 13fe06aded1..ceec6107e58 100644 --- a/htdocs/core/modules/expedition/mod_expedition_safor.php +++ b/htdocs/core/modules/expedition/mod_expedition_safor.php @@ -69,7 +69,7 @@ class mod_expedition_safor extends ModelNumRefExpedition $coyymm=''; $max=''; $posindice=8; - $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql.= " FROM ".MAIN_DB_PREFIX."expedition"; $sql.= " WHERE ref LIKE '".$this->prefix."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -102,7 +102,7 @@ class mod_expedition_safor extends ModelNumRefExpedition global $db,$conf; $posindice=8; - $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql.= " FROM ".MAIN_DB_PREFIX."expedition"; $sql.= " WHERE ref like '".$this->prefix."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -122,7 +122,9 @@ class mod_expedition_safor extends ModelNumRefExpedition $date=time(); $yymm = strftime("%y%m",$date); - $num = sprintf("%04s",$max+1); + + if ($max >= (pow(10, 4) - 1)) $num=$max+1; // If counter > 9999, we do not format on 4 chars, we take number as it is + else $num = sprintf("%04s",$max+1); dol_syslog("mod_expedition_safor::getNextValue return ".$this->prefix.$yymm."-".$num); return $this->prefix.$yymm."-".$num; diff --git a/htdocs/core/modules/facture/mod_facture_mars.php b/htdocs/core/modules/facture/mod_facture_mars.php index 852d499e66e..b75133215c8 100644 --- a/htdocs/core/modules/facture/mod_facture_mars.php +++ b/htdocs/core/modules/facture/mod_facture_mars.php @@ -75,7 +75,7 @@ class mod_facture_mars extends ModeleNumRefFactures $fayymm=''; $max=''; $posindice=8; - $sql = "SELECT MAX(SUBSTRING(facnumber FROM ".$posindice.")) as max"; // This is standard SQL + $sql = "SELECT MAX(CAST(SUBSTRING(facnumber FROM ".$posindice.") AS SIGNED) as max"; // This is standard SQL $sql.= " FROM ".MAIN_DB_PREFIX."facture"; $sql.= " WHERE facnumber LIKE '".$this->prefixinvoice."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -138,7 +138,7 @@ class mod_facture_mars extends ModeleNumRefFactures // D'abord on recupere la valeur max $posindice=8; - $sql = "SELECT MAX(SUBSTRING(facnumber FROM ".$posindice.")) as max"; // This is standard SQL + $sql = "SELECT MAX(CAST(SUBSTRING(facnumber FROM ".$posindice.") AS SIGNED)) as max"; // This is standard SQL $sql.= " FROM ".MAIN_DB_PREFIX."facture"; $sql.= " WHERE facnumber LIKE '".$prefix."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -159,7 +159,8 @@ class mod_facture_mars extends ModeleNumRefFactures if ($mode == 'last') { - $num = sprintf("%04s",$max); + if ($max >= (pow(10, 4) - 1)) $num=$max; // If counter > 9999, we do not format on 4 chars, we take number as it is + else $num = sprintf("%04s",$max); $ref=''; $sql = "SELECT facnumber as ref"; @@ -182,7 +183,9 @@ class mod_facture_mars extends ModeleNumRefFactures { $date=$facture->date; // This is invoice date (not creation date) $yymm = strftime("%y%m",$date); - $num = sprintf("%04s",$max+1); + + if ($max >= (pow(10, 4) - 1)) $num=$max+1; // If counter > 9999, we do not format on 4 chars, we take number as it is + else $num = sprintf("%04s",$max+1); dol_syslog(get_class($this)."::getNextValue return ".$prefix.$yymm."-".$num); return $prefix.$yymm."-".$num; diff --git a/htdocs/core/modules/facture/mod_facture_terre.php b/htdocs/core/modules/facture/mod_facture_terre.php index 799dc1da204..2d62132e677 100644 --- a/htdocs/core/modules/facture/mod_facture_terre.php +++ b/htdocs/core/modules/facture/mod_facture_terre.php @@ -73,7 +73,7 @@ class mod_facture_terre extends ModeleNumRefFactures $fayymm=''; $max=''; $posindice=8; - $sql = "SELECT MAX(SUBSTRING(facnumber FROM ".$posindice.")) as max"; // This is standard SQL + $sql = "SELECT MAX(CAST(SUBSTRING(facnumber FROM ".$posindice.") AS SIGNED)) as max"; // This is standard SQL $sql.= " FROM ".MAIN_DB_PREFIX."facture"; $sql.= " WHERE facnumber LIKE '".$this->prefixinvoice."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -95,7 +95,7 @@ class mod_facture_terre extends ModeleNumRefFactures $fayymm=''; $posindice=8; - $sql = "SELECT MAX(SUBSTRING(facnumber FROM ".$posindice.")) as max"; // This is standard SQL + $sql = "SELECT MAX(CAST(SUBSTRING(facnumber FROM ".$posindice.") AS SIGNED)) as max"; // This is standard SQL $sql.= " FROM ".MAIN_DB_PREFIX."facture"; $sql.= " WHERE facnumber LIKE '".$this->prefixcreditnote."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -116,7 +116,7 @@ class mod_facture_terre extends ModeleNumRefFactures $fayymm=''; $posindice=8; - $sql = "SELECT MAX(SUBSTRING(facnumber FROM ".$posindice.")) as max"; // This is standard SQL + $sql = "SELECT MAX(CAST(SUBSTRING(facnumber FROM ".$posindice.") AS SIGNED)) as max"; // This is standard SQL $sql.= " FROM ".MAIN_DB_PREFIX."facture"; $sql.= " WHERE facnumber LIKE '".$this->prefixdeposit."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -154,7 +154,7 @@ class mod_facture_terre extends ModeleNumRefFactures // D'abord on recupere la valeur max $posindice=8; - $sql = "SELECT MAX(SUBSTRING(facnumber FROM ".$posindice.")) as max"; // This is standard SQL + $sql = "SELECT MAX(CAST(SUBSTRING(facnumber FROM ".$posindice.") AS SIGNED)) as max"; // This is standard SQL $sql.= " FROM ".MAIN_DB_PREFIX."facture"; $sql.= " WHERE facnumber LIKE '".$prefix."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -175,7 +175,8 @@ class mod_facture_terre extends ModeleNumRefFactures if ($mode == 'last') { - $num = sprintf("%04s",$max); + if ($max >= (pow(10, 4) - 1)) $num=$max; // If counter > 9999, we do not format on 4 chars, we take number as it is + else $num = sprintf("%04s",$max); $ref=''; $sql = "SELECT facnumber as ref"; @@ -198,7 +199,9 @@ class mod_facture_terre extends ModeleNumRefFactures { $date=$facture->date; // This is invoice date (not creation date) $yymm = strftime("%y%m",$date); - $num = sprintf("%04s",$max+1); + + if ($max >= (pow(10, 4) - 1)) $num=$max+1; // If counter > 9999, we do not format on 4 chars, we take number as it is + else $num = sprintf("%04s",$max+1); dol_syslog(get_class($this)."::getNextValue return ".$prefix.$yymm."-".$num); return $prefix.$yymm."-".$num; diff --git a/htdocs/core/modules/fichinter/mod_pacific.php b/htdocs/core/modules/fichinter/mod_pacific.php index 227d04f5ba5..38ef8b401d6 100644 --- a/htdocs/core/modules/fichinter/mod_pacific.php +++ b/htdocs/core/modules/fichinter/mod_pacific.php @@ -72,7 +72,7 @@ class mod_pacific extends ModeleNumRefFicheinter $fayymm=''; $max=''; $posindice=8; - $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql.= " FROM ".MAIN_DB_PREFIX."fichinter"; $sql.= " WHERE ref like '".$this->prefix."____-%'"; $sql.= " WHERE entity = ".$conf->entity; @@ -108,7 +108,7 @@ class mod_pacific extends ModeleNumRefFicheinter // D'abord on recupere la valeur max $posindice=8; - $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql.= " FROM ".MAIN_DB_PREFIX."fichinter"; $sql.= " WHERE ref LIKE '".$this->prefix."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -124,7 +124,9 @@ class mod_pacific extends ModeleNumRefFicheinter //$date=time(); $date=$object->datec; $yymm = strftime("%y%m",$date); - $num = sprintf("%04s",$max+1); + + if ($max >= (pow(10, 4) - 1)) $num=$max+1; // If counter > 9999, we do not format on 4 chars, we take number as it is + else $num = sprintf("%04s",$max+1); return $this->prefix.$yymm."-".$num; } diff --git a/htdocs/core/modules/livraison/mod_livraison_jade.php b/htdocs/core/modules/livraison/mod_livraison_jade.php index f3835620896..e1b749bbf2f 100644 --- a/htdocs/core/modules/livraison/mod_livraison_jade.php +++ b/htdocs/core/modules/livraison/mod_livraison_jade.php @@ -78,7 +78,7 @@ class mod_livraison_jade extends ModeleNumRefDeliveryOrder $fayymm=''; $max=''; $posindice=8; - $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; // This is standard SQL + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; // This is standard SQL $sql.= " FROM ".MAIN_DB_PREFIX."livraison"; $sql.= " WHERE ref LIKE '".$this->prefix."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -112,7 +112,7 @@ class mod_livraison_jade extends ModeleNumRefDeliveryOrder // D'abord on recupere la valeur max $posindice=8; - $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; // This is standard SQL + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; // This is standard SQL $sql.= " FROM ".MAIN_DB_PREFIX."livraison"; $sql.= " WHERE ref LIKE '".$this->prefix."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -134,7 +134,9 @@ class mod_livraison_jade extends ModeleNumRefDeliveryOrder $date=$object->date_delivery; if (empty($date)) $date=dol_now(); $yymm = strftime("%y%m",$date); - $num = sprintf("%04s",$max+1); + + if ($max >= (pow(10, 4) - 1)) $num=$max+1; // If counter > 9999, we do not format on 4 chars, we take number as it is + else $num = sprintf("%04s",$max+1); dol_syslog("mod_livraison_jade::getNextValue return ".$this->prefix.$yymm."-".$num); return $this->prefix.$yymm."-".$num; diff --git a/htdocs/core/modules/project/mod_project_simple.php b/htdocs/core/modules/project/mod_project_simple.php index cce6e638336..686fa74dc43 100644 --- a/htdocs/core/modules/project/mod_project_simple.php +++ b/htdocs/core/modules/project/mod_project_simple.php @@ -72,7 +72,7 @@ class mod_project_simple extends ModeleNumRefProjects $coyymm=''; $max=''; $posindice=8; - $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql.= " FROM ".MAIN_DB_PREFIX."projet"; $sql.= " WHERE ref LIKE '".$this->prefix."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -108,7 +108,7 @@ class mod_project_simple extends ModeleNumRefProjects // D'abord on recupere la valeur max $posindice=8; - $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql.= " FROM ".MAIN_DB_PREFIX."projet"; $sql.= " WHERE ref like '".$this->prefix."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -130,7 +130,9 @@ class mod_project_simple extends ModeleNumRefProjects //$yymm = strftime("%y%m",time()); $yymm = strftime("%y%m",$date); - $num = sprintf("%04s",$max+1); + + if ($max >= (pow(10, 4) - 1)) $num=$max+1; // If counter > 9999, we do not format on 4 chars, we take number as it is + else $num = sprintf("%04s",$max+1); dol_syslog("mod_project_simple::getNextValue return ".$this->prefix.$yymm."-".$num); return $this->prefix.$yymm."-".$num; diff --git a/htdocs/core/modules/project/task/mod_task_simple.php b/htdocs/core/modules/project/task/mod_task_simple.php index 13c23cb4f73..8d6ea553519 100644 --- a/htdocs/core/modules/project/task/mod_task_simple.php +++ b/htdocs/core/modules/project/task/mod_task_simple.php @@ -72,7 +72,7 @@ class mod_task_simple extends ModeleNumRefTask $coyymm=''; $max=''; $posindice=8; - $sql = "SELECT MAX(SUBSTRING(task.ref FROM " . $posindice . ")) as max"; + $sql = "SELECT MAX(CAST(SUBSTRING(task.ref FROM " . $posindice . ") AS SIGNED)) as max"; $sql .= " FROM " . MAIN_DB_PREFIX . "projet_task AS task, "; $sql .= MAIN_DB_PREFIX . "projet AS project WHERE task.fk_projet=project.rowid"; $sql .= " AND task.ref LIKE '" . $this->prefix . "____-%'"; @@ -109,7 +109,7 @@ class mod_task_simple extends ModeleNumRefTask // D'abord on recupere la valeur max $posindice=8; - $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql.= " FROM ".MAIN_DB_PREFIX."projet_task"; $sql.= " WHERE ref like '".$this->prefix."____-%'"; @@ -130,7 +130,9 @@ class mod_task_simple extends ModeleNumRefTask //$yymm = strftime("%y%m",time()); $yymm = strftime("%y%m",$date); - $num = sprintf("%04s",$max+1); + + if ($max >= (pow(10, 4) - 1)) $num=$max+1; // If counter > 9999, we do not format on 4 chars, we take number as it is + else $num = sprintf("%04s",$max+1); dol_syslog("mod_task_simple::getNextValue return ".$this->prefix.$yymm."-".$num); return $this->prefix.$yymm."-".$num; diff --git a/htdocs/core/modules/propale/mod_propale_marbre.php b/htdocs/core/modules/propale/mod_propale_marbre.php index d14c176e08b..5d8b8e169df 100644 --- a/htdocs/core/modules/propale/mod_propale_marbre.php +++ b/htdocs/core/modules/propale/mod_propale_marbre.php @@ -73,7 +73,7 @@ class mod_propale_marbre extends ModeleNumRefPropales $pryymm=''; $max=''; $posindice=8; - $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql.= " FROM ".MAIN_DB_PREFIX."propal"; $sql.= " WHERE ref LIKE '".$this->prefix."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -110,7 +110,7 @@ class mod_propale_marbre extends ModeleNumRefPropales // D'abord on recupere la valeur max $posindice=8; - $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; // This is standard SQL + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; // This is standard SQL $sql.= " FROM ".MAIN_DB_PREFIX."propal"; $sql.= " WHERE ref LIKE '".$this->prefix."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -130,7 +130,9 @@ class mod_propale_marbre extends ModeleNumRefPropales $date = time(); $yymm = strftime("%y%m",$date); - $num = sprintf("%04s",$max+1); + + if ($max >= (pow(10, 4) - 1)) $num=$max+1; // If counter > 9999, we do not format on 4 chars, we take number as it is + else $num = sprintf("%04s",$max+1); dol_syslog("mod_propale_marbre::getNextValue return ".$this->prefix.$yymm."-".$num); return $this->prefix.$yymm."-".$num; @@ -150,4 +152,4 @@ class mod_propale_marbre extends ModeleNumRefPropales } -?> +?> \ No newline at end of file diff --git a/htdocs/core/modules/societe/mod_codeclient_monkey.php b/htdocs/core/modules/societe/mod_codeclient_monkey.php index 1e55a6256f3..4c24f5691a5 100644 --- a/htdocs/core/modules/societe/mod_codeclient_monkey.php +++ b/htdocs/core/modules/societe/mod_codeclient_monkey.php @@ -119,7 +119,7 @@ class mod_codeclient_monkey extends ModeleThirdPartyCode // D'abord on recupere la valeur max (reponse immediate car champ indexe) $posindice=8; - $sql = "SELECT MAX(SUBSTRING(".$field." FROM ".$posindice.")) as max"; // This is standard SQL + $sql = "SELECT MAX(CAST(SUBSTRING(".$field." FROM ".$posindice.") AS SIGNED)) as max"; // This is standard SQL $sql.= " FROM ".MAIN_DB_PREFIX."societe"; $sql.= " WHERE ".$field." LIKE '".$prefix."____-%'"; $sql.= " AND entity IN (".getEntity('societe', 1).")"; @@ -139,7 +139,9 @@ class mod_codeclient_monkey extends ModeleThirdPartyCode $date = dol_now(); $yymm = strftime("%y%m",$date); - $num = sprintf("%04s",$max+1); + + if ($max >= (pow(10, 4) - 1)) $num=$max+1; // If counter > 9999, we do not format on 4 chars, we take number as it is + else $num = sprintf("%04s",$max+1); dol_syslog(get_class($this)."::getNextValue return ".$prefix.$yymm."-".$num); return $prefix.$yymm."-".$num; diff --git a/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_cactus.php b/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_cactus.php index 0084a951882..e35226b20fd 100644 --- a/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_cactus.php +++ b/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_cactus.php @@ -73,7 +73,7 @@ class mod_facture_fournisseur_cactus extends ModeleNumRefSuppliersInvoices $siyymm=''; $max=''; $posindice=8; - $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn"; $sql.= " WHERE ref LIKE '".$this->prefixinvoice."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -112,7 +112,7 @@ class mod_facture_fournisseur_cactus extends ModeleNumRefSuppliersInvoices // D'abord on recupere la valeur max $posindice=8; - $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; // This is standard SQL + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; // This is standard SQL $sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn"; $sql.= " WHERE ref LIKE '".$prefix."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -133,7 +133,8 @@ class mod_facture_fournisseur_cactus extends ModeleNumRefSuppliersInvoices if ($mode == 'last') { - $num = sprintf("%04s",$max); + if ($max >= (pow(10, 4) - 1)) $num=$max; // If counter > 9999, we do not format on 4 chars, we take number as it is + else $num = sprintf("%04s",$max); $ref=''; $sql = "SELECT ref as ref"; @@ -156,7 +157,9 @@ class mod_facture_fournisseur_cactus extends ModeleNumRefSuppliersInvoices { $date=$object->date; // This is invoice date (not creation date) $yymm = strftime("%y%m",$date); - $num = sprintf("%04s",$max+1); + + if ($max >= (pow(10, 4) - 1)) $num=$max+1; // If counter > 9999, we do not format on 4 chars, we take number as it is + else $num = sprintf("%04s",$max+1); dol_syslog(get_class($this)."::getNextValue return ".$prefix.$yymm."-".$num); return $prefix.$yymm."-".$num; diff --git a/htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php b/htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php index 66c07355b29..fea7c4f21e0 100644 --- a/htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php +++ b/htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php @@ -73,7 +73,7 @@ class mod_commande_fournisseur_muguet extends ModeleNumRefSuppliersOrders $coyymm=''; $max=''; $posindice=8; - $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur"; $sql.= " WHERE ref LIKE '".$this->prefix."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -108,7 +108,7 @@ class mod_commande_fournisseur_muguet extends ModeleNumRefSuppliersOrders // D'abord on recupere la valeur max $posindice=8; - $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; + $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur"; $sql.= " WHERE ref like '".$this->prefix."____-%'"; $sql.= " AND entity = ".$conf->entity; @@ -125,7 +125,9 @@ class mod_commande_fournisseur_muguet extends ModeleNumRefSuppliersOrders $date=$object->date_commande; // Not always defined if (empty($date)) $date=$object->date; // Creation date is order date for suppliers orders $yymm = strftime("%y%m",$date); - $num = sprintf("%04s",$max+1); + + if ($max >= (pow(10, 4) - 1)) $num=$max+1; // If counter > 9999, we do not format on 4 chars, we take number as it is + else $num = sprintf("%04s",$max+1); return $this->prefix.$yymm."-".$num; }