From 1cb7fc6ede8999137274e25878dc972c0d78f0a9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 7 Jan 2009 15:57:02 +0000 Subject: [PATCH] Fix: Usage of reset of cursor in numbering modules for a particular month (@ option) was broken. --- ChangeLog | 2 ++ .../modules/commande/mod_commande_saphir.php | 10 +++++----- htdocs/lib/functions2.lib.php | 14 +++++++++++--- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index dfac0f7433c..c7bae8f0cb0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,6 +12,8 @@ For users: future bank transaction already wrote. - Fixed: Bad ref in supplier list. - Fixed: Bad link in product statistics for supplier referers. +- Fix: Usage of reset of cursor in personalized numbering modules for a particular + month (@ option) was broken. For translators: - Added ca_ES language files diff --git a/htdocs/includes/modules/commande/mod_commande_saphir.php b/htdocs/includes/modules/commande/mod_commande_saphir.php index a8b53da7559..220d5e309f7 100644 --- a/htdocs/includes/modules/commande/mod_commande_saphir.php +++ b/htdocs/includes/modules/commande/mod_commande_saphir.php @@ -23,7 +23,7 @@ /** \file htdocs/includes/modules/commande/mod_commande_saphir.php \ingroup commande - \brief Fichier contenant la classe du modèle de numérotation de référence de commande Saphir + \brief Fichier contenant la classe du mod�le de num�rotation de r�f�rence de commande Saphir \version $Id$ */ @@ -32,7 +32,7 @@ require_once(DOL_DOCUMENT_ROOT ."/includes/modules/commande/modules_commande.php /** \class mod_commande_saphir - \brief Classe du modèle de numérotation de référence de commande Saphir + \brief Classe du mod�le de num�rotation de r�f�rence de commande Saphir */ class mod_commande_saphir extends ModeleNumRefCommandes { @@ -41,7 +41,7 @@ class mod_commande_saphir extends ModeleNumRefCommandes var $nom = 'Saphir'; - /** \brief Renvoi la description du modele de numérotation + /** \brief Renvoi la description du modele de num�rotation * \return string Texte descripif */ function info() @@ -72,7 +72,7 @@ class mod_commande_saphir extends ModeleNumRefCommandes return $texte; } - /** \brief Renvoi un exemple de numérotation + /** \brief Renvoi un exemple de num�rotation * \return string Example */ function getExample() @@ -102,7 +102,7 @@ class mod_commande_saphir extends ModeleNumRefCommandes require_once(DOL_DOCUMENT_ROOT ."/lib/functions2.lib.php"); - // On défini critere recherche compteur + // We get cursor rule $mask=$conf->global->COMMANDE_SAPHIR_MASK; if (! $mask) diff --git a/htdocs/lib/functions2.lib.php b/htdocs/lib/functions2.lib.php index f294a75da84..3b40a5bef05 100644 --- a/htdocs/lib/functions2.lib.php +++ b/htdocs/lib/functions2.lib.php @@ -75,7 +75,8 @@ function array2table($data,$tableMarkup=1,$tableoptions='',$troptions='',$tdopti function get_next_value($db,$mask,$table,$field,$where='',$valueforccc='',$date='') { // Clean parameters - if ($date == '') $date=time(); + if ($date == '') $date=mktime(); // We use local year and month of PHP server to search numbers + // but we should use local year and month of user // Extract value for mask counter, mask raz and mask offset if (! eregi('\{(0+)([@\+][0-9]+)?([@\+][0-9]+)?\}',$mask,$reg)) return 'ErrorBadMask'; @@ -117,6 +118,7 @@ function get_next_value($db,$mask,$table,$field,$where='',$valueforccc='',$date= if (! empty($reg[3]) && eregi('^\+',$reg[3])) $maskoffset=eregi_replace('^\+','',$reg[3]); // Define $sqlwhere + // If a restore to zero after a month is asked we check if there is already a value for this year. if (! empty($reg[2]) && eregi('^@',$reg[2])) $maskraz=eregi_replace('^@','',$reg[2]); if (! empty($reg[3]) && eregi('^@',$reg[3])) $maskraz=eregi_replace('^@','',$reg[3]); @@ -139,10 +141,15 @@ function get_next_value($db,$mask,$table,$field,$where='',$valueforccc='',$date= if (strlen($reg[2]) == 1) $yearcomp=substr(date("y",$date),2,1)+$yearoffset; $sqlwhere=''; - $sqlwhere.='SUBSTRING('.$field.', '.(strlen($reg[1])+1).', '.strlen($reg[2]).') >= '.$yearcomp; + $sqlwhere.='( (SUBSTRING('.$field.', '.(strlen($reg[1])+1).', '.strlen($reg[2]).') >= '.$yearcomp; if ($monthcomp > 1) // Test useless if monthcomp = 1 (or 0 is same as 1) { - $sqlwhere.=' AND SUBSTRING('.$field.', '.(strlen($reg[1])+strlen($reg[2])+1).', '.strlen($reg[3]).') >= '.$monthcomp; + $sqlwhere.=' AND SUBSTRING('.$field.', '.(strlen($reg[1])+strlen($reg[2])+1).', '.strlen($reg[3]).') >= '.$monthcomp.')'; + $sqlwhere.=' OR SUBSTRING('.$field.', '.(strlen($reg[1])+1).', '.strlen($reg[2]).') >= '.sprintf("%02d",($yearcomp+1)).' )'; + } + else + { + $sqlwhere.=') )'; } } //print "masktri=".$masktri." maskcounter=".$maskcounter." maskraz=".$maskraz." maskoffset=".$maskoffset."
\n"; @@ -174,6 +181,7 @@ function get_next_value($db,$mask,$table,$field,$where='',$valueforccc='',$date= if ($where) $sql.=$where; if ($sqlwhere) $sql.=' AND '.$sqlwhere; + //print $sql; dolibarr_syslog("functions2::get_next_value sql=".$sql, LOG_DEBUG); $resql=$db->query($sql); if ($resql)