Fix: Usage of reset of cursor in numbering modules for a particular month (@ option) was broken.

This commit is contained in:
Laurent Destailleur 2009-01-07 15:57:02 +00:00
parent 754e0111f3
commit 1cb7fc6ede
3 changed files with 18 additions and 8 deletions

View File

@ -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

View File

@ -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<EFBFBD>le de num<EFBFBD>rotation de r<EFBFBD>f<EFBFBD>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<EFBFBD>le de num<EFBFBD>rotation de r<EFBFBD>f<EFBFBD>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<EFBFBD>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<EFBFBD>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)

View File

@ -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."<br>\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)