2004-10-20 00:24:10 +02:00
< ? php
2005-01-08 02:02:27 +01:00
/* Copyright ( C ) 2004 - 2005 Laurent Destailleur < eldy @ users . sourceforge . net >
2004-05-15 17:47:01 +02: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-02-08 17:58:42 +01:00
2005-01-08 02:02:27 +01:00
/** \file htdocs / includes / modules / facture / pdf_crabe . modules . php
2004-10-20 00:24:10 +02:00
\ingroup facture
2004-08-15 17:05:44 +02:00
\brief Fichier de la classe permettant de g<EFBFBD> n<EFBFBD> rer les factures au mod<EFBFBD> le Crabe
\author Laurent Destailleur
\version $Revision $
2004-07-25 15:12:15 +02:00
*/
2004-08-07 19:14:42 +02:00
2005-01-08 02:02:27 +01:00
/** \class pdf_crabe
\brief Classe permettant de g<EFBFBD> n<EFBFBD> rer les factures au mod<EFBFBD> le Crabe
2004-08-07 19:14:42 +02:00
*/
2004-08-15 17:05:44 +02:00
class pdf_crabe extends ModelePDFFactures
{
2004-07-25 15:12:15 +02:00
2005-01-08 02:02:27 +01:00
/** \brief Constructeur
2004-08-07 19:14:42 +02:00
\param db handler acc<EFBFBD> s base de donn<EFBFBD> e
2004-07-25 15:12:15 +02:00
*/
2004-08-07 19:14:42 +02:00
function pdf_crabe ( $db )
2004-02-08 17:58:42 +01:00
{
2004-05-15 17:47:01 +02:00
$this -> db = $db ;
2004-07-25 17:31:16 +02:00
$this -> description = " Mod<EFBFBD> le de facture complet (G<> re l'option fiscale de facturation TVA, le choix du mode de r<> glement <20> afficher, logo...) " ;
$this -> option_logo = 1 ; // Affiche logo FAC_PDF_LOGO
$this -> option_tva = 1 ; // Gere option tva FACTURE_TVAOPTION
$this -> option_modereg = 1 ; // Gere choix mode r<> glement FACTURE_CHQ_NUMBER, FACTURE_RIB_NUMBER
$this -> option_codeproduitservice = 1 ; // Affiche code produit-service FACTURE_CODEPRODUITSERVICE
$this -> option_tvaintra = 1 ; // Affiche tva intra MAIN_INFO_TVAINTRA
$this -> option_capital = 1 ; // Affiche capital MAIN_INFO_CAPITAL
2004-02-08 17:58:42 +01:00
}
2004-07-25 15:12:15 +02:00
2005-01-08 02:02:27 +01:00
/**
2004-12-31 19:27:07 +01:00
\brief Fonction g<EFBFBD> n<EFBFBD> rant la facture sur le disque
2004-09-18 13:55:56 +02:00
\param facid id de la facture <EFBFBD> g<EFBFBD> n<EFBFBD> rer
\return int 1 = ok , 0 = ko
2004-12-31 19:27:07 +01:00
\remarks Variables utilis<EFBFBD> es
\remarks FAC_PDF_LOGO
\remarks FACTURE_CODEPRODUITSERVICE
\remarks FACTURE_CHQ_NUMBER
\remarks FACTURE_RIB_NUMBER
\remarks FAC_PDF_INTITULE
\remarks FAC_PDF_INTITULE2
\remarks FAC_PDF_TEL
\remarks FAC_PDF_ADRESSE
2005-01-08 01:08:09 +01:00
\remarks MAIN_INFO_SIRET
\remarks MAIN_INFO_SIREN
2004-12-31 19:27:07 +01:00
\remarks MAIN_INFO_CAPITAL
\remarks MAIN_INFO_TVAINTRA
2004-07-25 15:12:15 +02:00
*/
2004-08-07 19:14:42 +02:00
function write_pdf_file ( $facid )
2004-02-08 17:58:42 +01:00
{
2004-12-23 19:28:58 +01:00
global $user , $langs , $conf ;
2004-09-18 13:55:56 +02:00
$langs -> load ( " main " );
$langs -> load ( " bills " );
$langs -> load ( " products " );
2004-12-23 19:28:58 +01:00
if ( $conf -> facture -> dir_output )
2004-05-15 17:47:01 +02:00
{
2004-12-23 19:28:58 +01:00
$fac = new Facture ( $this -> db , " " , $facid );
$fac -> fetch ( $facid );
2004-05-15 17:47:01 +02:00
2004-12-23 19:28:58 +01:00
$forbidden_chars = array ( " / " , " \\ " , " : " , " * " , " ? " , " \" " , " < " , " > " , " | " , " [ " , " ] " , " , " , " ; " , " = " );
$facref = str_replace ( $forbidden_chars , " _ " , $fac -> ref );
$dir = $conf -> facture -> dir_output . " / " . $facref ;
$file = $dir . " / " . $facref . " .pdf " ;
2004-05-15 17:47:01 +02:00
if ( ! file_exists ( $dir ))
{
umask ( 0 );
if ( ! mkdir ( $dir , 0755 ))
{
2004-09-18 13:55:56 +02:00
$this -> error = $langs -> trans ( " ErrorCanNotCreateDir " , $dir );
2004-07-25 15:12:15 +02:00
return 0 ;
2004-05-15 17:47:01 +02:00
}
}
if ( file_exists ( $dir ))
{
// Initialisation facture vierge
$pdf = new FPDF ( 'P' , 'mm' , 'A4' );
$pdf -> Open ();
$pdf -> AddPage ();
$this -> _pagehead ( $pdf , $fac );
$pdf -> SetTitle ( $fac -> ref );
2004-09-18 13:55:56 +02:00
$pdf -> SetSubject ( $langs -> trans ( " Bill " ));
2004-05-15 17:47:01 +02:00
$pdf -> SetCreator ( " Dolibarr " . DOL_VERSION );
$pdf -> SetAuthor ( $user -> fullname );
2004-07-25 17:31:16 +02:00
$pdf -> SetMargins ( 10 , 10 , 10 );
$pdf -> SetAutoPageBreak ( 1 , 0 );
2004-05-15 17:47:01 +02:00
$tab_top = 96 ;
$tab_height = 110 ;
$pdf -> SetFillColor ( 220 , 220 , 220 );
$pdf -> SetFont ( 'Arial' , '' , 9 );
$pdf -> SetXY ( 10 , $tab_top + 10 );
$iniY = $pdf -> GetY ();
$curY = $pdf -> GetY ();
$nexY = $pdf -> GetY ();
$nblignes = sizeof ( $fac -> lignes );
// Boucle sur les lignes de factures
for ( $i = 0 ; $i < $nblignes ; $i ++ )
{
$curY = $nexY ;
// Description produit
$codeproduitservice = " " ;
$pdf -> SetXY ( 11 , $curY );
if ( defined ( " FACTURE_CODEPRODUITSERVICE " ) && FACTURE_CODEPRODUITSERVICE ) {
2004-05-17 19:07:16 +02:00
// Affiche code produit si ligne associ<63> e <20> un code produit
2004-07-25 17:31:16 +02:00
$prodser = new Product ( $this -> db );
$prodser -> fetch ( $fac -> lignes [ $i ] -> produit_id );
2004-08-15 17:05:44 +02:00
if ( $prodser -> ref ) {
2004-09-18 13:55:56 +02:00
$codeproduitservice = " - " . $langs -> trans ( " ProductCode " ) . " " . $prodser -> ref ;
2004-08-15 17:05:44 +02:00
}
2004-05-17 19:07:16 +02:00
}
if ( $fac -> lignes [ $i ] -> date_start && $fac -> lignes [ $i ] -> date_end ) {
// Affichage dur<75> e si il y en a une
2004-09-18 13:55:56 +02:00
$codeproduitservice .= " ( " . $langs -> trans ( " From " ) . " " . dolibarr_print_date ( $fac -> lignes [ $i ] -> date_start ) . " " . $langs -> trans ( " to " ) . " " . dolibarr_print_date ( $fac -> lignes [ $i ] -> date_end ) . " ) " ;
2004-05-15 17:47:01 +02:00
}
2004-09-18 13:55:56 +02:00
$pdf -> MultiCell ( 108 , 5 , $fac -> lignes [ $i ] -> desc . " $codeproduitservice " , 0 , 'J' );
2004-05-15 17:47:01 +02:00
$nexY = $pdf -> GetY ();
// TVA
$pdf -> SetXY ( 121 , $curY );
$pdf -> MultiCell ( 10 , 5 , $fac -> lignes [ $i ] -> tva_taux , 0 , 'C' );
// Prix unitaire HT
$pdf -> SetXY ( 133 , $curY );
$pdf -> MultiCell ( 16 , 5 , price ( $fac -> lignes [ $i ] -> price ), 0 , 'R' , 0 );
// Quantit<69>
$pdf -> SetXY ( 151 , $curY );
$pdf -> MultiCell ( 10 , 5 , $fac -> lignes [ $i ] -> qty , 0 , 'R' );
// Remise sur ligne
2004-05-17 19:07:16 +02:00
$pdf -> SetXY ( 163 , $curY );
2004-05-15 17:47:01 +02:00
if ( $fac -> lignes [ $i ] -> remise_percent ) {
2004-05-20 16:19:32 +02:00
$pdf -> MultiCell ( 14 , 5 , $fac -> lignes [ $i ] -> remise_percent . " % " , 0 , 'R' );
2004-05-15 17:47:01 +02:00
}
// Total HT
$pdf -> SetXY ( 173 , $curY );
$total = price ( $fac -> lignes [ $i ] -> price * $fac -> lignes [ $i ] -> qty );
$pdf -> MultiCell ( 26 , 5 , $total , 0 , 'R' , 0 );
if ( $nexY > 200 && $i < $nblignes - 1 )
{
$this -> _tableau ( $pdf , $tab_top , $tab_height , $nexY );
$pdf -> AddPage ();
$nexY = $iniY ;
$this -> _pagehead ( $pdf , $fac );
$pdf -> SetTextColor ( 0 , 0 , 0 );
$pdf -> SetFont ( 'Arial' , '' , 10 );
}
}
$this -> _tableau ( $pdf , $tab_top , $tab_height , $nexY );
2004-05-20 16:19:32 +02:00
$deja_regle = $fac -> getSommePaiement ();
$this -> _tableau_tot ( $pdf , $fac , $deja_regle );
2004-05-15 17:47:01 +02:00
2004-05-20 16:19:32 +02:00
if ( $deja_regle ) {
$this -> _tableau_versements ( $pdf , $fac );
}
2004-05-15 17:47:01 +02:00
/*
* Mode de r<EFBFBD> glement
*/
if (( ! defined ( " FACTURE_CHQ_NUMBER " ) || ! FACTURE_CHQ_NUMBER ) && ( ! defined ( " FACTURE_RIB_NUMBER " ) || ! FACTURE_RIB_NUMBER )) {
$pdf -> SetXY ( 10 , 228 );
$pdf -> SetTextColor ( 200 , 0 , 0 );
$pdf -> SetFont ( 'Arial' , 'B' , 8 );
2004-09-18 13:55:56 +02:00
$pdf -> MultiCell ( 90 , 3 , $langs -> trans ( " ErrorNoPaiementModeConfigured " ), 0 , 'L' , 0 );
$pdf -> MultiCell ( 90 , 3 , $langs -> trans ( " ErrorCreateBankAccount " ), 0 , 'L' , 0 );
2004-05-15 17:47:01 +02:00
$pdf -> SetTextColor ( 0 , 0 , 0 );
}
/*
* Propose mode r<EFBFBD> glement par CHQ
*/
if ( defined ( " FACTURE_CHQ_NUMBER " ))
{
if ( FACTURE_CHQ_NUMBER > 0 )
{
$account = new Account ( $this -> db );
$account -> fetch ( FACTURE_CHQ_NUMBER );
$pdf -> SetXY ( 10 , 228 );
$pdf -> SetFont ( 'Arial' , 'B' , 8 );
$pdf -> MultiCell ( 90 , 3 , " R<EFBFBD> glement par ch<63> que <20> l'ordre de " . $account -> proprio . " envoy<6F> <20> : " , 0 , 'L' , 0 );
$pdf -> SetFont ( 'Arial' , '' , 8 );
$pdf -> MultiCell ( 80 , 3 , $account -> adresse_proprio , 0 , 'L' , 0 );
}
}
/*
* Propose mode r<EFBFBD> glement par RIB
*/
if ( defined ( " FACTURE_RIB_NUMBER " ))
{
if ( FACTURE_RIB_NUMBER > 0 )
{
$account = new Account ( $this -> db );
$account -> fetch ( FACTURE_RIB_NUMBER );
$pdf -> SetXY ( 10 , 241 );
$pdf -> SetFont ( 'Arial' , 'B' , 8 );
$pdf -> MultiCell ( 90 , 3 , " R<EFBFBD> glement par virement sur le compte ci-dessous: " , 0 , 'L' , 0 );
$pdf -> SetFont ( 'Arial' , '' , 8 );
$pdf -> MultiCell ( 90 , 3 , " Code banque : " . $account -> code_banque , 0 , 'L' , 0 );
$pdf -> MultiCell ( 90 , 3 , " Code guichet : " . $account -> code_guichet , 0 , 'L' , 0 );
$pdf -> MultiCell ( 90 , 3 , " Num<EFBFBD> ro compte : " . $account -> number , 0 , 'L' , 0 );
$pdf -> MultiCell ( 90 , 3 , " Cl<EFBFBD> RIB : " . $account -> cle_rib , 0 , 'L' , 0 );
$pdf -> MultiCell ( 90 , 3 , " Domiciliation : " . $account -> domiciliation , 0 , 'L' , 0 );
$pdf -> MultiCell ( 90 , 3 , " Prefix IBAN : " . $account -> iban_prefix , 0 , 'L' , 0 );
$pdf -> MultiCell ( 90 , 3 , " BIC : " . $account -> bic , 0 , 'L' , 0 );
}
}
/*
* Conditions de r<EFBFBD> glements
*/
2004-07-25 17:31:16 +02:00
$pdf -> SetFont ( 'Arial' , 'B' , 10 );
2004-05-20 16:19:32 +02:00
$pdf -> SetXY ( 10 , 217 );
$titre = " Conditions de r<> glement: " ;
$pdf -> MultiCell ( 80 , 5 , $titre , 0 , 'L' );
$pdf -> SetFont ( 'Arial' , '' , 10 );
$pdf -> SetXY ( 54 , 217 );
$pdf -> MultiCell ( 80 , 5 , $fac -> cond_reglement_facture , 0 , 'L' );
2004-05-15 17:47:01 +02:00
2004-07-25 17:31:16 +02:00
/*
* Pied de page
*/
$this -> _pagefoot ( $pdf , $fac );
$pdf -> AliasNbPages ();
2004-05-15 17:47:01 +02:00
$pdf -> Close ();
$pdf -> Output ( $file );
return 1 ; // Pas d'erreur
}
else
{
2004-09-18 13:55:56 +02:00
$this -> error = $langs -> trans ( " ErrorCanNotCreateDir " , $dir );
2004-07-25 15:12:15 +02:00
return 0 ;
2004-05-15 17:47:01 +02:00
}
}
else
{
2004-09-18 13:55:56 +02:00
$this -> error = $langs -> trans ( " ErrorConstantNotDefined " , " FAC_OUTPUTDIR " );
2004-07-25 15:12:15 +02:00
return 0 ;
2004-05-15 17:47:01 +02:00
}
2004-09-18 13:55:56 +02:00
$this -> error = $langs -> trans ( " ErrorUnknown " );
2004-05-15 17:47:01 +02:00
return 0 ; // Erreur par defaut
2004-02-08 17:58:42 +01:00
}
2004-05-15 17:47:01 +02:00
/*
2004-09-18 13:55:56 +02:00
* \brief Affiche tableau des versement
* \param pdf objet PDF
* \param fac objet facture
2004-05-15 17:47:01 +02:00
*/
2004-08-07 19:14:42 +02:00
function _tableau_versements ( & $pdf , $fac )
2004-02-08 17:58:42 +01:00
{
2004-09-18 13:55:56 +02:00
global $langs ;
$langs -> load ( " main " );
$langs -> load ( " bills " );
2004-05-20 16:19:32 +02:00
$tab3_posx = 120 ;
$tab3_top = 240 ;
$tab3_width = 80 ;
$tab3_height = 4 ;
2004-05-15 17:47:01 +02:00
$pdf -> SetFont ( 'Arial' , '' , 8 );
2004-05-20 16:19:32 +02:00
$pdf -> SetXY ( $tab3_posx , $tab3_top - 5 );
$pdf -> MultiCell ( 60 , 5 , " Versements d<> j<EFBFBD> effectu<74> s " , 0 , 'L' , 0 );
$pdf -> Rect ( $tab3_posx , $tab3_top - 1 , $tab3_width , $tab3_height );
$pdf -> SetXY ( $tab3_posx , $tab3_top - 1 );
2004-09-18 13:55:56 +02:00
$pdf -> MultiCell ( 20 , 4 , $langs -> trans ( " Payment " ), 0 , 'L' , 0 );
2004-05-20 16:19:32 +02:00
$pdf -> SetXY ( $tab3_posx + 21 , $tab3_top - 1 );
2004-09-18 13:55:56 +02:00
$pdf -> MultiCell ( 20 , 4 , $langs -> trans ( " Amount " ), 0 , 'L' , 0 );
2004-05-20 16:19:32 +02:00
$pdf -> SetXY ( $tab3_posx + 41 , $tab3_top - 1 );
2004-09-18 13:55:56 +02:00
$pdf -> MultiCell ( 20 , 4 , $langs -> trans ( " Type " ), 0 , 'L' , 0 );
2004-05-20 16:19:32 +02:00
$pdf -> SetXY ( $tab3_posx + 60 , $tab3_top - 1 );
2004-09-18 13:55:56 +02:00
$pdf -> MultiCell ( 20 , 4 , $langs -> trans ( " Ref " ), 0 , 'L' , 0 );
2004-05-20 16:19:32 +02:00
$sql = " SELECT " . $this -> db -> pdate ( " p.datep " ) . " as date, p.amount as amount, p.fk_paiement as type, p.num_paiement as num " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " paiement as p, " . MAIN_DB_PREFIX . " paiement_facture as pf " ;
$sql .= " WHERE pf.fk_paiement = p.rowid and pf.fk_facture = " . $fac -> id . " " ;
$sql .= " ORDER BY p.datep " ;
if ( $this -> db -> query ( $sql ))
{
$pdf -> SetFont ( 'Arial' , '' , 6 );
$num = $this -> db -> num_rows ();
$i = 0 ; $y = 0 ;
while ( $i < $num ) {
$y += 3 ;
$row = $this -> db -> fetch_row ();
$pdf -> SetXY ( $tab3_posx , $tab3_top + $y );
$pdf -> MultiCell ( 20 , 4 , strftime ( " %d/%m/%y " , $row [ 0 ]), 0 , 'L' , 0 );
$pdf -> SetXY ( $tab3_posx + 21 , $tab3_top + $y );
$pdf -> MultiCell ( 20 , 4 , $row [ 1 ], 0 , 'L' , 0 );
$pdf -> SetXY ( $tab3_posx + 41 , $tab3_top + $y );
switch ( $row [ 2 ])
{
case 1 :
$oper = 'TIP' ;
break ;
case 2 :
$oper = 'VIR' ;
break ;
case 3 :
$oper = 'PRE' ;
break ;
case 4 :
$oper = 'LIQ' ;
break ;
case 5 :
2004-09-30 21:18:19 +02:00
$oper = 'VAD' ;
2004-05-20 16:19:32 +02:00
break ;
case 6 :
$oper = 'CB' ;
break ;
case 7 :
$oper = 'CHQ' ;
break ;
}
$pdf -> MultiCell ( 20 , 4 , $oper , 0 , 'L' , 0 );
$pdf -> SetXY ( $tab3_posx + 60 , $tab3_top + $y );
$pdf -> MultiCell ( 20 , 4 , $row [ 3 ], 0 , 'L' , 0 );
$pdf -> line ( $tab3_posx , $tab3_top + $y + 3 , $tab3_posx + $tab3_width , $tab3_top + $y + 3 );
2004-07-25 17:31:16 +02:00
2004-05-20 16:19:32 +02:00
$i ++ ;
}
}
else
{
2004-09-18 13:55:56 +02:00
$this -> error = $langs -> trans ( " ErrorSQL " ) . " $sql " ;
2004-07-25 15:12:15 +02:00
return 0 ;
2004-05-20 16:19:32 +02:00
}
2004-02-08 17:58:42 +01:00
}
2004-05-15 17:47:01 +02:00
2004-09-18 13:55:56 +02:00
/*
* \brief Affiche le total <EFBFBD> payer
* \param pdf objet PDF
* \param fac objet facture
* \param deja_regle montant deja regle
*/
2004-08-07 19:14:42 +02:00
function _tableau_tot ( & $pdf , $fac , $deja_regle )
2004-02-08 17:58:42 +01:00
{
2004-09-18 13:55:56 +02:00
global $langs ;
$langs -> load ( " main " );
$langs -> load ( " bills " );
2004-05-15 17:47:01 +02:00
$tab2_top = 207 ;
$tab2_hl = 5 ;
$tab2_height = $tab2_hl * 4 ;
$pdf -> SetFont ( 'Arial' , '' , 9 );
// Affiche la mention TVA non applicable selon option
$pdf -> SetXY ( 10 , $tab2_top + 0 );
if ( defined ( " FACTURE_TVAOPTION " ) && FACTURE_TVAOPTION == 'franchise' ) {
$pdf -> MultiCell ( 100 , $tab2_hl , " * TVA non applicable art-293B du CGI " , 0 , 'L' , 0 );
}
2004-05-20 16:19:32 +02:00
// Tableau total
$col1x = 120 ; $col2x = 174 ;
$pdf -> SetXY ( $col1x , $tab2_top + 0 );
2004-09-18 13:55:56 +02:00
$pdf -> MultiCell ( $col2x - $col1x , $tab2_hl , $langs -> trans ( " TotalHT " ), 0 , 'L' , 0 );
2004-05-15 17:47:01 +02:00
2004-05-20 16:19:32 +02:00
$pdf -> SetXY ( $col2x , $tab2_top + 0 );
2004-05-15 17:47:01 +02:00
$pdf -> MultiCell ( 26 , $tab2_hl , price ( $fac -> total_ht + $fac -> remise ), 0 , 'R' , 0 );
if ( $fac -> remise > 0 )
{
2004-05-20 16:19:32 +02:00
$pdf -> SetXY ( $col1x , $tab2_top + $tab2_hl );
$pdf -> MultiCell ( $col2x - $col1x , $tab2_hl , " Remise globale " , 0 , 'L' , 0 );
2004-05-15 17:47:01 +02:00
2004-05-20 16:19:32 +02:00
$pdf -> SetXY ( $col2x , $tab2_top + $tab2_hl );
2004-05-15 17:47:01 +02:00
$pdf -> MultiCell ( 26 , $tab2_hl , " - " . $fac -> remise_percent . " % " , 0 , 'R' , 0 );
2004-05-20 16:19:32 +02:00
$pdf -> SetXY ( $col1x , $tab2_top + $tab2_hl * 2 );
$pdf -> MultiCell ( $col2x - $col1x , $tab2_hl , " Total HT apr<70> s remise " , 0 , 'L' , 0 );
2004-05-15 17:47:01 +02:00
2004-05-20 16:19:32 +02:00
$pdf -> SetXY ( $col2x , $tab2_top + $tab2_hl * 2 );
2004-05-15 17:47:01 +02:00
$pdf -> MultiCell ( 26 , $tab2_hl , price ( $fac -> total_ht ), 0 , 'R' , 0 );
$index = 3 ;
}
else
{
$index = 1 ;
}
2004-05-20 16:19:32 +02:00
$pdf -> SetXY ( $col1x , $tab2_top + $tab2_hl * $index );
2004-09-18 13:55:56 +02:00
$pdf -> MultiCell ( $col2x - $col1x , $tab2_hl , $langs -> trans ( " TotalVAT " ), 0 , 'L' , 0 );
2004-05-15 17:47:01 +02:00
2004-05-20 16:19:32 +02:00
$pdf -> SetXY ( $col2x , $tab2_top + $tab2_hl * $index );
2004-05-15 17:47:01 +02:00
$pdf -> MultiCell ( 26 , $tab2_hl , price ( $fac -> total_tva ), 0 , 'R' , 0 );
2004-05-20 16:19:32 +02:00
$pdf -> SetXY ( $col1x , $tab2_top + $tab2_hl * ( $index + 1 ));
2004-09-18 13:55:56 +02:00
$pdf -> MultiCell ( $col2x - $col1x , $tab2_hl , $langs -> trans ( " TotalTTC " ), 0 , 'L' , 1 );
2004-05-15 17:47:01 +02:00
2004-05-20 16:19:32 +02:00
$pdf -> SetXY ( $col2x , $tab2_top + $tab2_hl * ( $index + 1 ));
2004-05-15 17:47:01 +02:00
$pdf -> MultiCell ( 26 , $tab2_hl , price ( $fac -> total_ttc ), 0 , 'R' , 1 );
if ( $deja_regle > 0 )
{
2004-05-20 16:19:32 +02:00
$pdf -> SetXY ( $col1x , $tab2_top + $tab2_hl * ( $index + 2 ));
$pdf -> MultiCell ( $col2x - $col1x , $tab2_hl , " D<EFBFBD> j<EFBFBD> r<> gl<67> " , 0 , 'L' , 0 );
2004-05-15 17:47:01 +02:00
2004-05-20 16:19:32 +02:00
$pdf -> SetXY ( $col2x , $tab2_top + $tab2_hl * ( $index + 2 ));
2004-05-15 17:47:01 +02:00
$pdf -> MultiCell ( 26 , $tab2_hl , price ( $deja_regle ), 0 , 'R' , 0 );
2004-05-20 16:19:32 +02:00
$pdf -> SetXY ( $col1x , $tab2_top + $tab2_hl * ( $index + 3 ));
$pdf -> MultiCell ( $col2x - $col1x , $tab2_hl , " Reste <20> payer " , 0 , 'L' , 1 );
2004-05-15 17:47:01 +02:00
2004-05-20 16:19:32 +02:00
$pdf -> SetXY ( $col2x , $tab2_top + $tab2_hl * ( $index + 3 ));
2004-05-15 17:47:01 +02:00
$pdf -> MultiCell ( 26 , $tab2_hl , price ( $fac -> total_ttc - $deja_regle ), 0 , 'R' , 1 );
}
2004-02-08 17:58:42 +01:00
}
2004-05-20 16:19:32 +02:00
2004-05-15 17:47:01 +02:00
/*
2004-09-18 13:55:56 +02:00
* \brief Affiche la grille des lignes de factures
* \param pdf objet PDF
2004-05-15 17:47:01 +02:00
*/
2004-08-07 19:14:42 +02:00
function _tableau ( & $pdf , $tab_top , $tab_height , $nexY )
2004-02-08 17:58:42 +01:00
{
2004-09-18 13:55:56 +02:00
global $langs ;
$langs -> load ( " main " );
$langs -> load ( " bills " );
2004-05-20 16:19:32 +02:00
$pdf -> Rect ( 10 , $tab_top , 190 , $tab_height );
$pdf -> line ( 10 , $tab_top + 8 , 200 , $tab_top + 8 );
2004-05-15 17:47:01 +02:00
$pdf -> SetFont ( 'Arial' , '' , 10 );
2004-09-18 13:55:56 +02:00
$pdf -> Text ( 12 , $tab_top + 5 , $langs -> trans ( " Label " ));
2004-05-15 17:47:01 +02:00
$pdf -> line ( 120 , $tab_top , 120 , $tab_top + $tab_height );
2004-09-18 13:55:56 +02:00
$pdf -> Text ( 122 , $tab_top + 5 , $langs -> trans ( " VAT " ));
2004-05-15 17:47:01 +02:00
$pdf -> line ( 132 , $tab_top , 132 , $tab_top + $tab_height );
$pdf -> Text ( 135 , $tab_top + 5 , 'P.U. HT' );
$pdf -> line ( 150 , $tab_top , 150 , $tab_top + $tab_height );
2004-09-18 13:55:56 +02:00
$pdf -> Text ( 153 , $tab_top + 5 , $langs -> trans ( " Qty " ));
2004-05-15 17:47:01 +02:00
$pdf -> line ( 162 , $tab_top , 162 , $tab_top + $tab_height );
$pdf -> Text ( 163 , $tab_top + 5 , 'Remise' );
2004-05-20 16:19:32 +02:00
$pdf -> line ( 177 , $tab_top , 177 , $tab_top + $tab_height );
2004-09-18 13:55:56 +02:00
$pdf -> Text ( 185 , $tab_top + 5 , $langs -> trans ( " TotalHT " ));
2004-05-15 17:47:01 +02:00
2004-02-08 17:58:42 +01:00
}
2004-05-20 16:19:32 +02:00
2004-05-15 17:47:01 +02:00
/*
2004-09-18 13:55:56 +02:00
* \brief Affiche en - t<EFBFBD> te facture
* \param pdf objet PDF
* \param fac objet facture
2004-05-15 17:47:01 +02:00
*/
2004-08-07 19:14:42 +02:00
function _pagehead ( & $pdf , $fac )
2004-02-08 17:58:42 +01:00
{
2004-09-18 13:55:56 +02:00
global $conf ;
global $langs ;
$langs -> load ( " main " );
$langs -> load ( " bills " );
2004-08-09 21:33:48 +02:00
$pdf -> SetTextColor ( 0 , 0 , 60 );
$pdf -> SetFont ( 'Arial' , 'B' , 13 );
$pdf -> SetXY ( 10 , 6 );
2004-02-08 17:58:42 +01:00
2004-08-09 21:33:48 +02:00
if ( defined ( " FAC_PDF_LOGO " ) && FAC_PDF_LOGO )
{
if ( file_exists ( FAC_PDF_LOGO )) {
$pdf -> Image ( FAC_PDF_LOGO , 10 , 5 , 0 , 24 , 'PNG' );
}
else {
2004-08-09 21:37:04 +02:00
$pdf -> SetTextColor ( 200 , 0 , 0 );
$pdf -> SetFont ( 'Arial' , 'B' , 8 );
2004-09-18 13:55:56 +02:00
$pdf -> MultiCell ( 80 , 3 , $langs -> trans ( " ErrorLogoFileNotFound " , FAC_PDF_LOGO ), 0 , 'L' );
$pdf -> MultiCell ( 80 , 3 , $langs -> trans ( " ErrorGoToModuleSetup " ), 0 , 'L' );
2004-08-09 21:33:48 +02:00
}
}
else if ( defined ( " FAC_PDF_INTITULE " ))
2004-05-15 17:47:01 +02:00
{
2004-08-09 21:33:48 +02:00
$pdf -> MultiCell ( 80 , 6 , FAC_PDF_INTITULE , 0 , 'L' );
2004-05-15 17:47:01 +02:00
}
$pdf -> SetFont ( 'Arial' , 'B' , 13 );
$pdf -> SetXY ( 100 , 5 );
$pdf -> SetTextColor ( 0 , 0 , 60 );
2004-09-18 13:55:56 +02:00
$pdf -> MultiCell ( 100 , 10 , $langs -> trans ( " Bill " ) . " " . $fac -> ref , '' , 'R' );
2004-05-20 16:19:32 +02:00
$pdf -> SetFont ( 'Arial' , '' , 12 );
2004-05-15 17:47:01 +02:00
$pdf -> SetXY ( 100 , 11 );
$pdf -> SetTextColor ( 0 , 0 , 60 );
2004-09-18 13:55:56 +02:00
$pdf -> MultiCell ( 100 , 10 , $langs -> trans ( " Date " ) . " : " . dolibarr_print_date ( mktime (), " %d %b %Y " ), '' , 'R' );
2004-05-15 17:47:01 +02:00
/*
* Emetteur
*/
$posy = 42 ;
$pdf -> SetTextColor ( 0 , 0 , 0 );
$pdf -> SetFont ( 'Arial' , '' , 8 );
$pdf -> SetXY ( 10 , $posy - 5 );
2004-09-18 13:55:56 +02:00
$pdf -> MultiCell ( 66 , 5 , $langs -> trans ( " BillFrom " ) . " : " );
2004-05-15 17:47:01 +02:00
$pdf -> SetXY ( 10 , $posy );
$pdf -> SetFillColor ( 230 , 230 , 230 );
$pdf -> MultiCell ( 82 , 34 , " " , 0 , 'R' , 1 );
$pdf -> SetXY ( 10 , $posy + 4 );
if ( defined ( " FAC_PDF_INTITULE2 " ))
{
$pdf -> SetTextColor ( 0 , 0 , 60 );
$pdf -> SetFont ( 'Arial' , 'B' , 10 );
$pdf -> MultiCell ( 70 , 4 , FAC_PDF_INTITULE2 , 0 , 'L' );
}
if ( defined ( " FAC_PDF_ADRESSE " ))
{
$pdf -> SetFont ( 'Arial' , '' , 10 );
$pdf -> MultiCell ( 80 , 4 , FAC_PDF_ADRESSE );
}
if ( defined ( " FAC_PDF_TEL " ))
{
$pdf -> SetFont ( 'Arial' , '' , 10 );
$pdf -> MultiCell ( 40 , 4 , " T<EFBFBD> l : " . FAC_PDF_TEL );
}
2005-01-08 13:04:30 +01:00
if ( defined ( " MAIN_INFO_SIREN " ))
2004-07-25 17:31:16 +02:00
{
$pdf -> SetFont ( 'Arial' , '' , 10 );
2005-01-08 13:04:30 +01:00
$pdf -> MultiCell ( 60 , 4 , " SIREN : " . MAIN_INFO_SIREN );
2004-07-25 17:31:16 +02:00
}
2005-01-08 13:04:30 +01:00
elseif ( defined ( " MAIN_INFO_SIRET " ))
2004-05-15 17:47:01 +02:00
{
$pdf -> SetFont ( 'Arial' , '' , 10 );
2005-01-08 13:04:30 +01:00
$pdf -> MultiCell ( 60 , 4 , " SIRET : " . MAIN_INFO_SIRET );
2004-05-15 17:47:01 +02:00
}
/*
* Client
*/
$posy = 42 ;
$pdf -> SetTextColor ( 0 , 0 , 0 );
$pdf -> SetFont ( 'Arial' , '' , 8 );
$pdf -> SetXY ( 102 , $posy - 5 );
2004-09-18 13:55:56 +02:00
$pdf -> MultiCell ( 80 , 5 , $langs -> trans ( " BillTo " ) . " : " );
2004-05-15 17:47:01 +02:00
$pdf -> SetFont ( 'Arial' , 'B' , 11 );
$fac -> fetch_client ();
$pdf -> SetXY ( 102 , $posy + 4 );
$pdf -> MultiCell ( 86 , 4 , $fac -> client -> nom , 0 , 'L' );
$pdf -> SetFont ( 'Arial' , 'B' , 10 );
$pdf -> SetXY ( 102 , $posy + 12 );
$pdf -> MultiCell ( 86 , 4 , $fac -> client -> adresse . " \n " . $fac -> client -> cp . " " . $fac -> client -> ville );
$pdf -> rect ( 100 , $posy , 100 , 34 );
/*
*
*/
$pdf -> SetTextColor ( 0 , 0 , 0 );
$pdf -> SetFont ( 'Arial' , '' , 10 );
2004-09-18 13:55:56 +02:00
$titre = $langs -> trans ( " AmountInCurrency " ) . " " . $conf -> monnaie ;
2004-05-15 17:47:01 +02:00
$pdf -> Text ( 200 - $pdf -> GetStringWidth ( $titre ), 94 , $titre );
/*
*/
2004-02-08 17:58:42 +01:00
}
2004-05-15 17:47:01 +02:00
2004-07-25 17:31:16 +02:00
/*
2004-09-18 13:55:56 +02:00
* \brief Affiche le pied de page de la facture
* \param pdf objet PDF
* \param fac objet facture
2004-07-25 17:31:16 +02:00
*/
function _pagefoot ( & $pdf , $fac )
{
2004-12-04 21:19:53 +01:00
global $langs , $conf ;
2004-09-18 13:55:56 +02:00
$langs -> load ( " main " );
$langs -> load ( " bills " );
$langs -> load ( " companies " );
2004-07-25 17:31:16 +02:00
$footy = 13 ;
$pdf -> SetFont ( 'Arial' , '' , 8 );
if ( MAIN_INFO_CAPITAL ) {
$pdf -> SetY ( - $footy );
2004-12-04 21:19:53 +01:00
$pdf -> MultiCell ( 190 , 3 , " SARL au Capital de " . MAIN_INFO_CAPITAL . " " . $conf -> monnaie . " - " . MAIN_INFO_RCS . " - Identifiant professionnel: " . MAIN_INFO_SIREN , 0 , 'C' );
2004-07-25 17:31:16 +02:00
$footy -= 3 ;
}
// Affiche le num<75> ro de TVA intracommunautaire
if ( MAIN_INFO_TVAINTRA == 'MAIN_INFO_TVAINTRA' ) {
$pdf -> SetY ( - $footy );
$pdf -> SetTextColor ( 200 , 0 , 0 );
$pdf -> SetFont ( 'Arial' , 'B' , 8 );
2004-09-18 13:55:56 +02:00
$pdf -> MultiCell ( 190 , 3 , $langs -> trans ( " ErrorVATIntraNotConfigured " ), 0 , 'L' , 0 );
$pdf -> MultiCell ( 190 , 3 , $langs -> trans ( " ErrorGoToGlobalSetup " ), 0 , 'L' , 0 );
2004-07-25 17:31:16 +02:00
$pdf -> SetTextColor ( 0 , 0 , 0 );
}
elseif ( MAIN_INFO_TVAINTRA != '' ) {
$pdf -> SetY ( - $footy );
2004-09-18 13:55:56 +02:00
$pdf -> MultiCell ( 190 , 3 , $langs -> trans ( " TVAIntra " ) . " : " . MAIN_INFO_TVAINTRA , 0 , 'C' );
2004-07-25 17:31:16 +02:00
}
$pdf -> SetXY ( - 10 , - 10 );
$pdf -> MultiCell ( 10 , 3 , $pdf -> PageNo () . '/{nb}' , 0 , 'R' );
}
2004-02-08 17:58:42 +01:00
}
?>