40include_once DOL_DOCUMENT_ROOT.
'/core/lib/signature.lib.php';
55 $head[$h][0] = DOL_URL_ROOT.
'/admin/pdf.php';
56 $head[$h][1] = $langs->trans(
"Parameters");
57 $head[$h][2] =
'general';
66 if (isModEnabled(
"propal") || isModEnabled(
'invoice') || isModEnabled(
'reception')) {
67 $head[$h][0] = DOL_URL_ROOT.
'/admin/pdf_other.php';
68 $head[$h][1] = $langs->trans(
"Others");
69 $head[$h][2] =
'other';
88 global
$conf, $db, $langs;
90 dol_syslog(
"pdf_getFormat Get paper format with mode=".$mode.
" MAIN_PDF_FORMAT=".(!
getDolGlobalString(
'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'));
98 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
104 $sql =
"SELECT code, label, width, height, unit FROM ".MAIN_DB_PREFIX.
"c_paper_format";
105 $sql .=
" WHERE code = '".$db->escape($pdfformat).
"'";
106 $resql = $db->query($sql);
108 $obj = $db->fetch_object($resql);
110 $width = (int) $obj->width;
111 $height = (int) $obj->height;
117 return array(
'width' => $width,
'height' => $height,
'unit' => $unit);
133 if (!defined(
'K_TCPDF_EXTERNAL_CONFIG')) {
134 define(
'K_TCPDF_EXTERNAL_CONFIG', 1);
135 define(
'K_PATH_CACHE', DOL_DATA_ROOT.
'/admin/temp/');
136 define(
'K_PATH_URL_CACHE', DOL_DATA_ROOT.
'/admin/temp/');
138 define(
'K_BLANK_IMAGE',
'_blank.png');
139 define(
'PDF_PAGE_FORMAT',
'A4');
140 define(
'PDF_PAGE_ORIENTATION',
'P');
141 define(
'PDF_CREATOR',
'TCPDF');
142 define(
'PDF_AUTHOR',
'TCPDF');
143 define(
'PDF_HEADER_TITLE',
'TCPDF Example');
144 define(
'PDF_HEADER_STRING',
"by Dolibarr ERP CRM");
145 define(
'PDF_UNIT',
'mm');
146 define(
'PDF_MARGIN_HEADER', 5);
147 define(
'PDF_MARGIN_FOOTER', 10);
148 define(
'PDF_MARGIN_TOP', 27);
149 define(
'PDF_MARGIN_BOTTOM', 25);
150 define(
'PDF_MARGIN_LEFT', 15);
151 define(
'PDF_MARGIN_RIGHT', 15);
152 define(
'PDF_FONT_NAME_MAIN',
'helvetica');
153 define(
'PDF_FONT_SIZE_MAIN', 10);
154 define(
'PDF_FONT_NAME_DATA',
'helvetica');
155 define(
'PDF_FONT_SIZE_DATA', 8);
156 define(
'PDF_FONT_MONOSPACED',
'courier');
157 define(
'PDF_IMAGE_SCALE_RATIO', 1.25);
158 define(
'HEAD_MAGNIFICATION', 1.1);
159 define(
'K_CELL_HEIGHT_RATIO', 1.25);
160 define(
'K_TITLE_MAGNIFICATION', 1.3);
161 define(
'K_SMALL_RATIO', 2 / 3);
162 define(
'K_THAI_TOPCHARS',
true);
163 define(
'K_TCPDF_CALLS_IN_HTML',
true);
165 define(
'K_TCPDF_THROW_EXCEPTION_ERROR',
true);
167 define(
'K_TCPDF_THROW_EXCEPTION_ERROR',
false);
172 require_once TCPDF_PATH.
'tcpdf.php';
176 require_once TCPDI_PATH.
'tcpdi.php';
187 $pdf =
new TCPDI($pagetype, $metric, $format,
true,
'UTF-8',
false, $pdfa);
189 $pdf =
new TCPDF($pagetype, $metric, $format,
true,
'UTF-8',
false, $pdfa);
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'])) {
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');
316 $height = (!
getDolGlobalString(
'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;
342 $pdf->startTransaction();
347 $start_y = $pdf->GetY();
349 $start_page = $pdf->getPage();
351 $pdf->writeHTMLCell(0, 0, 0, $start_y, $htmlcontent, 0, 1,
false,
true,
'J',
true);
353 $end_y = $pdf->GetY();
354 $end_page = $pdf->getPage();
357 if ($end_page == $start_page) {
358 $height = $end_y - $start_y;
360 for ($page = $start_page; $page <= $end_page; ++$page) {
361 $pdf->setPage($page);
362 $tmpm = $pdf->getMargins();
363 $tMargin = $tmpm[
'top'];
364 if ($page == $start_page) {
366 $height = $pdf->getPageHeight() - $start_y - $pdf->getBreakMargin();
367 } elseif ($page == $end_page) {
369 $height = $end_y - $tMargin;
371 $height = $pdf->getPageHeight() - $tMargin - $pdf->getBreakMargin();
376 $pdf = $pdf->rollbackTransaction();
397 if ($thirdparty instanceof
Societe) {
398 $socname = $thirdparty->name;
399 if (($includealias ||
getDolGlobalInt(
'PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) && !empty($thirdparty->name_alias)) {
401 $socname = $thirdparty->name_alias.
" - ".$thirdparty->name;
403 $socname = $thirdparty->name.
" - ".$thirdparty->name_alias;
406 } elseif ($thirdparty instanceof
Contact) {
407 if ($thirdparty->socid > 0) {
408 $thirdparty->fetch_thirdparty();
409 $socname = $thirdparty->thirdparty->name;
410 if (($includealias ||
getDolGlobalInt(
'PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) && !empty($thirdparty->thirdparty->name_alias)) {
412 $socname = $thirdparty->thirdparty->name_alias.
" - ".$thirdparty->thirdparty->name;
414 $socname = $thirdparty->thirdparty->name.
" - ".$thirdparty->thirdparty->name_alias;
419 throw new InvalidArgumentException(
'Parameter 1 $thirdparty is not a Societe nor Contact');
422 return $outputlangs->convToOutputCharset($socname);
438function pdf_build_address($outputlangs, $sourcecompany, $targetcompany =
'', $targetcontact =
'', $usecontact = 0, $mode =
'source',
$object =
null)
442 if ($mode ==
'source' && !is_object($sourcecompany)) {
445 if ($mode ==
'target' && !is_object($targetcompany)) {
449 if (!empty($sourcecompany->state_id) && empty($sourcecompany->state)) {
450 $sourcecompany->state =
getState($sourcecompany->state_id);
452 if (!empty($targetcompany->state_id) && empty($targetcompany->state)) {
453 $targetcompany->state =
getState($targetcompany->state_id);
458 if (is_object($hookmanager)) {
459 $parameters = array(
'sourcecompany' => &$sourcecompany,
'targetcompany' => &$targetcompany,
'targetcontact' => &$targetcontact,
'outputlangs' => $outputlangs,
'mode' => $mode,
'usecontact' => $usecontact);
461 $reshook = $hookmanager->executeHooks(
'pdf_build_address', $parameters,
$object, $action);
462 $stringaddress .= $hookmanager->resPrint;
464 if (empty($reshook)) {
465 if ($mode ==
'source') {
467 if (isset($targetcompany->country_code) && !empty($sourcecompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
471 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($sourcecompany, $withCountry,
"\n", $outputlangs)).
"\n";
475 if ($sourcecompany->phone) {
476 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"PhoneShort").
": ".$outputlangs->convToOutputCharset($sourcecompany->phone);
479 if ($sourcecompany->fax) {
480 $stringaddress .= ($stringaddress ? ($sourcecompany->phone ?
" - " :
"\n") :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($sourcecompany->fax);
483 if ($sourcecompany->email) {
484 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($sourcecompany->email);
487 if ($sourcecompany->url) {
488 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($sourcecompany->url);
493 if ($sourcecompany->tva_intra) {
494 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($sourcecompany->tva_intra);
499 if (
getDolGlobalString(
'MAIN_PROFID1_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof1)) {
500 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $sourcecompany->country_code);
501 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
504 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof1);
506 if (
getDolGlobalString(
'MAIN_PROFID2_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof2)) {
507 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $sourcecompany->country_code);
508 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
511 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof2);
513 if (
getDolGlobalString(
'MAIN_PROFID3_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof3)) {
514 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $sourcecompany->country_code);
515 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
518 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof3);
520 if (
getDolGlobalString(
'MAIN_PROFID4_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof4)) {
521 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $sourcecompany->country_code);
522 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
525 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof4);
527 if (
getDolGlobalString(
'MAIN_PROFID5_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof5)) {
528 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $sourcecompany->country_code);
529 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
532 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof5);
534 if (
getDolGlobalString(
'MAIN_PROFID6_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof6)) {
535 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $sourcecompany->country_code);
536 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
539 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof6);
542 $stringaddress .= ($stringaddress ?
"\n" :
'') .
getDolGlobalString(
'PDF_ADD_MORE_AFTER_SOURCE_ADDRESS');
546 if ($mode ==
'target' || preg_match(
'/targetwithdetails/', $mode)) {
547 if ($usecontact && (is_object($targetcontact))) {
548 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($targetcontact->getFullName($outputlangs, 1));
550 if (!empty($targetcontact->address)) {
551 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcontact)).
"\n";
553 $companytouseforaddress = $targetcompany;
556 if ($targetcontact->socid > 0 && $targetcontact->socid != $targetcompany->id) {
557 $targetcontact->fetch_thirdparty();
558 $companytouseforaddress = $targetcontact->thirdparty;
561 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($companytouseforaddress)).
"\n";
564 if (!empty($targetcontact->country_code) && $targetcontact->country_code != $sourcecompany->country_code) {
565 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcontact->country_code));
566 } elseif (empty($targetcontact->country_code) && !empty($targetcompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
567 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
570 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || preg_match(
'/targetwithdetails/', $mode)) {
572 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
573 if (!empty($targetcontact->phone_pro) || !empty($targetcontact->phone_mobile)) {
574 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
576 if (!empty($targetcontact->phone_pro)) {
577 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_pro);
579 if (!empty($targetcontact->phone_pro) && !empty($targetcontact->phone_mobile)) {
580 $stringaddress .=
" / ";
582 if (!empty($targetcontact->phone_mobile)) {
583 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_mobile);
587 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
588 if ($targetcontact->fax) {
589 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcontact->fax);
593 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
594 if ($targetcontact->email) {
595 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcontact->email);
599 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
600 if ($targetcontact->url) {
601 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($targetcontact->url);
606 if (is_object($targetcompany)) {
607 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcompany));
609 if (!empty($targetcompany->country_code) && $targetcompany->country_code != $sourcecompany->country_code) {
610 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
612 $stringaddress .= ($stringaddress ?
"\n" :
'');
615 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || preg_match(
'/targetwithdetails/', $mode)) {
617 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
618 if (!empty($targetcompany->phone)) {
619 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
621 if (!empty($targetcompany->phone)) {
622 $stringaddress .= $outputlangs->convToOutputCharset($targetcompany->phone);
626 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
627 if ($targetcompany->fax) {
628 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcompany->fax);
632 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
633 if ($targetcompany->email) {
634 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcompany->email);
638 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
639 if ($targetcompany->url) {
640 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($targetcompany->url);
649 if ($usecontact && is_object($targetcontact) &&
getDolGlobalInt(
'MAIN_USE_COMPANY_NAME_OF_CONTACT')) {
650 $targetcontact->fetch_thirdparty();
651 if (!empty($targetcontact->thirdparty->id) && $targetcontact->thirdparty->tva_intra) {
652 $stringaddress .= ($stringaddress ?
"\n" :
'') . $outputlangs->transnoentities(
"VATIntraShort") .
': ' . $outputlangs->convToOutputCharset($targetcontact->thirdparty->tva_intra);
654 } elseif (!empty($targetcompany->tva_intra)) {
655 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($targetcompany->tva_intra);
660 if (
getDolGlobalString(
'MAIN_LEGALFORM_IN_ADDRESS') && !empty($targetcompany->forme_juridique_code)) {
662 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp;
666 if (
getDolGlobalString(
'MAIN_PROFID1_IN_ADDRESS') && !empty($targetcompany->idprof1)) {
667 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $targetcompany->country_code);
668 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
671 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof1);
673 if (
getDolGlobalString(
'MAIN_PROFID2_IN_ADDRESS') && !empty($targetcompany->idprof2)) {
674 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $targetcompany->country_code);
675 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
678 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof2);
680 if (
getDolGlobalString(
'MAIN_PROFID3_IN_ADDRESS') && !empty($targetcompany->idprof3)) {
681 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $targetcompany->country_code);
682 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
685 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof3);
687 if (
getDolGlobalString(
'MAIN_PROFID4_IN_ADDRESS') && !empty($targetcompany->idprof4)) {
688 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $targetcompany->country_code);
689 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
692 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof4);
694 if (
getDolGlobalString(
'MAIN_PROFID5_IN_ADDRESS') && !empty($targetcompany->idprof5)) {
695 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $targetcompany->country_code);
696 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
699 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof5);
701 if (
getDolGlobalString(
'MAIN_PROFID6_IN_ADDRESS') && !empty($targetcompany->idprof6)) {
702 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $targetcompany->country_code);
703 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
706 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof6);
711 if ($mode ==
'source' && !empty($sourcecompany->note_public)) {
712 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($sourcecompany->note_public);
714 if (($mode ==
'target' || preg_match(
'/targetwithdetails/', $mode)) && !empty($targetcompany->note_public)) {
715 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($targetcompany->note_public);
721 return $stringaddress;
740 if (file_exists($filepath)) {
741 $pdf->SetAutoPageBreak(0, 0);
750 $pdf->SetAutoPageBreak(1, 0);
772 $substitutionarray[
'__FROM_NAME__'] =
'__FROM_NAME__';
773 $substitutionarray[
'__FROM_EMAIL__'] =
'__FROM_EMAIL__';
774 return $substitutionarray;
794 } elseif ($unit ==
'mm') {
796 } elseif ($unit ==
'cm') {
798 } elseif ($unit ==
'in') {
802 dol_print_error(
null,
'Unexpected unit "'.$unit.
'" for pdf_watermark');
809 $text = $outputlangs->convToOutputCharset($text);
811 $savx = $pdf->getX();
812 $savy = $pdf->getY();
814 $watermark_angle = atan($h / $w) / 2;
815 $watermark_x_pos = 0;
816 $watermark_y_pos = $h / 3;
817 $watermark_x = $w / 2;
818 $watermark_y = $h / 3;
819 $pdf->SetFont(
'',
'B', 40);
820 $pdf->SetTextColor(255, 0, 0);
823 $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));
826 $pdf->SetXY($watermark_x_pos, $watermark_y_pos);
830 $pdf->Cell($w - 20, 25, $outputlangs->convToOutputCharset($text),
"", 2,
"C", 0);
835 $pdf->SetXY($savx, $savy);
854function pdf_bank(&$pdf, $outputlangs, $curx, $cury, $account, $onlynumber = 0, $default_font_size = 10)
856 global $mysoc,
$conf;
858 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formbank.class.php';
862 $pdf->SetXY($curx, $cury);
864 if (empty($onlynumber)) {
865 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizetitle);
866 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
'PaymentByTransferOnThisBankAccount').
':', 0,
'L', 0);
870 $outputlangs->load(
"banks");
873 $bickey =
"BICNumber";
874 if ($account->getCountryCode() ==
'IN') {
879 $usedetailedbban = $account->useDetailedBBAN();
882 if ($usedetailedbban) {
885 if (empty($onlynumber)) {
886 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
887 $pdf->SetXY($curx, $cury);
888 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L', 0);
898 if (empty($onlynumber)) {
899 $pdf->line($curx + 1, $cury + 1, $curx + 1, $cury + 6);
903 foreach ($account->getFieldsToShow() as $val) {
904 $pdf->SetXY($curx, $cury + 4);
905 $pdf->SetFont(
'',
'', $default_font_size - 3);
907 if ($val ==
'BankCode') {
910 $content = $account->code_banque;
911 } elseif ($val ==
'DeskCode') {
914 $content = $account->code_guichet;
915 } elseif ($val ==
'BankAccountNumber') {
918 $content = $account->number;
919 } elseif ($val ==
'BankAccountNumberKey') {
922 $content = $account->cle_rib;
923 } elseif ($val ==
'IBAN' || $val ==
'BIC') {
928 dol_print_error($account->db,
'Unexpected value for getFieldsToShow: '.$val);
932 $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($content), 0,
'C', 0);
933 $pdf->SetXY($curx, $cury + 1);
935 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
936 $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities($val), 0,
'C', 0);
937 if (empty($onlynumber)) {
938 $pdf->line($curx, $cury + 1, $curx, $cury + 7);
945 } elseif (!empty($account->number)) {
946 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
947 $pdf->SetXY($curx, $cury);
948 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L', 0);
951 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
952 $pdf->SetXY($curx, $cury);
953 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"BankAccountNumber").
': '.$outputlangs->convToOutputCharset($account->number), 0,
'L', 0);
956 if ($diffsizecontent <= 2) {
961 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
963 if (empty($onlynumber) && !empty($account->address)) {
964 $pdf->SetXY($curx, $cury);
965 $val = $outputlangs->transnoentities(
"Residence").
': '.$outputlangs->convToOutputCharset($account->address);
966 $pdf->MultiCell(100, 3, $val, 0,
'L', 0);
969 $tmpy = $pdf->getStringHeight(100, $val);
973 if (!empty($account->owner_name)) {
974 $pdf->SetXY($curx, $cury);
975 $val = $outputlangs->transnoentities(
"BankAccountOwner").
': '.$outputlangs->convToOutputCharset($account->owner_name);
976 $pdf->MultiCell(100, 3, $val, 0,
'L', 0);
977 $tmpy = $pdf->getStringHeight(100, $val);
979 } elseif (!$usedetailedbban) {
986 if (!empty($account->iban)) {
988 $ibanDisplay_temp = str_replace(
' ',
'', $outputlangs->convToOutputCharset($account->iban));
991 $nbIbanDisplay_temp =
dol_strlen($ibanDisplay_temp);
992 for ($i = 0; $i < $nbIbanDisplay_temp; $i++) {
993 $ibanDisplay .= $ibanDisplay_temp[$i];
994 if ($i % 4 == 3 && $i > 0) {
999 $pdf->SetFont(
'',
'B', $default_font_size - 3);
1000 $pdf->SetXY($curx, $cury);
1001 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($ibankey).
': '.$ibanDisplay, 0,
'L', 0);
1005 if (!empty($account->bic)) {
1006 $pdf->SetFont(
'',
'B', $default_font_size - 3);
1007 $pdf->SetXY($curx, $cury);
1008 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($bickey).
': '.$outputlangs->convToOutputCharset($account->bic), 0,
'L', 0);
1011 return $pdf->getY();
1031function pdf_pagefoot(&$pdf, $outputlangs, $paramfreetext, $fromcompany, $marge_basse, $marge_gauche, $page_hauteur,
$object, $showdetails = 0, $hidefreetext = 0, $page_largeur = 0, $watermark =
'')
1033 global
$conf, $hookmanager;
1035 $outputlangs->load(
"dict");
1038 $marginwithfooter = 0;
1040 $dims = $pdf->getPageDimensions();
1046 if (is_object($fromcompany)) {
1047 $substitutionarray[
'__FROM_NAME__'] = $fromcompany->name;
1048 $substitutionarray[
'__FROM_EMAIL__'] = $fromcompany->email;
1057 $newfreetext = preg_replace(
'/(<img.*src=")[^\"]*viewimage\.php[^\"]*modulepart=medias[^\"]*file=([^\"]*)("[^\/]*\/>)/',
'\1file:/'.DOL_DATA_ROOT.
'/medias/\2\3', $newfreetext);
1059 $line .= $outputlangs->convToOutputCharset($newfreetext);
1068 if (is_object($fromcompany) && in_array($showdetails, array(1, 3))) {
1070 if ($fromcompany->name) {
1071 $line1 .= ($line1 ?
" - " :
"").$outputlangs->transnoentities(
"RegisteredOffice").
": ".$fromcompany->name;
1074 if ($fromcompany->address) {
1075 $line1 .= ($line1 ?
" - " :
"").str_replace(
"\n",
", ", $fromcompany->address);
1078 if ($fromcompany->zip) {
1079 $line1 .= ($line1 ?
" - " :
"").$fromcompany->zip;
1082 if ($fromcompany->town) {
1083 $line1 .= ($line1 ?
" " :
"").$fromcompany->town;
1086 if ($fromcompany->country) {
1087 $line1 .= ($line1 ?
", " :
"").$fromcompany->country;
1090 if ($fromcompany->phone) {
1091 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Phone").
": ".$fromcompany->phone;
1094 if ($fromcompany->fax) {
1095 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Fax").
": ".$fromcompany->fax;
1099 if ($fromcompany->url) {
1100 $line2 .= ($line2 ?
" - " :
"").$fromcompany->url;
1103 if ($fromcompany->email) {
1104 $line2 .= ($line2 ?
" - " :
"").$fromcompany->email;
1107 if ($showdetails == 2 || $showdetails == 3 || (!empty($fromcompany->country_code) && $fromcompany->country_code ==
'DE')) {
1109 if ($fromcompany->managers) {
1110 $line2 .= ($line2 ?
" - " :
"").$fromcompany->managers;
1116 if (!empty($fromcompany->forme_juridique_code) && $fromcompany->forme_juridique_code) {
1117 $line3 .= ($line3 ?
" - " :
"").$outputlangs->convToOutputCharset(
getFormeJuridiqueLabel((
string) $fromcompany->forme_juridique_code));
1120 if (!empty($fromcompany->capital)) {
1121 $tmpamounttoshow =
price2num($fromcompany->capital);
1122 if (is_numeric($tmpamounttoshow) && $tmpamounttoshow > 0) {
1123 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf",
price($tmpamounttoshow, 0, $outputlangs, 0, 0, 0,
$conf->currency));
1124 } elseif (!empty($fromcompany->capital)) {
1125 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf", $fromcompany->capital, $outputlangs);
1129 if (!empty($fromcompany->idprof1) && $fromcompany->idprof1 && ($fromcompany->country_code !=
'FR' || !$fromcompany->idprof2)) {
1130 $field = $outputlangs->transcountrynoentities(
"ProfId1", $fromcompany->country_code);
1131 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1134 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof1);
1137 if (!empty($fromcompany->idprof2) && $fromcompany->idprof2) {
1138 $field = $outputlangs->transcountrynoentities(
"ProfId2", $fromcompany->country_code);
1139 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1142 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof2);
1147 if (!empty($fromcompany->idprof3) && $fromcompany->idprof3) {
1148 $field = $outputlangs->transcountrynoentities(
"ProfId3", $fromcompany->country_code);
1149 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1152 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof3);
1155 if (!empty($fromcompany->idprof4) && $fromcompany->idprof4) {
1156 $field = $outputlangs->transcountrynoentities(
"ProfId4", $fromcompany->country_code);
1157 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1160 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof4);
1163 if (!empty($fromcompany->idprof5) && $fromcompany->idprof5) {
1164 $field = $outputlangs->transcountrynoentities(
"ProfId5", $fromcompany->country_code);
1165 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1168 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof5);
1171 if (!empty($fromcompany->idprof6) && $fromcompany->idprof6) {
1172 $field = $outputlangs->transcountrynoentities(
"ProfId6", $fromcompany->country_code);
1173 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1176 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof6);
1179 if (!empty($fromcompany->idprof7) && $fromcompany->idprof7) {
1180 $field = $outputlangs->transcountrynoentities(
"ProfId7", $fromcompany->country_code);
1181 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1184 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof7);
1187 if (!empty($fromcompany->idprof8) && $fromcompany->idprof8) {
1188 $field = $outputlangs->transcountrynoentities(
"ProfId8", $fromcompany->country_code);
1189 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1192 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof8);
1195 if (!empty($fromcompany->idprof9) && $fromcompany->idprof9) {
1196 $field = $outputlangs->transcountrynoentities(
"ProfId9", $fromcompany->country_code);
1197 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1200 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof9);
1203 if (!empty($fromcompany->idprof10) && $fromcompany->idprof10) {
1204 $field = $outputlangs->transcountrynoentities(
"ProfId10", $fromcompany->country_code);
1205 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1208 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof10);
1211 if (!empty($fromcompany->tva_intra) && $fromcompany->tva_intra !=
'') {
1212 $line4 .= ($line4 ?
" - " :
"").$outputlangs->transnoentities(
"VATIntraShort").
": ".$outputlangs->convToOutputCharset($fromcompany->tva_intra);
1215 $pdf->SetFont(
'',
'', 7);
1216 $pdf->SetDrawColor(224, 224, 224);
1219 list($r, $g, $b) = sscanf(
getDolGlobalString(
'PDF_FOOTER_TEXT_COLOR'),
'%d, %d, %d');
1220 $pdf->SetTextColor($r, $g, $b);
1224 $freetextheight = 0;
1235 $freetextheight = $pdf->getStringHeight($width, $line);
1244 if (is_object($hookmanager)) {
1245 $parameters = array(
'line1' => $line1,
'line2' => $line2,
'line3' => $line3,
'line4' => $line4,
'outputlangs' => $outputlangs);
1247 $hookmanager->executeHooks(
'pdf_pagefoot', $parameters,
$object, $action);
1248 if (!empty($hookmanager->resPrint) && $hidefreetext == 0) {
1249 $mycustomfooter = $hookmanager->resPrint;
1252 $marginwithfooter = $marge_basse + $freetextheight + $mycustomfooterheight;
1253 $posy = (float) $marginwithfooter;
1257 list($r, $g, $b) = sscanf(
$conf->global->PDF_FOOTER_BACKGROUND_COLOR,
'%d, %d, %d');
1258 $pdf->SetAutoPageBreak(0, 0);
1259 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F', array(), $fill_color = array($r, $g, $b));
1260 $pdf->SetAutoPageBreak(1, 0);
1264 $pdf->SetAutoPageBreak(0, 0);
1267 $pdf->SetXY($dims[
'lm'], -$posy);
1269 $pdf->MultiCell(0, 3, $line, 0, $align, 0);
1271 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1273 $posy -= $freetextheight;
1276 $pdf->SetAutoPageBreak(1, 0);
1283 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1294 $pdf->SetAutoPageBreak(0, 0);
1296 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $mycustomfooterheight, $dims[
'lm'], $dims[
'hk'] - $posy,
dol_htmlentitiesbr($mycustomfooter, 1,
'UTF-8', 0));
1298 $pdf->SetAutoPageBreak(1, 0);
1301 $posy -= $mycustomfooterheight - 3;
1304 $marginwithfooter = $marge_basse + $freetextheight + (!empty($line1) ? 3 : 0) + (!empty($line2) ? 3 : 0) + (!empty($line3) ? 3 : 0) + (!empty($line4) ? 3 : 0);
1305 $posy = (float) $marginwithfooter;
1309 list($r, $g, $b) = sscanf(
$conf->global->PDF_FOOTER_BACKGROUND_COLOR,
'%d, %d, %d');
1310 $pdf->SetAutoPageBreak(0, 0);
1311 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F', array(), $fill_color = array($r, $g, $b));
1312 $pdf->SetAutoPageBreak(1, 0);
1316 $pdf->SetAutoPageBreak(0, 0);
1319 $pdf->SetXY($dims[
'lm'], -$posy);
1321 $pdf->MultiCell(0, 3, $line, 0, $align, 0);
1323 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1325 $posy -= $freetextheight;
1328 $pdf->SetAutoPageBreak(1, 0);
1337 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1347 if (!empty($line1)) {
1348 $pdf->SetFont(
'',
'B', 7);
1349 $pdf->SetXY($dims[
'lm'], -$posy);
1350 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line1, 0,
'C', 0);
1352 $pdf->SetFont(
'',
'', 7);
1355 if (!empty($line2)) {
1356 $pdf->SetFont(
'',
'B', 7);
1357 $pdf->SetXY($dims[
'lm'], -$posy);
1358 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line2, 0,
'C', 0);
1360 $pdf->SetFont(
'',
'', 7);
1363 if (!empty($line3)) {
1364 $pdf->SetXY($dims[
'lm'], -$posy);
1365 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line3, 0,
'C', 0);
1368 if (!empty($line4)) {
1370 $pdf->SetXY($dims[
'lm'], -$posy);
1371 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line4, 0,
'C', 0);
1378 $pdf->SetXY($dims[
'wk'] - $dims[
'rm'] - 18 -
getDolGlobalInt(
'PDF_FOOTER_PAGE_NUMBER_X', 0), -$posy -
getDolGlobalInt(
'PDF_FOOTER_PAGE_NUMBER_Y', 0));
1380 $pagination = $pdf->PageNo().
' / '.$pdf->getAliasNbPages();
1381 $fontRenderCorrection = 0;
1382 if (in_array(
pdf_getPDFFont($outputlangs), array(
'freemono',
'DejaVuSans'))) {
1383 $fontRenderCorrection = 10;
1385 $pdf->MultiCell(18 + $fontRenderCorrection, 2, $pagination, 0,
'R', 0);
1388 if (!empty($watermark)) {
1389 pdf_watermark($pdf, $outputlangs, $page_hauteur, $page_largeur,
'mm', $watermark);
1392 return $marginwithfooter;
1412 if (!empty($linkedobjects)) {
1413 foreach ($linkedobjects as $linkedobject) {
1414 $reftoshow = $linkedobject[
"ref_title"].
' : '.$linkedobject[
"ref_value"];
1415 if (!empty($linkedobject[
"date_value"])) {
1416 $reftoshow .=
' / '.$linkedobject[
"date_value"];
1420 $pdf->SetXY($posx, $posy);
1421 $pdf->SetFont(
'',
'', (
float) $default_font_size - 2);
1422 $pdf->MultiCell($w, $h, $reftoshow,
'', $align);
1426 return $pdf->getY();
1446function pdf_writelinedesc(&$pdf,
$object, $i, $outputlangs, $w, $h, $posx, $posy, $hideref = 0, $hidedesc = 0, $issupplierline = 0, $align =
'J')
1448 global $db,
$conf, $langs, $hookmanager;
1453 if (is_object($hookmanager)) {
1454 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1455 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1456 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1458 $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);
1462 $reshook = $hookmanager->executeHooks(
'pdf_writelinedesc', $parameters,
$object, $action);
1464 if (!empty($hookmanager->resPrint)) {
1465 $result .= $hookmanager->resPrint;
1468 if (empty($reshook)) {
1470 $labelproductservice = preg_replace(
'/(<img[^>]*src=")[^\"]*viewimage\.php[^\"]*modulepart=medias[^\"]*file=([^\"]*)/',
'\1file:/'.DOL_DATA_ROOT.
'/medias/\2\3', $labelproductservice, -1, $nbrep);
1477 $labelproductservice = preg_replace(
'/(<img[^>]*src=")([^"]*)(&)([^"]*")/',
'\1\2&\4', $labelproductservice, -1, $nbrep);
1480 $pdf->setListIndentWidth(5);
1481 $TMarginList = [
'ul' => [[
'h' => 0.1, ],[
'h' => 0.1, ]],
'li' => [[
'h' => 0.1, ],],];
1482 $pdf->setHtmlVSpace($TMarginList);
1486 $pdf->writeHTMLCell($w, $h, $posx, $posy, $outputlangs->convToOutputCharset($labelproductservice), 0, 1,
false,
true, $align,
true);
1487 $result .= $labelproductservice;
1505 global $db,
$conf, $langs;
1507 $idprod = (!empty(
$object->lines[$i]->fk_product) ?
$object->lines[$i]->fk_product :
false);
1508 $label = (!empty(
$object->lines[$i]->label) ?
$object->lines[$i]->label : (!empty(
$object->lines[$i]->product_label) ?
$object->lines[$i]->product_label :
''));
1509 $product_barcode = (!empty(
$object->lines[$i]->product_barcode) ?
$object->lines[$i]->product_barcode :
"");
1510 $desc = (!empty(
$object->lines[$i]->desc) ?
$object->lines[$i]->desc : (!empty(
$object->lines[$i]->description) ?
$object->lines[$i]->description :
''));
1511 $ref_supplier = (!empty(
$object->lines[$i]->ref_supplier) ?
$object->lines[$i]->ref_supplier : (!empty(
$object->lines[$i]->ref_fourn) ?
$object->lines[$i]->ref_fourn :
''));
1512 $note = (!empty(
$object->lines[$i]->note) ?
$object->lines[$i]->note :
'');
1513 $dbatch = (!empty(
$object->lines[$i]->detail_batch) ?
$object->lines[$i]->detail_batch :
false);
1517 if ($issupplierline) {
1518 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
1521 include_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
1525 include_once DOL_DOCUMENT_ROOT .
'/product/class/productcustomerprice.class.php';
1530 $idprod = (!empty(
$object->lines[$i]->fk_product) ?
$object->lines[$i]->fk_product :
false);
1532 $prodser->fetch($idprod);
1534 if ($multilangsactive) {
1535 $prodser->getMultiLangs();
1536 $object->lines[$i]->multilangs = $prodser->multilangs;
1540 if (!empty(
$object->lines[$i]->label)) {
1541 $label =
$object->lines[$i]->label;
1543 if (!empty(
$object->lines[$i]->multilangs[$outputlangs->defaultlang][
'label']) && $multilangsactive) {
1544 $label =
$object->lines[$i]->multilangs[$outputlangs->defaultlang][
'label'];
1546 if (!empty(
$object->lines[$i]->product_label)) {
1547 $label =
$object->lines[$i]->product_label;
1554 if (!empty(
$object->lines[$i]->desc)) {
1555 $desc =
$object->lines[$i]->desc;
1557 if (!empty(
$object->lines[$i]->multilangs[$outputlangs->defaultlang][
'description']) && $multilangsactive) {
1558 $desc =
$object->lines[$i]->multilangs[$outputlangs->defaultlang][
'description'];
1560 if (!empty(
$object->lines[$i]->description)) {
1561 $desc =
$object->lines[$i]->description;
1568 $ref_supplier = (!empty(
$object->lines[$i]->ref_supplier) ?
$object->lines[$i]->ref_supplier : (!empty(
$object->lines[$i]->ref_fourn) ?
$object->lines[$i]->ref_fourn :
''));
1570 $note = (!empty(
$object->lines[$i]->note) ?
$object->lines[$i]->note :
'');
1572 $dbatch = (!empty(
$object->lines[$i]->detail_batch) ?
$object->lines[$i]->detail_batch :
false);
1576 if ($multilangsactive && ($outputlangs->defaultlang != $langs->defaultlang)) {
1577 $translatealsoifmodified =
getDolGlobalString(
'MAIN_MULTILANG_TRANSLATE_EVEN_IF_MODIFIED');
1585 $textwasnotmodified = ($label == $prodser->label);
1586 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"label"]) && ($textwasnotmodified || $translatealsoifmodified)) {
1587 $label = $prodser->multilangs[$outputlangs->defaultlang][
"label"];
1592 $textwasnotmodified =
false;
1596 $textwasnotmodified = ($desc == $prodser->description);
1598 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"description"])) {
1599 if ($textwasnotmodified) {
1600 $desc = str_replace($prodser->description, $prodser->multilangs[$outputlangs->defaultlang][
"description"], $desc);
1601 } elseif ($translatealsoifmodified) {
1602 $desc = $prodser->multilangs[$outputlangs->defaultlang][
"description"];
1607 $textwasnotmodified = ($note == $prodser->note_public);
1608 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"other"]) && ($textwasnotmodified || $translatealsoifmodified)) {
1609 $note = $prodser->multilangs[$outputlangs->defaultlang][
"other"];
1612 } elseif ((
$object->element ==
'facture' ||
$object->element ==
'facturefourn') && preg_match(
'/^\(DEPOSIT\).+/', $desc)) {
1613 $desc = str_replace(
'(DEPOSIT)', $outputlangs->trans(
'Deposit'), $desc);
1616 $libelleproduitservice =
'';
1619 $libelleproduitservice = $label;
1620 if (!empty($libelleproduitservice) &&
getDolGlobalString(
'PDF_BOLD_PRODUCT_LABEL')) {
1624 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1626 $libelleproduitservice =
'<b>'.$libelleproduitservice.
'</b>';
1633 $prodser->get_sousproduits_arbo();
1634 if (!empty($prodser->sousprods) && is_array($prodser->sousprods) && count($prodser->sousprods)) {
1635 $outputlangs->load(
'mrp');
1636 $tmparrayofsubproducts = reset($prodser->sousprods);
1639 if (isset(
$object->lines[$i]->qty) && !empty(
$object->lines[$i]->qty)) {
1640 $qtyText =
$object->lines[$i]->qty;
1641 } elseif (isset(
$object->lines[$i]->qty_shipped) && !empty(
$object->lines[$i]->qty_shipped)) {
1642 $qtyText =
$object->lines[$i]->qty;
1646 foreach ($tmparrayofsubproducts as $subprodval) {
1650 $outputlangs->trans(
'Qty').
':'.$qtyText.
' x '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1].
'= '.$outputlangs->trans(
'QtyTot').
':'.$subprodval[1] * $qtyText :
1651 $outputlangs->trans(
'Qty').
' '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1])
1655 foreach ($tmparrayofsubproducts as $subprodval) {
1657 dol_concatdesc($libelleproduitservice,
" * ".$subprodval[5].(($subprodval[5] && $subprodval[3]) ?
' - ' :
'').$subprodval[3]),
1659 $outputlangs->trans(
'Qty').
':'.$qtyText.
' x '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1].
'= '.$outputlangs->trans(
'QtyTot').
':'.$subprodval[1] * $qtyText :
1660 $outputlangs->trans(
'Qty').
' '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1])
1667 if (isModEnabled(
'barcode') &&
getDolGlobalString(
'MAIN_GENERATE_DOCUMENTS_SHOW_PRODUCT_BARCODE') && !empty($product_barcode)) {
1668 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $outputlangs->trans(
"BarCode").
" ".$product_barcode);
1672 if (!empty($desc) && ($desc != $label)) {
1673 if ($desc ==
'(CREDIT_NOTE)' &&
$object->lines[$i]->fk_remise_except) {
1675 $discount->fetch(
$object->lines[$i]->fk_remise_except);
1676 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
1677 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromCreditNote", $sourceref);
1678 } elseif ($desc ==
'(DEPOSIT)' &&
$object->lines[$i]->fk_remise_except) {
1680 $discount->fetch(
$object->lines[$i]->fk_remise_except);
1681 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
1682 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromDeposit", $sourceref);
1685 $libelleproduitservice .=
' ('.dol_print_date($discount->datec,
'day',
'', $outputlangs).
')';
1687 } elseif ($desc ==
'(EXCESS RECEIVED)' &&
$object->lines[$i]->fk_remise_except) {
1689 $discount->fetch(
$object->lines[$i]->fk_remise_except);
1690 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessReceived", $discount->ref_facture_source);
1691 } elseif ($desc ==
'(EXCESS PAID)' &&
$object->lines[$i]->fk_remise_except) {
1693 $discount->fetch(
$object->lines[$i]->fk_remise_except);
1694 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessPaid", $discount->ref_invoice_supplier_source);
1698 if (!empty(
$object->element)) {
1699 $tmpkey =
'MAIN_DOCUMENTS_HIDE_DESCRIPTION_FOR_'.strtoupper(
$object->element);
1704 if (empty($hidedesc)) {
1706 $libelleproduitservice =
dol_concatdesc($desc, $libelleproduitservice);
1709 $libelleproduitservice = $desc;
1711 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
1716 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
1722 $prefix_prodserv =
"";
1725 if ($prodser->isService()) {
1726 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Service").
" ";
1728 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Product").
" ";
1732 if (empty($hideref)) {
1733 if ($issupplierline) {
1735 $ref_prodserv = $prodser->ref;
1736 if ($ref_supplier) {
1737 $ref_prodserv .= ($prodser->ref ?
' (' :
'').$outputlangs->transnoentitiesnoconv(
"SupplierRef").
' '.$ref_supplier.($prodser->ref ?
')' :
'');
1739 } elseif (
getDolGlobalInt(
'PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES') == 1) {
1740 $ref_prodserv = $ref_supplier;
1741 } elseif (
getDolGlobalInt(
'PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES') == 2) {
1742 $ref_prodserv = $ref_supplier.
' ('.$outputlangs->transnoentitiesnoconv(
"InternalRef").
' '.$prodser->ref.
')';
1745 $ref_prodserv = $prodser->ref;
1749 $filter = array(
'fk_product' => $idprod,
'fk_soc' =>
$object->socid);
1751 $nbCustomerPrices = $productCustomerPriceStatic->fetchAll(
'',
'', 1, 0, $filter);
1753 if ($nbCustomerPrices > 0) {
1754 $productCustomerPrice = $productCustomerPriceStatic->lines[0];
1756 if (!empty($productCustomerPrice->ref_customer)) {
1757 switch (
$conf->global->PRODUIT_CUSTOMER_PRICES_PDF_REF_MODE) {
1759 $ref_prodserv = $productCustomerPrice->ref_customer;
1763 $ref_prodserv = $productCustomerPrice->ref_customer .
' (' . $outputlangs->transnoentitiesnoconv(
'InternalRef') .
' ' . $ref_prodserv .
')';
1767 $ref_prodserv = $ref_prodserv .
' (' . $outputlangs->transnoentitiesnoconv(
'RefCustomer') .
' ' . $productCustomerPrice->ref_customer .
')';
1774 if (!empty($libelleproduitservice) && !empty($ref_prodserv)) {
1775 $ref_prodserv .=
" - ";
1779 if (!empty($ref_prodserv) &&
getDolGlobalString(
'PDF_BOLD_PRODUCT_REF_AND_PERIOD')) {
1781 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1783 $ref_prodserv =
'<b>'.$ref_prodserv.
'</b>';
1786 $libelleproduitservice = $prefix_prodserv.$ref_prodserv.$libelleproduitservice;
1789 if (
getDolGlobalString(
'CATEGORY_ADD_DESC_INTO_DOC') && $idprod && isModEnabled(
'category')) {
1790 include_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
1793 $tblcateg = $categstatic->containing($idprod, Categorie::TYPE_PRODUCT);
1794 foreach ($tblcateg as $cate) {
1796 $desccateg = $cate->description;
1798 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desccateg);
1803 if (!empty(
$object->lines[$i]->date_start) || !empty(
$object->lines[$i]->date_end)) {
1807 if (
$object->lines[$i]->date_start &&
$object->lines[$i]->date_end) {
1808 $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)).
')';
1810 if (
$object->lines[$i]->date_start && !
$object->lines[$i]->date_end) {
1811 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateFrom',
dol_print_date(
$object->lines[$i]->date_start, $format,
false, $outputlangs)).
')';
1813 if (!
$object->lines[$i]->date_start &&
$object->lines[$i]->date_end) {
1814 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateUntil',
dol_print_date(
$object->lines[$i]->date_end, $format,
false, $outputlangs)).
')';
1819 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1821 $libelleproduitservice .=
'<br><b style="color:#333666;" ><em>'.$period.
'</em></b>';
1823 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $period);
1829 if (!empty($dbatch)) {
1834 include_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
1835 include_once DOL_DOCUMENT_ROOT.
'/product/class/productbatch.class.php';
1840 foreach ($dbatch as $detail) {
1842 if ($detail->eatby) {
1843 $dte[] = $outputlangs->transnoentitiesnoconv(
'printEatby',
dol_print_date($detail->eatby, $format,
false, $outputlangs));
1845 if ($detail->sellby) {
1846 $dte[] = $outputlangs->transnoentitiesnoconv(
'printSellby',
dol_print_date($detail->sellby, $format,
false, $outputlangs));
1848 if ($detail->batch) {
1849 $dte[] = $outputlangs->transnoentitiesnoconv(
'printBatch', $detail->batch);
1852 $dte[] = $outputlangs->transnoentitiesnoconv(
'printQty', $detail->qty);
1856 if (
$object->element ==
'shipping' && $detail->fk_origin_stock > 0 &&
getDolGlobalInt(
'PRODUCTBATCH_SHOW_WAREHOUSE_ON_SHIPMENT')) {
1857 $resproductbatch = $tmpproductbatch->fetch($detail->fk_origin_stock);
1858 if ($resproductbatch > 0) {
1859 $reswarehouse = $tmpwarehouse->fetch($tmpproductbatch->warehouseid);
1860 if ($reswarehouse > 0) {
1861 $dte[] = $tmpwarehouse->ref;
1866 $libelleproduitservice .=
"__N__ ".implode(
" - ", $dte);
1876 $libelleproduitservice = preg_replace(
'/__N__/',
'<br>', $libelleproduitservice);
1878 $libelleproduitservice = preg_replace(
'/__N__/',
"\n", $libelleproduitservice);
1882 return $libelleproduitservice;
1896 global $hookmanager;
1901 if (is_object($hookmanager)) {
1902 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1903 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1904 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1906 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
1908 $reshook = $hookmanager->executeHooks(
'pdf_getlinenum', $parameters,
$object, $action);
1909 $result .= $hookmanager->resPrint;
1911 if (empty($reshook)) {
1929 global $hookmanager;
1934 if (is_object($hookmanager)) {
1935 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1936 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1937 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1939 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
1941 $reshook = $hookmanager->executeHooks(
'pdf_getlineref', $parameters,
$object, $action);
1942 $result .= $hookmanager->resPrint;
1944 if (empty($reshook)) {
1962 global $hookmanager;
1967 if (is_object($hookmanager)) {
1968 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1969 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1970 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1972 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
1974 $reshook = $hookmanager->executeHooks(
'pdf_getlineref_supplier', $parameters,
$object, $action);
1975 $result .= $hookmanager->resPrint;
1977 if (empty($reshook)) {
1994 global
$conf, $hookmanager, $mysoc;
1999 if (is_object($hookmanager)) {
2000 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2001 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2002 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2004 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2006 $reshook = $hookmanager->executeHooks(
'pdf_getlinevatrate', $parameters,
$object, $action);
2008 if (!empty($hookmanager->resPrint)) {
2009 $result .= $hookmanager->resPrint;
2012 if (empty($reshook)) {
2013 if (empty($hidedetails) || $hidedetails > 1) {
2019 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
2024 $tmpresult .=
vatrate((
string) abs(
$object->lines[$i]->localtax1_tx), 0);
2029 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
2034 $tmpresult .=
vatrate((
string) abs(
$object->lines[$i]->localtax2_tx), 0);
2039 $result .= $tmpresult;
2056 global
$conf, $hookmanager;
2066 if (is_object($hookmanager)) {
2067 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2068 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2069 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2071 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2073 $reshook = $hookmanager->executeHooks(
'pdf_getlineupexcltax', $parameters,
$object, $action);
2075 if (!empty($hookmanager->resPrint)) {
2076 $result .= $hookmanager->resPrint;
2079 if (empty($reshook)) {
2080 if (empty($hidedetails) || $hidedetails > 1) {
2081 $subprice = (isModEnabled(
"multicurrency") &&
$object->multicurrency_tx != 1 ?
$object->lines[$i]->multicurrency_subprice :
$object->lines[$i]->subprice);
2082 $result .=
price($sign * $subprice, 0, $outputlangs);
2099 global $hookmanager,
$conf;
2109 if (is_object($hookmanager)) {
2110 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2111 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2112 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2114 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2116 $reshook = $hookmanager->executeHooks(
'pdf_getlineupwithtax', $parameters,
$object, $action);
2118 if (!empty($hookmanager->resPrint)) {
2119 $result .= $hookmanager->resPrint;
2122 if (empty($reshook)) {
2123 if (empty($hidedetails) || $hidedetails > 1) {
2124 $result .=
price($sign * ((
$object->lines[$i]->subprice) + (
$object->lines[$i]->subprice) * (
$object->lines[$i]->tva_tx) / 100), 0, $outputlangs);
2141 global $hookmanager;
2146 if (is_object($hookmanager)) {
2147 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2148 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2149 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2151 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2153 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty', $parameters,
$object, $action);
2155 if (!empty($hookmanager->resPrint)) {
2156 $result = $hookmanager->resPrint;
2159 if (empty($reshook)) {
2160 if (
$object->lines[$i]->special_code == 3) {
2163 if (empty($hidedetails) || $hidedetails > 1) {
2164 $result .=
$object->lines[$i]->qty;
2181 global $hookmanager;
2186 if (is_object($hookmanager)) {
2187 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2188 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2189 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2191 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2193 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_asked', $parameters,
$object, $action);
2195 if (!empty($hookmanager->resPrint)) {
2196 $result .= $hookmanager->resPrint;
2199 if (empty($reshook)) {
2200 if (
$object->lines[$i]->special_code == 3) {
2203 if (empty($hidedetails) || $hidedetails > 1) {
2204 $result .=
$object->lines[$i]->qty_asked;
2221 global $hookmanager;
2226 if (is_object($hookmanager)) {
2227 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2228 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2229 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2231 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2233 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_shipped', $parameters,
$object, $action);
2235 if (!empty($hookmanager->resPrint)) {
2236 $result .= $hookmanager->resPrint;
2239 if (empty($reshook)) {
2240 if (
$object->lines[$i]->special_code == 3) {
2243 if (empty($hidedetails) || $hidedetails > 1) {
2244 $result .=
$object->lines[$i]->qty_shipped;
2261 global $hookmanager;
2266 if (is_object($hookmanager)) {
2267 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2268 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2269 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2271 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2273 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_keeptoship', $parameters,
$object, $action);
2275 if (!empty($hookmanager->resPrint)) {
2276 $result .= $hookmanager->resPrint;
2279 if (empty($reshook)) {
2280 if (
$object->lines[$i]->special_code == 3) {
2283 if (empty($hidedetails) || $hidedetails > 1) {
2284 $result .= (
$object->lines[$i]->qty_asked -
$object->lines[$i]->qty_shipped);
2301 global $hookmanager, $langs;
2306 if (is_object($hookmanager)) {
2307 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2308 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2309 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2311 $parameters = array(
2313 'outputlangs' => $outputlangs,
2314 'hidedetails' => $hidedetails,
2315 'special_code' => $special_code
2318 $reshook = $hookmanager->executeHooks(
'pdf_getlineunit', $parameters,
$object, $action);
2320 if (!empty($hookmanager->resPrint)) {
2321 $result .= $hookmanager->resPrint;
2324 if (empty($reshook)) {
2325 if (empty($hidedetails) || $hidedetails > 1) {
2326 $result .= $langs->transnoentitiesnoconv(
$object->lines[$i]->getLabelOfUnit(
'short'));
2344 global $hookmanager;
2346 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
2351 if (is_object($hookmanager)) {
2352 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2353 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2354 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2356 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2358 $reshook = $hookmanager->executeHooks(
'pdf_getlineremisepercent', $parameters,
$object, $action);
2360 if (!empty($hookmanager->resPrint)) {
2361 $result .= $hookmanager->resPrint;
2364 if (empty($reshook)) {
2365 if (
$object->lines[$i]->special_code == 3) {
2368 if (empty($hidedetails) || $hidedetails > 1) {
2387 if (empty($hookmanager)) {
2388 global $hookmanager;
2395 if (is_object($hookmanager)) {
2396 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2397 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2398 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2400 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2402 $reshook = $hookmanager->executeHooks(
'pdf_getlineprogress', $parameters,
$object, $action);
2404 if (!empty($hookmanager->resPrint)) {
2405 return $hookmanager->resPrint;
2408 if (empty($reshook)) {
2409 if (
$object->lines[$i]->special_code == 3) {
2412 if (empty($hidedetails) || $hidedetails > 1) {
2415 if (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2416 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2418 $result = round(
$object->lines[$i]->situation_percent - $prev_progress, 1).
'%';
2420 $result = round(
$object->lines[$i]->situation_percent, 1).
'%';
2438 global
$conf, $hookmanager;
2448 if (is_object($hookmanager)) {
2449 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2450 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2451 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2453 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code,
'sign' => $sign);
2455 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalexcltax', $parameters,
$object, $action);
2457 if (!empty($hookmanager->resPrint)) {
2458 $result .= $hookmanager->resPrint;
2461 if (empty($reshook)) {
2462 if (!empty(
$object->lines[$i]) &&
$object->lines[$i]->special_code == 3) {
2463 $result .= $outputlangs->transnoentities(
"Option");
2464 } elseif (empty($hidedetails) || $hidedetails > 1) {
2465 $total_ht = (isModEnabled(
"multicurrency") &&
$object->multicurrency_tx != 1 ?
$object->lines[$i]->multicurrency_total_ht :
$object->lines[$i]->total_ht);
2466 if (!empty(
$object->lines[$i]->situation_percent) &&
$object->lines[$i]->situation_percent > 0) {
2470 if (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2471 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2472 $progress = (
$object->lines[$i]->situation_percent - $prev_progress) / 100;
2474 $result .=
price($sign * ($total_ht / (
$object->lines[$i]->situation_percent / 100)) * $progress, 0, $outputlangs);
2476 $result .=
price($sign * $total_ht, 0, $outputlangs);
2494 global $hookmanager,
$conf;
2504 if (is_object($hookmanager)) {
2505 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2506 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2507 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2509 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2511 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalwithtax', $parameters,
$object, $action);
2513 if (!empty($hookmanager->resPrint)) {
2514 $result .= $hookmanager->resPrint;
2517 if (empty($reshook)) {
2518 if (
$object->lines[$i]->special_code == 3) {
2519 $result .= $outputlangs->transnoentities(
"Option");
2520 } elseif (empty($hidedetails) || $hidedetails > 1) {
2521 $total_ttc = (isModEnabled(
"multicurrency") &&
$object->multicurrency_tx != 1 ?
$object->lines[$i]->multicurrency_total_ttc :
$object->lines[$i]->total_ttc);
2522 if (isset(
$object->lines[$i]->situation_percent) &&
$object->lines[$i]->situation_percent > 0) {
2526 if (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2527 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2528 $progress = (
$object->lines[$i]->situation_percent - $prev_progress) / 100;
2530 $result .=
price($sign * ($total_ttc / (
$object->lines[$i]->situation_percent / 100)) * $progress, 0, $outputlangs);
2532 $result .=
price($sign * $total_ttc, 0, $outputlangs);
2549 global $db, $hookmanager;
2551 $linkedobjects = array();
2555 foreach (
$object->linkedObjects as $objecttype => $objects) {
2556 if ($objecttype ==
'facture') {
2558 } elseif ($objecttype ==
'propal' || $objecttype ==
'supplier_proposal') {
2559 '@phan-var-force array<Propal|SupplierProposal> $objects';
2560 $outputlangs->load(
'propal');
2562 foreach ($objects as $elementobject) {
2563 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefProposal");
2564 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2565 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DatePropal");
2566 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
2568 } elseif ($objecttype ==
'commande' || $objecttype ==
'supplier_order') {
2569 '@phan-var-force array<Commande|CommandeFournisseur> $objects';
2570 $outputlangs->load(
'orders');
2573 if (empty(
$object->context[
'DolPublicNoteAppendedGetLinkedObjects'])) {
2575 foreach ($objects as $elementobject) {
2576 $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.
')').
' ');
2580 } elseif (count($objects) == 1) {
2581 $elementobject = array_shift($objects);
2582 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder");
2583 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref).(!empty($elementobject->ref_client) ?
' ('.$elementobject->ref_client.
')' :
'').(!empty($elementobject->ref_supplier) ?
' ('.$elementobject->ref_supplier.
')' :
'');
2584 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"OrderDate");
2585 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
2587 } elseif ($objecttype ==
'contrat') {
2588 '@phan-var-force Contrat[] $objects';
2589 $outputlangs->load(
'contracts');
2590 foreach ($objects as $elementobject) {
2591 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefContract");
2592 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2593 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DateContract");
2594 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date_contrat,
'day',
'', $outputlangs);
2596 } elseif ($objecttype ==
'fichinter') {
2597 '@phan-var-force Fichinter[] $objects';
2598 $outputlangs->load(
'interventions');
2599 foreach ($objects as $elementobject) {
2600 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"InterRef");
2601 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2602 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"InterDate");
2603 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->datec,
'day',
'', $outputlangs);
2605 } elseif ($objecttype ==
'shipping') {
2606 '@phan-var-force Expedition[] $objects';
2607 $outputlangs->loadLangs(array(
"orders",
"sendings"));
2609 if (count($objects) > 1) {
2613 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
2614 $refListsTxt .= $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending").
' :';
2616 $refListsTxt .= $outputlangs->transnoentities(
"RefSending").
' :';
2619 foreach ($objects as $elementobject) {
2620 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
2621 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
2622 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
2623 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2625 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
2631 $refListsTxt .= (!empty($refListsTxt) ?
' ' :
'');
2632 if (! is_object($order)) {
2633 $refListsTxt .= $outputlangs->transnoentities($elementobject->ref);
2635 $refListsTxt .= $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
'');
2636 $refListsTxt .=
' / '.$outputlangs->transnoentities($elementobject->ref);
2640 if (empty(
$object->context[
'DolPublicNoteAppendedGetLinkedObjects'])) {
2643 } elseif (count($objects) == 1) {
2644 $elementobject = array_shift($objects);
2647 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
2648 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
2649 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
2650 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2652 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
2659 if (! is_object($order)) {
2660 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefSending");
2661 if (empty($linkedobjects[$objecttype][
'ref_value'])) {
2662 $linkedobjects[$objecttype][
'ref_value'] =
'';
2664 $linkedobjects[$objecttype][
'ref_value'] .=
' / ';
2666 $linkedobjects[$objecttype][
'ref_value'] .= $outputlangs->transnoentities($elementobject->ref);
2667 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
2669 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending");
2670 if (empty($linkedobjects[$objecttype][
'ref_value'])) {
2671 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
'');
2673 $linkedobjects[$objecttype][
'ref_value'] .=
' / '.$outputlangs->transnoentities($elementobject->ref);
2674 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
2680 $object->context[
'DolPublicNoteAppendedGetLinkedObjects'] = 1;
2683 if (is_object($hookmanager)) {
2684 $parameters = array(
'linkedobjects' => $linkedobjects,
'outputlangs' => $outputlangs);
2686 $reshook = $hookmanager->executeHooks(
'pdf_getLinkedObjects', $parameters,
$object, $action);
2687 if (empty($reshook)) {
2688 $linkedobjects = array_replace($linkedobjects, $hookmanager->resArray);
2689 } elseif ($reshook>0) {
2691 $linkedobjects = $hookmanager->resArray;
2695 return $linkedobjects;
2708 $maxheight =
getDolGlobalInt(
'MAIN_DOCUMENTS_WITH_PICTURE_HEIGHT', 32);
2710 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
2714 if ($tmp[
'height']) {
2715 $width = (int) round($maxheight * $tmp[
'width'] / $tmp[
'height']);
2716 if ($width > $maxwidth) {
2718 $height = (int) round($maxwidth * $tmp[
'height'] / $tmp[
'width']);
2720 $height = $maxheight;
2723 return array(
'width' => $width,
'height' => $height);
2737 global $hookmanager;
2743 if (
$object->lines[$i]->special_code == 3) {
2745 return $outputlangs->transnoentities(
"Option");
2747 if (is_object($hookmanager)) {
2748 $special_code =
$object->lines[$i]->special_code;
2749 if (!empty(
$object->lines[$i]->fk_parent_line)) {
2750 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2753 $parameters = array(
2755 'outputlangs' => $outputlangs,
2756 'hidedetails' => $hidedetails,
2757 'special_code' => $special_code
2762 if ($hookmanager->executeHooks(
'getlinetotalremise', $parameters,
$object, $action) > 0) {
2763 if (isset($hookmanager->resArray[
'linetotalremise'])) {
2764 return (
float) $hookmanager->resArray[
'linetotalremise'];
2766 return (
float) $hookmanager->resPrint;
2771 if (empty($hidedetails) || $hidedetails > 1) {
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Class to manage categories.
Class to manage customers orders.
Class to manage absolute discounts.
Class to manage warehouses.
File of class to manage predefined price products or services by customer.
Class to manage predefined suppliers products.
Class to manage products or services.
Manage record for batch number management.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
getState($id, $withcode='0', $dbtouse=null, $withregion=0, $outputlangs=null, $entconv=1)
Return state translated from an id.
getFormeJuridiqueLabel($code)
Return the name translated of juridical status.
dol_print_reduction($reduction, $langs)
Returns formatted reduction.
dol_getDefaultFormat($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.
getDolGlobalFloat($key, $default=0)
Return a Dolibarr global constant float value.
vatrate($rate, $addpercent=false, $info_bits=0, $usestarfornpr=0, $html=0)
Return a string with VAT rate label formatted for view output Used into pdf and HTML pages.
dol_format_address($object, $withcountry=0, $sep="\n", $outputlangs=null, $mode=0, $extralangcode='')
Return a formatted address (part address/zip/town/state) according to country rules.
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_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.
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).
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.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
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...
getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $object=null, $include=null)
Return array of possible common substitutions.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
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)
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
pdf_getSizeForImage($realpath)
Return dimensions to use for images onto PDF checking that width and height are not higher than maxim...
pdf_writelinedesc(&$pdf, $object, $i, $outputlangs, $w, $h, $posx, $posy, $hideref=0, $hidedesc=0, $issupplierline=0, $align='J')
Output line description into PDF.
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_getFormat($outputlangs=null, $mode='setup')
Return array with format properties of default PDF format.
pdf_getPDFFontSize($outputlangs)
Return font size to use for PDF generation.
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_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.
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 information.
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 information 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 formatted for output on PDF documents.
pdf_getlineunit($object, $i, $outputlangs, $hidedetails=0)
Return line unit.
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_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.
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.