2004-10-20 00:24:10 +02:00
< ? php
2004-02-05 17:45:28 +01:00
/* Copyright ( C ) 2003 - 2004 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
2005-01-08 02:02:27 +01:00
* Copyright ( C ) 2004 - 2005 Laurent Destailleur < eldy @ users . sourceforge . net >
2003-09-16 00:15:11 +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 $
*
*/
2005-01-08 02:02:27 +01:00
/** \file htdocs / includes / modules / facture / pdf_bernique . 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 Bernique
\author Laurent Destailleur
\version $Revision $
*/
2005-01-08 02:02:27 +01:00
/** \class pdf_bernique
\brief Classe permettant de g<EFBFBD> n<EFBFBD> rer les factures au mod<EFBFBD> le Bernique
2004-08-15 17:05:44 +02:00
*/
class pdf_bernique extends ModelePDFFactures {
2003-09-16 00:15:11 +02:00
2004-08-07 19:14:42 +02:00
function pdf_bernique ( $db = 0 )
2003-09-16 00:15:11 +02:00
{
$this -> db = $db ;
2004-02-05 19:14:11 +01:00
$this -> description = " Mod<EFBFBD> le pour les factures avec plusieurs taux de tva, inclus aussi le num<75> ro de TVA Intracommunautaire " ;
2003-09-16 00:15:11 +02:00
}
2004-08-07 19:14:42 +02:00
function write_pdf_file ( $facid )
2003-09-16 00:15:11 +02:00
{
2005-01-08 02:02:27 +01:00
global $user , $langs , $user ;
2004-12-23 19:28:58 +01:00
$langs -> load ( " main " );
$langs -> load ( " bills " );
$langs -> load ( " products " );
2003-09-16 00:15:11 +02:00
$fac = new Facture ( $this -> db , " " , $facid );
$fac -> fetch ( $facid );
2004-12-23 19:28:58 +01:00
if ( $conf -> facture -> dir_output )
2003-09-16 00:15:11 +02:00
{
2004-10-24 13:15:21 +02:00
$forbidden_chars = array ( " / " , " \\ " , " : " , " * " , " ? " , " \" " , " < " , " > " , " | " , " [ " , " ] " , " , " , " ; " , " = " );
$facref = str_replace ( $forbidden_chars , " _ " , $fac -> ref );
2004-12-23 19:28:58 +01:00
$dir = $conf -> facture -> dir_output . " / " . $facref . " / " ;
2004-10-24 13:15:21 +02:00
$file = $dir . $facref . " .pdf " ;
2003-09-16 00:15:11 +02:00
if ( ! file_exists ( $dir ))
{
umask ( 0 );
if ( ! mkdir ( $dir , 0755 ))
{
2004-12-23 19:28:58 +01:00
$this -> error = $langs -> trans ( " ErrorCanNotCreateDir " , $dir );
2004-07-25 15:12:15 +02:00
return 0 ;
2003-09-16 00:15:11 +02:00
}
}
if ( file_exists ( $dir ))
{
2004-12-23 19:28:58 +01:00
// Initialisation facture vierge
2003-09-16 00:15:11 +02:00
$pdf = new FPDF ( 'P' , 'mm' , 'A4' );
$pdf -> Open ();
$pdf -> AddPage ();
$this -> _pagehead ( $pdf , $fac );
$pdf -> SetTitle ( $fac -> ref );
2004-12-23 19:28:58 +01:00
$pdf -> SetSubject ( $langs -> trans ( " Bill " ));
2003-09-16 00:15:11 +02:00
$pdf -> SetCreator ( " Dolibarr " . DOL_VERSION );
$pdf -> SetAuthor ( $user -> fullname );
$tab_top = 100 ;
$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 );
for ( $i = 0 ; $i < $nblignes ; $i ++ )
{
$curY = $nexY ;
$pdf -> SetXY ( 11 , $curY );
$pdf -> MultiCell ( 118 , 5 , $fac -> lignes [ $i ] -> desc , 0 , 'J' );
$nexY = $pdf -> GetY ();
$pdf -> SetXY ( 133 , $curY );
$pdf -> MultiCell ( 10 , 5 , $fac -> lignes [ $i ] -> tva_taux , 0 , 'C' );
$pdf -> SetXY ( 145 , $curY );
$pdf -> MultiCell ( 10 , 5 , $fac -> lignes [ $i ] -> qty , 0 , 'C' );
$pdf -> SetXY ( 156 , $curY );
$pdf -> MultiCell ( 18 , 5 , price ( $fac -> lignes [ $i ] -> price ), 0 , 'R' , 0 );
$pdf -> SetXY ( 174 , $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 );
$this -> _tableau_tot ( $pdf , $fac , $tab_top , $tab_height );
$this -> _tableau_compl ( $pdf , $fac );
/*
*
*/
if ( defined ( " FACTURE_RIB_NUMBER " ))
{
if ( FACTURE_RIB_NUMBER > 0 )
{
$account = new Account ( $this -> db );
$account -> fetch ( FACTURE_RIB_NUMBER );
2004-03-08 17:55:39 +01:00
$pdf -> SetXY ( 10 , 49 );
2003-09-16 00:15:11 +02:00
$pdf -> SetFont ( 'Arial' , 'U' , 8 );
2004-02-05 17:47:05 +01:00
$pdf -> MultiCell ( 40 , 4 , " Coordonn<EFBFBD> es bancaires " , 0 , 'L' , 0 );
2003-09-16 00:15:11 +02:00
$pdf -> SetFont ( 'Arial' , '' , 8 );
$pdf -> MultiCell ( 40 , 4 , " Code banque : " . $account -> code_banque , 0 , 'L' , 0 );
$pdf -> MultiCell ( 40 , 4 , " Code guichet : " . $account -> code_guichet , 0 , 'L' , 0 );
$pdf -> MultiCell ( 50 , 4 , " Num<EFBFBD> ro compte : " . $account -> number , 0 , 'L' , 0 );
$pdf -> MultiCell ( 40 , 4 , " Cl<EFBFBD> RIB : " . $account -> cle_rib , 0 , 'L' , 0 );
$pdf -> MultiCell ( 40 , 4 , " Domiciliation : " . $account -> domiciliation , 0 , 'L' , 0 );
$pdf -> MultiCell ( 40 , 4 , " Prefix IBAN : " . $account -> iban_prefix , 0 , 'L' , 0 );
$pdf -> MultiCell ( 40 , 4 , " BIC : " . $account -> bic , 0 , 'L' , 0 );
}
}
/*
*
*
*/
$pdf -> SetFont ( 'Arial' , '' , 9 );
2004-02-05 19:14:11 +01:00
$pdf -> SetXY ( 10 , 260 );
$pdf -> MultiCell ( 190 , 5 , " Num<EFBFBD> ro de TVA intracommunautaire : " . MAIN_INFO_TVAINTRA , 0 , 'J' );
2003-09-16 00:15:11 +02:00
$pdf -> MultiCell ( 190 , 5 , " Accepte le r<> glement des sommes dues par ch<63> ques libell<6C> s <20> mon nom en ma qualit<69> de Membre d'une Association de Gestion agr<67> <72> e par l'Administration Fiscale. " , 0 , 'J' );
$pdf -> Close ();
$pdf -> Output ( $file );
return 1 ;
}
else
{
2004-07-25 15:12:15 +02:00
$this -> error = " Erreur: Le r<> pertoire ' $dir ' n'existe pas et Dolibarr n'a pu le cr<63> er. " ;
return 0 ;
2003-09-16 00:15:11 +02:00
}
}
else
{
2004-07-25 15:12:15 +02:00
$this -> error = " Erreur: FAC_OUTPUTDIR non d<> fini ! " ;
return 0 ;
2003-09-16 00:15:11 +02:00
}
}
/*
*
*
*
*/
2004-08-07 19:14:42 +02:00
function _tableau_compl ( & $pdf , $fac )
2003-09-16 00:15:11 +02:00
{
$tab3_top = 240 ;
$tab3_height = 18 ;
$tab3_width = 60 ;
$pdf -> Rect ( 10 , $tab3_top , $tab3_width , $tab3_height );
$pdf -> line ( 10 , $tab3_top + 6 , $tab3_width + 10 , $tab3_top + 6 );
$pdf -> line ( 10 , $tab3_top + 12 , $tab3_width + 10 , $tab3_top + 12 );
$pdf -> line ( 30 , $tab3_top , 30 , $tab3_top + $tab3_height );
$pdf -> SetFont ( 'Arial' , '' , 8 );
$pdf -> SetXY ( 10 , $tab3_top - 6 );
$pdf -> MultiCell ( 60 , 6 , " Informations compl<70> mentaires " , 0 , 'L' , 0 );
$pdf -> SetXY ( 10 , $tab3_top );
$pdf -> MultiCell ( 20 , 6 , " R<EFBFBD> gl<EFBFBD> le " , 0 , 'L' , 0 );
$pdf -> SetXY ( 10 , $tab3_top + 6 );
$pdf -> MultiCell ( 20 , 6 , " Ch<EFBFBD> que N<> " , 0 , 'L' , 0 );
$pdf -> SetXY ( 10 , $tab3_top + 12 );
$pdf -> MultiCell ( 20 , 6 , " Banque " , 0 , 'L' , 0 );
$pdf -> SetFont ( 'Arial' , 'U' , 12 );
2003-09-19 15:35:41 +02:00
$titre = " Conditions de r<> glement : " . $fac -> cond_reglement_facture ;
2003-09-16 00:15:11 +02:00
$pdf -> SetXY ( 200 - $pdf -> GetStringWidth ( $titre ), $tab3_top + 10 );
$pdf -> MultiCell ( 120 , 5 , $titre , 0 , 'J' );
}
2004-08-07 19:14:42 +02:00
function _tableau_tot ( & $pdf , $fac , $top , $height )
2003-09-16 00:15:11 +02:00
{
$tab2_top = $top + $height ;
$tab2_hl = 5 ;
$tab2_height = $tab2_hl * 4 ;
$pdf -> SetFont ( 'Arial' , '' , 9 );
$tvas = $fac -> getSumTva ();
$i = 0 ;
$tab4_top = $tab2_top + 2 + ( $tab2_hl * 2 );
foreach ( $tvas as $key => $value )
{
$pdf -> SetXY ( 10 , $tab4_top + ( $i * $tab2_hl ));
$pdf -> MultiCell ( 25 , $tab2_hl , " TVA <20> " . $key . " % " , 0 , 'L' , 0 );
$pdf -> SetXY ( 35 , $tab4_top + ( $i * $tab2_hl ));
$pdf -> MultiCell ( 20 , $tab2_hl , price ( $tvas [ $key ]), 0 , 'R' , 0 );
$i ++ ;
$pdf -> line ( 10 , $tab4_top + ( $tab2_hl * $i ), 55 , $tab4_top + ( $tab2_hl * $i ) );
}
$pdf -> line ( 10 , $tab4_top , 55 , $tab4_top );
$pdf -> line ( 10 , $tab4_top , 10 , $tab4_top + ( $tab2_hl * $i ));
$pdf -> line ( 35 , $tab4_top , 35 , $tab4_top + ( $tab2_hl * $i ));
$pdf -> line ( 55 , $tab4_top , 55 , $tab4_top + ( $tab2_hl * $i ));
$pdf -> Rect ( 10 , $tab2_top , 190 , $tab2_hl * 2 );
$pdf -> line ( 10 , $tab2_top + $tab2_hl , 200 , $tab2_top + $tab2_hl );
$pdf -> SetXY ( 132 , $tab2_top + 0 );
$pdf -> MultiCell ( 42 , $tab2_hl , " Total HT " , 0 , 'R' , 0 );
$pdf -> SetXY ( 11 , $tab2_top + $tab2_hl );
$pdf -> MultiCell ( 42 , $tab2_hl , " Remise " . $fac -> remise_percent . " % " , 0 , 'L' , 0 );
$pdf -> SetXY ( 132 , $tab2_top + $tab2_hl * 2 );
$pdf -> MultiCell ( 42 , $tab2_hl , " Total HT apr<70> s remise " , 0 , 'R' , 0 );
$pdf -> SetXY ( 132 , $tab2_top + $tab2_hl * 3 );
$pdf -> MultiCell ( 42 , $tab2_hl , " Total TVA " , 0 , 'R' , 0 );
$pdf -> SetXY ( 132 , $tab2_top + $tab2_hl * 4 );
$pdf -> MultiCell ( 42 , $tab2_hl , " Total TTC " , 0 , 'R' , 1 );
$pdf -> SetXY ( 174 , $tab2_top + 0 );
$pdf -> MultiCell ( 26 , $tab2_hl , price ( $fac -> total_ht + $fac -> remise ), 0 , 'R' , 0 );
$pdf -> SetXY ( 174 , $tab2_top + $tab2_hl );
$pdf -> MultiCell ( 26 , $tab2_hl , price ( $fac -> remise ), 0 , 'R' , 0 );
$pdf -> SetXY ( 174 , $tab2_top + $tab2_hl * 2 );
$pdf -> MultiCell ( 26 , $tab2_hl , price ( $fac -> total_ht ), 0 , 'R' , 0 );
$pdf -> SetXY ( 174 , $tab2_top + $tab2_hl * 3 );
$pdf -> MultiCell ( 26 , $tab2_hl , price ( $fac -> total_tva ), 0 , 'R' , 0 );
$pdf -> SetXY ( 174 , $tab2_top + $tab2_hl * 4 );
$pdf -> MultiCell ( 26 , $tab2_hl , price ( $fac -> total_ttc ), 0 , 'R' , 1 );
}
/*
*
*/
2004-08-07 19:14:42 +02:00
function _tableau ( & $pdf , $tab_top , $tab_height , $nexY )
2003-09-16 00:15:11 +02:00
{
$pdf -> SetFont ( 'Arial' , '' , 10 );
$pdf -> Text ( 11 , $tab_top + 5 , 'D<> signation' );
$pdf -> line ( 132 , $tab_top , 132 , $tab_top + $tab_height );
$pdf -> Text ( 134 , $tab_top + 5 , 'TVA' );
$pdf -> line ( 144 , $tab_top , 144 , $tab_top + $tab_height );
$pdf -> Text ( 147 , $tab_top + 5 , 'Qt<51> ' );
$pdf -> line ( 156 , $tab_top , 156 , $tab_top + $tab_height );
$pdf -> Text ( 160 , $tab_top + 5 , 'P.U.' );
$pdf -> line ( 174 , $tab_top , 174 , $tab_top + $tab_height );
$pdf -> Text ( 187 , $tab_top + 5 , 'Total' );
$pdf -> Rect ( 10 , $tab_top , 190 , $tab_height );
$pdf -> line ( 10 , $tab_top + 10 , 200 , $tab_top + 10 );
}
/*
*
*
*
*
*/
2004-08-07 19:14:42 +02:00
function _pagehead ( & $pdf , $fac )
2003-09-16 00:15:11 +02:00
{
$pdf -> SetXY ( 10 , 5 );
if ( defined ( " FAC_PDF_INTITULE " ))
{
$pdf -> SetTextColor ( 0 , 0 , 200 );
$pdf -> SetFont ( 'Arial' , 'B' , 14 );
$pdf -> MultiCell ( 60 , 8 , FAC_PDF_INTITULE , 0 , 'L' );
}
$pdf -> SetTextColor ( 70 , 70 , 170 );
if ( defined ( " FAC_PDF_ADRESSE " ))
{
$pdf -> SetFont ( 'Arial' , '' , 12 );
$pdf -> MultiCell ( 40 , 5 , FAC_PDF_ADRESSE );
}
if ( defined ( " FAC_PDF_TEL " ))
{
$pdf -> SetFont ( 'Arial' , '' , 10 );
$pdf -> MultiCell ( 40 , 5 , " T<EFBFBD> l : " . FAC_PDF_TEL );
}
2005-01-08 01:08:09 +01:00
if ( defined ( " MAIN_INFO_SIREN " ))
2003-09-16 00:15:11 +02:00
{
$pdf -> SetFont ( 'Arial' , '' , 10 );
2005-01-08 01:08:09 +01:00
$pdf -> MultiCell ( 40 , 5 , " SIREN : " . MAIN_INFO_SIREN );
2003-09-16 00:15:11 +02:00
}
if ( defined ( " FAC_PDF_INTITULE2 " ))
{
$pdf -> SetXY ( 100 , 5 );
$pdf -> SetFont ( 'Arial' , 'B' , 14 );
$pdf -> SetTextColor ( 0 , 0 , 200 );
$pdf -> MultiCell ( 100 , 10 , FAC_PDF_INTITULE2 , '' , 'R' );
}
/*
* Adresse Client
*/
$pdf -> SetTextColor ( 0 , 0 , 0 );
$pdf -> SetFont ( 'Arial' , 'B' , 12 );
$fac -> fetch_client ();
$pdf -> SetXY ( 102 , 42 );
$pdf -> MultiCell ( 66 , 5 , $fac -> client -> nom );
$pdf -> SetFont ( 'Arial' , 'B' , 11 );
2004-02-05 17:45:28 +01:00
$pdf -> SetXY ( 102 , $pdf -> GetY ());
2003-09-16 00:15:11 +02:00
$pdf -> MultiCell ( 66 , 5 , $fac -> client -> adresse . " \n " . $fac -> client -> cp . " " . $fac -> client -> ville );
$pdf -> rect ( 100 , 40 , 100 , 40 );
$pdf -> SetTextColor ( 200 , 0 , 0 );
$pdf -> SetFont ( 'Arial' , 'B' , 14 );
$pdf -> Text ( 11 , 88 , " Date : " . strftime ( " %d %b %Y " , $fac -> date ));
$pdf -> Text ( 11 , 94 , " Facture : " . $fac -> ref );
/*
*/
$pdf -> SetTextColor ( 0 , 0 , 0 );
$pdf -> SetFont ( 'Arial' , '' , 10 );
$titre = " Montants exprim<69> s en euros " ;
$pdf -> Text ( 200 - $pdf -> GetStringWidth ( $titre ), 98 , $titre );
/*
*/
}
}
?>