2009-01-28 16:09:37 +01:00
< ? php
/* Copyright ( C ) 2006 - 2008 Laurent Destailleur < eldy @ users . sourceforge . net >
* Copyright ( C ) 2006 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
* Copyright ( C ) 2007 Patrick Raguin < patrick . raguin @ gmail . com >
*
* 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 /
*/
/**
2009-06-15 20:57:34 +02:00
* \file htdocs / lib / pdf . lib . php
* \brief Set of functions used for PDF generation
* \ingroup core
2009-01-28 16:09:37 +01:00
* \version $Id $
*/
2009-06-15 20:57:34 +02:00
/**
* \brief Show header of page for PDF generation
* \param pdf Object PDF
* \param outputlang Object lang for output
* \param page_height
*/
function pdf_pagehead ( & $pdf , $outputlangs , $page_height )
{
global $conf ;
// Add a background image on document
if ( ! empty ( $conf -> global -> MAIN_USE_BACKGROUND_ON_PDF ))
{
$pdf -> Image ( $conf -> societe -> dir_output . '/logos/' . $conf -> global -> MAIN_USE_BACKGROUND_ON_PDF , 0 , 0 , 0 , $page_height );
}
}
2009-01-28 16:09:37 +01:00
/**
* \brief Show bank informations for PDF generation
*/
function pdf_bank ( & $pdf , $outputlangs , $curx , $cury , $account )
{
$pdf -> SetXY ( $curx , $cury );
$pdf -> SetFont ( 'Arial' , 'B' , 8 );
$pdf -> MultiCell ( 100 , 3 , $outputlangs -> transnoentities ( 'PaymentByTransferOnThisBankAccount' ) . ':' , 0 , 'L' , 0 );
$cury += 4 ;
$usedetailedbban = $account -> useDetailedBBAN ();
if ( $usedetailedbban )
{
$pdf -> SetFont ( 'Arial' , 'B' , 6 );
$pdf -> line ( $curx + 1 , $cury , $curx + 1 , $cury + 10 );
$pdf -> SetXY ( $curx , $cury );
$pdf -> MultiCell ( 18 , 3 , $outputlangs -> transnoentities ( " BankCode " ), 0 , 'C' , 0 );
$pdf -> line ( $curx + 18 , $cury , $curx + 18 , $cury + 10 );
$pdf -> SetXY ( $curx + 18 , $cury );
$pdf -> MultiCell ( 18 , 3 , $outputlangs -> transnoentities ( " DeskCode " ), 0 , 'C' , 0 );
$pdf -> line ( $curx + 36 , $cury , $curx + 36 , $cury + 10 );
$pdf -> SetXY ( $curx + 36 , $cury );
$pdf -> MultiCell ( 24 , 3 , $outputlangs -> transnoentities ( " BankAccountNumber " ), 0 , 'C' , 0 );
$pdf -> line ( $curx + 60 , $cury , $curx + 60 , $cury + 10 );
$pdf -> SetXY ( $curx + 60 , $cury );
$pdf -> MultiCell ( 13 , 3 , $outputlangs -> transnoentities ( " BankAccountNumberKey " ), 0 , 'C' , 0 );
$pdf -> line ( $curx + 73 , $cury , $curx + 73 , $cury + 10 );
$pdf -> SetFont ( 'Arial' , '' , 8 );
$pdf -> SetXY ( $curx , $cury + 6 );
$pdf -> MultiCell ( 18 , 3 , $outputlangs -> convToOutputCharset ( $account -> code_banque ), 0 , 'C' , 0 );
$pdf -> SetXY ( $curx + 18 , $cury + 6 );
$pdf -> MultiCell ( 18 , 3 , $outputlangs -> convToOutputCharset ( $account -> code_guichet ), 0 , 'C' , 0 );
$pdf -> SetXY ( $curx + 36 , $cury + 6 );
$pdf -> MultiCell ( 24 , 3 , $outputlangs -> convToOutputCharset ( $account -> number ), 0 , 'C' , 0 );
$pdf -> SetXY ( $curx + 60 , $cury + 6 );
$pdf -> MultiCell ( 13 , 3 , $outputlangs -> convToOutputCharset ( $account -> cle_rib ), 0 , 'C' , 0 );
}
else
{
$pdf -> SetFont ( 'Arial' , 'B' , 6 );
$pdf -> SetXY ( $curx , $cury );
$pdf -> MultiCell ( 90 , 3 , $outputlangs -> transnoentities ( " BankAccountNumber " ) . ': ' . $outputlangs -> convToOutputCharset ( $account -> number ), 0 , 'L' , 0 );
$cury -= 9 ;
}
$pdf -> SetXY ( $curx , $cury + 12 );
$pdf -> MultiCell ( 90 , 3 , $outputlangs -> transnoentities ( " Residence " ) . ': ' . $outputlangs -> convToOutputCharset ( $account -> domiciliation ), 0 , 'L' , 0 );
$pdf -> SetXY ( $curx , $cury + 22 );
$pdf -> MultiCell ( 90 , 3 , $outputlangs -> transnoentities ( " IBANNumber " ) . ': ' . $outputlangs -> convToOutputCharset ( $account -> iban ), 0 , 'L' , 0 );
$pdf -> SetXY ( $curx , $cury + 25 );
$pdf -> MultiCell ( 90 , 3 , $outputlangs -> transnoentities ( " BICNumber " ) . ': ' . $outputlangs -> convToOutputCharset ( $account -> bic ), 0 , 'L' , 0 );
return $pdf -> getY ();
}
/**
* \brief Show footer of page for PDF generation
* \param pdf Object PDF
* \param outputlang Object lang for output
* \param paramfreetext Constant name of free text
* \param fromcompany Object company
* \param marge_basse
* \param marge_gauche
* \param page_hauteur
*/
function pdf_pagefoot ( & $pdf , $outputlangs , $paramfreetext , $fromcompany , $marge_basse , $marge_gauche , $page_hauteur )
{
global $conf ;
$outputlangs -> load ( " dict " );
// Line of free text
$ligne = ( ! empty ( $conf -> global -> $paramfreetext )) ? $outputlangs -> convToOutputCharset ( $conf -> global -> $paramfreetext ) : " " ;
// First line of company infos
// Juridical status
$ligne1 = " " ;
if ( $fromcompany -> forme_juridique_code )
{
$ligne1 .= ( $ligne1 ? " - " : " " ) . $outputlangs -> convToOutputCharset ( getFormeJuridiqueLabel ( $fromcompany -> forme_juridique_code ));
}
// Capital
if ( $fromcompany -> capital )
{
$ligne1 .= ( $ligne1 ? " - " : " " ) . $outputlangs -> transnoentities ( " CapitalOf " , $fromcompany -> capital ) . " " . $outputlangs -> transnoentities ( " Currency " . $conf -> monnaie );
}
// Prof Id 1
if ( $fromcompany -> profid1 && ( $fromcompany -> pays_code != 'FR' || ! $fromcompany -> profid2 ))
{
$field = $outputlangs -> transcountrynoentities ( " ProfId1 " , $fromcompany -> pays_code );
if ( eregi ( '\((.*)\)' , $field , $reg )) $field = $reg [ 1 ];
$ligne1 .= ( $ligne1 ? " - " : " " ) . $field . " : " . $outputlangs -> convToOutputCharset ( $fromcompany -> profid1 );
}
// Prof Id 2
if ( $fromcompany -> profid2 )
{
$field = $outputlangs -> transcountrynoentities ( " ProfId2 " , $fromcompany -> pays_code );
if ( eregi ( '\((.*)\)' , $field , $reg )) $field = $reg [ 1 ];
$ligne1 .= ( $ligne1 ? " - " : " " ) . $field . " : " . $outputlangs -> convToOutputCharset ( $fromcompany -> profid2 );
}
// Second line of company infos
$ligne2 = " " ;
// Prof Id 3
if ( $fromcompany -> profid3 )
{
$field = $outputlangs -> transcountrynoentities ( " ProfId3 " , $fromcompany -> pays_code );
if ( eregi ( '\((.*)\)' , $field , $reg )) $field = $reg [ 1 ];
$ligne2 .= ( $ligne2 ? " - " : " " ) . $field . " : " . $outputlangs -> convToOutputCharset ( $fromcompany -> profid3 );
}
// Prof Id 4
if ( $fromcompany -> profid4 )
{
$field = $outputlangs -> transcountrynoentities ( " ProfId4 " , $fromcompany -> pays_code );
if ( eregi ( '\((.*)\)' , $field , $reg )) $field = $reg [ 1 ];
$ligne2 .= ( $ligne2 ? " - " : " " ) . $field . " : " . $outputlangs -> convToOutputCharset ( $fromcompany -> profid4 );
}
// IntraCommunautary VAT
if ( $fromcompany -> tva_intra != '' )
{
$ligne2 .= ( $ligne2 ? " - " : " " ) . $outputlangs -> transnoentities ( " VATIntraShort " ) . " : " . $outputlangs -> convToOutputCharset ( $fromcompany -> tva_intra );
}
$pdf -> SetFont ( 'Arial' , '' , 7 );
$pdf -> SetDrawColor ( 224 , 224 , 224 );
// On positionne le debut du bas de page selon nbre de lignes de ce bas de page
2009-06-04 01:05:52 +02:00
$nbofligne = dol_nboflines_bis ( $ligne );
2009-01-28 16:09:37 +01:00
//print 'e'.$ligne.'t'.dol_nboflines($ligne);exit;
$posy = $marge_basse + ( $nbofligne * 3 ) + ( $ligne1 ? 3 : 0 ) + ( $ligne2 ? 3 : 0 );
2009-02-07 01:38:29 +01:00
if ( $ligne ) // Free text
2009-01-28 16:09:37 +01:00
{
$pdf -> SetXY ( $marge_gauche , - $posy );
2009-06-04 01:05:52 +02:00
$pdf -> MultiCell ( 20000 , 3 , $ligne , 0 , 'L' , 0 ); // Use a large value 20000, to not have automatic wrap. This make user understand, he need to add CR on its text.
2009-01-28 16:09:37 +01:00
$posy -= ( $nbofligne * 3 ); // 6 of ligne + 3 of MultiCell
}
$pdf -> SetY ( - $posy );
$pdf -> line ( $marge_gauche , $page_hauteur - $posy , 200 , $page_hauteur - $posy );
$posy -- ;
if ( $ligne1 )
{
$pdf -> SetXY ( $marge_gauche , - $posy );
$pdf -> MultiCell ( 200 , 2 , $ligne1 , 0 , 'C' , 0 );
}
if ( $ligne2 )
{
$posy -= 3 ;
$pdf -> SetXY ( $marge_gauche , - $posy );
$pdf -> MultiCell ( 200 , 2 , $ligne2 , 0 , 'C' , 0 );
}
$pdf -> SetXY ( - 20 , - $posy );
$pdf -> MultiCell ( 11 , 2 , $pdf -> PageNo () . '/{nb}' , 0 , 'R' , 0 );
}
/**
2009-02-07 01:38:29 +01:00
* \brief Return line description translated in outputlangs and encoded in UTF8
2009-05-13 12:21:26 +02:00
* \param line Line to format
* \param outputlang Object lang for output
* \param showref Show reference
2009-01-28 16:09:37 +01:00
*/
2009-05-13 12:21:26 +02:00
function pdf_getlinedesc ( $line , $outputlangs , $showref = 1 )
2009-01-28 16:09:37 +01:00
{
2009-01-28 16:37:10 +01:00
global $db , $conf , $langs ;
2009-01-28 16:09:37 +01:00
2009-01-28 16:37:10 +01:00
$label = $line -> label ;
$desc = $line -> desc ;
$note = $line -> note ;
$idprod = $line -> fk_product ;
2009-01-28 16:09:37 +01:00
2009-01-28 16:37:10 +01:00
if ( empty ( $label )) $label = $line -> libelle ;
if ( empty ( $desc )) $desc = $line -> description ;
if ( empty ( $idprod )) $idprod = $line -> produit_id ;
$prodser = new Product ( $db );
if ( $idprod )
{
$prodser -> fetch ( $idprod );
// If a predefined product and multilang and on other lang, we renamed label with label translated
if ( $conf -> global -> MAIN_MULTILANGS && ( $outputlangs -> defaultlang != $langs -> defaultlang ))
{
if ( ! empty ( $prodser -> multilangs [ $outputlangs -> defaultlang ][ " libelle " ])) $label = $prodser -> multilangs [ $outputlangs -> defaultlang ][ " libelle " ];
if ( ! empty ( $prodser -> multilangs [ $outputlangs -> defaultlang ][ " description " ])) $desc = $prodser -> multilangs [ $outputlangs -> defaultlang ][ " description " ];
if ( ! empty ( $prodser -> multilangs [ $outputlangs -> defaultlang ][ " note " ])) $note = $prodser -> multilangs [ $outputlangs -> defaultlang ][ " note " ];
}
}
// Description short of product line
$libelleproduitservice = $label ;
// Description long of product line
2009-01-29 02:57:56 +01:00
if ( $desc && ( $desc != $label ))
2009-01-28 16:09:37 +01:00
{
2009-01-29 02:57:56 +01:00
if ( $libelleproduitservice ) $libelleproduitservice .= " \n " ;
2009-01-28 16:09:37 +01:00
2009-01-28 16:37:10 +01:00
if ( $desc == '(CREDIT_NOTE)' && $line -> fk_remise_except )
2009-01-28 16:09:37 +01:00
{
2009-05-06 22:41:48 +02:00
$discount = new DiscountAbsolute ( $db );
2009-01-28 16:09:37 +01:00
$discount -> fetch ( $line -> fk_remise_except );
$libelleproduitservice = $outputlangs -> transnoentitiesnoconv ( " DiscountFromCreditNote " , $discount -> ref_facture_source );
}
else
{
2009-01-28 16:37:10 +01:00
if ( $idprod )
2009-01-28 16:09:37 +01:00
{
2009-01-28 16:37:10 +01:00
$libelleproduitservice .= $desc ;
2009-01-28 16:09:37 +01:00
}
else
{
2009-01-28 16:37:10 +01:00
$libelleproduitservice .= $desc ;
2009-01-28 16:09:37 +01:00
}
}
}
// Si ligne associee a un code produit
2009-01-28 16:37:10 +01:00
if ( $idprod )
2009-01-28 16:09:37 +01:00
{
// On ajoute la ref
if ( $prodser -> ref )
{
$prefix_prodserv = " " ;
2009-05-13 12:21:26 +02:00
$ref_prodserv = " " ;
2009-02-07 01:38:29 +01:00
if ( $conf -> global -> PRODUCT_ADD_TYPE_IN_DOCUMENTS ) // In standard mode, we do not show this
2009-01-28 16:09:37 +01:00
{
2009-02-07 01:38:29 +01:00
if ( $prodser -> isservice ())
{
$prefix_prodserv = $outputlangs -> transnoentitiesnoconv ( " Service " ) . " " ;
}
else
{
$prefix_prodserv = $outputlangs -> transnoentitiesnoconv ( " Product " ) . " " ;
}
2009-01-28 16:09:37 +01:00
}
2009-06-15 20:57:34 +02:00
2009-05-13 12:21:26 +02:00
if ( $showref ) $ref_prodserv = $prodser -> ref . " - " ;
2009-06-15 20:57:34 +02:00
2009-05-13 12:21:26 +02:00
$libelleproduitservice = $prefix_prodserv . $ref_prodserv . $libelleproduitservice ;
2009-01-28 16:09:37 +01:00
}
}
2009-01-29 02:57:56 +01:00
$libelleproduitservice = dol_htmlentitiesbr ( $libelleproduitservice , 1 );
2009-01-28 16:09:37 +01:00
if ( $line -> date_start || $line -> date_end )
{
2009-02-07 01:38:29 +01:00
// Show duration if exists
if ( $line -> date_start && $line -> date_end )
{
2009-02-20 23:53:15 +01:00
$period = '(' . $outputlangs -> transnoentitiesnoconv ( 'DateFromTo' , dol_print_date ( $line -> date_start , $format , false , $outputlangs ), dol_print_date ( $line -> date_end , $format , false , $outputlangs )) . ')' ;
2009-02-07 01:38:29 +01:00
}
if ( $line -> date_start && ! $line -> date_end )
{
2009-02-20 23:53:15 +01:00
$period = '(' . $outputlangs -> transnoentitiesnoconv ( 'DateFrom' , dol_print_date ( $line -> date_start , $format , false , $outputlangs )) . ')' ;
2009-02-07 01:38:29 +01:00
}
if ( ! $line -> date_start && $line -> date_end )
{
2009-02-20 23:53:15 +01:00
$period = '(' . $outputlangs -> transnoentitiesnoconv ( 'DateUntil' , dol_print_date ( $line -> date_end , $format , false , $outputlangs )) . ')' ;
2009-02-07 01:38:29 +01:00
}
//print '>'.$outputlangs->charset_output.','.$period;
2009-01-28 16:09:37 +01:00
$libelleproduitservice .= " <br> " . dol_htmlentitiesbr ( $period , 1 );
2009-02-07 01:38:29 +01:00
//print $libelleproduitservice;
2009-01-28 16:09:37 +01:00
}
return $libelleproduitservice ;
}
?>