38 include_once DOL_DOCUMENT_ROOT.
'/core/lib/signature.lib.php';
48 global $langs, $conf, $user;
53 $head[$h][0] = DOL_URL_ROOT.
'/admin/pdf.php';
54 $head[$h][1] = $langs->trans(
"Parameters");
55 $head[$h][2] =
'general';
65 $head[$h][0] = DOL_URL_ROOT.
'/admin/pdf_other.php';
66 $head[$h][1] = $langs->trans(
"Other");
67 $head[$h][2] =
'other';
86 global $conf, $db, $langs;
88 dol_syslog(
"pdf_getFormat Get paper format with mode=".$mode.
" MAIN_PDF_FORMAT=".(empty($conf->global->MAIN_PDF_FORMAT) ?
'null' : $conf->global->MAIN_PDF_FORMAT).
" outputlangs->defaultlang=".(is_object($outputlangs) ? $outputlangs->defaultlang :
'null').
" and langs->defaultlang=".(is_object($langs) ? $langs->defaultlang :
'null'));
95 if ($mode ==
'auto' || empty($conf->global->MAIN_PDF_FORMAT) || $conf->global->MAIN_PDF_FORMAT ==
'auto') {
96 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
99 $pdfformat = $conf->global->MAIN_PDF_FORMAT;
102 $sql =
"SELECT code, label, width, height, unit FROM ".MAIN_DB_PREFIX.
"c_paper_format";
103 $sql .=
" WHERE code = '".$db->escape($pdfformat).
"'";
104 $resql = $db->query($sql);
106 $obj = $db->fetch_object(
$resql);
108 $width = (int) $obj->width;
109 $height = (
int) $obj->height;
115 return array(
'width'=>$width,
'height'=>$height,
'unit'=>$unit);
131 if (!defined(
'K_TCPDF_EXTERNAL_CONFIG')) {
132 define(
'K_TCPDF_EXTERNAL_CONFIG', 1);
133 define(
'K_PATH_CACHE', DOL_DATA_ROOT.
'/admin/temp/');
134 define(
'K_PATH_URL_CACHE', DOL_DATA_ROOT.
'/admin/temp/');
136 define(
'K_BLANK_IMAGE',
'_blank.png');
137 define(
'PDF_PAGE_FORMAT',
'A4');
138 define(
'PDF_PAGE_ORIENTATION',
'P');
139 define(
'PDF_CREATOR',
'TCPDF');
140 define(
'PDF_AUTHOR',
'TCPDF');
141 define(
'PDF_HEADER_TITLE',
'TCPDF Example');
142 define(
'PDF_HEADER_STRING',
"by Dolibarr ERP CRM");
143 define(
'PDF_UNIT',
'mm');
144 define(
'PDF_MARGIN_HEADER', 5);
145 define(
'PDF_MARGIN_FOOTER', 10);
146 define(
'PDF_MARGIN_TOP', 27);
147 define(
'PDF_MARGIN_BOTTOM', 25);
148 define(
'PDF_MARGIN_LEFT', 15);
149 define(
'PDF_MARGIN_RIGHT', 15);
150 define(
'PDF_FONT_NAME_MAIN',
'helvetica');
151 define(
'PDF_FONT_SIZE_MAIN', 10);
152 define(
'PDF_FONT_NAME_DATA',
'helvetica');
153 define(
'PDF_FONT_SIZE_DATA', 8);
154 define(
'PDF_FONT_MONOSPACED',
'courier');
155 define(
'PDF_IMAGE_SCALE_RATIO', 1.25);
156 define(
'HEAD_MAGNIFICATION', 1.1);
157 define(
'K_CELL_HEIGHT_RATIO', 1.25);
158 define(
'K_TITLE_MAGNIFICATION', 1.3);
159 define(
'K_SMALL_RATIO', 2 / 3);
160 define(
'K_THAI_TOPCHARS',
true);
161 define(
'K_TCPDF_CALLS_IN_HTML',
true);
162 if (!empty($conf->global->TCPDF_THROW_ERRORS_INSTEAD_OF_DIE)) {
163 define(
'K_TCPDF_THROW_EXCEPTION_ERROR',
true);
165 define(
'K_TCPDF_THROW_EXCEPTION_ERROR',
false);
170 require_once TCPDF_PATH.
'tcpdf.php';
173 if (empty($conf->global->MAIN_DISABLE_TCPDI)) {
174 require_once TCPDI_PATH.
'tcpdi.php';
182 if (!empty($conf->global->PDF_USE_A)) {
183 $pdfa = $conf->global->PDF_USE_A;
186 if (class_exists(
'TCPDI')) {
187 $pdf =
new TCPDI($pagetype, $metric, $format,
true,
'UTF-8',
false, $pdfa);
189 $pdf =
new TCPDF($pagetype, $metric, $format,
true,
'UTF-8',
false, $pdfa);
193 if (!empty($conf->global->PDF_SECURITY_ENCRYPTION)) {
207 $pdfrights = (!empty($conf->global->PDF_SECURITY_ENCRYPTION_RIGHTS) ?json_decode($conf->global->PDF_SECURITY_ENCRYPTION_RIGHTS,
true) : array(
'modify',
'copy'));
210 $pdfuserpass = (!empty($conf->global->PDF_SECURITY_ENCRYPTION_USERPASS) ? $conf->global->PDF_SECURITY_ENCRYPTION_USERPASS :
'');
213 $pdfownerpass = (!empty($conf->global->PDF_SECURITY_ENCRYPTION_OWNERPASS) ? $conf->global->PDF_SECURITY_ENCRYPTION_OWNERPASS :
null);
216 $encstrength = (!empty($conf->global->PDF_SECURITY_ENCRYPTION_STRENGTH) ? $conf->global->PDF_SECURITY_ENCRYPTION_STRENGTH : 0);
220 $pubkeys = (!empty($conf->global->PDF_SECURITY_ENCRYPTION_PUBKEYS) ?json_decode($conf->global->PDF_SECURITY_ENCRYPTION_PUBKEYS,
true) :
null);
222 $pdf->SetProtection($pdfrights, $pdfuserpass, $pdfownerpass, $encstrength, $pubkeys);
236 require_once TCPDF_PATH.
'tcpdf_parser.php';
238 $isencrypted =
false;
240 $content = file_get_contents($pathoffile);
243 @($parser = new \TCPDF_PARSER(ltrim($content)));
244 list($xref, $data) = $parser->getParsedData();
248 if (isset($xref[
'trailer'][
'encrypt'])) {
269 if (!empty($conf->global->MAIN_PDF_FORCE_FONT)) {
270 return $conf->global->MAIN_PDF_FORCE_FONT;
274 if (class_exists(
'TCPDF')) {
275 if ($outputlangs->trans(
'FONTFORPDF') !=
'FONTFORPDF') {
276 $font = $outputlangs->trans(
'FONTFORPDF');
293 if (class_exists(
'TCPDF')) {
294 if ($outputlangs->trans(
'FONTSIZEFORPDF') !=
'FONTSIZEFORPDF') {
295 $size = (int) $outputlangs->trans(
'FONTSIZEFORPDF');
298 if (!empty($conf->global->MAIN_PDF_FORCE_FONT_SIZE)) {
299 $size = $conf->global->MAIN_PDF_FORCE_FONT_SIZE;
316 $height = (empty($conf->global->MAIN_DOCUMENTS_LOGO_HEIGHT) ? 20 : $conf->global->MAIN_DOCUMENTS_LOGO_HEIGHT);
318 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
320 if ($tmp[
'height']) {
321 $width = round($height * $tmp[
'width'] / $tmp[
'height']);
322 if ($width > $maxwidth) {
323 $height = $height * $maxwidth / $width;
341 $pdf->startTransaction();
343 $start_y = $pdf->GetY();
345 $start_page = $pdf->getPage();
347 $pdf->writeHTMLCell(0, 0, 0, $start_y, $htmlcontent, 0, 1,
false,
true,
'J',
true);
349 $end_y = $pdf->GetY();
350 $end_page = $pdf->getPage();
353 if ($end_page == $start_page) {
354 $height = $end_y - $start_y;
356 for ($page = $start_page; $page <= $end_page; ++$page) {
357 $pdf->setPage($page);
358 $tmpm = $pdf->getMargins();
359 $tMargin = $tmpm[
'top'];
360 if ($page == $start_page) {
362 $height = $pdf->getPageHeight() - $start_y - $pdf->getBreakMargin();
363 } elseif ($page == $end_page) {
365 $height = $end_y - $tMargin;
367 $height = $pdf->getPageHeight() - $tMargin - $pdf->getBreakMargin();
372 $pdf = $pdf->rollbackTransaction();
393 if ($thirdparty instanceof
Societe) {
394 $socname = $thirdparty->name;
395 if (($includealias ||
getDolGlobalInt(
'PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) && !empty($thirdparty->name_alias)) {
397 $socname = $thirdparty->name_alias.
" - ".$thirdparty->name;
399 $socname = $thirdparty->name.
" - ".$thirdparty->name_alias;
402 } elseif ($thirdparty instanceof
Contact) {
403 if ($thirdparty->socid > 0) {
404 $thirdparty->fetch_thirdparty();
405 $socname = $thirdparty->thirdparty->name;
406 if (($includealias ||
getDolGlobalInt(
'PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) && !empty($thirdparty->thirdparty->name_alias)) {
408 $socname = $thirdparty->thirdparty->name_alias.
" - ".$thirdparty->thirdparty->name;
410 $socname = $thirdparty->thirdparty->name.
" - ".$thirdparty->thirdparty->name_alias;
415 throw new InvalidArgumentException(
'Parameter 1 $thirdparty is not a Societe nor Contact');
434 function pdf_build_address($outputlangs, $sourcecompany, $targetcompany =
'', $targetcontact =
'', $usecontact = 0, $mode =
'source', $object =
null)
436 global $conf, $hookmanager;
438 if ($mode ==
'source' && !is_object($sourcecompany)) {
441 if ($mode ==
'target' && !is_object($targetcompany)) {
445 if (!empty($sourcecompany->state_id) && empty($sourcecompany->state)) {
446 $sourcecompany->state =
getState($sourcecompany->state_id);
448 if (!empty($targetcompany->state_id) && empty($targetcompany->state)) {
449 $targetcompany->state =
getState($targetcompany->state_id);
454 if (is_object($hookmanager)) {
455 $parameters = array(
'sourcecompany' => &$sourcecompany,
'targetcompany' => &$targetcompany,
'targetcontact' => &$targetcontact,
'outputlangs' => $outputlangs,
'mode' => $mode,
'usecontact' => $usecontact);
457 $reshook = $hookmanager->executeHooks(
'pdf_build_address', $parameters, $object, $action);
458 $stringaddress .= $hookmanager->resPrint;
460 if (empty($reshook)) {
461 if ($mode ==
'source') {
463 if (isset($targetcompany->country_code) && !empty($sourcecompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
467 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($sourcecompany, $withCountry,
"\n", $outputlangs)).
"\n";
469 if (empty($conf->global->MAIN_PDF_DISABLESOURCEDETAILS)) {
471 if ($sourcecompany->phone) {
472 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"PhoneShort").
": ".$outputlangs->convToOutputCharset($sourcecompany->phone);
475 if ($sourcecompany->fax) {
476 $stringaddress .= ($stringaddress ? ($sourcecompany->phone ?
" - " :
"\n") :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($sourcecompany->fax);
479 if ($sourcecompany->email) {
480 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($sourcecompany->email);
483 if ($sourcecompany->url) {
484 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($sourcecompany->url);
488 if (!empty($conf->global->MAIN_TVAINTRA_IN_SOURCE_ADDRESS)) {
489 if ($sourcecompany->tva_intra) {
490 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($sourcecompany->tva_intra);
495 if (!empty($conf->global->MAIN_PROFID1_IN_SOURCE_ADDRESS) && !empty($sourcecompany->idprof1)) {
496 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $sourcecompany->country_code);
497 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
500 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof1);
502 if (!empty($conf->global->MAIN_PROFID2_IN_SOURCE_ADDRESS) && !empty($sourcecompany->idprof2)) {
503 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $sourcecompany->country_code);
504 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
507 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof2);
509 if (!empty($conf->global->MAIN_PROFID3_IN_SOURCE_ADDRESS) && !empty($sourcecompany->idprof3)) {
510 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $sourcecompany->country_code);
511 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
514 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof3);
516 if (!empty($conf->global->MAIN_PROFID4_IN_SOURCE_ADDRESS) && !empty($sourcecompany->idprof4)) {
517 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $sourcecompany->country_code);
518 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
521 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof4);
523 if (!empty($conf->global->MAIN_PROFID5_IN_SOURCE_ADDRESS) && !empty($sourcecompany->idprof5)) {
524 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $sourcecompany->country_code);
525 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
528 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof5);
530 if (!empty($conf->global->MAIN_PROFID6_IN_SOURCE_ADDRESS) && !empty($sourcecompany->idprof6)) {
531 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $sourcecompany->country_code);
532 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
535 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof6);
537 if (!empty($conf->global->PDF_ADD_MORE_AFTER_SOURCE_ADDRESS)) {
538 $stringaddress .= ($stringaddress ?
"\n" :
'').$conf->global->PDF_ADD_MORE_AFTER_SOURCE_ADDRESS;
542 if ($mode ==
'target' || preg_match(
'/targetwithdetails/', $mode)) {
544 if (is_object($targetcontact)) {
545 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($targetcontact->getFullName($outputlangs, 1));
547 if (!empty($targetcontact->address)) {
548 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcontact)).
"\n";
550 $companytouseforaddress = $targetcompany;
553 if ($targetcontact->socid > 0 && $targetcontact->socid != $targetcompany->id) {
554 $targetcontact->fetch_thirdparty();
555 $companytouseforaddress = $targetcontact->thirdparty;
558 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($companytouseforaddress)).
"\n";
561 if (!empty($targetcontact->country_code) && $targetcontact->country_code != $sourcecompany->country_code) {
562 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcontact->country_code));
563 } elseif (empty($targetcontact->country_code) && !empty($targetcompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
564 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
567 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || preg_match(
'/targetwithdetails/', $mode)) {
569 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
570 if (!empty($targetcontact->phone_pro) || !empty($targetcontact->phone_mobile)) {
571 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
573 if (!empty($targetcontact->phone_pro)) {
574 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_pro);
576 if (!empty($targetcontact->phone_pro) && !empty($targetcontact->phone_mobile)) {
577 $stringaddress .=
" / ";
579 if (!empty($targetcontact->phone_mobile)) {
580 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_mobile);
584 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
585 if ($targetcontact->fax) {
586 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcontact->fax);
590 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
591 if ($targetcontact->email) {
592 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcontact->email);
596 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
597 if ($targetcontact->url) {
598 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($targetcontact->url);
604 if (is_object($targetcompany)) {
605 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcompany)).
"\n";
607 if (!empty($targetcompany->country_code) && $targetcompany->country_code != $sourcecompany->country_code) {
608 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
611 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || preg_match(
'/targetwithdetails/', $mode)) {
613 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
614 if (!empty($targetcompany->phone)) {
615 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
617 if (!empty($targetcompany->phone)) {
618 $stringaddress .= $outputlangs->convToOutputCharset($targetcompany->phone);
622 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
623 if ($targetcompany->fax) {
624 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcompany->fax);
628 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
629 if ($targetcompany->email) {
630 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcompany->email);
634 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
635 if ($targetcompany->url) {
636 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($targetcompany->url);
644 if (empty($conf->global->MAIN_TVAINTRA_NOT_IN_ADDRESS)) {
645 if ($usecontact && is_object($targetcontact) &&
getDolGlobalInt(
'MAIN_USE_COMPANY_NAME_OF_CONTACT')) {
646 $targetcontact->fetch_thirdparty();
647 if (!empty($targetcontact->thirdparty->id) && $targetcontact->thirdparty->tva_intra) {
648 $stringaddress .= ($stringaddress ?
"\n" :
'') . $outputlangs->transnoentities(
"VATIntraShort") .
': ' . $outputlangs->convToOutputCharset($targetcontact->thirdparty->tva_intra);
650 } elseif ($targetcompany->tva_intra) {
651 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($targetcompany->tva_intra);
656 if (!empty($conf->global->MAIN_PROFID1_IN_ADDRESS) && !empty($targetcompany->idprof1)) {
657 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $targetcompany->country_code);
658 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
661 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof1);
663 if (!empty($conf->global->MAIN_PROFID2_IN_ADDRESS) && !empty($targetcompany->idprof2)) {
664 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $targetcompany->country_code);
665 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
668 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof2);
670 if (!empty($conf->global->MAIN_PROFID3_IN_ADDRESS) && !empty($targetcompany->idprof3)) {
671 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $targetcompany->country_code);
672 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
675 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof3);
677 if (!empty($conf->global->MAIN_PROFID4_IN_ADDRESS) && !empty($targetcompany->idprof4)) {
678 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $targetcompany->country_code);
679 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
682 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof4);
684 if (!empty($conf->global->MAIN_PROFID5_IN_ADDRESS) && !empty($targetcompany->idprof5)) {
685 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $targetcompany->country_code);
686 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
689 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof5);
691 if (!empty($conf->global->MAIN_PROFID6_IN_ADDRESS) && !empty($targetcompany->idprof6)) {
692 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $targetcompany->country_code);
693 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
696 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof6);
700 if (!empty($conf->global->MAIN_PUBLIC_NOTE_IN_ADDRESS)) {
701 if ($mode ==
'source' && !empty($sourcecompany->note_public)) {
702 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($sourcecompany->note_public);
704 if (($mode ==
'target' || preg_match(
'/targetwithdetails/', $mode)) && !empty($targetcompany->note_public)) {
705 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($targetcompany->note_public);
711 return $stringaddress;
728 if (!empty($conf->global->MAIN_USE_BACKGROUND_ON_PDF) && ($conf->global->MAIN_USE_BACKGROUND_ON_PDF !=
'-1')) {
729 $filepath = $conf->mycompany->dir_output.
'/logos/'.$conf->global->MAIN_USE_BACKGROUND_ON_PDF;
730 if (file_exists($filepath)) {
731 $pdf->SetAutoPageBreak(0, 0);
732 $pdf->Image($filepath, (isset($conf->global->MAIN_USE_BACKGROUND_ON_PDF_X) ? $conf->global->MAIN_USE_BACKGROUND_ON_PDF_X : 0), (isset($conf->global->MAIN_USE_BACKGROUND_ON_PDF_Y) ? $conf->global->MAIN_USE_BACKGROUND_ON_PDF_Y : 0), 0, $page_height);
734 $pdf->SetAutoPageBreak(1, 0);
752 $substitutionarray[
'__FROM_NAME__'] =
'__FROM_NAME__';
753 $substitutionarray[
'__FROM_EMAIL__'] =
'__FROM_EMAIL__';
754 return $substitutionarray;
771 global $langs, $mysoc, $user;
776 } elseif ($unit ==
'mm') {
778 } elseif ($unit ==
'cm') {
780 } elseif ($unit ==
'in') {
788 $text = $outputlangs->convToOutputCharset($text);
790 $savx = $pdf->getX();
791 $savy = $pdf->getY();
793 $watermark_angle = atan($h / $w) / 2;
794 $watermark_x_pos = 0;
795 $watermark_y_pos = $h / 3;
796 $watermark_x = $w / 2;
797 $watermark_y = $h / 3;
798 $pdf->SetFont(
'',
'B', 40);
799 $pdf->SetTextColor(255, 192, 203);
801 $pdf->_out(sprintf(
'q %.5F %.5F %.5F %.5F %.2F %.2F cm 1 0 0 1 %.2F %.2F cm', cos($watermark_angle), sin($watermark_angle), -sin($watermark_angle), cos($watermark_angle), $watermark_x * $k, ($h - $watermark_y) * $k, -$watermark_x * $k, -($h - $watermark_y) * $k));
803 $pdf->SetXY($watermark_x_pos, $watermark_y_pos);
804 $pdf->Cell($w - 20, 25, $outputlangs->convToOutputCharset($text),
"", 2,
"C", 0);
808 $pdf->SetXY($savx, $savy);
824 function pdf_bank(&$pdf, $outputlangs, $curx, $cury, $account, $onlynumber = 0, $default_font_size = 10)
826 global $mysoc, $conf;
828 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formbank.class.php';
830 $diffsizetitle = (empty($conf->global->PDF_DIFFSIZE_TITLE) ? 3 : $conf->global->PDF_DIFFSIZE_TITLE);
831 $diffsizecontent = (empty($conf->global->PDF_DIFFSIZE_CONTENT) ? 4 : $conf->global->PDF_DIFFSIZE_CONTENT);
832 $pdf->SetXY($curx, $cury);
834 if (empty($onlynumber)) {
835 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizetitle);
836 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
'PaymentByTransferOnThisBankAccount').
':', 0,
'L', 0);
840 $outputlangs->load(
"banks");
843 $bickey =
"BICNumber";
844 if ($account->getCountryCode() ==
'IN') {
849 $usedetailedbban = $account->useDetailedBBAN();
852 if ($usedetailedbban) {
855 if (empty($onlynumber)) {
856 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
857 $pdf->SetXY($curx, $cury);
858 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L', 0);
862 if (empty($conf->global->PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN)) {
868 if (empty($onlynumber)) {
869 $pdf->line($curx + 1, $cury + 1, $curx + 1, $cury + 6);
873 foreach ($account->getFieldsToShow() as $val) {
874 $pdf->SetXY($curx, $cury + 4);
875 $pdf->SetFont(
'',
'', $default_font_size - 3);
877 if ($val ==
'BankCode') {
880 $content = $account->code_banque;
881 } elseif ($val ==
'DeskCode') {
884 $content = $account->code_guichet;
885 } elseif ($val ==
'BankAccountNumber') {
888 $content = $account->number;
889 } elseif ($val ==
'BankAccountNumberKey') {
892 $content = $account->cle_rib;
893 } elseif ($val ==
'IBAN' || $val ==
'BIC') {
898 dol_print_error($account->db,
'Unexpected value for getFieldsToShow: '.$val);
902 $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($content), 0,
'C', 0);
903 $pdf->SetXY($curx, $cury + 1);
905 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
906 $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities($val), 0,
'C', 0);
907 if (empty($onlynumber)) {
908 $pdf->line($curx, $cury + 1, $curx, $cury + 7);
916 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
917 $pdf->SetXY($curx, $cury);
918 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L', 0);
921 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
922 $pdf->SetXY($curx, $cury);
923 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"BankAccountNumber").
': '.$outputlangs->convToOutputCharset($account->number), 0,
'L', 0);
926 if ($diffsizecontent <= 2) {
931 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
933 if (empty($onlynumber) && !empty($account->domiciliation)) {
934 $pdf->SetXY($curx, $cury);
935 $val = $outputlangs->transnoentities(
"Residence").
': '.$outputlangs->convToOutputCharset($account->domiciliation);
936 $pdf->MultiCell(100, 3, $val, 0,
'L', 0);
939 $tmpy = $pdf->getStringHeight(100, $val);
943 if (!empty($account->proprio)) {
944 $pdf->SetXY($curx, $cury);
945 $val = $outputlangs->transnoentities(
"BankAccountOwner").
': '.$outputlangs->convToOutputCharset($account->proprio);
946 $pdf->MultiCell(100, 3, $val, 0,
'L', 0);
947 $tmpy = $pdf->getStringHeight(100, $val);
949 } elseif (!$usedetailedbban) {
956 if (!empty($account->iban)) {
958 $ibanDisplay_temp = str_replace(
' ',
'', $outputlangs->convToOutputCharset($account->iban));
961 $nbIbanDisplay_temp =
dol_strlen($ibanDisplay_temp);
962 for ($i = 0; $i < $nbIbanDisplay_temp; $i++) {
963 $ibanDisplay .= $ibanDisplay_temp[$i];
964 if ($i % 4 == 3 && $i > 0) {
969 $pdf->SetFont(
'',
'B', $default_font_size - 3);
970 $pdf->SetXY($curx, $cury);
971 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($ibankey).
': '.$ibanDisplay, 0,
'L', 0);
975 if (!empty($account->bic)) {
976 $pdf->SetFont(
'',
'B', $default_font_size - 3);
977 $pdf->SetXY($curx, $cury);
978 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($bickey).
': '.$outputlangs->convToOutputCharset($account->bic), 0,
'L', 0);
1001 function pdf_pagefoot(&$pdf, $outputlangs, $paramfreetext, $fromcompany, $marge_basse, $marge_gauche, $page_hauteur, $object, $showdetails = 0, $hidefreetext = 0, $page_largeur = 0, $watermark =
'')
1003 global $conf, $user, $mysoc, $hookmanager;
1005 $outputlangs->load(
"dict");
1009 $dims = $pdf->getPageDimensions();
1012 if (empty($hidefreetext) && !empty($conf->global->$paramfreetext)) {
1015 $substitutionarray[
'__FROM_NAME__'] = $fromcompany->name;
1016 $substitutionarray[
'__FROM_EMAIL__'] = $fromcompany->email;
1018 $newfreetext =
make_substitutions($conf->global->$paramfreetext, $substitutionarray, $outputlangs);
1024 $newfreetext = preg_replace(
'/(<img.*src=")[^\"]*viewimage\.php[^\"]*modulepart=medias[^\"]*file=([^\"]*)("[^\/]*\/>)/',
'\1file:/'.DOL_DATA_ROOT.
'/medias/\2\3', $newfreetext);
1026 $line .= $outputlangs->convToOutputCharset($newfreetext);
1035 if ($showdetails == 1 || $showdetails == 3) {
1037 if ($fromcompany->name) {
1038 $line1 .= ($line1 ?
" - " :
"").$outputlangs->transnoentities(
"RegisteredOffice").
": ".$fromcompany->name;
1041 if ($fromcompany->address) {
1042 $line1 .= ($line1 ?
" - " :
"").str_replace(
"\n",
", ", $fromcompany->address);
1045 if ($fromcompany->zip) {
1046 $line1 .= ($line1 ?
" - " :
"").$fromcompany->zip;
1049 if ($fromcompany->town) {
1050 $line1 .= ($line1 ?
" " :
"").$fromcompany->town;
1053 if ($fromcompany->country) {
1054 $line1 .= ($line1 ?
", " :
"").$fromcompany->country;
1057 if ($fromcompany->phone) {
1058 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Phone").
": ".$fromcompany->phone;
1061 if ($fromcompany->fax) {
1062 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Fax").
": ".$fromcompany->fax;
1066 if ($fromcompany->url) {
1067 $line2 .= ($line2 ?
" - " :
"").$fromcompany->url;
1070 if ($fromcompany->email) {
1071 $line2 .= ($line2 ?
" - " :
"").$fromcompany->email;
1074 if ($showdetails == 2 || $showdetails == 3 || (!empty($fromcompany->country_code) && $fromcompany->country_code ==
'DE')) {
1076 if ($fromcompany->managers) {
1077 $line2 .= ($line2 ?
" - " :
"").$fromcompany->managers;
1083 if (!empty($fromcompany->forme_juridique_code) && $fromcompany->forme_juridique_code) {
1084 $line3 .= ($line3 ?
" - " :
"").$outputlangs->convToOutputCharset(
getFormeJuridiqueLabel($fromcompany->forme_juridique_code));
1087 if (!empty($fromcompany->capital)) {
1088 $tmpamounttoshow =
price2num($fromcompany->capital);
1089 if (is_numeric($tmpamounttoshow) && $tmpamounttoshow > 0) {
1090 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf",
price($tmpamounttoshow, 0, $outputlangs, 0, 0, 0, $conf->currency));
1091 } elseif (!empty($fromcompany->capital)) {
1092 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf", $fromcompany->capital, $outputlangs);
1096 if (!empty($fromcompany->idprof1) && $fromcompany->idprof1 && ($fromcompany->country_code !=
'FR' || !$fromcompany->idprof2)) {
1097 $field = $outputlangs->transcountrynoentities(
"ProfId1", $fromcompany->country_code);
1098 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1101 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof1);
1104 if (!empty($fromcompany->idprof2) && $fromcompany->idprof2) {
1105 $field = $outputlangs->transcountrynoentities(
"ProfId2", $fromcompany->country_code);
1106 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1109 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof2);
1114 if (!empty($fromcompany->idprof3) && $fromcompany->idprof3) {
1115 $field = $outputlangs->transcountrynoentities(
"ProfId3", $fromcompany->country_code);
1116 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1119 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof3);
1122 if (!empty($fromcompany->idprof4) && $fromcompany->idprof4) {
1123 $field = $outputlangs->transcountrynoentities(
"ProfId4", $fromcompany->country_code);
1124 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1127 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof4);
1130 if (!empty($fromcompany->idprof5) && $fromcompany->idprof5) {
1131 $field = $outputlangs->transcountrynoentities(
"ProfId5", $fromcompany->country_code);
1132 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1135 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof5);
1138 if (!empty($fromcompany->idprof6) && $fromcompany->idprof6) {
1139 $field = $outputlangs->transcountrynoentities(
"ProfId6", $fromcompany->country_code);
1140 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1143 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof6);
1146 if (!empty($fromcompany->tva_intra) && $fromcompany->tva_intra !=
'') {
1147 $line4 .= ($line4 ?
" - " :
"").$outputlangs->transnoentities(
"VATIntraShort").
": ".$outputlangs->convToOutputCharset($fromcompany->tva_intra);
1150 $pdf->SetFont(
'',
'', 7);
1151 $pdf->SetDrawColor(224, 224, 224);
1153 if (!empty($conf->global->PDF_FOOTER_TEXT_COLOR)) {
1154 list($r, $g, $b) = sscanf($conf->global->PDF_FOOTER_TEXT_COLOR,
'%d, %d, %d');
1155 $pdf->SetTextColor($r, $g, $b);
1159 $freetextheight = 0;
1162 if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) {
1165 if (!empty($conf->global->MAIN_USE_AUTOWRAP_ON_FREETEXT)) {
1169 $freetextheight = $pdf->getStringHeight($width, $line);
1177 if (is_object($hookmanager)) {
1178 $parameters = array(
'line1' => $line1,
'line2' => $line2,
'line3' => $line3,
'line4' => $line4,
'outputlangs'=>$outputlangs);
1180 $hookmanager->executeHooks(
'pdf_pagefoot', $parameters, $object, $action);
1181 if (!empty($hookmanager->resPrint) && $hidefreetext == 0) {
1182 $mycustomfooter = $hookmanager->resPrint;
1185 $marginwithfooter = $marge_basse + $freetextheight + $mycustomfooterheight;
1186 $posy = $marginwithfooter + 0;
1190 list($r, $g, $b) = sscanf($conf->global->PDF_FOOTER_BACKGROUND_COLOR,
'%d, %d, %d');
1191 $pdf->SetAutoPageBreak(0, 0);
1192 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F',
'', $fill_color = array($r, $g, $b));
1193 $pdf->SetAutoPageBreak(1, 0);
1196 if (
getDolGlobalInt(
'PDF_FREETEXT_DISABLE_PAGEBREAK') === 1) { $pdf->SetAutoPageBreak(0, 0); }
1198 $pdf->SetXY($dims[
'lm'], -$posy);
1200 $pdf->MultiCell(0, 3, $line, 0, $align, 0);
1202 $pdf->writeHTMLCell($pdf->page_largeur - $pdf->margin_left - $pdf->margin_right, $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1204 $posy -= $freetextheight;
1206 if (
getDolGlobalInt(
'PDF_FREETEXT_DISABLE_PAGEBREAK') === 1) { $pdf->SetAutoPageBreak(1, 0); }
1212 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1222 if (
getDolGlobalInt(
'PDF_FOOTER_DISABLE_PAGEBREAK') === 1) { $pdf->SetAutoPageBreak(0, 0); }
1223 $pdf->writeHTMLCell($pdf->page_largeur - $pdf->margin_left - $pdf->margin_right, $mycustomfooterheight, $dims[
'lm'], $dims[
'hk'] - $posy,
dol_htmlentitiesbr($mycustomfooter, 1,
'UTF-8', 0));
1224 if (
getDolGlobalInt(
'PDF_FOOTER_DISABLE_PAGEBREAK') === 1) { $pdf->SetAutoPageBreak(1, 0); }
1226 $posy -= $mycustomfooterheight - 3;
1229 $marginwithfooter = $marge_basse + $freetextheight + (!empty($line1) ? 3 : 0) + (!empty($line2) ? 3 : 0) + (!empty($line3) ? 3 : 0) + (!empty($line4) ? 3 : 0);
1230 $posy = $marginwithfooter + 0;
1234 list($r, $g, $b) = sscanf($conf->global->PDF_FOOTER_BACKGROUND_COLOR,
'%d, %d, %d');
1235 $pdf->SetAutoPageBreak(0, 0);
1236 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F',
'', $fill_color = array($r, $g, $b));
1237 $pdf->SetAutoPageBreak(1, 0);
1240 if (
getDolGlobalInt(
'PDF_FREETEXT_DISABLE_PAGEBREAK') === 1) { $pdf->SetAutoPageBreak(0, 0); }
1242 $pdf->SetXY($dims[
'lm'], -$posy);
1244 $pdf->MultiCell(0, 3, $line, 0, $align, 0);
1246 $pdf->writeHTMLCell($pdf->page_largeur - $pdf->margin_left - $pdf->margin_right, $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1248 $posy -= $freetextheight;
1250 if (
getDolGlobalInt(
'PDF_FREETEXT_DISABLE_PAGEBREAK') === 1) { $pdf->SetAutoPageBreak(1, 0); }
1256 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1266 if (!empty($line1)) {
1267 $pdf->SetFont(
'',
'B', 7);
1268 $pdf->SetXY($dims[
'lm'], -$posy);
1269 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line1, 0,
'C', 0);
1271 $pdf->SetFont(
'',
'', 7);
1274 if (!empty($line2)) {
1275 $pdf->SetFont(
'',
'B', 7);
1276 $pdf->SetXY($dims[
'lm'], -$posy);
1277 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line2, 0,
'C', 0);
1279 $pdf->SetFont(
'',
'', 7);
1282 if (!empty($line3)) {
1283 $pdf->SetXY($dims[
'lm'], -$posy);
1284 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line3, 0,
'C', 0);
1287 if (!empty($line4)) {
1289 $pdf->SetXY($dims[
'lm'], -$posy);
1290 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line4, 0,
'C', 0);
1296 $pdf->SetXY($dims[
'wk'] - $dims[
'rm'] - 18, -$posy);
1298 $pdf->MultiCell(18, 2, $pdf->PageNo().
' / '.$pdf->getAliasNbPages(), 0,
'R', 0);
1302 if (!empty($watermark)) {
1303 pdf_watermark($pdf, $outputlangs, $page_hauteur, $page_largeur,
'mm', $watermark);
1306 return $marginwithfooter;
1326 if (!empty($linkedobjects)) {
1327 foreach ($linkedobjects as $linkedobject) {
1328 $reftoshow = $linkedobject[
"ref_title"].
' : '.$linkedobject[
"ref_value"];
1329 if (!empty($linkedobject[
"date_value"])) {
1330 $reftoshow .=
' / '.$linkedobject[
"date_value"];
1334 $pdf->SetXY($posx, $posy);
1335 $pdf->SetFont(
'',
'', $default_font_size - 2);
1336 $pdf->MultiCell($w, $h, $reftoshow,
'', $align);
1340 return $pdf->getY();
1359 function pdf_writelinedesc(&$pdf, $object, $i, $outputlangs, $w, $h, $posx, $posy, $hideref = 0, $hidedesc = 0, $issupplierline = 0)
1361 global $db, $conf, $langs, $hookmanager;
1366 if (is_object($hookmanager)) {
1367 $special_code = empty($object->lines[$i]->special_code) ?
'' : $object->lines[$i]->special_code;
1368 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
1369 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1371 $parameters = array(
'pdf'=>$pdf,
'i'=>$i,
'outputlangs'=>$outputlangs,
'w'=>$w,
'h'=>$h,
'posx'=>$posx,
'posy'=>$posy,
'hideref'=>$hideref,
'hidedesc'=>$hidedesc,
'issupplierline'=>$issupplierline,
'special_code'=>$special_code);
1373 $reshook = $hookmanager->executeHooks(
'pdf_writelinedesc', $parameters, $object, $action);
1375 if (!empty($hookmanager->resPrint)) {
1376 $result .= $hookmanager->resPrint;
1379 if (empty($reshook)) {
1380 $labelproductservice =
pdf_getlinedesc($object, $i, $outputlangs, $hideref, $hidedesc, $issupplierline);
1387 $labelproductservice = preg_replace(
'/(<img[^>]*src=")([^"]*)(&)([^"]*")/',
'\1\2&\4', $labelproductservice, -1, $nbrep);
1392 $pdf->writeHTMLCell($w, $h, $posx, $posy, $outputlangs->convToOutputCharset($labelproductservice), 0, 1,
false,
true,
'J',
true);
1393 $result .= $labelproductservice;
1409 function pdf_getlinedesc($object, $i, $outputlangs, $hideref = 0, $hidedesc = 0, $issupplierline = 0)
1411 global $db, $conf, $langs;
1413 $idprod = (!empty($object->lines[$i]->fk_product) ? $object->lines[$i]->fk_product :
false);
1414 $label = (!empty($object->lines[$i]->label) ? $object->lines[$i]->label : (!empty($object->lines[$i]->product_label) ? $object->lines[$i]->product_label :
''));
1415 $desc = (!empty($object->lines[$i]->desc) ? $object->lines[$i]->desc : (!empty($object->lines[$i]->description) ? $object->lines[$i]->description :
''));
1416 $ref_supplier = (!empty($object->lines[$i]->ref_supplier) ? $object->lines[$i]->ref_supplier : (!empty($object->lines[$i]->ref_fourn) ? $object->lines[$i]->ref_fourn :
''));
1417 $note = (!empty($object->lines[$i]->note) ? $object->lines[$i]->note :
'');
1418 $dbatch = (!empty($object->lines[$i]->detail_batch) ? $object->lines[$i]->detail_batch :
false);
1420 if ($issupplierline) {
1421 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
1424 include_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
1427 if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
1428 include_once DOL_DOCUMENT_ROOT .
'/product/class/productcustomerprice.class.php';
1433 $prodser->fetch($idprod);
1435 if (
getDolGlobalInt(
'MAIN_MULTILANGS') && ($outputlangs->defaultlang != $langs->defaultlang)) {
1436 $translatealsoifmodified = (!empty($conf->global->MAIN_MULTILANG_TRANSLATE_EVEN_IF_MODIFIED));
1444 $textwasnotmodified = ($label == $prodser->label);
1445 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"label"]) && ($textwasnotmodified || $translatealsoifmodified)) {
1446 $label = $prodser->multilangs[$outputlangs->defaultlang][
"label"];
1451 $textwasnotmodified =
false;
1455 $textwasnotmodified = ($desc == $prodser->description);
1457 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"description"])) {
1458 if ($textwasnotmodified) {
1459 $desc = str_replace($prodser->description, $prodser->multilangs[$outputlangs->defaultlang][
"description"], $desc);
1460 } elseif ($translatealsoifmodified) {
1461 $desc = $prodser->multilangs[$outputlangs->defaultlang][
"description"];
1466 $textwasnotmodified = ($note == $prodser->note_public);
1467 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"other"]) && ($textwasnotmodified || $translatealsoifmodified)) {
1468 $note = $prodser->multilangs[$outputlangs->defaultlang][
"other"];
1471 } elseif (($object->element ==
'facture' || $object->element ==
'facturefourn') && preg_match(
'/^\(DEPOSIT\).+/', $desc)) {
1472 $desc = str_replace(
'(DEPOSIT)', $outputlangs->trans(
'Deposit'), $desc);
1475 if (empty($conf->global->PDF_HIDE_PRODUCT_LABEL_IN_SUPPLIER_LINES)) {
1477 $libelleproduitservice = $label;
1478 if (!empty($libelleproduitservice) && !empty($conf->global->PDF_BOLD_PRODUCT_LABEL)) {
1482 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1484 $libelleproduitservice =
'<b>'.$libelleproduitservice.
'</b>';
1490 if (!empty($conf->global->SHOW_SUBPRODUCT_REF_IN_PDF)) {
1491 $prodser->get_sousproduits_arbo();
1492 if (!empty($prodser->sousprods) && is_array($prodser->sousprods) && count($prodser->sousprods)) {
1493 $tmparrayofsubproducts = reset($prodser->sousprods);
1494 if (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF)) {
1495 foreach ($tmparrayofsubproducts as $subprodval) {
1496 $libelleproduitservice =
dol_concatdesc($libelleproduitservice,
" * ".$subprodval[3].
' ('.$subprodval[1].
')');
1499 foreach ($tmparrayofsubproducts as $subprodval) {
1500 $libelleproduitservice =
dol_concatdesc($libelleproduitservice,
" * ".$subprodval[5].(($subprodval[5] && $subprodval[3]) ?
' - ' :
'').$subprodval[3].
' ('.$subprodval[1].
')');
1507 if (!empty($desc) && ($desc != $label)) {
1508 if ($desc ==
'(CREDIT_NOTE)' && $object->lines[$i]->fk_remise_except) {
1510 $discount->fetch($object->lines[$i]->fk_remise_except);
1511 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
1512 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromCreditNote", $sourceref);
1513 } elseif ($desc ==
'(DEPOSIT)' && $object->lines[$i]->fk_remise_except) {
1515 $discount->fetch($object->lines[$i]->fk_remise_except);
1516 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
1517 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromDeposit", $sourceref);
1519 if (!empty($conf->global->INVOICE_ADD_DEPOSIT_DATE)) {
1520 $libelleproduitservice .=
' ('.dol_print_date($discount->datec,
'day',
'', $outputlangs).
')';
1522 } elseif ($desc ==
'(EXCESS RECEIVED)' && $object->lines[$i]->fk_remise_except) {
1524 $discount->fetch($object->lines[$i]->fk_remise_except);
1525 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessReceived", $discount->ref_facture_source);
1526 } elseif ($desc ==
'(EXCESS PAID)' && $object->lines[$i]->fk_remise_except) {
1528 $discount->fetch($object->lines[$i]->fk_remise_except);
1529 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessPaid", $discount->ref_invoice_supplier_source);
1533 if (!empty($object->element)) {
1534 $tmpkey =
'MAIN_DOCUMENTS_HIDE_DESCRIPTION_FOR_'.strtoupper($object->element);
1535 if (!empty($conf->global->$tmpkey)) {
1539 if (empty($hidedesc)) {
1540 if (!empty($conf->global->MAIN_DOCUMENTS_DESCRIPTION_FIRST)) {
1541 $libelleproduitservice =
dol_concatdesc($desc, $libelleproduitservice);
1543 if (!empty($conf->global->HIDE_LABEL_VARIANT_PDF) && $prodser->isVariant()) {
1544 $libelleproduitservice = $desc;
1546 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
1551 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
1557 $prefix_prodserv =
"";
1559 if (!empty($conf->global->PRODUCT_ADD_TYPE_IN_DOCUMENTS)) {
1560 if ($prodser->isService()) {
1561 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Service").
" ";
1563 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Product").
" ";
1567 if (empty($hideref)) {
1568 if ($issupplierline) {
1569 if (empty($conf->global->PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES)) {
1570 $ref_prodserv = $prodser->ref;
1571 if ($ref_supplier) {
1572 $ref_prodserv .= ($prodser->ref ?
' (' :
'').$outputlangs->transnoentitiesnoconv(
"SupplierRef").
' '.$ref_supplier.($prodser->ref ?
')' :
'');
1574 } elseif ($conf->global->PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES == 1) {
1575 $ref_prodserv = $ref_supplier;
1576 } elseif ($conf->global->PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES == 2) {
1577 $ref_prodserv = $ref_supplier.
' ('.$outputlangs->transnoentitiesnoconv(
"InternalRef").
' '.$prodser->ref.
')';
1580 $ref_prodserv = $prodser->ref;
1582 if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
1584 $filter = array(
'fk_product' => $idprod,
'fk_soc' => $object->socid);
1586 $nbCustomerPrices = $productCustomerPriceStatic->fetchAll(
'',
'', 1, 0, $filter);
1588 if ($nbCustomerPrices > 0) {
1589 $productCustomerPrice = $productCustomerPriceStatic->lines[0];
1591 if (!empty($productCustomerPrice->ref_customer)) {
1592 switch ($conf->global->PRODUIT_CUSTOMER_PRICES_PDF_REF_MODE) {
1594 $ref_prodserv = $productCustomerPrice->ref_customer;
1598 $ref_prodserv = $productCustomerPrice->ref_customer .
' (' . $outputlangs->transnoentitiesnoconv(
'InternalRef') .
' ' . $ref_prodserv .
')';
1602 $ref_prodserv = $ref_prodserv .
' (' . $outputlangs->transnoentitiesnoconv(
'RefCustomer') .
' ' . $productCustomerPrice->ref_customer .
')';
1609 if (!empty($libelleproduitservice) && !empty($ref_prodserv)) {
1610 $ref_prodserv .=
" - ";
1614 if (!empty($ref_prodserv) && !empty($conf->global->PDF_BOLD_PRODUCT_REF_AND_PERIOD)) {
1616 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1618 $ref_prodserv =
'<b>'.$ref_prodserv.
'</b>';
1621 $libelleproduitservice = $prefix_prodserv.$ref_prodserv.$libelleproduitservice;
1624 if (!empty($conf->global->CATEGORY_ADD_DESC_INTO_DOC) && $idprod &&
isModEnabled(
'categorie')) {
1625 include_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
1628 $tblcateg = $categstatic->containing($idprod, Categorie::TYPE_PRODUCT);
1629 foreach ($tblcateg as $cate) {
1631 $desccateg = $cate->description;
1633 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desccateg);
1638 if (!empty($object->lines[$i]->date_start) || !empty($object->lines[$i]->date_end)) {
1642 if ($object->lines[$i]->date_start && $object->lines[$i]->date_end) {
1643 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateFromTo',
dol_print_date($object->lines[$i]->date_start, $format,
false, $outputlangs),
dol_print_date($object->lines[$i]->date_end, $format,
false, $outputlangs)).
')';
1645 if ($object->lines[$i]->date_start && !$object->lines[$i]->date_end) {
1646 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateFrom',
dol_print_date($object->lines[$i]->date_start, $format,
false, $outputlangs)).
')';
1648 if (!$object->lines[$i]->date_start && $object->lines[$i]->date_end) {
1649 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateUntil',
dol_print_date($object->lines[$i]->date_end, $format,
false, $outputlangs)).
')';
1652 if (!empty($conf->global->PDF_BOLD_PRODUCT_REF_AND_PERIOD)) {
1654 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1656 $libelleproduitservice .=
'<br><b style="color:#333666;" ><em>'.$period.
'</em></b>';
1658 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $period);
1669 include_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
1670 include_once DOL_DOCUMENT_ROOT.
'/product/class/productbatch.class.php';
1675 foreach ($dbatch as $detail) {
1677 if ($detail->eatby) {
1678 $dte[] = $outputlangs->transnoentitiesnoconv(
'printEatby',
dol_print_date($detail->eatby, $format,
false, $outputlangs));
1680 if ($detail->sellby) {
1681 $dte[] = $outputlangs->transnoentitiesnoconv(
'printSellby',
dol_print_date($detail->sellby, $format,
false, $outputlangs));
1683 if ($detail->batch) {
1684 $dte[] = $outputlangs->transnoentitiesnoconv(
'printBatch', $detail->batch);
1686 $dte[] = $outputlangs->transnoentitiesnoconv(
'printQty', $detail->qty);
1689 if ($object->element ==
'shipping' && $detail->fk_origin_stock > 0 &&
getDolGlobalInt(
'PRODUCTBATCH_SHOW_WAREHOUSE_ON_SHIPMENT')) {
1690 $resproductbatch = $tmpproductbatch->fetch($detail->fk_origin_stock);
1691 if ($resproductbatch > 0) {
1692 $reswarehouse = $tmpwarehouse->fetch($tmpproductbatch->warehouseid);
1693 if ($reswarehouse > 0) {
1694 $dte[] = $tmpwarehouse->ref;
1699 $libelleproduitservice .=
"__N__ ".implode(
" - ", $dte);
1709 $libelleproduitservice = preg_replace(
'/__N__/',
'<br>', $libelleproduitservice);
1711 $libelleproduitservice = preg_replace(
'/__N__/',
"\n", $libelleproduitservice);
1715 return $libelleproduitservice;
1729 global $hookmanager;
1734 if (is_object($hookmanager)) {
1735 $special_code = $object->lines[$i]->special_code;
1736 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
1737 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1739 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
1741 $reshook = $hookmanager->executeHooks(
'pdf_getlinenum', $parameters, $object, $action);
1742 $result .= $hookmanager->resPrint;
1744 if (empty($reshook)) {
1762 global $hookmanager;
1767 if (is_object($hookmanager)) {
1768 $special_code = $object->lines[$i]->special_code;
1769 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
1770 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1772 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
1774 $reshook = $hookmanager->executeHooks(
'pdf_getlineref', $parameters, $object, $action);
1775 $result .= $hookmanager->resPrint;
1777 if (empty($reshook)) {
1794 global $hookmanager;
1799 if (is_object($hookmanager)) {
1800 $special_code = $object->lines[$i]->special_code;
1801 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
1802 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1804 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
1806 $reshook = $hookmanager->executeHooks(
'pdf_getlineref_supplier', $parameters, $object, $action);
1807 $result .= $hookmanager->resPrint;
1809 if (empty($reshook)) {
1826 global $conf, $hookmanager, $mysoc;
1831 if (is_object($hookmanager)) {
1832 $special_code = empty($object->lines[$i]) ?
'' : $object->lines[$i]->special_code;
1833 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
1834 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1836 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
1838 $reshook = $hookmanager->executeHooks(
'pdf_getlinevatrate', $parameters, $object, $action);
1840 if (!empty($hookmanager->resPrint)) {
1841 $result .= $hookmanager->resPrint;
1844 if (empty($reshook)) {
1845 if (empty($hidedetails) || $hidedetails > 1) {
1848 $tmpresult .=
vatrate($object->lines[$i]->tva_tx, 0, $object->lines[$i]->info_bits, -1);
1849 if (empty($conf->global->MAIN_PDF_MAIN_HIDE_SECOND_TAX)) {
1850 if ($object->lines[$i]->total_localtax1 != 0) {
1851 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
1856 $tmpresult .=
vatrate(abs($object->lines[$i]->localtax1_tx), 0);
1859 if (empty($conf->global->MAIN_PDF_MAIN_HIDE_THIRD_TAX)) {
1860 if ($object->lines[$i]->total_localtax2 != 0) {
1861 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
1866 $tmpresult .=
vatrate(abs($object->lines[$i]->localtax2_tx), 0);
1871 $result .= $tmpresult;
1888 global $conf, $hookmanager;
1891 if (isset($object->type) && $object->type == 2 && !empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) {
1898 if (is_object($hookmanager)) {
1899 $special_code = empty($object->lines[$i]) ?
'' : $object->lines[$i]->special_code;
1900 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
1901 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1903 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
1905 $reshook = $hookmanager->executeHooks(
'pdf_getlineupexcltax', $parameters, $object, $action);
1907 if (!empty($hookmanager->resPrint)) {
1908 $result .= $hookmanager->resPrint;
1911 if (empty($reshook)) {
1912 if (empty($hidedetails) || $hidedetails > 1) {
1913 $subprice = (
isModEnabled(
"multicurrency") && $object->multicurrency_tx != 1 ? $object->lines[$i]->multicurrency_subprice : $object->lines[$i]->subprice);
1914 $result .=
price($sign * $subprice, 0, $outputlangs);
1931 global $hookmanager, $conf;
1934 if (isset($object->type) && $object->type == 2 && !empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) {
1941 if (is_object($hookmanager)) {
1942 $special_code = $object->lines[$i]->special_code;
1943 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
1944 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1946 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
1948 $reshook = $hookmanager->executeHooks(
'pdf_getlineupwithtax', $parameters, $object, $action);
1950 if (!empty($hookmanager->resPrint)) {
1951 $result .= $hookmanager->resPrint;
1954 if (empty($reshook)) {
1955 if (empty($hidedetails) || $hidedetails > 1) {
1956 $result .=
price($sign * (($object->lines[$i]->subprice) + ($object->lines[$i]->subprice) * ($object->lines[$i]->tva_tx) / 100), 0, $outputlangs);
1973 global $hookmanager;
1978 if (is_object($hookmanager)) {
1979 $special_code = empty($object->lines[$i]) ?
'' : $object->lines[$i]->special_code;
1980 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
1981 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1983 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
1985 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty', $parameters, $object, $action);
1987 if (!empty($hookmanager->resPrint)) {
1988 $result = $hookmanager->resPrint;
1991 if (empty($reshook)) {
1992 if ($object->lines[$i]->special_code == 3) {
1995 if (empty($hidedetails) || $hidedetails > 1) {
1996 $result .= $object->lines[$i]->qty;
2013 global $hookmanager;
2018 if (is_object($hookmanager)) {
2019 $special_code = $object->lines[$i]->special_code;
2020 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
2021 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2023 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
2025 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_asked', $parameters, $object, $action);
2027 if (!empty($hookmanager->resPrint)) {
2028 $result .= $hookmanager->resPrint;
2031 if (empty($reshook)) {
2032 if ($object->lines[$i]->special_code == 3) {
2035 if (empty($hidedetails) || $hidedetails > 1) {
2036 $result .= $object->lines[$i]->qty_asked;
2053 global $hookmanager;
2058 if (is_object($hookmanager)) {
2059 $special_code = $object->lines[$i]->special_code;
2060 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
2061 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2063 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
2065 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_shipped', $parameters, $object, $action);
2067 if (!empty($hookmanager->resPrint)) {
2068 $result .= $hookmanager->resPrint;
2071 if (empty($reshook)) {
2072 if ($object->lines[$i]->special_code == 3) {
2075 if (empty($hidedetails) || $hidedetails > 1) {
2076 $result .= $object->lines[$i]->qty_shipped;
2093 global $hookmanager;
2098 if (is_object($hookmanager)) {
2099 $special_code = $object->lines[$i]->special_code;
2100 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
2101 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2103 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
2105 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_keeptoship', $parameters, $object, $action);
2107 if (!empty($hookmanager->resPrint)) {
2108 $result .= $hookmanager->resPrint;
2111 if (empty($reshook)) {
2112 if ($object->lines[$i]->special_code == 3) {
2115 if (empty($hidedetails) || $hidedetails > 1) {
2116 $result .= ($object->lines[$i]->qty_asked - $object->lines[$i]->qty_shipped);
2132 function pdf_getlineunit($object, $i, $outputlangs, $hidedetails = 0, $hookmanager =
false)
2139 if (is_object($hookmanager)) {
2140 $special_code = $object->lines[$i]->special_code;
2141 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
2142 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2144 $parameters = array(
2146 'outputlangs' => $outputlangs,
2147 'hidedetails' => $hidedetails,
2148 'special_code' => $special_code
2151 $reshook = $hookmanager->executeHooks(
'pdf_getlineunit', $parameters, $object, $action);
2153 if (!empty($hookmanager->resPrint)) {
2154 $result .= $hookmanager->resPrint;
2157 if (empty($reshook)) {
2158 if (empty($hidedetails) || $hidedetails > 1) {
2159 $result .= $langs->transnoentitiesnoconv($object->lines[$i]->getLabelOfUnit(
'short'));
2177 global $hookmanager;
2179 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
2184 if (is_object($hookmanager)) {
2185 $special_code = $object->lines[$i]->special_code;
2186 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
2187 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2189 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
2191 $reshook = $hookmanager->executeHooks(
'pdf_getlineremisepercent', $parameters, $object, $action);
2193 if (!empty($hookmanager->resPrint)) {
2194 $result .= $hookmanager->resPrint;
2197 if (empty($reshook)) {
2198 if ($object->lines[$i]->special_code == 3) {
2201 if (empty($hidedetails) || $hidedetails > 1) {
2220 if (empty($hookmanager)) {
2221 global $hookmanager;
2228 if (is_object($hookmanager)) {
2229 $special_code = $object->lines[$i]->special_code;
2230 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
2231 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2233 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2235 $reshook = $hookmanager->executeHooks(
'pdf_getlineprogress', $parameters, $object, $action);
2237 if (!empty($hookmanager->resPrint)) {
2238 return $hookmanager->resPrint;
2241 if (empty($reshook)) {
2242 if ($object->lines[$i]->special_code == 3) {
2245 if (empty($hidedetails) || $hidedetails > 1) {
2246 if (!empty($conf->global->SITUATION_DISPLAY_DIFF_ON_PDF)) {
2248 if (method_exists($object->lines[$i],
'get_prev_progress')) {
2249 $prev_progress = $object->lines[$i]->get_prev_progress($object->id);
2251 $result = round($object->lines[$i]->situation_percent - $prev_progress, 1).
'%';
2253 $result = round($object->lines[$i]->situation_percent, 1).
'%';
2271 global $conf, $hookmanager;
2274 if (isset($object->type) && $object->type == 2 && !empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) {
2281 if (is_object($hookmanager)) {
2282 $special_code = empty($object->lines[$i]) ?
'' : $object->lines[$i]->special_code;
2283 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
2284 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2286 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code,
'sign'=>$sign);
2288 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalexcltax', $parameters, $object, $action);
2290 if (!empty($hookmanager->resPrint)) {
2291 $result .= $hookmanager->resPrint;
2294 if (empty($reshook)) {
2295 if (!empty($object->lines[$i]) && $object->lines[$i]->special_code == 3) {
2296 $result .= $outputlangs->transnoentities(
"Option");
2297 } elseif (empty($hidedetails) || $hidedetails > 1) {
2298 $total_ht = (
isModEnabled(
"multicurrency") && $object->multicurrency_tx != 1 ? $object->lines[$i]->multicurrency_total_ht : $object->lines[$i]->total_ht);
2299 if (!empty($object->lines[$i]->situation_percent) && $object->lines[$i]->situation_percent > 0) {
2303 if (method_exists($object->lines[$i],
'get_prev_progress')) {
2304 $prev_progress = $object->lines[$i]->get_prev_progress($object->id);
2305 $progress = ($object->lines[$i]->situation_percent - $prev_progress) / 100;
2307 $result .=
price($sign * ($total_ht / ($object->lines[$i]->situation_percent / 100)) * $progress, 0, $outputlangs);
2309 $result .=
price($sign * $total_ht, 0, $outputlangs);
2327 global $hookmanager, $conf;
2330 if (isset($object->type) && $object->type == 2 && !empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) {
2337 if (is_object($hookmanager)) {
2338 $special_code = $object->lines[$i]->special_code;
2339 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
2340 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2342 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
2344 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalwithtax', $parameters, $object, $action);
2346 if (!empty($hookmanager->resPrint)) {
2347 $result .= $hookmanager->resPrint;
2350 if (empty($reshook)) {
2351 if ($object->lines[$i]->special_code == 3) {
2352 $result .= $outputlangs->transnoentities(
"Option");
2353 } elseif (empty($hidedetails) || $hidedetails > 1) {
2354 $total_ttc = (
isModEnabled(
"multicurrency") && $object->multicurrency_tx != 1 ? $object->lines[$i]->multicurrency_total_ttc : $object->lines[$i]->total_ttc);
2355 if ($object->lines[$i]->situation_percent > 0) {
2359 if (method_exists($object->lines[$i],
'get_prev_progress')) {
2360 $prev_progress = $object->lines[$i]->get_prev_progress($object->id);
2361 $progress = ($object->lines[$i]->situation_percent - $prev_progress) / 100;
2363 $result .=
price($sign * ($total_ttc / ($object->lines[$i]->situation_percent / 100)) * $progress, 0, $outputlangs);
2365 $result .=
price($sign * $total_ttc, 0, $outputlangs);
2382 global $db, $hookmanager;
2384 $linkedobjects = array();
2386 $object->fetchObjectLinked();
2388 foreach ($object->linkedObjects as $objecttype => $objects) {
2389 if ($objecttype ==
'facture') {
2391 } elseif ($objecttype ==
'propal' || $objecttype ==
'supplier_proposal') {
2392 $outputlangs->load(
'propal');
2394 foreach ($objects as $elementobject) {
2395 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefProposal");
2396 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2397 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DatePropal");
2398 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
2400 } elseif ($objecttype ==
'commande' || $objecttype ==
'supplier_order') {
2401 $outputlangs->load(
'orders');
2404 $object->note_public =
dol_concatdesc($object->note_public, $outputlangs->transnoentities(
"RefOrder").
' :');
2405 foreach ($objects as $elementobject) {
2406 $object->note_public =
dol_concatdesc($object->note_public, $outputlangs->transnoentities($elementobject->ref).(empty($elementobject->ref_client) ?
'' :
' ('.$elementobject->ref_client.
')').(empty($elementobject->ref_supplier) ?
'' :
' ('.$elementobject->ref_supplier.
')').
' ');
2407 $object->note_public =
dol_concatdesc($object->note_public, $outputlangs->transnoentities(
"OrderDate").
' : '.
dol_print_date($elementobject->date,
'day',
'', $outputlangs));
2409 } elseif (count($objects) == 1) {
2410 $elementobject = array_shift($objects);
2411 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder");
2412 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref).(!empty($elementobject->ref_client) ?
' ('.$elementobject->ref_client.
')' :
'').(!empty($elementobject->ref_supplier) ?
' ('.$elementobject->ref_supplier.
')' :
'');
2413 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"OrderDate");
2414 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
2416 } elseif ($objecttype ==
'contrat') {
2417 $outputlangs->load(
'contracts');
2418 foreach ($objects as $elementobject) {
2419 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefContract");
2420 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2421 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DateContract");
2422 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date_contrat,
'day',
'', $outputlangs);
2424 } elseif ($objecttype ==
'fichinter') {
2425 $outputlangs->load(
'interventions');
2426 foreach ($objects as $elementobject) {
2427 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"InterRef");
2428 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2429 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"InterDate");
2430 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->datec,
'day',
'', $outputlangs);
2432 } elseif ($objecttype ==
'shipping') {
2433 $outputlangs->loadLangs(array(
"orders",
"sendings"));
2435 if (count($objects) > 1) {
2437 if (empty($object->linkedObjects[
'commande']) && $object->element !=
'commande') {
2438 $object->note_public =
dol_concatdesc($object->note_public, $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending").
' :');
2440 $object->note_public =
dol_concatdesc($object->note_public, $outputlangs->transnoentities(
"RefSending").
' :');
2443 foreach ($objects as $elementobject) {
2444 if (empty($object->linkedObjects[
'commande']) && $object->element !=
'commande') {
2445 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
2446 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
2447 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2449 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
2456 if (! is_object($order)) {
2457 $object->note_public =
dol_concatdesc($object->note_public, $outputlangs->transnoentities($elementobject->ref));
2459 $object->note_public =
dol_concatdesc($object->note_public, $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
''));
2460 $object->note_public =
dol_concatdesc($object->note_public,
' / '.$outputlangs->transnoentities($elementobject->ref));
2463 } elseif (count($objects) == 1) {
2464 $elementobject = array_shift($objects);
2467 if (empty($object->linkedObjects[
'commande']) && $object->element !=
'commande') {
2468 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
2469 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
2470 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2472 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
2479 if (! is_object($order)) {
2480 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefSending");
2481 if (!empty($linkedobjects[$objecttype][
'ref_value'])) $linkedobjects[$objecttype][
'ref_value'] .=
' / ';
2482 $linkedobjects[$objecttype][
'ref_value'] .= $outputlangs->transnoentities($elementobject->ref);
2483 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
2485 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending");
2486 if (empty($linkedobjects[$objecttype][
'ref_value'])) $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
'');
2487 $linkedobjects[$objecttype][
'ref_value'] .=
' / '.$outputlangs->transnoentities($elementobject->ref);
2488 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
2495 if (is_object($hookmanager)) {
2496 $parameters = array(
'linkedobjects' => $linkedobjects,
'outputlangs'=>$outputlangs);
2498 $hookmanager->executeHooks(
'pdf_getLinkedObjects', $parameters, $object, $action);
2499 if (!empty($hookmanager->resArray)) {
2500 $linkedobjects = $hookmanager->resArray;
2504 return $linkedobjects;
2518 $maxwidth = (empty($conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH) ? 20 : $conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH);
2519 $maxheight = (empty($conf->global->MAIN_DOCUMENTS_WITH_PICTURE_HEIGHT) ? 32 : $conf->global->MAIN_DOCUMENTS_WITH_PICTURE_HEIGHT);
2520 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
2524 if ($tmp[
'height']) {
2525 $width = (int) round($maxheight * $tmp[
'width'] / $tmp[
'height']);
2526 if ($width > $maxwidth) {
2528 $height = (int) round($maxwidth * $tmp[
'height'] / $tmp[
'width']);
2531 $height = $maxheight;
2534 return array(
'width'=>$width,
'height'=>$height);
2548 global $conf, $hookmanager;
2550 if (isset($object->type) && $object->type == 2 && !empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) {
2553 if ($object->lines[$i]->special_code == 3) {
2554 return $outputlangs->transnoentities(
"Option");
2556 if (is_object($hookmanager)) {
2557 $special_code = $object->lines[$i]->special_code;
2558 if (!empty($object->lines[$i]->fk_parent_line)) {
2559 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2562 $parameters = array(
2564 'outputlangs'=>$outputlangs,
2565 'hidedetails'=>$hidedetails,
2566 'special_code'=>$special_code
2571 if ($hookmanager->executeHooks(
'getlinetotalremise', $parameters, $object, $action) > 0) {
2572 return $hookmanager->resPrint;
2576 if (empty($hidedetails) || $hidedetails > 1) {
2577 return $sign * (($object->lines[$i]->subprice * $object->lines[$i]->qty) - $object->lines[$i]->total_ht);
Class to manage categories.
Class to manage customers orders.
Class to manage absolute discounts.
Class to manage warehouses.
Class to manage predefined suppliers products.
Class to manage products or services.
Manage record for batch number management.
File of class to manage predefined price products or services by customer.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
convToOutputCharset($str, $pagecodefrom='UTF-8')
Convert a string into output charset (this->charset_output that should be defined to conf->file->char...
getState($id, $withcode='', $dbtouse=0, $withregion=0, $outputlangs='', $entconv=1)
Return state translated from an id.
getFormeJuridiqueLabel($code)
Retourne le nom traduit de la forme juridique.
if(isModEnabled('facture') &&!empty($user->rights->facture->lire)) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') &&!empty($user->rights->don->lire)) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $resql
Social contributions to pay.
dol_print_reduction($reduction, $langs)
Returns formated reduction.
dol_getDefaultFormat(Translate $outputlangs=null)
Try to guess default paper format according to language into $langs.
dol_html_entity_decode($a, $b, $c='UTF-8', $keepsomeentities=0)
Replace html_entity_decode functions to manage errors.
vatrate($rate, $addpercent=false, $info_bits=0, $usestarfornpr=0, $html=0)
Return a string with VAT rate label formated for view output Used into pdf and HTML pages.
dol_string_nohtmltag($stringtoclean, $removelinefeed=1, $pagecodeto='UTF-8', $strip_tags=0, $removedoublespaces=1)
Clean a string from all HTML tags and entities.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_format_address($object, $withcountry=0, $sep="\n", $outputlangs='', $mode=0, $extralangcode='')
Return a formated address (part address/zip/town/state) according to country rules.
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
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.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
dol_concatdesc($text1, $text2, $forxml=false, $invert=false)
Concat 2 descriptions with a new line between them (second operand after first one with appropriate n...
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_textishtml($msg, $option=0)
Return if a text is a html content.
if(!function_exists('utf8_encode')) if(!function_exists('utf8_decode')) getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $object=null)
Return array of possible common substitutions.
complete_head_from_modules($conf, $langs, $object, &$head, &$h, $type, $mode='add', $filterorigmodule='')
Complete or removed entries into a head array (used to build tabs).
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...
isModEnabled($module)
Is Dolibarr module enabled.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_mkdir($dir, $dataroot='', $newmask='')
Creation of a directory (this can create recursive subdir)
dol_getImageSize($file, $url=false)
Return size of image file on disk (Supported extensions are gif, jpg, png, bmp and webp)
pdf_getSizeForImage($realpath)
Return dimensions to use for images onto PDF checking that width and height are not higher than maxim...
pdf_getlinetotalexcltax($object, $i, $outputlangs, $hidedetails=0)
Return line total excluding tax.
pdf_getlinedesc($object, $i, $outputlangs, $hideref=0, $hidedesc=0, $issupplierline=0)
Return line description translated in outputlangs and encoded into htmlentities and with
pdfGetLineTotalDiscountAmount($object, $i, $outputlangs, $hidedetails=0)
Return line total amount discount.
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_getlineqty_shipped($object, $i, $outputlangs, $hidedetails=0)
Return line quantity shipped.
pdf_getlinenum($object, $i, $outputlangs, $hidedetails=0)
Return line num.
pdf_getEncryption($pathoffile)
Return if pdf file is protected/encrypted.
pdf_getlineupwithtax($object, $i, $outputlangs, $hidedetails=0)
Return line unit price including tax.
pdf_writelinedesc(&$pdf, $object, $i, $outputlangs, $w, $h, $posx, $posy, $hideref=0, $hidedesc=0, $issupplierline=0)
Output line description into PDF.
pdf_getLinkedObjects(&$object, $outputlangs)
Return linked objects to use for document generation.
pdf_getHeightForLogo($logo, $url=false)
Return height to use for Logo onto PDF.
pdf_getlineref_supplier($object, $i, $outputlangs, $hidedetails=0)
Return line ref_supplier.
pdf_getlinetotalwithtax($object, $i, $outputlangs, $hidedetails=0)
Return line total including tax.
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_getlineupexcltax($object, $i, $outputlangs, $hidedetails=0)
Return line unit price excluding tax.
pdf_getlineprogress($object, $i, $outputlangs, $hidedetails=0, $hookmanager=null)
Return line percent.
pdf_getlinevatrate($object, $i, $outputlangs, $hidedetails=0)
Return line vat rate.
pdf_getlineunit($object, $i, $outputlangs, $hidedetails=0, $hookmanager=false)
Return line unit.
pdf_getSubstitutionArray($outputlangs, $exclude=null, $object=null, $onlykey=0)
Return array of possible substitutions for PDF content (without external module substitutions).
pdfGetHeightForHtmlContent(&$pdf, $htmlcontent)
Function to try to calculate height of a HTML Content.
pdf_admin_prepare_head()
Return array head with list of tabs to view object informations.
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_bank(&$pdf, $outputlangs, $curx, $cury, $account, $onlynumber=0, $default_font_size=10)
Show bank informations for PDF generation.
pdf_getPDFFont($outputlangs)
Return font name to use for PDF generation.
pdf_getlineqty_keeptoship($object, $i, $outputlangs, $hidedetails=0)
Return line keep to ship quantity.
pdf_getlineref($object, $i, $outputlangs, $hidedetails=0)
Return line product ref.
pdf_build_address($outputlangs, $sourcecompany, $targetcompany='', $targetcontact='', $usecontact=0, $mode='source', $object=null)
Return a string with full address formated for output on documents.
pdf_getlineremisepercent($object, $i, $outputlangs, $hidedetails=0)
Return line remise percent.
pdf_getlineqty_asked($object, $i, $outputlangs, $hidedetails=0)
Return line quantity asked.
pdf_getlineqty($object, $i, $outputlangs, $hidedetails=0)
Return line quantity.
pdf_getInstance($format='', $metric='mm', $pagetype='P')
Return a PDF instance object.
pdfBuildThirdpartyName($thirdparty, Translate $outputlangs, $includealias=0)
Returns the name of the thirdparty.
pdf_watermark(&$pdf, $outputlangs, $h, $w, $unit, $text)
Add a draft watermark on PDF files.