2006-02-15 11:48:32 +01:00
< ? php
2006-02-15 12:33:01 +01:00
/* Copyright ( C ) 2005 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
* Copyright ( C ) 2005 - 2006 Regis Houssin < regis . houssin @ cap - networks . com >
2006-02-15 11:48:32 +01:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place - Suite 330 , Boston , MA 02111 - 1307 , USA .
* or see http :// www . gnu . org /
*
* $Id $
* $Source $
*
*/
/**
\file htdocs / includes / modules / commande / mod_commande_diamant . php
\ingroup commande
\brief Fichier contenant la classe du mod<EFBFBD> le de num<EFBFBD> rotation de r<EFBFBD> f<EFBFBD> rence de commande Diamant
\version $Revision $
*/
include_once ( " modules_commande.php " );
/**
\class mod_commande_diamant
\brief Classe du mod<EFBFBD> le de num<EFBFBD> rotation de r<EFBFBD> f<EFBFBD> rence de commande Diamant
*/
class mod_commande_diamant extends ModeleNumRefCommandes
{
/** \brief Constructeur
*/
function mod_commande_diamant ()
{
$this -> nom = " Diamant " ;
}
/** \brief Renvoi la description du modele de num<EFBFBD> rotation
* \return string Texte descripif
*/
function info ()
{
2006-02-24 13:31:36 +01:00
$texte = " Renvoie le num<75> ro sous la forme num<75> rique CYYNNNNN, o<> YY repr<70> sente l'ann<6E> e et NNNNN Le num<75> ro d'incr<63> ment. Ce dernier n'est PAS remis <20> z<> ro en d<> but d'ann<6E> e.<br> \n " ;
2006-02-15 11:48:32 +01:00
$texte .= " Si la constante COMMANDE_DIAMANT_DELTA est d<> finie, un offset est appliqu<71> sur le compteur " ;
if ( defined ( " COMMANDE_DIAMANT_DELTA " ))
{
$texte .= " (D<> finie et vaut: " . COMMANDE_DIAMANT_DELTA . " ) " ;
}
else
{
$texte .= " (N'est pas d<> finie) " ;
}
return $texte ;
}
/** \brief Renvoi un exemple de num<EFBFBD> rotation
* \return string Example
*/
function getExample ()
{
2006-02-15 12:37:06 +01:00
$y = strftime ( " %y " , time ());
2006-02-15 12:33:01 +01:00
if ( defined ( " COMMANDE_DIAMANT_DELTA " ))
2006-02-15 11:48:32 +01:00
{
2006-02-15 12:33:01 +01:00
$num = sprintf ( " %02d " , COMMANDE_DIAMANT_DELTA );
2006-02-24 13:31:36 +01:00
return " C " . $y . substr ( " 0000 " . $num , strlen ( " 0000 " . $num ) - 5 , 5 );
2006-02-15 11:48:32 +01:00
}
else
{
2006-02-24 13:31:36 +01:00
return " C " . $y . " 00001 " ;
2006-02-15 11:48:32 +01:00
}
}
2006-05-03 12:22:25 +02:00
/** \brief Renvoi prochaine valeur attribu<EFBFBD> e
* \return string Valeur
*/
2006-05-11 15:55:33 +02:00
function getNextValue ( $objsoc = 0 )
2006-05-03 12:22:25 +02:00
{
2006-05-11 15:55:33 +02:00
global $db , $conf ;
2006-05-03 12:22:25 +02:00
// D'abord on r<> cup<75> re la valeur max (r<> ponse imm<6D> diate car champ ind<6E> x<EFBFBD> )
2006-05-11 18:30:15 +02:00
$cyy = 'C' . strftime ( " %y " , time ());
2006-05-03 12:22:25 +02:00
$sql = " SELECT MAX(ref) " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " commande " ;
2006-05-11 18:30:15 +02:00
$sql .= " WHERE ref like ' ${ cyy } %' " ;
2006-05-03 12:22:25 +02:00
$resql = $db -> query ( $sql );
if ( $resql )
{
$row = $db -> fetch_row ( $resql );
2006-05-11 18:30:15 +02:00
$cyy = '' ;
2006-05-03 13:05:22 +02:00
if ( $row ) $cyy = substr ( $row [ 0 ], 0 , 3 );
2006-05-03 12:22:25 +02:00
}
2006-06-28 13:22:10 +02:00
//on v<> rifie si il y a une ann<6E> e pr<70> c<EFBFBD> dente
//sinon le delta sera appliqu<71> de nouveau sur la nouvelle ann<6E> e
2006-06-28 13:36:56 +02:00
$lastyy = 'C' . strftime ( " %y " , mktime ( 0 , 0 , 0 , date ( " m " ), date ( " d " ), date ( " Y " ) - 1 ));
$sql = " SELECT MAX(ref) " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " commande " ;
$sql .= " WHERE ref like ' ${ lastyy } %' " ;
$resql = $db -> query ( $sql );
if ( $resql )
{
$row = $db -> fetch_row ( $resql );
$lastyy = '' ;
if ( $row ) $lastyy = substr ( $row [ 0 ], 0 , 4 );
}
2006-06-28 13:22:10 +02:00
2006-05-03 12:22:25 +02:00
// Si au moins un champ respectant le mod<6F> le a <20> t<EFBFBD> trouv<75> e
if ( eregi ( 'C[0-9][0-9]' , $cyy ))
{
// Recherche rapide car restreint par un like sur champ index<65>
$posindice = 4 ;
$sql = " SELECT MAX(0+SUBSTRING(ref, $posindice )) " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " commande " ;
$sql .= " WHERE ref like ' ${ cyy } %' " ;
$resql = $db -> query ( $sql );
if ( $resql )
{
$row = $db -> fetch_row ( $resql );
$max = $row [ 0 ];
}
}
2006-06-28 13:36:56 +02:00
else if ( ! eregi ( 'C[0-9][0-9]' , $lastyy ))
2006-05-03 12:22:25 +02:00
{
2006-05-11 15:55:33 +02:00
$max = $conf -> global -> COMMANDE_DIAMANT_DELTA ? $conf -> global -> COMMANDE_DIAMANT_DELTA : 0 ;
2006-05-03 12:37:58 +02:00
}
2006-05-11 15:55:33 +02:00
$num = sprintf ( " %05s " , $max + 1 );
2006-05-03 12:22:25 +02:00
$yy = strftime ( " %y " , time ());
return " C $yy $num " ;
}
2006-05-06 16:51:58 +02:00
/** \brief Renvoie la r<EFBFBD> f<EFBFBD> rence de commande suivante non utilis<EFBFBD> e
2006-05-03 12:22:25 +02:00
* \param objsoc Objet soci<EFBFBD> t<EFBFBD>
* \return string Texte descripif
*/
function commande_get_num ( $objsoc = 0 )
{
return $this -> getNextValue ();
}
2006-02-15 11:48:32 +01:00
}
?>