[ Index ] |
|
Code source de Dolibarr 2.0.1 |
1 <?php 2 /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org> 3 * Copyright (C) 2004-2005 Laurent Destailleur <eldy@users.sourceforge.net> 4 * Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com> 5 * Copyright (C) 2005 Regis Houssin <regis.houssin@cap-networks.com> 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 20 * or see http://www.gnu.org/ 21 * 22 * $Id: modules_facture.php,v 1.36 2005/12/07 14:06:20 rodolphe Exp $ 23 * $Source: /cvsroot/dolibarr/dolibarr/htdocs/includes/modules/facture/modules_facture.php,v $ 24 */ 25 26 /** 27 \file htdocs/includes/modules/facture/modules_facture.php 28 \ingroup facture 29 \brief Fichier contenant la classe mère de generation des factures en PDF 30 et la classe mère de numérotation des factures 31 \version $Revision: 1.36 $ 32 */ 33 34 require_once(FPDF_PATH.'fpdf.php'); 35 require_once(DOL_DOCUMENT_ROOT."/product.class.php"); 36 require_once (DOL_DOCUMENT_ROOT."/compta/bank/account.class.php"); // Requis car utilisé dans les classes qui héritent 37 38 39 /** 40 \class ModelePDFFactures 41 \brief Classe mère des modèles de facture 42 */ 43 44 class ModelePDFFactures extends FPDF 45 { 46 var $error=''; 47 48 /** 49 * \brief Renvoi le dernier message d'erreur de création de facture 50 */ 51 function pdferror() 52 { 53 return $this->error; 54 } 55 56 /** 57 * \brief Renvoi la liste des modèles actifs 58 * \param db Handler de base 59 */ 60 function liste_modeles($db) 61 { 62 $liste=array(); 63 $sql =""; 64 65 $resql = $db->query($sql); 66 if ($resql) 67 { 68 $num = $db->num_rows($resql); 69 $i = 0; 70 while ($i < $num) 71 { 72 $row = $db->fetch_row($resql); 73 $liste[$row[0]]=$row[1]; 74 $i++; 75 } 76 } 77 else 78 { 79 return -1; 80 } 81 return $liste; 82 } 83 84 } 85 86 /** 87 \class ModeleNumRefFactures 88 \brief Classe mère des modèles de numérotation des références de facture 89 */ 90 91 class ModeleNumRefFactures 92 { 93 var $error=''; 94 95 /** \brief Renvoi la description par defaut du modele de numérotation 96 * \return string Texte descripif 97 */ 98 function info() 99 { 100 global $langs; 101 $langs->load("bills"); 102 return $langs->trans("NoDescription"); 103 } 104 105 /** \brief Renvoi un exemple de numérotation 106 * \return string Example 107 */ 108 function getExample() 109 { 110 global $langs; 111 $langs->load("bills"); 112 return $langs->trans("NoExample"); 113 } 114 115 /** \brief Test si les numéros déjà en vigueur dans la base ne provoquent pas de 116 * de conflits qui empechera cette numérotation de fonctionner. 117 * \return boolean false si conflit, true si ok 118 */ 119 function canBeActivated() 120 { 121 return true; 122 } 123 124 /** \brief Renvoi prochaine valeur attribuée 125 * \return string Valeur 126 */ 127 function getNextValue() 128 { 129 global $langs; 130 return $langs->trans("NotAvailable"); 131 } 132 } 133 134 135 /** 136 \brief Crée un facture sur disque en fonction du modèle de FACTURE_ADDON_PDF 137 \param db objet base de donnée 138 \param facid id de la facture à créer 139 \param message message 140 \return int 0 si KO, 1 si OK 141 */ 142 function facture_pdf_create($db, $facid, $message="") 143 { 144 global $langs; 145 $langs->load("bills"); 146 147 $dir = DOL_DOCUMENT_ROOT . "/includes/modules/facture/"; 148 149 if (defined("FACTURE_ADDON_PDF") && FACTURE_ADDON_PDF) 150 { 151 $file = "pdf_".FACTURE_ADDON_PDF.".modules.php"; 152 153 $classname = "pdf_".FACTURE_ADDON_PDF; 154 require_once($dir.$file); 155 156 $obj = new $classname($db); 157 $obj->message = $message; 158 159 if ( $obj->write_pdf_file($facid) > 0) 160 { 161 // Succès de la création de la facture. On génère le fichier meta 162 facture_meta_create($db, $facid); 163 164 // et on supprime l'image correspondant au preview 165 facture_delete_preview($db, $facid); 166 167 return 1; //TODO A MODIFIER 168 } 169 else 170 { 171 dolibarr_syslog("Erreur dans facture_pdf_create"); 172 dolibarr_print_error($db,$obj->pdferror()); 173 return 0; 174 } 175 176 } 177 else 178 { 179 print $langs->trans("Error")." ".$langs->trans("Error_FACTURE_ADDON_PDF_NotDefined"); 180 return 0; 181 } 182 } 183 184 /** 185 \brief Créé un meta fichier à côté de la facture sur le disque pour faciliter les recherches en texte plein. Pourquoi ? tout simplement parcequ'en fin d'exercice quand je suis avec mon comptable je n'ai pas de connexion internet "rapide" pour retrouver en 2 secondes une facture non payée ou compliquée à gérer ... avec un rgrep c'est vite fait bien fait [eric seigne] 186 \param db Objet base de donnée 187 \param facid Id de la facture à créer 188 \param message Message 189 */ 190 function facture_meta_create($db, $facid, $message="") 191 { 192 global $langs,$conf; 193 194 $fac = new Facture($db,"",$facid); 195 $fac->fetch($facid); 196 $fac->fetch_client(); 197 198 if ($conf->facture->dir_output) 199 { 200 $facref = sanitize_string($fac->ref); 201 $dir = $conf->facture->dir_output . "/" . $facref ; 202 $file = $dir . "/" . $facref . ".meta"; 203 204 if (! file_exists($dir)) 205 { 206 umask(0); 207 if (! mkdir($dir, 0755)) 208 { 209 $this->error=$langs->trans("ErrorCanNotCreateDir",$dir); 210 return 0; 211 } 212 } 213 214 if (file_exists($dir)) 215 { 216 $nblignes = sizeof($fac->lignes); 217 $client = $fac->client->nom . " " . $fac->client->adresse . " " . $fac->client->cp . " " . $fac->client->ville; 218 $meta = "REFERENCE=\"" . $fac->ref . "\" 219 DATE=\"" . strftime("%d/%m/%Y",$fac->date) . "\" 220 NB_ITEMS=\"" . $nblignes . "\" 221 CLIENT=\"" . $client . "\" 222 TOTAL_HT=\"" . $fac->total_ht . "\" 223 TOTAL_TTC=\"" . $fac->total_ttc . "\"\n"; 224 225 for ($i = 0 ; $i < $nblignes ; $i++) { 226 //Pour les articles 227 $meta .= "ITEM_" . $i . "_QUANTITY=\"" . $fac->lignes[$i]->qty . "\" 228 ITEM_" . $i . "_UNIT_PRICE=\"" . $fac->lignes[$i]->price . "\" 229 ITEM_" . $i . "_TVA=\"" .$fac->lignes[$i]->tva_taux . "\" 230 ITEM_" . $i . "_DESCRIPTION=\"" . str_replace("\r\n","",nl2br($fac->lignes[$i]->desc)) . "\" 231 "; 232 } 233 } 234 $fp = fopen ($file,"w"); 235 fputs($fp,$meta); 236 fclose($fp); 237 } 238 } 239 240 241 /** 242 \brief Supprime l'image de prévisualitation, pour le cas de régénération de facture 243 \param db objet base de donnée 244 \param facid id de la facture à créer 245 */ 246 function facture_delete_preview($db, $facid) 247 { 248 global $langs,$conf; 249 250 $fac = new Facture($db,"",$facid); 251 $fac->fetch($facid); 252 $fac->fetch_client(); 253 254 if ($conf->facture->dir_output) 255 { 256 $facref = sanitize_string($fac->ref); 257 $dir = $conf->facture->dir_output . "/" . $facref ; 258 $file = $dir . "/" . $facref . ".pdf.png"; 259 260 if ( file_exists( $file ) && is_writable( $file ) ) 261 { 262 if ( ! unlink($file) ) 263 { 264 $this->error=$langs->trans("ErrorFailedToOpenFile",$file); 265 return 0; 266 } 267 } 268 } 269 } 270 271 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Mon Nov 26 12:29:37 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |