En me servant du patch permettant de rendre saphir plus robuste,
j'ai rajouté la prise en compte du code client via le masque {cccc}

Il permet donc maintenant l'utilisation d’un masque {cccc} récupérant les 0 à n (ici 4) premières lettres du code client pour constituer le masque avant de récupérer la valeur du compteur propre à ce nouveau masque (via un test avec un like, qui teste la correspondance des caractères non spéciaux et ne faisant pas parti d'un masque numérique - date ou compteur -, ainsi que la taille de la chaine).

Si cela vous convient, j'appliquerais les modifications aussi pour les commandes, et peut être les interventions mais pas aux factures pour les raisons juridiques déjà évoquées(nécessité d’avoir une continuité dans les numéros de factures)



*Raphaël Bertrand*
Résultic - Management & Informatique
Siège : 11 rue Tronchet - 69006 LYON
Bureaux : 11 pl Maréchal Lyautey - 69006 LYON
Fixe. 08 74 77 00 70
Fax. 08 25 24 85 02
E-Mail : [EMAIL PROTECTED]

Lionel Chamussy a écrit :
Raphaël,

Peux tu regarder ce point, et proposer un patch qui aille dans ce sens pour les propositions, commandes, (et interventions ?).

Merci.

Index: mod_propale_saphir.php
===================================================================
RCS file: 
/sources/dolibarr/dolibarr/htdocs/includes/modules/propale/mod_propale_saphir.php,v
retrieving revision 1.17
diff -u -r1.17 mod_propale_saphir.php
--- mod_propale_saphir.php      1 May 2008 09:38:28 -0000       1.17
+++ mod_propale_saphir.php      12 Jun 2008 15:41:14 -0000
@@ -111,10 +111,15 @@
                $maskraz=-1;
                $maskoffset=0;
                if (strlen($maskcounter) < 3) return 
'CounterMustHaveMoreThan3Digits';
-       
+               if (eregi('\{(c+)\}',$mask,$regmaskclientcode))
+               {
+                       $maskclientcode=$regmaskclientcode[1];
+                       
$clientcode=sanitize_string(substr($objsoc->code_client,0,strlen($maskclientcode)));
+               }
                $maskwithonlyymcode=$mask;
                $maskwithonlyymcode=eregi_replace('\{(0+)([EMAIL 
PROTECTED])?([EMAIL PROTECTED])?\}',$maskcounter,$maskwithonlyymcode);
                
$maskwithonlyymcode=eregi_replace('\{dd\}','dd',$maskwithonlyymcode);
+               
$maskwithonlyymcode=eregi_replace('\{(c+)\}',$maskclientcode,$maskwithonlyymcode);
                $maskwithnocode=$maskwithonlyymcode;
                
$maskwithnocode=eregi_replace('\{yyyy\}','yyyy',$maskwithnocode);
                $maskwithnocode=eregi_replace('\{yy\}','yy',$maskwithnocode);
@@ -158,12 +163,24 @@
                if ($posnumstart < 0) return 'ErrorBadMask';
                $sqlstring='SUBSTRING(ref, '.($posnumstart+1).', 
'.strlen($maskcounter).')';
                //print "x".$sqlstring;
-               
+
+               // Build maskLike
+               $maskLike = sanitize_string($mask);
+               $maskLike = str_replace("%","_",$maskLike);
+               // Replace protected special codes with matching number of _ as 
wild card caracter
+               $maskLike = 
str_replace(sanitize_string('{yyyy}'),'____',$maskLike);
+               $maskLike = str_replace(sanitize_string('{yy}'),'__',$maskLike);
+               $maskLike = str_replace(sanitize_string('{y}'),'_',$maskLike);
+               $maskLike = str_replace(sanitize_string('{mm}'),'_',$maskLike);
+               $maskLike = str_replace(sanitize_string('{dd}'),'__',$maskLike);
+               $maskLike = 
str_replace(sanitize_string('{'.$masktri.'}'),str_pad("",strlen($maskcounter),"_"),$maskLike);
+               $maskLike = 
str_replace(sanitize_string('{'.$maskclientcode.'}'),$clientcode,$maskLike);
                // Get counter in database
                $counter=0;
                $sql = "SELECT MAX(".$sqlstring.") as val";
                $sql.= " FROM ".MAIN_DB_PREFIX."propal";
-               $sql.= " WHERE ref not like '(%'";
+               //$sql.= " WHERE ref not like '(%'";
+               $sql.= " WHERE ref like '".$maskLike."'";
                if ($sqlwhere) $sql.=' AND '.$sqlwhere;
                
                //print $sql;
@@ -187,6 +204,7 @@
                $numFinal = str_replace('{y}' ,substr(date("y"),2,1),$numFinal);
                $numFinal = str_replace('{mm}',date("m"),$numFinal);
                $numFinal = str_replace('{dd}',date("d"),$numFinal);
+               $numFinal = 
str_replace('{'.$maskclientcode.'}',$clientcode,$numFinal);
 
                // Now we replace the counter
                $maskbefore='{'.$masktri.'}';

_______________________________________________
Dolibarr-dev mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/dolibarr-dev

Répondre à