[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Dolibarr-dev] Proposition patch pour rendre saph ir plus robuste + idée
From: |
Raphaël Bertrand (Résultic) |
Subject: |
[Dolibarr-dev] Proposition patch pour rendre saph ir plus robuste + idée compteur à masque client |
Date: |
Tue, 10 Jun 2008 15:20:53 +0200 |
User-agent: |
Thunderbird 2.0.0.14 (Windows/20080421) |
Suite au problème rencontré par Lionel (et par d'autres en cas de
changement de système de numérotation en cours de route ou de
bidouillage), je me suis penché sur le code de saphir pour chercher
pourquoi il pouvait ainsi être trompé par la présence de commandes ne
respectant pas son masque.
Là je me suis aperçu que le module de numérotation se contentait de
repérer les débuts et fin logique du compteur pour lui, et de faire ses
comparaisons (de même pour le test de date).
Or, dans le cas d'une modification manuelle ou d'un changement de
standard, des lettres peuvent se trouver en lieu et place des chiffres
attendus, ce qui cause alors une ré initialisation du compteur, et du
même coup une erreur lors de l'insertion car le numéro existe déjà.
Pour contrer cela, je propose donc dans le patch ci-présent de remplacer
le test d'absence de parenthèse (pour les cas des commandes
provisoires), par un test d'expression régulière vérifiant que les
lettres préfixes et suffixes correspondent, et que les codes spéciaux
sont bien remplacés par des chiffres, avant de considérer un
enregistrement comme étant créé par le masque et donc avant
d'incrémenter le compteur.
Si cela vous intéresse, je peux essayer de le porter sur les autres
modules de numérotation.
D'autre part, nous trouverions intéressant de pouvoir effectuer une
numérotation tenant compte du code client, afin de disposer une valeur
de compteur propre à chaque client, améliorant ainsi le suivi par
client. Qu'en pensez vous ?
Post de Lionel:
http://www.dolibarr.fr/component/option,com_fireboard/Itemid,32/func,view/catid,5/id,8910/lang,fr/#8910
Article de la FAQ:
http://www.dolibarr.com/wikidev/index.php/FAQ_D%C3%A9veloppeur#Changer_mon_syst.C3.A8me_de_num.C3.A9rotation_des_factures_en_cours_de_route
--
*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 : address@hidden
Index: mod_commande_saphir.php
===================================================================
RCS file:
/sources/dolibarr/dolibarr/htdocs/includes/modules/commande/mod_commande_saphir.php,v
retrieving revision 1.16
diff -u -r1.16 mod_commande_saphir.php
--- mod_commande_saphir.php 31 Mar 2008 04:26:54 -0000 1.16
+++ mod_commande_saphir.php 10 Jun 2008 13:01:31 -0000
@@ -122,7 +122,7 @@
$maskwithnocode=eregi_replace('\{y\}','y',$maskwithnocode);
$maskwithnocode=eregi_replace('\{mm\}','mm',$maskwithnocode);
//print "maskwithonlyymcode=".$maskwithonlyymcode."
maskwithnocode=".$maskwithnocode."\n<br>";
-
+
// If an offset is asked
if (! empty($reg[2]) && eregi('^\+',$reg[2]))
$maskoffset=eregi_replace('^\+','',$reg[2]);
if (! empty($reg[3]) && eregi('^\+',$reg[3]))
$maskoffset=eregi_replace('^\+','',$reg[3]);
@@ -160,11 +160,22 @@
$sqlstring='SUBSTRING(ref, '.($posnumstart+1).',
'.strlen($maskcounter).')';
//print "x".$sqlstring;
+ // Build maskRegexp
+ $maskRegexp = preg_quote($mask);
+ // Replace protected special codes with matching regexp
+ $maskRegexp =
str_replace(preg_quote('{yyyy}'),'([0-9]{4})',$maskRegexp);
+ $maskRegexp =
str_replace(preg_quote('{yy}'),'([0-9]{2})',$maskRegexp);
+ $maskRegexp =
str_replace(preg_quote('{y}'),'([0-9])',$maskRegexp);
+ $maskRegexp =
str_replace(preg_quote('{mm}'),'([0-1])([0-9])',$maskRegexp);
+ $maskRegexp =
str_replace(preg_quote('{dd}'),'([0-3])([0-9])',$maskRegexp);
+ $maskRegexp =
str_replace(preg_quote('{'.$masktri.'}'),'([0-9]{'.strlen($maskcounter).'})',$maskRegexp);
+
// Get counter in database
$counter=0;
$sql = "SELECT MAX(".$sqlstring.") as val";
$sql.= " FROM ".MAIN_DB_PREFIX."commande";
- $sql.= " WHERE ref not like '(%'";
+ //$sql.= " WHERE ref not like '(%'";
+ $sql.= " WHERE (ref REGEXP '".$maskRegexp."')";
if ($sqlwhere) $sql.=' AND '.$sqlwhere;
//print $sql;
@@ -193,6 +204,7 @@
$maskbefore='{'.$masktri.'}';
$maskafter=str_pad($counter,strlen($maskcounter),"0",STR_PAD_LEFT);
//print 'x'.$maskbefore.'-'.$maskafter.'y';
+
$numFinal = str_replace($maskbefore,$maskafter,$numFinal);
dolibarr_syslog("mod_commande_saphir::getNextValue return
".$numFinal);
- [Dolibarr-dev] Proposition patch pour rendre saph ir plus robuste + idée compteur à masque client,
Raphaël Bertrand (Résultic) <=