diff --git a/htdocs/includes/modules/societe/mod_codeclient_tigre.php b/htdocs/includes/modules/societe/mod_codeclient_tigre.php
index 6ce9d6d68df..e3449f8dd9f 100644
--- a/htdocs/includes/modules/societe/mod_codeclient_tigre.php
+++ b/htdocs/includes/modules/societe/mod_codeclient_tigre.php
@@ -47,9 +47,7 @@ class mod_codeclient_tigre extends ModeleThirdPartyCode
var $searchcode; // String de recherche
var $numbitcounter; // Nombre de chiffres du compteur
- var $substrBegin;
- var $substrEnd;
- var $prefixIsRequired;
+ var $prefixIsRequired; // Le champ préfix du tiers doit etre renseigné quand on utilise {pre}
/** \brief Constructeur classe
@@ -131,7 +129,6 @@ class mod_codeclient_tigre extends ModeleThirdPartyCode
global $db,$conf;
$mask = $this->buildMask($objsoc,$type);
- $count = 0;
if ($type == 0)
{
@@ -144,29 +141,28 @@ class mod_codeclient_tigre extends ModeleThirdPartyCode
// On récupère la valeur max (réponse immédiate car champ indéxé)
$posindice = $this->numbitcounter;
- if ($this->substrEnd > 0) $substrEnd = ',-'.$this->substrEnd;
- $searchyy='';
- $sql = "SELECT MAX(".$field.")";
+
+ $sql = "SELECT MAX(0+SUBSTRING(".$field.",-".$posindice."))";
$sql.= " FROM ".MAIN_DB_PREFIX."societe";
$sql.= " WHERE ".$field." REGEXP '^".$this->searchcode."$'";
+
$resql=$db->query($sql);
+
if ($resql)
{
$row = $db->fetch_row($resql);
- //print 'row='.$row[0].'
';
- //print 'begin='.$this->substrBegin.'
';
- //print 'end='.$this->substrEnd.'
';
- if ($row[0]) $count = substr($row[0],$this->substrBegin.$substrEnd);
+ $max = $row[0];
}
-
- // On applique le nombre de chiffres du compteur
- $arg = '%0'.$this->numbitcounter.'s';
- $count = sprintf($arg,$count+1);
- $mask = eregi_replace('\{0+\}',$count,$mask);
-
- dolibarr_syslog("mod_codeclient_tigre::getNextValue return ".$mask);
- //print 'count='.$count.'
';
- return $mask;
+
+ // On applique le nombre de chiffres du compteur
+ $arg = '%0'.$this->numbitcounter.'s';
+
+ $num = sprintf($arg,$max+1);
+ $mask = eregi_replace('\{0+\}',$num,$mask);
+
+ dolibarr_syslog("mod_codeclient_tigre::getNextValue return ".$mask);
+
+ return $mask;
}
/** \brief Construction du masque de numérotation
@@ -177,7 +173,7 @@ class mod_codeclient_tigre extends ModeleThirdPartyCode
function buildMask($objsoc=0,$type=-1)
{
global $conf;
-
+
if ($type==0)
{
$mask = $conf->global->CODE_TIGRE_MASK_CUSTOMER;
@@ -202,15 +198,7 @@ class mod_codeclient_tigre extends ModeleThirdPartyCode
if ($maskElement[$i] == '{dd}')
{
$maskRebuild .= strftime("%d",time());
- $this->searchcode .= strftime("%d",time());
- if ($foundCounter==0)
- {
- $substrBegin += 2;
- }
- else
- {
- $substrEnd += 2;
- }
+ $this->searchcode .= '([0-9]{2})';
}
else if (eregi('\{d+\}',$maskElement[$i]) && (eregi('\{d+\}',$$maskElement[$i]) != '{dd}'))
{
@@ -221,15 +209,7 @@ class mod_codeclient_tigre extends ModeleThirdPartyCode
if ($maskElement[$i] == '{mm}')
{
$maskRebuild .= strftime("%m",time());
- $this->searchcode .= strftime("%m",time());
- if ($foundCounter==0)
- {
- $substrBegin += 2;
- }
- else
- {
- $substrEnd += 2;
- }
+ $this->searchcode .= '([0-9]{2})';
}
else if (eregi('\{m+\}',$maskElement[$i]) && (eregi('\{m+\}',$maskElement[$i]) != '{mm}'))
{
@@ -240,28 +220,12 @@ class mod_codeclient_tigre extends ModeleThirdPartyCode
if ($maskElement[$i] == '{aa}')
{
$maskRebuild .= substr(strftime("%Y",time()),2);
- $this->searchcode .= substr(strftime("%Y",time()),2);
- if ($foundCounter==0)
- {
- $substrBegin += 2;
- }
- else
- {
- $substrEnd += 2;
- }
+ $this->searchcode .= '([0-9]{2})';
}
else if ($maskElement[$i] == '{aaaa}')
{
$maskRebuild .= strftime("%Y",time());
- $this->searchcode .= strftime("%Y",time());
- if ($foundCounter==0)
- {
- $substrBegin += 4;
- }
- else
- {
- $substrEnd += 4;
- }
+ $this->searchcode .= '([0-9]{4})';
}
else if (eregi('\{a+\}',$maskElement[$i]) && ((eregi('\{a+\}',$maskElement[$i]) != '{aa}') || (eregi('\{a+\}',$maskElement[$i]) != '{aaa}')))
{
@@ -271,17 +235,16 @@ class mod_codeclient_tigre extends ModeleThirdPartyCode
// Ajout du préfix de la société
if (is_object($objsoc) && $objsoc->prefix_comm && $maskElement[$i] == '{pre}')
{
- $maskRebuild .= strtoupper($objsoc->prefix_comm);
- $this->searchcode .= strtoupper($objsoc->prefix_comm);
- $prefixLength = strlen($objsoc->prefix_comm);
- if ($foundCounter==0)
+ if ((!$objsoc->fournisseur && !$objsoc->code_fournisseur) || (!$objsoc->client && !$objsoc->code_client))
{
- $substrBegin += $prefixLength;
+ $maskRebuild .= strtoupper($objsoc->prefix_comm);
+ $this->searchcode .= '([0-9A-Z]{1,})';
}
else
{
- $substrEnd += $prefixLength;
- }
+ $maskRebuild .= 'ABC';
+ $this->searchcode .= '([0-9A-Z]{1,})';
+ }
}
else if (is_object($objsoc) && !$objsoc->prefix_comm && $maskElement[$i] == '{pre}')
{
@@ -292,43 +255,26 @@ class mod_codeclient_tigre extends ModeleThirdPartyCode
{
if (is_string($objsoc) && $objsoc)
{
- $prefixLength = strlen($objsoc);
$maskRebuild .= $objsoc;
+ $this->searchcode .= '([0-9A-Z]{1,})';
}
- else if (is_bool($objsoc) && $objsoc == 0)
+ else if ($objsoc === 0)
{
- $prefixLength = 3;
$maskRebuild .= 'ABC';
+ $this->searchcode .= '([0-9A-Z]{1,})';
}
else
{
$error++;
$this->prefixIsRequired = 1;
}
-
- if ($foundCounter==0)
- {
- $substrBegin += $prefixLength;
- }
- else
- {
- $substrEnd += $prefixLength;
- }
}
// Ajout des séparateurs éventuels : \ / -
if (eregi('[\/-]{1}',$maskElement[$i]))
{
$maskRebuild .= $maskElement[$i];
- $this->searchcode .= $maskElement[$i];
- if ($foundCounter==0)
- {
- $substrBegin++;
- }
- else
- {
- $substrEnd++;
- }
+ $this->searchcode .= '([\/-]{1})';
}
else if (eregi('[\/-]{2,}',$maskElement[$i]))
{
@@ -339,16 +285,7 @@ class mod_codeclient_tigre extends ModeleThirdPartyCode
if (eregi('^[0-9A-Z]+$',$maskElement[$i]))
{
$maskRebuild .= strtoupper($maskElement[$i]);
- $this->searchcode .= strtoupper($maskElement[$i]);
- $MaskElementLength = strlen($maskElement[$i]);
- if ($foundCounter==0)
- {
- $substrBegin += $MaskElementLength;
- }
- else
- {
- $substrEnd += $MaskElementLength;
- }
+ $this->searchcode .= '([0-9A-Z]+)';
}
// Définition du compteur
@@ -366,14 +303,8 @@ class mod_codeclient_tigre extends ModeleThirdPartyCode
{
$error++;
}
- //print 'searchcodeTemp='.$this->searchcode.'
';
}
- $this->substrBegin = $substrBegin;
- $this->substrEnd = $substrEnd;
- //print 'begin='.$this->substrBegin.'
';
- //print 'end='.$this->substrEnd.'
';
- //print 'searchcode='.$this->searchcode.'
';
- //print $error;
+
return $maskRebuild;
}