Hi,
In the php file, could you put
var_dump($object);
You will have all the values inside the object to see if the total HT by taxes exist or not.
Hi,
In the php file, could you put
var_dump($object);
You will have all the values inside the object to see if the total HT by taxes exist or not.
hello
All value have without taxes
This code in php ;
<?php
/* Copyright (C) 2004-2014 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2008 Raphael Bertrand <raphael.bertrand@resultic.fr>
* Copyright (C) 2010-2013 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2012 Christophe Battarel <christophe.battarel@altairis.fr>
* Copyright (C) 2014-2017 Nikos Drosis Technicks ICT <info@technicks.eu>
*
* 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 3 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, see <http://www.gnu.org/licenses/>.
* or see http://www.gnu.org/
*/
/**
* \file core/modules/facture/doc/pdf_moon_invoicegr.modules.php
* \ingroup invoicegr
* \brief File of class to generate customers invoices from moon model
*/
require_once DOL_DOCUMENT_ROOT.'/core/modules/facture/modules_facture.php';
require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
dol_include_once('/invoicegr/lib/pdf.lib.php');
dol_include_once('/invoicegr/lib/invoicegr.lib.php');
/**
* Class to manage PDF invoice template Moon
*/
class pdf_moon_invoicegr extends ModelePDFFactures
{
var $db;
var $name;
var $description;
var $type;
var $phpmin = array(4,3,0); // Minimum version of PHP required by module
var $version = 'dolibarr';
var $page_largeur;
var $page_hauteur;
var $format;
var $marge_gauche;
var $marge_droite;
var $marge_haute;
var $marge_basse;
var $emetteur; // Objet societe qui emet
/**
* @var bool Situation invoice type
*/
public $situationinvoice;
/**
* @var float X position for the situation progress column
*/
public $posxprogress;
/**
* Constructor
*
* @param DoliDB $db Database handler
*/
function __construct($db)
{
global $conf,$langs,$mysoc;
$langs->load("main");
$langs->load("bills");
$langs->load("invoicegr@invoicegr");
$this->db = $db;
$this->name = "ΤΙΜΟΛΟΓΙΟ-ΔΕΛΤΙΟ ΑΠΟΣΤΟΛΗΣ";
$this->description = $langs->trans('InvoicemoonDescription');
// Dimension page pour format A4
$this->type = 'pdf';
$formatarray=pdf_getFormatgr();
$this->page_largeur = $formatarray['width'];
$this->page_hauteur = $formatarray['height'];
$this->format = array($this->page_largeur,$this->page_hauteur);
$this->marge_gauche=isset($conf->global->MAIN_PDF_MARGIN_LEFT)?$conf->global->MAIN_PDF_MARGIN_LEFT:10;
$this->marge_droite=isset($conf->global->MAIN_PDF_MARGIN_RIGHT)?$conf->global->MAIN_PDF_MARGIN_RIGHT:10;
$this->marge_haute =isset($conf->global->MAIN_PDF_MARGIN_TOP)?$conf->global->MAIN_PDF_MARGIN_TOP:10;
$this->marge_basse =isset($conf->global->MAIN_PDF_MARGIN_BOTTOM)?$conf->global->MAIN_PDF_MARGIN_BOTTOM: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; // Support credit notes
$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;
// Get source company
$this->emetteur=$mysoc;
if (empty($this->emetteur->country_code)) $this->emetteur->country_code=substr($langs->defaultlang,-2); // By default, if was not defined
// Define position of columns
$this->posxdesc=$this->marge_gauche+1;
if($conf->global->PRODUCT_USE_UNITS)
{
$this->posxtva=99;
$this->posxup=114;
$this->posxqty=133;
$this->posxunit=150;
}
else
{
$this->posxtva=112;
$this->posxup=126;
$this->posxqty=145;
}
$this->posxdiscount=162;
$this->posxprogress=174; // Only displayed for situation invoices
$this->postotalht=174;
if (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT)) $this->posxtva=$this->posxup;
$this->posxpicture=$this->posxtva - (empty($conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH)?20:$conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH); // width of images
if ($this->page_largeur < 210) // To work with US executive format
{
$this->posxpicture-=20;
$this->posxtva-=20;
$this->posxup-=20;
$this->posxqty-=20;
$this->posxdiscount-=20;
$this->postotalht-=20;
}
$this->tva=array();
$this->localtax1=array();
$this->localtax2=array();
$this->atleastoneratenotnull=0;
$this->atleastonediscount=0;
$this->situationinvoice=False;
}
/**
* Function to build pdf onto disk
*
* @param Object $object Object to generate
* @param Translate $outputlangs Lang output object
* @param string $srctemplatepath Full path of source filename for generator using a template file
* @param int $hidedetails Do not show line details
* @param int $hidedesc=1 Do not show desc
* @param int $hideref Do not show ref
* @return int 1=OK, 0=KO
*/
function write_file($object,$outputlangs,$srctemplatepath='',$hidedetails=0,$hidedesc=1,$hideref=0)
{
global $user,$langs,$conf,$mysoc,$db,$hookmanager;
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
if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
$outputlangs->load("main");
$outputlangs->load("dict");
$outputlangs->load("companies");
$outputlangs->load("bills");
$outputlangs->load("products");
$nblignes = count($object->lines);
// Loop on each lines to detect if there is at least one image to show
$realpatharray=array();
if (! empty($conf->global->MAIN_GENERATE_INVOICES_WITH_PICTURE))
{
for ($i = 0 ; $i < $nblignes ; $i++)
{
if (empty($object->lines[$i]->fk_product)) continue;
$objphoto = new Product($this->db);
$objphoto->fetch($object->lines[$i]->fk_product);
$pdir = get_exdir($object->lines[$i]->fk_product,2,0,0,$objphoto,'product') . $object->lines[$i]->fk_product ."/photos/";
$dir = $conf->product->dir_output.'/'.$pdir;
$realpath='';
foreach ($objphoto->liste_photos($dir,1) as $key => $obj)
{
$filename=$obj['photo'];
//if ($obj['photo_vignette']) $filename='thumbs/'.$obj['photo_vignette'];
$realpath = $dir.$filename;
break;
}
if ($realpath) $realpatharray[$i]=$realpath;
}
}
if (count($realpatharray) == 0) $this->posxpicture=$this->posxtva;
if ($conf->facture->dir_output)
{
$object->fetch_thirdparty();
$deja_regle = $object->getSommePaiement();
$amount_credit_notes_included = $object->getSumCreditNotesUsed();
$amount_deposits_included = $object->getSumDepositsUsed();
// Definition of $dir and $file
if ($object->specimen)
{
$dir = $conf->facture->dir_output;
$file = $dir . "/SPECIMEN.pdf";
}
else
{
$objectref = dol_sanitizeFileName($object->ref);
$dir = $conf->facture->dir_output . "/" . $objectref;
$file = $dir . "/" . $objectref . ".pdf";
}
if (! file_exists($dir))
{
if (dol_mkdir($dir) < 0)
{
$this->error=$langs->transnoentities("ErrorCanNotCreateDir",$dir);
return 0;
}
}
if (file_exists($dir))
{
// Add pdfgeneration hook
if (! is_object($hookmanager))
{
include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php';
$hookmanager=new HookManager($this->db);
}
$hookmanager->initHooks(array('pdfgeneration'));
$parameters=array('file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs);
global $action;
$reshook=$hookmanager->executeHooks('beforePDFCreation',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
// Set nblignes with the new facture lines content after hook
$nblignes = count($object->lines);
$pdf=pdf_getInstancegr($this->format);
$default_font_size = pdf_getPDFFontSizegr($outputlangs); // Must be after pdf_getInstance
$heightforinfotot = 50; // Height reserved to output the info and total part
$heightforfreetext= (isset($conf->global->MAIN_PDF_FREETEXT_HEIGHT)?$conf->global->MAIN_PDF_FREETEXT_HEIGHT:5); // Height reserved to output the free text on last page
$heightforfooter = $this->marge_basse + 8; // Height reserved to output the footer (value include bottom margin)
$pdf->SetAutoPageBreak(1,0);
if (class_exists('TCPDF'))
{
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
}
$pdf->SetFont(pdf_getPDFFontgr($outputlangs));
// Set path to the background PDF File
if (empty($conf->global->MAIN_DISABLE_FPDI) && ! empty($conf->global->MAIN_ADD_PDF_BACKGROUND))
{
$pagecount = $pdf->setSourceFile($conf->mycompany->dir_output.'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND);
$tplidx = $pdf->importPage(1);
}
$pdf->Open();
$pagenb=0;
$pdf->SetDrawColor(128,128,128);
$pdf->SetTitle($outputlangs->convToOutputCharset($object->ref));
$pdf->SetSubject($outputlangs->transnoentities("Invoice"));
$pdf->SetCreator("Dolibarr ".DOL_VERSION);
$pdf->SetAuthor($outputlangs->convToOutputCharset($user->getFullName($outputlangs)));
$pdf->SetKeyWords($outputlangs->convToOutputCharset($object->ref)." ".$outputlangs->transnoentities("Invoice"));
if (! empty($conf->global->MAIN_DISABLE_PDF_COMPRESSION)) $pdf->SetCompression(false);
$pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite); // Left, Top, Right
// Positionne $this->atleastonediscount si on a au moins une remise
for ($i = 0 ; $i < $nblignes ; $i++)
{
if ($object->lines[$i]->remise_percent)
{
$this->atleastonediscount++;
}
}
if (empty($this->atleastonediscount) && empty($conf->global->PRODUCT_USE_UNITS))
{
$this->posxpicture+=($this->postotalht - $this->posxdiscount);
$this->posxtva+=($this->postotalht - $this->posxdiscount);
$this->posxup+=($this->postotalht - $this->posxdiscount);
$this->posxqty+=($this->postotalht - $this->posxdiscount);
$this->posxdiscount+=($this->postotalht - $this->posxdiscount);
//$this->postotalht;
}
// Situation invoice handling
if ($object->situation_cycle_ref)
{
$this->situationinvoice = True;
$progress_width = 14;
$this->posxtva -= $progress_width;
$this->posxup -= $progress_width;
$this->posxqty -= $progress_width;
$this->posxdiscount -= $progress_width;
$this->posxprogress -= $progress_width;
}
// New page
$pdf->AddPage();
if (! empty($tplidx)) $pdf->useTemplate($tplidx);
$pagenb++;
$this->_pagehead($pdf, $object, 1, $outputlangs);
$pdf->SetFont('','', $default_font_size - 1);
$pdf->MultiCell(0, 3, ''); // Set interline to 3
$pdf->SetTextColor(0,0,0);
$tab_top = 90;
$tab_top_newpage = (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)?42:10);
$tab_height = 130;
$tab_height_newpage = 150;
// Incoterm
$height_incoterms = 0;
if ($conf->incoterm->enabled)
{
$desc_incoterms = $object->getIncotermsForPDF();
if ($desc_incoterms)
{
$tab_top = 88;
$pdf->SetFont('','', $default_font_size - 1);
$pdf->writeHTMLCell(190, 3, $this->posxdesc-1, $tab_top-1, dol_htmlentitiesbr($desc_incoterms), 0, 1);
$nexY = $pdf->GetY();
$height_incoterms=$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_incoterms+1);
$tab_top = $nexY+6;
$height_incoterms += 4;
}
}
// Affiche notes
$notetoshow=empty($object->note_public)?'':$object->note_public;
if (! empty($conf->global->MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE))
{
// Get first sale rep
if (is_object($object->thirdparty))
{
$salereparray=$object->thirdparty->getSalesRepresentatives($user);
$salerepobj=new User($this->db);
$salerepobj->fetch($salereparray[0]['id']);
if (! empty($salerepobj->signature)) $notetoshow=dol_concatdesc($notetoshow, $salerepobj->signature);
}
}
if ($notetoshow)
{
$tab_top = 88 + $height_incoterms;
$pdf->SetFont('','', $default_font_size - 1);
$pdf->writeHTMLCell(190, 3, $this->posxdesc-1, $tab_top, dol_htmlentitiesbr($notetoshow), 0, 1);
$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;
$pdf->SetFont('','', $default_font_size - 1); // Into loop to work with multipage
$pdf->SetTextColor(0,0,0);
// Define size of image if we need it
$imglinesize=array();
if (! empty($realpatharray[$i])) $imglinesize=pdf_getSizeForImage($realpatharray[$i]);
$pdf->setTopMargin($tab_top_newpage);
$pdf->setPageOrientation('', 1, $heightforfooter+$heightforfreetext+$heightforinfotot); // The only function to edit the bottom margin of current page to set it.
$pageposbefore=$pdf->getPage();
$showpricebeforepagebreak=1;
$posYAfterImage=0;
$posYAfterDescription=0;
// We start with Photo of product line
if (isset($imglinesize['width']) && isset($imglinesize['height']) && ($curY + $imglinesize['height']) > ($this->page_hauteur-($heightforfooter+$heightforfreetext+$heightforinfotot))) // If photo too high, we moved completely on new page
{
$pdf->AddPage('','',true);
if (! empty($tplidx)) $pdf->useTemplate($tplidx);
if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
$pdf->setPage($pageposbefore+1);
$curY = $tab_top_newpage;
$showpricebeforepagebreak=0;
}
if (isset($imglinesize['width']) && isset($imglinesize['height']))
{
$curX = $this->posxpicture-1;
$pdf->Image($realpatharray[$i], $curX + (($this->posxtva-$this->posxpicture-$imglinesize['width'])/2), $curY, $imglinesize['width'], $imglinesize['height'], '', '', '', 2, 300); // Use 300 dpi
// $pdf->Image does not increase value return by getY, so we save it manually
$posYAfterImage=$curY+$imglinesize['height'];
}
// Description of product line
$curX = $this->posxdesc-1;
$showpricebeforepagebreak=1;
$pdf->startTransaction();
pdf_writelinedescgr($pdf,$object,$i,$outputlangs,$this->posxtva-$curX,3,$curX,$curY,$hideref,$hidedesc=1);
$pageposafter=$pdf->getPage();
if ($pageposafter > $pageposbefore) // There is a pagebreak
{
$pdf->rollbackTransaction(true);
$pageposafter=$pageposbefore;
//print $pageposafter.'-'.$pageposbefore;exit;
$pdf->setPageOrientation('', 1, $heightforfooter); // The only function to edit the bottom margin of current page to set it.
pdf_writelinedescgr($pdf,$object,$i,$outputlangs,$this->posxtva-$curX,4,$curX,$curY,$hideref,$hidedesc=1);
$pageposafter=$pdf->getPage();
$posyafter=$pdf->GetY();
//var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit;
if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text
{
if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page
{
$pdf->AddPage('','',true);
if (! empty($tplidx)) $pdf->useTemplate($tplidx);
if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
$pdf->setPage($pageposafter+1);
}
}
else
{
// We found a page break
$showpricebeforepagebreak=0;
}
}
else // No pagebreak
{
$pdf->commitTransaction();
}
$posYAfterDescription=$pdf->GetY();
$nexY = $pdf->GetY();
$pageposafter=$pdf->getPage();
$pdf->setPage($pageposbefore);
$pdf->setTopMargin($this->marge_haute);
$pdf->setPageOrientation('', 1, 0); // The only function to edit the bottom margin of current page to set it.
// We suppose that a too long description or photo were moved completely on next page
if ($pageposafter > $pageposbefore && empty($showpricebeforepagebreak)) {
$pdf->setPage($pageposafter); $curY = $tab_top_newpage;
}
$pdf->SetFont('','', $default_font_size - 1); // On repositionne la police par defaut
// VAT Rate
if (empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT))
{
$vat_rate = pdf_getlinevatrategr($object, $i, $outputlangs, $hidedetails);
$pdf->SetXY($this->posxtva, $curY);
$pdf->MultiCell($this->posxup-$this->posxtva-0.8, 3, $vat_rate, 0, 'R');
}
// Unit price before discount
$up_excl_tax = pdf_getlineupexcltaxgr($object, $i, $outputlangs, $hidedetails);
$pdf->SetXY($this->posxup, $curY);
$pdf->MultiCell($this->posxqty-$this->posxup-0.8, 3, $up_excl_tax, 0, 'R', 0);
// Pieces and units
//$labelproductservice=pdf_getlinedescgr($object,$i,$outputlangs,$hideref,$hidedesc=1,$issupplierline,$qty1);
//if (substr($labelproductservice, 0, 2)=="HR")
//{
// $qty1=($outputlangs->transnoentities("PiecesHour"));
//}
// else
//{
// $qty1=($outputlangs->transnoentities("Pieces"));
//}
//$labelproductservice=pdf_getlinedescgr($object,$i,$outputlangs,$hideref,$hidedesc=1,$issupplierline,$qty1);
// if (substr($labelproductservice, 0, 2)=="ME")
//{
// $qty1=($outputlangs->transnoentities("PiecesMeter"));
// }
// Quantity
$qty = pdf_getlineqtygr($object, $i, $outputlangs, $hidedetails);
$pdf->SetXY($this->posxqty, $curY);
// Enough for 6 chars
if($conf->global->PRODUCT_USE_UNITS)
{
$pdf->MultiCell($this->posxunit-$this->posxqty-0.8, 4, $qty, 0, 'R');
}
else
{
$pdf->MultiCell($this->posxdiscount-$this->posxqty-0.8, 4, $qty, 0, 'R');
}
// Unit
if($conf->global->PRODUCT_USE_UNITS)
{
$unit = pdf_getlineunit($object, $i, $outputlangs, $hidedetails, $hookmanager);
$pdf->SetXY($this->posxunit, $curY);
$pdf->MultiCell($this->posxdiscount-$this->posxunit-0.8, 4, $unit, 0, 'L');
}
// Discount on line
if ($object->lines[$i]->remise_percent)
{
$pdf->SetXY($this->posxdiscount-2, $curY);
$remise_percent = pdf_getlineremisepercentgr($object, $i, $outputlangs, $hidedetails);
$pdf->MultiCell($this->posxprogress-$this->posxdiscount+2, 3, $remise_percent, 0, 'R');
}
if ($this->situationinvoice)
{
// Situation progress
$progress = pdf_getlineprogressgr($object, $i, $outputlangs, $hidedetails);
$pdf->SetXY($this->posxprogress, $curY);
$pdf->MultiCell($this->postotalht-$this->posxprogress, 3, $progress, 0, 'R');
}
// Total HT line
$total_excl_tax = pdf_getlinetotalexcltaxgr($object, $i, $outputlangs, $hidedetails);
$pdf->SetXY($this->postotalht, $curY);
$pdf->MultiCell($this->page_largeur-$this->marge_droite-$this->postotalht, 3, $total_excl_tax, 0, 'R', 0);
// Collecte des totaux par valeur de tva dans $this->tva["taux"]=total_tva
$prev_progress = $object->lines[$i]->get_prev_progress($object->id);
if ($prev_progress > 0) // Compute progress from previous situation
{
$tvaligne = $object->lines[$i]->total_tva * ($object->lines[$i]->situation_percent - $prev_progress) / $object->lines[$i]->situation_percent;
} else {
$tvaligne = $object->lines[$i]->total_tva;
}
$localtax1ligne=$object->lines[$i]->total_localtax1;
$localtax2ligne=$object->lines[$i]->total_localtax2;
$localtax1_rate=$object->lines[$i]->localtax1_tx;
$localtax2_rate=$object->lines[$i]->localtax2_tx;
$localtax1_type=$object->lines[$i]->localtax1_type;
$localtax2_type=$object->lines[$i]->localtax2_type;
if ($object->remise_percent) $tvaligne-=($tvaligne*$object->remise_percent)/100;
if ($object->remise_percent) $localtax1ligne-=($localtax1ligne*$object->remise_percent)/100;
if ($object->remise_percent) $localtax2ligne-=($localtax2ligne*$object->remise_percent)/100;
$vatrate=(string) $object->lines[$i]->tva_tx;
// Retrieve type from database for backward compatibility with old records
if ((! isset($localtax1_type) || $localtax1_type=='' || ! isset($localtax2_type) || $localtax2_type=='') // if tax type not defined
&& (! empty($localtax1_rate) || ! empty($localtax2_rate))) // and there is local tax
{
$localtaxtmp_array=getLocalTaxesFromRate($vatrate,0, $object->thirdparty, $mysoc);
$localtax1_type = $localtaxtmp_array[0];
$localtax2_type = $localtaxtmp_array[2];
}
// retrieve global local tax
if ($localtax1_type && $localtax1ligne != 0)
$this->localtax1[$localtax1_type][$localtax1_rate]+=$localtax1ligne;
if ($localtax2_type && $localtax2ligne != 0)
$this->localtax2[$localtax2_type][$localtax2_rate]+=$localtax2ligne;
if (($object->lines[$i]->info_bits & 0x01) == 0x01) $vatrate.='*';
if (! isset($this->tva[$vatrate])) $this->tva[$vatrate]='';
$this->tva[$vatrate] += $tvaligne;
if ($posYAfterImage > $posYAfterDescription) $nexY=$posYAfterImage;
// Add line
if ($conf->global->MAIN_PDF_DASH_BETWEEN_LINES && $i < ($nblignes - 1))
{
$pdf->setPage($pageposafter);
$pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(210,210,210)));
//$pdf->SetDrawColor(190,190,200);
$pdf->line($this->marge_gauche, $nexY+1, $this->page_largeur - $this->marge_droite, $nexY+1);
$pdf->SetLineStyle(array('dash'=>0));
}
$nexY+=2; // Passe espace entre les lignes
// Detect if some page were added automatically and output _tableau for past pages
while ($pagenb < $pageposafter)
{
$pdf->setPage($pagenb);
if ($pagenb == 1)
{
$this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforfooter, 0, $outputlangs, 0, 1);
}
else
{
$this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforfooter, 0, $outputlangs, 1, 1);
}
$this->_pagefoot($pdf,$object,$outputlangs,1);
$pagenb++;
$pdf->setPage($pagenb);
$pdf->setPageOrientation('', 1, 0); // The only function to edit the bottom margin of current page to set it.
if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
}
if (isset($object->lines[$i+1]->pagebreak) && $object->lines[$i+1]->pagebreak)
{
if ($pagenb == 1)
{
$this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforfooter, 0, $outputlangs, 0, 1);
}
else
{
$this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforfooter, 0, $outputlangs, 1, 1);
}
$this->_pagefoot($pdf,$object,$outputlangs,1);
// New page
$pdf->AddPage();
if (! empty($tplidx)) $pdf->useTemplate($tplidx);
$pagenb++;
if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
}
}
// Show square
if ($pagenb == 1)
{
$this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforinfotot - $heightforfreetext - $heightforfooter, 0, $outputlangs, 0, 0);
$bottomlasttab=$this->page_hauteur - $heightforinfotot - $heightforfreetext - $heightforfooter + 1;
}
else
{
$this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforinfotot - $heightforfreetext - $heightforfooter, 0, $outputlangs, 1, 0);
$bottomlasttab=$this->page_hauteur - $heightforinfotot - $heightforfreetext - $heightforfooter + 1;
}
// Affiche zone infos
$posy=$this->_tableau_info($pdf, $object, $bottomlasttab, $outputlangs);
// Affiche zone totaux
$posy=$this->_tableau_tot($pdf, $object, $deja_regle, $bottomlasttab, $outputlangs);
// Affiche zone versements
if ($deja_regle || $amount_credit_notes_included || $amount_deposits_included)
{
$posy=$this->_tableau_versements($pdf, $object, $posy, $outputlangs);
}
// Pied de page
$this->_pagefoot($pdf,$object,$outputlangs);
if (method_exists($pdf,'AliasNbPages')) $pdf->AliasNbPages();
$pdf->Close();
$pdf->Output($file,'F');
// Add pdfgeneration hook
if (! is_object($hookmanager))
{
include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php';
$hookmanager=new HookManager($this->db);
}
$hookmanager->initHooks(array('pdfgeneration'));
$parameters=array('file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs);
global $action;
$reshook=$hookmanager->executeHooks('afterPDFCreation',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks
if (! empty($conf->global->MAIN_UMASK))
@chmod($file, octdec($conf->global->MAIN_UMASK));
return 1; // Pas d'erreur
}
else
{
$this->error=$langs->trans("ErrorCanNotCreateDir",$dir);
return 0;
}
}
else
{
$this->error=$langs->trans("ErrorConstantNotDefined","FAC_OUTPUTDIR");
return 0;
}
$this->error=$langs->trans("ErrorUnknown");
return 0; // Erreur par defaut
}
/**
* Show payments table
*
* @param PDF $pdf Object PDF
* @param Object $object Object invoice
* @param int $posy Position y in PDF
* @param Translate $outputlangs Object langs for output
* @return int <0 if KO, >0 if OK
*/
function _tableau_versements(&$pdf, $object, $posy, $outputlangs)
{
global $conf;
$sign=1;
if ($object->type == 2 && ! empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) $sign=-1;
$tab3_posx = 120;
$tab3_top = $posy + 8;
$tab3_width = 80;
$tab3_height = 4;
if ($this->page_largeur < 210) // To work with US executive format
{
$tab3_posx -= 20;
}
$default_font_size = pdf_getPDFFontSizegr($outputlangs);
$title=$outputlangs->transnoentities("PaymentsAlreadyDone");
if ($object->type == 2) $title=$outputlangs->transnoentities("PaymentsBackAlreadyDone");
$pdf->SetFont('','', $default_font_size - 3);
$pdf->SetXY($tab3_posx, $tab3_top - 4);
$pdf->MultiCell(60, 3, $title, 0, 'L', 0);
$pdf->line($tab3_posx, $tab3_top, $tab3_posx+$tab3_width, $tab3_top);
$pdf->SetFont('','', $default_font_size - 4);
$pdf->SetXY($tab3_posx, $tab3_top);
$pdf->MultiCell(20, 3, $outputlangs->transnoentities("Payment"), 0, 'L', 0);
$pdf->SetXY($tab3_posx+21, $tab3_top);
$pdf->MultiCell(20, 3, $outputlangs->transnoentities("Amount"), 0, 'L', 0);
$pdf->SetXY($tab3_posx+40, $tab3_top);
$pdf->MultiCell(20, 3, $outputlangs->transnoentities("Type"), 0, 'L', 0);
$pdf->SetXY($tab3_posx+58, $tab3_top);
$pdf->MultiCell(20, 3, $outputlangs->transnoentities("Num"), 0, 'L', 0);
$pdf->line($tab3_posx, $tab3_top-1+$tab3_height, $tab3_posx+$tab3_width, $tab3_top-1+$tab3_height);
$y=0;
$pdf->SetFont('','', $default_font_size - 4);
// Loop on each deposits and credit notes included
$sql = "SELECT re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc,";
$sql.= " re.description, re.fk_facture_source,";
$sql.= " f.type, f.datef";
$sql.= " FROM ".MAIN_DB_PREFIX ."societe_remise_except as re, ".MAIN_DB_PREFIX ."facture as f";
$sql.= " WHERE re.fk_facture_source = f.rowid AND re.fk_facture = ".$object->id;
$resql=$this->db->query($sql);
if ($resql)
{
$num = $this->db->num_rows($resql);
$i=0;
$invoice=new Facture($this->db);
while ($i < $num)
{
$y+=3;
$obj = $this->db->fetch_object($resql);
if ($obj->type == 2) $text=$outputlangs->trans("CreditNote");
elseif ($obj->type == 3) $text=$outputlangs->trans("Deposit");
else $text=$outputlangs->trans("UnknownType");
$invoice->fetch($obj->fk_facture_source);
$pdf->SetXY($tab3_posx, $tab3_top+$y);
$pdf->MultiCell(20, 3, dol_print_date($obj->datef,'day',false,$outputlangs,true), 0, 'L', 0);
$pdf->SetXY($tab3_posx+21, $tab3_top+$y);
$pdf->MultiCell(20, 3, price($obj->amount_ttc, 0, $outputlangs), 0, 'L', 0);
$pdf->SetXY($tab3_posx+40, $tab3_top+$y);
$pdf->MultiCell(20, 3, $text, 0, 'L', 0);
$pdf->SetXY($tab3_posx+58, $tab3_top+$y);
$pdf->MultiCell(20, 3, $invoice->ref, 0, 'L', 0);
$pdf->line($tab3_posx, $tab3_top+$y+3, $tab3_posx+$tab3_width, $tab3_top+$y+3);
$i++;
}
}
else
{
$this->error=$this->db->lasterror();
dol_syslog($this->db,$this->error, LOG_ERR);
return -1;
}
// Loop on each payment
$sql = "SELECT p.datep as date, p.fk_paiement as type, p.num_paiement as num, pf.amount as amount,";
$sql.= " cp.code";
$sql.= " FROM ".MAIN_DB_PREFIX."paiement_facture as pf, ".MAIN_DB_PREFIX."paiement as p";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_paiement as cp ON p.fk_paiement = cp.id";
$sql.= " WHERE pf.fk_paiement = p.rowid AND pf.fk_facture = ".$object->id;
$sql.= " ORDER BY p.datep";
$resql=$this->db->query($sql);
if ($resql)
{
$num = $this->db->num_rows($resql);
$i=0;
while ($i < $num) {
$y+=3;
$row = $this->db->fetch_object($resql);
$pdf->SetXY($tab3_posx, $tab3_top+$y);
$pdf->MultiCell(20, 3, dol_print_date($this->db->jdate($row->date),'day',false,$outputlangs,true), 0, 'L', 0);
$pdf->SetXY($tab3_posx+21, $tab3_top+$y);
$pdf->MultiCell(20, 3, price($sign * $row->amount, 0, $outputlangs), 0, 'L', 0);
$pdf->SetXY($tab3_posx+40, $tab3_top+$y);
$oper = $outputlangs->transnoentitiesnoconv("PaymentTypeShort" . $row->code);
$pdf->MultiCell(20, 3, $oper, 0, 'L', 0);
$pdf->SetXY($tab3_posx+58, $tab3_top+$y);
$pdf->MultiCell(30, 3, $row->num, 0, 'L', 0);
$pdf->line($tab3_posx, $tab3_top+$y+3, $tab3_posx+$tab3_width, $tab3_top+$y+3);
$i++;
}
}
else
{
$this->error=$this->db->lasterror();
dol_syslog($this->db,$this->error, LOG_ERR);
return -1;
}
}
/**
* Show miscellaneous information (payment mode, payment term, ...)
*
* @param PDF $pdf Object PDF
* @param Object $object Object to show
* @param int $posy Y
* @param Translate $outputlangs Langs object
* @return void
*/
function _tableau_info(&$pdf, $object, $posy, $outputlangs)
{
global $conf;
$default_font_size = pdf_getPDFFontSizegr($outputlangs);
$pdf->SetFont('','', $default_font_size - 1);
// If France, show VAT mention if not applicable
if ($this->emetteur->country_code == 'FR' && $this->franchise == 1)
{
$pdf->SetFont('','B', $default_font_size - 2);
$pdf->SetXY($this->marge_gauche, $posy);
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedForInvoice"), 0, 'L', 0);
$posy=$pdf->GetY()+4;
}
$posxval=52;
// Show payments conditions
if ($object->type != 2 && ($object->cond_reglement_code || $object->cond_reglement))
{
$pdf->SetFont('','B', $default_font_size - 2);
$pdf->SetXY($this->marge_gauche, $posy);
$titre = $outputlangs->transnoentities("PaymentConditions").':';
$pdf->MultiCell(80, 4, $titre, 0, 'L');
$pdf->SetFont('','', $default_font_size - 2);
$pdf->SetXY($posxval, $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)
&& empty($conf->global->FACTURE_CHQ_NUMBER)
&& empty($conf->global->FACTURE_RIB_NUMBER))
{
$this->error = $outputlangs->transnoentities("ErrorNoPaiementModeConfigured");
}
// Avoid having any valid PDF with setup that is not complete
elseif (($object->mode_reglement_code == 'CHQ' && empty($conf->global->FACTURE_CHQ_NUMBER) && empty($object->fk_account) && empty($object->fk_bank))
|| ($object->mode_reglement_code == 'VIR' && empty($conf->global->FACTURE_RIB_NUMBER) && empty($object->fk_account) && empty($object->fk_bank)))
{
$outputlangs->load("errors");
$pdf->SetXY($this->marge_gauche, $posy);
$pdf->SetTextColor(200,0,0);
$pdf->SetFont('','B', $default_font_size - 2);
$this->error = $outputlangs->transnoentities("ErrorPaymentModeDefinedToWithoutSetup",$object->mode_reglement_code);
$pdf->MultiCell(80, 3, $this->error,0,'L',0);
$pdf->SetTextColor(0,0,0);
$posy=$pdf->GetY()+1;
}
// Show payment mode
if ($object->mode_reglement_code
&& $object->mode_reglement_code != 'CHQ'
&& $object->mode_reglement_code != 'VIR')
{
$pdf->SetFont('','B', $default_font_size - 2);
$pdf->SetXY($this->marge_gauche, $posy);
$titre = $outputlangs->transnoentities("PaymentMode").':';
$pdf->MultiCell(80, 5, $titre, 0, 'L');
$pdf->SetFont('','', $default_font_size - 2);
$pdf->SetXY($posxval, $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 (! empty($conf->global->FACTURE_CHQ_NUMBER))
{
$diffsizetitle=(empty($conf->global->PDF_DIFFSIZE_TITLE)?3:$conf->global->PDF_DIFFSIZE_TITLE);
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('','B', $default_font_size - $diffsizetitle);
$pdf->MultiCell(100, 3, $outputlangs->transnoentities('PaymentByChequeOrderedTo',$account->proprio),0,'L',0);
$posy=$pdf->GetY()+1;
if (empty($conf->global->MAIN_PDF_HIDE_CHQ_ADDRESS))
{
$pdf->SetXY($this->marge_gauche, $posy);
$pdf->SetFont('','', $default_font_size - $diffsizetitle);
$pdf->MultiCell(100, 3, $outputlangs->convToOutputCharset($account->owner_address), 0, 'L', 0);
$posy=$pdf->GetY()+2;
}
}
if ($conf->global->FACTURE_CHQ_NUMBER == -1)
{
$pdf->SetXY($this->marge_gauche, $posy);
$pdf->SetFont('','B', $default_font_size - $diffsizetitle);
$pdf->MultiCell(100, 3, $outputlangs->transnoentities('PaymentByChequeOrderedTo',$this->emetteur->name),0,'L',0);
$posy=$pdf->GetY()+1;
if (empty($conf->global->MAIN_PDF_HIDE_CHQ_ADDRESS))
{
$pdf->SetXY($this->marge_gauche, $posy);
$pdf->SetFont('','', $default_font_size - $diffsizetitle);
$pdf->MultiCell(100, 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($object->fk_account) || ! empty($object->fk_bank) || ! empty($conf->global->FACTURE_RIB_NUMBER))
{
$bankid=(empty($object->fk_account)?$conf->global->FACTURE_RIB_NUMBER:$object->fk_account);
if (! empty($object->fk_bank)) $bankid=$object->fk_bank; // For backward compatibility when object->fk_account is forced with object->fk_bank
$account = new Account($this->db);
$account->fetch($bankid);
$curx=$this->marge_gauche;
$cury=$posy;
$posy=pdf_bankgr($pdf,$outputlangs,$curx,$cury,$account,0,$default_font_size);
$posy+=2;
}
}
}
return $posy;
}
/**
* Show total to pay
*
* @param PDF $pdf Object PDF
* @param Facture $object Object invoice
* @param int $deja_regle Montant deja regle
* @param int $posy Position depart
* @param Translate $outputlangs Objet langs
* @return int Position pour suite
*/
function _tableau_tot(&$pdf, $object, $deja_regle, $posy, $outputlangs)
{
global $conf,$mysoc;
$sign=1;
if ($object->type == 2 && ! empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) $sign=-1;
$default_font_size = pdf_getPDFFontSizegr($outputlangs);
$tab2_top = $posy;
$tab2_hl = 4;
$pdf->SetFont('','', $default_font_size - 1);
// Tableau total
$col1x = 120; $col2x = 170;
if ($this->page_largeur < 210) // To work with US executive format
{
$col2x-=20;
}
$largcol2 = ($this->page_largeur - $this->marge_droite - $col2x);
$useborder=0;
$index = 0;
// 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($sign * ($object->total_ht + (! empty($object->remise)?$object->remise:0)), 0, $outputlangs), 0, 'R', 1);
// Show VAT by rates and total
$pdf->SetFillColor(248,248,248);
$this->atleastoneratenotnull=0;
if (empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT))
{
$tvaisnull=((! empty($this->tva) && count($this->tva) == 1 && isset($this->tva['0.000']) && is_float($this->tva['0.000'])) ? true : false);
if (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_ISNULL) && $tvaisnull)
{
// Nothing to do
}
else
{
//Local tax 1 before VAT
//if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on')
//{
foreach( $this->localtax1 as $localtax_type => $localtax_rate )
{
if (in_array((string) $localtax_type, array('1','3','5','7'))) continue;
foreach( $localtax_rate 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->transcountrynoentities("TotalLT1",$mysoc->country_code).' ';
$totalvat.=vatrate(abs($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, $outputlangs), 0, 'R', 1);
}
}
}
//}
//Local tax 2 before VAT
//if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on')
//{
foreach( $this->localtax2 as $localtax_type => $localtax_rate )
{
if (in_array((string) $localtax_type, array('1','3','5','7'))) continue;
foreach( $localtax_rate 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->transcountrynoentities("TotalLT2",$mysoc->country_code).' ';
$totalvat.=vatrate(abs($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, $outputlangs), 0, 'R', 1);
}
}
}
//}
// 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, $outputlangs), 0, 'R', 1);
}
}
//Local tax 1 after VAT
//if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on')
//{
foreach( $this->localtax1 as $localtax_type => $localtax_rate )
{
if (in_array((string) $localtax_type, array('2','4','6'))) continue;
foreach( $localtax_rate 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->transcountrynoentities("TotalLT1",$mysoc->country_code).' ';
$totalvat.=vatrate(abs($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, $outputlangs), 0, 'R', 1);
}
}
}
//}
//Local tax 2 after VAT
//if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on')
//{
foreach( $this->localtax2 as $localtax_type => $localtax_rate )
{
if (in_array((string) $localtax_type, array('2','4','6'))) continue;
foreach( $localtax_rate as $tvakey => $tvaval )
{
// retrieve global local tax
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->transcountrynoentities("TotalLT2",$mysoc->country_code).' ';
$totalvat.=vatrate(abs($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, $outputlangs), 0, 'R', 1);
}
}
//}
}
// Revenue stamp
if (price2num($object->revenuestamp) != 0)
{
$index++;
$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("RevenueStamp"), $useborder, 'L', 1);
$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
$pdf->MultiCell($largcol2, $tab2_hl, price($sign * $object->revenuestamp), $useborder, 'R', 1);
}
// Total TTC
$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($sign * $object->total_ttc, 0, $outputlangs), $useborder, 'R', 1);
}
}
$pdf->SetTextColor(0,0,0);
$creditnoteamount=$object->getSumCreditNotesUsed();
$depositsamount=$object->getSumDepositsUsed();
//print "x".$creditnoteamount."-".$depositsamount;exit;
$resteapayer = price2num($object->total_ttc - $deja_regle - $creditnoteamount - $depositsamount, 'MT');
if ($object->paye) $resteapayer=0;
if ($deja_regle > 0 || $creditnoteamount > 0 || $depositsamount > 0)
{
// Already paid + Deposits
$index++;
$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("Paid"), 0, 'L', 0);
$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
$pdf->MultiCell($largcol2, $tab2_hl, price($deja_regle + $depositsamount, 0, $outputlangs), 0, 'R', 0);
// Credit note
if ($creditnoteamount)
{
$index++;
$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("CreditNotes"), 0, 'L', 0);
$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
$pdf->MultiCell($largcol2, $tab2_hl, price($creditnoteamount, 0, $outputlangs), 0, 'R', 0);
}
// Escompte
if ($object->close_code == Facture::CLOSECODE_DISCOUNTVAT)
{
$index++;
$pdf->SetFillColor(255,255,255);
$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("EscompteOfferedShort"), $useborder, 'L', 1);
$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
$pdf->MultiCell($largcol2, $tab2_hl, price($object->total_ttc - $deja_regle - $creditnoteamount - $depositsamount, 0, $outputlangs), $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, 0, $outputlangs), $useborder, 'R', 1);
// Fin
$pdf->SetFont('','', $default_font_size - 1);
$pdf->SetTextColor(0,0,0);
}
$index++;
return ($tab2_top + ($tab2_hl * $index));
}
/**
* Show table for lines
*
* @param PDF $pdf Object PDF
* @param string $tab_top Top position of table
* @param string $tab_height Height of table (rectangle)
* @param int $nexY Y (not used)
* @param Translate $outputlangs Langs object
* @param int $hidetop 1=Hide top bar of array and title, 0=Hide nothing, -1=Hide only title
* @param int $hidebottom Hide bottom bar of array
* @return void
*/
function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop=0, $hidebottom=0)
{
global $conf;
// Force to disable hidetop and hidebottom
$hidebottom=0;
if ($hidetop) $hidetop=-1;
$default_font_size = pdf_getPDFFontSizegr($outputlangs);
// Amount in (at tab_top - 1)
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('','', $default_font_size - 2);
if (empty($hidetop))
{
$titre = $outputlangs->transnoentities("AmountInCurrency",$outputlangs->transnoentitiesnoconv("Currency".$conf->currency));
$pdf->SetXY($this->page_largeur - $this->marge_droite - ($pdf->GetStringWidth($titre) + 3), $tab_top-4);
$pdf->MultiCell(($pdf->GetStringWidth($titre) + 3), 2, $titre);
$conf->global->MAIN_PDF_TITLE_BACKGROUND_COLOR='230,230,230';
if (! empty($conf->global->MAIN_PDF_TITLE_BACKGROUND_COLOR)) $pdf->Rect($this->marge_gauche, $tab_top, $this->page_largeur-$this->marge_droite-$this->marge_gauche, 5, 'F', null, explode(',',$conf->global->MAIN_PDF_TITLE_BACKGROUND_COLOR));
}
$pdf->SetDrawColor(128,128,128);
$pdf->SetFont('','', $default_font_size - 1);
// Output Rect
$this->printRect($pdf,$this->marge_gauche, $tab_top, $this->page_largeur-$this->marge_gauche-$this->marge_droite, $tab_height, $hidetop, $hidebottom); // Rect prend une longueur en 3eme param et 4eme param
if (empty($hidetop))
{
$pdf->line($this->marge_gauche, $tab_top+5, $this->page_largeur-$this->marge_droite, $tab_top+5); // line prend une position y en 2eme param et 4eme param
$pdf->SetXY($this->posxdesc-1, $tab_top+1);
$pdf->MultiCell(108,2, $outputlangs->transnoentities("RefPrgr"),'','L');
$pdf->SetXY($this->posxdesc-1, $tab_top+1);
$pdf->MultiCell(108,2, $outputlangs->transnoentities("Designation"),'','C');
}
if (empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT))
{
$pdf->line($this->posxtva-1, $tab_top, $this->posxtva-1, $tab_top + $tab_height);
if (empty($hidetop))
{
$pdf->SetXY($this->posxtva-3, $tab_top+1);
$pdf->MultiCell($this->posxup-$this->posxtva+3,2, $outputlangs->transnoentities("VAT"),'','C');
}
}
$pdf->line($this->posxup-1, $tab_top, $this->posxup-1, $tab_top + $tab_height);
if (empty($hidetop))
{
$pdf->SetXY($this->posxup-1, $tab_top+1);
$pdf->MultiCell($this->posxqty-$this->posxup-1,2, $outputlangs->transnoentities("PriceUHT"),'','C');
}
$pdf->line($this->posxqty-1, $tab_top, $this->posxqty-1, $tab_top + $tab_height);
if (empty($hidetop))
{
$pdf->SetXY($this->posxqty-1, $tab_top+1);
if($conf->global->PRODUCT_USE_UNITS)
{
$pdf->MultiCell($this->posxunit-$this->posxqty-1,2, $outputlangs->transnoentities("Qty"),'','C');
}
else
{
$pdf->MultiCell($this->posxdiscount-$this->posxqty-1,2, $outputlangs->transnoentities("Qty"),'','C');
}
}
if($conf->global->PRODUCT_USE_UNITS) {
$pdf->line($this->posxunit - 1, $tab_top, $this->posxunit - 1, $tab_top + $tab_height);
if (empty($hidetop)) {
$pdf->SetXY($this->posxunit - 1, $tab_top + 1);
$pdf->MultiCell($this->posxdiscount - $this->posxunit - 1, 2, $outputlangs->transnoentities("Unitgr"), '',
'C');
}
}
$pdf->line($this->posxdiscount-1, $tab_top, $this->posxdiscount-1, $tab_top + $tab_height);
if (empty($hidetop))
{
if ($this->atleastonediscount)
{
$pdf->SetXY($this->posxdiscount-1, $tab_top+1);
$pdf->MultiCell($this->postotalht-$this->posxdiscount+1,2, $outputlangs->transnoentities("ReductionShort"),'','C');
}
}
if ($this->atleastonediscount)
{
$pdf->line($this->postotalht, $tab_top, $this->postotalht, $tab_top + $tab_height);
}
if (empty($hidetop))
{
$pdf->SetFont('','',$default_font_size - 2);
$pdf->SetXY($this->postotalht-1, $tab_top+1);
$pdf->MultiCell(27,2, $outputlangs->transnoentities("TotalHT"),'','R');
}
}
/**
* Show top header of page.
*
* @param PDF $pdf Object PDF
* @param Object $object Object to show
* @param int $showaddress 0=no, 1=yes
* @param Translate $outputlangs Object lang for output
* @return void
*/
function _pagehead(&$pdf, $object, $showaddress, $outputlangs)
{
global $conf,$langs;
$outputlangs->load("main");
$outputlangs->load("bills");
$outputlangs->load("propal");
$outputlangs->load("companies");
$outputlangs->load("invoicegr@invoicegr");
$default_font_size = pdf_getPDFFontSizegr($outputlangs);
pdf_pageheadgr($pdf,$outputlangs,$this->page_hauteur);
// Show Draft Watermark
if($object->statut==0 && (! empty($conf->global->FACTURE_DRAFT_WATERMARK)) )
{
pdf_watermarkgr($pdf,$outputlangs,$this->page_hauteur,$this->page_largeur,'mm',$conf->global->FACTURE_DRAFT_WATERMARK);
}
$pdf->SetTextColor(0,0,60);
$pdf->SetFont('','B', $default_font_size + 3);
$w = 110;
$posy=$this->marge_haute;
$posx=$this->page_largeur-$this->marge_droite-100;
$pdf->SetXY($this->marge_gauche,$posy);
// Logo
$logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo;
if ($this->emetteur->logo)
{
if (is_readable($logo))
{
$height=pdf_getHeightForLogogr($logo);
$pdf->Image($logo, $this->marge_gauche, $posy, 0, $height=16); // width=0 (auto)
}
else
{
$pdf->SetTextColor(200,0,0);
$pdf->SetFont('','B',$default_font_size - 2);
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("ErrorLogoFileNotFound",$logo), 0, 'L');
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("ErrorGoToGlobalSetup"), 0, 'L');
}
}
else
{
$text=$this->emetteur->name;
$pdf->MultiCell(100, 4, $outputlangs->convToOutputCharset($text), 0, 'L');
}
// $pdf->SetFont('','', $default_font_size - 2);
//$pdf->SetXY($posx,$posy-5);
//$pdf->SetXY($posx,$posy);
//$pdf->SetTextColor(0,0,0);
//$pdf->MultiCell(100, 4, $outputlangs->transnoentities("Elementsinv").":", 0, 'L');
//$pdf->SetFont('','', $default_font_size - 2);
//$pdf->SetXY($posx,$posy-5);
//$pdf->MultiCell(66,5, $outputlangs->transnoentities("BillFrom").":", 0, 'L');
//$pdf->SetXY($posx,$posy);
//$pdf->SetFillColor(230,230,230);
//$pdf->MultiCell(82, $hautcadre, "", 0, 'R', 1);
//$pdf->SetTextColor(0,0,60);
$pdf->SetFont('','B', $default_font_size + 0);
$posy+=35;
$pdf->SetXY($posx,$posy);
$pdf->SetTextColor(0,0,0);
$title=$outputlangs->transnoentities("Invoicegr");
if ($object->type == 1) $title=$outputlangs->transnoentities("InvoiceReplacement");
if ($object->type == 2) $title=$outputlangs->transnoentities("InvoiceAvoir");
if ($object->type == 3) $title=$outputlangs->transnoentities("InvoiceDeposit");
if ($object->type == 4) $title=$outputlangs->transnoentities("InvoiceProFormat");
$pdf->MultiCell(100, 3, $title, '', 'L');
$pdf->SetFont('','', $default_font_size - 2);
$pdf->SetXY($posx,$posy-8);
$pdf->MultiCell(66, 5, $outputlangs->transnoentities("Elementsinv").":", 0, 'L');
$pdf->RoundedRect(98, 42, 102, 40, 6.50, '');
$pdf->SetFont('','',$default_font_size);
$posy+=5;
$pdf->SetXY($posx,$posy);
$pdf->SetTextColor(0,0,0);
$pdf->MultiCell(100, 4, $outputlangs->transnoentities("Refgr").": " . $outputlangs->convToOutputCharset($object->ref), '', 'L');
$posy+=1;
$pdf->SetFont('','', $default_font_size - 0);
if ($object->ref_client)
{
$posy+=4;
$pdf->SetXY($posx,$posy);
$pdf->SetTextColor(0,0,0);
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("RefCustomer").": " . $outputlangs->convToOutputCharset($object->ref_client), '', 'L');
}
$objectidnext=$object->getIdReplacingInvoice('validated');
if ($object->type == 0 && $objectidnext)
{
$objectreplacing=new Facture($this->db);
$objectreplacing->fetch($objectidnext);
$posy+=3;
$pdf->SetXY($posx,$posy);
$pdf->SetTextColor(0,0,0);
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("ReplacementByInvoice").': '.$outputlangs->convToOutputCharset($objectreplacing->ref), '', 'L');
}
if ($object->type == 1)
{
$objectreplaced=new Facture($this->db);
$objectreplaced->fetch($object->fk_facture_source);
$posy+=4;
$pdf->SetXY($posx,$posy);
$pdf->SetTextColor(0,0,0);
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("ReplacementInvoice").': '.$outputlangs->convToOutputCharset($objectreplaced->ref), '', 'L');
}
if ($object->type == 2)
{
$objectreplaced=new Facture($this->db);
$objectreplaced->fetch($object->fk_facture_source);
$posy+=3;
$pdf->SetXY($posx,$posy);
$pdf->SetTextColor(0,0,0);
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("CorrectionInvoice").': '.$outputlangs->convToOutputCharset($objectreplaced->ref), '', 'L');
}
$posy+=4;
$pdf->SetXY($posx,$posy-1);
$pdf->SetTextColor(0,0,0);
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("Timegr").": " . $outputlangs->convToOutputCharset(! empty($object->date_creation)?dol_print_date($object->date_creation,'hour'):''), '', 'L');
$posy+=3;
$pdf->SetXY($posx,$posy);
$pdf->SetTextColor(0,0,0);
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("DateInvoicegr").": " . dol_print_date($object->date,"day",false,$outputlangs), '', 'L');
if ($object->thirdparty->code_client)
{
$posy+=4;
$pdf->SetXY($posx,$posy);
$pdf->SetTextColor(0,0,0);
$pdf->MultiCell(100, 3, $outputlangs->transnoentities("CustomerCode").": " . $outputlangs->transnoentities($object->thirdparty->code_client), '', 'L');
}
$posy+=1;
// Show list of linked objects
$posy = pdf_writeLinkedObjectsgr($pdf, $object, $outputlangs, $posx, $posy, 100, 3, 'L', $default_font_size);
if ($showaddress)
{
// Sender properties
$carac_emetteur = pdf_build_addressgr($outputlangs,$this->emetteur);
// Show sender
$posy=5;
//$posx=$this->marge_gauche;
$posx=118;
if (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) $posx=$this->page_largeur-$this->marge_droite-80;
$hautcadre=32;
// Show sender frame
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('','', $default_font_size - 1);
$pdf->SetXY($posx-22,$posy);
//$pdf->MultiCell(66,5, $outputlangs->transnoentities("BillFrom").":", 0, 'L');
//$pdf->SetXY($posx,$posy);
$pdf->SetFillColor(255,255,255);
$pdf->MultiCell(182, $hautcadre, "", 0, 'R', 1);
$pdf->SetTextColor(0,0,60);
// Show sender name
$pdf->SetXY($posx-20,$posy+4);
$pdf->SetFont('','B', $default_font_size - 1);
$pdf->MultiCell(80, 4, $outputlangs->convToOutputCharset($this->emetteur->name), 0, 'L');
$posy=$pdf->getY();
// Show sender information
$pdf->SetXY($posx-20,$posy);
$pdf->SetFont('','', $default_font_size - 1);
$pdf->MultiCell(95, 4, $carac_emetteur, 0, 'L');
// If BILLING contact defined on invoice, we use it
$usecontact=false;
$arrayidcontact=$object->getIdContact('external','BILLING');
if (count($arrayidcontact) > 0)
{
$usecontact=true;
$result=$object->fetch_contact($arrayidcontact[0]);
}
//Recipient name
// On peut utiliser le nom de la societe du contact
if ($usecontact && !empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) {
$thirdparty = $object->contact;
} else {
$thirdparty = $object->thirdparty;
}
$carac_client_name= pdfBuildThirdpartyName($thirdparty, $outputlangs);
$carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->thirdparty,($usecontact?$object->contact:''),$usecontact,'target',$object);
// Show recipient
$widthrecbox=80;
//if ($this->page_largeur < 210) $widthrecbox=84; // To work with US executive format
$posy=42;
//$posx=$this->page_largeur-$this->marge_droite-$widthrecbox;
$posx=10;
$hautcadrec=40;
if (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) $posx=$this->marge_gauche;
// Show recipient frame
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('','', $default_font_size - 2);
$pdf->SetXY($posx+2,$posy-5);
$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("BillTo").":",0,'L');
$pdf->Rect($posx, $posy, $widthrecbox, $hautcadrec);
// Show recipient name
$pdf->SetXY($posx+2,$posy+3);
$pdf->SetFont('','B', $default_font_size);
$pdf->MultiCell($widthrecbox, 4, $carac_client_name, 0, 'L');
// Show recipient information
$pdf->SetFont('','', $default_font_size - 1);
$pdf->SetXY($posx+2,$posy+10+(dol_nboflines_bis($carac_client_name,50)*4));
$pdf->MultiCell($widthrecbox, 4, $carac_client, 0, 'L');
$pdf->SetFont('','', $default_font_size - 2);
$posx=105;
$pdf->SetXY($posx,$posy+218);
$pdf->MultiCell(66, 5, $outputlangs->transnoentities("Thetrad"), 0, 'C');
$pdf->RoundedRect(118, 265, 40, 20, 3.50, '1111', '');
$pdf->SetFont('','', $default_font_size - 2);
$posx=147;
$pdf->SetXY($posx,$posy+218);
$pdf->MultiCell(66, 5, $outputlangs->transnoentities("Thereceipts"), 0, 'C');
$pdf->RoundedRect(160, 265, 40, 20, 3.50, '1111', '');
}
$pdf->SetTextColor(0,0,0);
}
/**
* Show footer of page. Need this->emetteur object
*
* @param PDF $pdf PDF
* @param Object $object Object to show
* @param Translate $outputlangs Object lang for output
* @param int $hidefreetext 1=Hide free text
* @return int Return height of bottom margin including footer text
*/
function _pagefoot(&$pdf,$object,$outputlangs,$hidefreetext=0)
{
$showdetails=0;
return pdf_pagefootgr($pdf,$outputlangs,'INVOICE_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
}
}
at this point will I put this code?
any help??
This value how to put in code?
any help for this result.
Find total tva is total all tax.
How to find total tax 1 and total tax 2 result?
Hi
Insert this line for php, extract to manu values,but not find this.
Totaltax1 and totaltax2 .
you could help me with that?
Hi,
Can you post the result of var_dump($object); ?
object(Facture)#136 (106) { ["element"]=> string(7) "facture" ["table_element"]=> string(7) "facture" ["table_element_line"]=> string(10) "facturedet" ["fk_element"]=> string(10) "fk_facture" ["ismultientitymanaged":protected]=> int(1) ["picto"]=> string(4) "bill" ["table_ref_field":protected]=> string(9) "facnumber" ["socid"]=> string(4) "1101" ["author"]=> NULL ["fk_user_author"]=> NULL ["fk_user_valid"]=> NULL ["date"]=> int(1574640000) ["date_creation"]=> int(1574674607) ["date_validation"]=> int(1574640000) ["datem"]=> int(1574681815) ["ref_client"]=> string(12) "1411736/4579" ["ref_int"]=> NULL ["type"]=> string(1) "0" ["remise_absolue"]=> NULL ["remise_percent"]=> NULL ["total_ht"]=> string(11) "19.28000000" ["total_tva"]=> string(10) "2.98000000" ["total_ttc"]=> string(11) "22.26000000" ["revenuestamp"]=> string(10) "0.00000000" ["close_code"]=> NULL ["close_note"]=> NULL ["paye"]=> string(1) "0" ["fk_facture_source"]=> NULL ["linked_objects"]=> array(0) { } ["date_lim_reglement"]=> int(1574726400) ["cond_reglement_code"]=> string(5) "RECEP" ["mode_reglement_code"]=> string(4) "P144" ["fk_bank"]=> string(1) "1" ["products"]=> array(0) { } ["lines"]=> array(5) { [0]=> object(FactureLigne)#144 (103) { ["element"]=> string(10) "facturedet" ["table_element"]=> string(10) "facturedet" ["oldline"]=> NULL ["fk_facture"]=> string(3) "817" ["fk_parent_line"]=> NULL ["label"]=> string(58) "SugarCraft Μίνι Άστρο Κίτρινο 2cm 40τεμ" ["desc"]=> string(58) "SugarCraft Μίνι Άστρο Κίτρινο 2cm 40τεμ" ["localtax1_type"]=> string(1) "0" ["localtax2_type"]=> string(1) "0" ["fk_remise_except"]=> NULL ["rang"]=> string(1) "0" ["fk_fournprice"]=> NULL ["pa_ht"]=> string(10) "0.00000000" ["marge_tx"]=> string(0) "" ["marque_tx"]=> float(100) ["special_code"]=> string(1) "0" ["origin"]=> NULL ["origin_id"]=> NULL ["fk_code_ventilation"]=> int(0) ["date_start"]=> string(0) "" ["date_end"]=> string(0) "" ["ref"]=> string(10) "SC-E896068" ["product_ref"]=> string(10) "SC-E896068" ["libelle"]=> string(120) "SugarCraft Μίνι Άστρο Κίτρινο 2cm 40τεμ" ["product_label"]=> string(120) "SugarCraft Μίνι Άστρο Κίτρινο 2cm 40τεμ" ["product_desc"]=> string(231) "Άστρο Κίτρινο 3d 2cm. Τέλεια για τα Χριστουγεννιάτικα γλυκά σας, τουρτες, cupcakes και οτι αλλο φανταστείτε. Συσκευασία αφαλείας 40τμχ" ["skip_update_total"]=> NULL ["situation_percent"]=> string(3) "100" ["fk_prev_id"]=> NULL ["fk_multicurrency"]=> string(1) "0" ["multicurrency_code"]=> string(3) "EUR" ["multicurrency_subprice"]=> string(10) "1.45600000" ["multicurrency_total_ht"]=> string(10) "2.91000000" ["multicurrency_total_tva"]=> string(10) "0.38000000" ["multicurrency_total_ttc"]=> string(10) "3.29000000" ["qty"]=> string(1) "2" ["subprice"]=> string(10) "1.45600000" ["product_type"]=> string(1) "0" ["fk_product"]=> string(4) "1031" ["tva_tx"]=> string(6) "13.000" ["localtax1_tx"]=> string(5) "0.000" ["localtax2_tx"]=> string(5) "0.000" ["remise_percent"]=> string(1) "0" ["total_ht"]=> string(10) "2.91000000" ["total_tva"]=> string(10) "0.38000000" ["total_localtax1"]=> string(10) "0.00000000" ["total_localtax2"]=> string(10) "0.00000000" ["total_ttc"]=> string(10) "3.29000000" ["info_bits"]=> string(1) "0" ["id"]=> string(4) "3332" ["rowid"]=> string(4) "3332" ["fk_unit"]=> NULL ["db"]=> object(DoliDBMysqli)#27 (19) { ["db"]=> object(mysqli)#28 (19) { ["affected_rows"]=> int(0) ["client_info"]=> string(79) "mysqlnd 5.0.12-dev - 20150407 - $Id: b5c5906d452ec590732a93b051f3827e02749b83 $" ["client_version"]=> int(50012) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(11) ["host_info"]=> string(25) "Localhost via UNIX socket" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(14) "5.5.62-cll-lve" ["server_version"]=> int(50562) ["stat"]=> string(153) "Uptime: 267923 Threads: 8 Questions: 154905929 Slow queries: 2162 Opens: 94596331 Flush tables: 1 Open tables: 600 Queries per second avg: 578.173" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(2792194) ["warning_count"]=> int(0) } ["type"]=> string(6) "mysqli" ["_results":"DoliDBMysqli":private]=> object(mysqli_result)#141 (5) { ["current_field"]=> int(0) ["field_count"]=> int(11) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) } ["forcecharset"]=> string(4) "utf8" ["forcecollate"]=> string(15) "utf8_general_ci" ["connected"]=> bool(true) ["database_selected"]=> bool(true) ["database_name"]=> string(13) "siteview_doli" ["database_user"]=> string(13) "siteview_doli" ["database_host"]=> string(9) "localhost" ["database_port"]=> string(4) "3306" ["transaction_opened"]=> int(0) ["lastquery"]=> string(265) "SELECT price, price_ttc, price_min, price_min_ttc, price_base_type, tva_tx, default_vat_code, tosell, price_by_qty, rowid, recuperableonly FROM llx_product_price WHERE entity IN (1) AND price_level=3 AND fk_product = '1' ORDER BY date_price DESC, rowid DESC LIMIT 1" ["lastqueryerror"]=> NULL ["lasterror"]=> NULL ["lasterrno"]=> NULL ["ok"]=> bool(true) ["error"]=> NULL ["_results":"DoliDB":private]=> NULL } ["error"]=> NULL ["errors"]=> array(0) { } ["import_key"]=> NULL ["array_options"]=> array(0) { } ["linkedObjectsIds"]=> NULL ["linkedObjects"]=> NULL ["table_ref_field":protected]=> string(0) "" ["context"]=> array(0) { } ["canvas"]=> NULL ["project"]=> NULL ["fk_project"]=> NULL ["projet"]=> NULL ["contact"]=> NULL ["contact_id"]=> NULL ["thirdparty"]=> NULL ["user"]=> NULL ["ref_previous"]=> NULL ["ref_next"]=> NULL ["ref_ext"]=> NULL ["table_element_line"]=> NULL ["statut"]=> NULL ["country"]=> NULL ["country_id"]=> NULL ["country_code"]=> NULL ["barcode_type"]=> NULL ["barcode_type_code"]=> NULL ["barcode_type_label"]=> NULL ["barcode_type_coder"]=> NULL ["mode_reglement_id"]=> NULL ["cond_reglement_id"]=> NULL ["cond_reglement"]=> NULL ["fk_delivery_address"]=> NULL ["shipping_method_id"]=> NULL ["modelpdf"]=> NULL ["fk_account"]=> NULL ["note_public"]=> NULL ["note_private"]=> NULL ["note"]=> NULL ["lines"]=> NULL ["fk_incoterms"]=> NULL ["libelle_incoterms"]=> NULL ["location_incoterms"]=> NULL ["name"]=> NULL ["lastname"]=> NULL ["firstname"]=> NULL ["civility_id"]=> NULL ["description"]=> string(58) "SugarCraft Μίνι Άστρο Κίτρινο 2cm 40τεμ" ["fk_product_type"]=> string(1) "0" ["vat_src_code"]=> string(0) "" ["code_ventilation"]=> string(1) "0" } [1]=> object(FactureLigne)#137 (103) { ["element"]=> string(10) "facturedet" ["table_element"]=> string(10) "facturedet" ["oldline"]=> NULL ["fk_facture"]=> string(3) "817" ["fk_parent_line"]=> NULL ["label"]=> string(60) "SugarCraft Μίνι XMAS Δεντράκι Πράσινο 65g" ["desc"]=> string(60) "SugarCraft Μίνι XMAS Δεντράκι Πράσινο 65g" ["localtax1_type"]=> string(1) "0" ["localtax2_type"]=> string(1) "0" ["fk_remise_except"]=> NULL ["rang"]=> string(1) "0" ["fk_fournprice"]=> NULL ["pa_ht"]=> string(10) "0.00000000" ["marge_tx"]=> string(0) "" ["marque_tx"]=> float(100) ["special_code"]=> string(1) "0" ["origin"]=> NULL ["origin_id"]=> NULL ["fk_code_ventilation"]=> int(0) ["date_start"]=> string(0) "" ["date_end"]=> string(0) "" ["ref"]=> string(8) "SC-E3417" ["product_ref"]=> string(8) "SC-E3417" ["libelle"]=> string(120) "SugarCraft Μίνι XMAS Δεντράκι Πράσινο 65g" ["product_label"]=> string(120) "SugarCraft Μίνι XMAS Δεντράκι Πράσινο 65g" ["product_desc"]=> string(263) "Δεντράκι χριστουγεννιάτικο πράσινο. Τέλεια για τα Χριστουγεννιάτικα γλυκά σας, τουρτες, cupcakes και οτι αλλο φανταστείτε. Συσκευασία αφαλείας 65γρ" ["skip_update_total"]=> NULL ["situation_percent"]=> string(3) "100" ["fk_prev_id"]=> NULL ["fk_multicurrency"]=> string(1) "0" ["multicurrency_code"]=> string(3) "EUR" ["multicurrency_subprice"]=> string(10) "1.88800000" ["multicurrency_total_ht"]=> string(10) "1.89000000" ["multicurrency_total_tva"]=> string(10) "0.24000000" ["multicurrency_total_ttc"]=> string(10) "2.13000000" ["qty"]=> string(1) "1" ["subprice"]=> string(10) "1.88800000" ["product_type"]=> string(1) "0" ["fk_product"]=> string(4) "1240" ["tva_tx"]=> string(6) "13.000" ["localtax1_tx"]=> string(5) "0.000" ["localtax2_tx"]=> string(5) "0.000" ["remise_percent"]=> string(1) "0" ["total_ht"]=> string(10) "1.89000000" ["total_tva"]=> string(10) "0.24000000" ["total_localtax1"]=> string(10) "0.00000000" ["total_localtax2"]=> string(10) "0.00000000" ["total_ttc"]=> string(10) "2.13000000" ["info_bits"]=> string(1) "0" ["id"]=> string(4) "3333" ["rowid"]=> string(4) "3333" ["fk_unit"]=> NULL ["db"]=> object(DoliDBMysqli)#27 (19) { ["db"]=> object(mysqli)#28 (19) { ["affected_rows"]=> int(-1) ["client_info"]=> string(79) "mysqlnd 5.0.12-dev - 20150407 - $Id: b5c5906d452ec590732a93b051f3827e02749b83 $" ["client_version"]=> int(50012) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(11) ["host_info"]=> string(25) "Localhost via UNIX socket" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(14) "5.5.62-cll-lve" ["server_version"]=> int(50562) ["stat"]=> string(153) "Uptime: 267923 Threads: 8 Questions: 154905930 Slow queries: 2162 Opens: 94596334 Flush tables: 1 Open tables: 600 Queries per second avg: 578.173" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(2792194) ["warning_count"]=> int(0) } ["type"]=> string(6) "mysqli" ["_results":"DoliDBMysqli":private]=> object(mysqli_result)#141 (5) { ["current_field"]=> int(0) ["field_count"]=> int(11) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) } ["forcecharset"]=> string(4) "utf8" ["forcecollate"]=> string(15) "utf8_general_ci" ["connected"]=> bool(true) ["database_selected"]=> bool(true) ["database_name"]=> string(13) "siteview_doli" ["database_user"]=> string(13) "siteview_doli" ["database_host"]=> string(9) "localhost" ["database_port"]=> string(4) "3306" ["transaction_opened"]=> int(0) ["lastquery"]=> string(265) "SELECT price, price_ttc, price_min, price_min_ttc, price_base_type, tva_tx, default_vat_code, tosell, price_by_qty, rowid, recuperableonly FROM llx_product_price WHERE entity IN (1) AND price_level=3 AND fk_product = '1' ORDER BY date_price DESC, rowid DESC LIMIT 1" ["lastqueryerror"]=> NULL ["lasterror"]=> NULL ["lasterrno"]=> NULL ["ok"]=> bool(true) ["error"]=> NULL ["_results":"DoliDB":private]=> NULL } ["error"]=> NULL ["errors"]=> array(0) { } ["import_key"]=> NULL ["array_options"]=> array(0) { } ["linkedObjectsIds"]=> NULL ["linkedObjects"]=> NULL ["table_ref_field":protected]=> string(0) "" ["context"]=> array(0) { } ["canvas"]=> NULL ["project"]=> NULL ["fk_project"]=> NULL ["projet"]=> NULL ["contact"]=> NULL ["contact_id"]=> NULL ["thirdparty"]=> NULL ["user"]=> NULL ["ref_previous"]=> NULL ["ref_next"]=> NULL ["ref_ext"]=> NULL ["table_element_line"]=> NULL ["statut"]=> NULL ["country"]=> NULL ["country_id"]=> NULL ["country_code"]=> NULL ["barcode_type"]=> NULL ["barcode_type_code"]=> NULL ["barcode_type_label"]=> NULL ["barcode_type_coder"]=> NULL ["mode_reglement_id"]=> NULL ["cond_reglement_id"]=> NULL ["cond_reglement"]=> NULL ["fk_delivery_address"]=> NULL ["shipping_method_id"]=> NULL ["modelpdf"]=> NULL ["fk_account"]=> NULL ["note_public"]=> NULL ["note_private"]=> NULL ["note"]=> NULL ["lines"]=> NULL ["fk_incoterms"]=> NULL ["libelle_incoterms"]=> NULL ["location_incoterms"]=> NULL ["name"]=> NULL ["lastname"]=> NULL ["firstname"]=> NULL ["civility_id"]=> NULL ["description"]=> string(60) "SugarCraft Μίνι XMAS Δεντράκι Πράσινο 65g" ["fk_product_type"]=> string(1) "0" ["vat_src_code"]=> string(0) "" ["code_ventilation"]=> string(1) "0" } [2]=> object(FactureLigne)#143 (103) { ["element"]=> string(10) "facturedet" ["table_element"]=> string(10) "facturedet" ["oldline"]=> NULL ["fk_facture"]=> string(3) "817" ["fk_parent_line"]=> NULL ["label"]=> string(77) "SugarCraft Μίνι XMAS Δεντράκι Πράσινο - Κοκκινό 60g" ["desc"]=> string(77) "SugarCraft Μίνι XMAS Δεντράκι Πράσινο - Κοκκινό 60g" ["localtax1_type"]=> string(1) "0" ["localtax2_type"]=> string(1) "0" ["fk_remise_except"]=> NULL ["rang"]=> string(1) "0" ["fk_fournprice"]=> NULL ["pa_ht"]=> string(10) "0.00000000" ["marge_tx"]=> string(0) "" ["marque_tx"]=> float(100) ["special_code"]=> string(1) "0" ["origin"]=> NULL ["origin_id"]=> NULL ["fk_code_ventilation"]=> int(0) ["date_start"]=> string(0) "" ["date_end"]=> string(0) "" ["ref"]=> string(6) "SC-P13" ["product_ref"]=> string(6) "SC-P13" ["libelle"]=> string(165) "SugarCraft Μίνι XMAS Δεντράκι Πράσινο - Κοκκινό 60g" ["product_label"]=> string(165) "SugarCraft Μίνι XMAS Δεντράκι Πράσινο - Κοκκινό 60g" ["product_desc"]=> string(280) "Δεντράκι χριστουγεννιάτικο Πράσινο - Κόκκινο. Τέλεια για τα Χριστουγεννιάτικα γλυκά σας, τουρτες, cupcakes και οτι αλλο φανταστείτε. Συσκευασία αφαλείας 60γρ" ["skip_update_total"]=> NULL ["situation_percent"]=> string(3) "100" ["fk_prev_id"]=> NULL ["fk_multicurrency"]=> string(1) "0" ["multicurrency_code"]=> string(3) "EUR" ["multicurrency_subprice"]=> string(10) "2.00000000" ["multicurrency_total_ht"]=> string(10) "6.00000000" ["multicurrency_total_tva"]=> string(10) "0.78000000" ["multicurrency_total_ttc"]=> string(10) "6.78000000" ["qty"]=> string(1) "3" ["subprice"]=> string(10) "2.00000000" ["product_type"]=> string(1) "0" ["fk_product"]=> string(4) "1239" ["tva_tx"]=> string(6) "13.000" ["localtax1_tx"]=> string(5) "0.000" ["localtax2_tx"]=> string(5) "0.000" ["remise_percent"]=> string(1) "0" ["total_ht"]=> string(10) "6.00000000" ["total_tva"]=> string(10) "0.78000000" ["total_localtax1"]=> string(10) "0.00000000" ["total_localtax2"]=> string(10) "0.00000000" ["total_ttc"]=> string(10) "6.78000000" ["info_bits"]=> string(1) "0" ["id"]=> string(4) "3334" ["rowid"]=> string(4) "3334" ["fk_unit"]=> NULL ["db"]=> object(DoliDBMysqli)#27 (19) { ["db"]=> object(mysqli)#28 (19) { ["affected_rows"]=> int(-1) ["client_info"]=> string(79) "mysqlnd 5.0.12-dev - 20150407 - $Id: b5c5906d452ec590732a93b051f3827e02749b83 $" ["client_version"]=> int(50012) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(11) ["host_info"]=> string(25) "Localhost via UNIX socket" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(14) "5.5.62-cll-lve" ["server_version"]=> int(50562) ["stat"]=> string(153) "Uptime: 267923 Threads: 8 Questions: 154905931 Slow queries: 2162 Opens: 94596340 Flush tables: 1 Open tables: 600 Queries per second avg: 578.173" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(2792194) ["warning_count"]=> int(0) } ["type"]=> string(6) "mysqli" ["_results":"DoliDBMysqli":private]=> object(mysqli_result)#141 (5) { ["current_field"]=> int(0) ["field_count"]=> int(11) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) } ["forcecharset"]=> string(4) "utf8" ["forcecollate"]=> string(15) "utf8_general_ci" ["connected"]=> bool(true) ["database_selected"]=> bool(true) ["database_name"]=> string(13) "siteview_doli" ["database_user"]=> string(13) "siteview_doli" ["database_host"]=> string(9) "localhost" ["database_port"]=> string(4) "3306" ["transaction_opened"]=> int(0) ["lastquery"]=> string(265) "SELECT price, price_ttc, price_min, price_min_ttc, price_base_type, tva_tx, default_vat_code, tosell, price_by_qty, rowid, recuperableonly FROM llx_product_price WHERE entity IN (1) AND price_level=3 AND fk_product = '1' ORDER BY date_price DESC, rowid DESC LIMIT 1" ["lastqueryerror"]=> NULL ["lasterror"]=> NULL ["lasterrno"]=> NULL ["ok"]=> bool(true) ["error"]=> NULL ["_results":"DoliDB":private]=> NULL } ["error"]=> NULL ["errors"]=> array(0) { } ["import_key"]=> NULL ["array_options"]=> array(0) { } ["linkedObjectsIds"]=> NULL ["linkedObjects"]=> NULL ["table_ref_field":protected]=> string(0) "" ["context"]=> array(0) { } ["canvas"]=> NULL ["project"]=> NULL ["fk_project"]=> NULL ["projet"]=> NULL ["contact"]=> NULL ["contact_id"]=> NULL ["thirdparty"]=> NULL ["user"]=> NULL ["ref_previous"]=> NULL ["ref_next"]=> NULL ["ref_ext"]=> NULL ["table_element_line"]=> NULL ["statut"]=> NULL ["country"]=> NULL ["country_id"]=> NULL ["country_code"]=> NULL ["barcode_type"]=> NULL ["barcode_type_code"]=> NULL ["barcode_type_label"]=> NULL ["barcode_type_coder"]=> NULL ["mode_reglement_id"]=> NULL ["cond_reglement_id"]=> NULL ["cond_reglement"]=> NULL ["fk_delivery_address"]=> NULL ["shipping_method_id"]=> NULL ["modelpdf"]=> NULL ["fk_account"]=> NULL ["note_public"]=> NULL ["note_private"]=> NULL ["note"]=> NULL ["lines"]=> NULL ["fk_incoterms"]=> NULL ["libelle_incoterms"]=> NULL ["location_incoterms"]=> NULL ["name"]=> NULL ["lastname"]=> NULL ["firstname"]=> NULL ["civility_id"]=> NULL ["description"]=> string(77) "SugarCraft Μίνι XMAS Δεντράκι Πράσινο - Κοκκινό 60g" ["fk_product_type"]=> string(1) "0" ["vat_src_code"]=> string(0) "" ["code_ventilation"]=> string(1) "0" } [3]=> object(FactureLigne)#139 (103) { ["element"]=> string(10) "facturedet" ["table_element"]=> string(10) "facturedet" ["oldline"]=> NULL ["fk_facture"]=> string(3) "817" ["fk_parent_line"]=> NULL ["label"]=> string(67) "SugarCraft Μίνι XMAS Νιφάδα χιονιού Ασημί 60g" ["desc"]=> string(67) "SugarCraft Μίνι XMAS Νιφάδα χιονιού Ασημί 60g" ["localtax1_type"]=> string(1) "0" ["localtax2_type"]=> string(1) "0" ["fk_remise_except"]=> NULL ["rang"]=> string(1) "0" ["fk_fournprice"]=> NULL ["pa_ht"]=> string(10) "0.00000000" ["marge_tx"]=> string(0) "" ["marque_tx"]=> float(100) ["special_code"]=> string(1) "0" ["origin"]=> NULL ["origin_id"]=> NULL ["fk_code_ventilation"]=> int(0) ["date_start"]=> string(0) "" ["date_end"]=> string(0) "" ["ref"]=> string(8) "SC-E3418" ["product_ref"]=> string(8) "SC-E3418" ["libelle"]=> string(136) "SugarCraft Μίνι XMAS Νιφάδα χιονιού Ασημί 60g" ["product_label"]=> string(136) "SugarCraft Μίνι XMAS Νιφάδα χιονιού Ασημί 60g" ["product_desc"]=> string(243) "Νιφάδα χιονιού ασημί 8χιλ. Τέλεια για τα Χριστουγεννιάτικα γλυκά σας, τουρτες, cupcakes και οτι αλλο φανταστείτε. Συσκευασία αφαλείας 60γρ" ["skip_update_total"]=> NULL ["situation_percent"]=> string(3) "100" ["fk_prev_id"]=> NULL ["fk_multicurrency"]=> string(1) "0" ["multicurrency_code"]=> string(3) "EUR" ["multicurrency_subprice"]=> string(10) "2.06400000" ["multicurrency_total_ht"]=> string(10) "4.13000000" ["multicurrency_total_tva"]=> string(10) "0.53000000" ["multicurrency_total_ttc"]=> string(10) "4.66000000" ["qty"]=> string(1) "2" ["subprice"]=> string(10) "2.06400000" ["product_type"]=> string(1) "0" ["fk_product"]=> string(4) "1243" ["tva_tx"]=> string(6) "13.000" ["localtax1_tx"]=> string(5) "0.000" ["localtax2_tx"]=> string(5) "0.000" ["remise_percent"]=> string(1) "0" ["total_ht"]=> string(10) "4.13000000" ["total_tva"]=> string(10) "0.53000000" ["total_localtax1"]=> string(10) "0.00000000" ["total_localtax2"]=> string(10) "0.00000000" ["total_ttc"]=> string(10) "4.66000000" ["info_bits"]=> string(1) "0" ["id"]=> string(4) "3335" ["rowid"]=> string(4) "3335" ["fk_unit"]=> NULL ["db"]=> object(DoliDBMysqli)#27 (19) { ["db"]=> object(mysqli)#28 (19) { ["affected_rows"]=> int(-1) ["client_info"]=> string(79) "mysqlnd 5.0.12-dev - 20150407 - $Id: b5c5906d452ec590732a93b051f3827e02749b83 $" ["client_version"]=> int(50012) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(11) ["host_info"]=> string(25) "Localhost via UNIX socket" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(14) "5.5.62-cll-lve" ["server_version"]=> int(50562) ["stat"]=> string(153) "Uptime: 267923 Threads: 8 Questions: 154905932 Slow queries: 2162 Opens: 94596342 Flush tables: 1 Open tables: 601 Queries per second avg: 578.173" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(2792194) ["warning_count"]=> int(0) } ["type"]=> string(6) "mysqli" ["_results":"DoliDBMysqli":private]=> object(mysqli_result)#141 (5) { ["current_field"]=> int(0) ["field_count"]=> int(11) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) } ["forcecharset"]=> string(4) "utf8" ["forcecollate"]=> string(15) "utf8_general_ci" ["connected"]=> bool(true) ["database_selected"]=> bool(true) ["database_name"]=> string(13) "siteview_doli" ["database_user"]=> string(13) "siteview_doli" ["database_host"]=> string(9) "localhost" ["database_port"]=> string(4) "3306" ["transaction_opened"]=> int(0) ["lastquery"]=> string(265) "SELECT price, price_ttc, price_min, price_min_ttc, price_base_type, tva_tx, default_vat_code, tosell, price_by_qty, rowid, recuperableonly FROM llx_product_price WHERE entity IN (1) AND price_level=3 AND fk_product = '1' ORDER BY date_price DESC, rowid DESC LIMIT 1" ["lastqueryerror"]=> NULL ["lasterror"]=> NULL ["lasterrno"]=> NULL ["ok"]=> bool(true) ["error"]=> NULL ["_results":"DoliDB":private]=> NULL } ["error"]=> NULL ["errors"]=> array(0) { } ["import_key"]=> NULL ["array_options"]=> array(0) { } ["linkedObjectsIds"]=> NULL ["linkedObjects"]=> NULL ["table_ref_field":protected]=> string(0) "" ["context"]=> array(0) { } ["canvas"]=> NULL ["project"]=> NULL ["fk_project"]=> NULL ["projet"]=> NULL ["contact"]=> NULL ["contact_id"]=> NULL ["thirdparty"]=> NULL ["user"]=> NULL ["ref_previous"]=> NULL ["ref_next"]=> NULL ["ref_ext"]=> NULL ["table_element_line"]=> NULL ["statut"]=> NULL ["country"]=> NULL ["country_id"]=> NULL ["country_code"]=> NULL ["barcode_type"]=> NULL ["barcode_type_code"]=> NULL ["barcode_type_label"]=> NULL ["barcode_type_coder"]=> NULL ["mode_reglement_id"]=> NULL ["cond_reglement_id"]=> NULL ["cond_reglement"]=> NULL ["fk_delivery_address"]=> NULL ["shipping_method_id"]=> NULL ["modelpdf"]=> NULL ["fk_account"]=> NULL ["note_public"]=> NULL ["note_private"]=> NULL ["note"]=> NULL ["lines"]=> NULL ["fk_incoterms"]=> NULL ["libelle_incoterms"]=> NULL ["location_incoterms"]=> NULL ["name"]=> NULL ["lastname"]=> NULL ["firstname"]=> NULL ["civility_id"]=> NULL ["description"]=> string(67) "SugarCraft Μίνι XMAS Νιφάδα χιονιού Ασημί 60g" ["fk_product_type"]=> string(1) "0" ["vat_src_code"]=> string(0) "" ["code_ventilation"]=> string(1) "0" } [4]=> object(FactureLigne)#142 (103) { ["element"]=> string(10) "facturedet" ["table_element"]=> string(10) "facturedet" ["oldline"]=> NULL ["fk_facture"]=> string(3) "817" ["fk_parent_line"]=> NULL ["label"]=> string(16) "ΜΕΤΑΦΟΡΑ" ["desc"]=> string(16) "ΜΕΤΑΦΟΡΑ" ["localtax1_type"]=> string(1) "0" ["localtax2_type"]=> string(1) "0" ["fk_remise_except"]=> NULL ["rang"]=> string(1) "0" ["fk_fournprice"]=> NULL ["pa_ht"]=> string(10) "0.00000000" ["marge_tx"]=> string(0) "" ["marque_tx"]=> float(100) ["special_code"]=> string(1) "0" ["origin"]=> NULL ["origin_id"]=> NULL ["fk_code_ventilation"]=> int(0) ["date_start"]=> string(0) "" ["date_end"]=> string(0) "" ["ref"]=> string(3) "SIP" ["product_ref"]=> string(3) "SIP" ["libelle"]=> string(16) "ΜΕΤΑΦΟΡΑ" ["product_label"]=> string(16) "ΜΕΤΑΦΟΡΑ" ["product_desc"]=> string(0) "" ["skip_update_total"]=> NULL ["situation_percent"]=> string(3) "100" ["fk_prev_id"]=> NULL ["fk_multicurrency"]=> string(1) "0" ["multicurrency_code"]=> string(3) "EUR" ["multicurrency_subprice"]=> string(10) "4.35471000" ["multicurrency_total_ht"]=> string(10) "4.35000000" ["multicurrency_total_tva"]=> string(10) "1.05000000" ["multicurrency_total_ttc"]=> string(10) "5.40000000" ["qty"]=> string(1) "1" ["subprice"]=> string(10) "4.35471000" ["product_type"]=> string(1) "1" ["fk_product"]=> string(1) "1" ["tva_tx"]=> string(6) "24.000" ["localtax1_tx"]=> string(5) "0.000" ["localtax2_tx"]=> string(5) "0.000" ["remise_percent"]=> string(1) "0" ["total_ht"]=> string(10) "4.35000000" ["total_tva"]=> string(10) "1.05000000" ["total_localtax1"]=> string(10) "0.00000000" ["total_localtax2"]=> string(10) "0.00000000" ["total_ttc"]=> string(10) "5.40000000" ["info_bits"]=> string(1) "0" ["id"]=> string(4) "3336" ["rowid"]=> string(4) "3336" ["fk_unit"]=> NULL ["db"]=> object(DoliDBMysqli)#27 (19) { ["db"]=> object(mysqli)#28 (19) { ["affected_rows"]=> int(-1) ["client_info"]=> string(79) "mysqlnd 5.0.12-dev - 20150407 - $Id: b5c5906d452ec590732a93b051f3827e02749b83 $" ["client_version"]=> int(50012) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(11) ["host_info"]=> string(25) "Localhost via UNIX socket" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(14) "5.5.62-cll-lve" ["server_version"]=> int(50562) ["stat"]=> string(153) "Uptime: 267923 Threads: 8 Questions: 154905933 Slow queries: 2162 Opens: 94596346 Flush tables: 1 Open tables: 600 Queries per second avg: 578.173" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(2792194) ["warning_count"]=> int(0) } ["type"]=> string(6) "mysqli" ["_results":"DoliDBMysqli":private]=> object(mysqli_result)#141 (5) { ["current_field"]=> int(0) ["field_count"]=> int(11) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) } ["forcecharset"]=> string(4) "utf8" ["forcecollate"]=> string(15) "utf8_general_ci" ["connected"]=> bool(true) ["database_selected"]=> bool(true) ["database_name"]=> string(13) "siteview_doli" ["database_user"]=> string(13) "siteview_doli" ["database_host"]=> string(9) "localhost" ["database_port"]=> string(4) "3306" ["transaction_opened"]=> int(0) ["lastquery"]=> string(265) "SELECT price, price_ttc, price_min, price_min_ttc, price_base_type, tva_tx, default_vat_code, tosell, price_by_qty, rowid, recuperableonly FROM llx_product_price WHERE entity IN (1) AND price_level=3 AND fk_product = '1' ORDER BY date_price DESC, rowid DESC LIMIT 1" ["lastqueryerror"]=> NULL
Ok then, you don’t have the total, but you have the informations line by line.
On each line you have :
[“tva_tx”]=> string(6) “13.000”
[“total_tva”]=> string(10) “0.24000000”
So you can make the sum
Hi
Ender this code
$pdf->MultiCell($largcol2, $tab2_hl, price($sign * ($object->tva_tx => string(6) 13.000 + (! empty($object->remise)?$object->remise:0)), 0, $outputlangs), 0, 'R', 1);
and not work, show error 500
Hi,
Sorry but your php expression is wrong.
You need to learn php first or ask someone to do the modification for you : https://wiki.dolibarr.org/index.php/List_of_Dolibarr_partners_and_providers
Hi
Local partnes
We have sent an email, we have received too many phones and no one has responded.
They have asked the same question in the local forum, but we got no answer
Hi,
I could try to help you but you need to do the debug by your self.
What you need to do is to calculate what the 3 HT values by looping on the lines.
I give you a code exemple, this is not tested, so you have to debug it :
$total_ht_13=0;
$total_ht_17=0;
$total_ht_24=0;
foreach ($object["lines"] as $facture_lines){
if ($facture_lines["tva_tx"] == "13.000"){
$total_ht_13 += $facture_lines["total_ht"];
}elseif ($facture_lines["tva_tx"] == "17.000"){
$total_ht_17 += $facture_lines["total_ht"];
}elseif ($facture_lines["tva_tx"] == "24.000"){
$total_ht_24 += $facture_lines["total_ht"];
}
}
Then you will be able to display the results
$pdf->MultiCell($largcol2, $tab2_hl, $total_ht_13, 0, $outputlangs), 0, 'R', 1);
THis needs to be tested of course.
Hi
Include this code in pdf, but error 500,check if find error but not find it.
Hello,
Can you send the file, I can chek your code ?
Also have you checked the PHP log to see what is the error 500 ?
Hello
This is code in total ht
// 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);
$total_ht_13=0;
$total_ht_17=0;
$total_ht_24=0;
foreach ($object["lines"] as $facture_lines){
if ($facture_lines["tva_tx"] == "13.000"){
$total_ht_13 += $facture_lines["total_ht"];
}elseif ($facture_lines["tva_tx"] == "17.000"){
$total_ht_17 += $facture_lines["total_ht"];
}elseif ($facture_lines["tva_tx"] == "24.000"){
$total_ht_24 += $facture_lines["total_ht"];
}
$pdf->MultiCell($largcol2, $tab2_hl, $total_ht_13, 0, $outputlangs), 0, 'R', 1);
}
Hello,
So I made a new template : https://github.com/ksar-ksar/Dymo/blob/master/pdf_as32.modules.php
With the following code :
$total_ht_13=0;
$total_ht_17=0;
$total_ht_24=0;
$nblignes = count($object->lines);
for ($i = 0 ; $i < $nblignes ; $i++){
if ($object->lines[$i]->tva_tx == "13.000"){
$total_ht_13 += $object->lines[$i]->total_ht;
}elseif ($object->lines[$i]->tva_tx == "17.000"){
$total_ht_17 += $object->lines[$i]->total_ht;
}elseif ($object->lines[$i]->tva_tx == "24.000"){
$total_ht_24 += $object->lines[$i]->total_ht;
}
}
$index++;
$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
$pdf->MultiCell($col2x-$col1x, $tab2_hl, "Total HT for 13% VAT", 0, 'L', 1);
$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
$pdf->MultiCell($largcol2, $tab2_hl, price($total_ht_13, 0, $outputlangs), 0, 'R', 1);
$index++;
$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
$pdf->MultiCell($col2x-$col1x, $tab2_hl, "Total HT for 17% VAT", 0, 'L', 1);
$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
$pdf->MultiCell($largcol2, $tab2_hl, price($total_ht_17, 0, $outputlangs), 0, 'R', 1);
$index++;
$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
$pdf->MultiCell($col2x-$col1x, $tab2_hl, "Total HT for 24% VAT", 0, 'L', 1);
$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
$pdf->MultiCell($largcol2, $tab2_hl, price($total_ht_24, 0, $outputlangs), 0, 'R', 1);
The result is :
Of course it could be improved.
Let me know if it work.