diff --git a/htdocs/includes/modules/propale/pdf_propale_azur.modules.php b/htdocs/includes/modules/propale/pdf_propale_azur.modules.php index 28f0c1eb046..d714f63484e 100644 --- a/htdocs/includes/modules/propale/pdf_propale_azur.modules.php +++ b/htdocs/includes/modules/propale/pdf_propale_azur.modules.php @@ -2,6 +2,7 @@ /* Copyright (C) 2004-2009 Laurent Destailleur * Copyright (C) 2005-2010 Regis Houssin * Copyright (C) 2008 Raphael Bertrand (Resultic) + * Copyright (C) 2010 Juanjo Menent * * 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 @@ -92,6 +93,8 @@ class pdf_propale_azur extends ModelePDFPropales $this->postotalht=174; $this->tva=array(); + $this->localtax1=array(); + $this->localtax2=array(); $this->atleastoneratenotnull=0; $this->atleastonediscount=0; } @@ -288,10 +291,22 @@ class pdf_propale_azur extends ModelePDFPropales // Collecte des totaux par valeur de tva dans $this->tva["taux"]=total_tva $tvaligne=$propale->lignes[$i]->total_tva; + $localtax1ligne=$propale->lignes[$i]->total_localtax1; + $localtax2ligne=$propale->lignes[$i]->total_localtax2; + if ($propale->remise_percent) $tvaligne-=($tvaligne*$propale->remise_percent)/100; + if ($propale->remise_percent) $localtax1ligne-=($localtax1ligne*$propale->remise_percent)/100; + if ($propale->remise_percent) $localtax2ligne-=($localtax2ligne*$propale->remise_percent)/100; + $vatrate=(string) $propale->lignes[$i]->tva_tx; + $localtax1rate=(string) $propale->lignes[$i]->localtax1_tx; + $localtax2rate=(string) $propale->lignes[$i]->localtax2_tx; + if (($propale->lignes[$i]->info_bits & 0x01) == 0x01) $vatrate.='*'; + $this->tva[$vatrate] += $tvaligne; + $this->localtax1[$localtax1rate]+=$localtax1ligne; + $this->localtax2[$localtax2rate]+=$localtax2ligne; $nexY+=2; // Passe espace entre les lignes @@ -560,7 +575,7 @@ class pdf_propale_azur extends ModelePDFPropales */ function _tableau_tot(&$pdf, $object, $deja_regle, $posy, $outputlangs) { - global $conf; + global $conf,$mysoc; $tab2_top = $posy; $tab2_hl = 5; @@ -618,6 +633,79 @@ class pdf_propale_azur extends ModelePDFPropales $pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index); $pdf->MultiCell($largcol2, $tab2_hl, price($object->total_tva), 0, 'R', 1); + + // Total LocalTax1 + if ($conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on' && $object->total_localtax1>0) + { + $index++; + $pdf->SetXY ($col1x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalLT1".$mysoc->pays_code), $useborder, 'L', 1); + $pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($object->total_localtax1), $useborder, 'R', 1); + } + + // Total LocalTax2 + if ($conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax2on' && $object->total_localtax2>0) + { + $index++; + $pdf->SetXY ($col1x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalLT2".$mysoc->pays_code), $useborder, 'L', 1); + $pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($object->total_localtax2), $useborder, 'R', 1); + } + } + else + { + //Local tax 1 + foreach( $this->localtax1 as $tvakey => $tvaval ) + { + if ($tvakey>0) // On affiche pas taux 0 + { + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY ($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/',$tvakey)) + { + $tvakey=str_replace('*','',$tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; + } + $totalvat = $outputlangs->transnoentities("TotalLT1".$mysoc->pays_code).' '; + $totalvat.=vatrate($tvakey,1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval), 0, 'R', 1); + } + } + + //Local tax 2 + foreach( $this->localtax2 as $tvakey => $tvaval ) + { + if ($tvakey>0) // On affiche pas taux 0 + { + //$this->atleastoneratenotnull++; + + $index++; + $pdf->SetXY ($col1x, $tab2_top + $tab2_hl * $index); + + $tvacompl=''; + if (preg_match('/\*/',$tvakey)) + { + $tvakey=str_replace('*','',$tvakey); + $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; + } + $totalvat = $outputlangs->transnoentities("TotalLT2".$mysoc->pays_code).' '; + $totalvat.=vatrate($tvakey,1).$tvacompl; + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); + + $pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval), 0, 'R', 1); + + } + } } } diff --git a/htdocs/includes/modules/propale/pdf_propale_roig.modules.php b/htdocs/includes/modules/propale/pdf_propale_roig.modules.php deleted file mode 100755 index bd31ab35182..00000000000 --- a/htdocs/includes/modules/propale/pdf_propale_roig.modules.php +++ /dev/null @@ -1,1045 +0,0 @@ - - * Copyright (C) 2005-2010 Regis Houssin - * Copyright (C) 2008 Raphael Bertrand (Resultic) - * Copyright (C) 2010 Juanjo Menent - * - * 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/ - */ - -/** - * \file htdocs/includes/modules/propale/pdf_propale_azur.modules.php - * \ingroup propale - * \brief Fichier de la classe permettant de generer les propales au modele Azur - * \author Laurent Destailleur - * \version $Id$ - */ -require_once(DOL_DOCUMENT_ROOT."/includes/modules/propale/modules_propale.php"); -require_once(DOL_DOCUMENT_ROOT."/product/class/product.class.php"); -require_once(DOL_DOCUMENT_ROOT."/lib/company.lib.php"); -require_once(DOL_DOCUMENT_ROOT."/lib/functions2.lib.php"); - - -/** - * \class pdf_propale_azur - * \brief Classe permettant de generer les propales au modele Azur - */ -class pdf_propale_roig extends ModelePDFPropales -{ - var $emetteur; // Objet societe qui emet - - - /** - * \brief Constructeur - * \param db Handler acces base de donnee - */ - function pdf_propale_roig($db) - { - global $conf,$langs,$mysoc; - - $langs->load("main"); - $langs->load("bills"); - - $this->db = $db; - $this->name = "roig"; - $this->description = $langs->trans('DocModelRoigDescription'); - - // Dimension page pour format A4 - $this->type = 'pdf'; - $this->page_largeur = 210; - $this->page_hauteur = 297; - $this->format = array($this->page_largeur,$this->page_hauteur); - $this->marge_gauche=10; - $this->marge_droite=10; - $this->marge_haute=10; - $this->marge_basse=10; - - $this->option_logo = 1; // Affiche logo - $this->option_tva = 1; // Gere option tva FACTURE_TVAOPTION - $this->option_modereg = 1; // Affiche mode reglement - $this->option_condreg = 1; // Affiche conditions reglement - $this->option_codeproduitservice = 1; // Affiche code produit-service - $this->option_multilang = 1; // Dispo en plusieurs langues - $this->option_escompte = 1; // Affiche si il y a eu escompte - $this->option_credit_note = 1; // Gere les avoirs - $this->option_freetext = 1; // Support add of a personalised text - $this->option_draft_watermark = 1; //Support add of a watermark on drafts - - $this->franchise=!$mysoc->tva_assuj; - - // Recupere emmetteur - $this->emetteur=$mysoc; - if (! $this->emetteur->pays_code) $this->emetteur->pays_code=substr($langs->defaultlang,-2); // Par defaut, si n'etait pas defini - - // Defini position des colonnes - $this->posxdesc=$this->marge_gauche+1; - $this->posxtva=113; - $this->posxup=126; - $this->posxqty=145; - $this->posxdiscount=162; - $this->postotalht=174; - - $this->tva=array(); - $this->localtax1=array(); - $this->localtax2=array(); - $this->atleastoneratenotnull=0; - $this->atleastonediscount=0; - } - - /** - * \brief Fonction generant la propale sur le disque - * \param propale Objet propal a generer (ou id si ancienne methode) - * \param outputlangs Lang object for output language - * \return int 1=ok, 0=ko - */ - function write_file($propale,$outputlangs) - { - global $user,$langs,$conf; - - if (! is_object($outputlangs)) $outputlangs=$langs; - // Force output charset to ISO, because FPDF expect text to be encoded in ISO - $sav_charset_output=$outputlangs->charset_output; - $outputlangs->charset_output='ISO-8859-1'; - - $outputlangs->load("main"); - $outputlangs->load("dict"); - $outputlangs->load("companies"); - $outputlangs->load("bills"); - $outputlangs->load("propal"); - $outputlangs->load("products"); - - if ($conf->propale->dir_output) - { - // Definition de l'objet $propale (pour compatibilite ascendante) - if (! is_object($propale)) - { - $id = $propale; - $propale = new Propal($this->db,"",$id); - $ret=$propale->fetch($id); - } - $propale->fetch_client(); - $deja_regle = ""; - - // Definition de $dir et $file - if ($propale->specimen) - { - $dir = $conf->propale->dir_output; - $file = $dir . "/SPECIMEN.pdf"; - } - else - { - $propref = dol_sanitizeFileName($propale->ref); - $dir = $conf->propale->dir_output . "/" . $propref; - $file = $dir . "/" . $propref . ".pdf"; - } - - if (! file_exists($dir)) - { - if (create_exdir($dir) < 0) - { - $this->error=$langs->trans("ErrorCanNotCreateDir",$dir); - return 0; - } - } - - if (file_exists($dir)) - { - $nblignes = sizeof($propale->lignes); - - // Protection et encryption du pdf - if ($conf->global->PDF_SECURITY_ENCRYPTION) - { - $pdf=new FPDI_Protection('P','mm',$this->format); - $pdfrights = array('print'); // Ne permet que l'impression du document - $pdfuserpass = ''; // Mot de passe pour l'utilisateur final - $pdfownerpass = NULL; // Mot de passe du proprietaire, cree aleatoirement si pas defini - $pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass); - } - else - { - $pdf=new FPDI('P','mm',$this->format); - } - - $pdf->Open(); - $pagenb=0; - $pdf->SetDrawColor(128,128,128); - - $pdf->SetTitle($outputlangs->convToOutputCharset($propale->ref)); - $pdf->SetSubject($outputlangs->transnoentities("CommercialProposal")); - $pdf->SetCreator("Dolibarr ".DOL_VERSION); - $pdf->SetAuthor($outputlangs->convToOutputCharset($user->getFullName($outputlangs))); - $pdf->SetKeyWords($outputlangs->convToOutputCharset($propale->ref)." ".$outputlangs->transnoentities("CommercialProposal")); - if ($conf->global->MAIN_DISABLE_PDF_COMPRESSION) $pdf->SetCompression(false); - - $pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite); // Left, Top, Right - $pdf->SetAutoPageBreak(1,0); - - // Positionne $this->atleastonediscount si on a au moins une remise - for ($i = 0 ; $i < $nblignes ; $i++) - { - if ($propale->lignes[$i]->remise_percent) - { - $this->atleastonediscount++; - } - } - - // New page - $pdf->AddPage(); - $pagenb++; - $this->_pagehead($pdf, $propale, 1, $outputlangs); - $pdf->SetFont('Arial','', 9); - $pdf->MultiCell(0, 4, '', 0, 'J'); // Set interline to 4 - $pdf->SetTextColor(0,0,0); - - $tab_top = 90; - $tab_top_middlepage = 50; - $tab_top_newpage = 50; - $tab_height = 110; - $tab_height_middlepage = 190; - $tab_height_newpage = 150; - - // Affiche notes - if (! empty($propale->note_public)) - { - $tab_top = 88; - - $pdf->SetFont('Arial','', 9); // Dans boucle pour gerer multi-page - $pdf->SetXY ($this->posxdesc-1, $tab_top); - $pdf->MultiCell(190, 4, $outputlangs->convToOutputCharset($propale->note_public), 0, 'J'); - $nexY = $pdf->GetY(); - $height_note=$nexY-$tab_top; - - // Rect prend une longueur en 3eme param - $pdf->SetDrawColor(192,192,192); - $pdf->Rect($this->marge_gauche, $tab_top-1, $this->page_largeur-$this->marge_gauche-$this->marge_droite, $height_note+1); - - $tab_height = $tab_height - $height_note; - $tab_top = $nexY+6; - } - else - { - $height_note=0; - } - - $iniY = $tab_top + 7; - $curY = $tab_top + 7; - $nexY = $tab_top + 7; - - // Loop on each lines - for ($i = 0 ; $i < $nblignes ; $i++) - { - $curY = $nexY; - - // Description de la ligne produit - $libelleproduitservice=pdf_getlinedesc($propale->lignes[$i],$outputlangs); - - $pdf->SetFont('Arial','', 9); // Dans boucle pour gerer multi-page - - // Description - $pdf->writeHTMLCell($this->posxtva-$this->posxdesc-1, 4, $this->posxdesc-1, $curY, $outputlangs->convToOutputCharset($libelleproduitservice), 0, 1); - - $pdf->SetFont('Arial','', 9); // On repositionne la police par defaut - $nexY = $pdf->GetY(); - - // TVA - if (empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT)) - { - $pdf->SetXY ($this->posxtva, $curY); - $pdf->MultiCell($this->posxup-$this->posxtva-1, 4, vatrate($propale->lignes[$i]->tva_tx,1,$propale->lignes[$i]->info_bits), 0, 'R'); - } - - // Prix unitaire HT avant remise - $pdf->SetXY ($this->posxup, $curY); - $pdf->MultiCell($this->posxqty-$this->posxup-1, 4, price($propale->lignes[$i]->subprice), 0, 'R', 0); - - // Quantity - $pdf->SetXY ($this->posxqty, $curY); - if ($propale->lignes[$i]->special_code != 3) $pdf->MultiCell($this->posxdiscount-$this->posxqty-1, 4, $propale->lignes[$i]->qty, 0, 'R'); - - // Remise sur ligne - $pdf->SetXY ($this->posxdiscount, $curY); - if ($propale->lignes[$i]->remise_percent && $propale->lignes[$i]->special_code != 3) - { - $pdf->MultiCell($this->postotalht-$this->posxdiscount-1, 4, dol_print_reduction($propale->lignes[$i]->remise_percent,$outputlangs), 0, 'R'); - } - - // Total HT ligne - $pdf->SetXY ($this->postotalht, $curY); - if ($propale->lignes[$i]->special_code == 3) - { - // Ligne produit en option - $pdf->MultiCell(26, 4, $outputlangs->transnoentities("Option"), 0, 'R', 0); - } - else - { - $total = price($propale->lignes[$i]->total_ht); - $pdf->MultiCell(26, 4, $total, 0, 'R', 0); - } - - // Collecte des totaux par valeur de tva dans $this->tva["taux"]=total_tva - $tvaligne=$propale->lignes[$i]->total_tva; - $localtax1ligne=$propale->lignes[$i]->total_localtax1; - $localtax2ligne=$propale->lignes[$i]->total_localtax2; - - if ($propale->remise_percent) $tvaligne-=($tvaligne*$propale->remise_percent)/100; - if ($propale->remise_percent) $localtax1ligne-=($localtax1ligne*$propale->remise_percent)/100; - if ($propale->remise_percent) $localtax2ligne-=($localtax2ligne*$propale->remise_percent)/100; - - $vatrate=(string) $propale->lignes[$i]->tva_tx; - $localtax1rate=(string) $propale->lignes[$i]->localtax1_tx; - $localtax2rate=(string) $propale->lignes[$i]->localtax2_tx; - - if (($propale->lignes[$i]->info_bits & 0x01) == 0x01) $vatrate.='*'; - - $this->tva[$vatrate] += $tvaligne; - $this->localtax1[$localtax1rate]+=$localtax1ligne; - $this->localtax2[$localtax2rate]+=$localtax2ligne; - - $nexY+=2; // Passe espace entre les lignes - - // Cherche nombre de lignes a venir pour savoir si place suffisante - if ($i < ($nblignes - 1)) // If it's not last line - { - //on recupere la description du produit suivant - $follow_descproduitservice = $propale->lignes[$i+1]->desc; - //on compte le nombre de ligne afin de verifier la place disponible (largeur de ligne 52 caracteres) - $nblineFollowDesc = (dol_nboflines_bis($follow_descproduitservice,52,$outputlangs->charset_output)*4); - } - else // If it's last line - { - $nblineFollowDesc = 0; - } - - // Test if a new page is required - if ($pagenb == 1) - { - $tab_top_in_current_page=$tab_top; - $tab_height_in_current_page=$tab_height; - } - else - { - $tab_top_in_current_page=$tab_top_newpage; - $tab_height_in_current_page=$tab_height_newpage; - } - if (($nexY+$nblineFollowDesc) > ($tab_top_in_current_page+$tab_height_in_current_page) && $i < ($nblignes - 1)) - { - if ($pagenb == 1) - { - $this->_tableau($pdf, $tab_top, $tab_height + 20, $nexY, $outputlangs); - } - else - { - $this->_tableau($pdf, $tab_top_newpage, $tab_height_newpage, $nexY, $outputlangs); - } - - $this->_pagefoot($pdf,$propale,$outputlangs); - - // New page - $pdf->AddPage(); - $pagenb++; - $this->_pagehead($pdf, $propale, 0, $outputlangs); - $pdf->SetFont('Arial','', 9); - $pdf->MultiCell(0, 4, '', 0, 'J'); // Set interline to 3 - $pdf->SetTextColor(0,0,0); - - $nexY = $tab_top_newpage + 7; - } - - } - - // Show square - if ($pagenb == 1) - { - $this->_tableau($pdf, $tab_top, $tab_height, $nexY, $outputlangs); - $bottomlasttab=$tab_top + $tab_height + 1; - } - else - { - $this->_tableau($pdf, $tab_top_newpage, $tab_height_newpage, $nexY, $outputlangs); - $bottomlasttab=$tab_top_newpage + $tab_height_newpage + 1; - } - - // Affiche zone infos - $posy=$this->_tableau_info($pdf, $propale, $bottomlasttab, $outputlangs); - - // Affiche zone totaux - $posy=$this->_tableau_tot($pdf, $propale, $deja_regle, $bottomlasttab, $outputlangs); - - // Affiche zone versements - if ($deja_regle) - { - $posy=$this->_tableau_versements($pdf, $propale, $posy, $outputlangs); - } - - // Pied de page - $this->_pagefoot($pdf,$propale,$outputlangs); - $pdf->AliasNbPages(); - - $pdf->Close(); - - $pdf->Output($file); - if (! empty($conf->global->MAIN_UMASK)) - @chmod($file, octdec($conf->global->MAIN_UMASK)); - - // Add external file - //$pdfConcat = new concat_pdf(); - //$pdfConcat->setFiles(array($file, DOL_DOCUMENT_ROOT."/includes/modules/propale/morefile.pdf")); - //$pdfConcat->concat(); - //$pdf->AliasNbPages(); - //$pdfConcat->Output($file); - - $outputlangs->charset_output=$sav_charset_output; - return 1; // Pas d'erreur - } - else - { - $this->error=$langs->trans("ErrorCanNotCreateDir",$dir); - return 0; - } - } - else - { - $this->error=$langs->trans("ErrorConstantNotDefined","PROP_OUTPUTDIR"); - return 0; - } - - $this->error=$langs->trans("ErrorUnknown"); - return 0; // Erreur par defaut - } - - /* - * \brief Affiche tableau des versement - * \param pdf Objet PDF - * \param object Objet propale - */ - function _tableau_versements(&$pdf, $object, $posy, $outputlangs) - { - - } - - - /** - * \brief Affiche infos divers - * \param pdf Objet PDF - * \param object Objet facture - * \param posy Position depart - * \param outputlangs Objet langs - * \return y Position pour suite - */ - function _tableau_info(&$pdf, $object, $posy, $outputlangs) - { - global $conf; - - $pdf->SetFont('Arial','', 9); - - // If France, show VAT mention if not applicable - if ($this->emetteur->pays_code == 'FR' && $this->franchise == 1) - { - $pdf->SetFont('Arial','B',8); - $pdf->SetXY($this->marge_gauche, $posy); - $pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedForInvoice"), 0, 'L', 0); - - $posy=$pdf->GetY()+4; - } - - // Show payments conditions - if ($object->type != 2 && ($object->cond_reglement_code || $object->cond_reglement)) - { - $pdf->SetFont('Arial','B',8); - $pdf->SetXY($this->marge_gauche, $posy); - $titre = $outputlangs->transnoentities("PaymentConditions").':'; - $pdf->MultiCell(80, 4, $titre, 0, 'L'); - - $pdf->SetFont('Arial','',8); - $pdf->SetXY(50, $posy); - $lib_condition_paiement=$outputlangs->transnoentities("PaymentCondition".$object->cond_reglement_code)!=('PaymentCondition'.$object->cond_reglement_code)?$outputlangs->transnoentities("PaymentCondition".$object->cond_reglement_code):$outputlangs->convToOutputCharset($object->cond_reglement_doc); - $lib_condition_paiement=str_replace('\n',"\n",$lib_condition_paiement); - $pdf->MultiCell(80, 4, $lib_condition_paiement,0,'L'); - - $posy=$pdf->GetY()+3; - } - - - if ($object->type != 2) - { - // Check a payment mode is defined - if (empty($object->mode_reglement_code) - && ! $conf->global->FACTURE_CHQ_NUMBER - && ! $conf->global->FACTURE_RIB_NUMBER) - { - $pdf->SetXY($this->marge_gauche, $posy); - $pdf->SetTextColor(200,0,0); - $pdf->SetFont('Arial','B',8); - $pdf->MultiCell(90, 3, $outputlangs->transnoentities("ErrorNoPaiementModeConfigured"),0,'L',0); - $pdf->SetTextColor(0,0,0); - - $posy=$pdf->GetY()+1; - } - - // Sown payment mode - if ($object->mode_reglement_code - && $object->mode_reglement_code != 'CHQ' - && $object->mode_reglement_code != 'VIR') - { - $pdf->SetFont('Arial','B',8); - $pdf->SetXY($this->marge_gauche, $posy); - $titre = $outputlangs->transnoentities("PaymentMode").':'; - $pdf->MultiCell(80, 5, $titre, 0, 'L'); - $pdf->SetFont('Arial','',8); - $pdf->SetXY(50, $posy); - $lib_mode_reg=$outputlangs->transnoentities("PaymentType".$object->mode_reglement_code)!=('PaymentType'.$object->mode_reglement_code)?$outputlangs->transnoentities("PaymentType".$object->mode_reglement_code):$outputlangs->convToOutputCharset($object->mode_reglement); - $pdf->MultiCell(80, 5, $lib_mode_reg,0,'L'); - - $posy=$pdf->GetY()+2; - } - - // Show payment mode CHQ - if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'CHQ') - { - // Si mode reglement non force ou si force a CHQ - if ($conf->global->FACTURE_CHQ_NUMBER) - { - if ($conf->global->FACTURE_CHQ_NUMBER > 0) - { - $account = new Account($this->db); - $account->fetch($conf->global->FACTURE_CHQ_NUMBER); - - $pdf->SetXY($this->marge_gauche, $posy); - $pdf->SetFont('Arial','B',8); - $pdf->MultiCell(90, 3, $outputlangs->transnoentities('PaymentByChequeOrderedTo',$account->proprio).':',0,'L',0); - $posy=$pdf->GetY()+1; - - $pdf->SetXY($this->marge_gauche, $posy); - $pdf->SetFont('Arial','',8); - $pdf->MultiCell(80, 3, $outputlangs->convToOutputCharset($account->adresse_proprio), 0, 'L', 0); - $posy=$pdf->GetY()+2; - } - if ($conf->global->FACTURE_CHQ_NUMBER == -1) - { - $pdf->SetXY($this->marge_gauche, $posy); - $pdf->SetFont('Arial','B',8); - $pdf->MultiCell(90, 3, $outputlangs->transnoentities('PaymentByChequeOrderedToShort').' '.$outputlangs->convToOutputCharset($this->emetteur->nom).' '.$outputlangs->transnoentities('SendTo').':',0,'L',0); - $posy=$pdf->GetY()+1; - - $pdf->SetXY($this->marge_gauche, $posy); - $pdf->SetFont('Arial','',8); - $pdf->MultiCell(80, 3, $outputlangs->convToOutputCharset($this->emetteur->getFullAddress()), 0, 'L', 0); - $posy=$pdf->GetY()+2; - } - } - } - - // If payment mode not forced or forced to VIR, show payment with BAN - if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'VIR') - { - if (! empty($conf->global->FACTURE_RIB_NUMBER)) - { - $account = new Account($this->db); - $account->fetch($conf->global->FACTURE_RIB_NUMBER); - - $curx=$this->marge_gauche; - $cury=$posy; - - $posy=pdf_bank($pdf,$outputlangs,$curx,$cury,$account); - - $posy+=2; - } - } - } - - return $posy; - } - - - /* - * \brief Affiche le total a payer - * \param pdf Objet PDF - * \param object Objet propale - * \param deja_regle Montant deja regle - * \param posy Position depart - * \param outputlangs Objet langs - * \return y Position pour suite - */ - function _tableau_tot(&$pdf, $object, $deja_regle, $posy, $outputlangs) - { - global $conf; - - $tab2_top = $posy; - $tab2_hl = 5; - $tab2_height = $tab2_hl * 4; - $pdf->SetFont('Arial','', 9); - - // Tableau total - $lltot = 200; $col1x = 120; $col2x = 170; $largcol2 = $lltot - $col2x; - - // Total HT - $pdf->SetFillColor(255,255,255); - $pdf->SetXY ($col1x, $tab2_top + 0); - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalHT"), 0, 'L', 1); - - $pdf->SetXY ($col2x, $tab2_top + 0); - $pdf->MultiCell($largcol2, $tab2_hl, price($object->total_ht + $object->remise), 0, 'R', 1); - - $index = 0; - - // Show VAT by rates and total - $pdf->SetFillColor(248,248,248); - - $this->atleastoneratenotnull=0; - if (empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT)) - { - foreach( $this->tva as $tvakey => $tvaval ) - { - if ($tvakey>0) // On affiche pas taux 0 - { - $this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY ($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/',$tvakey)) - { - $tvakey=str_replace('*','',$tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat =$outputlangs->transnoentities("TotalVAT").' '; - $totalvat.=vatrate($tvakey,1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval), 0, 'R', 1); - - } - } - - if (! $this->atleastoneratenotnull) // If not vat at all - { - $index++; - $pdf->SetXY ($col1x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalVAT"), 0, 'L', 1); - - $pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($object->total_tva), 0, 'R', 1); - - // Total LocalTax1 - if ($conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on' && $object->total_localtax1>0) - { - $index++; - $pdf->SetXY ($col1x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalLT1ES"), $useborder, 'L', 1); - $pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($object->total_localtax1), $useborder, 'R', 1); - } - - // Total LocalTax2 - if ($conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax2on' && $object->total_localtax2>0) - { - $index++; - $pdf->SetXY ($col1x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalLT2ES"), $useborder, 'L', 1); - $pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($object->total_localtax2), $useborder, 'R', 1); - } - } - else - { - //Local tax 1 - foreach( $this->localtax1 as $tvakey => $tvaval ) - { - if ($tvakey>0) // On affiche pas taux 0 - { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY ($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/',$tvakey)) - { - $tvakey=str_replace('*','',$tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat =$outputlangs->transnoentities("TotalLT1ES").' '; - $totalvat.=vatrate($tvakey,1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval), 0, 'R', 1); - } - } - - //Local tax 2 - foreach( $this->localtax2 as $tvakey => $tvaval ) - { - if ($tvakey>0) // On affiche pas taux 0 - { - //$this->atleastoneratenotnull++; - - $index++; - $pdf->SetXY ($col1x, $tab2_top + $tab2_hl * $index); - - $tvacompl=''; - if (preg_match('/\*/',$tvakey)) - { - $tvakey=str_replace('*','',$tvakey); - $tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")"; - } - $totalvat =$outputlangs->transnoentities("TotalLT2ES").' '; - $totalvat.=vatrate($tvakey,1).$tvacompl; - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); - - $pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($tvaval), 0, 'R', 1); - - } - } - } - } - - $useborder=0; - - // Total TTC - if (empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT)) - { - $index++; - $pdf->SetXY ($col1x, $tab2_top + $tab2_hl * $index); - $pdf->SetTextColor(0,0,60); - $pdf->SetFillColor(224,224,224); - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalTTC"), $useborder, 'L', 1); - - $pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($object->total_ttc), $useborder, 'R', 1); - $pdf->SetTextColor(0,0,0); - } - - if ($deja_regle > 0) - { - $index++; - - $pdf->SetXY ($col1x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("AlreadyPaid"), 0, 'L', 0); - - $pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($deja_regle), 0, 'R', 0); - - $resteapayer = $object->total_ttc - $deja_regle; - if ($object->paye) $resteapayer=0; - - if ($object->close_code == 'discount_vat') - { - $index++; - $pdf->SetFillColor(255,255,255); - - $pdf->SetXY ($col1x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("EscompteOffered"), $useborder, 'L', 1); - - $pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($object->total_ttc - $deja_regle), $useborder, 'R', 1); - - $resteapayer=0; - } - - $index++; - $pdf->SetTextColor(0,0,60); - $pdf->SetFillColor(224,224,224); - $pdf->SetXY ($col1x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("RemainderToPay"), $useborder, 'L', 1); - - $pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($resteapayer), $useborder, 'R', 1); - - // Fin - $pdf->SetFont('Arial','', 9); - $pdf->SetTextColor(0,0,0); - } - - $index++; - return ($tab2_top + ($tab2_hl * $index)); - } - - /** - * \brief Affiche la grille des lignes de propales - * \param pdf objet PDF - */ - function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs) - { - global $conf; - - // Montants exprimes en (en tab_top - 1) - $pdf->SetTextColor(0,0,0); - $pdf->SetFont('Arial','',8); - $titre = $outputlangs->transnoentities("AmountInCurrency",$outputlangs->transnoentitiesnoconv("Currency".$conf->monnaie)); - $pdf->Text($this->page_largeur - $this->marge_droite - $pdf->GetStringWidth($titre), $tab_top-1, $titre); - - $pdf->SetDrawColor(128,128,128); - - // Rect prend une longueur en 3eme param - $pdf->Rect($this->marge_gauche, $tab_top, $this->page_largeur-$this->marge_gauche-$this->marge_droite, $tab_height); - // line prend une position y en 3eme param - $pdf->line($this->marge_gauche, $tab_top+5, $this->page_largeur-$this->marge_droite, $tab_top+5); - - $pdf->SetFont('Arial','',9); - - $pdf->SetXY ($this->posxdesc-1, $tab_top+2); - $pdf->MultiCell(108,2, $outputlangs->transnoentities("Designation"),'','L'); - - if (empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT)) - { - $pdf->line($this->posxtva-1, $tab_top, $this->posxtva-1, $tab_top + $tab_height); - $pdf->SetXY ($this->posxtva-1, $tab_top+2); - $pdf->MultiCell($this->posxup-$this->posxtva-1,2, $outputlangs->transnoentities("VAT"),'','C'); - } - - $pdf->line($this->posxup-1, $tab_top, $this->posxup-1, $tab_top + $tab_height); - $pdf->SetXY ($this->posxup-1, $tab_top+2); - $pdf->MultiCell(18,2, $outputlangs->transnoentities("PriceUHT"),'','C'); - - $pdf->line($this->posxqty-1, $tab_top, $this->posxqty-1, $tab_top + $tab_height); - $pdf->SetXY ($this->posxqty-1, $tab_top+2); - $pdf->MultiCell($this->posxdiscount-$this->posxqty-1,2, $outputlangs->transnoentities("Qty"),'','C'); - - $pdf->line($this->posxdiscount-1, $tab_top, $this->posxdiscount-1, $tab_top + $tab_height); - if ($this->atleastonediscount) - { - $pdf->SetXY ($this->posxdiscount-1, $tab_top+2); - $pdf->MultiCell(14,2, $outputlangs->transnoentities("ReductionShort"),'','C'); - } - - if ($this->atleastonediscount) - { - $pdf->line($this->postotalht, $tab_top, $this->postotalht, $tab_top + $tab_height); - } - $pdf->SetXY ($this->postotalht-1, $tab_top+2); - $pdf->MultiCell(28,2, $outputlangs->transnoentities("TotalHT"),'','C'); - - } - - /* - * \brief Affiche en-tete propale - * \param pdf Objet PDF - * \param object Objet propale - * \param showaddress 0=no, 1=yes - * \param outputlang Objet lang cible - */ - function _pagehead(&$pdf, $object, $showaddress=1, $outputlangs) - { - global $conf,$langs; - - $outputlangs->load("main"); - $outputlangs->load("bills"); - $outputlangs->load("propal"); - $outputlangs->load("companies"); - - pdf_pagehead($pdf,$outputlangs,$pdf->page_hauteur); - - //Affiche le filigrane brouillon - Print Draft Watermark - if($object->statut==0 && (! empty($conf->global->PROPALE_DRAFT_WATERMARK)) ) - { - $watermark_angle=atan($this->page_hauteur/$this->page_largeur); - $watermark_x=5; - $watermark_y=$this->page_hauteur-25; //Set to $this->page_hauteur-50 or less if problems - $watermark_width=$this->page_hauteur; - $pdf->SetFont('Arial','B',50); - $pdf->SetTextColor(255,192,203); - //rotate - $pdf->_out(sprintf('q %.5F %.5F %.5F %.5F %.2F %.2F cm 1 0 0 1 %.2F %.2F cm',cos($watermark_angle),sin($watermark_angle),-sin($watermark_angle),cos($watermark_angle),$watermark_x*$pdf->k,($pdf->h-$watermark_y)*$pdf->k,-$watermark_x*$pdf->k,-($pdf->h-$watermark_y)*$pdf->k)); - //print watermark - $pdf->SetXY($watermark_x,$watermark_y); - $pdf->Cell($watermark_width,25,$outputlangs->convToOutputCharset($conf->global->PROPALE_DRAFT_WATERMARK),0,2,"C",0); - //antirotate - $pdf->_out('Q'); - } - - //Prepare la suite - $pdf->SetTextColor(0,0,60); - $pdf->SetFont('Arial','B',13); - - $posy=$this->marge_haute; - - $pdf->SetXY($this->marge_gauche,$posy); - - // Logo - $logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo; - if ($this->emetteur->logo) - { - if (is_readable($logo)) - { - $pdf->Image($logo, $this->marge_gauche, $posy, 0, 24); - } - else - { - $pdf->SetTextColor(200,0,0); - $pdf->SetFont('Arial','B',8); - $pdf->MultiCell(100, 3, $outputlangs->transnoentities("ErrorLogoFileNotFound",$logo), 0, 'L'); - $pdf->MultiCell(100, 3, $outputlangs->transnoentities("ErrorGoToGlobalSetup"), 0, 'L'); - } - } - else - { - $text=$this->emetteur->nom; - $pdf->MultiCell(100, 4, $outputlangs->convToOutputCharset($text), 0, 'L'); - } - - $pdf->SetFont('Arial','B',13); - $pdf->SetXY(100,$posy); - $pdf->SetTextColor(0,0,60); - $title=$outputlangs->transnoentities("CommercialProposal"); - $pdf->MultiCell(100, 4, $title, '' , 'R'); - - $pdf->SetFont('Arial','B',12); - - $posy+=6; - $pdf->SetXY(100,$posy); - $pdf->SetTextColor(0,0,60); - $pdf->MultiCell(100, 4, $outputlangs->transnoentities("Ref")." : " . $outputlangs->convToOutputCharset($object->ref), '', 'R'); - - $posy+=1; - $pdf->SetFont('Arial','',10); - - if ($object->ref_client) - { - $posy+=5; - $pdf->SetXY(100,$posy); - $pdf->SetTextColor(0,0,60); - $pdf->MultiCell(100, 3, $outputlangs->transnoentities("RefCustomer")." : " . $outputlangs->convToOutputCharset($object->ref_client), '', 'R'); - } - - $posy+=5; - $pdf->SetXY(100,$posy); - $pdf->SetTextColor(0,0,60); - $pdf->MultiCell(100, 3, $outputlangs->transnoentities("Date")." : " . dol_print_date($object->date,"day",false,$outputlangs,true), '', 'R'); - - $posy+=5; - $pdf->SetXY(100,$posy); - $pdf->SetTextColor(0,0,60); - $pdf->MultiCell(100, 3, $outputlangs->transnoentities("DateEndPropal")." : " . dol_print_date($object->fin_validite,"day",false,$outputlangs,true), '', 'R'); - - if ($object->client->code_client) - { - $posy+=5; - $pdf->SetXY(100,$posy); - $pdf->SetTextColor(0,0,60); - $pdf->MultiCell(100, 3, $outputlangs->transnoentities("CustomerCode")." : " . $outputlangs->transnoentities($object->client->code_client), '', 'R'); - } - - if ($showaddress) - { - // Sender properties - $carac_emetteur=''; - // Add internal contact of proposal if defined - $arrayidcontact=$object->getIdContact('internal','SALESREPFOLL'); - if (sizeof($arrayidcontact) > 0) - { - $object->fetch_user($arrayidcontact[0]); - $carac_emetteur .= ($carac_emetteur ? "\n" : '' ).$outputlangs->transnoentities("Name").": ".$outputlangs->convToOutputCharset($object->user->getFullName($outputlangs)); - } - - $carac_emetteur .= pdf_build_address($outputlangs,$this->emetteur); - - // Show sender - $posx=$this->marge_gauche; - $posy=42; - $hautcadre=40; - if (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) $posx=118; - - // Show sender frame - $pdf->SetTextColor(0,0,0); - $pdf->SetFont('Arial','',8); - $pdf->SetXY($posx,$posy-5); - $pdf->MultiCell(66,5, $outputlangs->transnoentities("BillFrom").":"); - $pdf->SetXY($posx,$posy); - $pdf->SetFillColor(230,230,230); - $pdf->MultiCell(82, $hautcadre, "", 0, 'R', 1); - - // Show sender name - $pdf->SetXY($posx+2,$posy+3); - $pdf->SetTextColor(0,0,60); - $pdf->SetFont('Arial','B',11); - $pdf->MultiCell(80, 3, $outputlangs->convToOutputCharset($this->emetteur->nom), 0, 'L'); - - // Show sender information - $pdf->SetFont('Arial','',9); - $pdf->SetXY($posx+2,$posy+8); - $pdf->MultiCell(80, 4, $carac_emetteur); - - - // If CUSTOMER contact defined, we use it - $usecontact=false; - $arrayidcontact=$object->getIdContact('external','CUSTOMER'); - if (sizeof($arrayidcontact) > 0) - { - $usecontact=true; - $result=$object->fetch_contact($arrayidcontact[0]); - } - - // Recipient name - if (! empty($usecontact)) - { - // On peut utiliser le nom de la societe du contact - if ($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT) $socname = $object->contact->socname; - else $socname = $object->client->nom; - $carac_client_name=$outputlangs->convToOutputCharset($socname); - } - else - { - $carac_client_name=$outputlangs->convToOutputCharset($object->client->nom); - } - - $carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->client,$object->contact,$usecontact,'target'); - - // Show recipient - $posy=42; - $posx=100; - if (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) $posx=$this->marge_gauche; - - // Show recipient frame - $pdf->SetTextColor(0,0,0); - $pdf->SetFont('Arial','',8); - $pdf->SetXY($posx,$posy-5); - $pdf->MultiCell(80, 4, $outputlangs->transnoentities("BillTo").":"); - $pdf->rect($posx, $posy, 100, $hautcadre); - $pdf->SetTextColor(0,0,0); - - // Show recipient name - $pdf->SetXY($posx+2,$posy+3); - $pdf->SetFont('Arial','B',11); -//print $carac_client;exit; - $pdf->MultiCell(96,4, $carac_client_name, 0, 'L'); - - // Show recipient information - $pdf->SetFont('Arial','',9); - $posy=$pdf->GetY()-9; //Auto Y coord readjust for multiline name - $pdf->SetXY($posx+2,$posy+6); - $pdf->MultiCell(86,4, $carac_client); - } - } - - /** - * \brief Show footer of page - * \param pdf PDF factory - * \param object Object invoice - * \param outputlangs Object lang for output - * \remarks Need this->emetteur object - */ - function _pagefoot(&$pdf,$object,$outputlangs) - { - return pdf_pagefoot($pdf,$outputlangs,'PROPALE_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object); - } - -} - -?>