2004-10-20 00:24:10 +02:00
< ? php
2005-03-08 11:38:12 +01:00
/* Copyright ( C ) 2003 - 2005 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
2007-09-13 20:10:51 +02:00
* Copyright ( C ) 2004 - 2007 Laurent Destailleur < eldy @ users . sourceforge . net >
2004-12-22 21:28:47 +01:00
* Copyright ( C ) 2004 Eric Seigne < eric . seigne @ ryxeo . com >
2007-11-01 21:39:36 +01:00
* Copyright ( C ) 2005 Regis Houssin < regis @ dolibarr . fr >
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 /
*/
2005-08-22 21:39:55 +02:00
/**
2005-12-07 15:06:20 +01:00
\file htdocs / includes / modules / facture / modules_facture . php
\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
2008-04-05 16:18:13 +02:00
\version $Id $
2004-08-15 17:04:24 +02:00
*/
2008-04-05 16:18:13 +02:00
require_once ( DOL_DOCUMENT_ROOT . '/lib/functions.lib.php' );
2007-07-31 01:22:06 +02:00
require_once ( DOL_DOCUMENT_ROOT . '/includes/fpdf/fpdfi/fpdi_protection.php' );
2004-08-15 17:04:24 +02:00
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
2005-08-23 21:31:25 +02:00
/**
2005-12-07 15:06:20 +01:00
\class ModelePDFFactures
\brief Classe m<EFBFBD> re des mod<EFBFBD> les de facture
2004-08-15 17:04:24 +02:00
*/
2004-07-27 17:15:37 +02:00
2004-08-15 17:04:24 +02:00
class ModelePDFFactures extends FPDF
{
2006-03-22 00:47:01 +01:00
var $error = '' ;
2005-12-07 15:06:20 +01:00
2006-03-22 00:47:01 +01:00
/**
* \brief Renvoi le dernier message d ' erreur de cr<EFBFBD> ation de facture
*/
function pdferror ()
{
return $this -> error ;
}
2005-12-07 15:06:20 +01:00
2006-03-22 00:47:01 +01:00
/**
* \brief Renvoi la liste des mod<EFBFBD> les actifs
* \param db Handler de base
*/
function liste_modeles ( $db )
{
2006-04-29 03:43:17 +02:00
$type = 'invoice' ;
$liste = array ();
$sql = " SELECT nom as id, nom as lib " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " document_model " ;
$sql .= " WHERE type = ' " . $type . " ' " ;
2006-06-13 00:20:24 +02:00
2006-03-22 00:47:01 +01:00
$resql = $db -> query ( $sql );
if ( $resql )
{
$num = $db -> num_rows ( $resql );
$i = 0 ;
while ( $i < $num )
{
$row = $db -> fetch_row ( $resql );
$liste [ $row [ 0 ]] = $row [ 1 ];
$i ++ ;
}
}
else
{
dolibarr_print_error ( $db );
return - 1 ;
}
return $liste ;
}
2005-08-23 21:31:25 +02:00
2004-07-27 17:15:37 +02:00
}
2005-11-11 20:22:57 +01:00
/**
2005-12-07 15:06:20 +01:00
\class ModeleNumRefFactures
\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
*/
class ModeleNumRefFactures
2003-03-11 16:33:17 +01:00
{
2006-12-16 17:30:41 +01:00
var $error = '' ;
2008-09-05 01:44:36 +02:00
/** \brief Return if a module can be used or not
* \return boolean true if module can be used
*/
function isEnabled ()
{
return true ;
}
2006-12-16 17:30:41 +01:00
/** \brief Renvoi la description par defaut du modele de num<EFBFBD> rotation
* \return string Texte descripif
*/
function info ()
{
global $langs ;
$langs -> load ( " bills " );
return $langs -> trans ( " NoDescription " );
}
/** \brief Renvoi un exemple de num<EFBFBD> rotation
* \return string Example
*/
function getExample ()
{
global $langs ;
$langs -> load ( " bills " );
return $langs -> trans ( " NoExample " );
}
/** \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 ()
{
return true ;
}
/** \brief Renvoi prochaine valeur attribu<EFBFBD> e
* \param objsoc Objet societe
* \param facture Objet facture
* \return string Valeur
*/
function getNextValue ( $objsoc , $facture )
{
global $langs ;
return $langs -> trans ( " NotAvailable " );
}
2007-09-11 23:55:31 +02:00
/** \brief Renvoi version du module numerotation
* \return string Valeur
*/
function getVersion ()
{
global $langs ;
$langs -> load ( " admin " );
if ( $this -> version == 'development' ) return $langs -> trans ( " VersionDevelopment " );
if ( $this -> version == 'experimental' ) return $langs -> trans ( " VersionExperimental " );
if ( $this -> version == 'dolibarr' ) return DOL_VERSION ;
return $langs -> trans ( " NotAvailable " );
}
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
/**
2006-03-22 00:47:01 +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 id id de la facture <EFBFBD> cr<EFBFBD> er
\param message message
\param modele force le modele <EFBFBD> utiliser ( '' par defaut )
\param outputlangs objet lang a utiliser pour traduction
2006-04-23 16:01:42 +02:00
\return int < 0 si KO , > 0 si OK
2004-07-25 15:12:15 +02:00
*/
2006-03-22 00:47:01 +01:00
function facture_pdf_create ( $db , $id , $message = '' , $modele = '' , $outputlangs = '' )
2003-04-13 16:48:38 +02:00
{
2006-03-22 00:47:01 +01:00
global $conf , $langs ;
$langs -> load ( " bills " );
2005-11-11 20:22:57 +01:00
2006-03-22 00:47:01 +01:00
$dir = DOL_DOCUMENT_ROOT . " /includes/modules/facture/ " ;
2003-04-13 16:48:38 +02:00
2006-03-22 00:47:01 +01:00
// Positionne modele sur le nom du modele <20> utiliser
if ( ! strlen ( $modele ))
{
if ( $conf -> global -> FACTURE_ADDON_PDF )
{
$modele = $conf -> global -> FACTURE_ADDON_PDF ;
}
else
{
print $langs -> trans ( " Error " ) . " " . $langs -> trans ( " Error_FACTURE_ADDON_PDF_NotDefined " );
return 0 ;
}
}
2003-04-13 16:48:38 +02:00
2006-03-22 00:47:01 +01:00
// Charge le modele
$file = " pdf_ " . $modele . " .modules.php " ;
if ( file_exists ( $dir . $file ))
{
$classname = " pdf_ " . $modele ;
require_once ( $dir . $file );
2003-04-13 16:48:38 +02:00
2006-03-22 00:47:01 +01:00
$obj = new $classname ( $db );
$obj -> message = $message ;
2004-10-05 16:27:37 +02:00
2007-10-22 01:56:56 +02:00
if ( $obj -> write_file ( $id , $outputlangs ) > 0 )
2006-03-22 00:47:01 +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 , $id );
// et on supprime l'image correspondant au preview
facture_delete_preview ( $db , $id );
return 1 ;
}
else
{
2006-04-23 16:01:42 +02:00
dolibarr_print_error ( '' , " facture_pdf_create Error: " . $obj -> error );
return - 1 ;
2006-03-22 00:47:01 +01:00
}
2005-11-11 20:22:57 +01:00
2005-12-07 15:06:20 +01:00
}
2006-03-22 00:47:01 +01:00
else
2005-12-07 15:06:20 +01:00
{
2006-04-23 16:01:42 +02:00
dolibarr_print_error ( '' , $langs -> trans ( " Error " ) . " " . $langs -> trans ( " ErrorFileDoesNotExists " , $dir . $file ));
return - 1 ;
2005-12-07 15:06:20 +01:00
}
2003-04-13 16:48:38 +02:00
}
2004-12-23 19:28:58 +01:00
/**
2005-11-11 20:22:57 +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 = " " )
{
2006-09-06 01:25:48 +02:00
global $langs , $conf ;
$fac = new Facture ( $db , " " , $facid );
$fac -> fetch ( $facid );
$fac -> fetch_client ();
if ( $conf -> facture -> dir_output )
2004-12-22 21:28:47 +01:00
{
2006-09-06 01:25:48 +02:00
$facref = sanitize_string ( $fac -> ref );
$dir = $conf -> facture -> dir_output . " / " . $facref ;
$file = $dir . " / " . $facref . " .meta " ;
if ( ! is_dir ( $dir ))
{
create_exdir ( $dir );
}
if ( is_dir ( $dir ))
{
$nblignes = sizeof ( $fac -> lignes );
$client = $fac -> client -> nom . " " . $fac -> client -> adresse . " " . $fac -> client -> cp . " " . $fac -> client -> ville ;
$meta = " REFERENCE= \" " . $fac -> ref . " \"
2007-08-08 17:14:52 +02:00
DATE = \ " " . dolibarr_print_date ( $fac -> date ) . " \"
2004-12-22 21:28:47 +01:00
NB_ITEMS = \ " " . $nblignes . " \"
CLIENT = \ " " . $client . " \"
TOTAL_HT = \ " " . $fac -> total_ht . " \"
TOTAL_TTC = \ " " . $fac -> total_ttc . " \" \n " ;
2006-06-13 00:20:24 +02:00
2004-12-22 21:28:47 +01:00
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 . " \"
2006-09-10 22:18:26 +02:00
ITEM_ " . $i . " _TVA = \ " " . $fac -> lignes [ $i ] -> tva_tx . " \"
2004-12-22 21:28:47 +01:00
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
/**
2005-11-11 20:22:57 +01:00
\brief Supprime l ' image de pr<EFBFBD> visualitation , pour le cas de r<EFBFBD> g<EFBFBD> n<EFBFBD> ration de facture
2005-07-29 11:18:32 +02:00
\param db objet base de donn<EFBFBD> e
\param facid id de la facture <EFBFBD> cr<EFBFBD> er
*/
function facture_delete_preview ( $db , $facid )
{
2005-12-07 15:06:20 +01:00
global $langs , $conf ;
2005-07-29 11:18:32 +02:00
2005-12-07 15:06:20 +01:00
$fac = new Facture ( $db , " " , $facid );
2006-06-13 00:20:24 +02:00
$fac -> fetch ( $facid );
2005-07-29 11:18:32 +02:00
2005-12-07 15:06:20 +01:00
if ( $conf -> facture -> dir_output )
2005-11-11 20:22:57 +01:00
{
2006-06-13 00:20:24 +02:00
$facref = sanitize_string ( $fac -> ref );
$dir = $conf -> facture -> dir_output . " / " . $facref ;
2005-12-07 15:06:20 +01:00
$file = $dir . " / " . $facref . " .pdf.png " ;
2005-07-29 11:18:32 +02:00
2005-12-07 15:06:20 +01:00
if ( file_exists ( $file ) && is_writable ( $file ) )
{
if ( ! unlink ( $file ) )
{
return 0 ;
}
2005-11-11 20:22:57 +01:00
}
2005-12-07 15:06:20 +01:00
}
2005-07-29 11:18:32 +02:00
}
2003-03-11 16:33:17 +01:00
?>