dolibarr/htdocs/includes/modules/commande/mod_commande_marbre.php

151 lines
4.5 KiB
PHP
Raw Normal View History

<?php
/* Copyright (C) 2005 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2006 Regis Houssin <regis.houssin@cap-networks.com>
*
* 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_marbre.php
\ingroup commande
\brief Fichier contenant la classe du mod<EFBFBD>le de num<EFBFBD>rotation de r<EFBFBD>f<EFBFBD>rence de commande Marbre
\version $Revision$
*/
require_once(DOL_DOCUMENT_ROOT ."/includes/modules/commande/modules_commande.php");
/** \class mod_commande_marbre
\brief Classe du mod<EFBFBD>le de num<EFBFBD>rotation de r<EFBFBD>f<EFBFBD>rence de commande Marbre
*/
class mod_commande_marbre extends ModeleNumRefCommandes
{
2006-05-08 21:49:15 +02:00
var $prefix='CO';
var $error='';
2006-05-08 21:49:15 +02:00
/*
* \brief Constructeur
*/
function mod_commande_marbre()
{
2006-05-08 21:49:15 +02:00
$this->nom = "Marbre";
}
2006-05-08 21:49:15 +02:00
/** \brief Renvoi la description du modele de num<EFBFBD>rotation
* \return string Texte descripif
*/
function info()
{
2006-05-08 21:49:15 +02:00
return "Renvoie le num<75>ro sous la forme ".$this->prefix."yymm-nnnn o<> yy est l'ann<6E>e, mm le mois et nnnn un compteur s<>quentiel sans rupture et sans remise <20> 0";
}
/** \brief Renvoi un exemple de num<EFBFBD>rotation
* \return string Example
*/
function getExample()
{
2006-05-08 21:49:15 +02:00
return $this->prefix."0501-0001";
}
/** \brief Test si les num<EFBFBD>ros d<EFBFBD>j<EFBFBD> en vigueur dans la base ne provoquent pas de
* de conflits qui empechera cette num<EFBFBD>rotation de fonctionner.
* \return boolean false si conflit, true si ok
*/
function canBeActivated()
{
2006-05-08 21:49:15 +02:00
$coyymm='';
$sql = "SELECT MAX(ref)";
$sql.= " FROM ".MAIN_DB_PREFIX."commande";
$resql=$db->query($sql);
if ($resql)
{
$row = $db->fetch_row($resql);
2006-05-08 21:49:15 +02:00
if ($row) $coyymm = substr($row[0],0,6);
}
2006-05-08 21:49:15 +02:00
if (! $coyymm || eregi($this->prefix.'[0-9][0-9][0-9][0-9]',$coyymm))
{
return true;
}
else
{
2006-05-08 21:49:15 +02:00
$this->error='Une commande commen<65>ant par $coyymm existe en base et est incompatible avec cette num<75>rotation. Supprimer la ou renommer la pour activer ce module.';
return false;
}
}
/** \brief Renvoi prochaine valeur attribu<EFBFBD>e
* \return string Valeur
*/
function getNextValue()
{
global $db;
// D'abord on r<>cup<75>re la valeur max (r<>ponse imm<6D>diate car champ ind<6E>x<EFBFBD>)
2006-05-08 21:49:15 +02:00
$coyymm='';
$sql = "SELECT MAX(ref)";
$sql.= " FROM ".MAIN_DB_PREFIX."commande";
$resql=$db->query($sql);
if ($resql)
{
$row = $db->fetch_row($resql);
2006-05-08 21:49:15 +02:00
if ($row) $coyymm = substr($row[0],0,6);
}
2006-05-08 21:49:15 +02:00
// Si champ respectant le mod<6F>le a <20>t<EFBFBD> trouv<75>e
if (eregi('^'+$this->prefix+'[0-9][0-9][0-9][0-9]',$coyymm))
{
// Recherche rapide car restreint par un like sur champ index<65>
$posindice=8;
$sql = "SELECT MAX(0+SUBSTRING(ref,$posindice))";
$sql.= " FROM ".MAIN_DB_PREFIX."commande";
2006-05-08 21:49:15 +02:00
$sql.= " WHERE ref like '${coyymm}%'";
$resql=$db->query($sql);
if ($resql)
{
$row = $db->fetch_row($resql);
$max = $row[0];
}
}
else
{
$max=0;
}
$yymm = strftime("%y%m",time());
$num = sprintf("%04s",$max+1);
2006-05-08 21:49:15 +02:00
return $this->prefix."$yymm-$num";
}
/** \brief Renvoie la r<EFBFBD>f<EFBFBD>rence de commande suivante non utilis<EFBFBD>e
* \param objsoc Objet soci<EFBFBD>t<EFBFBD>
* \return string Texte descripif
*/
function commande_get_num($objsoc=0)
{
return $this->getNextValue();
}
}
?>