New: Amlioration de la gestion des erreurs sur la gnration des factures.

Fix: register_globals=off sur la page config facture et constantes autres.
New: Toutes les contantes de config en rapport avec le module facture (FAC_) ont t sorties de la page "autres" et places dans la page config du module facture.
This commit is contained in:
Laurent Destailleur 2004-07-25 13:12:15 +00:00
parent 23e18edfc0
commit d6b11b2848
10 changed files with 283 additions and 82 deletions

View File

@ -32,37 +32,40 @@ print_titre("Configuration autre (Dolibarr version ".DOL_VERSION.")");
//print_r(get_defined_constants());
print "<br>\n";
print '<table class="noborder" cellpadding="3" cellspacing="0" width="100%">';
print '<TR class="liste_titre">';
print '<TD>Nom</TD>';
print '<TD>Valeur</TD>';
print '<TD>Type</TD>';
print '<TD>Note</TD>';
print "<TD>Action</TD>";
print "</TR>\n";
$form = new Form($db);
$typeconst=array('yesno','texte','chaine');
if ($HTTP_POST_VARS["action"] == 'update' || $HTTP_POST_VARS["action"] == 'add')
if ($_POST["action"] == 'update' || $_POST["action"] == 'add')
{
if (! dolibarr_set_const($db, $HTTP_POST_VARS["constname"],$HTTP_POST_VARS["constvalue"],$typeconst[$HTTP_POST_VARS["consttype"]],1,isset($HTTP_POST_VARS["constnote"])?$HTTP_POST_VARS["constnote"]:''));
if (! dolibarr_set_const($db, $_POST["constname"],$_POST["constvalue"],$typeconst[$_POST["consttype"]],1,isset($_POST["constnote"])?$_POST["constnote"]:''));
{
print $db->error();
}
}
if ($_GET["action"] == 'delete')
{
if (! dolibarr_del_const($db, $HTTP_POST_VARS["constname"]));
if (! dolibarr_del_const($db, $_GET["rowid"]));
{
print $db->error();
}
}
print '<table class="noborder" cellpadding="2" cellspacing="0" width="100%">';
print '<tr class="liste_titre">';
print '<td>Nom</td>';
print '<td>Valeur</td>';
print '<td>Type</td>';
print '<td>Note</td>';
print "<td>Action</td>";
print "</tr>\n";
# Affiche lignes des constantes
$form = new Form($db);
if ($all==1){
$sql = "SELECT rowid, name, value, type, note FROM llx_const ORDER BY name ASC";
}else{
@ -80,7 +83,7 @@ if ($result)
$obj = $db->fetch_object( $i);
$var=!$var;
print '<form action="'.$PHP_SELF.'" method="POST">';
print '<form action="const.php" method="POST">';
print '<input type="hidden" name="action" value="update">';
print '<input type="hidden" name="rowid" value="'.$rowid.'">';
print '<input type="hidden" name="constname" value="'.$obj->name.'">';
@ -96,7 +99,7 @@ if ($result)
}
elseif ($obj->type == 'texte')
{
print '<textarea name="constvalue" cols="35" rows="5" wrap="soft">';
print '<textarea name="constvalue" cols="35" rows="4" wrap="soft">';
print $obj->value;
print "</textarea>\n";
print '</td><td>';
@ -113,16 +116,18 @@ if ($result)
print '<input type="text" size="15" name="constnote" value="'.stripslashes(nl2br($obj->note)).'">';
print '</td><td>';
print '<input type="Submit" value="Update" name="Button"> &nbsp; ';
print '<a href="'.$PHP_SELF.'?rowid='.$obj->rowid.'&action=delete">'.img_delete().'</a>';
print '<a href="const.php?rowid='.$obj->rowid.'&action=delete">'.img_delete().'</a>';
print "</td></tr>\n";
print '</form>';
$i++;
}
}
$var=!$var;
print '<form action="'.$PHP_SELF.'" method="POST">';
# Affiche ligne d'ajout
$var=!$var;
print '<form action="const.php" method="POST">';
print '<input type="hidden" name="action" value="add">';
print "<tr $bc[$var] class=value><td><input type=\"text\" size=\"15\" name=\"constname\" value=\"\"></td>\n";
@ -143,6 +148,8 @@ print '</form>';
print '</tr>';
print '</table>';
$db->close();

View File

@ -24,20 +24,6 @@ require("./pre.inc.php");
if (!$user->admin)
accessforbidden();
/*
if ($HTTP_POST_VARS["action"] == 'update')
{
dolibarr_set_const($db, "FAC_PDF_INTITULE2",$HTTP_POST_VARS["nom2"]);
dolibarr_set_const($db, "FAC_PDF_INTITULE",$HTTP_POST_VARS["nom"]);
dolibarr_set_const($db, "FAC_PDF_ADRESSE",$HTTP_POST_VARS["adresse"]);
dolibarr_set_const($db, "FAC_PDF_TEL",$HTTP_POST_VARS["tel"]);
dolibarr_set_const($db, "FAC_PDF_FAX",$HTTP_POST_VARS["fax"]);
dolibarr_set_const($db, "FAC_PDF_SIREN",$HTTP_POST_VARS["siren"]);
dolibarr_set_const($db, "FAC_PDF_SIRET",$HTTP_POST_VARS["siret"]);
Header("Location: facture.php");
}
*/
$facture_addon_var = FACTURE_ADDON;
$facture_addon_var_pdf = FACTURE_ADDON_PDF;
@ -45,6 +31,9 @@ $facture_rib_number_var = FACTURE_RIB_NUMBER;
$facture_chq_number_var = FACTURE_CHQ_NUMBER;
$facture_tva_option = FACTURE_TVAOPTION;
$typeconst=array('yesno','texte','chaine');
if ($_GET["action"] == 'set')
{
if (dolibarr_set_const($db, "FACTURE_ADDON",$_GET["value"])) $facture_addon_var = $_GET["value"];
@ -65,25 +54,44 @@ if ($_POST["action"] == 'settvaoption')
{
if (dolibarr_set_const($db, "FACTURE_TVAOPTION",$_POST["optiontva"])) $facture_tva_option = $_POST["optiontva"];
}
if ($_POST["action"] == 'update' || $_POST["action"] == 'add')
{
if (! dolibarr_set_const($db, $_POST["constname"],$_POST["constvalue"],$typeconst[$_POST["consttype"]],0,isset($_POST["constnote"])?$_POST["constnote"]:''));
{
print $db->error();
}
}
if ($_GET["action"] == 'delete')
{
if (! dolibarr_del_const($db, $_GET["rowid"]));
{
print $db->error();
}
}
llxHeader();
$dir = "../includes/modules/facture/";
print_titre("Configuration du module Factures");
/*
* Module numérotation
*/
print "<br>";
print_titre("Module de numérotation des factures");
print '<table class="noborder" cellpadding="3" cellspacing="0" width=\"100%\">';
print '<TR class="liste_titre">';
print '<table class="noborder" cellpadding="2" cellspacing="0" width=\"100%\">';
print '<tr class="liste_titre">';
print '<td>Nom</td>';
print '<td>Description</td>';
print '<td align="center" width="60">Activé</td>';
print '<td width="80">&nbsp;</td>';
print "</TR>\n";
print "</tr>\n";
clearstatcache();
@ -130,7 +138,7 @@ print '</table>';
print '<br>';
print_titre("Modèles de facture pdf");
print '<table class="noborder" cellpadding="3" cellspacing="0" width=\"100%\">';
print '<table class="noborder" cellpadding="2" cellspacing="0" width=\"100%\">';
print '<tr class="liste_titre">';
print '<td>Nom</td>';
print '<td>Description</td>';
@ -189,7 +197,8 @@ print '</table>';
print '<br>';
print_titre( "Mode de règlement à afficher sur les factures");
print '<table class="noborder" cellpadding="3" cellspacing="0" width=\"100%\">';
print '<table class="noborder" cellpadding="2" cellspacing="0" width=\"100%\">';
$var=True;
print '<form action="facture.php" method="post">';
print '<input type="hidden" name="action" value="setribchq">';
@ -197,11 +206,11 @@ print '<tr class="liste_titre">';
print '<td>Mode règlement à proposer</td>';
print '<td align="right"><input type="submit" value="Modifier"></td>';
print "</tr>\n";
print '<tr '.$bc[True].'>';
$var=!$var;
print '<tr '.$bc[$var].'>';
print "<td>Proposer paiement par RIB sur le compte</td>";
print "<td>";
$sql = "SELECT rowid, label FROM ".MAIN_DB_PREFIX."bank_account where clos = 0";
$var=True;
if ($db->query($sql))
{
$num = $db->num_rows();
@ -230,8 +239,8 @@ if ($db->query($sql))
}
}
print "</td></tr>";
print '<tr '.$bc[False].'>';
$var=!$var;
print '<tr '.$bc[$var].'>';
print "<td>Proposer paiement par chèque à l'ordre et adresse du titulaire du compte</td>";
print "<td>";
$sql = "SELECT rowid, label FROM ".MAIN_DB_PREFIX."bank_account where clos = 0";
@ -267,20 +276,6 @@ if ($db->query($sql))
print "</td></tr>";
print "</form>";
print "</table>";
$db->close();
/*
* Repertoire
*/
print '<br>';
print_titre("Chemins d'accés aux documents");
print '<table class="noborder" cellpadding="3" cellspacing="0" width=\"100%\">';
print '<tr class="liste_titre">';
print '<td>Nom</td><td>Valeur</td>';
print "</tr>\n";
print '<tr '.$bc[True].'><td width=\"140\">Répertoire</td><td>'.FAC_OUTPUTDIR.'</td></tr>';
print "</table>";
/*
@ -289,19 +284,107 @@ print "</table>";
print '<br>';
print_titre("Options fiscales de facturation de la TVA");
print '<table class="noborder" cellpadding="3" cellspacing="0" width=\"100%\">';
print '<table class="noborder" cellpadding="2" cellspacing="0" width=\"100%\">';
print '<form action="facture.php" method="post">';
print '<input type="hidden" name="action" value="settvaoption">';
print '<tr class="liste_titre">';
print '<td>Option</td><td>Description</td>';
print '<td align="right"><input type="submit" value="Modifier"></td>';
print "</tr>\n";
print "<tr ".$bc[True]."><td width=\"140\"><input type=\"radio\" name=\"optiontva\" value=\"reel\"".($facture_tva_option != "franchise"?" checked":"")."> Option réel</td>";
$var=True;
$var=!$var;
print "<tr ".$bc[$var]."><td width=\"140\"><input type=\"radio\" name=\"optiontva\" value=\"reel\"".($facture_tva_option != "franchise"?" checked":"")."> Option réel</td>";
print "<td colspan=\"2\">L'option 'réel' est la plus courante. Elle est à destination des entreprises et professions libérales.\nChaque produits/service vendu est soumis à la TVA (Dolibarr propose le taux standard par défaut à la création d'une facture). Cette dernière est récupérée l'année suivante suite à la déclaration TVA pour les produits/services achetés et est reversée à l'état pour les produits/services vendus.</td></tr>\n";
print "<tr ".$bc[False]."><td width=\"140\"><input type=\"radio\" name=\"optiontva\" value=\"franchise\"".($facture_tva_option == "franchise"?" checked":"")."> Option franchise</td>";
$var=!$var;
print "<tr ".$bc[$var]."><td width=\"140\"><input type=\"radio\" name=\"optiontva\" value=\"franchise\"".($facture_tva_option == "franchise"?" checked":"")."> Option franchise</td>";
print "<td colspan=\"2\">L'option 'franchise' est utilisée par les particuliers ou professions libérales à titre occasionnel avec de petits chiffres d'affaires.\nChaque produits/service vendu est soumis à une TVA de 0 (Dolibarr propose le taux 0 par défaut à la création d'une facture cliente). Il n'y a pas de déclaration ou récupération de TVA, et les factures qui gèrent l'option affichent la mention obligatoire \"TVA non applicable - art-293B du CGI\".</td></tr>\n";
print "</form>";
print "</table>";
/*
* Autres constantes
*/
print '<br>';
print_titre("Autres constantes relatives aux factures");
print '<table class="noborder" cellpadding="2" cellspacing="0" width="100%">';
print '<tr class="liste_titre">';
print '<td>Nom</td>';
print '<td>Valeur</td>';
print '<td>Type</td>';
print '<td>Note</td>';
print "<td>Action</td>";
print "</tr>\n";
# Affiche lignes des constantes
$form = new Form($db);
$exclude="'FACTURE_ADDON','FACTURE_ADDON_PDF','FACTURE_CHQ_NUMBER','FACTURE_RIB_NUMBER','FACTURE_TVAOPTION'"; # Lignes exclues car affichées précédemment
$sql = "SELECT rowid, name, value, type, note FROM llx_const ";
$sql.= "WHERE name like 'FAC%' ";
$sql.= "AND name not in ($exclude)";
$sql.= "ORDER BY name ASC";
$result = $db->query($sql);
if ($result)
{
$num = $db->num_rows();
$i = 0;
$var=True;
while ($i < $num)
{
$obj = $db->fetch_object( $i);
$var=!$var;
print '<form action="facture.php" method="POST">';
print '<input type="hidden" name="action" value="update">';
print '<input type="hidden" name="rowid" value="'.$rowid.'">';
print '<input type="hidden" name="constname" value="'.$obj->name.'">';
print "<tr $bc[$var] class=value><td>$obj->name</td>\n";
print '<td>';
if ($obj->type == 'yesno')
{
$form->selectyesnonum('constvalue',$obj->value);
print '</td><td>';
$form->select_array('consttype',array('yesno','texte','chaine'),0);
}
elseif ($obj->type == 'texte')
{
print '<textarea name="constvalue" cols="35" rows="4" wrap="soft">';
print $obj->value;
print "</textarea>\n";
print '</td><td>';
$form->select_array('consttype',array('yesno','texte','chaine'),1);
}
else
{
print '<input type="text" size="30" name="constvalue" value="'.stripslashes($obj->value).'">';
print '</td><td>';
$form->select_array('consttype',array('yesno','texte','chaine'),2);
}
print '</td><td>';
print '<input type="text" size="15" name="constnote" value="'.stripslashes(nl2br($obj->note)).'">';
print '</td><td>';
print '<input type="Submit" value="Update" name="Button"> &nbsp; ';
print '<a href="const.php?rowid='.$obj->rowid.'&action=delete">'.img_delete().'</a>';
print "</td></tr>\n";
print '</form>';
$i++;
}
}
print "</table>\n";
print "<br>\n";
$db->close();
llxFooter("<em>Derni&egrave;re modification $Date$ r&eacute;vision $Revision$</em>");
?>

View File

@ -58,6 +58,12 @@ function jupiter_get_num_explain()
Système de numérotation mensuel sous la forme F20030715, qui correspond à la 15ème facture du mois de Juillet 2003';
}
/*!
\brief Crée un facture sur disque en fonction du modèle de FACTURE_ADDON_PDF
\param db objet base de donnée
\param facid id de la facture à créer
*/
function facture_pdf_create($db, $facid)
{
@ -79,7 +85,7 @@ function facture_pdf_create($db, $facid)
}
else
{
print "Erreur";
print $obj->error();
return 0;
}
}

View File

@ -1,5 +1,6 @@
<?PHP
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004 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
@ -29,6 +30,16 @@ Class pdf_adytek extends FPDF{
$this->description = "Modèle de facture avec remise et infos réglement à la mode de chez nous";
}
/*!
\brief Renvoi le dernier message d'erreur de création de facture
*/
Function error()
{
return $this->error;
}
Function write_pdf_file($facid)
{
global $user;
@ -46,7 +57,8 @@ Class pdf_adytek extends FPDF{
umask(0);
if (! mkdir($dir, 0755))
{
print "Impossible de créer $dir !";
$this->error="Erreur: Le répertoire '$dir' n'existe pas et Dolibarr n'a pu le créer.";
return 0;
}
}
@ -197,12 +209,14 @@ Class pdf_adytek extends FPDF{
}
else
{
print "Erreur : le répertoire $dir n'existe pas !";
$this->error="Erreur: Le répertoire '$dir' n'existe pas et Dolibarr n'a pu le créer.";
return 0;
}
}
else
{
print "FAC_OUTPUTDIR non définit !";
$this->error="Erreur: FAC_OUTPUTDIR non défini !";
return 0;
}
}
/*

View File

@ -1,5 +1,6 @@
<?PHP
/* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004 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
@ -29,6 +30,16 @@ Class pdf_bernique {
$this->description = "Modèle pour les factures avec plusieurs taux de tva, inclus aussi le numéro de TVA Intracommunautaire";
}
/*!
\brief Renvoi le dernier message d'erreur de création de facture
*/
Function error()
{
return $this->error;
}
Function write_pdf_file($facid)
{
global $user;
@ -46,7 +57,8 @@ Class pdf_bernique {
umask(0);
if (! mkdir($dir, 0755))
{
print "Impossible de créer $dir !";
$this->error="Erreur: Le répertoire '$dir' n'existe pas et Dolibarr n'a pu le créer.";
return 0;
}
}
@ -162,12 +174,14 @@ Class pdf_bernique {
}
else
{
print "Erreur : le répertoire $dir n'existe pas !";
$this->error="Erreur: Le répertoire '$dir' n'existe pas et Dolibarr n'a pu le créer.";
return 0;
}
}
else
{
print "FAC_OUTPUTDIR non définit !";
$this->error="Erreur: FAC_OUTPUTDIR non défini !";
return 0;
}
}
/*

View File

@ -1,5 +1,6 @@
<?PHP
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004 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
@ -30,6 +31,15 @@ Class pdf_bigorneau {
}
/*!
\brief Renvoi le dernier message d'erreur de création de facture
*/
Function error()
{
return $this->error;
}
Function write_pdf_file($facid)
{
global $user;
@ -47,7 +57,8 @@ Class pdf_bigorneau {
umask(0);
if (! mkdir($dir, 0755))
{
print "Impossible de créer $dir !";
$this->error="Erreur: Le répertoire '$dir' n'existe pas et Dolibarr n'a pu le créer.";
return 0;
}
}
@ -201,12 +212,14 @@ Class pdf_bigorneau {
}
else
{
print "Erreur : le répertoire $dir n'existe pas !";
$this->error="Erreur: Le répertoire '$dir' n'existe pas et Dolibarr n'a pu le créer.";
return 0;
}
}
else
{
print "FAC_OUTPUTDIR non définit !";
$this->error="Erreur: FAC_OUTPUTDIR non défini !";
return 0;
}
}
/*

View File

@ -1,5 +1,6 @@
<?PHP
/* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004 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
@ -29,6 +30,16 @@ Class pdf_bulot {
$this->description = "Modèle de facture avec remise et infos réglement";
}
/*!
\brief Renvoi le dernier message d'erreur de création de facture
*/
Function error()
{
return $this->error;
}
Function write_pdf_file($facid)
{
global $user;
@ -46,7 +57,8 @@ Class pdf_bulot {
umask(0);
if (! mkdir($dir, 0755))
{
print "Impossible de créer $dir !";
$this->error="Erreur: Le répertoire '$dir' n'existe pas et Dolibarr n'a pu le créer.";
return 0;
}
}
@ -166,12 +178,14 @@ Class pdf_bulot {
}
else
{
print "Erreur : le répertoire $dir n'existe pas !";
$this->error="Erreur: Le répertoire '$dir' n'existe pas et Dolibarr n'a pu le créer.";
return 0;
}
}
else
{
print "FAC_OUTPUTDIR non définit !";
$this->error="Erreur: FAC_OUTPUTDIR non défini !";
return 0;
}
}
/*

View File

@ -21,13 +21,47 @@
*
*/
/*! \file pdf_crabe.modules.php
\brief Classe permettant de générer lune facture au modèle Crabe
\author Laurent Destailleur
\version $Revision$
*/
Class pdf_crabe {
var $error='';
/*!
\brief Constructeur
\param db objet base de donnée
*/
Function pdf_crabe($db=0)
{
$this->db = $db;
$this->description = "Modèle de facture classique (Gère l'option fiscale de facturation TVA et le choix du mode de règlement à afficher)";
}
/*!
\brief Renvoi le dernier message d'erreur de création de facture
*/
Function error()
{
return $this->error;
}
/*!
\brief Fonction générant la facture sur le disque
\param facid id de la facture à générer
\remarks Variables utilisées
\remarks FAC_OUTPUTDIR
\remarks FACTURE_CODEPRODUITSERVICE
\remarks FACTURE_CHQ_NUMBER
\remarks FACTURE_RIB_NUMBER
\remarks FAC_OUTPUTDIR
\return 1=ok, 0=ko
*/
Function write_pdf_file($facid)
{
global $user;
@ -44,7 +78,8 @@ Class pdf_crabe {
umask(0);
if (! mkdir($dir, 0755))
{
print "Erreur: Impossible de créer $dir !";
$this->error="Erreur: Le répertoire '$dir' n'existe pas et Dolibarr n'a pu le créer.";
return 0;
}
}
@ -212,13 +247,16 @@ Class pdf_crabe {
}
else
{
print "Erreur : le répertoire $dir n'existe pas !";
$this->error="Erreur: Le répertoire '$dir' n'existe pas et Dolibarr n'a pu le créer.";
return 0;
}
}
else
{
print "Erreur: FAC_OUTPUTDIR non défini !";
$this->error="Erreur: FAC_OUTPUTDIR non défini !";
return 0;
}
$this->error="Erreur: Erreur inconnue";
return 0; // Erreur par defaut
}
@ -302,8 +340,8 @@ Class pdf_crabe {
}
else
{
print "Erreur : ".$this->db->error()."<br>".$sql;
return -1;
$this->error="Echec requete SQL";
return 0;
}
}

View File

@ -1,5 +1,6 @@
<?PHP
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004 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
@ -29,6 +30,14 @@ Class pdf_tourteau {
$this->description = "Modèle de facture sans remise";
}
/*!
\brief Renvoi le dernier message d'erreur de création de facture
*/
Function error()
{
return $this->error;
}
Function write_pdf_file($facid)
{
@ -47,7 +56,8 @@ Class pdf_tourteau {
umask(0);
if (! mkdir($dir, 0755))
{
print "Impossible de créer $dir !";
$this->error="Erreur: Le répertoire '$dir' n'existe pas et Dolibarr n'a pu le créer.";
return 0;
}
}
@ -253,12 +263,14 @@ Class pdf_tourteau {
}
else
{
print "Erreur : le répertoire $dir n'existe pas !";
$this->error="Erreur: Le répertoire '$dir' n'existe pas et Dolibarr n'a pu le créer.";
return 0;
}
}
else
{
print "FAC_OUTPUTDIR non définit !";
$this->error="Erreur: FAC_OUTPUTDIR non défini !";
return 0;
}
}
/*

View File

@ -122,13 +122,13 @@ function dolibarr_set_const($db, $name, $value, $type='chaine', $visible=0, $not
/*!
\brief effacement d'une constante dans la base de données
\param db base de données
\param name nom de la constante
\param name nom ou rowid de la constante
\remarks retourne 0 pour raté, 1 pour réussi
*/
function dolibarr_del_const($db, $name)
{
$sql = "DELETE FROM llx_const WHERE name='$name'";
$sql = "DELETE FROM llx_const WHERE name='$name' or rowid='$name'";
if ($db->query($sql))
{