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';
89 global
$conf, $db, $langs;
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);
198 $pdf->setAllowLocalFiles(
true);
230 $pdf->SetProtection($pdfrights, $pdfuserpass, $pdfownerpass, $encstrength, $pubkeys);
244 require_once TCPDF_PATH.
'tcpdf_parser.php';
246 $isencrypted =
false;
248 $content = file_get_contents($pathoffile);
251 @($parser =
new TCPDF_PARSER(ltrim($content)));
252 $tmp = $parser->getParsedData();
254 $data = $tmp[1] ??
null;
258 if (isset($xref[
'trailer'][
'encrypt'])) {
282 if (class_exists(
'TCPDF')) {
283 if ($outputlangs->trans(
'FONTFORPDF') !=
'FONTFORPDF') {
284 $font = $outputlangs->trans(
'FONTFORPDF');
299 if (class_exists(
'TCPDF')) {
300 if ($outputlangs->trans(
'FONTSIZEFORPDF') !=
'FONTSIZEFORPDF') {
301 $size = (int) $outputlangs->trans(
'FONTSIZEFORPDF');
323 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
325 if ($tmp[
'height']) {
326 $width = round($height * $tmp[
'width'] / $tmp[
'height']);
327 if ($width > $maxwidth) {
328 $height = $height * $maxwidth / $width;
354 if ($emetteur->logo) {
356 $logo = $logodir.
'/logos/thumbs/'.$emetteur->logo_small;
358 $logo = $logodir.
'/logos/'.$emetteur->logo;
360 if (is_readable($logo)) {
362 $pdf->Image($logo, $posx, $posy, 0, $height);
364 $pdf->SetTextColor(200, 0, 0);
365 $pdf->SetFont(
'',
'B', $default_font_size - 2);
366 $pdf->MultiCell($w, 3, $outputlangs->transnoentities(
"ErrorLogoFileNotFound", $logo), 0,
'L');
367 $pdf->MultiCell($w, 3, $outputlangs->transnoentities(
"ErrorGoToGlobalSetup"), 0,
'L');
370 $text = (string) $emetteur->name;
371 $pdf->MultiCell($w, 4, $outputlangs->convToOutputCharset($text), 0, $align);
388 $pdf->startTransaction();
393 $start_y = $pdf->GetY();
395 $start_page = $pdf->getPage();
397 $pdf->writeHTMLCell(0, 0, 0, $start_y, $htmlcontent, 0, 1,
false,
true,
'J',
true);
399 $end_y = $pdf->GetY();
400 $end_page = $pdf->getPage();
403 if ($end_page == $start_page) {
404 $height = $end_y - $start_y;
406 for ($page = $start_page; $page <= $end_page; ++$page) {
407 $pdf->setPage($page);
408 $tmpm = $pdf->getMargins();
409 $tMargin = $tmpm[
'top'];
410 if ($page == $start_page) {
412 $height = $pdf->getPageHeight() - $start_y - $pdf->getBreakMargin();
413 } elseif ($page == $end_page) {
415 $height = $end_y - $tMargin;
417 $height = $pdf->getPageHeight() - $tMargin - $pdf->getBreakMargin();
422 $pdf->rollbackTransaction(
true);
441 if ($thirdparty instanceof
Societe) {
442 $socname = $thirdparty->name;
443 if (($includealias ||
getDolGlobalInt(
'PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) && !empty($thirdparty->name_alias)) {
445 $socname = $thirdparty->name_alias.
" - ".$thirdparty->name;
447 $socname = $thirdparty->name.
" - ".$thirdparty->name_alias;
450 } elseif ($thirdparty instanceof
Contact) {
451 if ($thirdparty->socid > 0) {
452 $thirdparty->fetch_thirdparty();
453 $socname = $thirdparty->thirdparty->name;
454 if (($includealias ||
getDolGlobalInt(
'PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) && !empty($thirdparty->thirdparty->name_alias)) {
456 $socname = $thirdparty->thirdparty->name_alias.
" - ".$thirdparty->thirdparty->name;
458 $socname = $thirdparty->thirdparty->name.
" - ".$thirdparty->thirdparty->name_alias;
463 throw new InvalidArgumentException(
'Parameter 1 $thirdparty is not a Societe nor Contact');
466 return $outputlangs->convToOutputCharset((
string) $socname);
481function pdf_build_address($outputlangs, $sourcecompany, $targetcompany =
'', $targetcontact =
'', $usecontact = 0, $mode =
'source',
$object =
null)
485 if ($mode ==
'source' && !is_object($sourcecompany)) {
488 if (($mode ==
'target' || $mode ==
'targetshipping') && !is_object($targetcompany)) {
492 if (!empty($sourcecompany->state_id) && empty($sourcecompany->state)) {
493 $sourcecompany->state =
getState($sourcecompany->state_id);
495 if (!empty($targetcompany->state_id) && empty($targetcompany->state)) {
496 $targetcompany->state =
getState($targetcompany->state_id);
501 if (is_object($hookmanager)) {
502 $parameters = array(
'sourcecompany' => &$sourcecompany,
'targetcompany' => &$targetcompany,
'targetcontact' => &$targetcontact,
'outputlangs' => $outputlangs,
'mode' => $mode,
'usecontact' => $usecontact);
505 $reshook = $hookmanager->executeHooks(
'pdf_build_address', $parameters,
$object, $action);
506 $stringaddress .= $hookmanager->resPrint;
508 if (empty($reshook)) {
509 if ($mode ==
'source') {
511 if (isset($targetcompany->country_code) && !empty($sourcecompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
517 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($fulladdress).
"\n";
522 if ($sourcecompany->phone) {
523 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"PhoneShort").
": ".$outputlangs->convToOutputCharset($sourcecompany->phone);
526 if ($sourcecompany->phone_mobile &&
getDolGlobalString(
'MAIN_PDF_SHOW_SOURCE_PHONE_MOBILE')) {
527 $stringaddress .= ($stringaddress ? ($sourcecompany->phone ?
" - " :
"\n") :
'').$outputlangs->transnoentities(
"PhoneShort").
": ".$outputlangs->convToOutputCharset($sourcecompany->phone_mobile);
530 if ($sourcecompany->fax) {
531 $stringaddress .= ($stringaddress ? ($sourcecompany->phone ?
" - " :
"\n") :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($sourcecompany->fax);
534 if ($sourcecompany->email) {
535 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($sourcecompany->email);
538 if ($sourcecompany->url) {
539 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($sourcecompany->url);
544 if ($sourcecompany->tva_intra) {
545 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($sourcecompany->tva_intra);
550 if (
getDolGlobalString(
'MAIN_PROFID1_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof1)) {
551 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $sourcecompany->country_code);
552 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
555 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof1);
557 if (
getDolGlobalString(
'MAIN_PROFID2_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof2)) {
558 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $sourcecompany->country_code);
559 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
562 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof2);
564 if (
getDolGlobalString(
'MAIN_PROFID3_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof3)) {
565 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $sourcecompany->country_code);
566 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
569 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof3);
571 if (
getDolGlobalString(
'MAIN_PROFID4_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof4)) {
572 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $sourcecompany->country_code);
573 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
576 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof4);
578 if (
getDolGlobalString(
'MAIN_PROFID5_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof5)) {
579 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $sourcecompany->country_code);
580 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
583 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof5);
585 if (
getDolGlobalString(
'MAIN_PROFID6_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof6)) {
586 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $sourcecompany->country_code);
587 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
590 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof6);
593 $stringaddress .= ($stringaddress ?
"\n" :
'') .
getDolGlobalString(
'PDF_ADD_MORE_AFTER_SOURCE_ADDRESS');
597 if ($mode ==
'target' || $mode ==
'targetshipping' || preg_match(
'/targetwithdetails/', $mode)) {
598 if ($usecontact && (is_object($targetcontact))) {
599 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($targetcontact->getFullName($outputlangs, 1));
601 if (!empty($targetcontact->address)) {
602 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcontact)).
"\n";
603 } elseif (is_object($targetcompany)) {
604 $companytouseforaddress = $targetcompany;
607 if ($targetcontact->socid > 0 && $targetcontact->socid != $targetcompany->id) {
608 $targetcontact->fetch_thirdparty();
609 $companytouseforaddress = $targetcontact->thirdparty;
612 if (is_object($companytouseforaddress)) {
613 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($companytouseforaddress)).
"\n";
617 if (!empty($targetcontact->country_code) && $targetcontact->country_code != $sourcecompany->country_code) {
618 $stringaddress .= (($stringaddress && !
getDolGlobalString(
'MAIN_PDF_REMOVE_BREAK_BEFORE_COUNTRY')) ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcontact->country_code));
619 } elseif (empty($targetcontact->country_code) && !empty($targetcompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
620 $stringaddress .= (($stringaddress && !
getDolGlobalString(
'MAIN_PDF_REMOVE_BREAK_BEFORE_COUNTRY')) ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
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($targetcontact->phone_pro) || !empty($targetcontact->phone_mobile)) {
627 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
629 if (!empty($targetcontact->phone_pro)) {
630 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_pro);
632 if (!empty($targetcontact->phone_pro) && !empty($targetcontact->phone_mobile)) {
633 $stringaddress .=
" / ";
635 if (!empty($targetcontact->phone_mobile)) {
636 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_mobile);
640 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
641 if ($targetcontact->fax) {
642 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcontact->fax);
646 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
647 if ($targetcontact->email) {
648 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcontact->email);
652 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
653 if ($targetcontact->url) {
654 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset((
string) $targetcontact->url);
659 if (is_object($targetcompany)) {
660 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcompany));
662 if (!empty($targetcompany->country_code) && $targetcompany->country_code != $sourcecompany->country_code) {
663 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
665 $stringaddress .= ($stringaddress ?
"\n" :
'');
668 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || preg_match(
'/targetwithdetails/', $mode)) {
670 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
671 if (!empty($targetcompany->phone) || !empty($targetcompany->phone_mobile)) {
672 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
674 if (!empty($targetcompany->phone)) {
675 $stringaddress .= $outputlangs->convToOutputCharset($targetcompany->phone);
677 if (!empty($targetcompany->phone) && !empty($targetcompany->phone_mobile)) {
678 $stringaddress .=
" / ";
680 if (!empty($targetcompany->phone_mobile)) {
681 $stringaddress .= $outputlangs->convToOutputCharset($targetcompany->phone_mobile);
685 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
686 if ($targetcompany->fax) {
687 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcompany->fax);
691 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
692 if ($targetcompany->email) {
693 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcompany->email);
697 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
698 if ($targetcompany->url) {
699 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($targetcompany->url);
708 if ($usecontact && is_object($targetcontact) &&
getDolGlobalInt(
'MAIN_USE_COMPANY_NAME_OF_CONTACT')) {
709 $targetcontact->fetch_thirdparty();
710 if (!empty($targetcontact->thirdparty->id) && $targetcontact->thirdparty->tva_intra) {
711 $stringaddress .= ($stringaddress ?
"\n" :
'') . $outputlangs->transnoentities(
"VATIntraShort") .
': ' . $outputlangs->convToOutputCharset($targetcontact->thirdparty->tva_intra);
713 } elseif (!empty($targetcompany->tva_intra)) {
714 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($targetcompany->tva_intra);
719 if (
getDolGlobalString(
'MAIN_LEGALFORM_IN_ADDRESS') && !empty($targetcompany->forme_juridique_code)) {
721 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp;
725 if (
getDolGlobalString(
'MAIN_PROFID1_IN_ADDRESS') && !empty($targetcompany->idprof1)) {
726 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $targetcompany->country_code);
727 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
730 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof1);
732 if (
getDolGlobalString(
'MAIN_PROFID2_IN_ADDRESS') && !empty($targetcompany->idprof2)) {
733 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $targetcompany->country_code);
734 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
737 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof2);
739 if (
getDolGlobalString(
'MAIN_PROFID3_IN_ADDRESS') && !empty($targetcompany->idprof3)) {
740 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $targetcompany->country_code);
741 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
744 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof3);
746 if (
getDolGlobalString(
'MAIN_PROFID4_IN_ADDRESS') && !empty($targetcompany->idprof4)) {
747 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $targetcompany->country_code);
748 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
751 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof4);
753 if (
getDolGlobalString(
'MAIN_PROFID5_IN_ADDRESS') && !empty($targetcompany->idprof5)) {
754 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $targetcompany->country_code);
755 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
758 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof5);
760 if (
getDolGlobalString(
'MAIN_PROFID6_IN_ADDRESS') && !empty($targetcompany->idprof6)) {
761 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $targetcompany->country_code);
762 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
765 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof6);
770 if ($mode ==
'source' && !empty($sourcecompany->note_public)) {
771 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($sourcecompany->note_public);
773 if (($mode ==
'target' || $mode ==
'targetshipping' || preg_match(
'/targetwithdetails/', $mode)) && !empty($targetcompany->note_public)) {
774 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($targetcompany->note_public);
780 return $stringaddress;
799 if (file_exists($filepath)) {
800 $pdf->setAutoPageBreak(
false, 0);
809 $pdf->setAutoPageBreak(
true, 0);
833 include_once DOL_DOCUMENT_ROOT.
'/blockedlog/lib/blockedlog.lib.php';
855function pdfWriteVATArray($docgenerator, &$index, $pdf, $outputlangs, $outputlangsbis,
$object, $col1x, $col2x, $largcol2, $tab2_top, $tab2_hl)
859 $tmpatleastoneratenotnull = 0;
862 foreach ($docgenerator->localtax1 as $localtax_type => $localtax_rate) {
863 if (in_array((
string) $localtax_type, array(
'1',
'3',
'5'))) {
867 foreach ($localtax_rate as $tvakey => $tvaval) {
872 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
875 if (preg_match(
'/\*/', (
string) $tvakey)) {
876 $tvakey = str_replace(
'*',
'', (
string) $tvakey);
877 $tvacompl =
" (".$outputlangs->transnoentities(
"NonPercuRecuperable").
")";
880 $totalvat = $outputlangs->transcountrynoentities(
"TotalLT1",
$mysoc->country_code).(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transcountrynoentities(
"TotalLT1",
$mysoc->country_code) :
'');
884 $totalvat .= $tvacompl;
886 $totalvat .=
vatrate((
string) abs((
float) $tvakey),
true).$tvacompl;
889 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $totalvat, 0,
'L',
true);
893 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
894 $pdf->MultiCell($largcol2, $tab2_hl,
price($total_localtax, 0, $outputlangs), 0,
'R',
true);
900 foreach ($docgenerator->localtax2 as $localtax_type => $localtax_rate) {
901 if (in_array((
string) $localtax_type, array(
'1',
'3',
'5'))) {
905 foreach ($localtax_rate as $tvakey => $tvaval) {
910 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
913 if (preg_match(
'/\*/', (
string) $tvakey)) {
914 $tvakey = str_replace(
'*',
'', (
string) $tvakey);
915 $tvacompl =
" (".$outputlangs->transnoentities(
"NonPercuRecuperable").
")";
917 $totalvat = $outputlangs->transcountrynoentities(
"TotalLT2",
$mysoc->country_code).(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transcountrynoentities(
"TotalLT2",
$mysoc->country_code) :
'');
921 $totalvat .= $tvacompl;
923 $totalvat .=
vatrate((
string) abs((
float) $tvakey),
true).$tvacompl;
926 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $totalvat, 0,
'L',
true);
930 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
931 $pdf->MultiCell($largcol2, $tab2_hl,
price($total_localtax, 0, $outputlangs), 0,
'R',
true);
939 foreach ($docgenerator->tva as $tvakey => $tvaval) {
940 $sum_pdf_tva += $tvaval;
943 if ($sum_pdf_tva !=
$object->total_tva) {
944 if (!empty($sum_pdf_tva)) {
945 $coef_fix_tva =
$object->total_tva / $sum_pdf_tva;
951 foreach ($docgenerator->tva as $tvakey => $tvaval) {
952 $docgenerator->tva[$tvakey] = $tvaval * $coef_fix_tva;
954 foreach ($docgenerator->tva_array as $tvakey => $tvaval) {
955 $docgenerator->tva_array[$tvakey][
'amount'] = $tvaval[
'amount'] * $coef_fix_tva;
962 foreach ($docgenerator->tva_array as $tvakey => $tvaval) {
964 $tmpatleastoneratenotnull++;
967 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
970 if (preg_match(
'/\*/', $tvakey)) {
971 $tvakey = str_replace(
'*',
'', $tvakey);
972 $tvacompl =
" (".$outputlangs->transnoentities(
"NonPercuRecuperable").
")";
974 $totalvat = $outputlangs->transcountrynoentities(
"TotalVAT",
$mysoc->country_code).(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transcountrynoentities(
"TotalVAT",
$mysoc->country_code) :
'');
977 $totalvat .=
vatrate((
string) $tvaval[
'vatrate'],
true).$tvacompl;
979 $totalvat .= $tvaval[
'vatcode'].$tvacompl;
981 $totalvat .= $tvacompl;
983 $totalvat .=
vatrate((
string) $tvaval[
'vatrate'],
true).($tvaval[
'vatcode'] ?
' ('.$tvaval[
'vatcode'].
')' :
'').$tvacompl;
986 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $totalvat, 0,
'L',
true);
988 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
990 $pdf->MultiCell($largcol2, $tab2_hl,
price(
price2num($tvaval[
'amount'],
'MT'), 0, $outputlangs), 0,
'R',
true);
996 foreach ($docgenerator->localtax1 as $localtax_type => $localtax_rate) {
997 if (in_array((
string) $localtax_type, array(
'2',
'4',
'6'))) {
1001 foreach ($localtax_rate as $tvakey => $tvaval) {
1002 if ($tvakey != 0 ||
getDolGlobalString(
'INVOICE_SHOW_ALSO_LOCALTAX1_LINE_IF_ZERO')) {
1006 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
1009 if (preg_match(
'/\*/', (
string) $tvakey)) {
1010 $tvakey = str_replace(
'*',
'', (
string) $tvakey);
1011 $tvacompl =
" (".$outputlangs->transnoentities(
"NonPercuRecuperable").
")";
1013 $totalvat = $outputlangs->transcountrynoentities(
"TotalLT1",
$mysoc->country_code).(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transcountrynoentities(
"TotalLT1",
$mysoc->country_code) :
'');
1017 $totalvat .= $tvacompl;
1019 $totalvat .=
vatrate((
string) abs((
float) $tvakey),
true).$tvacompl;
1022 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $totalvat, 0,
'L',
true);
1026 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
1027 $pdf->MultiCell($largcol2, $tab2_hl,
price($total_localtax, 0, $outputlangs), 0,
'R',
true);
1033 foreach ($docgenerator->localtax2 as $localtax_type => $localtax_rate) {
1034 if (in_array((
string) $localtax_type, array(
'2',
'4',
'6'))) {
1038 foreach ($localtax_rate as $tvakey => $tvaval) {
1040 if ($tvakey != 0 ||
getDolGlobalString(
'INVOICE_SHOW_ALSO_LOCALTAX2_LINE_IF_ZERO')) {
1044 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
1047 if (preg_match(
'/\*/', (
string) $tvakey)) {
1048 $tvakey = str_replace(
'*',
'', (
string) $tvakey);
1049 $tvacompl =
" (".$outputlangs->transnoentities(
"NonPercuRecuperable").
")";
1051 $totalvat = $outputlangs->transcountrynoentities(
"TotalLT2",
$mysoc->country_code).(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transcountrynoentities(
"TotalLT2",
$mysoc->country_code) :
'');
1055 $totalvat .= $tvacompl;
1057 $totalvat .=
vatrate((
string) abs((
float) $tvakey),
true).$tvacompl;
1060 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $totalvat, 0,
'L',
true);
1064 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
1065 $pdf->MultiCell($largcol2, $tab2_hl,
price($total_localtax, 0, $outputlangs), 0,
'R',
true);
1070 $docgenerator->atleastoneratenotnull = $tmpatleastoneratenotnull;
1095function pdfWriteAlreadyPaid($docgenerator, &$index, $pdf, $outputlangs, $outputlangsbis,
$object, $col1x, $col2x, $largcol2, $tab2_top, $tab2_hl, $deja_regle, $creditnoteamount, $depositsamount, $resteapayer, $resteapayer_origin)
1101 if ((($deja_regle > 0 || $creditnoteamount > 0 || $depositsamount > 0) && !
getDolGlobalString(
'INVOICE_NO_PAYMENT_DETAILS'))
1105 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
1106 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $outputlangs->transnoentities(
"Paid").(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transnoentities(
"Paid") :
''), 0,
'L',
false);
1107 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
1109 $pdf->MultiCell($largcol2, $tab2_hl,
price($deja_regle + $depositsamount, 0, $outputlangs), 0,
'R',
false);
1122 if ($creditnoteamount) {
1123 $labeltouse = ($outputlangs->transnoentities(
"CreditNotesOrExcessReceived") !=
"CreditNotesOrExcessReceived") ? $outputlangs->transnoentities(
"CreditNotesOrExcessReceived") : $outputlangs->transnoentities(
"CreditNotes");
1124 $labeltouse .= (is_object($outputlangsbis) ? (
' / '.(($outputlangsbis->transnoentities(
"CreditNotesOrExcessReceived") !=
"CreditNotesOrExcessReceived") ? $outputlangsbis->transnoentities(
"CreditNotesOrExcessReceived") : $outputlangsbis->transnoentities(
"CreditNotes"))) :
'');
1126 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
1127 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $labeltouse, 0,
'L',
false);
1128 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
1129 $pdf->MultiCell($largcol2, $tab2_hl,
price($creditnoteamount, 0, $outputlangs), 0,
'R',
false);
1132 if (
$object->close_code == Facture::CLOSECODE_DISCOUNTVAT) {
1134 $pdf->SetFillColor(255, 255, 255);
1136 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
1137 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $outputlangs->transnoentities(
"EscompteOfferedShort").(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transnoentities(
"EscompteOfferedShort") :
''), $useborder,
'L',
true);
1138 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
1139 $pdf->MultiCell($largcol2, $tab2_hl,
price(
price2num(
$object->total_ttc - $deja_regle - $creditnoteamount - $depositsamount,
'MT'), 0, $outputlangs), $useborder,
'R',
true);
1142 $resteapayer_origin = 0;
1146 $pdf->SetTextColor(0, 0, 60);
1147 $pdf->SetFillColor(224, 224, 224);
1148 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
1149 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $outputlangs->transnoentities(
"RemainderToPay").(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transnoentities(
"RemainderToPay") :
''), $useborder,
'L',
true);
1150 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
1152 $pdf->MultiCell($largcol2, $tab2_hl,
price($resteapayer, 0, $outputlangs), $useborder,
'R',
true);
1154 $pdf->MultiCell($largcol2, $tab2_hl,
price($resteapayer, 0, $outputlangs), $useborder,
'R',
true);
1158 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
1159 $pdf->SetTextColor(0, 0, 60);
1160 $pdf->SetFillColor(224, 224, 224);
1161 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $outputlangs->transnoentities(
"RemainderToPay").(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transnoentities(
"RemainderToPay") :
'').
' ('.$outputlangs->getCurrencySymbol(
$mysoc->currency_code).
')', $useborder,
'L',
true);
1163 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
1164 $pdf->MultiCell($largcol2, $tab2_hl,
price($resteapayer_origin, 0, $outputlangs, 1, -1, -1,
$mysoc->currency_code), $useborder,
'L',
true);
1182 $substitutionarray = getCommonSubstitutionArray($outputlangs, $onlykey, $exclude,
$object, $include);
1183 $substitutionarray[
'__FROM_NAME__'] =
'__FROM_NAME__';
1184 $substitutionarray[
'__FROM_EMAIL__'] =
'__FROM_EMAIL__';
1185 return $substitutionarray;
1203 if ($unit ==
'pt') {
1205 } elseif ($unit ==
'mm') {
1207 } elseif ($unit ==
'cm') {
1209 } elseif ($unit ==
'in') {
1213 dol_print_error(
null,
'Unexpected unit "'.$unit.
'" for pdf_watermark');
1220 $text = $outputlangs->convToOutputCharset($text);
1222 $savx = $pdf->getX();
1223 $savy = $pdf->getY();
1225 $watermark_angle = atan($h / $w) / 2;
1226 $watermark_x_pos = 0;
1227 $watermark_y_pos = $h / 3;
1228 $watermark_x = $w / 2;
1229 $watermark_y = $h / 3;
1230 $pdf->SetFont(
'',
'B', 40);
1231 $pdf->SetTextColor(255, 0, 0);
1234 $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));
1236 $pdf->SetAlpha(0.5);
1237 $pdf->SetXY($watermark_x_pos, $watermark_y_pos);
1240 $pdf->SetAlpha(0.3);
1241 $pdf->Cell($w - 20, 25, $outputlangs->convToOutputCharset($text),
"", 2,
"C",
false);
1246 $pdf->SetXY($savx, $savy);
1264function pdfCertifMention($pdf, $outputlangs, $seller, $default_font_size, &$posy, $pdftemplate)
1266 include_once DOL_DOCUMENT_ROOT.
'/blockedlog/lib/blockedlog.lib.php';
1284function pdf_bank($pdf, $outputlangs, $curx, $cury, $account, $onlynumber = 0, $default_font_size = 10)
1286 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formbank.class.php';
1290 $pdf->SetXY($curx, $cury);
1292 if (empty($onlynumber)) {
1293 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizetitle);
1294 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
'PaymentByTransferOnThisBankAccount').
':', 0,
'L',
false);
1298 $outputlangs->load(
"banks");
1301 $bickey =
"BICNumber";
1302 if ($account->getCountryCode() ==
'IN') {
1307 $usedetailedbban = $account->useDetailedBBAN();
1310 if ($usedetailedbban) {
1313 if (empty($onlynumber)) {
1314 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
1315 $pdf->SetXY($curx, $cury);
1316 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L',
false);
1326 if (empty($onlynumber)) {
1327 $pdf->line($curx + 1, $cury + 1, $curx + 1, $cury + 6);
1330 $bank_number_length = 0;
1331 foreach ($account->getFieldsToShow() as $val) {
1332 $pdf->SetXY($curx, $cury + 4);
1333 $pdf->SetFont(
'',
'', $default_font_size - 3);
1335 if ($val ==
'BankCode') {
1338 $content = $account->code_banque;
1339 } elseif ($val ==
'DeskCode') {
1342 $content = $account->code_guichet;
1343 } elseif ($val ==
'BankAccountNumber') {
1346 $content = $account->number;
1347 } elseif ($val ==
'BankAccountNumberKey') {
1350 $content = $account->cle_rib;
1351 } elseif ($val ==
'IBAN' || $val ==
'BIC') {
1356 dol_print_error($account->db,
'Unexpected value for getFieldsToShow: '.$val);
1360 if ($content ==
'') {
1364 $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($content), 0,
'C',
false);
1365 $pdf->SetXY($curx, $cury + 1);
1366 $curx += $tmplength;
1367 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
1368 $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities($val), 0,
'C',
false);
1369 if (empty($onlynumber)) {
1370 $pdf->line($curx, $cury + 1, $curx, $cury + 7);
1374 $bank_number_length = 8;
1378 $cury += $bank_number_length;
1380 } elseif (!empty($account->number)) {
1381 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
1382 $pdf->SetXY($curx, $cury);
1383 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L',
false);
1386 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
1387 $pdf->SetXY($curx, $cury);
1388 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"BankAccountNumber").
': '.$outputlangs->convToOutputCharset($account->number), 0,
'L',
false);
1391 if ($diffsizecontent <= 2) {
1396 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
1398 if (empty($onlynumber) && !empty($account->address)) {
1399 $pdf->SetXY($curx, $cury);
1400 $val = $outputlangs->transnoentities(
"Residence").
': '.$outputlangs->convToOutputCharset($account->address);
1401 $pdf->MultiCell(100, 3, $val, 0,
'L',
false);
1404 $tmpy = $pdf->getStringHeight(100, $val);
1408 if (!empty($account->owner_name)) {
1409 $pdf->SetXY($curx, $cury);
1410 $val = $outputlangs->transnoentities(
"BankAccountOwner").
': '.$outputlangs->convToOutputCharset($account->owner_name);
1411 $pdf->MultiCell(100, 3, $val, 0,
'L',
false);
1412 $tmpy = $pdf->getStringHeight(100, $val);
1414 } elseif (!$usedetailedbban) {
1421 if (!empty($account->iban)) {
1423 $ibanDisplay_temp = str_replace(
' ',
'', $outputlangs->convToOutputCharset($account->iban));
1426 $nbIbanDisplay_temp =
dol_strlen($ibanDisplay_temp);
1427 for ($i = 0; $i < $nbIbanDisplay_temp; $i++) {
1428 $ibanDisplay .= $ibanDisplay_temp[$i];
1429 if ($i % 4 == 3 && $i > 0) {
1430 $ibanDisplay .=
" ";
1434 $pdf->SetFont(
'',
'B', $default_font_size - 3);
1435 $pdf->SetXY($curx, $cury);
1436 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($ibankey).
': '.$ibanDisplay, 0,
'L',
false);
1440 if (!empty($account->bic)) {
1441 $pdf->SetFont(
'',
'B', $default_font_size - 3);
1442 $pdf->SetXY($curx, $cury);
1443 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($bickey).
': '.$outputlangs->convToOutputCharset($account->bic), 0,
'L',
false);
1446 return $pdf->getY();
1466function pdf_pagefoot($pdf, $outputlangs, $paramfreetext, $fromcompany, $marge_basse, $marge_gauche, $page_hauteur,
$object, $showdetails = 0, $hidefreetext = 0, $page_largeur = 0, $watermark =
'')
1468 global
$conf, $hookmanager;
1470 $outputlangs->load(
"dict");
1473 $marginwithfooter = 0;
1475 $dims = $pdf->getPageDimensions();
1481 if (is_object($fromcompany)) {
1482 $substitutionarray[
'__FROM_NAME__'] = $fromcompany->name;
1483 $substitutionarray[
'__FROM_EMAIL__'] = $fromcompany->email;
1492 $newfreetext = preg_replace(
'/(<img.*src=")[^\"]*viewimage\.php[^\"]*modulepart=medias[^\"]*file=([^\"]*)("[^\/]*\/>)/',
'\1file:/'.DOL_DATA_ROOT.
'/medias/\2\3', $newfreetext);
1494 $line .= $outputlangs->convToOutputCharset($newfreetext);
1503 if (is_object($fromcompany) && in_array($showdetails, array(1, 3))) {
1505 if ($fromcompany->name) {
1506 $line1 .= ($line1 ?
" - " :
"").$outputlangs->transnoentities(
"RegisteredOffice").
": ".$fromcompany->name;
1509 if ($fromcompany->address) {
1510 $line1 .= ($line1 ?
" - " :
"").str_replace(
"\n",
", ", $fromcompany->address);
1513 if ($fromcompany->zip) {
1514 $line1 .= ($line1 ?
" - " :
"").$fromcompany->zip;
1517 if ($fromcompany->town) {
1518 $line1 .= ($line1 ?
" " :
"").$fromcompany->town;
1521 if ($fromcompany->country) {
1522 $line1 .= ($line1 ?
", " :
"").$fromcompany->country;
1525 if ($fromcompany->phone) {
1526 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Phone").
": ".$fromcompany->phone;
1529 if ($fromcompany->fax) {
1530 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Fax").
": ".$fromcompany->fax;
1534 if ($fromcompany->url) {
1535 $line2 .= ($line2 ?
" - " :
"").$fromcompany->url;
1538 if ($fromcompany->email) {
1539 $line2 .= ($line2 ?
" - " :
"").$fromcompany->email;
1542 if ($showdetails == 2 || $showdetails == 3 || (!empty($fromcompany->country_code) && $fromcompany->country_code ==
'DE')) {
1544 if ($fromcompany->managers) {
1545 $line2 .= ($line2 ?
" - " :
"").$fromcompany->managers;
1551 if (!empty($fromcompany->forme_juridique_code)) {
1552 $line3 .= ($line3 ?
" - " :
"").$outputlangs->convToOutputCharset(
getFormeJuridiqueLabel((
string) $fromcompany->forme_juridique_code));
1555 if (!empty($fromcompany->capital)) {
1556 $tmpamounttoshow =
price2num($fromcompany->capital);
1557 if (is_numeric($tmpamounttoshow) && $tmpamounttoshow > 0) {
1558 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf",
price($tmpamounttoshow, 0, $outputlangs, 0, 0, 0,
getDolCurrency()));
1559 } elseif (!empty($fromcompany->capital)) {
1560 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf", (
string) $fromcompany->capital);
1564 if (!empty($fromcompany->idprof1) && ($fromcompany->country_code !=
'FR' || (empty($fromcompany->idprof2) || strpos($fromcompany->idprof2, $fromcompany->idprof1) !== 0))) {
1565 $field = $outputlangs->transcountrynoentities(
"ProfId1", $fromcompany->country_code);
1566 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1569 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof1);
1572 if (!empty($fromcompany->idprof2)) {
1573 $field = $outputlangs->transcountrynoentities(
"ProfId2", $fromcompany->country_code);
1574 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1577 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof2);
1582 if (!empty($fromcompany->idprof3)) {
1583 $field = $outputlangs->transcountrynoentities(
"ProfId3", $fromcompany->country_code);
1584 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1587 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof3);
1590 if (!empty($fromcompany->idprof4)) {
1591 $field = $outputlangs->transcountrynoentities(
"ProfId4", $fromcompany->country_code);
1592 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1595 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof4);
1598 if (!empty($fromcompany->idprof5)) {
1599 $field = $outputlangs->transcountrynoentities(
"ProfId5", $fromcompany->country_code);
1600 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1603 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof5);
1606 if (!empty($fromcompany->idprof6)) {
1607 $field = $outputlangs->transcountrynoentities(
"ProfId6", $fromcompany->country_code);
1608 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1611 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof6);
1614 if (!empty($fromcompany->idprof7)) {
1615 $field = $outputlangs->transcountrynoentities(
"ProfId7", $fromcompany->country_code);
1616 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1619 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof7);
1622 if (!empty($fromcompany->idprof8)) {
1623 $field = $outputlangs->transcountrynoentities(
"ProfId8", $fromcompany->country_code);
1624 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1627 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof8);
1630 if (!empty($fromcompany->idprof9)) {
1631 $field = $outputlangs->transcountrynoentities(
"ProfId9", $fromcompany->country_code);
1632 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1635 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof9);
1638 if (!empty($fromcompany->idprof10)) {
1639 $field = $outputlangs->transcountrynoentities(
"ProfId10", $fromcompany->country_code);
1640 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1643 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof10);
1646 if (!empty($fromcompany->tva_intra) && $fromcompany->tva_intra !=
'') {
1647 $line4 .= ($line4 ?
" - " :
"").$outputlangs->transnoentities(
"VATIntraShort").
": ".$outputlangs->convToOutputCharset($fromcompany->tva_intra);
1650 $pdf->SetFont(
'',
'', 7);
1651 $pdf->SetDrawColor(224, 224, 224);
1658 $pdf->SetTextColor($r, $g, $b);
1662 $freetextheight = 0;
1673 $freetextheight = $pdf->getStringHeight($width, $line);
1682 if (is_object($hookmanager)) {
1683 $parameters = array(
'line1' => $line1,
'line2' => $line2,
'line3' => $line3,
'line4' => $line4,
'outputlangs' => $outputlangs);
1685 $hookmanager->executeHooks(
'pdf_pagefoot', $parameters,
$object, $action);
1686 if (!empty($hookmanager->resPrint) && $hidefreetext == 0) {
1687 $mycustomfooter = $hookmanager->resPrint;
1690 $marginwithfooter = $marge_basse + $freetextheight + $mycustomfooterheight;
1691 $posy = (float) $marginwithfooter;
1699 $pdf->setAutoPageBreak(
false, 0);
1700 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F', array(), $fill_color = array($r, $g, $b));
1701 $pdf->setAutoPageBreak(
true, 0);
1705 $pdf->setAutoPageBreak(
false, 0);
1708 $pdf->SetXY($dims[
'lm'], -$posy);
1710 $pdf->MultiCell(0, 3, $line, 0, $align,
false);
1712 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1714 $posy -= $freetextheight;
1717 $pdf->setAutoPageBreak(
true, 0);
1724 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1735 $pdf->setAutoPageBreak(
false, 0);
1737 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $mycustomfooterheight, $dims[
'lm'], $dims[
'hk'] - $posy,
dol_htmlentitiesbr($mycustomfooter, 1,
'UTF-8', 0));
1739 $pdf->setAutoPageBreak(
true, 0);
1742 $posy -= $mycustomfooterheight - 3;
1745 $marginwithfooter = $marge_basse + $freetextheight + (!empty($line1) ? 3 : 0) + (!empty($line2) ? 3 : 0) + (!empty($line3) ? 3 : 0) + (!empty($line4) ? 3 : 0);
1746 $posy = (float) $marginwithfooter;
1754 $pdf->setAutoPageBreak(
false, 0);
1755 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F', array(), $fill_color = array($r, $g, $b));
1756 $pdf->setAutoPageBreak(
true, 0);
1760 $pdf->setAutoPageBreak(
false, 0);
1763 $pdf->SetXY($dims[
'lm'], -$posy);
1765 $pdf->MultiCell(0, 3, $line, 0, $align,
false);
1767 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1769 $posy -= $freetextheight;
1772 $pdf->setAutoPageBreak(
true, 0);
1781 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1791 if (!empty($line1)) {
1792 $pdf->SetFont(
'',
'B', 7);
1793 $pdf->SetXY($dims[
'lm'], -$posy);
1794 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line1, 0,
'C',
false);
1796 $pdf->SetFont(
'',
'', 7);
1799 if (!empty($line2)) {
1800 $pdf->SetFont(
'',
'B', 7);
1801 $pdf->SetXY($dims[
'lm'], -$posy);
1802 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line2, 0,
'C',
false);
1804 $pdf->SetFont(
'',
'', 7);
1807 if (!empty($line3)) {
1808 $pdf->SetXY($dims[
'lm'], -$posy);
1809 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line3, 0,
'C',
false);
1812 if (!empty($line4)) {
1814 $pdf->SetXY($dims[
'lm'], -$posy);
1815 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line4, 0,
'C',
false);
1822 $pdf->SetXY($dims[
'wk'] - $dims[
'rm'] - 18 -
getDolGlobalInt(
'PDF_FOOTER_PAGE_NUMBER_X', 0), -$posy -
getDolGlobalInt(
'PDF_FOOTER_PAGE_NUMBER_Y', 0));
1824 $pagination = $pdf->PageNo().
' / '.$pdf->getAliasNbPages();
1825 $fontRenderCorrection = 0;
1826 if (in_array(
pdf_getPDFFont($outputlangs), array(
'freemono',
'DejaVuSans'))) {
1827 $fontRenderCorrection = 10;
1829 $pdf->MultiCell(18 + $fontRenderCorrection, 2, $pagination, 0,
'R',
false);
1832 if (!empty($watermark)) {
1833 pdf_watermark($pdf, $outputlangs, $page_hauteur, $page_largeur,
'mm', $watermark);
1836 return $marginwithfooter;
1855 $linkedobjects = pdf_getLinkedObjects(
$object, $outputlangs);
1857 if (!empty($linkedobjects)) {
1858 foreach ($linkedobjects as $linkedobject) {
1859 $reftoshow = $linkedobject[
"ref_title"].
' : '.$linkedobject[
"ref_value"];
1860 if (!empty($linkedobject[
"date_value"])) {
1861 $reftoshow .=
' / '.$linkedobject[
"date_value"];
1865 $pdf->SetXY($posx, $posy);
1866 $pdf->SetFont(
'',
'', (
float) $default_font_size - 2);
1867 $pdf->MultiCell($w, $h, $reftoshow,
'', $align);
1871 return $pdf->getY();
1891function pdf_writelinedesc($pdf,
$object, $i, $outputlangs, $w, $h, $posx, $posy, $hideref = 0, $hidedesc = 0, $issupplierline = 0, $align =
'J')
1893 global $hookmanager;
1898 if (is_object($hookmanager)) {
1899 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1900 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1901 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1903 $parameters = array(
'pdf' => $pdf,
'i' => $i,
'outputlangs' => $outputlangs,
'w' => $w,
'h' => $h,
'posx' => $posx,
'posy' => $posy,
'hideref' => $hideref,
'hidedesc' => $hidedesc,
'issupplierline' => $issupplierline,
'special_code' => $special_code);
1907 $reshook = $hookmanager->executeHooks(
'pdf_writelinedesc', $parameters,
$object, $action);
1909 if (!empty($hookmanager->resPrint)) {
1910 $result .= $hookmanager->resPrint;
1913 if (empty($reshook)) {
1915 $labelproductservice = preg_replace(
'/(<img[^>]*src=")[^\"]*viewimage\.php[^\"]*modulepart=medias[^\"]*file=([^\"]*)/',
'\1file:/'.DOL_DATA_ROOT.
'/medias/\2\3', $labelproductservice, -1, $nbrep);
1922 $labelproductservice = preg_replace(
'/(<img[^>]*src=")([^"]*)(&)([^"]*")/',
'\1\2&\4', $labelproductservice, -1, $nbrep);
1925 $pdf->setListIndentWidth(5);
1926 $TMarginList = [
'ul' => [[
'h' => 0.1, ],[
'h' => 0.1, ]],
'li' => [[
'h' => 0.1, ],],];
1927 $pdf->setHtmlVSpace($TMarginList);
1931 $pdf->writeHTMLCell($w, $h, $posx, $posy, $outputlangs->convToOutputCharset($labelproductservice), 0, 1,
false,
true, $align,
true);
1932 $result .= $labelproductservice;
1950 global $db,
$conf, $langs;
1952 $idprod = (!empty(
$object->lines[$i]->fk_product) ?
$object->lines[$i]->fk_product :
false);
1953 $label = (!empty(
$object->lines[$i]->label) ?
$object->lines[$i]->label : (!empty(
$object->lines[$i]->product_label) ?
$object->lines[$i]->product_label :
''));
1954 $product_barcode = (!empty(
$object->lines[$i]->product_barcode) ?
$object->lines[$i]->product_barcode :
"");
1955 $desc = (!empty(
$object->lines[$i]->desc) ?
$object->lines[$i]->desc : (!empty(
$object->lines[$i]->description) ?
$object->lines[$i]->description :
''));
1956 $ref_supplier = (!empty(
$object->lines[$i]->ref_supplier) ?
$object->lines[$i]->ref_supplier : (!empty(
$object->lines[$i]->ref_fourn) ?
$object->lines[$i]->ref_fourn :
''));
1957 $note = (!empty(
$object->lines[$i]->note) ?
$object->lines[$i]->note :
'');
1958 $dbatch = (!empty(
$object->lines[$i]->detail_batch) ?
$object->lines[$i]->detail_batch :
false);
1962 if ($issupplierline) {
1963 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
1966 include_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
1970 include_once DOL_DOCUMENT_ROOT .
'/product/class/productcustomerprice.class.php';
1975 $idprod = (!empty(
$object->lines[$i]->fk_product) ?
$object->lines[$i]->fk_product :
false);
1977 $prodser->fetch($idprod);
1979 if ($multilangsactive) {
1980 $prodser->getMultiLangs();
1981 $object->lines[$i]->multilangs = $prodser->multilangs;
1985 if (!empty(
$object->lines[$i]->label)) {
1986 $label =
$object->lines[$i]->label;
1988 if (!empty(
$object->lines[$i]->multilangs[$outputlangs->defaultlang][
'label']) && $multilangsactive) {
1989 $label =
$object->lines[$i]->multilangs[$outputlangs->defaultlang][
'label'];
1991 if (!empty(
$object->lines[$i]->product_label)) {
1992 $label =
$object->lines[$i]->product_label;
1999 if (!empty(
$object->lines[$i]->desc)) {
2000 $desc =
$object->lines[$i]->desc;
2002 if (!empty(
$object->lines[$i]->multilangs[$outputlangs->defaultlang][
'description']) && $multilangsactive) {
2003 $desc =
$object->lines[$i]->multilangs[$outputlangs->defaultlang][
'description'];
2005 if (!empty(
$object->lines[$i]->description)) {
2006 $desc =
$object->lines[$i]->description;
2013 $ref_supplier = (!empty(
$object->lines[$i]->ref_supplier) ?
$object->lines[$i]->ref_supplier : (!empty(
$object->lines[$i]->ref_fourn) ?
$object->lines[$i]->ref_fourn :
''));
2015 $note = (!empty(
$object->lines[$i]->note) ?
$object->lines[$i]->note :
'');
2017 $dbatch = (!empty(
$object->lines[$i]->detail_batch) ?
$object->lines[$i]->detail_batch :
false);
2021 if ($multilangsactive && ($outputlangs->defaultlang != $langs->defaultlang)) {
2022 $translatealsoifmodified =
getDolGlobalString(
'MAIN_MULTILANG_TRANSLATE_EVEN_IF_MODIFIED');
2030 $textwasnotmodified = ($label == $prodser->label);
2031 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"label"]) && ($textwasnotmodified || $translatealsoifmodified)) {
2032 $label = $prodser->multilangs[$outputlangs->defaultlang][
"label"];
2037 $textwasnotmodified =
false;
2038 $textdiffersonlybymarkup =
false;
2048 $textwasnotmodified = ($prodtextonly !==
'' && strpos($desctextonly, $prodtextonly) !==
false);
2049 $textdiffersonlybymarkup = ($textwasnotmodified && $desctextonly === $prodtextonly);
2051 $textwasnotmodified = ($desc == $prodser->description);
2053 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"description"])) {
2054 if ($textwasnotmodified) {
2055 if ($textdiffersonlybymarkup && strpos($desc, $prodser->description) ===
false) {
2058 $desc = $prodser->multilangs[$outputlangs->defaultlang][
"description"];
2060 $desc = str_replace($prodser->description, $prodser->multilangs[$outputlangs->defaultlang][
"description"], $desc);
2062 } elseif ($translatealsoifmodified) {
2063 $desc = $prodser->multilangs[$outputlangs->defaultlang][
"description"];
2068 $textwasnotmodified = ($note == $prodser->note_public);
2069 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"other"]) && ($textwasnotmodified || $translatealsoifmodified)) {
2070 $note = $prodser->multilangs[$outputlangs->defaultlang][
"other"];
2073 } elseif ((
$object->element ==
'facture' ||
$object->element ==
'facturefourn') && preg_match(
'/^\(DEPOSIT\).+/', $desc)) {
2074 $desc = str_replace(
'(DEPOSIT)', $outputlangs->trans(
'Deposit'), $desc);
2077 $labelproductservice =
'';
2080 $labelproductservice = $label;
2085 $labelproductservice = str_replace(
"\n",
'<br>', $labelproductservice);
2087 $labelproductservice =
'<b>'.$labelproductservice.
'</b>';
2094 $prodser->get_sousproduits_arbo();
2095 if (!empty($prodser->sousprods) && is_array($prodser->sousprods) && count($prodser->sousprods)) {
2096 $outputlangs->load(
'mrp');
2097 $tmparrayofsubproducts = reset($prodser->sousprods);
2100 if (isset(
$object->lines[$i]->qty) && !empty(
$object->lines[$i]->qty)) {
2101 $qtyText =
$object->lines[$i]->qty;
2102 } elseif (isset(
$object->lines[$i]->qty_shipped) && !empty(
$object->lines[$i]->qty_shipped)) {
2103 $qtyText =
$object->lines[$i]->qty;
2107 foreach ($tmparrayofsubproducts as $subprodval) {
2111 $outputlangs->trans(
'Qty').
':'.$qtyText.
' x '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1].
'= '.$outputlangs->trans(
'QtyTot').
':'.$subprodval[1] * $qtyText :
2112 $outputlangs->trans(
'Qty').
' '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1])
2116 foreach ($tmparrayofsubproducts as $subprodval) {
2118 dol_concatdesc($labelproductservice,
" * ".$subprodval[5].(($subprodval[5] && $subprodval[3]) ?
' - ' :
'').$subprodval[3]),
2120 $outputlangs->trans(
'Qty').
':'.$qtyText.
' x '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1].
'= '.$outputlangs->trans(
'QtyTot').
':'.$subprodval[1] * $qtyText :
2121 $outputlangs->trans(
'Qty').
' '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1])
2129 $labelproductservice =
dol_concatdesc($labelproductservice, $outputlangs->trans(
"BarCode").
" ".$product_barcode);
2133 if (!empty($desc) && ($desc != $label)) {
2134 if ($desc ==
'(CREDIT_NOTE)' &&
$object->lines[$i]->fk_remise_except) {
2136 $discount->fetch(
$object->lines[$i]->fk_remise_except);
2137 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
2138 $labelproductservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromCreditNote", $sourceref);
2139 } elseif ($desc ==
'(DEPOSIT)' &&
$object->lines[$i]->fk_remise_except) {
2141 $discount->fetch(
$object->lines[$i]->fk_remise_except);
2142 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
2143 $labelproductservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromDeposit", $sourceref);
2146 $labelproductservice .=
' ('.dol_print_date($discount->datec,
'day',
'', $outputlangs).
')';
2148 } elseif ($desc ==
'(EXCESS RECEIVED)' &&
$object->lines[$i]->fk_remise_except) {
2150 $discount->fetch(
$object->lines[$i]->fk_remise_except);
2151 $labelproductservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessReceived", $discount->ref_facture_source);
2152 } elseif ($desc ==
'(EXCESS PAID)' &&
$object->lines[$i]->fk_remise_except) {
2154 $discount->fetch(
$object->lines[$i]->fk_remise_except);
2155 $labelproductservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessPaid", $discount->ref_invoice_supplier_source);
2159 if (!empty(
$object->element)) {
2160 $tmpkey =
'MAIN_DOCUMENTS_HIDE_DESCRIPTION_FOR_'.strtoupper(
$object->element);
2165 if (empty($hidedesc)) {
2167 $labelproductservice =
dol_concatdesc($desc, $labelproductservice);
2170 $labelproductservice = $desc;
2172 $labelproductservice =
dol_concatdesc($labelproductservice, $desc);
2177 $labelproductservice =
dol_concatdesc($labelproductservice, $desc);
2183 $prefix_prodserv =
"";
2186 if ($prodser->isService()) {
2187 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Service").
" ";
2189 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Product").
" ";
2193 if (empty($hideref)) {
2194 if ($issupplierline) {
2196 $ref_prodserv = $prodser->ref;
2197 if ($ref_supplier) {
2198 $ref_prodserv .= ($prodser->ref ?
' (' :
'').$outputlangs->transnoentitiesnoconv(
"SupplierRef").
' '.$ref_supplier.($prodser->ref ?
')' :
'');
2200 } elseif (
getDolGlobalInt(
'PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES') == 1) {
2201 $ref_prodserv = $ref_supplier;
2202 } elseif (
getDolGlobalInt(
'PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES') == 2) {
2203 $ref_prodserv = $ref_supplier.
' ('.$outputlangs->transnoentitiesnoconv(
"InternalRef").
' '.$prodser->ref.
')';
2206 $ref_prodserv = $prodser->ref;
2210 $filter = array(
'fk_product' => (
string) $idprod,
'fk_soc' => (
string)
$object->socid);
2212 $nbCustomerPrices = $productCustomerPriceStatic->fetchAll(
'',
'', 1, 0, $filter);
2214 if ($nbCustomerPrices > 0) {
2215 $productCustomerPrice =
null;
2216 if (count($productCustomerPriceStatic->lines) > 0) {
2217 $date_now = (int) floor(
dol_now() / 86400) * 86400;
2218 foreach ($productCustomerPriceStatic->lines as $k => $custprice_line) {
2219 if ($custprice_line->date_begin <= $date_now && (empty($custprice_line->date_end) || $date_now <= $custprice_line->date_end)) {
2220 $productCustomerPrice = $custprice_line;
2226 if (isset($productCustomerPrice) && !empty($productCustomerPrice->ref_customer)) {
2227 $idcustprice =
getDolGlobalInt(
'PRODUIT_CUSTOMER_PRICES_PDF_REF_MODE');
2228 switch ($idcustprice) {
2230 $ref_prodserv = $productCustomerPrice->ref_customer;
2234 $ref_prodserv = $productCustomerPrice->ref_customer .
' (' . $outputlangs->transnoentitiesnoconv(
'InternalRef') .
' ' . $ref_prodserv .
')';
2238 $ref_prodserv = $ref_prodserv .
' (' . $outputlangs->transnoentitiesnoconv(
'RefCustomer') .
' ' . $productCustomerPrice->ref_customer .
')';
2245 if (!empty($labelproductservice) && !empty($ref_prodserv)) {
2246 $ref_prodserv .=
" - ";
2250 if (!empty($ref_prodserv) &&
getDolGlobalString(
'PDF_BOLD_PRODUCT_REF_AND_PERIOD')) {
2252 $labelproductservice = str_replace(
"\n",
'<br>', $labelproductservice);
2254 $ref_prodserv =
'<b>'.$ref_prodserv.
'</b>';
2257 $labelproductservice = $prefix_prodserv.$ref_prodserv.$labelproductservice;
2261 include_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
2264 $tblcateg = $categstatic->containing($idprod, Categorie::TYPE_PRODUCT);
2265 foreach ($tblcateg as $cate) {
2267 $desccateg = $cate->description;
2269 $labelproductservice =
dol_concatdesc($labelproductservice, $desccateg);
2274 if (!empty(
$object->lines[$i]->date_start) || !empty(
$object->lines[$i]->date_end)) {
2278 if (
$object->lines[$i]->date_start &&
$object->lines[$i]->date_end) {
2279 $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)).
')';
2281 if (
$object->lines[$i]->date_start && !
$object->lines[$i]->date_end) {
2282 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateFrom',
dol_print_date(
$object->lines[$i]->date_start, $format,
false, $outputlangs)).
')';
2284 if (!
$object->lines[$i]->date_start &&
$object->lines[$i]->date_end) {
2285 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateUntil',
dol_print_date(
$object->lines[$i]->date_end, $format,
false, $outputlangs)).
')';
2290 $labelproductservice = str_replace(
"\n",
'<br>', $labelproductservice);
2292 $labelproductservice .=
'<br><b style="color:#333666;" ><em>'.$period.
'</em></b>';
2294 $labelproductservice =
dol_concatdesc($labelproductservice, $period);
2300 if (!empty($dbatch)) {
2305 include_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
2306 include_once DOL_DOCUMENT_ROOT.
'/product/class/productbatch.class.php';
2311 foreach ($dbatch as $detail) {
2313 if ($detail->eatby) {
2314 $dte[] = $outputlangs->transnoentitiesnoconv(
'printEatby',
dol_print_date($detail->eatby, $format,
false, $outputlangs));
2316 if ($detail->sellby) {
2317 $dte[] = $outputlangs->transnoentitiesnoconv(
'printSellby',
dol_print_date($detail->sellby, $format,
false, $outputlangs));
2319 if ($detail->batch) {
2320 $dte[] = $outputlangs->transnoentitiesnoconv(
'printBatch', $detail->batch);
2323 $dte[] = $outputlangs->transnoentitiesnoconv(
'printQty', (
string) $detail->qty);
2327 if (
$object->element ==
'shipping' && $detail->fk_origin_stock > 0 &&
getDolGlobalInt(
'PRODUCTBATCH_SHOW_WAREHOUSE_ON_SHIPMENT')) {
2328 $resproductbatch = $tmpproductbatch->fetch($detail->fk_origin_stock);
2329 if ($resproductbatch > 0) {
2330 $reswarehouse = $tmpwarehouse->fetch($tmpproductbatch->warehouseid);
2331 if ($reswarehouse > 0) {
2332 $dte[] = $tmpwarehouse->ref;
2337 $labelproductservice .=
"__N__ ".implode(
" - ", $dte);
2347 $labelproductservice = preg_replace(
'/__N__/',
'<br>', $labelproductservice);
2349 $labelproductservice = preg_replace(
'/__N__/',
"\n", $labelproductservice);
2353 return $labelproductservice;
2367 global $hookmanager;
2372 if (is_object($hookmanager)) {
2373 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2374 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2375 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2377 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2379 $reshook = $hookmanager->executeHooks(
'pdf_getlinenum', $parameters,
$object, $action);
2380 $result .= $hookmanager->resPrint;
2382 if (empty($reshook)) {
2400 global $hookmanager;
2405 if (is_object($hookmanager)) {
2406 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2407 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2408 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2410 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2412 $reshook = $hookmanager->executeHooks(
'pdf_getlineref', $parameters,
$object, $action);
2413 $result .= $hookmanager->resPrint;
2415 if (empty($reshook)) {
2433 global $hookmanager;
2438 if (is_object($hookmanager)) {
2439 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2440 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2441 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2443 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2445 $reshook = $hookmanager->executeHooks(
'pdf_getlineref_supplier', $parameters,
$object, $action);
2446 $result .= $hookmanager->resPrint;
2448 if (empty($reshook)) {
2470 if (is_object($hookmanager)) {
2471 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2472 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2473 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2475 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2477 $reshook = $hookmanager->executeHooks(
'pdf_getlinevatrate', $parameters,
$object, $action);
2479 if (!empty($hookmanager->resPrint)) {
2480 $result .= $hookmanager->resPrint;
2483 if (empty($reshook)) {
2484 if (empty($hidedetails) || $hidedetails > 1) {
2490 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
2495 $tmpresult .=
vatrate((
string) abs(
$object->lines[$i]->localtax1_tx),
false);
2500 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
2505 $tmpresult .=
vatrate((
string) abs(
$object->lines[$i]->localtax2_tx),
false);
2510 $result .= $tmpresult;
2527 global $hookmanager;
2537 if (is_object($hookmanager)) {
2538 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2539 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2540 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2542 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2544 $reshook = $hookmanager->executeHooks(
'pdf_getlineupexcltax', $parameters,
$object, $action);
2546 if (!empty($hookmanager->resPrint)) {
2547 $result .= $hookmanager->resPrint;
2550 if (empty($reshook)) {
2551 if (empty($hidedetails) || $hidedetails > 1) {
2553 $result .=
price($sign * $subprice, 0, $outputlangs);
2570 global $hookmanager;
2580 if (is_object($hookmanager)) {
2581 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2582 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2583 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2585 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2587 $reshook = $hookmanager->executeHooks(
'pdf_getlineupwithtax', $parameters,
$object, $action);
2589 if (!empty($hookmanager->resPrint)) {
2590 $result .= $hookmanager->resPrint;
2593 if (empty($reshook)) {
2594 if (empty($hidedetails) || $hidedetails > 1) {
2595 $result .=
price($sign * ((
$object->lines[$i]->subprice) + (
$object->lines[$i]->subprice) * (
$object->lines[$i]->tva_tx) / 100), 0, $outputlangs);
2612 global $hookmanager;
2617 if (is_object($hookmanager)) {
2618 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2619 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2620 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2622 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2624 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty', $parameters,
$object, $action);
2626 if (!empty($hookmanager->resPrint)) {
2627 $result = $hookmanager->resPrint;
2630 if (empty($reshook)) {
2631 if (
$object->lines[$i]->special_code == 3) {
2634 if (empty($hidedetails) || $hidedetails > 1) {
2635 $result .=
$object->lines[$i]->qty;
2652 global $hookmanager;
2657 if (is_object($hookmanager)) {
2658 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2659 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2660 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2662 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2664 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_asked', $parameters,
$object, $action);
2666 if (!empty($hookmanager->resPrint)) {
2667 $result .= $hookmanager->resPrint;
2670 if (empty($reshook)) {
2671 if (
$object->lines[$i]->special_code == 3) {
2674 if (empty($hidedetails) || $hidedetails > 1) {
2675 $result .=
$object->lines[$i]->qty_asked;
2692 global $hookmanager;
2697 if (is_object($hookmanager)) {
2698 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2699 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2700 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2702 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2704 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_shipped', $parameters,
$object, $action);
2706 if (!empty($hookmanager->resPrint)) {
2707 $result .= $hookmanager->resPrint;
2710 if (empty($reshook)) {
2711 if (
$object->lines[$i]->special_code == 3) {
2714 if (empty($hidedetails) || $hidedetails > 1) {
2715 $result .=
$object->lines[$i]->qty_shipped;
2732 global $hookmanager;
2737 if (is_object($hookmanager)) {
2738 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2739 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2740 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2742 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2744 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_keeptoship', $parameters,
$object, $action);
2746 if (!empty($hookmanager->resPrint)) {
2747 $result .= $hookmanager->resPrint;
2750 if (empty($reshook)) {
2751 if (
$object->lines[$i]->special_code == 3) {
2754 if (empty($hidedetails) || $hidedetails > 1) {
2755 $result .= (
$object->lines[$i]->qty_asked -
$object->lines[$i]->qty_shipped);
2772 global $hookmanager;
2777 if (is_object($hookmanager)) {
2778 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2779 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2780 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2782 $parameters = array(
2784 'outputlangs' => $outputlangs,
2785 'hidedetails' => $hidedetails,
2786 'special_code' => $special_code
2789 $reshook = $hookmanager->executeHooks(
'pdf_getlineunit', $parameters,
$object, $action);
2791 if (!empty($hookmanager->resPrint)) {
2792 $result .= $hookmanager->resPrint;
2795 if (empty($reshook)) {
2796 if (empty($hidedetails) || $hidedetails > 1) {
2797 $result .=
$object->lines[$i]->getLabelOfUnit(
'short', $outputlangs, 1);
2815 global $hookmanager;
2817 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
2822 if (is_object($hookmanager)) {
2823 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2824 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2825 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2827 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2829 $reshook = $hookmanager->executeHooks(
'pdf_getlineremisepercent', $parameters,
$object, $action);
2831 if (!empty($hookmanager->resPrint)) {
2832 $result .= $hookmanager->resPrint;
2835 if (empty($reshook)) {
2836 if (
$object->lines[$i]->special_code == 3) {
2839 if (empty($hidedetails) || $hidedetails > 1) {
2858 if (empty($hookmanager)) {
2859 global $hookmanager;
2865 if (is_object($hookmanager)) {
2866 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2867 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2868 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2870 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2872 $reshook = $hookmanager->executeHooks(
'pdf_getlineprogress', $parameters,
$object, $action);
2874 if (!empty($hookmanager->resPrint)) {
2875 return $hookmanager->resPrint;
2878 if (empty($reshook)) {
2879 if (
$object->lines[$i]->special_code == 3) {
2882 if (empty($hidedetails) || $hidedetails > 1) {
2888 if ($isCumulative xor $showDelta) {
2892 $result =
$object->lines[$i]->situation_percent;
2898 if ($isCumulative) {
2900 if (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2901 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2909 if (method_exists(
$object->lines[$i],
'getAllPrevProgress')) {
2910 $prev_progress =
$object->lines[$i]->getAllPrevProgress(
$object->id);
2911 } elseif (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2912 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2915 $result = $isCumulative ?
2917 $object->lines[$i]->situation_percent - $prev_progress :
2919 $prev_progress +
$object->lines[$i]->situation_percent;
2921 $result = round($result, 1).
'%';
2938 global $hookmanager;
2948 if (is_object($hookmanager)) {
2949 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2950 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2951 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2953 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code,
'sign' => $sign);
2955 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalexcltax', $parameters,
$object, $action);
2957 if (!empty($hookmanager->resPrint)) {
2958 $result .= $hookmanager->resPrint;
2961 if (empty($reshook)) {
2962 if (!empty(
$object->lines[$i]) &&
$object->lines[$i]->special_code == 3) {
2963 $result .= $outputlangs->transnoentities(
"Option");
2964 } elseif (empty($hidedetails) || $hidedetails > 1) {
2966 if (!empty(
$object->lines[$i]->situation_percent) &&
$object->lines[$i]->situation_percent > 0) {
2967 if (method_exists(
$object->lines[$i],
'getSituationRatio')) {
2968 $total_ht *=
$object->lines[$i]->getSituationRatio();
2971 $result .=
price($sign * $total_ht, 0, $outputlangs);
2988 global $hookmanager;
2998 if (is_object($hookmanager)) {
2999 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
3000 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
3001 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
3003 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
3005 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalwithtax', $parameters,
$object, $action);
3007 if (!empty($hookmanager->resPrint)) {
3008 $result .= $hookmanager->resPrint;
3011 if (empty($reshook)) {
3012 if (
$object->lines[$i]->special_code == 3) {
3013 $result .= $outputlangs->transnoentities(
"Option");
3014 } elseif (empty($hidedetails) || $hidedetails > 1) {
3016 if (isset(
$object->lines[$i]->situation_percent) &&
$object->lines[$i]->situation_percent > 0) {
3017 $total_ttc *=
$object->lines[$i]->getSituationRatio();
3019 $result .=
price($sign * $total_ttc, 0, $outputlangs);
3044 if (!empty($objectSocId) && !empty($elementSocId) && $objectSocId != $elementSocId) {
3059function pdf_getLinkedObjects(
$object, $outputlangs)
3061 global $db, $hookmanager;
3063 $linkedobjects = array();
3067 foreach (
$object->linkedObjects as $objecttype => $objects) {
3068 if ($objecttype ==
'facture') {
3070 } elseif ($objecttype ==
'propal' || $objecttype ==
'supplier_proposal') {
3071 '@phan-var-force array<Propal|SupplierProposal> $objects';
3073 $outputlangs->load(
'propal');
3075 foreach ($objects as $elementobject) {
3076 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefProposal");
3077 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
3078 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DatePropal");
3079 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
3081 } elseif ($objecttype ==
'commande' || $objecttype ==
'supplier_order' || $objecttype ==
'order_supplier') {
3082 $optiontohidelinkedorders =
"PDF_HIDE_LINKED_ORDERS_ON_SAME_THIRDPARTY";
3083 if ($objecttype ==
'supplier_order' || $objecttype ==
'order_supplier') {
3084 $optiontohidelinkedorders =
"PDF_HIDE_LINKED_PURCHASE_ORDERS_ON_SAME_THIRDPARTY";
3086 '@phan-var-force array<Commande|CommandeFournisseur> $objects';
3087 $outputlangs->load(
'orders');
3090 if (empty(
$object->context[
'DolPublicNoteAppendedGetLinkedObjects'])) {
3092 foreach ($objects as $elementobject) {
3094 $outputList =
dol_concatdesc($outputList, $outputlangs->transnoentities($elementobject->ref) . (empty($elementobject->ref_client) ?
'' :
' (' . $elementobject->ref_client .
')') . (empty($elementobject->ref_supplier) ?
'' :
' (' . $elementobject->ref_supplier .
')') .
' ');
3095 $outputList =
dol_concatdesc($outputList, $outputlangs->transnoentities(
"OrderDate") .
' : ' .
dol_print_date($elementobject->date,
'day',
'', $outputlangs));
3099 if (!empty($outputList)) {
3105 $elementobject = array_shift($objects);
3107 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder");
3108 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref).(!empty($elementobject->ref_client) ?
' ('.$elementobject->ref_client.
')' :
'').(!empty($elementobject->ref_supplier) ?
' ('.$elementobject->ref_supplier.
')' :
'');
3109 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"OrderDate");
3110 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
3113 } elseif ($objecttype ==
'contrat') {
3114 '@phan-var-force Contrat[] $objects';
3115 $outputlangs->load(
'contracts');
3116 foreach ($objects as $elementobject) {
3118 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefContract");
3119 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
3120 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DateContract");
3121 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date_contrat,
'day',
'', $outputlangs);
3124 } elseif ($objecttype ==
'fichinter') {
3125 '@phan-var-force Fichinter[] $objects';
3126 $outputlangs->load(
'interventions');
3127 foreach ($objects as $elementobject) {
3129 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"InterRef");
3130 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
3131 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"InterDate");
3132 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->datec,
'day',
'', $outputlangs);
3135 } elseif ($objecttype ==
'shipping') {
3136 '@phan-var-force Expedition[] $objects';
3137 $outputlangs->loadLangs(array(
"orders",
"sendings"));
3139 if (count($objects) > 1) {
3143 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
3144 $refListsTxt .= $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending").
' :';
3146 $refListsTxt .= $outputlangs->transnoentities(
"RefSending").
' :';
3149 foreach ($objects as $elementobject) {
3150 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
3151 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
3152 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
3153 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
3155 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
3161 $refListsTxt .= (!empty($refListsTxt) ?
' ' :
'');
3162 if (! is_object($order)) {
3163 $refListsTxt .= $outputlangs->transnoentities($elementobject->ref);
3165 $refListsTxt .= $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
'');
3166 $refListsTxt .=
' / '.$outputlangs->transnoentities($elementobject->ref);
3170 if (empty(
$object->context[
'DolPublicNoteAppendedGetLinkedObjects']) && !
getDolGlobalString(
"PDF_HIDE_LINKED_OBJECT_IN_PUBLIC_NOTE")) {
3173 } elseif (count($objects) == 1) {
3174 $elementobject = array_shift($objects);
3177 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
3178 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
3179 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
3180 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
3182 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
3189 if (! is_object($order)) {
3190 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefSending");
3191 if (empty($linkedobjects[$objecttype][
'ref_value'])) {
3192 $linkedobjects[$objecttype][
'ref_value'] =
'';
3194 $linkedobjects[$objecttype][
'ref_value'] .=
' / ';
3196 $linkedobjects[$objecttype][
'ref_value'] .= $outputlangs->transnoentities($elementobject->ref);
3197 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
3199 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending");
3200 if (empty($linkedobjects[$objecttype][
'ref_value'])) {
3201 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
'');
3203 $linkedobjects[$objecttype][
'ref_value'] .=
' / '.$outputlangs->transnoentities($elementobject->ref);
3204 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
3210 $object->context[
'DolPublicNoteAppendedGetLinkedObjects'] = 1;
3213 if (is_object($hookmanager)) {
3214 $parameters = array(
'linkedobjects' => $linkedobjects,
'outputlangs' => $outputlangs);
3216 $reshook = $hookmanager->executeHooks(
'pdf_getLinkedObjects', $parameters,
$object, $action);
3217 if (empty($reshook)) {
3218 $linkedobjects = array_replace($linkedobjects, $hookmanager->resArray);
3219 } elseif ($reshook > 0) {
3221 $linkedobjects = $hookmanager->resArray;
3225 return $linkedobjects;
3238 $maxheight =
getDolGlobalInt(
'MAIN_DOCUMENTS_WITH_PICTURE_HEIGHT', 32);
3240 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
3244 if ($tmp[
'height']) {
3245 $width = (int) round($maxheight * $tmp[
'width'] / $tmp[
'height']);
3246 if ($width > $maxwidth) {
3248 $height = (int) round($maxwidth * $tmp[
'height'] / $tmp[
'width']);
3250 $height = $maxheight;
3253 return array(
'width' => $width,
'height' => $height);
3269 global $hookmanager;
3275 if (
$object->lines[$i]->special_code == 3) {
3277 return $outputlangs->transnoentities(
"Option");
3279 if (is_object($hookmanager)) {
3280 $special_code =
$object->lines[$i]->special_code;
3281 if (!empty(
$object->lines[$i]->fk_parent_line)) {
3282 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
3285 $parameters = array(
3287 'outputlangs' => $outputlangs,
3288 'hidedetails' => $hidedetails,
3289 'special_code' => $special_code,
3290 'multicurrency' => $multicurrency
3295 if ($hookmanager->executeHooks(
'getlinetotalremise', $parameters,
$object, $action) > 0) {
3296 if (isset($hookmanager->resArray[
'linetotalremise'])) {
3297 return (
float) $hookmanager->resArray[
'linetotalremise'];
3299 return (
float) $hookmanager->resPrint;
3304 if (empty($hidedetails) || $hidedetails > 1) {
3305 if (empty($multicurrency)) {
3307 return (
float)
price2num($diff,
'MT', 1);
3309 $diff = (float)
price2num($sign *
$object->lines[$i]->multicurrency_subprice * (
float)
$object->lines[$i]->qty,
'MT', 1) -
$object->lines[$i]->multicurrency_total_ht;
3310 return (
float)
price2num($diff,
'MT', 1);
3327 return "ERROR: FILE NOT FOUND OR NOT VALID";
3338 $content = preg_replace(
'/[^(\x20-\x7F)]*/',
'', $content);
3339 if (preg_match(
'/\/' . preg_quote($field,
'/') .
'\s*\((.*?)\)/', $content, $matches)) {
3340 return trim($matches[1]);
3342 return "ERROR: NOT FOUND";
3344 return "ERROR: FAILED TO READ PDF";
3375 bool $isSubtotal =
false,
3376 bool $applySubtotalLogic =
true
3378 $savePage = $pdf->getPage();
3379 $saveX = $pdf->GetX();
3380 $prevAlign = $generator->cols[
'desc'][
'content'][
'align'];
3382 if ($isSubtotal && $applySubtotalLogic &&
$object->lines[$i]->qty < 0) {
3383 $outputlangs->load(
"subtotals");
3384 $object->lines[$i]->desc =
getDolGlobalString(
"SUBTOTAL_LINE_TEXT_DOES_NOT_INCLUDE_TITLE_TEXT") ? $outputlangs->trans(
"SubTotal") : $outputlangs->trans(
"SubtotalOf",
$object->lines[$i]->desc);
3385 $generator->cols[
'desc'][
'content'][
'align'] = ($prevAlign ===
'L') ?
'R' :
'L';
3388 $pdf->startTransaction();
3389 $pdf->SetXY($saveX, $curY);
3391 $pageAfter = $pdf->getPage();
3392 $yAfter = $pdf->GetY();
3393 $pdf->rollbackTransaction(
true);
3395 $pdf->SetFillColor($bgColor[0], $bgColor[1], $bgColor[2]);
3396 $width = $generator->page_largeur - $generator->marge_droite - $generator->marge_gauche;
3398 $pdf->SetXY($generator->marge_gauche, $curY);
3399 if ($pageAfter === $savePage) {
3400 $pdf->MultiCell($width, max(0, $yAfter - $curY),
'', 0,
'',
true);
3402 $pdf->MultiCell($width, $pdf->getPageHeight() - $pdf->getBreakMargin() - $curY,
'', 0,
'',
true);
3408 while ($pdf->getNumPages() < $pageAfter) {
3411 $pdf->setPage($pageAfter);
3412 $pdf->SetXY($generator->marge_gauche, $pdf->getMargins()[
'top']);
3413 $pdf->MultiCell($width, max(0, $yAfter - $pdf->getMargins()[
'top']),
'', 0,
'',
true);
3415 $pdf->setPage($savePage);
3418 $pdf->SetTextColor(
colorIsLight(implode(
',', $bgColor)));
3419 $pdf->SetXY($saveX, $curY);
3423 $generator->cols[
'desc'][
'content'][
'align'] = $prevAlign;
3439 if ($ellipsis_pos == 0) {
3442 if ($ellipsis_pos ==
'left') {
3446 if ($ellipsis_pos ==
'right') {
3451 $ellipsis_width = $pdf->GetStringWidth($ellipsis);
3452 $available_width = $max_width - $ellipsis_width;
3454 if ($available_width <= 0) {
3455 return ($ellipsis_pos <= 0) ? $ellipsis :
'';
3458 $text_width = $pdf->GetStringWidth($text);
3459 if ($text_width <= $max_width) {
3463 if ($ellipsis_pos < 0) {
3469 while ($low <= $high) {
3470 $mid = (int) (($low + $high) / 2);
3471 $substring =
dol_substr($text, $mid,
null,
'UTF-8');
3472 $substring_width = $pdf->GetStringWidth($substring);
3474 if ($substring_width <= $available_width) {
3482 return $ellipsis .
dol_substr($text, $best,
null,
'UTF-8');
3489 while ($low <= $high) {
3490 $mid = (int) (($low + $high) / 2);
3491 $substring =
dol_substr($text, 0, $mid,
'UTF-8');
3492 $substring_width = $pdf->GetStringWidth($substring);
3494 if ($substring_width <= $available_width) {
3502 return dol_substr($text, 0, $best,
'UTF-8') . $ellipsis;
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($blockedlogusagealreadychecked=0, $blockedlogmoduleonalreadychecked=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.
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.
getObjectSocId($obj)
Get the socid of an object, supporting legacy attribute names.
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...
dol_substr($string, $start, $length=null, $stringencoding='', $trunconbytes=0)
Make a substring.
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.
colorIsLight($stringcolor)
Return true if the color is light.
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.
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_truncate_text($pdf, $text, $max_width, $ellipsis_pos=1, $ellipsis="\u{2026}")
Truncates text to fit a specified width in TCPDF, with configurable ellipsis position.
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_writeLogoOrCompanyName($pdf, $outputlangs, $emetteur, $logodir, $posx, $posy, $w, $default_font_size, $align)
Output company logo on top-left of a PDF page header, or the company name as fallback text if no logo...
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.