41include_once DOL_DOCUMENT_ROOT.
'/core/lib/signature.lib.php';
56 $head[$h][0] = DOL_URL_ROOT.
'/admin/pdf.php';
57 $head[$h][1] = $langs->trans(
"GlobalParameters");
58 $head[$h][2] =
'general';
68 $head[$h][0] = DOL_URL_ROOT.
'/admin/pdf_other.php';
69 $head[$h][1] = $langs->trans(
"SpecificParameters");
70 $head[$h][2] =
'other';
91 dol_syslog(
"pdf_getFormat Get paper format with mode=".$mode.
" MAIN_PDF_FORMAT=".
getDolGlobalString(
'MAIN_PDF_FORMAT').
" outputlangs->defaultlang=".(is_object($outputlangs) ? $outputlangs->defaultlang :
'null').
" and langs->defaultlang=".(is_object($langs) ? $langs->defaultlang :
'null'));
99 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
105 $sql =
"SELECT code, label, width, height, unit FROM ".MAIN_DB_PREFIX.
"c_paper_format";
106 $sql .=
" WHERE code = '".$db->escape($pdfformat).
"'";
107 $resql =
$db->query($sql);
109 $obj =
$db->fetch_object($resql);
111 $width = (int) $obj->width;
112 $height = (int) $obj->height;
118 return array(
'width' => $width,
'height' => $height,
'unit' => $unit);
134 if (!defined(
'K_TCPDF_EXTERNAL_CONFIG')) {
135 define(
'K_TCPDF_EXTERNAL_CONFIG', 1);
136 define(
'K_PATH_CACHE', DOL_DATA_ROOT.
'/admin/temp/');
137 define(
'K_PATH_URL_CACHE', DOL_DATA_ROOT.
'/admin/temp/');
139 define(
'K_BLANK_IMAGE',
'_blank.png');
140 define(
'PDF_PAGE_FORMAT',
'A4');
141 define(
'PDF_PAGE_ORIENTATION',
'P');
142 define(
'PDF_CREATOR',
'TCPDF');
143 define(
'PDF_AUTHOR',
'TCPDF');
144 define(
'PDF_HEADER_TITLE',
'TCPDF Example');
145 define(
'PDF_HEADER_STRING',
"by Dolibarr ERP CRM");
146 define(
'PDF_UNIT',
'mm');
147 define(
'PDF_MARGIN_HEADER', 5);
148 define(
'PDF_MARGIN_FOOTER', 10);
149 define(
'PDF_MARGIN_TOP', 27);
150 define(
'PDF_MARGIN_BOTTOM', 25);
151 define(
'PDF_MARGIN_LEFT', 15);
152 define(
'PDF_MARGIN_RIGHT', 15);
153 define(
'PDF_FONT_NAME_MAIN',
'helvetica');
154 define(
'PDF_FONT_SIZE_MAIN', 10);
155 define(
'PDF_FONT_NAME_DATA',
'helvetica');
156 define(
'PDF_FONT_SIZE_DATA', 8);
157 define(
'PDF_FONT_MONOSPACED',
'courier');
158 define(
'PDF_IMAGE_SCALE_RATIO', 1.25);
159 define(
'HEAD_MAGNIFICATION', 1.1);
160 define(
'K_CELL_HEIGHT_RATIO', 1.25);
161 define(
'K_TITLE_MAGNIFICATION', 1.3);
162 define(
'K_SMALL_RATIO', 2 / 3);
163 define(
'K_THAI_TOPCHARS',
true);
164 define(
'K_TCPDF_CALLS_IN_HTML',
true);
171 define(
'K_TCPDF_THROW_EXCEPTION_ERROR',
true);
173 define(
'K_TCPDF_THROW_EXCEPTION_ERROR',
false);
178 require_once TCPDF_PATH.
'tcpdf.php';
182 require_once TCPDI_PATH.
'tcpdi.php';
193 $pdf =
new TCPDI($pagetype, $metric, $format,
true,
'UTF-8',
false, $pdfa);
195 $pdf =
new TCPDF($pagetype, $metric, $format,
true,
'UTF-8',
false, $pdfa);
228 $pdf->SetProtection($pdfrights, $pdfuserpass, $pdfownerpass, $encstrength, $pubkeys);
242 require_once TCPDF_PATH.
'tcpdf_parser.php';
244 $isencrypted =
false;
246 $content = file_get_contents($pathoffile);
249 @($parser =
new TCPDF_PARSER(ltrim($content)));
250 $tmp = $parser->getParsedData();
252 $data = $tmp[1] ??
null;
256 if (isset($xref[
'trailer'][
'encrypt'])) {
280 if (class_exists(
'TCPDF')) {
281 if ($outputlangs->trans(
'FONTFORPDF') !=
'FONTFORPDF') {
282 $font = $outputlangs->trans(
'FONTFORPDF');
297 if (class_exists(
'TCPDF')) {
298 if ($outputlangs->trans(
'FONTSIZEFORPDF') !=
'FONTSIZEFORPDF') {
299 $size = (int) $outputlangs->trans(
'FONTSIZEFORPDF');
321 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
323 if ($tmp[
'height']) {
324 $width = round($height * $tmp[
'width'] / $tmp[
'height']);
325 if ($width > $maxwidth) {
326 $height = $height * $maxwidth / $width;
345 $pdf->startTransaction();
350 $start_y = $pdf->GetY();
352 $start_page = $pdf->getPage();
354 $pdf->writeHTMLCell(0, 0, 0, $start_y, $htmlcontent, 0, 1,
false,
true,
'J',
true);
356 $end_y = $pdf->GetY();
357 $end_page = $pdf->getPage();
360 if ($end_page == $start_page) {
361 $height = $end_y - $start_y;
363 for ($page = $start_page; $page <= $end_page; ++$page) {
364 $pdf->setPage($page);
365 $tmpm = $pdf->getMargins();
366 $tMargin = $tmpm[
'top'];
367 if ($page == $start_page) {
369 $height = $pdf->getPageHeight() - $start_y - $pdf->getBreakMargin();
370 } elseif ($page == $end_page) {
372 $height = $end_y - $tMargin;
374 $height = $pdf->getPageHeight() - $tMargin - $pdf->getBreakMargin();
379 $pdf->rollbackTransaction(
true);
398 if ($thirdparty instanceof
Societe) {
399 $socname = $thirdparty->name;
400 if (($includealias ||
getDolGlobalInt(
'PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) && !empty($thirdparty->name_alias)) {
402 $socname = $thirdparty->name_alias.
" - ".$thirdparty->name;
404 $socname = $thirdparty->name.
" - ".$thirdparty->name_alias;
407 } elseif ($thirdparty instanceof
Contact) {
408 if ($thirdparty->socid > 0) {
409 $thirdparty->fetch_thirdparty();
410 $socname = $thirdparty->thirdparty->name;
411 if (($includealias ||
getDolGlobalInt(
'PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) && !empty($thirdparty->thirdparty->name_alias)) {
413 $socname = $thirdparty->thirdparty->name_alias.
" - ".$thirdparty->thirdparty->name;
415 $socname = $thirdparty->thirdparty->name.
" - ".$thirdparty->thirdparty->name_alias;
420 throw new InvalidArgumentException(
'Parameter 1 $thirdparty is not a Societe nor Contact');
423 return $outputlangs->convToOutputCharset((
string) $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);
462 $reshook = $hookmanager->executeHooks(
'pdf_build_address', $parameters,
$object, $action);
463 $stringaddress .= $hookmanager->resPrint;
465 if (empty($reshook)) {
466 if ($mode ==
'source') {
468 if (isset($targetcompany->country_code) && !empty($sourcecompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
474 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($fulladdress).
"\n";
479 if ($sourcecompany->phone) {
480 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"PhoneShort").
": ".$outputlangs->convToOutputCharset($sourcecompany->phone);
483 if ($sourcecompany->phone_mobile &&
getDolGlobalString(
'MAIN_PDF_SHOW_SOURCE_PHONE_MOBILE')) {
484 $stringaddress .= ($stringaddress ? ($sourcecompany->phone ?
" - " :
"\n") :
'').$outputlangs->transnoentities(
"PhoneShort").
": ".$outputlangs->convToOutputCharset($sourcecompany->phone_mobile);
487 if ($sourcecompany->fax) {
488 $stringaddress .= ($stringaddress ? ($sourcecompany->phone ?
" - " :
"\n") :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($sourcecompany->fax);
491 if ($sourcecompany->email) {
492 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($sourcecompany->email);
495 if ($sourcecompany->url) {
496 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($sourcecompany->url);
501 if ($sourcecompany->tva_intra) {
502 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($sourcecompany->tva_intra);
507 if (
getDolGlobalString(
'MAIN_PROFID1_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof1)) {
508 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $sourcecompany->country_code);
509 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
512 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof1);
514 if (
getDolGlobalString(
'MAIN_PROFID2_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof2)) {
515 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $sourcecompany->country_code);
516 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
519 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof2);
521 if (
getDolGlobalString(
'MAIN_PROFID3_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof3)) {
522 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $sourcecompany->country_code);
523 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
526 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof3);
528 if (
getDolGlobalString(
'MAIN_PROFID4_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof4)) {
529 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $sourcecompany->country_code);
530 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
533 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof4);
535 if (
getDolGlobalString(
'MAIN_PROFID5_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof5)) {
536 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $sourcecompany->country_code);
537 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
540 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof5);
542 if (
getDolGlobalString(
'MAIN_PROFID6_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof6)) {
543 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $sourcecompany->country_code);
544 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
547 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof6);
550 $stringaddress .= ($stringaddress ?
"\n" :
'') .
getDolGlobalString(
'PDF_ADD_MORE_AFTER_SOURCE_ADDRESS');
554 if ($mode ==
'target' || preg_match(
'/targetwithdetails/', $mode)) {
555 if ($usecontact && (is_object($targetcontact))) {
556 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($targetcontact->getFullName($outputlangs, 1));
558 if (!empty($targetcontact->address)) {
559 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcontact)).
"\n";
560 } elseif (is_object($targetcompany)) {
561 $companytouseforaddress = $targetcompany;
564 if ($targetcontact->socid > 0 && $targetcontact->socid != $targetcompany->id) {
565 $targetcontact->fetch_thirdparty();
566 $companytouseforaddress = $targetcontact->thirdparty;
569 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($companytouseforaddress)).
"\n";
572 if (!empty($targetcontact->country_code) && $targetcontact->country_code != $sourcecompany->country_code) {
573 $stringaddress .= (($stringaddress && !
getDolGlobalString(
'MAIN_PDF_REMOVE_BREAK_BEFORE_COUNTRY')) ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcontact->country_code));
574 } elseif (empty($targetcontact->country_code) && !empty($targetcompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
575 $stringaddress .= (($stringaddress && !
getDolGlobalString(
'MAIN_PDF_REMOVE_BREAK_BEFORE_COUNTRY')) ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
578 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || preg_match(
'/targetwithdetails/', $mode)) {
580 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
581 if (!empty($targetcontact->phone_pro) || !empty($targetcontact->phone_mobile)) {
582 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
584 if (!empty($targetcontact->phone_pro)) {
585 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_pro);
587 if (!empty($targetcontact->phone_pro) && !empty($targetcontact->phone_mobile)) {
588 $stringaddress .=
" / ";
590 if (!empty($targetcontact->phone_mobile)) {
591 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_mobile);
595 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
596 if ($targetcontact->fax) {
597 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcontact->fax);
601 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
602 if ($targetcontact->email) {
603 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcontact->email);
607 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
608 if ($targetcontact->url) {
609 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset((
string) $targetcontact->url);
614 if (is_object($targetcompany)) {
615 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcompany));
617 if (!empty($targetcompany->country_code) && $targetcompany->country_code != $sourcecompany->country_code) {
618 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
620 $stringaddress .= ($stringaddress ?
"\n" :
'');
623 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || preg_match(
'/targetwithdetails/', $mode)) {
625 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
626 if (!empty($targetcompany->phone) || !empty($targetcompany->phone_mobile)) {
627 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
629 if (!empty($targetcompany->phone)) {
630 $stringaddress .= $outputlangs->convToOutputCharset($targetcompany->phone);
632 if (!empty($targetcompany->phone) && !empty($targetcompany->phone_mobile)) {
633 $stringaddress .=
" / ";
635 if (!empty($targetcompany->phone_mobile)) {
636 $stringaddress .= $outputlangs->convToOutputCharset($targetcompany->phone_mobile);
640 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
641 if ($targetcompany->fax) {
642 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcompany->fax);
646 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
647 if ($targetcompany->email) {
648 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcompany->email);
652 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
653 if ($targetcompany->url) {
654 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($targetcompany->url);
663 if ($usecontact && is_object($targetcontact) &&
getDolGlobalInt(
'MAIN_USE_COMPANY_NAME_OF_CONTACT')) {
664 $targetcontact->fetch_thirdparty();
665 if (!empty($targetcontact->thirdparty->id) && $targetcontact->thirdparty->tva_intra) {
666 $stringaddress .= ($stringaddress ?
"\n" :
'') . $outputlangs->transnoentities(
"VATIntraShort") .
': ' . $outputlangs->convToOutputCharset($targetcontact->thirdparty->tva_intra);
668 } elseif (!empty($targetcompany->tva_intra)) {
669 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($targetcompany->tva_intra);
674 if (
getDolGlobalString(
'MAIN_LEGALFORM_IN_ADDRESS') && !empty($targetcompany->forme_juridique_code)) {
676 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp;
680 if (
getDolGlobalString(
'MAIN_PROFID1_IN_ADDRESS') && !empty($targetcompany->idprof1)) {
681 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $targetcompany->country_code);
682 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
685 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof1);
687 if (
getDolGlobalString(
'MAIN_PROFID2_IN_ADDRESS') && !empty($targetcompany->idprof2)) {
688 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $targetcompany->country_code);
689 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
692 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof2);
694 if (
getDolGlobalString(
'MAIN_PROFID3_IN_ADDRESS') && !empty($targetcompany->idprof3)) {
695 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $targetcompany->country_code);
696 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
699 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof3);
701 if (
getDolGlobalString(
'MAIN_PROFID4_IN_ADDRESS') && !empty($targetcompany->idprof4)) {
702 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $targetcompany->country_code);
703 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
706 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof4);
708 if (
getDolGlobalString(
'MAIN_PROFID5_IN_ADDRESS') && !empty($targetcompany->idprof5)) {
709 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $targetcompany->country_code);
710 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
713 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof5);
715 if (
getDolGlobalString(
'MAIN_PROFID6_IN_ADDRESS') && !empty($targetcompany->idprof6)) {
716 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $targetcompany->country_code);
717 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
720 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof6);
725 if ($mode ==
'source' && !empty($sourcecompany->note_public)) {
726 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($sourcecompany->note_public);
728 if (($mode ==
'target' || preg_match(
'/targetwithdetails/', $mode)) && !empty($targetcompany->note_public)) {
729 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($targetcompany->note_public);
735 return $stringaddress;
754 if (file_exists($filepath)) {
755 $pdf->setAutoPageBreak(
false, 0);
764 $pdf->setAutoPageBreak(
true, 0);
788 include_once DOL_DOCUMENT_ROOT.
'/blockedlog/lib/blockedlog.lib.php';
810function pdfWriteVATArray($docgenerator, &$index, $pdf, $outputlangs, $outputlangsbis,
$object, $col1x, $col2x, $largcol2, $tab2_top, $tab2_hl)
814 $tmpatleastoneratenotnull = 0;
817 foreach ($docgenerator->localtax1 as $localtax_type => $localtax_rate) {
818 if (in_array((
string) $localtax_type, array(
'1',
'3',
'5'))) {
822 foreach ($localtax_rate as $tvakey => $tvaval) {
827 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
830 if (preg_match(
'/\*/', (
string) $tvakey)) {
831 $tvakey = str_replace(
'*',
'', (
string) $tvakey);
832 $tvacompl =
" (".$outputlangs->transnoentities(
"NonPercuRecuperable").
")";
835 $totalvat = $outputlangs->transcountrynoentities(
"TotalLT1",
$mysoc->country_code).(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transcountrynoentities(
"TotalLT1",
$mysoc->country_code) :
'');
839 $totalvat .= $tvacompl;
841 $totalvat .=
vatrate((
string) abs((
float) $tvakey),
true).$tvacompl;
844 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $totalvat, 0,
'L',
true);
848 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
849 $pdf->MultiCell($largcol2, $tab2_hl,
price($total_localtax, 0, $outputlangs), 0,
'R',
true);
855 foreach ($docgenerator->localtax2 as $localtax_type => $localtax_rate) {
856 if (in_array((
string) $localtax_type, array(
'1',
'3',
'5'))) {
860 foreach ($localtax_rate as $tvakey => $tvaval) {
865 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
868 if (preg_match(
'/\*/', (
string) $tvakey)) {
869 $tvakey = str_replace(
'*',
'', (
string) $tvakey);
870 $tvacompl =
" (".$outputlangs->transnoentities(
"NonPercuRecuperable").
")";
872 $totalvat = $outputlangs->transcountrynoentities(
"TotalLT2",
$mysoc->country_code).(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transcountrynoentities(
"TotalLT2",
$mysoc->country_code) :
'');
876 $totalvat .= $tvacompl;
878 $totalvat .=
vatrate((
string) abs((
float) $tvakey),
true).$tvacompl;
881 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $totalvat, 0,
'L',
true);
885 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
886 $pdf->MultiCell($largcol2, $tab2_hl,
price($total_localtax, 0, $outputlangs), 0,
'R',
true);
894 foreach ($docgenerator->tva as $tvakey => $tvaval) {
895 $sum_pdf_tva += $tvaval;
898 if ($sum_pdf_tva !=
$object->total_tva) {
899 if (!empty($sum_pdf_tva)) {
900 $coef_fix_tva =
$object->total_tva / $sum_pdf_tva;
906 foreach ($docgenerator->tva as $tvakey => $tvaval) {
907 $docgenerator->tva[$tvakey] = $tvaval * $coef_fix_tva;
909 foreach ($docgenerator->tva_array as $tvakey => $tvaval) {
910 $docgenerator->tva_array[$tvakey][
'amount'] = $tvaval[
'amount'] * $coef_fix_tva;
917 foreach ($docgenerator->tva_array as $tvakey => $tvaval) {
919 $tmpatleastoneratenotnull++;
922 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
925 if (preg_match(
'/\*/', $tvakey)) {
926 $tvakey = str_replace(
'*',
'', $tvakey);
927 $tvacompl =
" (".$outputlangs->transnoentities(
"NonPercuRecuperable").
")";
929 $totalvat = $outputlangs->transcountrynoentities(
"TotalVAT",
$mysoc->country_code).(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transcountrynoentities(
"TotalVAT",
$mysoc->country_code) :
'');
932 $totalvat .=
vatrate((
string) $tvaval[
'vatrate'],
true).$tvacompl;
934 $totalvat .= $tvaval[
'vatcode'].$tvacompl;
936 $totalvat .= $tvacompl;
938 $totalvat .=
vatrate((
string) $tvaval[
'vatrate'],
true).($tvaval[
'vatcode'] ?
' ('.$tvaval[
'vatcode'].
')' :
'').$tvacompl;
941 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $totalvat, 0,
'L',
true);
943 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
945 $pdf->MultiCell($largcol2, $tab2_hl,
price(
price2num($tvaval[
'amount'],
'MT'), 0, $outputlangs), 0,
'R',
true);
951 foreach ($docgenerator->localtax1 as $localtax_type => $localtax_rate) {
952 if (in_array((
string) $localtax_type, array(
'2',
'4',
'6'))) {
956 foreach ($localtax_rate as $tvakey => $tvaval) {
961 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
964 if (preg_match(
'/\*/', (
string) $tvakey)) {
965 $tvakey = str_replace(
'*',
'', (
string) $tvakey);
966 $tvacompl =
" (".$outputlangs->transnoentities(
"NonPercuRecuperable").
")";
968 $totalvat = $outputlangs->transcountrynoentities(
"TotalLT1",
$mysoc->country_code).(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transcountrynoentities(
"TotalLT1",
$mysoc->country_code) :
'');
972 $totalvat .= $tvacompl;
974 $totalvat .=
vatrate((
string) abs((
float) $tvakey),
true).$tvacompl;
977 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $totalvat, 0,
'L',
true);
981 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
982 $pdf->MultiCell($largcol2, $tab2_hl,
price($total_localtax, 0, $outputlangs), 0,
'R',
true);
988 foreach ($docgenerator->localtax2 as $localtax_type => $localtax_rate) {
989 if (in_array((
string) $localtax_type, array(
'2',
'4',
'6'))) {
993 foreach ($localtax_rate as $tvakey => $tvaval) {
999 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
1002 if (preg_match(
'/\*/', (
string) $tvakey)) {
1003 $tvakey = str_replace(
'*',
'', (
string) $tvakey);
1004 $tvacompl =
" (".$outputlangs->transnoentities(
"NonPercuRecuperable").
")";
1006 $totalvat = $outputlangs->transcountrynoentities(
"TotalLT2",
$mysoc->country_code).(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transcountrynoentities(
"TotalLT2",
$mysoc->country_code) :
'');
1010 $totalvat .= $tvacompl;
1012 $totalvat .=
vatrate((
string) abs((
float) $tvakey),
true).$tvacompl;
1015 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $totalvat, 0,
'L',
true);
1019 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
1020 $pdf->MultiCell($largcol2, $tab2_hl,
price($total_localtax, 0, $outputlangs), 0,
'R',
true);
1025 $docgenerator->atleastoneratenotnull = $tmpatleastoneratenotnull;
1050function pdfWriteAlreadyPaid($docgenerator, &$index, $pdf, $outputlangs, $outputlangsbis,
$object, $col1x, $col2x, $largcol2, $tab2_top, $tab2_hl, $deja_regle, $creditnoteamount, $depositsamount, $resteapayer, $resteapayer_origin)
1056 if ((($deja_regle > 0 || $creditnoteamount > 0 || $depositsamount > 0) && !
getDolGlobalString(
'INVOICE_NO_PAYMENT_DETAILS'))
1060 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
1061 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $outputlangs->transnoentities(
"Paid").(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transnoentities(
"Paid") :
''), 0,
'L',
false);
1062 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
1064 $pdf->MultiCell($largcol2, $tab2_hl,
price($deja_regle + $depositsamount, 0, $outputlangs), 0,
'R',
false);
1077 if ($creditnoteamount) {
1078 $labeltouse = ($outputlangs->transnoentities(
"CreditNotesOrExcessReceived") !=
"CreditNotesOrExcessReceived") ? $outputlangs->transnoentities(
"CreditNotesOrExcessReceived") : $outputlangs->transnoentities(
"CreditNotes");
1079 $labeltouse .= (is_object($outputlangsbis) ? (
' / '.(($outputlangsbis->transnoentities(
"CreditNotesOrExcessReceived") !=
"CreditNotesOrExcessReceived") ? $outputlangsbis->transnoentities(
"CreditNotesOrExcessReceived") : $outputlangsbis->transnoentities(
"CreditNotes"))) :
'');
1081 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
1082 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $labeltouse, 0,
'L',
false);
1083 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
1084 $pdf->MultiCell($largcol2, $tab2_hl,
price($creditnoteamount, 0, $outputlangs), 0,
'R',
false);
1087 if (
$object->close_code == Facture::CLOSECODE_DISCOUNTVAT) {
1089 $pdf->SetFillColor(255, 255, 255);
1091 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
1092 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $outputlangs->transnoentities(
"EscompteOfferedShort").(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transnoentities(
"EscompteOfferedShort") :
''), $useborder,
'L',
true);
1093 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
1094 $pdf->MultiCell($largcol2, $tab2_hl,
price(
price2num(
$object->total_ttc - $deja_regle - $creditnoteamount - $depositsamount,
'MT'), 0, $outputlangs), $useborder,
'R',
true);
1097 $resteapayer_origin = 0;
1101 $pdf->SetTextColor(0, 0, 60);
1102 $pdf->SetFillColor(224, 224, 224);
1103 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
1104 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $outputlangs->transnoentities(
"RemainderToPay").(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transnoentities(
"RemainderToPay") :
''), $useborder,
'L',
true);
1105 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
1107 $pdf->MultiCell($largcol2, $tab2_hl,
price($resteapayer, 0, $outputlangs), $useborder,
'R',
true);
1109 $pdf->MultiCell($largcol2, $tab2_hl,
price($resteapayer, 0, $outputlangs), $useborder,
'R',
true);
1113 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
1114 $pdf->SetTextColor(0, 0, 60);
1115 $pdf->SetFillColor(224, 224, 224);
1116 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $outputlangs->transnoentities(
"RemainderToPay").(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transnoentities(
"RemainderToPay") :
'').
' ('.$outputlangs->getCurrencySymbol(
$mysoc->currency_code).
')', $useborder,
'L',
true);
1118 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
1119 $pdf->MultiCell($largcol2, $tab2_hl,
price($resteapayer_origin, 0, $outputlangs, 1, -1, -1,
$mysoc->currency_code), $useborder,
'L',
true);
1137 $substitutionarray = getCommonSubstitutionArray($outputlangs, $onlykey, $exclude,
$object, $include);
1138 $substitutionarray[
'__FROM_NAME__'] =
'__FROM_NAME__';
1139 $substitutionarray[
'__FROM_EMAIL__'] =
'__FROM_EMAIL__';
1140 return $substitutionarray;
1158 if ($unit ==
'pt') {
1160 } elseif ($unit ==
'mm') {
1162 } elseif ($unit ==
'cm') {
1164 } elseif ($unit ==
'in') {
1168 dol_print_error(
null,
'Unexpected unit "'.$unit.
'" for pdf_watermark');
1175 $text = $outputlangs->convToOutputCharset($text);
1177 $savx = $pdf->getX();
1178 $savy = $pdf->getY();
1180 $watermark_angle = atan($h / $w) / 2;
1181 $watermark_x_pos = 0;
1182 $watermark_y_pos = $h / 3;
1183 $watermark_x = $w / 2;
1184 $watermark_y = $h / 3;
1185 $pdf->SetFont(
'',
'B', 40);
1186 $pdf->SetTextColor(255, 0, 0);
1189 $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));
1191 $pdf->SetAlpha(0.5);
1192 $pdf->SetXY($watermark_x_pos, $watermark_y_pos);
1195 $pdf->SetAlpha(0.3);
1196 $pdf->Cell($w - 20, 25, $outputlangs->convToOutputCharset($text),
"", 2,
"C",
false);
1201 $pdf->SetXY($savx, $savy);
1219function pdfCertifMention($pdf, $outputlangs, $seller, $default_font_size, &$posy, $pdftemplate)
1221 include_once DOL_DOCUMENT_ROOT.
'/blockedlog/lib/blockedlog.lib.php';
1239function pdf_bank($pdf, $outputlangs, $curx, $cury, $account, $onlynumber = 0, $default_font_size = 10)
1241 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formbank.class.php';
1245 $pdf->SetXY($curx, $cury);
1247 if (empty($onlynumber)) {
1248 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizetitle);
1249 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
'PaymentByTransferOnThisBankAccount').
':', 0,
'L',
false);
1253 $outputlangs->load(
"banks");
1256 $bickey =
"BICNumber";
1257 if ($account->getCountryCode() ==
'IN') {
1262 $usedetailedbban = $account->useDetailedBBAN();
1265 if ($usedetailedbban) {
1268 if (empty($onlynumber)) {
1269 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
1270 $pdf->SetXY($curx, $cury);
1271 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L',
false);
1281 if (empty($onlynumber)) {
1282 $pdf->line($curx + 1, $cury + 1, $curx + 1, $cury + 6);
1285 $bank_number_length = 0;
1286 foreach ($account->getFieldsToShow() as $val) {
1287 $pdf->SetXY($curx, $cury + 4);
1288 $pdf->SetFont(
'',
'', $default_font_size - 3);
1290 if ($val ==
'BankCode') {
1293 $content = $account->code_banque;
1294 } elseif ($val ==
'DeskCode') {
1297 $content = $account->code_guichet;
1298 } elseif ($val ==
'BankAccountNumber') {
1301 $content = $account->number;
1302 } elseif ($val ==
'BankAccountNumberKey') {
1305 $content = $account->cle_rib;
1306 } elseif ($val ==
'IBAN' || $val ==
'BIC') {
1311 dol_print_error($account->db,
'Unexpected value for getFieldsToShow: '.$val);
1315 if ($content ==
'') {
1319 $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($content), 0,
'C',
false);
1320 $pdf->SetXY($curx, $cury + 1);
1321 $curx += $tmplength;
1322 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
1323 $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities($val), 0,
'C',
false);
1324 if (empty($onlynumber)) {
1325 $pdf->line($curx, $cury + 1, $curx, $cury + 7);
1329 $bank_number_length = 8;
1333 $cury += $bank_number_length;
1335 } elseif (!empty($account->number)) {
1336 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
1337 $pdf->SetXY($curx, $cury);
1338 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L',
false);
1341 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
1342 $pdf->SetXY($curx, $cury);
1343 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"BankAccountNumber").
': '.$outputlangs->convToOutputCharset($account->number), 0,
'L',
false);
1346 if ($diffsizecontent <= 2) {
1351 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
1353 if (empty($onlynumber) && !empty($account->address)) {
1354 $pdf->SetXY($curx, $cury);
1355 $val = $outputlangs->transnoentities(
"Residence").
': '.$outputlangs->convToOutputCharset($account->address);
1356 $pdf->MultiCell(100, 3, $val, 0,
'L',
false);
1359 $tmpy = $pdf->getStringHeight(100, $val);
1363 if (!empty($account->owner_name)) {
1364 $pdf->SetXY($curx, $cury);
1365 $val = $outputlangs->transnoentities(
"BankAccountOwner").
': '.$outputlangs->convToOutputCharset($account->owner_name);
1366 $pdf->MultiCell(100, 3, $val, 0,
'L',
false);
1367 $tmpy = $pdf->getStringHeight(100, $val);
1369 } elseif (!$usedetailedbban) {
1376 if (!empty($account->iban)) {
1378 $ibanDisplay_temp = str_replace(
' ',
'', $outputlangs->convToOutputCharset($account->iban));
1381 $nbIbanDisplay_temp =
dol_strlen($ibanDisplay_temp);
1382 for ($i = 0; $i < $nbIbanDisplay_temp; $i++) {
1383 $ibanDisplay .= $ibanDisplay_temp[$i];
1384 if ($i % 4 == 3 && $i > 0) {
1385 $ibanDisplay .=
" ";
1389 $pdf->SetFont(
'',
'B', $default_font_size - 3);
1390 $pdf->SetXY($curx, $cury);
1391 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($ibankey).
': '.$ibanDisplay, 0,
'L',
false);
1395 if (!empty($account->bic)) {
1396 $pdf->SetFont(
'',
'B', $default_font_size - 3);
1397 $pdf->SetXY($curx, $cury);
1398 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($bickey).
': '.$outputlangs->convToOutputCharset($account->bic), 0,
'L',
false);
1401 return $pdf->getY();
1421function pdf_pagefoot($pdf, $outputlangs, $paramfreetext, $fromcompany, $marge_basse, $marge_gauche, $page_hauteur,
$object, $showdetails = 0, $hidefreetext = 0, $page_largeur = 0, $watermark =
'')
1423 global
$conf, $hookmanager;
1425 $outputlangs->load(
"dict");
1428 $marginwithfooter = 0;
1430 $dims = $pdf->getPageDimensions();
1436 if (is_object($fromcompany)) {
1437 $substitutionarray[
'__FROM_NAME__'] = $fromcompany->name;
1438 $substitutionarray[
'__FROM_EMAIL__'] = $fromcompany->email;
1447 $newfreetext = preg_replace(
'/(<img.*src=")[^\"]*viewimage\.php[^\"]*modulepart=medias[^\"]*file=([^\"]*)("[^\/]*\/>)/',
'\1file:/'.DOL_DATA_ROOT.
'/medias/\2\3', $newfreetext);
1449 $line .= $outputlangs->convToOutputCharset($newfreetext);
1458 if (is_object($fromcompany) && in_array($showdetails, array(1, 3))) {
1460 if ($fromcompany->name) {
1461 $line1 .= ($line1 ?
" - " :
"").$outputlangs->transnoentities(
"RegisteredOffice").
": ".$fromcompany->name;
1464 if ($fromcompany->address) {
1465 $line1 .= ($line1 ?
" - " :
"").str_replace(
"\n",
", ", $fromcompany->address);
1468 if ($fromcompany->zip) {
1469 $line1 .= ($line1 ?
" - " :
"").$fromcompany->zip;
1472 if ($fromcompany->town) {
1473 $line1 .= ($line1 ?
" " :
"").$fromcompany->town;
1476 if ($fromcompany->country) {
1477 $line1 .= ($line1 ?
", " :
"").$fromcompany->country;
1480 if ($fromcompany->phone) {
1481 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Phone").
": ".$fromcompany->phone;
1484 if ($fromcompany->fax) {
1485 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Fax").
": ".$fromcompany->fax;
1489 if ($fromcompany->url) {
1490 $line2 .= ($line2 ?
" - " :
"").$fromcompany->url;
1493 if ($fromcompany->email) {
1494 $line2 .= ($line2 ?
" - " :
"").$fromcompany->email;
1497 if ($showdetails == 2 || $showdetails == 3 || (!empty($fromcompany->country_code) && $fromcompany->country_code ==
'DE')) {
1499 if ($fromcompany->managers) {
1500 $line2 .= ($line2 ?
" - " :
"").$fromcompany->managers;
1506 if (!empty($fromcompany->forme_juridique_code)) {
1507 $line3 .= ($line3 ?
" - " :
"").$outputlangs->convToOutputCharset(
getFormeJuridiqueLabel((
string) $fromcompany->forme_juridique_code));
1510 if (!empty($fromcompany->capital)) {
1511 $tmpamounttoshow =
price2num($fromcompany->capital);
1512 if (is_numeric($tmpamounttoshow) && $tmpamounttoshow > 0) {
1513 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf",
price($tmpamounttoshow, 0, $outputlangs, 0, 0, 0,
getDolCurrency()));
1514 } elseif (!empty($fromcompany->capital)) {
1515 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf", (
string) $fromcompany->capital);
1519 if (!empty($fromcompany->idprof1) && ($fromcompany->country_code !=
'FR' || (empty($fromcompany->idprof2) || strpos($fromcompany->idprof2, $fromcompany->idprof1) !== 0))) {
1520 $field = $outputlangs->transcountrynoentities(
"ProfId1", $fromcompany->country_code);
1521 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1524 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof1);
1527 if (!empty($fromcompany->idprof2)) {
1528 $field = $outputlangs->transcountrynoentities(
"ProfId2", $fromcompany->country_code);
1529 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1532 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof2);
1537 if (!empty($fromcompany->idprof3)) {
1538 $field = $outputlangs->transcountrynoentities(
"ProfId3", $fromcompany->country_code);
1539 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1542 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof3);
1545 if (!empty($fromcompany->idprof4)) {
1546 $field = $outputlangs->transcountrynoentities(
"ProfId4", $fromcompany->country_code);
1547 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1550 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof4);
1553 if (!empty($fromcompany->idprof5)) {
1554 $field = $outputlangs->transcountrynoentities(
"ProfId5", $fromcompany->country_code);
1555 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1558 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof5);
1561 if (!empty($fromcompany->idprof6)) {
1562 $field = $outputlangs->transcountrynoentities(
"ProfId6", $fromcompany->country_code);
1563 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1566 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof6);
1569 if (!empty($fromcompany->idprof7)) {
1570 $field = $outputlangs->transcountrynoentities(
"ProfId7", $fromcompany->country_code);
1571 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1574 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof7);
1577 if (!empty($fromcompany->idprof8)) {
1578 $field = $outputlangs->transcountrynoentities(
"ProfId8", $fromcompany->country_code);
1579 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1582 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof8);
1585 if (!empty($fromcompany->idprof9)) {
1586 $field = $outputlangs->transcountrynoentities(
"ProfId9", $fromcompany->country_code);
1587 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1590 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof9);
1593 if (!empty($fromcompany->idprof10)) {
1594 $field = $outputlangs->transcountrynoentities(
"ProfId10", $fromcompany->country_code);
1595 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1598 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof10);
1601 if (!empty($fromcompany->tva_intra) && $fromcompany->tva_intra !=
'') {
1602 $line4 .= ($line4 ?
" - " :
"").$outputlangs->transnoentities(
"VATIntraShort").
": ".$outputlangs->convToOutputCharset($fromcompany->tva_intra);
1605 $pdf->SetFont(
'',
'', 7);
1606 $pdf->SetDrawColor(224, 224, 224);
1613 $pdf->SetTextColor($r, $g, $b);
1617 $freetextheight = 0;
1628 $freetextheight = $pdf->getStringHeight($width, $line);
1637 if (is_object($hookmanager)) {
1638 $parameters = array(
'line1' => $line1,
'line2' => $line2,
'line3' => $line3,
'line4' => $line4,
'outputlangs' => $outputlangs);
1640 $hookmanager->executeHooks(
'pdf_pagefoot', $parameters,
$object, $action);
1641 if (!empty($hookmanager->resPrint) && $hidefreetext == 0) {
1642 $mycustomfooter = $hookmanager->resPrint;
1645 $marginwithfooter = $marge_basse + $freetextheight + $mycustomfooterheight;
1646 $posy = (float) $marginwithfooter;
1654 $pdf->setAutoPageBreak(
false, 0);
1655 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F', array(), $fill_color = array($r, $g, $b));
1656 $pdf->setAutoPageBreak(
true, 0);
1660 $pdf->setAutoPageBreak(
false, 0);
1663 $pdf->SetXY($dims[
'lm'], -$posy);
1665 $pdf->MultiCell(0, 3, $line, 0, $align,
false);
1667 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1669 $posy -= $freetextheight;
1672 $pdf->setAutoPageBreak(
true, 0);
1679 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1690 $pdf->setAutoPageBreak(
false, 0);
1692 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $mycustomfooterheight, $dims[
'lm'], $dims[
'hk'] - $posy,
dol_htmlentitiesbr($mycustomfooter, 1,
'UTF-8', 0));
1694 $pdf->setAutoPageBreak(
true, 0);
1697 $posy -= $mycustomfooterheight - 3;
1700 $marginwithfooter = $marge_basse + $freetextheight + (!empty($line1) ? 3 : 0) + (!empty($line2) ? 3 : 0) + (!empty($line3) ? 3 : 0) + (!empty($line4) ? 3 : 0);
1701 $posy = (float) $marginwithfooter;
1709 $pdf->setAutoPageBreak(
false, 0);
1710 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F', array(), $fill_color = array($r, $g, $b));
1711 $pdf->setAutoPageBreak(
true, 0);
1715 $pdf->setAutoPageBreak(
false, 0);
1718 $pdf->SetXY($dims[
'lm'], -$posy);
1720 $pdf->MultiCell(0, 3, $line, 0, $align,
false);
1722 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1724 $posy -= $freetextheight;
1727 $pdf->setAutoPageBreak(
true, 0);
1736 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1746 if (!empty($line1)) {
1747 $pdf->SetFont(
'',
'B', 7);
1748 $pdf->SetXY($dims[
'lm'], -$posy);
1749 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line1, 0,
'C',
false);
1751 $pdf->SetFont(
'',
'', 7);
1754 if (!empty($line2)) {
1755 $pdf->SetFont(
'',
'B', 7);
1756 $pdf->SetXY($dims[
'lm'], -$posy);
1757 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line2, 0,
'C',
false);
1759 $pdf->SetFont(
'',
'', 7);
1762 if (!empty($line3)) {
1763 $pdf->SetXY($dims[
'lm'], -$posy);
1764 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line3, 0,
'C',
false);
1767 if (!empty($line4)) {
1769 $pdf->SetXY($dims[
'lm'], -$posy);
1770 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line4, 0,
'C',
false);
1777 $pdf->SetXY($dims[
'wk'] - $dims[
'rm'] - 18 -
getDolGlobalInt(
'PDF_FOOTER_PAGE_NUMBER_X', 0), -$posy -
getDolGlobalInt(
'PDF_FOOTER_PAGE_NUMBER_Y', 0));
1779 $pagination = $pdf->PageNo().
' / '.$pdf->getAliasNbPages();
1780 $fontRenderCorrection = 0;
1781 if (in_array(
pdf_getPDFFont($outputlangs), array(
'freemono',
'DejaVuSans'))) {
1782 $fontRenderCorrection = 10;
1784 $pdf->MultiCell(18 + $fontRenderCorrection, 2, $pagination, 0,
'R',
false);
1787 if (!empty($watermark)) {
1788 pdf_watermark($pdf, $outputlangs, $page_hauteur, $page_largeur,
'mm', $watermark);
1791 return $marginwithfooter;
1810 $linkedobjects = pdf_getLinkedObjects(
$object, $outputlangs);
1812 if (!empty($linkedobjects)) {
1813 foreach ($linkedobjects as $linkedobject) {
1814 $reftoshow = $linkedobject[
"ref_title"].
' : '.$linkedobject[
"ref_value"];
1815 if (!empty($linkedobject[
"date_value"])) {
1816 $reftoshow .=
' / '.$linkedobject[
"date_value"];
1820 $pdf->SetXY($posx, $posy);
1821 $pdf->SetFont(
'',
'', (
float) $default_font_size - 2);
1822 $pdf->MultiCell($w, $h, $reftoshow,
'', $align);
1826 return $pdf->getY();
1846function pdf_writelinedesc($pdf,
$object, $i, $outputlangs, $w, $h, $posx, $posy, $hideref = 0, $hidedesc = 0, $issupplierline = 0, $align =
'J')
1848 global $hookmanager;
1853 if (is_object($hookmanager)) {
1854 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1855 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1856 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1858 $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);
1862 $reshook = $hookmanager->executeHooks(
'pdf_writelinedesc', $parameters,
$object, $action);
1864 if (!empty($hookmanager->resPrint)) {
1865 $result .= $hookmanager->resPrint;
1868 if (empty($reshook)) {
1870 $labelproductservice = preg_replace(
'/(<img[^>]*src=")[^\"]*viewimage\.php[^\"]*modulepart=medias[^\"]*file=([^\"]*)/',
'\1file:/'.DOL_DATA_ROOT.
'/medias/\2\3', $labelproductservice, -1, $nbrep);
1877 $labelproductservice = preg_replace(
'/(<img[^>]*src=")([^"]*)(&)([^"]*")/',
'\1\2&\4', $labelproductservice, -1, $nbrep);
1880 $pdf->setListIndentWidth(5);
1881 $TMarginList = [
'ul' => [[
'h' => 0.1, ],[
'h' => 0.1, ]],
'li' => [[
'h' => 0.1, ],],];
1882 $pdf->setHtmlVSpace($TMarginList);
1886 $pdf->writeHTMLCell($w, $h, $posx, $posy, $outputlangs->convToOutputCharset($labelproductservice), 0, 1,
false,
true, $align,
true);
1887 $result .= $labelproductservice;
1907 $idprod = (!empty(
$object->lines[$i]->fk_product) ?
$object->lines[$i]->fk_product :
false);
1908 $label = (!empty(
$object->lines[$i]->label) ?
$object->lines[$i]->label : (!empty(
$object->lines[$i]->product_label) ?
$object->lines[$i]->product_label :
''));
1909 $product_barcode = (!empty(
$object->lines[$i]->product_barcode) ?
$object->lines[$i]->product_barcode :
"");
1910 $desc = (!empty(
$object->lines[$i]->desc) ?
$object->lines[$i]->desc : (!empty(
$object->lines[$i]->description) ?
$object->lines[$i]->description :
''));
1911 $ref_supplier = (!empty(
$object->lines[$i]->ref_supplier) ?
$object->lines[$i]->ref_supplier : (!empty(
$object->lines[$i]->ref_fourn) ?
$object->lines[$i]->ref_fourn :
''));
1912 $note = (!empty(
$object->lines[$i]->note) ?
$object->lines[$i]->note :
'');
1913 $dbatch = (!empty(
$object->lines[$i]->detail_batch) ?
$object->lines[$i]->detail_batch :
false);
1917 if ($issupplierline) {
1918 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
1921 include_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
1925 include_once DOL_DOCUMENT_ROOT .
'/product/class/productcustomerprice.class.php';
1930 $idprod = (!empty(
$object->lines[$i]->fk_product) ?
$object->lines[$i]->fk_product :
false);
1932 $prodser->fetch($idprod);
1934 if ($multilangsactive) {
1935 $prodser->getMultiLangs();
1936 $object->lines[$i]->multilangs = $prodser->multilangs;
1940 if (!empty(
$object->lines[$i]->label)) {
1941 $label =
$object->lines[$i]->label;
1943 if (!empty(
$object->lines[$i]->multilangs[$outputlangs->defaultlang][
'label']) && $multilangsactive) {
1944 $label =
$object->lines[$i]->multilangs[$outputlangs->defaultlang][
'label'];
1946 if (!empty(
$object->lines[$i]->product_label)) {
1947 $label =
$object->lines[$i]->product_label;
1954 if (!empty(
$object->lines[$i]->desc)) {
1955 $desc =
$object->lines[$i]->desc;
1957 if (!empty(
$object->lines[$i]->multilangs[$outputlangs->defaultlang][
'description']) && $multilangsactive) {
1958 $desc =
$object->lines[$i]->multilangs[$outputlangs->defaultlang][
'description'];
1960 if (!empty(
$object->lines[$i]->description)) {
1961 $desc =
$object->lines[$i]->description;
1968 $ref_supplier = (!empty(
$object->lines[$i]->ref_supplier) ?
$object->lines[$i]->ref_supplier : (!empty(
$object->lines[$i]->ref_fourn) ?
$object->lines[$i]->ref_fourn :
''));
1970 $note = (!empty(
$object->lines[$i]->note) ?
$object->lines[$i]->note :
'');
1972 $dbatch = (!empty(
$object->lines[$i]->detail_batch) ?
$object->lines[$i]->detail_batch :
false);
1976 if ($multilangsactive && ($outputlangs->defaultlang != $langs->defaultlang)) {
1977 $translatealsoifmodified =
getDolGlobalString(
'MAIN_MULTILANG_TRANSLATE_EVEN_IF_MODIFIED');
1985 $textwasnotmodified = ($label == $prodser->label);
1986 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"label"]) && ($textwasnotmodified || $translatealsoifmodified)) {
1987 $label = $prodser->multilangs[$outputlangs->defaultlang][
"label"];
1992 $textwasnotmodified =
false;
1996 $textwasnotmodified = ($desc == $prodser->description);
1998 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"description"])) {
1999 if ($textwasnotmodified) {
2000 $desc = str_replace($prodser->description, $prodser->multilangs[$outputlangs->defaultlang][
"description"], $desc);
2001 } elseif ($translatealsoifmodified) {
2002 $desc = $prodser->multilangs[$outputlangs->defaultlang][
"description"];
2007 $textwasnotmodified = ($note == $prodser->note_public);
2008 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"other"]) && ($textwasnotmodified || $translatealsoifmodified)) {
2009 $note = $prodser->multilangs[$outputlangs->defaultlang][
"other"];
2012 } elseif ((
$object->element ==
'facture' ||
$object->element ==
'facturefourn') && preg_match(
'/^\(DEPOSIT\).+/', $desc)) {
2013 $desc = str_replace(
'(DEPOSIT)', $outputlangs->trans(
'Deposit'), $desc);
2016 $libelleproduitservice =
'';
2019 $libelleproduitservice = $label;
2020 if (!empty($libelleproduitservice) &&
getDolGlobalString(
'PDF_BOLD_PRODUCT_LABEL')) {
2024 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
2026 $libelleproduitservice =
'<b>'.$libelleproduitservice.
'</b>';
2033 $prodser->get_sousproduits_arbo();
2034 if (!empty($prodser->sousprods) && is_array($prodser->sousprods) && count($prodser->sousprods)) {
2035 $outputlangs->load(
'mrp');
2036 $tmparrayofsubproducts = reset($prodser->sousprods);
2039 if (isset(
$object->lines[$i]->qty) && !empty(
$object->lines[$i]->qty)) {
2040 $qtyText =
$object->lines[$i]->qty;
2041 } elseif (isset(
$object->lines[$i]->qty_shipped) && !empty(
$object->lines[$i]->qty_shipped)) {
2042 $qtyText =
$object->lines[$i]->qty;
2046 foreach ($tmparrayofsubproducts as $subprodval) {
2050 $outputlangs->trans(
'Qty').
':'.$qtyText.
' x '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1].
'= '.$outputlangs->trans(
'QtyTot').
':'.$subprodval[1] * $qtyText :
2051 $outputlangs->trans(
'Qty').
' '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1])
2055 foreach ($tmparrayofsubproducts as $subprodval) {
2057 dol_concatdesc($libelleproduitservice,
" * ".$subprodval[5].(($subprodval[5] && $subprodval[3]) ?
' - ' :
'').$subprodval[3]),
2059 $outputlangs->trans(
'Qty').
':'.$qtyText.
' x '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1].
'= '.$outputlangs->trans(
'QtyTot').
':'.$subprodval[1] * $qtyText :
2060 $outputlangs->trans(
'Qty').
' '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1])
2068 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $outputlangs->trans(
"BarCode").
" ".$product_barcode);
2072 if (!empty($desc) && ($desc != $label)) {
2073 if ($desc ==
'(CREDIT_NOTE)' &&
$object->lines[$i]->fk_remise_except) {
2075 $discount->fetch(
$object->lines[$i]->fk_remise_except);
2076 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
2077 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromCreditNote", $sourceref);
2078 } elseif ($desc ==
'(DEPOSIT)' &&
$object->lines[$i]->fk_remise_except) {
2080 $discount->fetch(
$object->lines[$i]->fk_remise_except);
2081 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
2082 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromDeposit", $sourceref);
2085 $libelleproduitservice .=
' ('.dol_print_date($discount->datec,
'day',
'', $outputlangs).
')';
2087 } elseif ($desc ==
'(EXCESS RECEIVED)' &&
$object->lines[$i]->fk_remise_except) {
2089 $discount->fetch(
$object->lines[$i]->fk_remise_except);
2090 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessReceived", $discount->ref_facture_source);
2091 } elseif ($desc ==
'(EXCESS PAID)' &&
$object->lines[$i]->fk_remise_except) {
2093 $discount->fetch(
$object->lines[$i]->fk_remise_except);
2094 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessPaid", $discount->ref_invoice_supplier_source);
2098 if (!empty(
$object->element)) {
2099 $tmpkey =
'MAIN_DOCUMENTS_HIDE_DESCRIPTION_FOR_'.strtoupper(
$object->element);
2104 if (empty($hidedesc)) {
2106 $libelleproduitservice =
dol_concatdesc($desc, $libelleproduitservice);
2109 $libelleproduitservice = $desc;
2111 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
2116 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
2122 $prefix_prodserv =
"";
2125 if ($prodser->isService()) {
2126 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Service").
" ";
2128 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Product").
" ";
2132 if (empty($hideref)) {
2133 if ($issupplierline) {
2135 $ref_prodserv = $prodser->ref;
2136 if ($ref_supplier) {
2137 $ref_prodserv .= ($prodser->ref ?
' (' :
'').$outputlangs->transnoentitiesnoconv(
"SupplierRef").
' '.$ref_supplier.($prodser->ref ?
')' :
'');
2139 } elseif (
getDolGlobalInt(
'PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES') == 1) {
2140 $ref_prodserv = $ref_supplier;
2141 } elseif (
getDolGlobalInt(
'PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES') == 2) {
2142 $ref_prodserv = $ref_supplier.
' ('.$outputlangs->transnoentitiesnoconv(
"InternalRef").
' '.$prodser->ref.
')';
2145 $ref_prodserv = $prodser->ref;
2149 $filter = array(
'fk_product' => (
string) $idprod,
'fk_soc' => (
string)
$object->socid);
2151 $nbCustomerPrices = $productCustomerPriceStatic->fetchAll(
'',
'', 1, 0, $filter);
2153 if ($nbCustomerPrices > 0) {
2154 $productCustomerPrice =
null;
2155 if (count($productCustomerPriceStatic->lines) > 0) {
2156 $date_now = (int) floor(
dol_now() / 86400) * 86400;
2157 foreach ($productCustomerPriceStatic->lines as $k => $custprice_line) {
2158 if ($custprice_line->date_begin <= $date_now && (empty($custprice_line->date_end) || $date_now <= $custprice_line->date_end)) {
2159 $productCustomerPrice = $custprice_line;
2165 if (isset($productCustomerPrice) && !empty($productCustomerPrice->ref_customer)) {
2166 $idcustprice =
getDolGlobalInt(
'PRODUIT_CUSTOMER_PRICES_PDF_REF_MODE');
2167 switch ($idcustprice) {
2169 $ref_prodserv = $productCustomerPrice->ref_customer;
2173 $ref_prodserv = $productCustomerPrice->ref_customer .
' (' . $outputlangs->transnoentitiesnoconv(
'InternalRef') .
' ' . $ref_prodserv .
')';
2177 $ref_prodserv = $ref_prodserv .
' (' . $outputlangs->transnoentitiesnoconv(
'RefCustomer') .
' ' . $productCustomerPrice->ref_customer .
')';
2184 if (!empty($libelleproduitservice) && !empty($ref_prodserv)) {
2185 $ref_prodserv .=
" - ";
2189 if (!empty($ref_prodserv) &&
getDolGlobalString(
'PDF_BOLD_PRODUCT_REF_AND_PERIOD')) {
2191 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
2193 $ref_prodserv =
'<b>'.$ref_prodserv.
'</b>';
2196 $libelleproduitservice = $prefix_prodserv.$ref_prodserv.$libelleproduitservice;
2200 include_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
2203 $tblcateg = $categstatic->containing($idprod, Categorie::TYPE_PRODUCT);
2204 foreach ($tblcateg as $cate) {
2206 $desccateg = $cate->description;
2208 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desccateg);
2213 if (!empty(
$object->lines[$i]->date_start) || !empty(
$object->lines[$i]->date_end)) {
2217 if (
$object->lines[$i]->date_start &&
$object->lines[$i]->date_end) {
2218 $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)).
')';
2220 if (
$object->lines[$i]->date_start && !
$object->lines[$i]->date_end) {
2221 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateFrom',
dol_print_date(
$object->lines[$i]->date_start, $format,
false, $outputlangs)).
')';
2223 if (!
$object->lines[$i]->date_start &&
$object->lines[$i]->date_end) {
2224 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateUntil',
dol_print_date(
$object->lines[$i]->date_end, $format,
false, $outputlangs)).
')';
2229 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
2231 $libelleproduitservice .=
'<br><b style="color:#333666;" ><em>'.$period.
'</em></b>';
2233 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $period);
2239 if (!empty($dbatch)) {
2244 include_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
2245 include_once DOL_DOCUMENT_ROOT.
'/product/class/productbatch.class.php';
2250 foreach ($dbatch as $detail) {
2252 if ($detail->eatby) {
2253 $dte[] = $outputlangs->transnoentitiesnoconv(
'printEatby',
dol_print_date($detail->eatby, $format,
false, $outputlangs));
2255 if ($detail->sellby) {
2256 $dte[] = $outputlangs->transnoentitiesnoconv(
'printSellby',
dol_print_date($detail->sellby, $format,
false, $outputlangs));
2258 if ($detail->batch) {
2259 $dte[] = $outputlangs->transnoentitiesnoconv(
'printBatch', $detail->batch);
2262 $dte[] = $outputlangs->transnoentitiesnoconv(
'printQty', (
string) $detail->qty);
2266 if (
$object->element ==
'shipping' && $detail->fk_origin_stock > 0 &&
getDolGlobalInt(
'PRODUCTBATCH_SHOW_WAREHOUSE_ON_SHIPMENT')) {
2267 $resproductbatch = $tmpproductbatch->fetch($detail->fk_origin_stock);
2268 if ($resproductbatch > 0) {
2269 $reswarehouse = $tmpwarehouse->fetch($tmpproductbatch->warehouseid);
2270 if ($reswarehouse > 0) {
2271 $dte[] = $tmpwarehouse->ref;
2276 $libelleproduitservice .=
"__N__ ".implode(
" - ", $dte);
2286 $libelleproduitservice = preg_replace(
'/__N__/',
'<br>', $libelleproduitservice);
2288 $libelleproduitservice = preg_replace(
'/__N__/',
"\n", $libelleproduitservice);
2292 return $libelleproduitservice;
2306 global $hookmanager;
2311 if (is_object($hookmanager)) {
2312 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2313 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2314 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2316 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2318 $reshook = $hookmanager->executeHooks(
'pdf_getlinenum', $parameters,
$object, $action);
2319 $result .= $hookmanager->resPrint;
2321 if (empty($reshook)) {
2339 global $hookmanager;
2344 if (is_object($hookmanager)) {
2345 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2346 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2347 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2349 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2351 $reshook = $hookmanager->executeHooks(
'pdf_getlineref', $parameters,
$object, $action);
2352 $result .= $hookmanager->resPrint;
2354 if (empty($reshook)) {
2372 global $hookmanager;
2377 if (is_object($hookmanager)) {
2378 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2379 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2380 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2382 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2384 $reshook = $hookmanager->executeHooks(
'pdf_getlineref_supplier', $parameters,
$object, $action);
2385 $result .= $hookmanager->resPrint;
2387 if (empty($reshook)) {
2409 if (is_object($hookmanager)) {
2410 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2411 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2412 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2414 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2416 $reshook = $hookmanager->executeHooks(
'pdf_getlinevatrate', $parameters,
$object, $action);
2418 if (!empty($hookmanager->resPrint)) {
2419 $result .= $hookmanager->resPrint;
2422 if (empty($reshook)) {
2423 if (empty($hidedetails) || $hidedetails > 1) {
2429 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
2434 $tmpresult .=
vatrate((
string) abs(
$object->lines[$i]->localtax1_tx),
false);
2439 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
2444 $tmpresult .=
vatrate((
string) abs(
$object->lines[$i]->localtax2_tx),
false);
2449 $result .= $tmpresult;
2466 global $hookmanager;
2476 if (is_object($hookmanager)) {
2477 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2478 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2479 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2481 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2483 $reshook = $hookmanager->executeHooks(
'pdf_getlineupexcltax', $parameters,
$object, $action);
2485 if (!empty($hookmanager->resPrint)) {
2486 $result .= $hookmanager->resPrint;
2489 if (empty($reshook)) {
2490 if (empty($hidedetails) || $hidedetails > 1) {
2492 $result .=
price($sign * $subprice, 0, $outputlangs);
2509 global $hookmanager;
2519 if (is_object($hookmanager)) {
2520 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2521 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2522 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2524 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2526 $reshook = $hookmanager->executeHooks(
'pdf_getlineupwithtax', $parameters,
$object, $action);
2528 if (!empty($hookmanager->resPrint)) {
2529 $result .= $hookmanager->resPrint;
2532 if (empty($reshook)) {
2533 if (empty($hidedetails) || $hidedetails > 1) {
2534 $result .=
price($sign * ((
$object->lines[$i]->subprice) + (
$object->lines[$i]->subprice) * (
$object->lines[$i]->tva_tx) / 100), 0, $outputlangs);
2551 global $hookmanager;
2556 if (is_object($hookmanager)) {
2557 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2558 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2559 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2561 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2563 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty', $parameters,
$object, $action);
2565 if (!empty($hookmanager->resPrint)) {
2566 $result = $hookmanager->resPrint;
2569 if (empty($reshook)) {
2570 if (
$object->lines[$i]->special_code == 3) {
2573 if (empty($hidedetails) || $hidedetails > 1) {
2574 $result .=
$object->lines[$i]->qty;
2591 global $hookmanager;
2596 if (is_object($hookmanager)) {
2597 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2598 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2599 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2601 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2603 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_asked', $parameters,
$object, $action);
2605 if (!empty($hookmanager->resPrint)) {
2606 $result .= $hookmanager->resPrint;
2609 if (empty($reshook)) {
2610 if (
$object->lines[$i]->special_code == 3) {
2613 if (empty($hidedetails) || $hidedetails > 1) {
2614 $result .=
$object->lines[$i]->qty_asked;
2631 global $hookmanager;
2636 if (is_object($hookmanager)) {
2637 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2638 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2639 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2641 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2643 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_shipped', $parameters,
$object, $action);
2645 if (!empty($hookmanager->resPrint)) {
2646 $result .= $hookmanager->resPrint;
2649 if (empty($reshook)) {
2650 if (
$object->lines[$i]->special_code == 3) {
2653 if (empty($hidedetails) || $hidedetails > 1) {
2654 $result .=
$object->lines[$i]->qty_shipped;
2671 global $hookmanager;
2676 if (is_object($hookmanager)) {
2677 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2678 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2679 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2681 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2683 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_keeptoship', $parameters,
$object, $action);
2685 if (!empty($hookmanager->resPrint)) {
2686 $result .= $hookmanager->resPrint;
2689 if (empty($reshook)) {
2690 if (
$object->lines[$i]->special_code == 3) {
2693 if (empty($hidedetails) || $hidedetails > 1) {
2694 $result .= (
$object->lines[$i]->qty_asked -
$object->lines[$i]->qty_shipped);
2711 global $hookmanager;
2716 if (is_object($hookmanager)) {
2717 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2718 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2719 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2721 $parameters = array(
2723 'outputlangs' => $outputlangs,
2724 'hidedetails' => $hidedetails,
2725 'special_code' => $special_code
2728 $reshook = $hookmanager->executeHooks(
'pdf_getlineunit', $parameters,
$object, $action);
2730 if (!empty($hookmanager->resPrint)) {
2731 $result .= $hookmanager->resPrint;
2734 if (empty($reshook)) {
2735 if (empty($hidedetails) || $hidedetails > 1) {
2736 $result .=
$object->lines[$i]->getLabelOfUnit(
'short', $outputlangs, 1);
2754 global $hookmanager;
2756 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
2761 if (is_object($hookmanager)) {
2762 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2763 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2764 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2766 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2768 $reshook = $hookmanager->executeHooks(
'pdf_getlineremisepercent', $parameters,
$object, $action);
2770 if (!empty($hookmanager->resPrint)) {
2771 $result .= $hookmanager->resPrint;
2774 if (empty($reshook)) {
2775 if (
$object->lines[$i]->special_code == 3) {
2778 if (empty($hidedetails) || $hidedetails > 1) {
2797 if (empty($hookmanager)) {
2798 global $hookmanager;
2804 if (is_object($hookmanager)) {
2805 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2806 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2807 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2809 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2811 $reshook = $hookmanager->executeHooks(
'pdf_getlineprogress', $parameters,
$object, $action);
2813 if (!empty($hookmanager->resPrint)) {
2814 return $hookmanager->resPrint;
2817 if (empty($reshook)) {
2818 if (
$object->lines[$i]->special_code == 3) {
2821 if (empty($hidedetails) || $hidedetails > 1) {
2827 if ($isCumulative xor $showDelta) {
2831 $result =
$object->lines[$i]->situation_percent;
2837 if (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2838 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2840 $result = $isCumulative ?
2842 $object->lines[$i]->situation_percent - $prev_progress :
2844 $prev_progress +
$object->lines[$i]->situation_percent;
2846 $result = round($result, 1).
'%';
2863 global $hookmanager;
2873 if (is_object($hookmanager)) {
2874 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2875 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2876 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2878 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code,
'sign' => $sign);
2880 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalexcltax', $parameters,
$object, $action);
2882 if (!empty($hookmanager->resPrint)) {
2883 $result .= $hookmanager->resPrint;
2886 if (empty($reshook)) {
2887 if (!empty(
$object->lines[$i]) &&
$object->lines[$i]->special_code == 3) {
2888 $result .= $outputlangs->transnoentities(
"Option");
2889 } elseif (empty($hidedetails) || $hidedetails > 1) {
2891 if (!empty(
$object->lines[$i]->situation_percent) &&
$object->lines[$i]->situation_percent > 0) {
2892 if (method_exists(
$object->lines[$i],
'getSituationRatio')) {
2893 $total_ht *=
$object->lines[$i]->getSituationRatio();
2896 $result .=
price($sign * $total_ht, 0, $outputlangs);
2913 global $hookmanager;
2923 if (is_object($hookmanager)) {
2924 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2925 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2926 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2928 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2930 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalwithtax', $parameters,
$object, $action);
2932 if (!empty($hookmanager->resPrint)) {
2933 $result .= $hookmanager->resPrint;
2936 if (empty($reshook)) {
2937 if (
$object->lines[$i]->special_code == 3) {
2938 $result .= $outputlangs->transnoentities(
"Option");
2939 } elseif (empty($hidedetails) || $hidedetails > 1) {
2941 if (isset(
$object->lines[$i]->situation_percent) &&
$object->lines[$i]->situation_percent > 0) {
2942 $total_ttc *=
$object->lines[$i]->getSituationRatio();
2944 $result .=
price($sign * $total_ttc, 0, $outputlangs);
2962 $objectSocId = getObjectSocId(
$object);
2963 $elementSocId = getObjectSocId($elementobject);
2969 if (!empty($objectSocId) && !empty($elementSocId) && $objectSocId != $elementSocId) {
2984function pdf_getLinkedObjects(
$object, $outputlangs)
2986 global
$db, $hookmanager;
2988 $linkedobjects = array();
2992 foreach (
$object->linkedObjects as $objecttype => $objects) {
2993 if ($objecttype ==
'facture') {
2995 } elseif ($objecttype ==
'propal' || $objecttype ==
'supplier_proposal') {
2996 '@phan-var-force array<Propal|SupplierProposal> $objects';
2998 $outputlangs->load(
'propal');
3000 foreach ($objects as $elementobject) {
3001 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefProposal");
3002 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
3003 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DatePropal");
3004 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
3006 } elseif ($objecttype ==
'commande' || $objecttype ==
'supplier_order' || $objecttype ==
'order_supplier') {
3007 $optiontohidelinkedorders =
"PDF_HIDE_LINKED_ORDERS_ON_SAME_THIRDPARTY";
3008 if ($objecttype ==
'supplier_order' || $objecttype ==
'order_supplier') {
3009 $optiontohidelinkedorders =
"PDF_HIDE_LINKED_PURCHASE_ORDERS_ON_SAME_THIRDPARTY";
3011 '@phan-var-force array<Commande|CommandeFournisseur> $objects';
3012 $outputlangs->load(
'orders');
3015 if (empty(
$object->context[
'DolPublicNoteAppendedGetLinkedObjects'])) {
3017 foreach ($objects as $elementobject) {
3019 $outputList =
dol_concatdesc($outputList, $outputlangs->transnoentities($elementobject->ref) . (empty($elementobject->ref_client) ?
'' :
' (' . $elementobject->ref_client .
')') . (empty($elementobject->ref_supplier) ?
'' :
' (' . $elementobject->ref_supplier .
')') .
' ');
3020 $outputList =
dol_concatdesc($outputList, $outputlangs->transnoentities(
"OrderDate") .
' : ' .
dol_print_date($elementobject->date,
'day',
'', $outputlangs));
3024 if (!empty($outputList)) {
3030 $elementobject = array_shift($objects);
3032 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder");
3033 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref).(!empty($elementobject->ref_client) ?
' ('.$elementobject->ref_client.
')' :
'').(!empty($elementobject->ref_supplier) ?
' ('.$elementobject->ref_supplier.
')' :
'');
3034 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"OrderDate");
3035 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
3038 } elseif ($objecttype ==
'contrat') {
3039 '@phan-var-force Contrat[] $objects';
3040 $outputlangs->load(
'contracts');
3041 foreach ($objects as $elementobject) {
3043 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefContract");
3044 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
3045 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DateContract");
3046 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date_contrat,
'day',
'', $outputlangs);
3049 } elseif ($objecttype ==
'fichinter') {
3050 '@phan-var-force Fichinter[] $objects';
3051 $outputlangs->load(
'interventions');
3052 foreach ($objects as $elementobject) {
3054 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"InterRef");
3055 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
3056 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"InterDate");
3057 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->datec,
'day',
'', $outputlangs);
3060 } elseif ($objecttype ==
'shipping') {
3061 '@phan-var-force Expedition[] $objects';
3062 $outputlangs->loadLangs(array(
"orders",
"sendings"));
3064 if (count($objects) > 1) {
3068 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
3069 $refListsTxt .= $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending").
' :';
3071 $refListsTxt .= $outputlangs->transnoentities(
"RefSending").
' :';
3074 foreach ($objects as $elementobject) {
3075 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
3076 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
3077 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
3078 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
3080 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
3086 $refListsTxt .= (!empty($refListsTxt) ?
' ' :
'');
3087 if (! is_object($order)) {
3088 $refListsTxt .= $outputlangs->transnoentities($elementobject->ref);
3090 $refListsTxt .= $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
'');
3091 $refListsTxt .=
' / '.$outputlangs->transnoentities($elementobject->ref);
3095 if (empty(
$object->context[
'DolPublicNoteAppendedGetLinkedObjects']) && !
getDolGlobalString(
"PDF_HIDE_LINKED_OBJECT_IN_PUBLIC_NOTE")) {
3098 } elseif (count($objects) == 1) {
3099 $elementobject = array_shift($objects);
3102 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
3103 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
3104 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
3105 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
3107 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
3114 if (! is_object($order)) {
3115 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefSending");
3116 if (empty($linkedobjects[$objecttype][
'ref_value'])) {
3117 $linkedobjects[$objecttype][
'ref_value'] =
'';
3119 $linkedobjects[$objecttype][
'ref_value'] .=
' / ';
3121 $linkedobjects[$objecttype][
'ref_value'] .= $outputlangs->transnoentities($elementobject->ref);
3122 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
3124 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending");
3125 if (empty($linkedobjects[$objecttype][
'ref_value'])) {
3126 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
'');
3128 $linkedobjects[$objecttype][
'ref_value'] .=
' / '.$outputlangs->transnoentities($elementobject->ref);
3129 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
3135 $object->context[
'DolPublicNoteAppendedGetLinkedObjects'] = 1;
3138 if (is_object($hookmanager)) {
3139 $parameters = array(
'linkedobjects' => $linkedobjects,
'outputlangs' => $outputlangs);
3141 $reshook = $hookmanager->executeHooks(
'pdf_getLinkedObjects', $parameters,
$object, $action);
3142 if (empty($reshook)) {
3143 $linkedobjects = array_replace($linkedobjects, $hookmanager->resArray);
3144 } elseif ($reshook > 0) {
3146 $linkedobjects = $hookmanager->resArray;
3150 return $linkedobjects;
3163 $maxheight =
getDolGlobalInt(
'MAIN_DOCUMENTS_WITH_PICTURE_HEIGHT', 32);
3165 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
3169 if ($tmp[
'height']) {
3170 $width = (int) round($maxheight * $tmp[
'width'] / $tmp[
'height']);
3171 if ($width > $maxwidth) {
3173 $height = (int) round($maxwidth * $tmp[
'height'] / $tmp[
'width']);
3175 $height = $maxheight;
3178 return array(
'width' => $width,
'height' => $height);
3194 global $hookmanager;
3200 if (
$object->lines[$i]->special_code == 3) {
3202 return $outputlangs->transnoentities(
"Option");
3204 if (is_object($hookmanager)) {
3205 $special_code =
$object->lines[$i]->special_code;
3206 if (!empty(
$object->lines[$i]->fk_parent_line)) {
3207 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
3210 $parameters = array(
3212 'outputlangs' => $outputlangs,
3213 'hidedetails' => $hidedetails,
3214 'special_code' => $special_code,
3215 'multicurrency' => $multicurrency
3220 if ($hookmanager->executeHooks(
'getlinetotalremise', $parameters,
$object, $action) > 0) {
3221 if (isset($hookmanager->resArray[
'linetotalremise'])) {
3222 return (
float) $hookmanager->resArray[
'linetotalremise'];
3224 return (
float) $hookmanager->resPrint;
3229 if (empty($hidedetails) || $hidedetails > 1) {
3230 if (empty($multicurrency)) {
3233 return (
float)
price2num($sign * ((
$object->lines[$i]->multicurrency_subprice * (
float)
$object->lines[$i]->qty) -
$object->lines[$i]->multicurrency_total_ht),
'MT', 1);
3250 return "ERROR: FILE NOT FOUND OR NOT VALID";
3261 $content = preg_replace(
'/[^(\x20-\x7F)]*/',
'', $content);
3262 if (preg_match(
'/\/' . preg_quote($field,
'/') .
'\s*\((.*?)\)/', $content, $matches)) {
3263 return trim($matches[1]);
3265 return "ERROR: NOT FOUND";
3267 return "ERROR: FAILED TO READ PDF";
3298 bool $isSubtotal =
false,
3299 bool $applySubtotalLogic =
true
3301 $savePage = $pdf->getPage();
3302 $saveX = $pdf->GetX();
3303 $prevAlign = $generator->cols[
'desc'][
'content'][
'align'];
3305 if ($isSubtotal && $applySubtotalLogic &&
$object->lines[$i]->qty < 0) {
3306 $outputlangs->load(
"subtotals");
3307 $object->lines[$i]->desc = $outputlangs->trans(
"SubtotalOf",
$object->lines[$i]->desc);
3308 $generator->cols[
'desc'][
'content'][
'align'] = ($prevAlign ===
'L') ?
'R' :
'L';
3311 $pdf->startTransaction();
3312 $pdf->SetXY($saveX, $curY);
3314 $pageAfter = $pdf->getPage();
3315 $yAfter = $pdf->GetY();
3316 $pdf->rollbackTransaction(
true);
3318 $pdf->SetFillColor($bgColor[0], $bgColor[1], $bgColor[2]);
3319 $width = $generator->page_largeur - $generator->marge_droite - $generator->marge_gauche;
3321 $pdf->SetXY($generator->marge_gauche, $curY);
3322 if ($pageAfter === $savePage) {
3323 $pdf->MultiCell($width, max(0, $yAfter - $curY),
'', 0,
'',
true);
3325 $pdf->MultiCell($width, $pdf->getPageHeight() - $pdf->getBreakMargin() - $curY,
'', 0,
'',
true);
3327 $pdf->setPage($pageAfter);
3328 $pdf->SetXY($generator->marge_gauche, $pdf->getMargins()[
'top']);
3329 $pdf->MultiCell($width, max(0, $yAfter - $pdf->getMargins()[
'top']),
'', 0,
'',
true);
3331 $pdf->setPage($savePage);
3334 $pdf->SetTextColor(colorIsLight(implode(
',', $bgColor)));
3335 $pdf->SetXY($saveX, $curY);
3339 $generator->cols[
'desc'][
'content'][
'align'] = $prevAlign;
if(! $sortfield) if(! $sortorder) $object
pdfWriteBlockedLogSignature(&$pdf, $outputlangs, $page_height, $object, &$w, &$posx, &$posy)
Add some information from the blockedlog module.
pdfCertifMentionblockedLog(&$pdf, $outputlangs, $seller, $default_font_size, &$posy, $pdftemplate)
Add legal mention.
isALNERunningVersion($blockedlogtestalreadydone=0, $blockedlogmodulealreadydone=0)
Return if the application is executed with the LNE requirements on.
Class to manage categories.
Class to manage customers orders.
Parent class for documents (PDF, ODT, ...) generators.
printColDescContent($pdf, &$curY, $colKey, $object, $i, $outputlangs, $hideref=0, $hidedesc=0, $issupplierline=0)
print description column content
setAfterColsLinePositionsData(string $colId, float $y, int $pageNumb)
Used for to set afterColsLinePositions var in a pdf draw line loop.
Parent class of all other business classes (invoices, contracts, proposals, 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_is_file($pathoffile)
Return if path is a file.
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.
dol_now($mode='gmt')
Return date for now.
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_osencode($str)
Return a string encoded into OS filesystem encoding.
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_concatdesc($text1, $text2, $forxml=false, $invert=false)
Concat 2 descriptions with a new line between them (second operand after first one with appropriate n...
getDolCurrency()
Return the main currency ('EUR', 'USD', ...)
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_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
getDolGlobalBool($key, $default=false)
Return a Dolibarr global constant boolean value.
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...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
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_watermark($pdf, $outputlangs, $h, $w, $unit, $text)
Add a draft watermark on PDF files.
pdf_getlinetotalexcltax($object, $i, $outputlangs, $hidedetails=0)
Return line total excluding tax.
pdfCertifMention($pdf, $outputlangs, $seller, $default_font_size, &$posy, $pdftemplate)
Add legal certificate mention.
pdf_getlinedesc($object, $i, $outputlangs, $hideref=0, $hidedesc=0, $issupplierline=0)
Return line description translated in outputlangs and encoded into htmlentities and with
pdf_getFormat($outputlangs=null, $mode='setup')
Return array with format properties of default PDF format.
pdfGetLineTotalDiscountAmount($object, $i, $outputlangs, $hidedetails=0, $multicurrency=0)
Return line total amount discount.
pdf_writeLinkedObjects($pdf, $object, $outputlangs, $posx, $posy, $w, $h, $align, $default_font_size)
Show linked objects for PDF generation.
pdf_getPDFFontSize($outputlangs)
Return font size to use for PDF generation.
pdfExtractMetadata($file, $field='Keywords')
Function to extract metadata from a PDF file by doing a binary parsing of the PDF file.
pdf_bank($pdf, $outputlangs, $curx, $cury, $account, $onlynumber=0, $default_font_size=10)
Show bank information 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_writelinedesc($pdf, $object, $i, $outputlangs, $w, $h, $posx, $posy, $hideref=0, $hidedesc=0, $issupplierline=0, $align='J')
Output line description into PDF.
pdf_getlineupwithtax($object, $i, $outputlangs, $hidedetails=0)
Return line unit price including tax.
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.
pdfWriteVATArray($docgenerator, &$index, $pdf, $outputlangs, $outputlangsbis, $object, $col1x, $col2x, $largcol2, $tab2_top, $tab2_hl)
Add some information from the blockedlog module.
pdf_getlinetotalwithtax($object, $i, $outputlangs, $hidedetails=0)
Return line total including tax.
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_admin_prepare_head()
Return array head with list of tabs to view object information.
canDisplayLinkedObjectInPDF($object, $elementobject)
Check if a linked object can be displayed based on third-party privacy rules.
pdf_pagehead($pdf, $outputlangs, $page_height)
Show header of page for PDF generation.
pdfGetHeightForHtmlContent($pdf, $htmlcontent)
Function to try to calculate height of a HTML Content.
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_getPDFFont($outputlangs)
Return font name to use for PDF generation.
pdf_render_subtotals(TCPDF $pdf, CommonDocGenerator $generator, float $curY, CommonObject $object, int $i, Translate $outputlangs, int $hideref, int $hidedesc, array $bgColor, bool $isSubtotal=false, bool $applySubtotalLogic=true)
Render subtotals line with a colored background and adapted text color .
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.
pdfWriteAdditionnalTitle($pdf, $outputlangs, $page_height, $object, &$w, &$posx, &$posy)
Add some information from the blockedlog module.
pdfWriteAlreadyPaid($docgenerator, &$index, $pdf, $outputlangs, $outputlangsbis, $object, $col1x, $col2x, $largcol2, $tab2_top, $tab2_hl, $deja_regle, $creditnoteamount, $depositsamount, $resteapayer, $resteapayer_origin)
Add some information from the blockedlog module.
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.