29 require_once DOL_DOCUMENT_ROOT.
'/core/modules/stock/modules_stock.php';
30 require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
31 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
32 require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
33 require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
34 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
35 require_once DOL_DOCUMENT_ROOT.
'/core/lib/pdf.lib.php';
53 public $tabTitleHeight;
63 global $conf, $langs, $mysoc;
66 $langs->loadLangs(array(
"main",
"companies"));
69 $this->
name =
"standard";
70 $this->
description = $langs->trans(
"DocumentModelStandardPDF");
75 $this->page_largeur = $formatarray[
'width'];
76 $this->page_hauteur = $formatarray[
'height'];
77 $this->format = array($this->page_largeur, $this->page_hauteur);
83 $this->option_logo = 1;
84 $this->option_multilang = 1;
85 $this->option_freetext = 0;
88 $this->emetteur = $mysoc;
89 if (!$this->emetteur->country_code) {
90 $this->emetteur->country_code = substr($langs->defaultlang, -2);
95 $this->posxdesc = $this->marge_gauche + 1;
96 $this->posxlabel = $this->posxdesc + $this->wref;
100 $this->posxunit = 135;
101 $this->posxdiscount = 155;
102 $this->postotalht = 175;
105 $this->posxtva = $this->posxup;
107 $this->posxpicture = $this->posxtva -
getDolGlobalInt(
'MAIN_DOCUMENTS_WITH_PICTURE_WIDTH', 20);
108 if ($this->page_largeur < 210) {
109 $this->posxpicture -= 20;
110 $this->posxtva -= 20;
112 $this->posxqty -= 20;
113 $this->posxunit -= 20;
114 $this->posxdiscount -= 20;
115 $this->postotalht -= 20;
118 $this->tabTitleHeight = 11;
134 public function write_file(
$object, $outputlangs, $srctemplatepath =
'', $hidedetails = 0, $hidedesc = 0, $hideref = 0)
137 global $user, $langs, $conf, $mysoc, $db, $hookmanager;
139 if (!is_object($outputlangs)) {
140 $outputlangs = $langs;
144 $outputlangs->charset_output =
'ISO-8859-1';
148 $outputlangs->loadLangs(array(
"main",
"dict",
"companies",
"bills",
"stocks",
"orders",
"deliveries"));
150 if ($conf->stock->dir_output) {
153 $dir = $conf->stock->dir_output;
154 $file = $dir.
"/SPECIMEN.pdf";
157 $dir = $conf->stock->dir_output.
"/".$objectref;
158 $file = $dir.
"/".$objectref.
".pdf";
162 $supplierprices = $stockFournisseur->list_product_fournisseur_price(
$object->id);
163 $object->supplierprices = $supplierprices;
165 $productstatic =
new Product($this->db);
167 if (!file_exists($dir)) {
169 $this->error = $langs->transnoentities(
"ErrorCanNotCreateDir", $dir);
174 if (file_exists($dir)) {
176 if (!is_object($hookmanager)) {
177 include_once DOL_DOCUMENT_ROOT.
'/core/class/hookmanager.class.php';
180 $hookmanager->initHooks(array(
'pdfgeneration'));
181 $parameters = array(
'file' => $file,
'object' =>
$object,
'outputlangs' => $outputlangs);
183 $reshook = $hookmanager->executeHooks(
'beforePDFCreation', $parameters,
$object, $action);
188 $pdf->SetAutoPageBreak(1, 0);
190 $heightforinfotot = 40;
191 $heightforfreetext = (isset($conf->global->MAIN_PDF_FREETEXT_HEIGHT) ? $conf->global->MAIN_PDF_FREETEXT_HEIGHT : 5);
192 $heightforfooter = $this->marge_basse + 8;
194 $heightforfooter += 6;
197 if (class_exists(
'TCPDF')) {
198 $pdf->setPrintHeader(
false);
199 $pdf->setPrintFooter(
false);
204 $pagecount = $pdf->setSourceFile($conf->mycompany->dir_output.
'/' .
getDolGlobalString(
'MAIN_ADD_PDF_BACKGROUND'));
205 $tplidx = $pdf->importPage(1);
210 $pdf->SetDrawColor(128, 128, 128);
212 $pdf->SetTitle($outputlangs->convToOutputCharset(
$object->ref));
213 $pdf->SetSubject($outputlangs->transnoentities(
"Stock"));
214 $pdf->SetCreator(
"Dolibarr ".DOL_VERSION);
215 $pdf->SetAuthor($outputlangs->convToOutputCharset($user->getFullName($outputlangs)));
216 $pdf->SetKeyWords($outputlangs->convToOutputCharset(
$object->ref).
" ".$outputlangs->transnoentities(
"Stock").
" ".$outputlangs->convToOutputCharset(
$object->label));
218 $pdf->SetCompression(
false);
222 $pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite);
227 if (!empty($tplidx)) {
228 $pdf->useTemplate($tplidx);
232 $pdf->SetFont(
'',
'', $default_font_size - 1);
233 $pdf->MultiCell(0, 3,
'');
234 $pdf->SetTextColor(0, 0, 0);
236 $tab_top = 65 + $top_shift;
237 $tab_top_newpage = (!
getDolGlobalInt(
'MAIN_PDF_DONOTREPEAT_HEAD') ? 42 + $top_shift : 10);
239 $tab_height = $this->page_hauteur - $tab_top - $heightforfooter - $heightforfreetext;
245 $totalvalue = $totalvaluesell = 0;
247 $sortfield =
'p.ref';
250 $sql =
"SELECT p.rowid as rowid, p.ref, p.label as produit, p.tobatch, p.fk_product_type as type, p.pmp as ppmp, p.price, p.price_ttc, p.entity,";
251 $sql .=
" ps.reel as value";
252 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_stock as ps, ".MAIN_DB_PREFIX.
"product as p";
253 $sql .=
" WHERE ps.fk_product = p.rowid";
254 $sql .=
" AND ps.reel <> 0";
255 $sql .=
" AND ps.fk_entrepot = ".((int)
$object->id);
256 $sql .= $this->db->order($sortfield, $sortorder);
259 $resql = $this->db->query(
$sql);
261 $num = $this->db->num_rows($resql);
264 $nexY = $tab_top + $this->tabTitleHeight;
266 for ($i = 0; $i < $nblines; $i++) {
269 $objp = $this->db->fetch_object($resql);
273 $sql =
"SELECT label";
274 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_lang";
275 $sql .=
" WHERE fk_product = ".((int) $objp->rowid);
276 $sql .=
" AND lang = '".$this->db->escape($langs->getDefaultLang()).
"'";
279 $result = $this->db->query(
$sql);
281 $objtp = $this->db->fetch_object($result);
282 if ($objtp->label !=
'') {
283 $objp->produit = $objtp->label;
288 $pdf->SetFont(
'',
'', $default_font_size - 1);
289 $pdf->SetTextColor(0, 0, 0);
291 $pdf->setTopMargin($tab_top_newpage);
292 $pdf->setPageOrientation(
'', 1, $heightforfooter + $heightforfreetext + $heightforinfotot);
293 $pageposbefore = $pdf->getPage();
296 $curX = $this->posxdesc - 1;
298 $showpricebeforepagebreak = 1;
300 $pdf->startTransaction();
301 $pdf->writeHTMLCell($this->wref, 3, $curX, $curY, $outputlangs->convToOutputCharset($objp->ref), 0, 1,
false,
true,
'J',
true);
303 $pageposafter = $pdf->getPage();
304 if ($pageposafter > $pageposbefore) {
305 $pdf->rollbackTransaction(
true);
306 $pageposafter = $pageposbefore;
308 $pdf->setPageOrientation(
'', 1, $heightforfooter);
309 $pdf->writeHTMLCell($this->wref, 4, $curX, $curY, $outputlangs->convToOutputCharset($objp->ref), 0, 1,
false,
true,
'J',
true);
311 $pageposafter = $pdf->getPage();
312 $posyafter = $pdf->GetY();
313 if ($posyafter > ($this->page_hauteur - ($heightforfooter + $heightforfreetext + $heightforinfotot))) {
314 if ($i == ($nblines - 1)) {
315 $pdf->AddPage(
'',
'',
true);
316 if (!empty($tplidx)) {
317 $pdf->useTemplate($tplidx);
322 $pdf->setPage($pageposafter + 1);
329 $showpricebeforepagebreak = 1;
331 $showpricebeforepagebreak = 0;
335 $pdf->commitTransaction();
337 $posYAfterDescription = $pdf->GetY();
339 $nexY = $pdf->GetY();
340 $pageposafter = $pdf->getPage();
342 $pdf->setPage($pageposbefore);
343 $pdf->setTopMargin($this->marge_haute);
344 $pdf->setPageOrientation(
'', 1, 0);
347 if ($pageposafter > $pageposbefore && empty($showpricebeforepagebreak)) {
348 $pdf->setPage($pageposafter);
349 $curY = $tab_top_newpage;
352 $pdf->SetFont(
'',
'', $default_font_size - 1);
354 $productstatic->id = $objp->rowid;
355 $productstatic->ref = $objp->ref;
356 $productstatic->label = $objp->produit;
357 $productstatic->type = $objp->type;
358 $productstatic->entity = $objp->entity;
359 $productstatic->status_batch = $objp->tobatch;
366 $pdf->SetXY($this->posxlabel + 0.8, $curY);
367 $pdf->MultiCell($this->posxqty - $this->posxlabel - 0.8, 3,
dol_trunc($productstatic->label, 24), 0,
'L');
370 $valtoshow =
price2num($objp->value,
'MS');
371 $towrite = (empty($valtoshow) ?
'0' : $valtoshow);
373 $pdf->SetXY($this->posxqty, $curY);
374 $pdf->MultiCell($this->posxup - $this->posxqty - 0.8, 3, $towrite, 0,
'R');
377 $totalunit += $objp->value;
379 $pdf->SetXY($this->posxup, $curY);
380 $pdf->MultiCell($this->posxunit - $this->posxup - 0.8, 3,
price(
price2num($objp->ppmp,
'MU'), 0, $outputlangs), 0,
'R');
383 $pdf->SetXY($this->posxunit, $curY);
384 $pdf->MultiCell($this->posxdiscount - $this->posxunit - 0.8, 3,
price(
price2num($objp->ppmp * $objp->value,
'MT'), 0, $outputlangs), 0,
'R');
385 $totalvalue +=
price2num($objp->ppmp * $objp->value,
'MT');
389 $pricemin = $objp->price;
390 $pdf->SetXY($this->posxdiscount, $curY);
391 $pdf->MultiCell($this->postotalht - $this->posxdiscount, 3,
price(
price2num($pricemin,
'MU'), 0, $outputlangs), 0,
'R', 0);
394 $pdf->SetXY($this->postotalht, $curY);
395 $pdf->MultiCell($this->page_largeur - $this->marge_droite - $this->postotalht, 3,
price(
price2num($pricemin * $objp->value,
'MT'), 0, $outputlangs), 0,
'R', 0);
397 $totalvaluesell +=
price2num($pricemin * $objp->value,
'MT');
401 $pdf->setPage($pageposafter);
402 $pdf->SetLineStyle(array(
'dash' =>
'1,1',
'color' => array(80, 80, 80)));
404 $pdf->line($this->marge_gauche, $nexY + 1, $this->page_largeur - $this->marge_droite, $nexY + 1);
405 $pdf->SetLineStyle(array(
'dash' => 0));
411 while ($pagenb < $pageposafter) {
412 $pdf->setPage($pagenb);
414 $this->
_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforfooter, 0, $outputlangs, 0, 1,
$object->multicurrency_code);
416 $this->
_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforfooter, 0, $outputlangs, 1, 1,
$object->multicurrency_code);
420 $pdf->setPage($pagenb);
421 $pdf->setPageOrientation(
'', 1, 0);
425 if (!empty($tplidx)) {
426 $pdf->useTemplate($tplidx);
429 if (isset(
$object->lines[$i + 1]->pagebreak) &&
$object->lines[$i + 1]->pagebreak) {
431 $this->
_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforfooter, 0, $outputlangs, 0, 1,
$object->multicurrency_code);
433 $this->
_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforfooter, 0, $outputlangs, 1, 1,
$object->multicurrency_code);
438 if (!empty($tplidx)) {
439 $pdf->useTemplate($tplidx);
448 $this->db->free($resql);
458 $pdf->SetLineStyle(array(
'dash' =>
'0',
'color' => array(200, 200, 200)));
459 $pdf->line($this->marge_gauche, $curY - 1, $this->page_largeur - $this->marge_droite, $curY - 1);
460 $pdf->SetLineStyle(array(
'dash' => 0));
462 $pdf->SetFont(
'',
'B', $default_font_size - 1);
463 $pdf->SetTextColor(0, 0, 0);
466 $pdf->SetXY($this->posxdesc, $curY);
467 $pdf->MultiCell($this->wref, 3, $langs->trans(
"Total"), 0,
'L');
470 $valtoshow =
price2num($totalunit,
'MS');
471 $towrite = empty($valtoshow) ?
'0' : $valtoshow;
473 $pdf->SetXY($this->posxqty, $curY);
474 $pdf->MultiCell($this->posxup - $this->posxqty - 0.8, 3, $towrite, 0,
'R');
477 $pdf->SetXY($this->posxunit, $curY);
478 $pdf->MultiCell($this->posxdiscount - $this->posxunit - 0.8, 3,
price(
price2num($totalvalue,
'MT'), 0, $outputlangs), 0,
'R');
483 $pdf->SetXY($this->postotalht, $curY);
484 $pdf->MultiCell($this->page_largeur - $this->marge_droite - $this->postotalht, 3,
price(
price2num($totalvaluesell,
'MT'), 0, $outputlangs), 0,
'R', 0);
492 $notetoshow = empty(
$object->note_public) ?
'' :
$object->note_public;
502 $pdf->SetFont(
'',
'', $default_font_size - 1);
503 $pdf->writeHTMLCell(190, 3, $this->posxdesc - 1, $tab_top,
dol_htmlentitiesbr($notetoshow), 0, 1);
504 $nexY = $pdf->GetY();
505 $height_note = $nexY - $tab_top;
508 $pdf->SetDrawColor(192, 192, 192);
509 $pdf->Rect($this->marge_gauche, $tab_top - 1, $this->page_largeur - $this->marge_gauche - $this->marge_droite, $height_note + 1);
511 $tab_height = $tab_height - $height_note;
512 $tab_top = $nexY + 6;
525 $this->
_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforinfotot - $heightforfreetext - $heightforfooter, 0, $outputlangs, 0, 0,
$object->multicurrency_code);
526 $bottomlasttab = $this->page_hauteur - $heightforinfotot - $heightforfreetext - $heightforfooter + 1;
528 $this->
_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforinfotot - $heightforfreetext - $heightforfooter, 0, $outputlangs, 1, 0,
$object->multicurrency_code);
529 $bottomlasttab = $this->page_hauteur - $heightforinfotot - $heightforfreetext - $heightforfooter + 1;
532 $bottomlasttab = $this->page_hauteur - $heightforinfotot - $heightforfreetext - $heightforfooter + 1;
542 if (method_exists($pdf,
'AliasNbPages')) {
543 $pdf->AliasNbPages();
548 $pdf->Output($file,
'F');
551 $hookmanager->initHooks(array(
'pdfgeneration'));
552 $parameters = array(
'file' => $file,
'object' =>
$object,
'outputlangs' => $outputlangs);
554 $reshook = $hookmanager->executeHooks(
'afterPDFCreation', $parameters, $this, $action);
556 $this->error = $hookmanager->error;
557 $this->errors = $hookmanager->errors;
562 $this->result = array(
'fullpath' => $file);
566 $this->error = $langs->trans(
"ErrorCanNotCreateDir", $dir);
570 $this->error = $langs->trans(
"ErrorConstantNotDefined",
"PRODUCT_OUTPUTDIR");
589 protected function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop = 0, $hidebottom = 0, $currency =
'')
599 $currency = !empty($currency) ? $currency : $conf->currency;
603 $pdf->SetTextColor(0, 0, 0);
604 $pdf->SetFont(
'',
'', $default_font_size - 2);
606 if (empty($hidetop)) {
607 $titre = $outputlangs->transnoentities(
"AmountInCurrency", $outputlangs->transnoentitiesnoconv(
"Currency".$currency));
608 $pdf->SetXY($this->page_largeur - $this->marge_droite - ($pdf->GetStringWidth($titre) + 3), $tab_top - 4);
609 $pdf->MultiCell(($pdf->GetStringWidth($titre) + 3), 2, $titre);
613 $pdf->Rect($this->marge_gauche, $tab_top, $this->page_largeur - $this->marge_droite - $this->marge_gauche, 5,
'F', array(), explode(
',',
getDolGlobalString(
'MAIN_PDF_TITLE_BACKGROUND_COLOR')));
617 $pdf->SetDrawColor(128, 128, 128);
619 $pdf->SetFont(
'',
'B', $default_font_size - 3);
622 $this->
printRect($pdf, $this->marge_gauche, $tab_top, $this->page_largeur - $this->marge_gauche - $this->marge_droite, $tab_height, $hidetop, $hidebottom);
624 $pdf->SetLineStyle(array(
'dash' =>
'0',
'color' => array(200, 200, 200)));
625 $pdf->SetDrawColor(200, 200, 200);
626 $pdf->line($this->marge_gauche, $tab_top, $this->page_largeur - $this->marge_droite, $tab_top);
627 $pdf->SetLineStyle(array(
'dash' => 0));
628 $pdf->SetDrawColor(128, 128, 128);
629 $pdf->SetTextColor(0, 0, 0);
632 if (empty($hidetop)) {
633 $pdf->line($this->marge_gauche, $tab_top + 11, $this->page_largeur - $this->marge_droite, $tab_top + 11);
634 $pdf->SetXY($this->posxdesc - 1, $tab_top + 1);
635 $pdf->MultiCell($this->wref, 3, $outputlangs->transnoentities(
"Ref"),
'',
'L');
638 $pdf->line($this->posxlabel - 1, $tab_top, $this->posxlabel - 1, $tab_top + $tab_height);
639 if (empty($hidetop)) {
640 $pdf->SetXY($this->posxlabel - 1, $tab_top + 1);
641 $pdf->MultiCell($this->posxqty - $this->posxlabel - 1, 2, $outputlangs->transnoentities(
"Label"),
'',
'C');
644 $pdf->line($this->posxqty - 1, $tab_top, $this->posxqty - 1, $tab_top + $tab_height);
645 if (empty($hidetop)) {
646 $pdf->SetXY($this->posxqty - 1, $tab_top + 1);
647 $pdf->MultiCell($this->posxup - $this->posxqty - 1, 2, $outputlangs->transnoentities(
"Units"),
'',
'C');
650 $pdf->line($this->posxup - 1, $tab_top, $this->posxup - 1, $tab_top + $tab_height);
651 if (empty($hidetop)) {
652 $pdf->SetXY($this->posxup - 1, $tab_top + 1);
653 $pdf->MultiCell($this->posxunit - $this->posxup - 1, 2, $outputlangs->transnoentities(
"AverageUnitPricePMPShort"),
'',
'C');
656 $pdf->line($this->posxunit - 1, $tab_top, $this->posxunit - 1, $tab_top + $tab_height);
657 if (empty($hidetop)) {
658 $pdf->SetXY($this->posxunit - 1, $tab_top + 1);
659 $pdf->MultiCell($this->posxdiscount - $this->posxunit - 1, 2, $outputlangs->transnoentities(
"EstimatedStockValueShort"),
'',
'C');
662 $pdf->line($this->posxdiscount - 1, $tab_top, $this->posxdiscount - 1, $tab_top + $tab_height);
663 if (empty($hidetop)) {
664 $pdf->SetXY($this->posxdiscount - 1, $tab_top + 1);
665 $pdf->MultiCell($this->postotalht - $this->posxdiscount + 1, 2, $outputlangs->transnoentities(
"SellPriceMin"),
'',
'C');
668 $pdf->line($this->postotalht, $tab_top, $this->postotalht, $tab_top + $tab_height);
669 if (empty($hidetop)) {
670 $pdf->SetXY($this->postotalht - 1, $tab_top + 1);
671 $pdf->MultiCell($this->page_largeur - $this->marge_droite - $this->postotalht, 2, $outputlangs->transnoentities(
"EstimatedStockValueSellShort"),
'',
'C');
674 if (empty($hidetop)) {
675 $pdf->SetDrawColor(200, 200, 200);
676 $pdf->SetLineStyle(array(
'dash' =>
'0',
'color' => array(200, 200, 200)));
677 $pdf->line($this->marge_gauche, $tab_top + $this->tabTitleHeight, $this->page_largeur - $this->marge_droite, $tab_top + $this->tabTitleHeight);
678 $pdf->SetLineStyle(array(
'dash' => 0));
695 global $conf, $langs;
698 $outputlangs->loadLangs(array(
"main",
"propal",
"companies",
"bills",
"orders",
"stocks"));
706 pdf_watermark($pdf, $outputlangs, $this->page_hauteur, $this->page_largeur,
'mm', $conf->global->STOCK_DRAFT_WATERMARK);
709 $pdf->SetTextColor(0, 0, 60);
710 $pdf->SetFont(
'',
'B', $default_font_size + 3);
712 $posy = $this->marge_haute;
713 $posx = $this->page_largeur - $this->marge_droite - 100;
715 $pdf->SetXY($this->marge_gauche, $posy);
719 $logo = $conf->mycompany->dir_output.
'/logos/'.$this->emetteur->logo;
720 if ($this->emetteur->logo) {
721 if (is_readable($logo)) {
723 $pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);
725 $pdf->SetTextColor(200, 0, 0);
726 $pdf->SetFont(
'',
'B', $default_font_size - 2);
727 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"ErrorLogoFileNotFound", $logo), 0,
'L');
728 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"ErrorGoToGlobalSetup"), 0,
'L');
731 $text = $this->emetteur->name;
732 $pdf->MultiCell(100, 4, $outputlangs->convToOutputCharset($text), 0,
'L');
735 $yafterleft = $pdf->GetY() + $height;
737 $pdf->SetFont(
'',
'B', $default_font_size + 3);
738 $pdf->SetXY($posx, $posy);
739 $pdf->SetTextColor(0, 0, 60);
741 $pdf->MultiCell(100, 4, $outputlangs->transnoentities(
"Warehouse").
' '.$outputlangs->convToOutputCharset(
$object->label),
'',
'R');
744 $pdf->SetFont(
'',
'', $default_font_size - 1);
745 $pdf->SetXY($posx, $posy);
746 $pdf->SetTextColor(0, 0, 60);
748 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Label").
' : '.
$object->lieu,
'',
'R');
753 $pdf->SetXY($posx, $posy);
754 $pdf->SetTextColor(0, 0, 60);
758 $hasparent = (!empty(
$object->fk_parent) && $e->fetch(
$object->fk_parent) > 0);
761 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"ParentWarehouse").
' :',
'',
'R');
764 $pdf->SetXY($posx - 50, $posy);
765 $pdf->MultiCell(150, 3, $e->label,
'',
'R');
768 $yafterright = $pdf->GetY();
771 $nbpage = $pdf->getPage();
773 $nexY = max($yafterleft, $yafterright);
775 $pdf->SetXY($posx, $posy);
776 $pdf->writeHTMLCell(190, 2, $this->marge_gauche, $nexY,
'<b>'.$outputlangs->transnoentities(
"Description").
' : </b>'.nl2br(
$object->description), 0, 1);
777 $nexY = $pdf->GetY();
779 $calcproductsunique =
$object->nb_different_products();
780 $calcproducts =
$object->nb_products();
783 $pdf->writeHTMLCell(190, 2, $this->marge_gauche, $nexY,
'<b>'.$outputlangs->transnoentities(
"NumberOfDifferentProducts").
' : </b>'.(empty($calcproductsunique[
'nb']) ?
'0' : $calcproductsunique[
'nb']), 0, 1);
784 $nexY = $pdf->GetY();
787 $valtoshow =
price2num($calcproducts[
'nb'],
'MS');
788 $pdf->writeHTMLCell(190, 2, $this->marge_gauche, $nexY,
'<b>'.$outputlangs->transnoentities(
"NumberOfProducts").
' : </b>'.(empty($valtoshow) ?
'0' : $valtoshow), 0, 1);
789 $nexY = $pdf->GetY();
792 $pdf->writeHTMLCell(190, 2, $this->marge_gauche, $nexY,
'<b>'.$outputlangs->transnoentities(
"EstimatedStockValueShort").
' : </b>'.
price((empty($calcproducts[
'value']) ?
'0' :
price2num($calcproducts[
'value'],
'MT')), 0, $langs, 0, -1, -1, $conf->currency), 0, 1);
793 $nexY = $pdf->GetY();
796 $pdf->writeHTMLCell(190, 2, $this->marge_gauche, $nexY,
'<b>'.$outputlangs->transnoentities(
"Date").
' : </b>'.
dol_print_date(
dol_now(),
'dayhour'), 0, 1);
797 $nexY = $pdf->GetY();
800 $sql =
"SELECT max(m.datem) as datem";
801 $sql .=
" FROM ".MAIN_DB_PREFIX.
"stock_mouvement as m";
802 $sql .=
" WHERE m.fk_entrepot = ".((int)
$object->id);
803 $resqlbis = $this->db->query(
$sql);
805 $obj = $this->db->fetch_object($resqlbis);
806 $lastmovementdate = $this->db->jdate($obj->datem);
811 if ($lastmovementdate) {
814 $toWrite = $outputlangs->transnoentities(
"None");
817 $pdf->writeHTMLCell(190, 2, $this->marge_gauche, $nexY,
'<b>'.$outputlangs->transnoentities(
"LastMovement").
' : </b>'.$toWrite, 0, 1);
819 $nexY = $pdf->GetY();
825 $current_y = $pdf->getY();
827 if ($current_y < $pdf->getY()) {
828 $top_shift = $pdf->getY() - $current_y;
831 $pdf->SetTextColor(0, 0, 0);
848 $showdetails =
getDolGlobalInt(
'MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS', 0);
849 return pdf_pagefoot($pdf, $outputlangs,
'PRODUCT_FREE_TEXT', $this->emetteur, $this->marge_basse, $this->marge_gauche, $this->page_hauteur,
$object, $showdetails, $hidefreetext);
if($user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
printRect($pdf, $x, $y, $l, $h, $hidetop=0, $hidebottom=0)
Rect pdf.
Class to manage warehouses.
Parent class for stock models of doc generators.
Class to manage predefined suppliers products.
Class to manage products or services.
Class to generate expense report based on standard model.
__construct($db)
Constructor.
_tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop=0, $hidebottom=0, $currency='')
Show table for lines.
_pagehead(&$pdf, $object, $showaddress, $outputlangs)
Show top header of page.
_pagehead(&$pdf, $object, $showaddress, $outputlangs, $titlekey="")
Show top header of page.
_pagefoot(&$pdf, $object, $outputlangs, $hidefreetext=0)
Show footer of page.
write_file($object, $outputlangs, $srctemplatepath='', $hidedetails=0, $hidedesc=0, $hideref=0)
Function to build a document on disk using the generic odt module.
if(isModEnabled('invoice') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&!getDolGlobalString('MAIN_USE_NEW_SUPPLIERMOD') && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') && $user->hasRight('don', 'lire')) if(isModEnabled('tax') && $user->hasRight('tax', 'charges', 'lire')) if(isModEnabled('invoice') &&isModEnabled('order') && $user->hasRight("commande", "lire") &&!getDolGlobalString('WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER')) $sql
Social contributions to pay.
print *****$script_file(".$version.") pid cd cd cd description as description
Only used if Module[ID]Desc translation string is not found.
if(!function_exists('dolEscapeXML')) convertBackOfficeMediasLinksToPublicLinks($notetoshow)
Convert links to local wrapper to medias files into a string into a public external URL readable on i...
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
dolChmod($filepath, $newmask='')
Change mod of a file.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
complete_substitutions_array(&$substitutionarray, $outputlangs, $object=null, $parameters=null, $callfunc="completesubstitutionarray")
Complete the $substitutionarray with more entries coming from external module that had set the "subst...
make_substitutions($text, $substitutionarray, $outputlangs=null, $converttextinhtmlifnecessary=0)
Make substitution into a text string, replacing keys with vals from $substitutionarray (oldval=>newva...
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '…' if string larger than length.
dol_htmlentitiesbr($stringtoencode, $nl2brmode=0, $pagecodefrom='UTF-8', $removelasteolbr=1)
This function is called to encode a string into a HTML string but differs from htmlentities because a...
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
dol_mkdir($dir, $dataroot='', $newmask='')
Creation of a directory (this can create recursive subdir)
pdf_getPDFFontSize($outputlangs)
Return font size to use for PDF generation.
pdf_getFormat(Translate $outputlangs=null, $mode='setup')
Return array with format properties of default PDF format.
pdf_getHeightForLogo($logo, $url=false)
Return height to use for Logo onto PDF.
pdf_pagefoot(&$pdf, $outputlangs, $paramfreetext, $fromcompany, $marge_basse, $marge_gauche, $page_hauteur, $object, $showdetails=0, $hidefreetext=0, $page_largeur=0, $watermark='')
Show footer of page for PDF generation.
pdf_pagehead(&$pdf, $outputlangs, $page_height)
Show header of page for PDF generation.
pdf_writeLinkedObjects(&$pdf, $object, $outputlangs, $posx, $posy, $w, $h, $align, $default_font_size)
Show linked objects for PDF generation.
pdf_getPDFFont($outputlangs)
Return font name to use for PDF generation.
pdf_getSubstitutionArray($outputlangs, $exclude=null, $object=null, $onlykey=0, $include=null)
Return array of possible substitutions for PDF content (without external module substitutions).
pdf_getInstance($format='', $metric='mm', $pagetype='P')
Return a PDF instance object.
pdf_watermark(&$pdf, $outputlangs, $h, $w, $unit, $text)
Add a draft watermark on PDF files.
if(preg_match('/crypted:/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
$conf db name
Only used if Module[ID]Name translation string is not found.