[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Dolibarr-dev] idée compteur à ma sque client (patch saphir propales
From: |
Raphaël Bertrand (Résultic) |
Subject: |
Re: [Dolibarr-dev] idée compteur à ma sque client (patch saphir propales) |
Date: |
Fri, 13 Jun 2008 12:12:37 +0200 |
User-agent: |
Thunderbird 2.0.0.14 (Windows/20080421) |
Voici maintenant une version modifiée de mon patch pour la numérotation
de propales saphir qui permet l'ajout d'un filtre évolué suivant
l'expression régulière '\{([^c])?(c+)([^0c]*)(0+)(\+[0-9]+)?\}'
Soit 1 caractère de préfixe optionnel (différent de c majuscule ou
minuscule), suivi d'un nombre quelconque c (autant de c que le nombre
maximum de caractères à récupérer du code client), suivi d'une chaine
optionnelle servant de séparateur (ne contenant ni de 0 ni de c
majuscule ou minuscule), suivi d'un nombre de zéro correspondant au
nombre de chiffres du compteur propre au client, et éventuellement suivi
d'un marqueur d'offset.
Le résultat est un suffixe n'interférant pas sur la numérotation standard.
Exemple: pour le masque address@hidden
ayant déjà 7 propositions suivant le masque address@hidden, et 0
suivant ce nouveau masque, le module propose PR0800008-0057 si pas de
référence client (l'exemple de numérotation), et PR0800008-CLIE0057
pour un client ayant comme code client CLIENT.
Si on valide cette proposition et l'on en crée aussitôt une autre pour
le même client, on obtient PR0800009-CLIE0058
Avec le masque address@hidden
on aurait eu PR0800008-CLIE-0001 puis PR0800009-CLIE-0002
et avec address@hidden, PR0800008CLIE-NUM-0001 puis
PR0800008CLIE-NUM-0002
*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
Raphaël Bertrand (Résultic) a écrit :
Bonjour,
Sauf erreur de ma part, c'est justement de ce code client unique dont je
me sers. La seule chose qu'il peut se passer, c'est que si l'on choisit
moins de lettres dans le masque que le nombre de lettre que font les
codes clients, il peut y avoir des codes clients distincts qui se
retrouvent avec le même masque. Mais rien n'empêche de mettre
suffisamment de c pour que cela ne se produise pas (si il y a plus de c
que de lettres pour les codes clients, on se contente de retourner
l'intégralité du code client).
La seule restriction qui demeure, c'est qu'il ne faut pas que les codes
clients se terminent par un 0 si ils sont utilisés juste avant le
compteur (sans séparation), car alors ils rentrent en conflit avec lui
comme c'est le cas actuellement si l'on met un 0 dans son masque juste
avant le compteur.
Pour l'idée du compteur propre au client avec mention du code client et
utilisé en suffixe, venant se surajouter au compteur global, je vais
voir comment cela peut se faire.
*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
Rodolphe Quiedeville a écrit :
Raphaël Bertrand (Résultic) a écrit :
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}
Bonjour,
Il existe déjà un code client unique pourquoi ne pas l'utiliser ?
Après pour les facture une sequence :
08-00001-CD54-0001
08-00002-CD54-0002
08-00003-EB54-0001
08-00004-CD54-0003
Avec l'année sur 2 digit, compteur total sur 5 digits, code client,
compteur client sera valide auprès des institutions. Il contient bien
une séquence unique qui servira de base comptable. Le changement lors de
changement d'année est régulièrement accepté ou à la fin de l'exercice.
En fait c'est juste une séquence unique et continue avec un suffix.
A++
_______________________________________________
Dolibarr-dev mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/dolibarr-dev
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 13 Jun 2008 09:48:30 -0000
@@ -111,10 +111,33 @@
$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)));
+ }
+
+ if
(eregi('\{([^c])?(c+)([^0c]*)(0+)(\+[0-9]+)?\}',$mask,$regClientRef))
+ {
+ if
(eregi('(\{([^c])?(c+)([^0c]*)(0+)(\+[0-9]+)?\})(.*)(\{(0+)(address@hidden)?(address@hidden)?\})',$mask))
return 'ErrorClientRefCantBeBeforeCounter';
+ // Extract value for maskrefclient mask counter, raz
and mask offset
+
$maskrefclient=$regClientRef[1].$regClientRef[2].$regClientRef[3].$regClientRef[4].$regClientRef[5];
+ $maskrefclient_prefix=$regClientRef[1];
+ $maskrefclient_maskclientcode=$regClientRef[2];
+
$maskrefclient_separator=sanitize_string($regClientRef[3]);
+ $maskrefclient_maskcounter=$regClientRef[4];
+ $maskrefclient_maskoffset=0; //default value of
maskoffset
+
$maskrefclient_clientcode=sanitize_string(substr($objsoc->code_client,0,strlen($maskrefclient_maskclientcode)));
+ if (strlen($maskrefclient_maskcounter) < 3) return
'CounterMustHaveMoreThan3Digits';
+ }
+ else $maskrefclient='';
+
$maskwithonlyymcode=$mask;
$maskwithonlyymcode=eregi_replace('\{(0+)(address@hidden)?(address@hidden)?\}',$maskcounter,$maskwithonlyymcode);
$maskwithonlyymcode=eregi_replace('\{dd\}','dd',$maskwithonlyymcode);
+
$maskwithonlyymcode=eregi_replace('\{(c+)\}',$maskclientcode,$maskwithonlyymcode);
+
$maskwithonlyymcode=eregi_replace('\{([^c])?(c+)([^0c]*)(0+)(\+[0-9]+)?\}',$maskrefclient,$maskwithonlyymcode);
$maskwithnocode=$maskwithonlyymcode;
$maskwithnocode=eregi_replace('\{yyyy\}','yyyy',$maskwithnocode);
$maskwithnocode=eregi_replace('\{yy\}','yy',$maskwithnocode);
@@ -158,12 +181,25 @@
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);
+ if ($maskrefclient) $maskLike =
str_replace(sanitize_string('{'.$maskrefclient.'}'),"%",$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;
@@ -178,6 +214,49 @@
if (empty($counter) || eregi('[^0-9]',$counter))
$counter=$maskoffset;
$counter++;
+ if($maskrefclient)
+ {
+ // If an offset is asked
+ if (! empty($regClientRef[5]) &&
eregi('^\+',$regClientRef[5]))
$maskrefclient_maskoffset=eregi_replace('^\+','',$regClientRef[5]);
+
+
$maskrefclient_posnumstart=strpos($maskwithnocode,$maskrefclient_maskcounter,strpos($maskwithnocode,$maskrefclient));
// Pos of counter in final string (from 0 to ...)
+ if ($maskrefclient_posnumstart <= 0) return
'ErrorBadMask';
+ $maskrefclient_sqlstring='SUBSTRING(ref,
'.($maskrefclient_posnumstart+1).', '.strlen($maskrefclient_maskcounter).')';
+ //print "x".$sqlstring;
+
+ // Build maskrefclient_maskLike
+ $maskrefclient_maskLike = sanitize_string($mask);
+ $maskrefclient_maskLike =
str_replace("%","_",$maskrefclient_maskLike);
+ // Replace protected special codes with matching number
of _ as wild card caracter
+ $maskrefclient_maskLike =
str_replace(sanitize_string('{yyyy}'),'____',$maskrefclient_maskLike);
+ $maskrefclient_maskLike =
str_replace(sanitize_string('{yy}'),'__',$maskrefclient_maskLike);
+ $maskrefclient_maskLike =
str_replace(sanitize_string('{y}'),'_',$maskrefclient_maskLike);
+ $maskrefclient_maskLike =
str_replace(sanitize_string('{mm}'),'_',$maskrefclient_maskLike);
+ $maskrefclient_maskLike =
str_replace(sanitize_string('{dd}'),'__',$maskrefclient_maskLike);
+ $maskrefclient_maskLike =
str_replace(sanitize_string('{'.$masktri.'}'),str_pad("",strlen($maskcounter),"_"),$maskrefclient_maskLike);
+ $maskrefclient_maskLike =
str_replace(sanitize_string('{'.$maskclientcode.'}'),$clientcode,$maskrefclient_maskLike);
+ $maskrefclient_maskLike =
str_replace(sanitize_string('{'.$maskrefclient.'}'),$maskrefclient_prefix.$maskrefclient_clientcode.$maskrefclient_separator.str_pad("",strlen($maskrefclient_maskcounter),"_"),$maskrefclient_maskLike);
+ // Get counter in database
+ $maskrefclient_counter=0;
+ $maskrefclient_sql = "SELECT
MAX(".$maskrefclient_sqlstring.") as val";
+ $maskrefclient_sql.= " FROM ".MAIN_DB_PREFIX."propal";
+ //$sql.= " WHERE ref not like '(%'";
+ $maskrefclient_sql.= " WHERE ref like
'".$maskrefclient_maskLike."'";
+ if ($sqlwhere) $sql.=' AND '.$sqlwhere; //use the same
sqlwhere as general mask
+
+ //print $sql;
+ dolibarr_syslog("mod_propale_saphir::getNextValue
maskrefclient_sql=".$maskrefclient_sql, LOG_DEBUG);
+ $maskrefclient_resql=$db->query($maskrefclient_sql);
+ if ($maskrefclient_resql)
+ {
+ $maskrefclient_obj =
$db->fetch_object($maskrefclient_resql);
+ $maskrefclient_counter =
$maskrefclient_obj->val;
+ }
+ else dolibarr_print_error($db);
+ if (empty($maskrefclient_counter) ||
eregi('[^0-9]',$maskrefclient_counter))
$maskrefclient_counter=$maskrefclient_maskoffset;
+ $maskrefclient_counter++;
+ }
+
// Build numFinal
$numFinal = $mask;
@@ -187,13 +266,20 @@
$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.'}';
$maskafter=str_pad($counter,strlen($maskcounter),"0",STR_PAD_LEFT);
//print 'x'.$maskbefore.'-'.$maskafter.'y';
$numFinal = str_replace($maskbefore,$maskafter,$numFinal);
-
+ // Now we replace the refclient
+ if($maskrefclient)
+ {
+ $maskrefclient_maskbefore='{'.$maskrefclient.'}';
+
$maskrefclient_maskafter=$maskrefclient_prefix.$maskrefclient_clientcode.$maskrefclient_separator.str_pad($maskrefclient_counter,strlen($maskrefclient_maskcounter),"0",STR_PAD_LEFT);
+ $numFinal =
str_replace($maskrefclient_maskbefore,$maskrefclient_maskafter,$numFinal);
+ }
dolibarr_syslog("mod_propale_saphir::getNextValue return
".$numFinal);
return $numFinal;
}
- [Dolibarr-dev] idée compteur à masque client, Raphaël Bertrand (Résultic), 2008/06/11
- Re: [Dolibarr-dev] idée compteur à masq ue client, paul POULAIN, 2008/06/11
- Re: [Dolibarr-dev] idée compteur à masq ue client, Lionel Chamussy, 2008/06/11
- Re: [Dolibarr-dev] idée compteur à masq ue client, Eldy, 2008/06/11
- Re: [Dolibarr-dev] idée compteur à masq ue client, Lionel Chamussy, 2008/06/12
- Re: [Dolibarr-dev] idée compteur à ma sque client, Raphaël Bertrand (Résultic), 2008/06/12
- Re: [Dolibarr-dev] idée compteur à ma sque client, Rodolphe Quiedeville, 2008/06/12
- Re: [Dolibarr-dev] idée compteur à ma sque client, Raphaël Bertrand (Résultic), 2008/06/13
- Re: [Dolibarr-dev] idée compteur à ma sque client (patch saphir propales),
Raphaël Bertrand (Résultic) <=
- Re: [Dolibarr-dev] patch compteur à masque client et numéro chrono, Raphaël Bertrand (Résultic), 2008/06/13
- Re: [Dolibarr-dev] patch selection client fichinter obligatoire avant saisie, Raphaël Bertrand (Résultic), 2008/06/13
- Re: [Dolibarr-dev] patch compteur à masque client et numéro chrono, Eldy, 2008/06/17
- Re: [Dolibarr-dev] patch compteur à masque client et numéro chrono, Raphaël Bertrand (Résultic), 2008/06/17
- Re: [Dolibarr-dev] patch compteur à masque client et numéro chrono, Eldy, 2008/06/17
- Re: [Dolibarr-dev] patch compteur à masque client et numéro chrono, Raphaël Bertrand (Résultic), 2008/06/18
- Re: [Dolibarr-dev] patch compteur à masque client et numéro chrono, Raphaël Bertrand (Résultic), 2008/06/18
- Re: [Dolibarr-dev] patch compteur à masque client et numéro chrono, Eldy, 2008/06/20
- Re: [Dolibarr-dev] patch compteur à masque client et numéro chrono, Raphaël Bertrand (Résultic), 2008/06/23
- Re: [Dolibarr-dev] patch compteur à masque client et numéro chrono, Raphaël Bertrand (Résultic), 2008/06/23