2004-10-20 00:24:10 +02:00
< ? php
2004-07-27 17:15:37 +02:00
/* Copyright ( C ) 2003 - 2004 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
2004-08-15 17:04:24 +02:00
* Copyright ( C ) 2004 Laurent Destailleur < eldy @ users . sourceforge . net >
2004-12-22 21:28:47 +01:00
* Copyright ( C ) 2004 Eric Seigne < eric . seigne @ ryxeo . com >
2003-03-11 16:33:17 +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 $
*
*/
2004-12-28 16:32:24 +01:00
/** \file htdocs / includes / modules / facture / modules_facture . php
2004-08-15 17:04:24 +02:00
\ingroup facture
\brief Fichier contenant la classe m<EFBFBD> re de generation des factures en PDF
et la classe m<EFBFBD> re de num<EFBFBD> rotation des factures
\version $Revision $
*/
require_once ( DOL_DOCUMENT_ROOT . " /product.class.php " );
2004-11-23 22:56:51 +01:00
require_once ( DOL_DOCUMENT_ROOT . " /compta/bank/account.class.php " ); // Requis car utilis<69> dans les classes qui h<> ritent
2004-08-15 17:04:24 +02:00
2004-12-28 16:32:24 +01:00
/** \class ModelePDFFactures
2004-08-15 17:04:24 +02:00
\brief Classe m<EFBFBD> re des mod<EFBFBD> les de facture
*/
2004-07-27 17:15:37 +02:00
2004-08-15 17:04:24 +02:00
class ModelePDFFactures extends FPDF
{
var $error = '' ;
2004-07-27 17:15:37 +02:00
2004-12-28 16:32:24 +01:00
/**
2004-08-15 17:04:24 +02:00
\brief Renvoi le dernier message d ' erreur de cr<EFBFBD> ation de facture
*/
function pdferror ()
2004-07-27 17:15:37 +02:00
{
2004-08-15 17:04:24 +02:00
return $this -> error ;
2004-07-27 17:15:37 +02:00
}
}
2003-03-11 16:33:17 +01:00
2004-12-28 16:32:24 +01:00
/** \class ModeleNumRefFactures
2004-09-21 11:15:15 +02:00
\brief Classe m<EFBFBD> re des mod<EFBFBD> les de num<EFBFBD> rotation des r<EFBFBD> f<EFBFBD> rences de facture
2004-08-15 17:04:24 +02:00
*/
2003-03-11 16:33:17 +01:00
2004-08-15 17:04:24 +02:00
class ModeleNumRefFactures
2003-03-11 16:33:17 +01:00
{
2004-08-15 17:04:24 +02:00
var $error = '' ;
2003-03-11 16:33:17 +01:00
2004-12-28 16:32:24 +01:00
/** \brief Renvoi la description par defaut du modele de num<EFBFBD> rotation
2004-08-15 17:04:24 +02:00
* \return string Texte descripif
*/
2004-08-15 19:38:54 +02:00
function info ()
2003-09-29 12:09:36 +02:00
{
2004-08-15 17:04:24 +02:00
global $langs ;
$langs -> load ( " bills " );
return $langs -> trans ( " NoDescription " );
2003-09-29 12:09:36 +02:00
}
2003-09-29 12:04:27 +02:00
2004-12-28 16:32:24 +01:00
/** \brief Renvoi un exemple de num<EFBFBD> rotation
2004-08-15 17:39:06 +02:00
* \return string Example
*/
function getExample ()
{
global $langs ;
$langs -> load ( " bills " );
return $langs -> trans ( " NoExample " );
}
2004-12-28 16:32:24 +01:00
/**
2004-08-15 17:04:24 +02:00
\brief Renvoi le dernier message d ' erreur de cr<EFBFBD> ation de facture
*/
function numreferror ()
{
return $this -> error ;
}
2003-09-29 12:04:27 +02:00
2003-08-02 17:26:11 +02:00
}
2003-04-13 16:48:38 +02:00
2004-07-25 15:12:15 +02:00
2004-12-28 16:32:24 +01:00
/**
\brief Cr<EFBFBD> e un facture sur disque en fonction du mod<EFBFBD> le de FACTURE_ADDON_PDF
\param db objet base de donn<EFBFBD> e
\param facid id de la facture <EFBFBD> cr<EFBFBD> er
\param message message
2004-07-25 15:12:15 +02:00
*/
2004-10-05 16:27:37 +02:00
function facture_pdf_create ( $db , $facid , $message = " " )
2003-04-13 16:48:38 +02:00
{
2004-08-15 17:04:24 +02:00
global $langs ;
$langs -> load ( " bills " );
2003-04-13 16:48:38 +02:00
2003-06-22 12:11:39 +02:00
$dir = DOL_DOCUMENT_ROOT . " /includes/modules/facture/ " ;
2003-04-13 16:48:38 +02:00
2004-08-15 17:04:24 +02:00
if ( defined ( " FACTURE_ADDON_PDF " ) && FACTURE_ADDON_PDF )
2003-04-13 16:48:38 +02:00
{
$file = " pdf_ " . FACTURE_ADDON_PDF . " .modules.php " ;
$classname = " pdf_ " . FACTURE_ADDON_PDF ;
require_once ( $dir . $file );
$obj = new $classname ( $db );
2004-10-05 16:27:37 +02:00
$obj -> message = $message ;
2003-09-09 19:05:47 +02:00
if ( $obj -> write_pdf_file ( $facid ) > 0 )
{
2004-12-23 19:28:58 +01:00
// Succ<63> s de la cr<63> ation de la facture. On g<> n<EFBFBD> re le fichier meta
facture_meta_create ( $db , $_GET [ " facid " ]);
return 1 ;
2003-09-09 19:05:47 +02:00
}
else
{
2004-09-21 11:15:15 +02:00
dolibarr_syslog ( " Erreur dans facture_pdf_create " );
2004-08-15 17:04:24 +02:00
dolibarr_print_error ( $db , $obj -> pdferror ());
2003-09-09 19:05:47 +02:00
return 0 ;
}
2003-04-13 16:48:38 +02:00
}
else
{
2004-08-15 17:04:24 +02:00
print $langs -> trans ( " Error " ) . " " . $langs -> trans ( " Error_FACTURE_ADDON_PDF_NotDefined " );
2003-09-09 19:05:47 +02:00
return 0 ;
2003-04-13 16:48:38 +02:00
}
}
2004-12-23 19:28:58 +01:00
/**
\brief Cr<EFBFBD> <EFBFBD> un meta fichier <EFBFBD> c<EFBFBD> t<EFBFBD> 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<61> e ou compliqu<71> e <20> g<> rer ... avec un rgrep c' est vite fait bien fait [ eric seigne ]
\param db objet base de donn<EFBFBD> e
\param facid id de la facture <EFBFBD> cr<EFBFBD> er
\param message message
2004-12-22 21:28:47 +01:00
*/
function facture_meta_create ( $db , $facid , $message = " " )
{
2004-12-23 19:28:58 +01:00
global $langs , $conf ;
2004-12-22 21:28:47 +01:00
$fac = new Facture ( $db , " " , $facid );
$fac -> fetch ( $facid );
$fac -> fetch_client ();
2004-12-23 19:28:58 +01:00
if ( $conf -> facture -> dir_output )
2004-12-22 21:28:47 +01:00
{
2004-12-23 19:28:58 +01:00
$dir = $conf -> facture -> dir_output . " / " . $fac -> ref ;
$file = $dir . " / " . $fac -> ref . " .meta " ;
2004-12-22 21:28:47 +01:00
if ( ! file_exists ( $dir ))
2004-12-23 19:28:58 +01:00
{
umask ( 0 );
if ( ! mkdir ( $dir , 0755 ))
{
$this -> error = $langs -> trans ( " ErrorCanNotCreateDir " , $dir );
return 0 ;
}
}
2004-12-22 21:28:47 +01:00
if ( file_exists ( $dir ))
{
$nblignes = sizeof ( $fac -> lignes );
$client = $fac -> client -> nom . " " . $fac -> client -> adresse . " " . $fac -> client -> cp . " " . $fac -> client -> ville ;
$meta = " REFERENCE= \" " . $fac -> ref . " \"
DATE = \ " " . strftime ( " %d/%m/%Y " , $fac -> date ) . " \"
NB_ITEMS = \ " " . $nblignes . " \"
CLIENT = \ " " . $client . " \"
TOTAL_HT = \ " " . $fac -> total_ht . " \"
TOTAL_TTC = \ " " . $fac -> total_ttc . " \" \n " ;
for ( $i = 0 ; $i < $nblignes ; $i ++ ) {
//Pour les articles
$meta .= " ITEM_ " . $i . " _QUANTITY= \" " . $fac -> lignes [ $i ] -> qty . " \"
ITEM_ " . $i . " _UNIT_PRICE = \ " " . $fac -> lignes [ $i ] -> price . " \"
ITEM_ " . $i . " _TVA = \ " " . $fac -> lignes [ $i ] -> tva_taux . " \"
ITEM_ " . $i . " _DESCRIPTION = \ " " . str_replace ( " \r \n " , " " , nl2br ( $fac -> lignes [ $i ] -> desc )) . " \"
" ;
}
}
$fp = fopen ( $file , " w " );
fputs ( $fp , $meta );
fclose ( $fp );
}
}
2004-08-15 17:04:24 +02:00
2004-12-28 16:32:24 +01:00
/**
2004-08-15 19:47:24 +02:00
\brief Renvoie la r<EFBFBD> f<EFBFBD> rence de facture suivante non utilis<EFBFBD> e en fonction du module
2004-08-15 17:04:24 +02:00
de num<EFBFBD> rotation actif d<EFBFBD> fini dans FACTURE_ADDON
2004-12-28 16:32:24 +01:00
\param soc objet societe
\param prefixe_additionnel prefixe additionnel
\return string reference libre pour la facture
2004-08-15 17:04:24 +02:00
*/
2004-09-21 11:15:15 +02:00
function facture_get_num ( $soc , $prefixe_additionnel = '' )
2004-08-15 17:04:24 +02:00
{
global $db , $langs ;
$langs -> load ( " bills " );
$dir = DOL_DOCUMENT_ROOT . " /includes/modules/facture/ " ;
if ( defined ( " FACTURE_ADDON " ) && FACTURE_ADDON )
{
$file = FACTURE_ADDON . " / " . FACTURE_ADDON . " .modules.php " ;
2004-08-15 19:56:27 +02:00
// Chargement de la classe de num<75> rotation
$classname = " mod_facture_ " . FACTURE_ADDON ;
2004-08-15 17:04:24 +02:00
require_once ( $dir . $file );
$obj = new $classname ();
2004-09-21 11:16:26 +02:00
$numref = " " ;
$numref = $obj -> getNumRef ( $soc , $prefixe_additionnel );
if ( $numref != " " )
2004-08-15 17:04:24 +02:00
{
2004-09-21 11:16:26 +02:00
return $numref ;
2004-08-15 17:04:24 +02:00
}
else
{
2004-09-21 11:15:15 +02:00
dolibarr_syslog ( " Erreur dans facture_get_num " );
2004-08-15 17:04:24 +02:00
dolibarr_print_error ( $db , $obj -> numreferror ());
return " " ;
}
}
else
{
print $langs -> trans ( " Error " ) . " " . $langs -> trans ( " Error_FACTURE_ADDON_NotDefined " );
return " " ;
}
}
2003-03-11 16:33:17 +01:00
?>