mirror of
https://github.com/Dolibarr/dolibarr.git
synced 2025-12-25 02:41:26 +01:00
390 lines
12 KiB
PHP
390 lines
12 KiB
PHP
<?php
|
||
/* Copyright (C) 2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||
* Copyright (C) 2009 Laurent Destailleur <eldy@users.sourceforge.net>
|
||
*
|
||
* 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/cheque/pdf/pdf_blochet.class.php
|
||
* \ingroup banque
|
||
* \brief File to build cheque deposit receipts
|
||
* \version $Id$
|
||
*/
|
||
|
||
require_once(DOL_DOCUMENT_ROOT.'/lib/pdf.lib.php');
|
||
require_once(DOL_DOCUMENT_ROOT.'/includes/fpdf/fpdfi/fpdi_protection.php');
|
||
require_once(DOL_DOCUMENT_ROOT."/lib/company.lib.php");
|
||
require_once(DOL_DOCUMENT_ROOT."/includes/modules/cheque/pdf/modules_chequereceipts.php");
|
||
|
||
|
||
/**
|
||
* \class BordereauChequeBlochet
|
||
* \brief Class of file to build cheque deposit receipts
|
||
*/
|
||
class BordereauChequeBlochet extends ModeleChequeReceipts
|
||
{
|
||
var $error='';
|
||
|
||
var $emetteur; // Objet societe qui emet
|
||
|
||
/**
|
||
* \brief Constructeur
|
||
*/
|
||
function BordereauChequeBlochet($db)
|
||
{
|
||
global $conf,$langs,$mysoc;
|
||
|
||
$langs->load("main");
|
||
$langs->load("bills");
|
||
|
||
$this->db = $db;
|
||
$this->name = "blochet";
|
||
|
||
$this->tab_top = 60;
|
||
|
||
// 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=20;
|
||
$this->marge_haute=10;
|
||
$this->marge_basse=10;
|
||
|
||
// Recupere emmetteur
|
||
$this->emetteur=$mysoc;
|
||
if (! $this->emetteur->pays_code) $this->emetteur->pays_code=substr($langs->defaultlang,-2); // Par defaut, si n'<27>tait pas d<>fini
|
||
|
||
// Defini position des colonnes
|
||
$this->line_height = 5;
|
||
$this->line_per_page = 40;
|
||
$this->tab_height = 200; //$this->line_height * $this->line_per_page;
|
||
}
|
||
|
||
/**
|
||
* Fonction generant le rapport sur le disque
|
||
* @param _dir Directory
|
||
* @param number Number
|
||
* @param outputlangs Lang output object
|
||
* @return int 1=ok, 0=ko
|
||
*/
|
||
function write_file($_dir, $number, $outputlangs)
|
||
{
|
||
global $user,$conf,$langs;
|
||
|
||
if (! is_object($outputlangs)) $outputlangs=$langs;
|
||
// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
|
||
$sav_charset_output=$outputlangs->charset_output;
|
||
if (!class_exists('TCPDF')) $outputlangs->charset_output='ISO-8859-1';
|
||
|
||
$outputlangs->load("main");
|
||
$outputlangs->load("companies");
|
||
$outputlangs->load("bills");
|
||
$outputlangs->load("products");
|
||
$outputlangs->load("compta");
|
||
|
||
$dir = $_dir . "/".get_exdir($number,2,1).$number;
|
||
|
||
if (! is_dir($dir))
|
||
{
|
||
$result=create_exdir($dir);
|
||
|
||
if ($result < 0)
|
||
{
|
||
$this->error=$langs->transnoentities("ErrorCanNotCreateDir",$dir);
|
||
return -1;
|
||
}
|
||
}
|
||
|
||
$month = sprintf("%02d",$month);
|
||
$year = sprintf("%04d",$year);
|
||
$_file = $dir . "/bordereau-".$number.".pdf";
|
||
|
||
// Create PDF instance
|
||
$pdf=pdf_getInstance($this->format);
|
||
|
||
if (class_exists('TCPDF'))
|
||
{
|
||
$pdf->setPrintHeader(false);
|
||
$pdf->setPrintFooter(false);
|
||
}
|
||
$pdf->SetFont(pdf_getPDFFont($outputlangs));
|
||
|
||
$pdf->Open();
|
||
$pagenb=0;
|
||
$pdf->SetDrawColor(128,128,128);
|
||
|
||
$pdf->SetTitle($outputlangs->transnoentities("CheckReceipt")." ".$number);
|
||
$pdf->SetSubject($outputlangs->transnoentities("CheckReceipt"));
|
||
$pdf->SetCreator("Dolibarr ".DOL_VERSION);
|
||
$pdf->SetAuthor($outputlangs->convToOutputCharset($user->getFullName($outputlangs)));
|
||
$pdf->SetKeyWords($outputlangs->transnoentities("CheckReceipt")." ".$number);
|
||
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);
|
||
|
||
$nboflines=sizeof($this->lines);
|
||
// Define nb of page
|
||
$pages = intval($nboflines / $this->line_per_page);
|
||
if (($nboflines % $this->line_per_page)>0)
|
||
{
|
||
$pages++;
|
||
}
|
||
if ($pages == 0)
|
||
{
|
||
// force to build at least one page if report has no lines
|
||
$pages = 1;
|
||
}
|
||
|
||
$pdf->AddPage();
|
||
$pagenb++;
|
||
$this->Header($pdf, $pagenb, $pages, $outputlangs);
|
||
|
||
$this->Body($pdf, $pagenb, $pages, $outputlangs);
|
||
|
||
// Pied de page
|
||
$this->_pagefoot($pdf,'',$outputlangs);
|
||
$pdf->AliasNbPages();
|
||
|
||
$pdf->Close();
|
||
|
||
$pdf->Output($_file,'F');
|
||
if (! empty($conf->global->MAIN_UMASK))
|
||
@chmod($file, octdec($conf->global->MAIN_UMASK));
|
||
|
||
$outputlangs->charset_output=$sav_charset_output;
|
||
return 1; // Pas d'erreur
|
||
}
|
||
|
||
|
||
/**
|
||
* Generate Header
|
||
* @param pdf Pdf object
|
||
* @param page Current page number
|
||
* @param pages Total number of pages
|
||
*/
|
||
function Header(&$pdf, $page, $pages, $outputlangs)
|
||
{
|
||
global $langs;
|
||
$default_font_size = pdf_getPDFFontSize($outputlangs);
|
||
|
||
$outputlangs->load("compta");
|
||
$outputlangs->load("banks");
|
||
|
||
$title = $outputlangs->transnoentities("CheckReceipt");
|
||
$pdf->SetFont('','B', $default_font_size);
|
||
$pdf->SetXY(10,8);
|
||
$pdf->MultiCell(0,2,$title,0,'L');
|
||
|
||
$pdf->SetFont('','', $default_font_size);
|
||
$pdf->SetXY(10,15);
|
||
$pdf->MultiCell(22,2,$outputlangs->transnoentities("Ref"),0,'L');
|
||
$pdf->SetXY(32,15);
|
||
$pdf->SetFont('','', $default_font_size);
|
||
$pdf->MultiCell(60, 2, $outputlangs->convToOutputCharset($this->number), 0, 'L');
|
||
|
||
$pdf->SetFont('','', $default_font_size);
|
||
$pdf->SetXY(10,20);
|
||
$pdf->MultiCell(22,2,$outputlangs->transnoentities("Date"),0,'L');
|
||
$pdf->SetXY(32,20);
|
||
$pdf->SetFont('','', $default_font_size);
|
||
$pdf->MultiCell(60, 2, dol_print_date($this->date,"day",false,$outputlangs));
|
||
|
||
$pdf->SetFont('','', $default_font_size);
|
||
$pdf->SetXY(10,26);
|
||
$pdf->MultiCell(22,2,$outputlangs->transnoentities("Owner"),0,'L');
|
||
$pdf->SetFont('','', $default_font_size);
|
||
$pdf->SetXY(32,26);
|
||
$pdf->MultiCell(60,2,$outputlangs->convToOutputCharset($this->account->proprio),0,'L');
|
||
|
||
$pdf->SetFont('','', $default_font_size);
|
||
$pdf->SetXY(10,32);
|
||
$pdf->MultiCell(0,2,$outputlangs->transnoentities("Account"),0,'L');
|
||
pdf_bank($pdf,$outputlangs,32,32,$this->account,1);
|
||
|
||
$pdf->SetFont('','', $default_font_size);
|
||
$pdf->SetXY(114,15);
|
||
$pdf->MultiCell(40, 2, $outputlangs->transnoentities("Signature"), 0, 'L');
|
||
|
||
$pdf->Rect(9, 14, 192, 35);
|
||
$pdf->line(9, 19, 112, 19);
|
||
$pdf->line(9, 25, 112, 25);
|
||
//$pdf->line(9, 31, 201, 31);
|
||
$pdf->line(9, 31, 112, 31);
|
||
|
||
$pdf->line(30, 14, 30, 49);
|
||
$pdf->line(112, 14, 112, 49);
|
||
|
||
// Number of cheques
|
||
$posy=51;
|
||
$pdf->Rect(9, $posy, 192, 6);
|
||
$pdf->line(55, $posy, 55, $posy+6);
|
||
$pdf->line(140, $posy, 140, $posy+6);
|
||
$pdf->line(170, $posy, 170, $posy+6);
|
||
|
||
$pdf->SetFont('','', $default_font_size);
|
||
$pdf->SetXY(10,$posy+1);
|
||
$pdf->MultiCell(40, 2, $outputlangs->transnoentities("NumberOfCheques"), 0, 'L');
|
||
|
||
$pdf->SetFont('','B', $default_font_size);
|
||
$pdf->SetXY(57,$posy+1);
|
||
$pdf->MultiCell(40, 2, $this->nbcheque, 0, 'L');
|
||
|
||
$pdf->SetFont('','', $default_font_size);
|
||
$pdf->SetXY(148,$posy+1);
|
||
$pdf->MultiCell(40, 2, $langs->trans("Total"));
|
||
|
||
$pdf->SetFont('','B', $default_font_size);
|
||
$pdf->SetXY (170, $posy+1);
|
||
$pdf->MultiCell(31, 2, price($this->amount), 0, 'C', 0);
|
||
|
||
// Tableau
|
||
$pdf->SetFont('','', $default_font_size - 2);
|
||
$pdf->SetXY (11, $this->tab_top+2);
|
||
$pdf->MultiCell(40,2,$outputlangs->transnoentities("Num"), 0, 'L');
|
||
$pdf->line(40, $this->tab_top, 40, $this->tab_top + $this->tab_height + 10);
|
||
|
||
$pdf->SetXY (41, $this->tab_top+2);
|
||
$pdf->MultiCell(40,2,$outputlangs->transnoentities("Bank"), 0, 'L');
|
||
$pdf->line(100, $this->tab_top, 100, $this->tab_top + $this->tab_height + 10);
|
||
|
||
$pdf->SetXY (101, $this->tab_top+2);
|
||
$pdf->MultiCell(40,2,$outputlangs->transnoentities("CheckTransmitter"), 0, 'L');
|
||
$pdf->line(180, $this->tab_top, 180, $this->tab_top + $this->tab_height + 10);
|
||
|
||
$pdf->SetXY (180, $this->tab_top+2);
|
||
$pdf->MultiCell(20,2,$outputlangs->transnoentities("Amount"), 0, 'R');
|
||
$pdf->line(9, $this->tab_top + 8, 201, $this->tab_top + 8);
|
||
|
||
$pdf->Rect(9, $this->tab_top, 192, $this->tab_height + 10);
|
||
}
|
||
|
||
|
||
/**
|
||
* Output array
|
||
*/
|
||
function Body(&$pdf, $pagenb, $pages, $outputlangs)
|
||
{
|
||
// x=10 - Num
|
||
// x=30 - Banque
|
||
// x=100 - Emetteur
|
||
$default_font_size = pdf_getPDFFontSize($outputlangs);
|
||
$pdf->SetFont('','', $default_font_size - 1);
|
||
$oldprowid = 0;
|
||
$pdf->SetFillColor(220,220,220);
|
||
$yp = 0;
|
||
$lineinpage=0;
|
||
for ($j = 0 ; $j < sizeof($this->lines) ; $j++)
|
||
{
|
||
$lineinpage++;
|
||
|
||
$pdf->SetXY (1, $this->tab_top + 10 + $yp);
|
||
$pdf->MultiCell(8, $this->line_height, $j+1, 0, 'R', 0);
|
||
|
||
$pdf->SetXY (10, $this->tab_top + 10 + $yp);
|
||
$pdf->MultiCell(30, $this->line_height, $this->lines[$j]->num_chq?$this->lines[$j]->num_chq:'', 0, 'L', 0);
|
||
|
||
$pdf->SetXY (40, $this->tab_top + 10 + $yp);
|
||
$pdf->MultiCell(70, $this->line_height, dol_trunc($outputlangs->convToOutputCharset($this->lines[$j]->bank_chq),44), 0, 'L', 0);
|
||
|
||
$pdf->SetXY (100, $this->tab_top + 10 + $yp);
|
||
$pdf->MultiCell(80, $this->line_height, dol_trunc($outputlangs->convToOutputCharset($this->lines[$j]->emetteur_chq),50), 0, 'L', 0);
|
||
|
||
$pdf->SetXY (180, $this->tab_top + 10 + $yp);
|
||
$pdf->MultiCell(20, $this->line_height, price($this->lines[$j]->amount_chq), 0, 'R', 0);
|
||
|
||
$yp = $yp + $this->line_height;
|
||
|
||
if ($lineinpage >= $this->line_per_page && $j < (sizeof($this->lines)-1))
|
||
{
|
||
$lineinpage=0; $yp=0;
|
||
|
||
// New page
|
||
$pdf->AddPage();
|
||
$pagenb++;
|
||
$this->Header($pdf, $pagenb, $pages, $outputlangs);
|
||
$pdf->SetFont('','', $default_font_size - 1);
|
||
$pdf->MultiCell(0, 3, ''); // Set interline to 3
|
||
$pdf->SetTextColor(0,0,0);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* \brief Show footer of page
|
||
* \param pdf Object PDF
|
||
* \param object Object cheque receipt
|
||
* \param outputlangs Object lang for output
|
||
* \remarks Need this->emetteur object
|
||
*/
|
||
function _pagefoot(&$pdf,$object,$outputlangs)
|
||
{
|
||
global $conf;
|
||
$default_font_size = pdf_getPDFFontSize($outputlangs);
|
||
|
||
//return pdf_pagefoot($pdf,$outputlangs,'BANK_CHEQUERECEIPT_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object);
|
||
$paramfreetext='BANK_CHEQUERECEIPT_FREE_TEXT';
|
||
$marge_basse=$this->marge_basse;
|
||
$marge_gauche=$this->marge_gauche;
|
||
$page_hauteur=$this->page_hauteur;
|
||
|
||
// Line of free text
|
||
$line=(! empty($conf->global->$paramfreetext))?$outputlangs->convToOutputCharset($conf->global->$paramfreetext):"";
|
||
|
||
$pdf->SetFont('','', $default_font_size - 3);
|
||
$pdf->SetDrawColor(224,224,224);
|
||
|
||
// On positionne le debut du bas de page selon nbre de lignes de ce bas de page
|
||
$nbofline=dol_nboflines_bis($line,0,$outputlangs->charset_output);
|
||
//print 'e'.$line.'t'.dol_nboflines($line);exit;
|
||
$posy=$marge_basse + ($nbofline*3) + ($line1?3:0) + ($line2?3:0);
|
||
|
||
if ($line) // Free text
|
||
{
|
||
$pdf->SetXY($marge_gauche,-$posy);
|
||
$pdf->MultiCell(20000, 3, $line, 0, 'L', 0); // Use a large value 20000, to not have automatic wrap. This make user understand, he need to add CR on its text.
|
||
$posy-=($nbofline*3); // 6 of ligne + 3 of MultiCell
|
||
}
|
||
|
||
$pdf->SetY(-$posy);
|
||
$pdf->line($marge_gauche, $page_hauteur-$posy, 200, $page_hauteur-$posy);
|
||
$posy--;
|
||
|
||
if ($line1)
|
||
{
|
||
$pdf->SetXY($marge_gauche,-$posy);
|
||
$pdf->MultiCell(200, 2, $line1, 0, 'C', 0);
|
||
}
|
||
|
||
if ($line2)
|
||
{
|
||
$posy-=3;
|
||
$pdf->SetXY($marge_gauche,-$posy);
|
||
$pdf->MultiCell(200, 2, $line2, 0, 'C', 0);
|
||
}
|
||
|
||
$pdf->SetXY(-20,-$posy);
|
||
$pdf->MultiCell(11, 2, $pdf->PageNo().'/{nb}', 0, 'R', 0);
|
||
}
|
||
|
||
}
|
||
|
||
?>
|