Gestion d'affichage de specimen sur propale

This commit is contained in:
Laurent Destailleur 2006-06-12 21:33:18 +00:00
parent 8d8add0018
commit 4aeb30dd08
6 changed files with 1106 additions and 1060 deletions

View File

@ -1,25 +1,25 @@
<?php <?php
/* Copyright (C) 2004 Laurent Destailleur <eldy@users.sourceforge.net> /* Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.net>
/* Copyright (C) 2005 Sylvain SCATTOLINI <sylvain@s-infoservices.com> * Copyright (C) 2005 Sylvain SCATTOLINI <sylvain@s-infoservices.com>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* or see http://www.gnu.org/ * or see http://www.gnu.org/
* *
* $Id$ * $Id$
* $Source$ * $Source$
*/ */
/** /**
\file htdocs/includes/modules/facture/pdf_oursin.modules.php \file htdocs/includes/modules/facture/pdf_oursin.modules.php

View File

@ -108,373 +108,382 @@ class pdf_propale_azur extends ModelePDFPropales
return $this->error; return $this->error;
} }
/** /**
\brief Fonction générant la propale sur le disque \brief Fonction générant la propale sur le disque
\param id Id de la propale à générer \param propale Objet propal
\return int 1=ok, 0=ko \return int 1=ok, 0=ko
\remarks Variables utilisées \remarks Variables utilisées
\remarks MAIN_INFO_SOCIETE_NOM \remarks MAIN_INFO_SOCIETE_NOM
\remarks MAIN_INFO_SOCIETE_ADRESSE \remarks MAIN_INFO_SOCIETE_ADRESSE
\remarks MAIN_INFO_SOCIETE_CP \remarks MAIN_INFO_SOCIETE_CP
\remarks MAIN_INFO_SOCIETE_VILLE \remarks MAIN_INFO_SOCIETE_VILLE
\remarks MAIN_INFO_SOCIETE_TEL \remarks MAIN_INFO_SOCIETE_TEL
\remarks MAIN_INFO_SOCIETE_FAX \remarks MAIN_INFO_SOCIETE_FAX
\remarks MAIN_INFO_SOCIETE_WEB \remarks MAIN_INFO_SOCIETE_WEB
\remarks MAIN_INFO_SOCIETE_LOGO \remarks MAIN_INFO_SOCIETE_LOGO
\remarks MAIN_INFO_SIRET \remarks MAIN_INFO_SIRET
\remarks MAIN_INFO_SIREN \remarks MAIN_INFO_SIREN
\remarks MAIN_INFO_RCS \remarks MAIN_INFO_RCS
\remarks MAIN_INFO_CAPITAL \remarks MAIN_INFO_CAPITAL
\remarks MAIN_INFO_TVAINTRA \remarks MAIN_INFO_TVAINTRA
*/ */
function write_pdf_file($id) function write_pdf_file($propale)
{ {
global $user,$langs,$conf; global $user,$conf,$langs;
$langs->load("main"); if ($conf->propal->dir_output)
$langs->load("bills"); {
$langs->load("products"); // Définition de l'objet $propale (pour compatibilite ascendante)
$langs->load("propal"); if (! is_object($propale))
{
if ($conf->propal->dir_output) $id = $propale;
{ $propale = new Propal($this->db,"",$id);
$prop = new Propal($this->db,"",$id); $ret=$propale->fetch($id);
$ret=$prop->fetch($id); }
$nblignes = sizeof($prop->lignes);
// Définition de $dir et $file
$propref = sanitize_string($prop->ref); if ($propale->specimen)
$dir = $conf->propal->dir_output . "/" . $propref; {
$file = $dir . "/" . $propref . ".pdf"; $dir = $conf->propal->dir_output;
$file = $dir . "/SPECIMEN.pdf";
if (! file_exists($dir)) }
{ else
if (create_exdir($dir) < 0) {
{ $propref = sanitize_string($propale->ref);
$this->error=$langs->trans("ErrorCanNotCreateDir",$dir); $dir = $conf->propal->dir_output . "/" . $propref;
return 0; $file = $dir . "/" . $propref . ".pdf";
} }
}
if (! file_exists($dir))
if (file_exists($dir)) {
{ if (create_exdir($dir) < 0)
// Initialisation document vierge {
$pdf=new FPDF('P','mm',$this->format); $this->error=$langs->trans("ErrorCanNotCreateDir",$dir);
$pdf->Open(); return 0;
$pdf->AddPage(); }
}
$pdf->SetDrawColor(128,128,128);
if (file_exists($dir))
$pdf->SetTitle($prop->ref); {
$pdf->SetSubject($langs->trans("Bill")); // Initialisation document vierge
$pdf->SetCreator("Dolibarr ".DOL_VERSION); $pdf=new FPDF('P','mm',$this->format);
$pdf->SetAuthor($user->fullname); $pdf->Open();
$pdf->AddPage();
$pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite); // Left, Top, Right
$pdf->SetAutoPageBreak(1,0); $pdf->SetDrawColor(128,128,128);
// Positionne $this->atleastonediscount si on a au moins une remise $pdf->SetTitle($propale->ref);
for ($i = 0 ; $i < $nblignes ; $i++) $pdf->SetSubject($langs->trans("Bill"));
{ $pdf->SetCreator("Dolibarr ".DOL_VERSION);
if ($prop->lignes[$i]->remise_percent) $pdf->SetAuthor($user->fullname);
{
$this->atleastonediscount++; $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
$this->_pagehead($pdf, $prop); for ($i = 0 ; $i < $nblignes ; $i++)
{
if ($propale->lignes[$i]->remise_percent)
{
$this->atleastonediscount++;
}
}
$this->_pagehead($pdf, $propale);
// Affiches lignes // Affiches lignes
$pagenb = 1; $pagenb = 1;
$tab_top = 90; $tab_top = 90;
$tab_top_newpage = 50; $tab_top_newpage = 50;
$tab_height = 110; $tab_height = 110;
// Affiche notes // Affiche notes
if ($prop->note_public) if ($propale->note_public)
{ {
$tab_top = 88; $tab_top = 88;
$pdf->SetFont('Arial','', 9); // Dans boucle pour gérer multi-page $pdf->SetFont('Arial','', 9); // Dans boucle pour gérer multi-page
$pdf->SetXY ($this->posxdesc-1, $tab_top); $pdf->SetXY ($this->posxdesc-1, $tab_top);
$pdf->MultiCell(190, 3, $prop->note_public, 0, 'J'); $pdf->MultiCell(190, 3, $propale->note_public, 0, 'J');
$nexY = $pdf->GetY(); $nexY = $pdf->GetY();
$height_note=$nexY-$tab_top; $height_note=$nexY-$tab_top;
// Rect prend une longueur en 3eme param // Rect prend une longueur en 3eme param
$pdf->SetDrawColor(192,192,192); $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); $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_height = $tab_height - $height_note;
$tab_top = $nexY+6; $tab_top = $nexY+6;
}
else
{
$height_note=0;
} }
else
$iniY = $tab_top + 8; {
$curY = $tab_top + 8; $height_note=0;
$nexY = $tab_top + 8; }
// Boucle sur les lignes $iniY = $tab_top + 8;
for ($i = 0 ; $i < $nblignes ; $i++) $curY = $tab_top + 8;
{ $nexY = $tab_top + 8;
$curY = $nexY;
// Boucle sur les lignes
// Description de la ligne produit for ($i = 0 ; $i < $nblignes ; $i++)
$libelleproduitservice=$prop->lignes[$i]->libelle; {
if ($prop->lignes[$i]->desc&&$prop->lignes[$i]->desc!=$prop->lignes[$i]->libelle) $curY = $nexY;
{
if ($libelleproduitservice) $libelleproduitservice.="\n"; // Description de la ligne produit
$libelleproduitservice.=$prop->lignes[$i]->desc; $libelleproduitservice=$propale->lignes[$i]->libelle;
} if ($propale->lignes[$i]->desc&&$propale->lignes[$i]->desc!=$propale->lignes[$i]->libelle)
// Si ligne associée à un code produit {
if ($prop->lignes[$i]->product_id) if ($libelleproduitservice) $libelleproduitservice.="\n";
{ $libelleproduitservice.=$propale->lignes[$i]->desc;
$prodser = new Product($this->db); }
// Si ligne associée à un code produit
$prodser->fetch($prop->lignes[$i]->product_id); if ($propale->lignes[$i]->product_id)
if ($prodser->ref) {
{ $prodser = new Product($this->db);
$prefix_prodserv = "";
if($prodser->type == 0) $prodser->fetch($propale->lignes[$i]->product_id);
$prefix_prodserv = $langs->trans("Product")." "; if ($prodser->ref)
if($prodser->type == 1) {
$prefix_prodserv = $langs->trans("Service")." "; $prefix_prodserv = "";
if($prodser->type == 0)
$libelleproduitservice=$prefix_prodserv.$prodser->ref." - ".$libelleproduitservice; $prefix_prodserv = $langs->trans("Product")." ";
} if($prodser->type == 1)
$prefix_prodserv = $langs->trans("Service")." ";
// Ajoute description du produit
if ($conf->global->PROP_ADD_PROD_DESC && !$conf->global->PRODUIT_CHANGE_PROD_DESC) $libelleproduitservice=$prefix_prodserv.$prodser->ref." - ".$libelleproduitservice;
{ }
if ($prop->lignes[$i]->product_desc&&$prop->lignes[$i]->product_desc!=$fac->lignes[$i]->libelle&&$prop->lignes[$i]->product_desc!=$prop->lignes[$i]->desc)
{ // Ajoute description du produit
if ($libelleproduitservice) $libelleproduitservice.="\n"; if ($conf->global->PROP_ADD_PROD_DESC && !$conf->global->PRODUIT_CHANGE_PROD_DESC)
$libelleproduitservice.=$prop->lignes[$i]->product_desc; {
} if ($propale->lignes[$i]->product_desc&&$propale->lignes[$i]->product_desc!=$propale->lignes[$i]->libelle&&$propale->lignes[$i]->product_desc!=$propale->lignes[$i]->desc)
} {
} if ($libelleproduitservice) $libelleproduitservice.="\n";
if ($prop->lignes[$i]->date_start && $prop->lignes[$i]->date_end) $libelleproduitservice.=$propale->lignes[$i]->product_desc;
{ }
// Affichage durée si il y en a une }
$libelleproduitservice.="\n(".$langs->trans("From")." ".dolibarr_print_date($prop->lignes[$i]->date_start)." ".$langs->trans("to")." ".dolibarr_print_date($prop->lignes[$i]->date_end).")"; }
} if ($propale->lignes[$i]->date_start && $propale->lignes[$i]->date_end)
{
$pdf->SetFont('Arial','', 9); // Dans boucle pour gérer multi-page // Affichage durée si il y en a une
$libelleproduitservice.="\n(".$langs->trans("From")." ".dolibarr_print_date($propale->lignes[$i]->date_start)." ".$langs->trans("to")." ".dolibarr_print_date($propale->lignes[$i]->date_end).")";
$pdf->SetXY ($this->posxdesc-1, $curY); }
$pdf->MultiCell(108, 4, $libelleproduitservice, 0, 'J');
$pdf->SetFont('Arial','', 9); // Dans boucle pour gérer multi-page
$nexY = $pdf->GetY();
$pdf->SetXY ($this->posxdesc-1, $curY);
// TVA $pdf->MultiCell(108, 4, $libelleproduitservice, 0, 'J');
$pdf->SetXY ($this->posxtva, $curY);
$pdf->MultiCell(10, 4, ($prop->lignes[$i]->tva_tx < 0 ? '*':'').abs($prop->lignes[$i]->tva_tx), 0, 'R'); $nexY = $pdf->GetY();
// Prix unitaire HT avant remise // TVA
$pdf->SetXY ($this->posxup, $curY); $pdf->SetXY ($this->posxtva, $curY);
$pdf->MultiCell(18, 4, price($prop->lignes[$i]->subprice), 0, 'R', 0); $pdf->MultiCell(10, 4, ($propale->lignes[$i]->tva_tx < 0 ? '*':'').abs($propale->lignes[$i]->tva_tx), 0, 'R');
// Quantité // Prix unitaire HT avant remise
$pdf->SetXY ($this->posxqty, $curY); $pdf->SetXY ($this->posxup, $curY);
$pdf->MultiCell(10, 4, $prop->lignes[$i]->qty, 0, 'R'); $pdf->MultiCell(18, 4, price($propale->lignes[$i]->subprice), 0, 'R', 0);
// Remise sur ligne // Quantit
$pdf->SetXY ($this->posxdiscount, $curY); $pdf->SetXY ($this->posxqty, $curY);
if ($prop->lignes[$i]->remise_percent) $pdf->MultiCell(10, 4, $propale->lignes[$i]->qty, 0, 'R');
{
$pdf->MultiCell(14, 4, $prop->lignes[$i]->remise_percent."%", 0, 'R'); // Remise sur ligne
} $pdf->SetXY ($this->posxdiscount, $curY);
if ($propale->lignes[$i]->remise_percent)
// Total HT ligne {
$pdf->SetXY ($this->postotalht, $curY); $pdf->MultiCell(14, 4, $propale->lignes[$i]->remise_percent."%", 0, 'R');
$total = price($prop->lignes[$i]->price * $prop->lignes[$i]->qty); }
$pdf->MultiCell(23, 4, $total, 0, 'R', 0);
// Total HT ligne
// Collecte des totaux par valeur de tva $pdf->SetXY ($this->postotalht, $curY);
// dans le tableau tva["taux"]=total_tva $total = price($propale->lignes[$i]->price * $propale->lignes[$i]->qty);
$tvaligne=$prop->lignes[$i]->price * $prop->lignes[$i]->qty; $pdf->MultiCell(23, 4, $total, 0, 'R', 0);
if ($prop->remise_percent) $tvaligne-=($tvaligne*$prop->remise_percent)/100;
$this->tva[ (string)$prop->lignes[$i]->tva_tx ] += $tvaligne; // Collecte des totaux par valeur de tva
// dans le tableau tva["taux"]=total_tva
$nexY+=2; // Passe espace entre les lignes $tvaligne=$propale->lignes[$i]->price * $propale->lignes[$i]->qty;
if ($propale->remise_percent) $tvaligne-=($tvaligne*$propale->remise_percent)/100;
if ($nexY > 200 && $i < ($nblignes - 1)) $this->tva[ (string)$propale->lignes[$i]->tva_tx ] += $tvaligne;
{
//$this->_tableau($pdf, $tab_top, $tab_height + 20, $nexY); $nexY+=2; // Passe espace entre les lignes
if ($pagenb == 1)
$this->_tableau($pdf, $tab_top, $nexY - $tab_top + 20, $nexY); if ($nexY > 200 && $i < ($nblignes - 1))
else {
$this->_tableau($pdf, $tab_top_newpage, $nexY - $tab_top_newpage + 20, $nexY); //$this->_tableau($pdf, $tab_top, $tab_height + 20, $nexY);
$this->_pagefoot($pdf); if ($pagenb == 1)
$this->_tableau($pdf, $tab_top, $nexY - $tab_top + 20, $nexY);
// Nouvelle page else
$pdf->AddPage(); $this->_tableau($pdf, $tab_top_newpage, $nexY - $tab_top_newpage + 20, $nexY);
$pagenb++; $this->_pagefoot($pdf);
$this->_pagehead($pdf, $prop, 0);
// Nouvelle page
$nexY = $tab_top_newpage + 8; $pdf->AddPage();
$pdf->SetTextColor(0,0,0); $pagenb++;
$pdf->SetFont('Arial','', 10); $this->_pagehead($pdf, $propale, 0);
}
$nexY = $tab_top_newpage + 8;
} $pdf->SetTextColor(0,0,0);
// Affiche cadre tableau $pdf->SetFont('Arial','', 10);
if ($pagenb == 1) }
{
//$this->_tableau($pdf, $tab_top, $tab_height, $nexY); }
//$bottomlasttab=$tab_top + $tab_height + 1; // Affiche cadre tableau
if ($pagenb == 1)
$this->_tableau($pdf, $tab_top, $nexY - $tab_top + 20, $nexY); {
$bottomlasttab=$tab_top + $nexY - $tab_top + 20 + 1; //$this->_tableau($pdf, $tab_top, $tab_height, $nexY);
} //$bottomlasttab=$tab_top + $tab_height + 1;
else
{ $this->_tableau($pdf, $tab_top, $nexY - $tab_top + 20, $nexY);
//$this->_tableau($pdf, $tab_top_newpage, $tab_height, $nexY); $bottomlasttab=$tab_top + $nexY - $tab_top + 20 + 1;
//$bottomlasttab=$tab_top_newpage + $tab_height + 1; }
$this->_tableau($pdf, $tab_top_newpage, $nexY - $tab_top_newpage + 20, $nexY); else
$bottomlasttab=$tab_top_newpage + $nexY - $tab_top_newpage + 20 + 1; {
} //$this->_tableau($pdf, $tab_top_newpage, $tab_height, $nexY);
//$bottomlasttab=$tab_top_newpage + $tab_height + 1;
$this->_tableau($pdf, $tab_top_newpage, $nexY - $tab_top_newpage + 20, $nexY);
$bottomlasttab=$tab_top_newpage + $nexY - $tab_top_newpage + 20 + 1;
}
$deja_regle = ""; $deja_regle = "";
$posy=$this->_tableau_tot($pdf, $prop, $deja_regle, $bottomlasttab); $posy=$this->_tableau_tot($pdf, $propale, $deja_regle, $bottomlasttab);
if ($deja_regle) { if ($deja_regle) {
$this->_tableau_versements($pdf, $fac, $posy); $this->_tableau_versements($pdf, $fac, $posy);
}
/*
* Mode de règlement
*/
/*
if (! $conf->global->FACTURE_CHQ_NUMBER && ! $conf->global->FACTURE_RIB_NUMBER)
{
$pdf->SetXY ($this->marge_gauche, 228);
$pdf->SetTextColor(200,0,0);
$pdf->SetFont('Arial','B',8);
$pdf->MultiCell(90, 3, $langs->trans("ErrorNoPaiementModeConfigured"),0,'L',0);
$pdf->SetTextColor(0,0,0);
}
*/
/*
* Propose mode règlement par CHQ
*/
/*
if ($conf->global->FACTURE_CHQ_NUMBER)
{
if ($conf->global->FACTURE_CHQ_NUMBER > 0)
{
$account = new Account($this->db);
$account->fetch(FACTURE_CHQ_NUMBER);
$pdf->SetXY ($this->marge_gauche, 227);
$pdf->SetFont('Arial','B',8);
$pdf->MultiCell(90, 3, "Règlement par chèque à l'ordre de ".$account->proprio." envoyé à:",0,'L',0);
$pdf->SetXY ($this->marge_gauche, 231);
$pdf->SetFont('Arial','',8);
$pdf->MultiCell(80, 3, $account->adresse_proprio, 0, 'L', 0);
}
}
*/
/*
* Propose mode règlement par RIB
*/
/*
if ($conf->global->FACTURE_RIB_NUMBER)
{
if ($conf->global->FACTURE_RIB_NUMBER > 0)
{
$account = new Account($this->db);
$account->fetch(FACTURE_RIB_NUMBER);
$this->marges['g']=$this->marge_gauche;
$cury=242;
$pdf->SetXY ($this->marges['g'], $cury);
$pdf->SetFont('Arial','B',8);
$pdf->MultiCell(90, 3, "Règlement par virement sur le compte bancaire suivant:", 0, 'L', 0);
$cury+=4;
$pdf->SetFont('Arial','B',6);
$pdf->line($this->marges['g']+1, $cury, $this->marges['g']+1, $cury+10 );
$pdf->SetXY ($this->marges['g'], $cury);
$pdf->MultiCell(18, 3, "Code banque", 0, 'C', 0);
$pdf->line($this->marges['g']+18, $cury, $this->marges['g']+18, $cury+10 );
$pdf->SetXY ($this->marges['g']+18, $cury);
$pdf->MultiCell(18, 3, "Code guichet", 0, 'C', 0);
$pdf->line($this->marges['g']+36, $cury, $this->marges['g']+36, $cury+10 );
$pdf->SetXY ($this->marges['g']+36, $cury);
$pdf->MultiCell(24, 3, "Numéro compte", 0, 'C', 0);
$pdf->line($this->marges['g']+60, $cury, $this->marges['g']+60, $cury+10 );
$pdf->SetXY ($this->marges['g']+60, $cury);
$pdf->MultiCell(13, 3, "Clé RIB", 0, 'C', 0);
$pdf->line($this->marges['g']+73, $cury, $this->marges['g']+73, $cury+10 );
$pdf->SetFont('Arial','',8);
$pdf->SetXY ($this->marges['g'], $cury+5);
$pdf->MultiCell(18, 3, $account->code_banque, 0, 'C', 0);
$pdf->SetXY ($this->marges['g']+18, $cury+5);
$pdf->MultiCell(18, 3, $account->code_guichet, 0, 'C', 0);
$pdf->SetXY ($this->marges['g']+36, $cury+5);
$pdf->MultiCell(24, 3, $account->number, 0, 'C', 0);
$pdf->SetXY ($this->marges['g']+60, $cury+5);
$pdf->MultiCell(13, 3, $account->cle_rib, 0, 'C', 0);
$pdf->SetXY ($this->marges['g'], $cury+12);
$pdf->MultiCell(90, 3, "Domiciliation : " . $account->domiciliation, 0, 'L', 0);
$pdf->SetXY ($this->marges['g'], $cury+22);
$pdf->MultiCell(90, 3, "Prefix IBAN : " . $account->iban_prefix, 0, 'L', 0);
$pdf->SetXY ($this->marges['g'], $cury+25);
$pdf->MultiCell(90, 3, "BIC : " . $account->bic, 0, 'L', 0);
}
}
*/
/*
* Conditions de règlements
*/
if ($prop->cond_reglement_code)
{
$pdf->SetFont('Arial','B',8);
$pdf->SetXY($this->marge_gauche, 217);
$titre = $langs->trans("PaymentConditions").':';
$pdf->MultiCell(80, 5, $titre, 0, 'L');
$pdf->SetFont('Arial','',8);
$pdf->SetXY(50, 217);
$lib_condition_paiement=$langs->trans("PaymentCondition".$prop->cond_reglement_code)?$langs->trans("PaymentCondition".$prop->cond_reglement_code):$prop->cond_reglement;
$pdf->MultiCell(80, 5, $lib_condition_paiement,0,'L');
} }
/* /*
* Pied de page * Mode de règlement
*/ */
$this->_pagefoot($pdf); /*
$pdf->AliasNbPages(); if (! $conf->global->FACTURE_CHQ_NUMBER && ! $conf->global->FACTURE_RIB_NUMBER)
{
$pdf->Close(); $pdf->SetXY ($this->marge_gauche, 228);
$pdf->SetTextColor(200,0,0);
$pdf->SetFont('Arial','B',8);
$pdf->MultiCell(90, 3, $langs->trans("ErrorNoPaiementModeConfigured"),0,'L',0);
$pdf->SetTextColor(0,0,0);
}
*/
/*
* Propose mode règlement par CHQ
*/
/*
if ($conf->global->FACTURE_CHQ_NUMBER)
{
if ($conf->global->FACTURE_CHQ_NUMBER > 0)
{
$account = new Account($this->db);
$account->fetch(FACTURE_CHQ_NUMBER);
$pdf->SetXY ($this->marge_gauche, 227);
$pdf->SetFont('Arial','B',8);
$pdf->MultiCell(90, 3, "Règlement par chèque à l'ordre de ".$account->proprio." envoyé à:",0,'L',0);
$pdf->SetXY ($this->marge_gauche, 231);
$pdf->SetFont('Arial','',8);
$pdf->MultiCell(80, 3, $account->adresse_proprio, 0, 'L', 0);
}
}
*/
/*
* Propose mode règlement par RIB
*/
/*
if ($conf->global->FACTURE_RIB_NUMBER)
{
if ($conf->global->FACTURE_RIB_NUMBER > 0)
{
$account = new Account($this->db);
$account->fetch(FACTURE_RIB_NUMBER);
$this->marges['g']=$this->marge_gauche;
$cury=242;
$pdf->SetXY ($this->marges['g'], $cury);
$pdf->SetFont('Arial','B',8);
$pdf->MultiCell(90, 3, "Règlement par virement sur le compte bancaire suivant:", 0, 'L', 0);
$cury+=4;
$pdf->SetFont('Arial','B',6);
$pdf->line($this->marges['g']+1, $cury, $this->marges['g']+1, $cury+10 );
$pdf->SetXY ($this->marges['g'], $cury);
$pdf->MultiCell(18, 3, "Code banque", 0, 'C', 0);
$pdf->line($this->marges['g']+18, $cury, $this->marges['g']+18, $cury+10 );
$pdf->SetXY ($this->marges['g']+18, $cury);
$pdf->MultiCell(18, 3, "Code guichet", 0, 'C', 0);
$pdf->line($this->marges['g']+36, $cury, $this->marges['g']+36, $cury+10 );
$pdf->SetXY ($this->marges['g']+36, $cury);
$pdf->MultiCell(24, 3, "Numéro compte", 0, 'C', 0);
$pdf->line($this->marges['g']+60, $cury, $this->marges['g']+60, $cury+10 );
$pdf->SetXY ($this->marges['g']+60, $cury);
$pdf->MultiCell(13, 3, "Clé RIB", 0, 'C', 0);
$pdf->line($this->marges['g']+73, $cury, $this->marges['g']+73, $cury+10 );
$pdf->SetFont('Arial','',8);
$pdf->SetXY ($this->marges['g'], $cury+5);
$pdf->MultiCell(18, 3, $account->code_banque, 0, 'C', 0);
$pdf->SetXY ($this->marges['g']+18, $cury+5);
$pdf->MultiCell(18, 3, $account->code_guichet, 0, 'C', 0);
$pdf->SetXY ($this->marges['g']+36, $cury+5);
$pdf->MultiCell(24, 3, $account->number, 0, 'C', 0);
$pdf->SetXY ($this->marges['g']+60, $cury+5);
$pdf->MultiCell(13, 3, $account->cle_rib, 0, 'C', 0);
$pdf->SetXY ($this->marges['g'], $cury+12);
$pdf->MultiCell(90, 3, "Domiciliation : " . $account->domiciliation, 0, 'L', 0);
$pdf->SetXY ($this->marges['g'], $cury+22);
$pdf->MultiCell(90, 3, "Prefix IBAN : " . $account->iban_prefix, 0, 'L', 0);
$pdf->SetXY ($this->marges['g'], $cury+25);
$pdf->MultiCell(90, 3, "BIC : " . $account->bic, 0, 'L', 0);
}
}
*/
/*
* Conditions de règlements
*/
if ($propale->cond_reglement_code)
{
$pdf->SetFont('Arial','B',8);
$pdf->SetXY($this->marge_gauche, 217);
$titre = $langs->trans("PaymentConditions").':';
$pdf->MultiCell(80, 5, $titre, 0, 'L');
$pdf->SetFont('Arial','',8);
$pdf->SetXY(50, 217);
$lib_condition_paiement=$langs->trans("PaymentCondition".$propale->cond_reglement_code)?$langs->trans("PaymentCondition".$propale->cond_reglement_code):$propale->cond_reglement;
$pdf->MultiCell(80, 5, $lib_condition_paiement,0,'L');
}
/*
* Pied de page
*/
$this->_pagefoot($pdf);
$pdf->AliasNbPages();
$pdf->Close();
$pdf->Output($file);
return 1; // Pas d'erreur
}
else
{
$this->error=$langs->trans("ErrorCanNotCreateDir",$dir);
return 0;
}
}
else
{
$this->error=$langs->trans("ErrorConstantNotDefined","PROP_OUTPUTDIR");
return 0;
}
$pdf->Output($file); $this->error=$langs->trans("ErrorUnknown");
return 0; // Erreur par defaut
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 le total à payer * \brief Affiche le total à payer
@ -483,7 +492,7 @@ class pdf_propale_azur extends ModelePDFPropales
* \param deja_regle Montant deja regle * \param deja_regle Montant deja regle
* \return y Position pour suite * \return y Position pour suite
*/ */
function _tableau_tot(&$pdf, $prop, $deja_regle, $posy) function _tableau_tot(&$pdf, $propale, $deja_regle, $posy)
{ {
global $langs; global $langs;
$langs->load("main"); $langs->load("main");
@ -510,22 +519,22 @@ class pdf_propale_azur extends ModelePDFPropales
$pdf->MultiCell($col2x-$col1x, $tab2_hl, $langs->trans("TotalHT"), 0, 'L', 1); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $langs->trans("TotalHT"), 0, 'L', 1);
$pdf->SetXY ($col2x, $tab2_top + 0); $pdf->SetXY ($col2x, $tab2_top + 0);
$pdf->MultiCell($largcol2, $tab2_hl, price($prop->total_ht + $prop->remise), 0, 'R', 1); $pdf->MultiCell($largcol2, $tab2_hl, price($propale->total_ht + $propale->remise), 0, 'R', 1);
// Remise globale // Remise globale
if ($prop->remise > 0) if ($propale->remise > 0)
{ {
$pdf->SetXY ($col1x, $tab2_top + $tab2_hl); $pdf->SetXY ($col1x, $tab2_top + $tab2_hl);
$pdf->MultiCell($col2x-$col1x, $tab2_hl, $langs->trans("GlobalDiscount"), 0, 'L', 1); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $langs->trans("GlobalDiscount"), 0, 'L', 1);
$pdf->SetXY ($col2x, $tab2_top + $tab2_hl); $pdf->SetXY ($col2x, $tab2_top + $tab2_hl);
$pdf->MultiCell($largcol2, $tab2_hl, "-".$prop->remise_percent."%", 0, 'R', 1); $pdf->MultiCell($largcol2, $tab2_hl, "-".$propale->remise_percent."%", 0, 'R', 1);
$pdf->SetXY ($col1x, $tab2_top + $tab2_hl * 2); $pdf->SetXY ($col1x, $tab2_top + $tab2_hl * 2);
$pdf->MultiCell($col2x-$col1x, $tab2_hl, "Total HT après remise", 0, 'L', 1); $pdf->MultiCell($col2x-$col1x, $tab2_hl, "Total HT après remise", 0, 'L', 1);
$pdf->SetXY ($col2x, $tab2_top + $tab2_hl * 2); $pdf->SetXY ($col2x, $tab2_top + $tab2_hl * 2);
$pdf->MultiCell($largcol2, $tab2_hl, price($prop->total_ht), 0, 'R', 0); $pdf->MultiCell($largcol2, $tab2_hl, price($propale->total_ht), 0, 'R', 0);
$index = 2; $index = 2;
} }
@ -558,7 +567,7 @@ class pdf_propale_azur extends ModelePDFPropales
$pdf->MultiCell($col2x-$col1x, $tab2_hl, $langs->trans("TotalVAT"), 0, 'L', 1); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $langs->trans("TotalVAT"), 0, 'L', 1);
$pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index); $pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index);
$pdf->MultiCell($largcol2, $tab2_hl, price($prop->total_tva), 0, 'R', 1); $pdf->MultiCell($largcol2, $tab2_hl, price($propale->total_tva), 0, 'R', 1);
} }
$useborder=0; $useborder=0;
@ -570,7 +579,7 @@ class pdf_propale_azur extends ModelePDFPropales
$pdf->MultiCell($col2x-$col1x, $tab2_hl, $langs->trans("TotalTTC"), $useborder, 'L', 1); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $langs->trans("TotalTTC"), $useborder, 'L', 1);
$pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index); $pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index);
$pdf->MultiCell($largcol2, $tab2_hl, price($prop->total_ttc), $useborder, 'R', 1); $pdf->MultiCell($largcol2, $tab2_hl, price($propale->total_ttc), $useborder, 'R', 1);
$pdf->SetFont('Arial','', 9); $pdf->SetFont('Arial','', 9);
$pdf->SetTextColor(0,0,0); $pdf->SetTextColor(0,0,0);
@ -591,7 +600,7 @@ class pdf_propale_azur extends ModelePDFPropales
$pdf->MultiCell($col2x-$col1x, $tab2_hl, $langs->trans("RemainderToPay"), $useborder, 'L', 1); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $langs->trans("RemainderToPay"), $useborder, 'L', 1);
$pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index); $pdf->SetXY ($col2x, $tab2_top + $tab2_hl * $index);
$pdf->MultiCell($largcol2, $tab2_hl, price($prop->total_ttc - $deja_regle), $useborder, 'R', 1); $pdf->MultiCell($largcol2, $tab2_hl, price($propale->total_ttc - $deja_regle), $useborder, 'R', 1);
$pdf->SetFont('Arial','', 9); $pdf->SetFont('Arial','', 9);
$pdf->SetTextColor(0,0,0); $pdf->SetTextColor(0,0,0);
} }
@ -662,7 +671,7 @@ class pdf_propale_azur extends ModelePDFPropales
* \param fac objet propale * \param fac objet propale
* \param showadress 0=non, 1=oui * \param showadress 0=non, 1=oui
*/ */
function _pagehead(&$pdf, $prop, $showadress=1) function _pagehead(&$pdf, $propale, $showadress=1)
{ {
global $langs,$conf,$mysoc; global $langs,$conf,$mysoc;
@ -702,18 +711,18 @@ class pdf_propale_azur extends ModelePDFPropales
$pdf->SetFont('Arial','B',13); $pdf->SetFont('Arial','B',13);
$pdf->SetXY(100,$posy); $pdf->SetXY(100,$posy);
$pdf->SetTextColor(0,0,60); $pdf->SetTextColor(0,0,60);
$pdf->MultiCell(100, 4, $langs->trans("Proposal")." ".$prop->ref, '' , 'R'); $pdf->MultiCell(100, 4, $langs->trans("Proposal")." ".$propale->ref, '' , 'R');
$pdf->SetFont('Arial','',12); $pdf->SetFont('Arial','',12);
$posy+=6; $posy+=6;
$pdf->SetXY(100,$posy); $pdf->SetXY(100,$posy);
$pdf->SetTextColor(0,0,60); $pdf->SetTextColor(0,0,60);
$pdf->MultiCell(100, 4, $langs->trans("Date")." : " . dolibarr_print_date($prop->date,"%d %b %Y"), '', 'R'); $pdf->MultiCell(100, 4, $langs->trans("Date")." : " . dolibarr_print_date($propale->date,"%d %b %Y"), '', 'R');
$posy+=6; $posy+=6;
$pdf->SetXY(100,$posy); $pdf->SetXY(100,$posy);
$pdf->SetTextColor(0,0,60); $pdf->SetTextColor(0,0,60);
$pdf->MultiCell(100, 4, $langs->trans("DateEndPropal")." : " . dolibarr_print_date($prop->fin_validite,"%d %b %Y"), '', 'R'); $pdf->MultiCell(100, 4, $langs->trans("DateEndPropal")." : " . dolibarr_print_date($propale->fin_validite,"%d %b %Y"), '', 'R');
if ($showadress) if ($showadress)
{ {
@ -770,7 +779,7 @@ class pdf_propale_azur extends ModelePDFPropales
$pdf->SetFont('Arial','',8); $pdf->SetFont('Arial','',8);
$pdf->SetXY(102,$posy-5); $pdf->SetXY(102,$posy-5);
$pdf->MultiCell(80,5, $langs->trans("BillTo").":"); $pdf->MultiCell(80,5, $langs->trans("BillTo").":");
$prop->fetch_client(); $propale->fetch_client();
// Cadre client destinataire // Cadre client destinataire
$pdf->rect(100, $posy, 100, $hautcadre); $pdf->rect(100, $posy, 100, $hautcadre);
@ -778,12 +787,12 @@ class pdf_propale_azur extends ModelePDFPropales
// Nom client // Nom client
$pdf->SetXY(102,$posy+3); $pdf->SetXY(102,$posy+3);
$pdf->SetFont('Arial','B',11); $pdf->SetFont('Arial','B',11);
$pdf->MultiCell(106,4, $prop->client->nom, 0, 'L'); $pdf->MultiCell(106,4, $propale->client->nom, 0, 'L');
// Caractéristiques client // Caractéristiques client
$carac_client=$prop->client->adresse; $carac_client=$propale->client->adresse;
$carac_client.="\n".$prop->client->cp . " " . $prop->client->ville."\n"; $carac_client.="\n".$propale->client->cp . " " . $propale->client->ville."\n";
if ($prop->client->tva_intra) $carac_client.="\n".$langs->trans("VATIntraShort").': '.$prop->client->tva_intra; if ($propale->client->tva_intra) $carac_client.="\n".$langs->trans("VATIntraShort").': '.$propale->client->tva_intra;
$pdf->SetFont('Arial','',9); $pdf->SetFont('Arial','',9);
$pdf->SetXY(102,$posy+8); $pdf->SetXY(102,$posy+8);
$pdf->MultiCell(86,4, $carac_client); $pdf->MultiCell(86,4, $carac_client);

View File

@ -56,173 +56,193 @@ class pdf_propale_bleu extends ModelePDFPropales
} }
/** \brief Renvoi dernière erreur /**
\return string Dernière erreur \brief Renvoi dernière erreur
*/ \return string Dernière erreur
function pdferror() */
{ function pdferror()
return $this->error;
}
/**
\brief Fonction générant la propale sur le disque
\param id id de la propale à générer
\return int 1=ok, 0=ko
*/
function write_pdf_file($id)
{
global $user,$conf,$langs;
$propale = new Propal($this->db,"",$id);
if ($propale->fetch($id))
{ {
return $this->error;
if ($conf->propal->dir_output)
{
$propref = sanitize_string($propale->ref);
$dir = $conf->propal->dir_output . "/" . $propref ;
if (! file_exists($dir))
{
if (create_exdir($dir) < 0)
{
$this->error=$langs->trans("ErrorCanNotCreateDir",$dir);
return 0;
}
}
}
else
{
$this->error=$langs->trans("ErrorConstantNotDefined","PROPALE_OUTPUTDIR");
return 0;
}
$propref = sanitize_string($propale->ref);
$file = $dir . "/" . $propref . ".pdf";
if (file_exists($dir))
{
$pdf=new FPDF('P','mm',$this->format);
$pdf->Open();
$pdf->AddPage();
$pdf->SetTitle($propale->ref);
$pdf->SetSubject("Proposition commerciale");
$pdf->SetCreator("Dolibarr ".DOL_VERSION);
$pdf->SetAuthor($user->fullname);
$this->_pagehead($pdf, $propale);
/*
*/
$tab_top = 100;
$tab_height = 150;
/*
*
*/
$pdf->SetFillColor(220,220,220);
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Arial','', 10);
$pdf->SetXY (10, $tab_top + 10 );
$iniY = $pdf->GetY();
$curY = $pdf->GetY();
$nexY = $pdf->GetY();
$nblignes = sizeof($propale->lignes);
for ($i = 0 ; $i < $nblignes ; $i++)
{
$curY = $nexY;
$pdf->SetXY (30, $curY );
$pdf->MultiCell(100, 5, $propale->lignes[$i]->desc, 0, 'J', 0);
$nexY = $pdf->GetY();
$pdf->SetXY (10, $curY );
$pdf->MultiCell(20, 5, $propale->lignes[$i]->ref, 0, 'C');
$pdf->SetXY (133, $curY );
$pdf->MultiCell(10, 5, $propale->lignes[$i]->tva_tx, 0, 'C');
$pdf->SetXY (145, $curY );
$pdf->MultiCell(10, 5, $propale->lignes[$i]->qty, 0, 'C');
$pdf->SetXY (156, $curY );
$pdf->MultiCell(18, 5, price($propale->lignes[$i]->price), 0, 'R', 0);
$pdf->SetXY (174, $curY );
$total = price($propale->lignes[$i]->price * $propale->lignes[$i]->qty);
$pdf->MultiCell(26, 5, $total, 0, 'R', 0);
$pdf->line(10, $curY, 200, $curY );
if ($nexY > 240 && $i < $nblignes - 1)
{
$this->_tableau($pdf, $tab_top, $tab_height, $nexY);
$pdf->AddPage();
$nexY = $iniY;
$this->_pagehead($pdf, $propale);
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Arial','', 10);
}
}
$this->_tableau($pdf, $tab_top, $tab_height, $nexY);
/*
*
*/
$tab2_top = 254;
$tab2_lh = 7;
$tab2_height = $tab2_lh * 3;
$pdf->SetFont('Arial','', 11);
$pdf->Rect(132, $tab2_top, 68, $tab2_height);
$pdf->line(132, $tab2_top + $tab2_height - ($tab2_lh*3), 200, $tab2_top + $tab2_height - ($tab2_lh*3) );
$pdf->line(132, $tab2_top + $tab2_height - ($tab2_lh*2), 200, $tab2_top + $tab2_height - ($tab2_lh*2) );
$pdf->line(132, $tab2_top + $tab2_height - $tab2_lh, 200, $tab2_top + $tab2_height - $tab2_lh );
$pdf->line(174, $tab2_top, 174, $tab2_top + $tab2_height);
$pdf->SetXY (132, $tab2_top + 0);
$pdf->MultiCell(42, $tab2_lh, "Total HT", 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + $tab2_lh);
$pdf->MultiCell(42, $tab2_lh, "Total TVA", 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + ($tab2_lh*2));
$pdf->MultiCell(42, $tab2_lh, "Total TTC", 1, 'R', 1);
$pdf->SetXY (174, $tab2_top + 0);
$pdf->MultiCell(26, $tab2_lh, price($propale->total_ht), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + $tab2_lh);
$pdf->MultiCell(26, $tab2_lh, price($propale->total_tva), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + ($tab2_lh*2));
$pdf->MultiCell(26, $tab2_lh, price($propale->total_ttc), 1, 'R', 1);
/*
*
*/
$pdf->Output($file);
return 1;
}
} }
}
function _tableau(&$pdf, $tab_top, $tab_height, $nexY)
/**
\brief Fonction générant la propale sur le disque
\param propale Objet propal
\return int 1=ok, 0=ko
\remarks Variables utilisées
\remarks MAIN_INFO_SOCIETE_NOM
\remarks MAIN_INFO_SOCIETE_ADRESSE
\remarks MAIN_INFO_SOCIETE_CP
\remarks MAIN_INFO_SOCIETE_VILLE
\remarks MAIN_INFO_SOCIETE_TEL
\remarks MAIN_INFO_SOCIETE_FAX
\remarks MAIN_INFO_SOCIETE_WEB
\remarks MAIN_INFO_SOCIETE_LOGO
\remarks MAIN_INFO_SIRET
\remarks MAIN_INFO_SIREN
\remarks MAIN_INFO_RCS
\remarks MAIN_INFO_CAPITAL
\remarks MAIN_INFO_TVAINTRA
*/
function write_pdf_file($propale)
{
global $user,$conf,$langs;
if ($conf->propal->dir_output)
{
// Définition de l'objet $propal (pour compatibilite ascendante)
if (! is_object($propale))
{
$id = $propale;
$propale = new Propal($this->db,"",$id);
$ret=$propale->fetch($id);
}
// Définition de $dir et $file
if ($propale->specimen)
{
$dir = $conf->propal->dir_output;
$file = $dir . "/SPECIMEN.pdf";
}
else
{
$propref = sanitize_string($propale->ref);
$dir = $conf->propal->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))
{
$pdf=new FPDF('P','mm',$this->format);
$pdf->Open();
$pdf->AddPage();
$pdf->SetTitle($propale->ref);
$pdf->SetSubject("Proposition commerciale");
$pdf->SetCreator("Dolibarr ".DOL_VERSION);
$pdf->SetAuthor($user->fullname);
$this->_pagehead($pdf, $propale);
/*
*/
$tab_top = 100;
$tab_height = 150;
/*
*
*/
$pdf->SetFillColor(220,220,220);
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Arial','', 10);
$pdf->SetXY (10, $tab_top + 10 );
$iniY = $pdf->GetY();
$curY = $pdf->GetY();
$nexY = $pdf->GetY();
$nblignes = sizeof($propale->lignes);
for ($i = 0 ; $i < $nblignes ; $i++)
{
$curY = $nexY;
$pdf->SetXY (30, $curY );
$pdf->MultiCell(100, 5, $propale->lignes[$i]->desc, 0, 'J', 0);
$nexY = $pdf->GetY();
$pdf->SetXY (10, $curY );
$pdf->MultiCell(20, 5, $propale->lignes[$i]->ref, 0, 'C');
$pdf->SetXY (133, $curY );
$pdf->MultiCell(10, 5, $propale->lignes[$i]->tva_tx, 0, 'C');
$pdf->SetXY (145, $curY );
$pdf->MultiCell(10, 5, $propale->lignes[$i]->qty, 0, 'C');
$pdf->SetXY (156, $curY );
$pdf->MultiCell(18, 5, price($propale->lignes[$i]->price), 0, 'R', 0);
$pdf->SetXY (174, $curY );
$total = price($propale->lignes[$i]->price * $propale->lignes[$i]->qty);
$pdf->MultiCell(26, 5, $total, 0, 'R', 0);
$pdf->line(10, $curY, 200, $curY );
if ($nexY > 240 && $i < $nblignes - 1)
{
$this->_tableau($pdf, $tab_top, $tab_height, $nexY);
$pdf->AddPage();
$nexY = $iniY;
$this->_pagehead($pdf, $propale);
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Arial','', 10);
}
}
$this->_tableau($pdf, $tab_top, $tab_height, $nexY);
/*
*
*/
$tab2_top = 254;
$tab2_lh = 7;
$tab2_height = $tab2_lh * 3;
$pdf->SetFont('Arial','', 11);
$pdf->Rect(132, $tab2_top, 68, $tab2_height);
$pdf->line(132, $tab2_top + $tab2_height - ($tab2_lh*3), 200, $tab2_top + $tab2_height - ($tab2_lh*3) );
$pdf->line(132, $tab2_top + $tab2_height - ($tab2_lh*2), 200, $tab2_top + $tab2_height - ($tab2_lh*2) );
$pdf->line(132, $tab2_top + $tab2_height - $tab2_lh, 200, $tab2_top + $tab2_height - $tab2_lh );
$pdf->line(174, $tab2_top, 174, $tab2_top + $tab2_height);
$pdf->SetXY (132, $tab2_top + 0);
$pdf->MultiCell(42, $tab2_lh, "Total HT", 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + $tab2_lh);
$pdf->MultiCell(42, $tab2_lh, "Total TVA", 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + ($tab2_lh*2));
$pdf->MultiCell(42, $tab2_lh, "Total TTC", 1, 'R', 1);
$pdf->SetXY (174, $tab2_top + 0);
$pdf->MultiCell(26, $tab2_lh, price($propale->total_ht), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + $tab2_lh);
$pdf->MultiCell(26, $tab2_lh, price($propale->total_tva), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + ($tab2_lh*2));
$pdf->MultiCell(26, $tab2_lh, price($propale->total_ttc), 1, 'R', 1);
/*
*
*/
$pdf->Output($file);
return 1;
}
}
}
function _tableau(&$pdf, $tab_top, $tab_height, $nexY)
{ {
global $langs,$conf; global $langs,$conf;
$langs->load("main"); $langs->load("main");

View File

@ -40,7 +40,7 @@ class pdf_propale_jaune extends ModelePDFPropales
/** \brief Constructeur /** \brief Constructeur
\param db handler accès base de donnée \param db handler accès base de donnée
*/ */
function pdf_propale_jaune($db=0) function pdf_propale_jaune($db=0)
{ {
$this->db = $db; $this->db = $db;
$this->name = "jaune"; $this->name = "jaune";
@ -56,168 +56,174 @@ class pdf_propale_jaune extends ModelePDFPropales
} }
/** \brief Renvoi dernière erreur /** \brief Renvoi dernière erreur
\return string Dernière erreur \return string Dernière erreur
*/ */
function pdferror() function pdferror()
{
return $this->error;
}
/**
\brief Fonction générant la propale sur le disque
\param id id de la propale à générer
\return int 1=ok, 0=ko
*/
function write_pdf_file($id)
{
global $user,$conf,$langs;
$propale = new Propal($this->db,"",$id);
if ($propale->fetch($id))
{ {
return $this->error;
if ($conf->propal->dir_output) }
{
$propref = sanitize_string($propale->ref);
$dir = $conf->propal->dir_output . "/" . $propref ; /**
if (! file_exists($dir)) \brief Fonction générant la propale sur le disque
{ \param propale Objet propal
if (create_exdir($dir) < 0) \return int 1=ok, 0=ko
{ */
$this->error=$langs->trans("ErrorCanNotCreateDir",$dir); function write_pdf_file($propale)
return 0; {
} global $user,$conf,$langs;
}
} if ($conf->propal->dir_output)
else {
{ // Définition de l'objet $propal (pour compatibilite ascendante)
$this->error=$langs->trans("ErrorConstantNotDefined","PROPALE_OUTPUTDIR"); if (! is_object($propale))
return 0; {
} $id = $propale;
$propale = new Propal($this->db,"",$id);
$propref = sanitize_string($propale->ref); $ret=$propale->fetch($id);
$file = $dir . "/" . $propref . ".pdf"; }
if (file_exists($dir)) // Définition de $dir et $file
{ if ($propale->specimen)
{
$pdf=new FPDF('P','mm',$this->format); $dir = $conf->propal->dir_output;
$pdf->Open(); $file = $dir . "/SPECIMEN.pdf";
}
$pdf->SetTitle($propale->ref); else
$pdf->SetSubject("Proposition commerciale"); {
$pdf->SetCreator("Dolibarr ".DOL_VERSION); $propref = sanitize_string($propale->ref);
$pdf->SetAuthor($user->fullname); $dir = $conf->propal->dir_output . "/" . $propref;
$file = $dir . "/" . $propref . ".pdf";
$pdf->AddPage(); }
$this->_pagehead($pdf, $propale); if (! file_exists($dir))
{
/* if (create_exdir($dir) < 0)
*/ {
$tab_top = 100; $this->error=$langs->trans("ErrorCanNotCreateDir",$dir);
$tab_height = 150; return 0;
/* }
* }
*/
if (file_exists($dir))
$pdf->SetFillColor(242,239,119); {
$pdf->SetTextColor(0,0,0); $pdf=new FPDF('P','mm',$this->format);
$pdf->SetFont('Arial','', 10); $pdf->Open();
$pdf->SetXY (10, $tab_top + 10 ); $pdf->SetTitle($propale->ref);
$pdf->SetSubject("Proposition commerciale");
$iniY = $pdf->GetY(); $pdf->SetCreator("Dolibarr ".DOL_VERSION);
$curY = $pdf->GetY(); $pdf->SetAuthor($user->fullname);
$nexY = $pdf->GetY();
$nblignes = sizeof($propale->lignes); $pdf->AddPage();
for ($i = 0 ; $i < $nblignes ; $i++) $this->_pagehead($pdf, $propale);
{
$curY = $nexY; /*
$total = price($propale->lignes[$i]->price * $propale->lignes[$i]->qty); */
$tab_top = 100;
$pdf->SetXY (30, $curY ); $tab_height = 150;
$pdf->MultiCell(102, 5, $propale->lignes[$i]->desc, 0, 'J', 0); /*
*
$nexY = $pdf->GetY(); */
$pdf->SetXY (10, $curY ); $pdf->SetFillColor(242,239,119);
$pdf->MultiCell(20, 5, $propale->lignes[$i]->ref, 0, 'C', 0);
$pdf->SetTextColor(0,0,0);
$pdf->SetXY (132, $curY ); $pdf->SetFont('Arial','', 10);
$pdf->MultiCell(12, 5, $propale->lignes[$i]->tva_tx, 0, 'C', 0);
$pdf->SetXY (10, $tab_top + 10 );
$pdf->SetXY (144, $curY );
$pdf->MultiCell(10, 5, $propale->lignes[$i]->qty, 0, 'C', 0); $iniY = $pdf->GetY();
$curY = $pdf->GetY();
$pdf->SetXY (154, $curY ); $nexY = $pdf->GetY();
$pdf->MultiCell(22, 5, price($propale->lignes[$i]->price), 0, 'R', 0); $nblignes = sizeof($propale->lignes);
$pdf->SetXY (176, $curY ); for ($i = 0 ; $i < $nblignes ; $i++)
$pdf->MultiCell(24, 5, $total, 0, 'R', 0); {
$curY = $nexY;
$pdf->line(10, $curY, 200, $curY ); $total = price($propale->lignes[$i]->price * $propale->lignes[$i]->qty);
if ($nexY > 240 && $i < $nblignes - 1) $pdf->SetXY (30, $curY );
{ $pdf->MultiCell(102, 5, $propale->lignes[$i]->desc, 0, 'J', 0);
$this->_tableau($pdf, $tab_top, $tab_height, $nexY);
$pdf->AddPage(); $nexY = $pdf->GetY();
$nexY = $iniY;
$this->_pagehead($pdf, $propale); $pdf->SetXY (10, $curY );
$pdf->SetTextColor(0,0,0); $pdf->MultiCell(20, 5, $propale->lignes[$i]->ref, 0, 'C', 0);
$pdf->SetFont('Arial','', 10);
} $pdf->SetXY (132, $curY );
} $pdf->MultiCell(12, 5, $propale->lignes[$i]->tva_tx, 0, 'C', 0);
$this->_tableau($pdf, $tab_top, $tab_height, $nexY); $pdf->SetXY (144, $curY );
/* $pdf->MultiCell(10, 5, $propale->lignes[$i]->qty, 0, 'C', 0);
*
*/ $pdf->SetXY (154, $curY );
$tab2_top = 254; $pdf->MultiCell(22, 5, price($propale->lignes[$i]->price), 0, 'R', 0);
$tab2_lh = 7;
$tab2_height = $tab2_lh * 3; $pdf->SetXY (176, $curY );
$pdf->MultiCell(24, 5, $total, 0, 'R', 0);
$pdf->SetFont('Arial','', 11);
$pdf->line(10, $curY, 200, $curY );
$pdf->Rect(132, $tab2_top, 68, $tab2_height);
if ($nexY > 240 && $i < $nblignes - 1)
$pdf->line(132, $tab2_top + $tab2_height - ($tab2_lh*3), 200, $tab2_top + $tab2_height - ($tab2_lh*3) ); {
$pdf->line(132, $tab2_top + $tab2_height - ($tab2_lh*2), 200, $tab2_top + $tab2_height - ($tab2_lh*2) ); $this->_tableau($pdf, $tab_top, $tab_height, $nexY);
$pdf->line(132, $tab2_top + $tab2_height - $tab2_lh, 200, $tab2_top + $tab2_height - $tab2_lh ); $pdf->AddPage();
$nexY = $iniY;
$pdf->line(174, $tab2_top, 174, $tab2_top + $tab2_height); $this->_pagehead($pdf, $propale);
$pdf->SetTextColor(0,0,0);
$pdf->SetXY (132, $tab2_top + 0); $pdf->SetFont('Arial','', 10);
$pdf->MultiCell(42, $tab2_lh, "Total HT", 0, 'R', 0); }
}
$pdf->SetXY (132, $tab2_top + $tab2_lh);
$pdf->MultiCell(42, $tab2_lh, "Total TVA", 0, 'R', 0); $this->_tableau($pdf, $tab_top, $tab_height, $nexY);
/*
$pdf->SetXY (132, $tab2_top + ($tab2_lh*2)); *
$pdf->MultiCell(42, $tab2_lh, "Total TTC", 1, 'R', 1); */
$tab2_top = 254;
$pdf->SetXY (174, $tab2_top + 0); $tab2_lh = 7;
$pdf->MultiCell(26, $tab2_lh, price($propale->total_ht), 0, 'R', 0); $tab2_height = $tab2_lh * 3;
$pdf->SetXY (174, $tab2_top + $tab2_lh); $pdf->SetFont('Arial','', 11);
$pdf->MultiCell(26, $tab2_lh, price($propale->total_tva), 0, 'R', 0);
$pdf->Rect(132, $tab2_top, 68, $tab2_height);
$pdf->SetXY (174, $tab2_top + ($tab2_lh*2));
$pdf->MultiCell(26, $tab2_lh, price($propale->total_ttc), 1, 'R', 1); $pdf->line(132, $tab2_top + $tab2_height - ($tab2_lh*3), 200, $tab2_top + $tab2_height - ($tab2_lh*3) );
$pdf->line(132, $tab2_top + $tab2_height - ($tab2_lh*2), 200, $tab2_top + $tab2_height - ($tab2_lh*2) );
/* $pdf->line(132, $tab2_top + $tab2_height - $tab2_lh, 200, $tab2_top + $tab2_height - $tab2_lh );
*
*/ $pdf->line(174, $tab2_top, 174, $tab2_top + $tab2_height);
$pdf->Output($file); $pdf->SetXY (132, $tab2_top + 0);
return 1; $pdf->MultiCell(42, $tab2_lh, "Total HT", 0, 'R', 0);
}
$pdf->SetXY (132, $tab2_top + $tab2_lh);
$pdf->MultiCell(42, $tab2_lh, "Total TVA", 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + ($tab2_lh*2));
$pdf->MultiCell(42, $tab2_lh, "Total TTC", 1, 'R', 1);
$pdf->SetXY (174, $tab2_top + 0);
$pdf->MultiCell(26, $tab2_lh, price($propale->total_ht), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + $tab2_lh);
$pdf->MultiCell(26, $tab2_lh, price($propale->total_tva), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + ($tab2_lh*2));
$pdf->MultiCell(26, $tab2_lh, price($propale->total_ttc), 1, 'R', 1);
/*
*
*/
$pdf->Output($file);
return 1;
}
}
} }
}
function _tableau(&$pdf, $tab_top, $tab_height, $nexY) function _tableau(&$pdf, $tab_top, $tab_height, $nexY)
{ {

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2005 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.net>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -28,7 +28,8 @@
\version $Revision$ \version $Revision$
*/ */
require_once(DOL_DOCUMENT_ROOT ."/includes/modules/propale/modules_propale.php"); require_once(DOL_DOCUMENT_ROOT."/propal.class.php");
require_once(DOL_DOCUMENT_ROOT."/includes/modules/propale/modules_propale.php");
/** /**
@ -67,181 +68,185 @@ class pdf_propale_rouge extends ModelePDFPropales
} }
/** /**
\brief Fonction générant la propale sur le disque \brief Fonction générant la propale sur le disque
\param id id de la propale à générer \param propale Objet propal
\return int 1=ok, 0=ko \return int 1=ok, 0=ko
*/ */
function write_pdf_file($id) function write_pdf_file($propale)
{
global $user,$conf,$langs;
$propale = new Propal($this->db,"",$id);
if ($propale->fetch($id))
{ {
global $user,$conf,$langs;
if ($conf->propal->dir_output)
{ if ($conf->propal->dir_output)
$propref = sanitize_string($propale->ref);
$dir = $conf->propal->dir_output . "/" . $propref ;
if (! file_exists($dir))
{
if (create_exdir($dir) < 0)
{
$this->error=$langs->trans("ErrorCanNotCreateDir",$dir);
return 0;
}
}
}
else
{
$this->error=$langs->trans("ErrorConstantNotDefined","PROPALE_OUTPUTDIR");
return 0;
}
$propref = sanitize_string($propale->ref);
$file = $dir . "/" . $propref . ".pdf";
if (file_exists($dir))
{
$pdf=new FPDF('P','mm',$this->format);
$pdf->Open();
$pdf->AddPage();
$pdf->SetTitle($propale->ref);
$pdf->SetSubject("Proposition commerciale");
$pdf->SetCreator("Dolibarr ".DOL_VERSION);
$pdf->SetAuthor($user->fullname);
$this->_pagehead($pdf, $propale);
/*
*/
$tab_top = 100;
$tab_height = 140;
/*
*
*/
$pdf->SetFillColor(220,220,220);
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Arial','', 10);
$pdf->SetXY (10, $tab_top + 10 );
$iniY = $pdf->GetY();
$curY = $pdf->GetY();
$nexY = $pdf->GetY();
$nblignes = sizeof($propale->lignes);
for ($i = 0 ; $i < $nblignes ; $i++)
{ {
// Définition de l'objet $propal (pour compatibilite ascendante)
if (! is_object($propale))
{
$id = $propale;
$propale = new Propal($this->db,"",$id);
$ret=$propale->fetch($id);
}
$curY = $nexY; // Définition de $dir et $file
if ($propale->specimen)
{
$dir = $conf->propal->dir_output;
$file = $dir . "/SPECIMEN.pdf";
}
else
{
$propref = sanitize_string($propale->ref);
$dir = $conf->propal->dir_output . "/" . $propref;
$file = $dir . "/" . $propref . ".pdf";
}
$pdf->SetXY (30, $curY ); if (! file_exists($dir))
{
if (create_exdir($dir) < 0)
{
$this->error=$langs->trans("ErrorCanNotCreateDir",$dir);
return 0;
}
}
$pdf->MultiCell(100, 5, $propale->lignes[$i]->desc, 0, 'J', 0); if (file_exists($dir))
{
$nexY = $pdf->GetY(); $pdf=new FPDF('P','mm',$this->format);
$pdf->Open();
$pdf->SetXY (10, $curY ); $pdf->AddPage();
$pdf->MultiCell(20, 5, $propale->lignes[$i]->ref, 0, 'C'); $pdf->SetTitle($propale->ref);
$pdf->SetSubject($langs->trans("CommercialProposal"));
$pdf->SetXY (133, $curY ); $pdf->SetCreator("Dolibarr ".DOL_VERSION);
$pdf->MultiCell(10, 5, $propale->lignes[$i]->tva_tx, 0, 'C'); $pdf->SetAuthor($user->fullname);
$pdf->SetXY (145, $curY ); $this->_pagehead($pdf, $propale);
$pdf->MultiCell(10, 5, $propale->lignes[$i]->qty, 0, 'C');
$tab_top = 100;
$pdf->SetXY (156, $curY ); $tab_height = 140;
$pdf->MultiCell(18, 5, price($propale->lignes[$i]->price), 0, 'R', 0);
$pdf->SetFillColor(220,220,220);
$pdf->SetXY (174, $curY );
$total = price($propale->lignes[$i]->price * $propale->lignes[$i]->qty); $pdf->SetTextColor(0,0,0);
$pdf->MultiCell(26, 5, $total, 0, 'R', 0); $pdf->SetFont('Arial','', 10);
$pdf->line(10, $curY, 200, $curY ); $pdf->SetXY (10, $tab_top + 10 );
if ($nexY > 240 && $i < $nblignes - 1) $iniY = $pdf->GetY();
{ $curY = $pdf->GetY();
$this->_tableau($pdf, $tab_top, $tab_height, $nexY); $nexY = $pdf->GetY();
$pdf->AddPage(); $nblignes = sizeof($propale->lignes);
$nexY = $iniY;
$this->_pagehead($pdf, $propale); for ($i = 0 ; $i < $nblignes ; $i++)
$pdf->SetTextColor(0,0,0); {
$pdf->SetFont('Arial','', 10); $curY = $nexY;
}
$pdf->SetXY (30, $curY );
$pdf->MultiCell(100, 5, $propale->lignes[$i]->desc, 0, 'J', 0);
$nexY = $pdf->GetY();
$pdf->SetXY (10, $curY );
$pdf->MultiCell(20, 5, $propale->lignes[$i]->ref, 0, 'C');
$pdf->SetXY (133, $curY );
$pdf->MultiCell(10, 5, $propale->lignes[$i]->tva_tx, 0, 'C');
$pdf->SetXY (145, $curY );
$pdf->MultiCell(10, 5, $propale->lignes[$i]->qty, 0, 'C');
$pdf->SetXY (156, $curY );
$pdf->MultiCell(18, 5, price($propale->lignes[$i]->price), 0, 'R', 0);
$pdf->SetXY (174, $curY );
$total = price($propale->lignes[$i]->price * $propale->lignes[$i]->qty);
$pdf->MultiCell(26, 5, $total, 0, 'R', 0);
$pdf->line(10, $curY, 200, $curY );
if ($nexY > 240 && $i < $nblignes - 1)
{
$this->_tableau($pdf, $tab_top, $tab_height, $nexY);
$pdf->AddPage();
$nexY = $iniY;
$this->_pagehead($pdf, $propale);
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Arial','', 10);
}
}
$this->_tableau($pdf, $tab_top, $tab_height, $nexY);
/*
*
*/
$tab2_top = 241;
$tab2_lh = 7;
$tab2_height = $tab2_lh * 4;
$pdf->SetFont('Arial','', 11);
$pdf->Rect(132, $tab2_top, 68, $tab2_height);
$pdf->line(132, $tab2_top + $tab2_height - ($tab2_lh*3), 200, $tab2_top + $tab2_height - ($tab2_lh*3) );
$pdf->line(132, $tab2_top + $tab2_height - ($tab2_lh*2), 200, $tab2_top + $tab2_height - ($tab2_lh*2) );
$pdf->line(132, $tab2_top + $tab2_height - $tab2_lh, 200, $tab2_top + $tab2_height - $tab2_lh );
$pdf->line(174, $tab2_top, 174, $tab2_top + $tab2_height);
$pdf->SetXY (132, $tab2_top + 0);
$pdf->MultiCell(42, $tab2_lh, $langs->trans("TotalHT"), 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + $tab2_lh);
$pdf->MultiCell(42, $tab2_lh, $langs->trans("Discount"), 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + $tab2_lh*2);
$pdf->MultiCell(42, $tab2_lh, "Total HT après remise", 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + $tab2_lh*3);
$pdf->MultiCell(42, $tab2_lh, $langs->trans("TotalVAT"), 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + ($tab2_lh*4));
$pdf->MultiCell(42, $tab2_lh, $langs->trans("TotalTTC"), 1, 'R', 1);
$pdf->SetXY (174, $tab2_top + 0);
$pdf->MultiCell(26, $tab2_lh, price($propale->total_ht + $propale->remise), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + $tab2_lh);
$pdf->MultiCell(26, $tab2_lh, price($propale->remise), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + $tab2_lh*2);
$pdf->MultiCell(26, $tab2_lh, price($propale->total_ht), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + $tab2_lh*3);
$pdf->MultiCell(26, $tab2_lh, price($propale->total_tva), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + ($tab2_lh*4));
$pdf->MultiCell(26, $tab2_lh, price($propale->total_ttc), 1, 'R', 1);
if (defined("PROP_PDF_MESSAGE") && PROP_PDF_MESSAGE)
{
$pdf->SetXY (10, $tab2_top + 2);
$pdf->SetFont('Arial','',10);
$pdf->MultiCell(120, 5, PROP_PDF_MESSAGE);
}
$pdf->Output($file);
return 1;
}
} }
else
$this->_tableau($pdf, $tab_top, $tab_height, $nexY);
/*
*
*/
$tab2_top = 241;
$tab2_lh = 7;
$tab2_height = $tab2_lh * 4;
$pdf->SetFont('Arial','', 11);
$pdf->Rect(132, $tab2_top, 68, $tab2_height);
$pdf->line(132, $tab2_top + $tab2_height - ($tab2_lh*3), 200, $tab2_top + $tab2_height - ($tab2_lh*3) );
$pdf->line(132, $tab2_top + $tab2_height - ($tab2_lh*2), 200, $tab2_top + $tab2_height - ($tab2_lh*2) );
$pdf->line(132, $tab2_top + $tab2_height - $tab2_lh, 200, $tab2_top + $tab2_height - $tab2_lh );
$pdf->line(174, $tab2_top, 174, $tab2_top + $tab2_height);
$pdf->SetXY (132, $tab2_top + 0);
$pdf->MultiCell(42, $tab2_lh, $langs->trans("TotalHT"), 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + $tab2_lh);
$pdf->MultiCell(42, $tab2_lh, $langs->trans("Discount"), 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + $tab2_lh*2);
$pdf->MultiCell(42, $tab2_lh, "Total HT après remise", 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + $tab2_lh*3);
$pdf->MultiCell(42, $tab2_lh, $langs->trans("TotalVAT"), 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + ($tab2_lh*4));
$pdf->MultiCell(42, $tab2_lh, $langs->trans("TotalTTC"), 1, 'R', 1);
$pdf->SetXY (174, $tab2_top + 0);
$pdf->MultiCell(26, $tab2_lh, price($propale->total_ht + $propale->remise), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + $tab2_lh);
$pdf->MultiCell(26, $tab2_lh, price($propale->remise), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + $tab2_lh*2);
$pdf->MultiCell(26, $tab2_lh, price($propale->total_ht), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + $tab2_lh*3);
$pdf->MultiCell(26, $tab2_lh, price($propale->total_tva), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + ($tab2_lh*4));
$pdf->MultiCell(26, $tab2_lh, price($propale->total_ttc), 1, 'R', 1);
if (defined("PROP_PDF_MESSAGE") && PROP_PDF_MESSAGE)
{ {
$pdf->SetXY (10, $tab2_top + 2); $this->error=$langs->trans("ErrorConstantNotDefined","PROPALE_OUTPUTDIR");
$pdf->SetFont('Arial','',10); return 0;
$pdf->MultiCell(120, 5, PROP_PDF_MESSAGE); }
}
}
$pdf->Output($file); function _tableau(&$pdf, $tab_top, $tab_height, $nexY)
return 1;
}
}
}
function _tableau(&$pdf, $tab_top, $tab_height, $nexY)
{ {
global $langs,$conf; global $langs,$conf;
$langs->load("main"); $langs->load("main");

View File

@ -41,7 +41,7 @@ class pdf_propale_vert extends ModelePDFPropales
/** \brief Constructeur /** \brief Constructeur
\param db handler accès base de donnée \param db handler accès base de donnée
*/ */
function pdf_propale_vert($db=0) function pdf_propale_vert($db=0)
{ {
$this->db = $db; $this->db = $db;
$this->name = "vert"; $this->name = "vert";
@ -66,177 +66,183 @@ class pdf_propale_vert extends ModelePDFPropales
} }
/** /**
\brief Fonction générant la propale sur le disque \brief Fonction générant la propale sur le disque
\param id id de la propale à générer \param propale Objet propal
\return int 1=ok, 0=ko \return int 1=ok, 0=ko
*/ */
function write_pdf_file($id) function write_pdf_file($propale)
{
global $user,$conf,$langs;
$propale = new Propal($this->db,"",$id);
if ($propale->fetch($id))
{ {
global $user,$conf,$langs;
if ($conf->propal->dir_output)
{ if ($conf->propal->dir_output)
$propref = sanitize_string($propale->ref);
$dir = $conf->propal->dir_output . "/" . $propref ;
if (! file_exists($dir))
{
if (create_exdir($dir) < 0)
{
$this->error=$langs->trans("ErrorCanNotCreateDir",$dir);
return 0;
}
}
}
else
{
$this->error=$langs->trans("ErrorConstantNotDefined","PROPALE_OUTPUTDIR");
return 0;
}
$propref = sanitize_string($propale->ref);
$file = $dir . "/" . $propref . ".pdf";
if (file_exists($dir))
{
$pdf=new FPDF('P','mm',$this->format);
$pdf->Open();
$pdf->AddPage();
$pdf->SetTitle($propale->ref);
$pdf->SetSubject("Proposition commerciale");
$pdf->SetCreator("Dolibarr ".DOL_VERSION);
$pdf->SetAuthor($user->fullname);
$this->_pagehead($pdf, $propale);
/*
*/
$tab_top = 100;
$tab_height = 140;
/*
*
*/
$pdf->SetFillColor(220,220,220);
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Arial','', 10);
$pdf->SetXY (10, $tab_top + 10 );
$iniY = $pdf->GetY();
$curY = $pdf->GetY();
$nexY = $pdf->GetY();
$nblignes = sizeof($propale->lignes);
for ($i = 0 ; $i < $nblignes ; $i++)
{ {
// Définition de l'objet $propal (pour compatibilite ascendante)
$curY = $nexY; if (! is_object($propale))
{
$pdf->SetXY (40, $curY ); $id = $propale;
$propale = new Propal($this->db,"",$id);
$pdf->MultiCell(90, 5, $propale->lignes[$i]->desc, 0, 'J', 0); $ret=$propale->fetch($id);
}
$nexY = $pdf->GetY();
// Définition de $dir et $file
$pdf->SetXY (10, $curY ); if ($propale->specimen)
$pdf->SetFont('Arial','', 8); {
$pdf->MultiCell(30, 5, $propale->lignes[$i]->ref, 0, 'L', 0); $dir = $conf->propal->dir_output;
$file = $dir . "/SPECIMEN.pdf";
$pdf->SetFont('Arial','', 10); }
$pdf->SetXY (132, $curY ); else
$pdf->MultiCell(10, 5, $propale->lignes[$i]->tva_tx, 0, 'C', 0); {
$propref = sanitize_string($propale->ref);
$pdf->SetXY (142, $curY ); $dir = $conf->propal->dir_output . "/" . $propref;
$pdf->MultiCell(8, 5, $propale->lignes[$i]->qty, 0, 'C'); $file = $dir . "/" . $propref . ".pdf";
}
$pdf->SetXY (150, $curY );
$pdf->MultiCell(16, 5, price($propale->lignes[$i]->subprice), 0, 'R', 0); if (! file_exists($dir))
{
$pdf->SetXY (166, $curY ); if (create_exdir($dir) < 0)
$pdf->MultiCell(14, 5, $propale->lignes[$i]->remise_percent."%", 0, 'R', 0); {
$this->error=$langs->trans("ErrorCanNotCreateDir",$dir);
$pdf->SetXY (180, $curY ); return 0;
$total = price($propale->lignes[$i]->price * $propale->lignes[$i]->qty); }
$pdf->MultiCell(20, 5, $total, 0, 'R', 0); }
$pdf->line(10, $curY, 200, $curY ); if (file_exists($dir))
{
if ($nexY > 240 && $i < $nblignes - 1)
{ $pdf=new FPDF('P','mm',$this->format);
$this->_tableau($pdf, $tab_top, $tab_height, $nexY); $pdf->Open();
$pdf->AddPage(); $pdf->AddPage();
$nexY = $iniY;
$this->_pagehead($pdf, $propale); $pdf->SetTitle($propale->ref);
$pdf->SetTextColor(0,0,0); $pdf->SetSubject("Proposition commerciale");
$pdf->SetFont('Arial','', 10); $pdf->SetCreator("Dolibarr ".DOL_VERSION);
} $pdf->SetAuthor($user->fullname);
$this->_pagehead($pdf, $propale);
/*
*/
$tab_top = 100;
$tab_height = 140;
/*
*
*/
$pdf->SetFillColor(220,220,220);
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Arial','', 10);
$pdf->SetXY (10, $tab_top + 10 );
$iniY = $pdf->GetY();
$curY = $pdf->GetY();
$nexY = $pdf->GetY();
$nblignes = sizeof($propale->lignes);
for ($i = 0 ; $i < $nblignes ; $i++)
{
$curY = $nexY;
$pdf->SetXY (40, $curY );
$pdf->MultiCell(90, 5, $propale->lignes[$i]->desc, 0, 'J', 0);
$nexY = $pdf->GetY();
$pdf->SetXY (10, $curY );
$pdf->SetFont('Arial','', 8);
$pdf->MultiCell(30, 5, $propale->lignes[$i]->ref, 0, 'L', 0);
$pdf->SetFont('Arial','', 10);
$pdf->SetXY (132, $curY );
$pdf->MultiCell(10, 5, $propale->lignes[$i]->tva_tx, 0, 'C', 0);
$pdf->SetXY (142, $curY );
$pdf->MultiCell(8, 5, $propale->lignes[$i]->qty, 0, 'C');
$pdf->SetXY (150, $curY );
$pdf->MultiCell(16, 5, price($propale->lignes[$i]->subprice), 0, 'R', 0);
$pdf->SetXY (166, $curY );
$pdf->MultiCell(14, 5, $propale->lignes[$i]->remise_percent."%", 0, 'R', 0);
$pdf->SetXY (180, $curY );
$total = price($propale->lignes[$i]->price * $propale->lignes[$i]->qty);
$pdf->MultiCell(20, 5, $total, 0, 'R', 0);
$pdf->line(10, $curY, 200, $curY );
if ($nexY > 240 && $i < $nblignes - 1)
{
$this->_tableau($pdf, $tab_top, $tab_height, $nexY);
$pdf->AddPage();
$nexY = $iniY;
$this->_pagehead($pdf, $propale);
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Arial','', 10);
}
}
$this->_tableau($pdf, $tab_top, $tab_height, $nexY);
/*
*
*/
$tab2_top = 241;
$tab2_lh = 7;
$tab2_height = $tab2_lh * 4;
$pdf->SetFont('Arial','', 11);
$pdf->Rect(132, $tab2_top, 68, $tab2_height);
$pdf->line(132, $tab2_top + $tab2_height - ($tab2_lh*3), 200, $tab2_top + $tab2_height - ($tab2_lh*3) );
$pdf->line(132, $tab2_top + $tab2_height - ($tab2_lh*2), 200, $tab2_top + $tab2_height - ($tab2_lh*2) );
$pdf->line(132, $tab2_top + $tab2_height - $tab2_lh, 200, $tab2_top + $tab2_height - $tab2_lh );
$pdf->line(174, $tab2_top, 174, $tab2_top + $tab2_height);
$pdf->SetXY (132, $tab2_top + 0);
$pdf->MultiCell(42, $tab2_lh, $langs->trans("TotalHT"), 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + $tab2_lh);
$pdf->MultiCell(42, $tab2_lh, $langs->trans("GlobalDiscount"), 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + $tab2_lh*2);
$pdf->MultiCell(42, $tab2_lh, "Total HT après remise", 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + $tab2_lh*3);
$pdf->MultiCell(42, $tab2_lh, $langs->trans("TotalVAT"), 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + ($tab2_lh*4));
$pdf->MultiCell(42, $tab2_lh, $langs->trans("TotalTTC"), 1, 'R', 1);
$pdf->SetXY (174, $tab2_top + 0);
$pdf->MultiCell(26, $tab2_lh, price($propale->total_ht + $propale->remise), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + $tab2_lh);
$pdf->MultiCell(26, $tab2_lh, price($propale->remise), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + $tab2_lh*2);
$pdf->MultiCell(26, $tab2_lh, price($propale->total_ht), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + $tab2_lh*3);
$pdf->MultiCell(26, $tab2_lh, price($propale->total_tva), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + ($tab2_lh*4));
$pdf->MultiCell(26, $tab2_lh, price($propale->total_ttc), 1, 'R', 1);
/*
*
*/
$pdf->Output($file);
return 1;
}
} }
$this->_tableau($pdf, $tab_top, $tab_height, $nexY);
/*
*
*/
$tab2_top = 241;
$tab2_lh = 7;
$tab2_height = $tab2_lh * 4;
$pdf->SetFont('Arial','', 11);
$pdf->Rect(132, $tab2_top, 68, $tab2_height);
$pdf->line(132, $tab2_top + $tab2_height - ($tab2_lh*3), 200, $tab2_top + $tab2_height - ($tab2_lh*3) );
$pdf->line(132, $tab2_top + $tab2_height - ($tab2_lh*2), 200, $tab2_top + $tab2_height - ($tab2_lh*2) );
$pdf->line(132, $tab2_top + $tab2_height - $tab2_lh, 200, $tab2_top + $tab2_height - $tab2_lh );
$pdf->line(174, $tab2_top, 174, $tab2_top + $tab2_height);
$pdf->SetXY (132, $tab2_top + 0);
$pdf->MultiCell(42, $tab2_lh, $langs->trans("TotalHT"), 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + $tab2_lh);
$pdf->MultiCell(42, $tab2_lh, $langs->trans("GlobalDiscount"), 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + $tab2_lh*2);
$pdf->MultiCell(42, $tab2_lh, "Total HT après remise", 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + $tab2_lh*3);
$pdf->MultiCell(42, $tab2_lh, $langs->trans("TotalVAT"), 0, 'R', 0);
$pdf->SetXY (132, $tab2_top + ($tab2_lh*4));
$pdf->MultiCell(42, $tab2_lh, $langs->trans("TotalTTC"), 1, 'R', 1);
$pdf->SetXY (174, $tab2_top + 0);
$pdf->MultiCell(26, $tab2_lh, price($propale->total_ht + $propale->remise), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + $tab2_lh);
$pdf->MultiCell(26, $tab2_lh, price($propale->remise), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + $tab2_lh*2);
$pdf->MultiCell(26, $tab2_lh, price($propale->total_ht), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + $tab2_lh*3);
$pdf->MultiCell(26, $tab2_lh, price($propale->total_tva), 0, 'R', 0);
$pdf->SetXY (174, $tab2_top + ($tab2_lh*4));
$pdf->MultiCell(26, $tab2_lh, price($propale->total_ttc), 1, 'R', 1);
/*
*
*/
$pdf->Output($file);
return 1;
}
} }
}
function _tableau(&$pdf, $tab_top, $tab_height, $nexY) function _tableau(&$pdf, $tab_top, $tab_height, $nexY)
{ {