Amlioration de la gestion des modules de numrotation.

Ajout du module mod_propale_marbre (PRYYMM-9999)
Ajout du module mod_facture_terre (FAYYMM-9999)
This commit is contained in:
Laurent Destailleur 2005-08-22 19:09:45 +00:00
parent a908b13e47
commit 4828308a3f
4 changed files with 211 additions and 38 deletions

View File

@ -1,6 +1,6 @@
<?php
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004 Laurent Destailleur <eldy@users.sourceforge.net>
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2005 Laurent Destailleur <eldy@users.sourceforge.net>
*
* 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
@ -19,11 +19,11 @@
*
* $Id$
* $Source$
*
*/
/** \file htdocs/includes/modules/propale/mod_propale_ivoire.php
/**
\file htdocs/includes/modules/propale/mod_propale_ivoire.php
\ingroup propale
\brief Fichier contenant la classe du modèle de numérotation de référence de propale Ivoire
\version $Revision$
@ -51,10 +51,19 @@ class mod_propale_ivoire extends ModeleNumRefPropales
*/
function getExample()
{
return "PR040001";
return "PR050001";
}
/** \brief Renvoi prochaine valeur attribuée
* \return string Valeur
*/
function getNextValue()
{
return $this->propale_get_num();
}
/** \brief Renvoie la référence de propale suivante non utilisée
* \param objsoc Objet société
* \return string Texte descripif

View File

@ -22,14 +22,16 @@
*
*/
/** \file htdocs/includes/modules/propale/mod_propale_jade.php
/**
\file htdocs/includes/modules/propale/mod_propale_jade.php
\ingroup propale
\brief Fichier contenant la classe du modèle de numérotation de référence de propale Jade
\version $Revision$
*/
/** \class mod_propale_jade
/**
\class mod_propale_jade
\brief Classe du modèle de numérotation de référence de propale Jade
*/
@ -41,7 +43,7 @@ class mod_propale_jade extends ModeleNumRefPropales
*/
function info()
{
return "Renvoie le numéro sous la forme PROPn";
return "Renvoie le numéro sous la forme PROPn ou n est un compteur continue sans remise à 0";
}
@ -54,26 +56,35 @@ class mod_propale_jade extends ModeleNumRefPropales
}
/** \brief Renvoi prochaine valeur attribuée
* \return string Valeur
*/
function getNextValue()
{
return $this->propale_get_num();
}
/** \brief Renvoie la référence de propale suivante non utilisée
* \param objsoc Objet société
* \return string Texte descripif
*/
function propale_get_num($objsoc=0)
{
global $db;
$sql = "SELECT count(*) FROM ".MAIN_DB_PREFIX."propal";
if ( $db->query($sql) )
{
$row = $db->fetch_row(0);
$num = $row[0];
}
$y = strftime("%y",time());
return "PROP" . $num;
{
global $db;
$sql = "SELECT count(*) FROM ".MAIN_DB_PREFIX."propal";
if ( $db->query($sql) )
{
$row = $db->fetch_row(0);
$num = $row[0];
}
$y = strftime("%y",time());
return "PROP" . ($num+1);
}
}

View File

@ -0,0 +1,151 @@
<?php
/* Copyright (C) 2005 Laurent Destailleur <eldy@users.sourceforge.net>
*
* 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/propale/mod_propale_marbre.php
\ingroup propale
\brief Fichier contenant la classe du modèle de numérotation de référence de propale Marbre
\version $Revision$
*/
/** \class mod_propale_marbre
\brief Classe du modèle de numérotation de référence de propale Marbre
*/
class mod_propale_marbre extends ModeleNumRefPropales
{
var $error='';
/** \brief Renvoi la description du modele de numérotation
* \return string Texte descripif
*/
function info()
{
return "Renvoie le numéro sous la forme PRyymm-nnnn où yy est l'année, mm le mois et nnnn un compteur séquentiel sans rupture et sans remise à 0";
}
/** \brief Renvoi un exemple de numérotation
* \return string Example
*/
function getExample()
{
return "PR0501-0001";
}
/** \brief Test si les numéros déjà en vigueur dans la base ne provoquent pas de
* de conflits qui empechera cette numérotation de fonctionner.
* \return boolean false si conflit, true si ok
*/
function canBeActivated()
{
$pryymm='';
$sql = "SELECT MAX(ref)";
$sql.= " FROM ".MAIN_DB_PREFIX."propal";
$resql=$db->query($sql);
if ($resql)
{
$row = $db->fetch_row($resql);
if ($row) $pryymm = substr($row[0],0,6);
}
if (! $pryymm || eregi('PR[0-9][0-9][0-9][0-9]',$pryymm))
{
return true;
}
else
{
$this->error='Une propal commençant par $pryymm existe en base et est incompatible avec cette numérotation. Supprimer la ou renommer la pour activer ce module.';
return false;
}
}
/** \brief Renvoi prochaine valeur attribuée
* \return string Valeur
*/
function getNextValue()
{
global $db;
// D'abord on récupère la valeur max (réponse immédiate car champ indéxé)
$pryymm='';
$sql = "SELECT MAX(ref)";
$sql.= " FROM ".MAIN_DB_PREFIX."propal";
$resql=$db->query($sql);
if ($resql)
{
$row = $db->fetch_row($resql);
if ($row) $pryymm = substr($row[0],0,6);
}
// Si au moins un champ respectant le modèle a été trouvée
if (eregi('PR[0-9][0-9][0-9][0-9]',$pryymm))
{
// Recherche rapide car restreint par un like sur champ indexé
$posindice=8;
$sql = "SELECT MAX(0+SUBSTR(ref,$posindice))";
$sql.= " FROM ".MAIN_DB_PREFIX."propal";
$sql.= " WHERE ref like '${pryymm}%'";
$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);
return "PR$yymm-$num";
}
/** \brief Renvoie la référence de propale suivante non utilisée
* \param objsoc Objet société
* \return string Texte descripif
*/
function propale_get_num($objsoc=0)
{
global $db;
$sql = "SELECT MAX(ref) as nb FROM ".MAIN_DB_PREFIX."propal";
$resql=$db->query($sql);
if ($resql)
{
$row = $db->fetch_row($resql);
$num = $row[0];
}
$yymm = strftime("%y%m",time());
return "PR$yymm-".$obj->prefix.'-'.substr("000".$num, 0,-4);
}
}
?>

View File

@ -22,24 +22,25 @@
*
*/
/*! \file htdocs/includes/modules/propale/modules_propale.php
/**
\file htdocs/includes/modules/propale/modules_propale.php
\ingroup propale
\brief Fichier contenant la classe mère de generation des propales en PDF
et la classe mère de numérotation des propales
et la classe mère de numérotation des propales
\version $Revision$
*/
/*! \class ModelePDFPropales
\brief Classe mère des modèles de propale
/**
\class ModelePDFPropales
\brief Classe mère des modèles de propale
*/
class ModelePDFPropales extends FPDF
{
var $error='';
/*!
/**
\brief Renvoi le dernier message d'erreur de création de propale
*/
function pdferror()
@ -50,7 +51,7 @@ class ModelePDFPropales extends FPDF
}
/*!\class ModeleNumRefPropales
/**\class ModeleNumRefPropales
\brief Classe mère des modèles de numérotation des références de propales
*/
@ -58,7 +59,7 @@ class ModeleNumRefPropales
{
var $error='';
/*! \brief Renvoi la description par defaut du modele de numérotation
/** \brief Renvoi la description par defaut du modele de numérotation
* \return string Texte descripif
*/
function info()
@ -68,7 +69,7 @@ class ModeleNumRefPropales
return $langs->trans("NoDescription");
}
/*! \brief Renvoi un exemple de numérotation
/** \brief Renvoi un exemple de numérotation
* \return string Example
*/
function getExample()
@ -78,18 +79,19 @@ class ModeleNumRefPropales
return $langs->trans("NoExample");
}
/*!
\brief Renvoi le dernier message d'erreur de création de propale
*/
function numreferror()
/** \brief Test si les numéros déjà en vigueur dans la base ne provoquent pas de
* de conflits qui empechera cette numérotation de fonctionner.
* \return boolean false si conflit, true si ok
*/
function canBeActivated()
{
return $this->error;
return true;
}
}
/*!
/**
\brief Crée une propale sur disque en fonction du modèle de PROPALE_ADDON_PDF
\param db objet base de donnée
\param facid id de la facture à créer