41include_once DOL_DOCUMENT_ROOT.
'/core/lib/signature.lib.php';
56 $head[$h][0] = DOL_URL_ROOT.
'/admin/pdf.php';
57 $head[$h][1] = $langs->trans(
"GlobalParameters");
58 $head[$h][2] =
'general';
68 $head[$h][0] = DOL_URL_ROOT.
'/admin/pdf_other.php';
69 $head[$h][1] = $langs->trans(
"SpecificParameters");
70 $head[$h][2] =
'other';
91 dol_syslog(
"pdf_getFormat Get paper format with mode=".$mode.
" MAIN_PDF_FORMAT=".
getDolGlobalString(
'MAIN_PDF_FORMAT').
" outputlangs->defaultlang=".(is_object($outputlangs) ? $outputlangs->defaultlang :
'null').
" and langs->defaultlang=".(is_object($langs) ? $langs->defaultlang :
'null'));
99 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
105 $sql =
"SELECT code, label, width, height, unit FROM ".MAIN_DB_PREFIX.
"c_paper_format";
106 $sql .=
" WHERE code = '".$db->escape($pdfformat).
"'";
107 $resql =
$db->query($sql);
109 $obj =
$db->fetch_object($resql);
111 $width = (int) $obj->width;
112 $height = (int) $obj->height;
118 return array(
'width' => $width,
'height' => $height,
'unit' => $unit);
134 if (!defined(
'K_TCPDF_EXTERNAL_CONFIG')) {
135 define(
'K_TCPDF_EXTERNAL_CONFIG', 1);
136 define(
'K_PATH_CACHE', DOL_DATA_ROOT.
'/admin/temp/');
137 define(
'K_PATH_URL_CACHE', DOL_DATA_ROOT.
'/admin/temp/');
139 define(
'K_BLANK_IMAGE',
'_blank.png');
140 define(
'PDF_PAGE_FORMAT',
'A4');
141 define(
'PDF_PAGE_ORIENTATION',
'P');
142 define(
'PDF_CREATOR',
'TCPDF');
143 define(
'PDF_AUTHOR',
'TCPDF');
144 define(
'PDF_HEADER_TITLE',
'TCPDF Example');
145 define(
'PDF_HEADER_STRING',
"by Dolibarr ERP CRM");
146 define(
'PDF_UNIT',
'mm');
147 define(
'PDF_MARGIN_HEADER', 5);
148 define(
'PDF_MARGIN_FOOTER', 10);
149 define(
'PDF_MARGIN_TOP', 27);
150 define(
'PDF_MARGIN_BOTTOM', 25);
151 define(
'PDF_MARGIN_LEFT', 15);
152 define(
'PDF_MARGIN_RIGHT', 15);
153 define(
'PDF_FONT_NAME_MAIN',
'helvetica');
154 define(
'PDF_FONT_SIZE_MAIN', 10);
155 define(
'PDF_FONT_NAME_DATA',
'helvetica');
156 define(
'PDF_FONT_SIZE_DATA', 8);
157 define(
'PDF_FONT_MONOSPACED',
'courier');
158 define(
'PDF_IMAGE_SCALE_RATIO', 1.25);
159 define(
'HEAD_MAGNIFICATION', 1.1);
160 define(
'K_CELL_HEIGHT_RATIO', 1.25);
161 define(
'K_TITLE_MAGNIFICATION', 1.3);
162 define(
'K_SMALL_RATIO', 2 / 3);
163 define(
'K_THAI_TOPCHARS',
true);
164 define(
'K_TCPDF_CALLS_IN_HTML',
true);
171 define(
'K_TCPDF_THROW_EXCEPTION_ERROR',
true);
173 define(
'K_TCPDF_THROW_EXCEPTION_ERROR',
false);
178 require_once TCPDF_PATH.
'tcpdf.php';
182 require_once TCPDI_PATH.
'tcpdi.php';
193 $pdf =
new TCPDI($pagetype, $metric, $format,
true,
'UTF-8',
false, $pdfa);
195 $pdf =
new TCPDF($pagetype, $metric, $format,
true,
'UTF-8',
false, $pdfa);
228 $pdf->SetProtection($pdfrights, $pdfuserpass, $pdfownerpass, $encstrength, $pubkeys);
242 require_once TCPDF_PATH.
'tcpdf_parser.php';
244 $isencrypted =
false;
246 $content = file_get_contents($pathoffile);
249 @($parser =
new TCPDF_PARSER(ltrim($content)));
250 $tmp = $parser->getParsedData();
252 $data = $tmp[1] ??
null;
256 if (isset($xref[
'trailer'][
'encrypt'])) {
280 if (class_exists(
'TCPDF')) {
281 if ($outputlangs->trans(
'FONTFORPDF') !=
'FONTFORPDF') {
282 $font = $outputlangs->trans(
'FONTFORPDF');
297 if (class_exists(
'TCPDF')) {
298 if ($outputlangs->trans(
'FONTSIZEFORPDF') !=
'FONTSIZEFORPDF') {
299 $size = (int) $outputlangs->trans(
'FONTSIZEFORPDF');
321 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
323 if ($tmp[
'height']) {
324 $width = round($height * $tmp[
'width'] / $tmp[
'height']);
325 if ($width > $maxwidth) {
326 $height = $height * $maxwidth / $width;
345 $pdf->startTransaction();
350 $start_y = $pdf->GetY();
352 $start_page = $pdf->getPage();
354 $pdf->writeHTMLCell(0, 0, 0, $start_y, $htmlcontent, 0, 1,
false,
true,
'J',
true);
356 $end_y = $pdf->GetY();
357 $end_page = $pdf->getPage();
360 if ($end_page == $start_page) {
361 $height = $end_y - $start_y;
363 for ($page = $start_page; $page <= $end_page; ++$page) {
364 $pdf->setPage($page);
365 $tmpm = $pdf->getMargins();
366 $tMargin = $tmpm[
'top'];
367 if ($page == $start_page) {
369 $height = $pdf->getPageHeight() - $start_y - $pdf->getBreakMargin();
370 } elseif ($page == $end_page) {
372 $height = $end_y - $tMargin;
374 $height = $pdf->getPageHeight() - $tMargin - $pdf->getBreakMargin();
379 $pdf->rollbackTransaction(
true);
398 if ($thirdparty instanceof
Societe) {
399 $socname = $thirdparty->name;
400 if (($includealias ||
getDolGlobalInt(
'PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) && !empty($thirdparty->name_alias)) {
402 $socname = $thirdparty->name_alias.
" - ".$thirdparty->name;
404 $socname = $thirdparty->name.
" - ".$thirdparty->name_alias;
407 } elseif ($thirdparty instanceof
Contact) {
408 if ($thirdparty->socid > 0) {
409 $thirdparty->fetch_thirdparty();
410 $socname = $thirdparty->thirdparty->name;
411 if (($includealias ||
getDolGlobalInt(
'PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) && !empty($thirdparty->thirdparty->name_alias)) {
413 $socname = $thirdparty->thirdparty->name_alias.
" - ".$thirdparty->thirdparty->name;
415 $socname = $thirdparty->thirdparty->name.
" - ".$thirdparty->thirdparty->name_alias;
420 throw new InvalidArgumentException(
'Parameter 1 $thirdparty is not a Societe nor Contact');
423 return $outputlangs->convToOutputCharset((
string) $socname);
438function pdf_build_address($outputlangs, $sourcecompany, $targetcompany =
'', $targetcontact =
'', $usecontact = 0, $mode =
'source',
$object =
null)
442 if ($mode ==
'source' && !is_object($sourcecompany)) {
445 if ($mode ==
'target' && !is_object($targetcompany)) {
449 if (!empty($sourcecompany->state_id) && empty($sourcecompany->state)) {
450 $sourcecompany->state =
getState($sourcecompany->state_id);
452 if (!empty($targetcompany->state_id) && empty($targetcompany->state)) {
453 $targetcompany->state =
getState($targetcompany->state_id);
458 if (is_object($hookmanager)) {
459 $parameters = array(
'sourcecompany' => &$sourcecompany,
'targetcompany' => &$targetcompany,
'targetcontact' => &$targetcontact,
'outputlangs' => $outputlangs,
'mode' => $mode,
'usecontact' => $usecontact);
462 $reshook = $hookmanager->executeHooks(
'pdf_build_address', $parameters,
$object, $action);
463 $stringaddress .= $hookmanager->resPrint;
465 if (empty($reshook)) {
466 if ($mode ==
'source') {
468 if (isset($targetcompany->country_code) && !empty($sourcecompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
474 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($fulladdress).
"\n";
479 if ($sourcecompany->phone) {
480 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"PhoneShort").
": ".$outputlangs->convToOutputCharset($sourcecompany->phone);
483 if ($sourcecompany->phone_mobile &&
getDolGlobalString(
'MAIN_PDF_SHOW_SOURCE_PHONE_MOBILE')) {
484 $stringaddress .= ($stringaddress ? ($sourcecompany->phone ?
" - " :
"\n") :
'').$outputlangs->transnoentities(
"PhoneShort").
": ".$outputlangs->convToOutputCharset($sourcecompany->phone_mobile);
487 if ($sourcecompany->fax) {
488 $stringaddress .= ($stringaddress ? ($sourcecompany->phone ?
" - " :
"\n") :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($sourcecompany->fax);
491 if ($sourcecompany->email) {
492 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($sourcecompany->email);
495 if ($sourcecompany->url) {
496 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($sourcecompany->url);
501 if ($sourcecompany->tva_intra) {
502 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($sourcecompany->tva_intra);
507 if (
getDolGlobalString(
'MAIN_PROFID1_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof1)) {
508 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $sourcecompany->country_code);
509 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
512 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof1);
514 if (
getDolGlobalString(
'MAIN_PROFID2_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof2)) {
515 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $sourcecompany->country_code);
516 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
519 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof2);
521 if (
getDolGlobalString(
'MAIN_PROFID3_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof3)) {
522 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $sourcecompany->country_code);
523 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
526 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof3);
528 if (
getDolGlobalString(
'MAIN_PROFID4_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof4)) {
529 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $sourcecompany->country_code);
530 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
533 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof4);
535 if (
getDolGlobalString(
'MAIN_PROFID5_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof5)) {
536 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $sourcecompany->country_code);
537 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
540 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof5);
542 if (
getDolGlobalString(
'MAIN_PROFID6_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof6)) {
543 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $sourcecompany->country_code);
544 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
547 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof6);
550 $stringaddress .= ($stringaddress ?
"\n" :
'') .
getDolGlobalString(
'PDF_ADD_MORE_AFTER_SOURCE_ADDRESS');
554 if ($mode ==
'target' || preg_match(
'/targetwithdetails/', $mode)) {
555 if ($usecontact && (is_object($targetcontact))) {
556 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($targetcontact->getFullName($outputlangs, 1));
558 if (!empty($targetcontact->address)) {
559 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcontact)).
"\n";
560 } elseif (is_object($targetcompany)) {
561 $companytouseforaddress = $targetcompany;
564 if ($targetcontact->socid > 0 && $targetcontact->socid != $targetcompany->id) {
565 $targetcontact->fetch_thirdparty();
566 $companytouseforaddress = $targetcontact->thirdparty;
569 if (is_object($companytouseforaddress)) {
570 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($companytouseforaddress)).
"\n";
574 if (!empty($targetcontact->country_code) && $targetcontact->country_code != $sourcecompany->country_code) {
575 $stringaddress .= (($stringaddress && !
getDolGlobalString(
'MAIN_PDF_REMOVE_BREAK_BEFORE_COUNTRY')) ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcontact->country_code));
576 } elseif (empty($targetcontact->country_code) && !empty($targetcompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
577 $stringaddress .= (($stringaddress && !
getDolGlobalString(
'MAIN_PDF_REMOVE_BREAK_BEFORE_COUNTRY')) ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
580 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || preg_match(
'/targetwithdetails/', $mode)) {
582 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
583 if (!empty($targetcontact->phone_pro) || !empty($targetcontact->phone_mobile)) {
584 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
586 if (!empty($targetcontact->phone_pro)) {
587 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_pro);
589 if (!empty($targetcontact->phone_pro) && !empty($targetcontact->phone_mobile)) {
590 $stringaddress .=
" / ";
592 if (!empty($targetcontact->phone_mobile)) {
593 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_mobile);
597 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
598 if ($targetcontact->fax) {
599 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcontact->fax);
603 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
604 if ($targetcontact->email) {
605 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcontact->email);
609 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
610 if ($targetcontact->url) {
611 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset((
string) $targetcontact->url);
616 if (is_object($targetcompany)) {
617 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcompany));
619 if (!empty($targetcompany->country_code) && $targetcompany->country_code != $sourcecompany->country_code) {
620 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
622 $stringaddress .= ($stringaddress ?
"\n" :
'');
625 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || preg_match(
'/targetwithdetails/', $mode)) {
627 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
628 if (!empty($targetcompany->phone) || !empty($targetcompany->phone_mobile)) {
629 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
631 if (!empty($targetcompany->phone)) {
632 $stringaddress .= $outputlangs->convToOutputCharset($targetcompany->phone);
634 if (!empty($targetcompany->phone) && !empty($targetcompany->phone_mobile)) {
635 $stringaddress .=
" / ";
637 if (!empty($targetcompany->phone_mobile)) {
638 $stringaddress .= $outputlangs->convToOutputCharset($targetcompany->phone_mobile);
642 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
643 if ($targetcompany->fax) {
644 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcompany->fax);
648 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
649 if ($targetcompany->email) {
650 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcompany->email);
654 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
655 if ($targetcompany->url) {
656 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($targetcompany->url);
665 if ($usecontact && is_object($targetcontact) &&
getDolGlobalInt(
'MAIN_USE_COMPANY_NAME_OF_CONTACT')) {
666 $targetcontact->fetch_thirdparty();
667 if (!empty($targetcontact->thirdparty->id) && $targetcontact->thirdparty->tva_intra) {
668 $stringaddress .= ($stringaddress ?
"\n" :
'') . $outputlangs->transnoentities(
"VATIntraShort") .
': ' . $outputlangs->convToOutputCharset($targetcontact->thirdparty->tva_intra);
670 } elseif (!empty($targetcompany->tva_intra)) {
671 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($targetcompany->tva_intra);
676 if (
getDolGlobalString(
'MAIN_LEGALFORM_IN_ADDRESS') && !empty($targetcompany->forme_juridique_code)) {
678 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp;
682 if (
getDolGlobalString(
'MAIN_PROFID1_IN_ADDRESS') && !empty($targetcompany->idprof1)) {
683 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $targetcompany->country_code);
684 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
687 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof1);
689 if (
getDolGlobalString(
'MAIN_PROFID2_IN_ADDRESS') && !empty($targetcompany->idprof2)) {
690 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $targetcompany->country_code);
691 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
694 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof2);
696 if (
getDolGlobalString(
'MAIN_PROFID3_IN_ADDRESS') && !empty($targetcompany->idprof3)) {
697 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $targetcompany->country_code);
698 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
701 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof3);
703 if (
getDolGlobalString(
'MAIN_PROFID4_IN_ADDRESS') && !empty($targetcompany->idprof4)) {
704 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $targetcompany->country_code);
705 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
708 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof4);
710 if (
getDolGlobalString(
'MAIN_PROFID5_IN_ADDRESS') && !empty($targetcompany->idprof5)) {
711 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $targetcompany->country_code);
712 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
715 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof5);
717 if (
getDolGlobalString(
'MAIN_PROFID6_IN_ADDRESS') && !empty($targetcompany->idprof6)) {
718 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $targetcompany->country_code);
719 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
722 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof6);
727 if ($mode ==
'source' && !empty($sourcecompany->note_public)) {
728 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($sourcecompany->note_public);
730 if (($mode ==
'target' || preg_match(
'/targetwithdetails/', $mode)) && !empty($targetcompany->note_public)) {
731 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($targetcompany->note_public);
737 return $stringaddress;
756 if (file_exists($filepath)) {
757 $pdf->setAutoPageBreak(
false, 0);
766 $pdf->setAutoPageBreak(
true, 0);
790 include_once DOL_DOCUMENT_ROOT.
'/blockedlog/lib/blockedlog.lib.php';
812function pdfWriteVATArray($docgenerator, &$index, $pdf, $outputlangs, $outputlangsbis,
$object, $col1x, $col2x, $largcol2, $tab2_top, $tab2_hl)
816 $tmpatleastoneratenotnull = 0;
819 foreach ($docgenerator->localtax1 as $localtax_type => $localtax_rate) {
820 if (in_array((
string) $localtax_type, array(
'1',
'3',
'5'))) {
824 foreach ($localtax_rate as $tvakey => $tvaval) {
829 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
832 if (preg_match(
'/\*/', (
string) $tvakey)) {
833 $tvakey = str_replace(
'*',
'', (
string) $tvakey);
834 $tvacompl =
" (".$outputlangs->transnoentities(
"NonPercuRecuperable").
")";
837 $totalvat = $outputlangs->transcountrynoentities(
"TotalLT1",
$mysoc->country_code).(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transcountrynoentities(
"TotalLT1",
$mysoc->country_code) :
'');
841 $totalvat .= $tvacompl;
843 $totalvat .=
vatrate((
string) abs((
float) $tvakey),
true).$tvacompl;
846 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $totalvat, 0,
'L',
true);
850 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
851 $pdf->MultiCell($largcol2, $tab2_hl,
price($total_localtax, 0, $outputlangs), 0,
'R',
true);
857 foreach ($docgenerator->localtax2 as $localtax_type => $localtax_rate) {
858 if (in_array((
string) $localtax_type, array(
'1',
'3',
'5'))) {
862 foreach ($localtax_rate as $tvakey => $tvaval) {
867 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
870 if (preg_match(
'/\*/', (
string) $tvakey)) {
871 $tvakey = str_replace(
'*',
'', (
string) $tvakey);
872 $tvacompl =
" (".$outputlangs->transnoentities(
"NonPercuRecuperable").
")";
874 $totalvat = $outputlangs->transcountrynoentities(
"TotalLT2",
$mysoc->country_code).(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transcountrynoentities(
"TotalLT2",
$mysoc->country_code) :
'');
878 $totalvat .= $tvacompl;
880 $totalvat .=
vatrate((
string) abs((
float) $tvakey),
true).$tvacompl;
883 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $totalvat, 0,
'L',
true);
887 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
888 $pdf->MultiCell($largcol2, $tab2_hl,
price($total_localtax, 0, $outputlangs), 0,
'R',
true);
896 foreach ($docgenerator->tva as $tvakey => $tvaval) {
897 $sum_pdf_tva += $tvaval;
900 if ($sum_pdf_tva !=
$object->total_tva) {
901 if (!empty($sum_pdf_tva)) {
902 $coef_fix_tva =
$object->total_tva / $sum_pdf_tva;
908 foreach ($docgenerator->tva as $tvakey => $tvaval) {
909 $docgenerator->tva[$tvakey] = $tvaval * $coef_fix_tva;
911 foreach ($docgenerator->tva_array as $tvakey => $tvaval) {
912 $docgenerator->tva_array[$tvakey][
'amount'] = $tvaval[
'amount'] * $coef_fix_tva;
919 foreach ($docgenerator->tva_array as $tvakey => $tvaval) {
921 $tmpatleastoneratenotnull++;
924 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
927 if (preg_match(
'/\*/', $tvakey)) {
928 $tvakey = str_replace(
'*',
'', $tvakey);
929 $tvacompl =
" (".$outputlangs->transnoentities(
"NonPercuRecuperable").
")";
931 $totalvat = $outputlangs->transcountrynoentities(
"TotalVAT",
$mysoc->country_code).(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transcountrynoentities(
"TotalVAT",
$mysoc->country_code) :
'');
934 $totalvat .=
vatrate((
string) $tvaval[
'vatrate'],
true).$tvacompl;
936 $totalvat .= $tvaval[
'vatcode'].$tvacompl;
938 $totalvat .= $tvacompl;
940 $totalvat .=
vatrate((
string) $tvaval[
'vatrate'],
true).($tvaval[
'vatcode'] ?
' ('.$tvaval[
'vatcode'].
')' :
'').$tvacompl;
943 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $totalvat, 0,
'L',
true);
945 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
947 $pdf->MultiCell($largcol2, $tab2_hl,
price(
price2num($tvaval[
'amount'],
'MT'), 0, $outputlangs), 0,
'R',
true);
953 foreach ($docgenerator->localtax1 as $localtax_type => $localtax_rate) {
954 if (in_array((
string) $localtax_type, array(
'2',
'4',
'6'))) {
958 foreach ($localtax_rate as $tvakey => $tvaval) {
963 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
966 if (preg_match(
'/\*/', (
string) $tvakey)) {
967 $tvakey = str_replace(
'*',
'', (
string) $tvakey);
968 $tvacompl =
" (".$outputlangs->transnoentities(
"NonPercuRecuperable").
")";
970 $totalvat = $outputlangs->transcountrynoentities(
"TotalLT1",
$mysoc->country_code).(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transcountrynoentities(
"TotalLT1",
$mysoc->country_code) :
'');
974 $totalvat .= $tvacompl;
976 $totalvat .=
vatrate((
string) abs((
float) $tvakey),
true).$tvacompl;
979 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $totalvat, 0,
'L',
true);
983 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
984 $pdf->MultiCell($largcol2, $tab2_hl,
price($total_localtax, 0, $outputlangs), 0,
'R',
true);
990 foreach ($docgenerator->localtax2 as $localtax_type => $localtax_rate) {
991 if (in_array((
string) $localtax_type, array(
'2',
'4',
'6'))) {
995 foreach ($localtax_rate as $tvakey => $tvaval) {
1001 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
1004 if (preg_match(
'/\*/', (
string) $tvakey)) {
1005 $tvakey = str_replace(
'*',
'', (
string) $tvakey);
1006 $tvacompl =
" (".$outputlangs->transnoentities(
"NonPercuRecuperable").
")";
1008 $totalvat = $outputlangs->transcountrynoentities(
"TotalLT2",
$mysoc->country_code).(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transcountrynoentities(
"TotalLT2",
$mysoc->country_code) :
'');
1012 $totalvat .= $tvacompl;
1014 $totalvat .=
vatrate((
string) abs((
float) $tvakey),
true).$tvacompl;
1017 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $totalvat, 0,
'L',
true);
1021 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
1022 $pdf->MultiCell($largcol2, $tab2_hl,
price($total_localtax, 0, $outputlangs), 0,
'R',
true);
1027 $docgenerator->atleastoneratenotnull = $tmpatleastoneratenotnull;
1052function pdfWriteAlreadyPaid($docgenerator, &$index, $pdf, $outputlangs, $outputlangsbis,
$object, $col1x, $col2x, $largcol2, $tab2_top, $tab2_hl, $deja_regle, $creditnoteamount, $depositsamount, $resteapayer, $resteapayer_origin)
1058 if ((($deja_regle > 0 || $creditnoteamount > 0 || $depositsamount > 0) && !
getDolGlobalString(
'INVOICE_NO_PAYMENT_DETAILS'))
1062 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
1063 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $outputlangs->transnoentities(
"Paid").(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transnoentities(
"Paid") :
''), 0,
'L',
false);
1064 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
1066 $pdf->MultiCell($largcol2, $tab2_hl,
price($deja_regle + $depositsamount, 0, $outputlangs), 0,
'R',
false);
1079 if ($creditnoteamount) {
1080 $labeltouse = ($outputlangs->transnoentities(
"CreditNotesOrExcessReceived") !=
"CreditNotesOrExcessReceived") ? $outputlangs->transnoentities(
"CreditNotesOrExcessReceived") : $outputlangs->transnoentities(
"CreditNotes");
1081 $labeltouse .= (is_object($outputlangsbis) ? (
' / '.(($outputlangsbis->transnoentities(
"CreditNotesOrExcessReceived") !=
"CreditNotesOrExcessReceived") ? $outputlangsbis->transnoentities(
"CreditNotesOrExcessReceived") : $outputlangsbis->transnoentities(
"CreditNotes"))) :
'');
1083 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
1084 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $labeltouse, 0,
'L',
false);
1085 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
1086 $pdf->MultiCell($largcol2, $tab2_hl,
price($creditnoteamount, 0, $outputlangs), 0,
'R',
false);
1089 if (
$object->close_code == Facture::CLOSECODE_DISCOUNTVAT) {
1091 $pdf->SetFillColor(255, 255, 255);
1093 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
1094 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $outputlangs->transnoentities(
"EscompteOfferedShort").(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transnoentities(
"EscompteOfferedShort") :
''), $useborder,
'L',
true);
1095 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
1096 $pdf->MultiCell($largcol2, $tab2_hl,
price(
price2num(
$object->total_ttc - $deja_regle - $creditnoteamount - $depositsamount,
'MT'), 0, $outputlangs), $useborder,
'R',
true);
1099 $resteapayer_origin = 0;
1103 $pdf->SetTextColor(0, 0, 60);
1104 $pdf->SetFillColor(224, 224, 224);
1105 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
1106 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $outputlangs->transnoentities(
"RemainderToPay").(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transnoentities(
"RemainderToPay") :
''), $useborder,
'L',
true);
1107 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
1109 $pdf->MultiCell($largcol2, $tab2_hl,
price($resteapayer, 0, $outputlangs), $useborder,
'R',
true);
1111 $pdf->MultiCell($largcol2, $tab2_hl,
price($resteapayer, 0, $outputlangs), $useborder,
'R',
true);
1115 $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
1116 $pdf->SetTextColor(0, 0, 60);
1117 $pdf->SetFillColor(224, 224, 224);
1118 $pdf->MultiCell($col2x - $col1x, $tab2_hl, $outputlangs->transnoentities(
"RemainderToPay").(is_object($outputlangsbis) ?
' / '.$outputlangsbis->transnoentities(
"RemainderToPay") :
'').
' ('.$outputlangs->getCurrencySymbol(
$mysoc->currency_code).
')', $useborder,
'L',
true);
1120 $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
1121 $pdf->MultiCell($largcol2, $tab2_hl,
price($resteapayer_origin, 0, $outputlangs, 1, -1, -1,
$mysoc->currency_code), $useborder,
'L',
true);
1139 $substitutionarray = getCommonSubstitutionArray($outputlangs, $onlykey, $exclude,
$object, $include);
1140 $substitutionarray[
'__FROM_NAME__'] =
'__FROM_NAME__';
1141 $substitutionarray[
'__FROM_EMAIL__'] =
'__FROM_EMAIL__';
1142 return $substitutionarray;
1160 if ($unit ==
'pt') {
1162 } elseif ($unit ==
'mm') {
1164 } elseif ($unit ==
'cm') {
1166 } elseif ($unit ==
'in') {
1170 dol_print_error(
null,
'Unexpected unit "'.$unit.
'" for pdf_watermark');
1177 $text = $outputlangs->convToOutputCharset($text);
1179 $savx = $pdf->getX();
1180 $savy = $pdf->getY();
1182 $watermark_angle = atan($h / $w) / 2;
1183 $watermark_x_pos = 0;
1184 $watermark_y_pos = $h / 3;
1185 $watermark_x = $w / 2;
1186 $watermark_y = $h / 3;
1187 $pdf->SetFont(
'',
'B', 40);
1188 $pdf->SetTextColor(255, 0, 0);
1191 $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));
1193 $pdf->SetAlpha(0.5);
1194 $pdf->SetXY($watermark_x_pos, $watermark_y_pos);
1197 $pdf->SetAlpha(0.3);
1198 $pdf->Cell($w - 20, 25, $outputlangs->convToOutputCharset($text),
"", 2,
"C",
false);
1203 $pdf->SetXY($savx, $savy);
1221function pdfCertifMention($pdf, $outputlangs, $seller, $default_font_size, &$posy, $pdftemplate)
1223 include_once DOL_DOCUMENT_ROOT.
'/blockedlog/lib/blockedlog.lib.php';
1241function pdf_bank($pdf, $outputlangs, $curx, $cury, $account, $onlynumber = 0, $default_font_size = 10)
1243 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formbank.class.php';
1247 $pdf->SetXY($curx, $cury);
1249 if (empty($onlynumber)) {
1250 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizetitle);
1251 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
'PaymentByTransferOnThisBankAccount').
':', 0,
'L',
false);
1255 $outputlangs->load(
"banks");
1258 $bickey =
"BICNumber";
1259 if ($account->getCountryCode() ==
'IN') {
1264 $usedetailedbban = $account->useDetailedBBAN();
1267 if ($usedetailedbban) {
1270 if (empty($onlynumber)) {
1271 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
1272 $pdf->SetXY($curx, $cury);
1273 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L',
false);
1283 if (empty($onlynumber)) {
1284 $pdf->line($curx + 1, $cury + 1, $curx + 1, $cury + 6);
1287 $bank_number_length = 0;
1288 foreach ($account->getFieldsToShow() as $val) {
1289 $pdf->SetXY($curx, $cury + 4);
1290 $pdf->SetFont(
'',
'', $default_font_size - 3);
1292 if ($val ==
'BankCode') {
1295 $content = $account->code_banque;
1296 } elseif ($val ==
'DeskCode') {
1299 $content = $account->code_guichet;
1300 } elseif ($val ==
'BankAccountNumber') {
1303 $content = $account->number;
1304 } elseif ($val ==
'BankAccountNumberKey') {
1307 $content = $account->cle_rib;
1308 } elseif ($val ==
'IBAN' || $val ==
'BIC') {
1313 dol_print_error($account->db,
'Unexpected value for getFieldsToShow: '.$val);
1317 if ($content ==
'') {
1321 $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($content), 0,
'C',
false);
1322 $pdf->SetXY($curx, $cury + 1);
1323 $curx += $tmplength;
1324 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
1325 $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities($val), 0,
'C',
false);
1326 if (empty($onlynumber)) {
1327 $pdf->line($curx, $cury + 1, $curx, $cury + 7);
1331 $bank_number_length = 8;
1335 $cury += $bank_number_length;
1337 } elseif (!empty($account->number)) {
1338 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
1339 $pdf->SetXY($curx, $cury);
1340 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L',
false);
1343 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
1344 $pdf->SetXY($curx, $cury);
1345 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"BankAccountNumber").
': '.$outputlangs->convToOutputCharset($account->number), 0,
'L',
false);
1348 if ($diffsizecontent <= 2) {
1353 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
1355 if (empty($onlynumber) && !empty($account->address)) {
1356 $pdf->SetXY($curx, $cury);
1357 $val = $outputlangs->transnoentities(
"Residence").
': '.$outputlangs->convToOutputCharset($account->address);
1358 $pdf->MultiCell(100, 3, $val, 0,
'L',
false);
1361 $tmpy = $pdf->getStringHeight(100, $val);
1365 if (!empty($account->owner_name)) {
1366 $pdf->SetXY($curx, $cury);
1367 $val = $outputlangs->transnoentities(
"BankAccountOwner").
': '.$outputlangs->convToOutputCharset($account->owner_name);
1368 $pdf->MultiCell(100, 3, $val, 0,
'L',
false);
1369 $tmpy = $pdf->getStringHeight(100, $val);
1371 } elseif (!$usedetailedbban) {
1378 if (!empty($account->iban)) {
1380 $ibanDisplay_temp = str_replace(
' ',
'', $outputlangs->convToOutputCharset($account->iban));
1383 $nbIbanDisplay_temp =
dol_strlen($ibanDisplay_temp);
1384 for ($i = 0; $i < $nbIbanDisplay_temp; $i++) {
1385 $ibanDisplay .= $ibanDisplay_temp[$i];
1386 if ($i % 4 == 3 && $i > 0) {
1387 $ibanDisplay .=
" ";
1391 $pdf->SetFont(
'',
'B', $default_font_size - 3);
1392 $pdf->SetXY($curx, $cury);
1393 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($ibankey).
': '.$ibanDisplay, 0,
'L',
false);
1397 if (!empty($account->bic)) {
1398 $pdf->SetFont(
'',
'B', $default_font_size - 3);
1399 $pdf->SetXY($curx, $cury);
1400 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($bickey).
': '.$outputlangs->convToOutputCharset($account->bic), 0,
'L',
false);
1403 return $pdf->getY();
1423function pdf_pagefoot($pdf, $outputlangs, $paramfreetext, $fromcompany, $marge_basse, $marge_gauche, $page_hauteur,
$object, $showdetails = 0, $hidefreetext = 0, $page_largeur = 0, $watermark =
'')
1425 global
$conf, $hookmanager;
1427 $outputlangs->load(
"dict");
1430 $marginwithfooter = 0;
1432 $dims = $pdf->getPageDimensions();
1438 if (is_object($fromcompany)) {
1439 $substitutionarray[
'__FROM_NAME__'] = $fromcompany->name;
1440 $substitutionarray[
'__FROM_EMAIL__'] = $fromcompany->email;
1449 $newfreetext = preg_replace(
'/(<img.*src=")[^\"]*viewimage\.php[^\"]*modulepart=medias[^\"]*file=([^\"]*)("[^\/]*\/>)/',
'\1file:/'.DOL_DATA_ROOT.
'/medias/\2\3', $newfreetext);
1451 $line .= $outputlangs->convToOutputCharset($newfreetext);
1460 if (is_object($fromcompany) && in_array($showdetails, array(1, 3))) {
1462 if ($fromcompany->name) {
1463 $line1 .= ($line1 ?
" - " :
"").$outputlangs->transnoentities(
"RegisteredOffice").
": ".$fromcompany->name;
1466 if ($fromcompany->address) {
1467 $line1 .= ($line1 ?
" - " :
"").str_replace(
"\n",
", ", $fromcompany->address);
1470 if ($fromcompany->zip) {
1471 $line1 .= ($line1 ?
" - " :
"").$fromcompany->zip;
1474 if ($fromcompany->town) {
1475 $line1 .= ($line1 ?
" " :
"").$fromcompany->town;
1478 if ($fromcompany->country) {
1479 $line1 .= ($line1 ?
", " :
"").$fromcompany->country;
1482 if ($fromcompany->phone) {
1483 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Phone").
": ".$fromcompany->phone;
1486 if ($fromcompany->fax) {
1487 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Fax").
": ".$fromcompany->fax;
1491 if ($fromcompany->url) {
1492 $line2 .= ($line2 ?
" - " :
"").$fromcompany->url;
1495 if ($fromcompany->email) {
1496 $line2 .= ($line2 ?
" - " :
"").$fromcompany->email;
1499 if ($showdetails == 2 || $showdetails == 3 || (!empty($fromcompany->country_code) && $fromcompany->country_code ==
'DE')) {
1501 if ($fromcompany->managers) {
1502 $line2 .= ($line2 ?
" - " :
"").$fromcompany->managers;
1508 if (!empty($fromcompany->forme_juridique_code)) {
1509 $line3 .= ($line3 ?
" - " :
"").$outputlangs->convToOutputCharset(
getFormeJuridiqueLabel((
string) $fromcompany->forme_juridique_code));
1512 if (!empty($fromcompany->capital)) {
1513 $tmpamounttoshow =
price2num($fromcompany->capital);
1514 if (is_numeric($tmpamounttoshow) && $tmpamounttoshow > 0) {
1515 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf",
price($tmpamounttoshow, 0, $outputlangs, 0, 0, 0,
getDolCurrency()));
1516 } elseif (!empty($fromcompany->capital)) {
1517 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf", (
string) $fromcompany->capital);
1521 if (!empty($fromcompany->idprof1) && ($fromcompany->country_code !=
'FR' || (empty($fromcompany->idprof2) || strpos($fromcompany->idprof2, $fromcompany->idprof1) !== 0))) {
1522 $field = $outputlangs->transcountrynoentities(
"ProfId1", $fromcompany->country_code);
1523 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1526 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof1);
1529 if (!empty($fromcompany->idprof2)) {
1530 $field = $outputlangs->transcountrynoentities(
"ProfId2", $fromcompany->country_code);
1531 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1534 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof2);
1539 if (!empty($fromcompany->idprof3)) {
1540 $field = $outputlangs->transcountrynoentities(
"ProfId3", $fromcompany->country_code);
1541 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1544 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof3);
1547 if (!empty($fromcompany->idprof4)) {
1548 $field = $outputlangs->transcountrynoentities(
"ProfId4", $fromcompany->country_code);
1549 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1552 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof4);
1555 if (!empty($fromcompany->idprof5)) {
1556 $field = $outputlangs->transcountrynoentities(
"ProfId5", $fromcompany->country_code);
1557 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1560 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof5);
1563 if (!empty($fromcompany->idprof6)) {
1564 $field = $outputlangs->transcountrynoentities(
"ProfId6", $fromcompany->country_code);
1565 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1568 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof6);
1571 if (!empty($fromcompany->idprof7)) {
1572 $field = $outputlangs->transcountrynoentities(
"ProfId7", $fromcompany->country_code);
1573 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1576 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof7);
1579 if (!empty($fromcompany->idprof8)) {
1580 $field = $outputlangs->transcountrynoentities(
"ProfId8", $fromcompany->country_code);
1581 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1584 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof8);
1587 if (!empty($fromcompany->idprof9)) {
1588 $field = $outputlangs->transcountrynoentities(
"ProfId9", $fromcompany->country_code);
1589 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1592 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof9);
1595 if (!empty($fromcompany->idprof10)) {
1596 $field = $outputlangs->transcountrynoentities(
"ProfId10", $fromcompany->country_code);
1597 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1600 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof10);
1603 if (!empty($fromcompany->tva_intra) && $fromcompany->tva_intra !=
'') {
1604 $line4 .= ($line4 ?
" - " :
"").$outputlangs->transnoentities(
"VATIntraShort").
": ".$outputlangs->convToOutputCharset($fromcompany->tva_intra);
1607 $pdf->SetFont(
'',
'', 7);
1608 $pdf->SetDrawColor(224, 224, 224);
1615 $pdf->SetTextColor($r, $g, $b);
1619 $freetextheight = 0;
1630 $freetextheight = $pdf->getStringHeight($width, $line);
1639 if (is_object($hookmanager)) {
1640 $parameters = array(
'line1' => $line1,
'line2' => $line2,
'line3' => $line3,
'line4' => $line4,
'outputlangs' => $outputlangs);
1642 $hookmanager->executeHooks(
'pdf_pagefoot', $parameters,
$object, $action);
1643 if (!empty($hookmanager->resPrint) && $hidefreetext == 0) {
1644 $mycustomfooter = $hookmanager->resPrint;
1647 $marginwithfooter = $marge_basse + $freetextheight + $mycustomfooterheight;
1648 $posy = (float) $marginwithfooter;
1656 $pdf->setAutoPageBreak(
false, 0);
1657 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F', array(), $fill_color = array($r, $g, $b));
1658 $pdf->setAutoPageBreak(
true, 0);
1662 $pdf->setAutoPageBreak(
false, 0);
1665 $pdf->SetXY($dims[
'lm'], -$posy);
1667 $pdf->MultiCell(0, 3, $line, 0, $align,
false);
1669 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1671 $posy -= $freetextheight;
1674 $pdf->setAutoPageBreak(
true, 0);
1681 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1692 $pdf->setAutoPageBreak(
false, 0);
1694 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $mycustomfooterheight, $dims[
'lm'], $dims[
'hk'] - $posy,
dol_htmlentitiesbr($mycustomfooter, 1,
'UTF-8', 0));
1696 $pdf->setAutoPageBreak(
true, 0);
1699 $posy -= $mycustomfooterheight - 3;
1702 $marginwithfooter = $marge_basse + $freetextheight + (!empty($line1) ? 3 : 0) + (!empty($line2) ? 3 : 0) + (!empty($line3) ? 3 : 0) + (!empty($line4) ? 3 : 0);
1703 $posy = (float) $marginwithfooter;
1711 $pdf->setAutoPageBreak(
false, 0);
1712 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F', array(), $fill_color = array($r, $g, $b));
1713 $pdf->setAutoPageBreak(
true, 0);
1717 $pdf->setAutoPageBreak(
false, 0);
1720 $pdf->SetXY($dims[
'lm'], -$posy);
1722 $pdf->MultiCell(0, 3, $line, 0, $align,
false);
1724 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1726 $posy -= $freetextheight;
1729 $pdf->setAutoPageBreak(
true, 0);
1738 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1748 if (!empty($line1)) {
1749 $pdf->SetFont(
'',
'B', 7);
1750 $pdf->SetXY($dims[
'lm'], -$posy);
1751 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line1, 0,
'C',
false);
1753 $pdf->SetFont(
'',
'', 7);
1756 if (!empty($line2)) {
1757 $pdf->SetFont(
'',
'B', 7);
1758 $pdf->SetXY($dims[
'lm'], -$posy);
1759 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line2, 0,
'C',
false);
1761 $pdf->SetFont(
'',
'', 7);
1764 if (!empty($line3)) {
1765 $pdf->SetXY($dims[
'lm'], -$posy);
1766 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line3, 0,
'C',
false);
1769 if (!empty($line4)) {
1771 $pdf->SetXY($dims[
'lm'], -$posy);
1772 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line4, 0,
'C',
false);
1779 $pdf->SetXY($dims[
'wk'] - $dims[
'rm'] - 18 -
getDolGlobalInt(
'PDF_FOOTER_PAGE_NUMBER_X', 0), -$posy -
getDolGlobalInt(
'PDF_FOOTER_PAGE_NUMBER_Y', 0));
1781 $pagination = $pdf->PageNo().
' / '.$pdf->getAliasNbPages();
1782 $fontRenderCorrection = 0;
1783 if (in_array(
pdf_getPDFFont($outputlangs), array(
'freemono',
'DejaVuSans'))) {
1784 $fontRenderCorrection = 10;
1786 $pdf->MultiCell(18 + $fontRenderCorrection, 2, $pagination, 0,
'R',
false);
1789 if (!empty($watermark)) {
1790 pdf_watermark($pdf, $outputlangs, $page_hauteur, $page_largeur,
'mm', $watermark);
1793 return $marginwithfooter;
1812 $linkedobjects = pdf_getLinkedObjects(
$object, $outputlangs);
1814 if (!empty($linkedobjects)) {
1815 foreach ($linkedobjects as $linkedobject) {
1816 $reftoshow = $linkedobject[
"ref_title"].
' : '.$linkedobject[
"ref_value"];
1817 if (!empty($linkedobject[
"date_value"])) {
1818 $reftoshow .=
' / '.$linkedobject[
"date_value"];
1822 $pdf->SetXY($posx, $posy);
1823 $pdf->SetFont(
'',
'', (
float) $default_font_size - 2);
1824 $pdf->MultiCell($w, $h, $reftoshow,
'', $align);
1828 return $pdf->getY();
1848function pdf_writelinedesc($pdf,
$object, $i, $outputlangs, $w, $h, $posx, $posy, $hideref = 0, $hidedesc = 0, $issupplierline = 0, $align =
'J')
1850 global $hookmanager;
1855 if (is_object($hookmanager)) {
1856 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1857 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1858 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1860 $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);
1864 $reshook = $hookmanager->executeHooks(
'pdf_writelinedesc', $parameters,
$object, $action);
1866 if (!empty($hookmanager->resPrint)) {
1867 $result .= $hookmanager->resPrint;
1870 if (empty($reshook)) {
1872 $labelproductservice = preg_replace(
'/(<img[^>]*src=")[^\"]*viewimage\.php[^\"]*modulepart=medias[^\"]*file=([^\"]*)/',
'\1file:/'.DOL_DATA_ROOT.
'/medias/\2\3', $labelproductservice, -1, $nbrep);
1879 $labelproductservice = preg_replace(
'/(<img[^>]*src=")([^"]*)(&)([^"]*")/',
'\1\2&\4', $labelproductservice, -1, $nbrep);
1882 $pdf->setListIndentWidth(5);
1883 $TMarginList = [
'ul' => [[
'h' => 0.1, ],[
'h' => 0.1, ]],
'li' => [[
'h' => 0.1, ],],];
1884 $pdf->setHtmlVSpace($TMarginList);
1888 $pdf->writeHTMLCell($w, $h, $posx, $posy, $outputlangs->convToOutputCharset($labelproductservice), 0, 1,
false,
true, $align,
true);
1889 $result .= $labelproductservice;
1909 $idprod = (!empty(
$object->lines[$i]->fk_product) ?
$object->lines[$i]->fk_product :
false);
1910 $label = (!empty(
$object->lines[$i]->label) ?
$object->lines[$i]->label : (!empty(
$object->lines[$i]->product_label) ?
$object->lines[$i]->product_label :
''));
1911 $product_barcode = (!empty(
$object->lines[$i]->product_barcode) ?
$object->lines[$i]->product_barcode :
"");
1912 $desc = (!empty(
$object->lines[$i]->desc) ?
$object->lines[$i]->desc : (!empty(
$object->lines[$i]->description) ?
$object->lines[$i]->description :
''));
1913 $ref_supplier = (!empty(
$object->lines[$i]->ref_supplier) ?
$object->lines[$i]->ref_supplier : (!empty(
$object->lines[$i]->ref_fourn) ?
$object->lines[$i]->ref_fourn :
''));
1914 $note = (!empty(
$object->lines[$i]->note) ?
$object->lines[$i]->note :
'');
1915 $dbatch = (!empty(
$object->lines[$i]->detail_batch) ?
$object->lines[$i]->detail_batch :
false);
1919 if ($issupplierline) {
1920 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
1923 include_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
1927 include_once DOL_DOCUMENT_ROOT .
'/product/class/productcustomerprice.class.php';
1932 $idprod = (!empty(
$object->lines[$i]->fk_product) ?
$object->lines[$i]->fk_product :
false);
1934 $prodser->fetch($idprod);
1936 if ($multilangsactive) {
1937 $prodser->getMultiLangs();
1938 $object->lines[$i]->multilangs = $prodser->multilangs;
1942 if (!empty(
$object->lines[$i]->label)) {
1943 $label =
$object->lines[$i]->label;
1945 if (!empty(
$object->lines[$i]->multilangs[$outputlangs->defaultlang][
'label']) && $multilangsactive) {
1946 $label =
$object->lines[$i]->multilangs[$outputlangs->defaultlang][
'label'];
1948 if (!empty(
$object->lines[$i]->product_label)) {
1949 $label =
$object->lines[$i]->product_label;
1956 if (!empty(
$object->lines[$i]->desc)) {
1957 $desc =
$object->lines[$i]->desc;
1959 if (!empty(
$object->lines[$i]->multilangs[$outputlangs->defaultlang][
'description']) && $multilangsactive) {
1960 $desc =
$object->lines[$i]->multilangs[$outputlangs->defaultlang][
'description'];
1962 if (!empty(
$object->lines[$i]->description)) {
1963 $desc =
$object->lines[$i]->description;
1970 $ref_supplier = (!empty(
$object->lines[$i]->ref_supplier) ?
$object->lines[$i]->ref_supplier : (!empty(
$object->lines[$i]->ref_fourn) ?
$object->lines[$i]->ref_fourn :
''));
1972 $note = (!empty(
$object->lines[$i]->note) ?
$object->lines[$i]->note :
'');
1974 $dbatch = (!empty(
$object->lines[$i]->detail_batch) ?
$object->lines[$i]->detail_batch :
false);
1978 if ($multilangsactive && ($outputlangs->defaultlang != $langs->defaultlang)) {
1979 $translatealsoifmodified =
getDolGlobalString(
'MAIN_MULTILANG_TRANSLATE_EVEN_IF_MODIFIED');
1987 $textwasnotmodified = ($label == $prodser->label);
1988 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"label"]) && ($textwasnotmodified || $translatealsoifmodified)) {
1989 $label = $prodser->multilangs[$outputlangs->defaultlang][
"label"];
1994 $textwasnotmodified =
false;
1995 $textdiffersonlybymarkup =
false;
2005 $textwasnotmodified = ($prodtextonly !==
'' && strpos($desctextonly, $prodtextonly) !==
false);
2006 $textdiffersonlybymarkup = ($textwasnotmodified && $desctextonly === $prodtextonly);
2008 $textwasnotmodified = ($desc == $prodser->description);
2010 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"description"])) {
2011 if ($textwasnotmodified) {
2012 if ($textdiffersonlybymarkup && strpos($desc, $prodser->description) ===
false) {
2015 $desc = $prodser->multilangs[$outputlangs->defaultlang][
"description"];
2017 $desc = str_replace($prodser->description, $prodser->multilangs[$outputlangs->defaultlang][
"description"], $desc);
2019 } elseif ($translatealsoifmodified) {
2020 $desc = $prodser->multilangs[$outputlangs->defaultlang][
"description"];
2025 $textwasnotmodified = ($note == $prodser->note_public);
2026 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"other"]) && ($textwasnotmodified || $translatealsoifmodified)) {
2027 $note = $prodser->multilangs[$outputlangs->defaultlang][
"other"];
2030 } elseif ((
$object->element ==
'facture' ||
$object->element ==
'facturefourn') && preg_match(
'/^\(DEPOSIT\).+/', $desc)) {
2031 $desc = str_replace(
'(DEPOSIT)', $outputlangs->trans(
'Deposit'), $desc);
2034 $libelleproduitservice =
'';
2037 $libelleproduitservice = $label;
2038 if (!empty($libelleproduitservice) &&
getDolGlobalString(
'PDF_BOLD_PRODUCT_LABEL')) {
2042 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
2044 $libelleproduitservice =
'<b>'.$libelleproduitservice.
'</b>';
2051 $prodser->get_sousproduits_arbo();
2052 if (!empty($prodser->sousprods) && is_array($prodser->sousprods) && count($prodser->sousprods)) {
2053 $outputlangs->load(
'mrp');
2054 $tmparrayofsubproducts = reset($prodser->sousprods);
2057 if (isset(
$object->lines[$i]->qty) && !empty(
$object->lines[$i]->qty)) {
2058 $qtyText =
$object->lines[$i]->qty;
2059 } elseif (isset(
$object->lines[$i]->qty_shipped) && !empty(
$object->lines[$i]->qty_shipped)) {
2060 $qtyText =
$object->lines[$i]->qty;
2064 foreach ($tmparrayofsubproducts as $subprodval) {
2068 $outputlangs->trans(
'Qty').
':'.$qtyText.
' x '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1].
'= '.$outputlangs->trans(
'QtyTot').
':'.$subprodval[1] * $qtyText :
2069 $outputlangs->trans(
'Qty').
' '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1])
2073 foreach ($tmparrayofsubproducts as $subprodval) {
2075 dol_concatdesc($libelleproduitservice,
" * ".$subprodval[5].(($subprodval[5] && $subprodval[3]) ?
' - ' :
'').$subprodval[3]),
2077 $outputlangs->trans(
'Qty').
':'.$qtyText.
' x '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1].
'= '.$outputlangs->trans(
'QtyTot').
':'.$subprodval[1] * $qtyText :
2078 $outputlangs->trans(
'Qty').
' '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1])
2086 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $outputlangs->trans(
"BarCode").
" ".$product_barcode);
2090 if (!empty($desc) && ($desc != $label)) {
2091 if ($desc ==
'(CREDIT_NOTE)' &&
$object->lines[$i]->fk_remise_except) {
2093 $discount->fetch(
$object->lines[$i]->fk_remise_except);
2094 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
2095 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromCreditNote", $sourceref);
2096 } elseif ($desc ==
'(DEPOSIT)' &&
$object->lines[$i]->fk_remise_except) {
2098 $discount->fetch(
$object->lines[$i]->fk_remise_except);
2099 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
2100 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromDeposit", $sourceref);
2103 $libelleproduitservice .=
' ('.dol_print_date($discount->datec,
'day',
'', $outputlangs).
')';
2105 } elseif ($desc ==
'(EXCESS RECEIVED)' &&
$object->lines[$i]->fk_remise_except) {
2107 $discount->fetch(
$object->lines[$i]->fk_remise_except);
2108 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessReceived", $discount->ref_facture_source);
2109 } elseif ($desc ==
'(EXCESS PAID)' &&
$object->lines[$i]->fk_remise_except) {
2111 $discount->fetch(
$object->lines[$i]->fk_remise_except);
2112 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessPaid", $discount->ref_invoice_supplier_source);
2116 if (!empty(
$object->element)) {
2117 $tmpkey =
'MAIN_DOCUMENTS_HIDE_DESCRIPTION_FOR_'.strtoupper(
$object->element);
2122 if (empty($hidedesc)) {
2124 $libelleproduitservice =
dol_concatdesc($desc, $libelleproduitservice);
2127 $libelleproduitservice = $desc;
2129 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
2134 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
2140 $prefix_prodserv =
"";
2143 if ($prodser->isService()) {
2144 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Service").
" ";
2146 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Product").
" ";
2150 if (empty($hideref)) {
2151 if ($issupplierline) {
2153 $ref_prodserv = $prodser->ref;
2154 if ($ref_supplier) {
2155 $ref_prodserv .= ($prodser->ref ?
' (' :
'').$outputlangs->transnoentitiesnoconv(
"SupplierRef").
' '.$ref_supplier.($prodser->ref ?
')' :
'');
2157 } elseif (
getDolGlobalInt(
'PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES') == 1) {
2158 $ref_prodserv = $ref_supplier;
2159 } elseif (
getDolGlobalInt(
'PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES') == 2) {
2160 $ref_prodserv = $ref_supplier.
' ('.$outputlangs->transnoentitiesnoconv(
"InternalRef").
' '.$prodser->ref.
')';
2163 $ref_prodserv = $prodser->ref;
2167 $filter = array(
'fk_product' => (
string) $idprod,
'fk_soc' => (
string)
$object->socid);
2169 $nbCustomerPrices = $productCustomerPriceStatic->fetchAll(
'',
'', 1, 0, $filter);
2171 if ($nbCustomerPrices > 0) {
2172 $productCustomerPrice =
null;
2173 if (count($productCustomerPriceStatic->lines) > 0) {
2174 $date_now = (int) floor(
dol_now() / 86400) * 86400;
2175 foreach ($productCustomerPriceStatic->lines as $k => $custprice_line) {
2176 if ($custprice_line->date_begin <= $date_now && (empty($custprice_line->date_end) || $date_now <= $custprice_line->date_end)) {
2177 $productCustomerPrice = $custprice_line;
2183 if (isset($productCustomerPrice) && !empty($productCustomerPrice->ref_customer)) {
2184 $idcustprice =
getDolGlobalInt(
'PRODUIT_CUSTOMER_PRICES_PDF_REF_MODE');
2185 switch ($idcustprice) {
2187 $ref_prodserv = $productCustomerPrice->ref_customer;
2191 $ref_prodserv = $productCustomerPrice->ref_customer .
' (' . $outputlangs->transnoentitiesnoconv(
'InternalRef') .
' ' . $ref_prodserv .
')';
2195 $ref_prodserv = $ref_prodserv .
' (' . $outputlangs->transnoentitiesnoconv(
'RefCustomer') .
' ' . $productCustomerPrice->ref_customer .
')';
2202 if (!empty($libelleproduitservice) && !empty($ref_prodserv)) {
2203 $ref_prodserv .=
" - ";
2207 if (!empty($ref_prodserv) &&
getDolGlobalString(
'PDF_BOLD_PRODUCT_REF_AND_PERIOD')) {
2209 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
2211 $ref_prodserv =
'<b>'.$ref_prodserv.
'</b>';
2214 $libelleproduitservice = $prefix_prodserv.$ref_prodserv.$libelleproduitservice;
2218 include_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
2221 $tblcateg = $categstatic->containing($idprod, Categorie::TYPE_PRODUCT);
2222 foreach ($tblcateg as $cate) {
2224 $desccateg = $cate->description;
2226 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desccateg);
2231 if (!empty(
$object->lines[$i]->date_start) || !empty(
$object->lines[$i]->date_end)) {
2235 if (
$object->lines[$i]->date_start &&
$object->lines[$i]->date_end) {
2236 $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)).
')';
2238 if (
$object->lines[$i]->date_start && !
$object->lines[$i]->date_end) {
2239 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateFrom',
dol_print_date(
$object->lines[$i]->date_start, $format,
false, $outputlangs)).
')';
2241 if (!
$object->lines[$i]->date_start &&
$object->lines[$i]->date_end) {
2242 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateUntil',
dol_print_date(
$object->lines[$i]->date_end, $format,
false, $outputlangs)).
')';
2247 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
2249 $libelleproduitservice .=
'<br><b style="color:#333666;" ><em>'.$period.
'</em></b>';
2251 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $period);
2257 if (!empty($dbatch)) {
2262 include_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
2263 include_once DOL_DOCUMENT_ROOT.
'/product/class/productbatch.class.php';
2268 foreach ($dbatch as $detail) {
2270 if ($detail->eatby) {
2271 $dte[] = $outputlangs->transnoentitiesnoconv(
'printEatby',
dol_print_date($detail->eatby, $format,
false, $outputlangs));
2273 if ($detail->sellby) {
2274 $dte[] = $outputlangs->transnoentitiesnoconv(
'printSellby',
dol_print_date($detail->sellby, $format,
false, $outputlangs));
2276 if ($detail->batch) {
2277 $dte[] = $outputlangs->transnoentitiesnoconv(
'printBatch', $detail->batch);
2280 $dte[] = $outputlangs->transnoentitiesnoconv(
'printQty', (
string) $detail->qty);
2284 if (
$object->element ==
'shipping' && $detail->fk_origin_stock > 0 &&
getDolGlobalInt(
'PRODUCTBATCH_SHOW_WAREHOUSE_ON_SHIPMENT')) {
2285 $resproductbatch = $tmpproductbatch->fetch($detail->fk_origin_stock);
2286 if ($resproductbatch > 0) {
2287 $reswarehouse = $tmpwarehouse->fetch($tmpproductbatch->warehouseid);
2288 if ($reswarehouse > 0) {
2289 $dte[] = $tmpwarehouse->ref;
2294 $libelleproduitservice .=
"__N__ ".implode(
" - ", $dte);
2304 $libelleproduitservice = preg_replace(
'/__N__/',
'<br>', $libelleproduitservice);
2306 $libelleproduitservice = preg_replace(
'/__N__/',
"\n", $libelleproduitservice);
2310 return $libelleproduitservice;
2324 global $hookmanager;
2329 if (is_object($hookmanager)) {
2330 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2331 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2332 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2334 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2336 $reshook = $hookmanager->executeHooks(
'pdf_getlinenum', $parameters,
$object, $action);
2337 $result .= $hookmanager->resPrint;
2339 if (empty($reshook)) {
2357 global $hookmanager;
2362 if (is_object($hookmanager)) {
2363 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2364 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2365 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2367 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2369 $reshook = $hookmanager->executeHooks(
'pdf_getlineref', $parameters,
$object, $action);
2370 $result .= $hookmanager->resPrint;
2372 if (empty($reshook)) {
2390 global $hookmanager;
2395 if (is_object($hookmanager)) {
2396 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2397 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2398 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2400 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2402 $reshook = $hookmanager->executeHooks(
'pdf_getlineref_supplier', $parameters,
$object, $action);
2403 $result .= $hookmanager->resPrint;
2405 if (empty($reshook)) {
2427 if (is_object($hookmanager)) {
2428 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2429 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2430 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2432 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2434 $reshook = $hookmanager->executeHooks(
'pdf_getlinevatrate', $parameters,
$object, $action);
2436 if (!empty($hookmanager->resPrint)) {
2437 $result .= $hookmanager->resPrint;
2440 if (empty($reshook)) {
2441 if (empty($hidedetails) || $hidedetails > 1) {
2447 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
2452 $tmpresult .=
vatrate((
string) abs(
$object->lines[$i]->localtax1_tx),
false);
2457 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
2462 $tmpresult .=
vatrate((
string) abs(
$object->lines[$i]->localtax2_tx),
false);
2467 $result .= $tmpresult;
2484 global $hookmanager;
2494 if (is_object($hookmanager)) {
2495 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2496 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2497 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2499 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2501 $reshook = $hookmanager->executeHooks(
'pdf_getlineupexcltax', $parameters,
$object, $action);
2503 if (!empty($hookmanager->resPrint)) {
2504 $result .= $hookmanager->resPrint;
2507 if (empty($reshook)) {
2508 if (empty($hidedetails) || $hidedetails > 1) {
2510 $result .=
price($sign * $subprice, 0, $outputlangs);
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_getlineupwithtax', $parameters,
$object, $action);
2546 if (!empty($hookmanager->resPrint)) {
2547 $result .= $hookmanager->resPrint;
2550 if (empty($reshook)) {
2551 if (empty($hidedetails) || $hidedetails > 1) {
2552 $result .=
price($sign * ((
$object->lines[$i]->subprice) + (
$object->lines[$i]->subprice) * (
$object->lines[$i]->tva_tx) / 100), 0, $outputlangs);
2569 global $hookmanager;
2574 if (is_object($hookmanager)) {
2575 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2576 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2577 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2579 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2581 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty', $parameters,
$object, $action);
2583 if (!empty($hookmanager->resPrint)) {
2584 $result = $hookmanager->resPrint;
2587 if (empty($reshook)) {
2588 if (
$object->lines[$i]->special_code == 3) {
2591 if (empty($hidedetails) || $hidedetails > 1) {
2592 $result .=
$object->lines[$i]->qty;
2609 global $hookmanager;
2614 if (is_object($hookmanager)) {
2615 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2616 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2617 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2619 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2621 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_asked', $parameters,
$object, $action);
2623 if (!empty($hookmanager->resPrint)) {
2624 $result .= $hookmanager->resPrint;
2627 if (empty($reshook)) {
2628 if (
$object->lines[$i]->special_code == 3) {
2631 if (empty($hidedetails) || $hidedetails > 1) {
2632 $result .=
$object->lines[$i]->qty_asked;
2649 global $hookmanager;
2654 if (is_object($hookmanager)) {
2655 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2656 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2657 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2659 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2661 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_shipped', $parameters,
$object, $action);
2663 if (!empty($hookmanager->resPrint)) {
2664 $result .= $hookmanager->resPrint;
2667 if (empty($reshook)) {
2668 if (
$object->lines[$i]->special_code == 3) {
2671 if (empty($hidedetails) || $hidedetails > 1) {
2672 $result .=
$object->lines[$i]->qty_shipped;
2689 global $hookmanager;
2694 if (is_object($hookmanager)) {
2695 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2696 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2697 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2699 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2701 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_keeptoship', $parameters,
$object, $action);
2703 if (!empty($hookmanager->resPrint)) {
2704 $result .= $hookmanager->resPrint;
2707 if (empty($reshook)) {
2708 if (
$object->lines[$i]->special_code == 3) {
2711 if (empty($hidedetails) || $hidedetails > 1) {
2712 $result .= (
$object->lines[$i]->qty_asked -
$object->lines[$i]->qty_shipped);
2729 global $hookmanager;
2734 if (is_object($hookmanager)) {
2735 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2736 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2737 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2739 $parameters = array(
2741 'outputlangs' => $outputlangs,
2742 'hidedetails' => $hidedetails,
2743 'special_code' => $special_code
2746 $reshook = $hookmanager->executeHooks(
'pdf_getlineunit', $parameters,
$object, $action);
2748 if (!empty($hookmanager->resPrint)) {
2749 $result .= $hookmanager->resPrint;
2752 if (empty($reshook)) {
2753 if (empty($hidedetails) || $hidedetails > 1) {
2754 $result .=
$object->lines[$i]->getLabelOfUnit(
'short', $outputlangs, 1);
2772 global $hookmanager;
2774 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
2779 if (is_object($hookmanager)) {
2780 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2781 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2782 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2784 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2786 $reshook = $hookmanager->executeHooks(
'pdf_getlineremisepercent', $parameters,
$object, $action);
2788 if (!empty($hookmanager->resPrint)) {
2789 $result .= $hookmanager->resPrint;
2792 if (empty($reshook)) {
2793 if (
$object->lines[$i]->special_code == 3) {
2796 if (empty($hidedetails) || $hidedetails > 1) {
2815 if (empty($hookmanager)) {
2816 global $hookmanager;
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_getlineprogress', $parameters,
$object, $action);
2831 if (!empty($hookmanager->resPrint)) {
2832 return $hookmanager->resPrint;
2835 if (empty($reshook)) {
2836 if (
$object->lines[$i]->special_code == 3) {
2839 if (empty($hidedetails) || $hidedetails > 1) {
2845 if ($isCumulative xor $showDelta) {
2849 $result =
$object->lines[$i]->situation_percent;
2855 if ($isCumulative) {
2857 if (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2858 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2866 if (method_exists(
$object->lines[$i],
'getAllPrevProgress')) {
2867 $prev_progress =
$object->lines[$i]->getAllPrevProgress(
$object->id);
2868 } elseif (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2869 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2872 $result = $isCumulative ?
2874 $object->lines[$i]->situation_percent - $prev_progress :
2876 $prev_progress +
$object->lines[$i]->situation_percent;
2878 $result = round($result, 1).
'%';
2895 global $hookmanager;
2905 if (is_object($hookmanager)) {
2906 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2907 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2908 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2910 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code,
'sign' => $sign);
2912 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalexcltax', $parameters,
$object, $action);
2914 if (!empty($hookmanager->resPrint)) {
2915 $result .= $hookmanager->resPrint;
2918 if (empty($reshook)) {
2919 if (!empty(
$object->lines[$i]) &&
$object->lines[$i]->special_code == 3) {
2920 $result .= $outputlangs->transnoentities(
"Option");
2921 } elseif (empty($hidedetails) || $hidedetails > 1) {
2923 if (!empty(
$object->lines[$i]->situation_percent) &&
$object->lines[$i]->situation_percent > 0) {
2924 if (method_exists(
$object->lines[$i],
'getSituationRatio')) {
2925 $total_ht *=
$object->lines[$i]->getSituationRatio();
2928 $result .=
price($sign * $total_ht, 0, $outputlangs);
2945 global $hookmanager;
2955 if (is_object($hookmanager)) {
2956 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2957 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2958 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2960 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2962 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalwithtax', $parameters,
$object, $action);
2964 if (!empty($hookmanager->resPrint)) {
2965 $result .= $hookmanager->resPrint;
2968 if (empty($reshook)) {
2969 if (
$object->lines[$i]->special_code == 3) {
2970 $result .= $outputlangs->transnoentities(
"Option");
2971 } elseif (empty($hidedetails) || $hidedetails > 1) {
2973 if (isset(
$object->lines[$i]->situation_percent) &&
$object->lines[$i]->situation_percent > 0) {
2974 $total_ttc *=
$object->lines[$i]->getSituationRatio();
2976 $result .=
price($sign * $total_ttc, 0, $outputlangs);
3001 if (!empty($objectSocId) && !empty($elementSocId) && $objectSocId != $elementSocId) {
3016function pdf_getLinkedObjects(
$object, $outputlangs)
3018 global
$db, $hookmanager;
3020 $linkedobjects = array();
3024 foreach (
$object->linkedObjects as $objecttype => $objects) {
3025 if ($objecttype ==
'facture') {
3027 } elseif ($objecttype ==
'propal' || $objecttype ==
'supplier_proposal') {
3028 '@phan-var-force array<Propal|SupplierProposal> $objects';
3030 $outputlangs->load(
'propal');
3032 foreach ($objects as $elementobject) {
3033 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefProposal");
3034 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
3035 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DatePropal");
3036 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
3038 } elseif ($objecttype ==
'commande' || $objecttype ==
'supplier_order' || $objecttype ==
'order_supplier') {
3039 $optiontohidelinkedorders =
"PDF_HIDE_LINKED_ORDERS_ON_SAME_THIRDPARTY";
3040 if ($objecttype ==
'supplier_order' || $objecttype ==
'order_supplier') {
3041 $optiontohidelinkedorders =
"PDF_HIDE_LINKED_PURCHASE_ORDERS_ON_SAME_THIRDPARTY";
3043 '@phan-var-force array<Commande|CommandeFournisseur> $objects';
3044 $outputlangs->load(
'orders');
3047 if (empty(
$object->context[
'DolPublicNoteAppendedGetLinkedObjects'])) {
3049 foreach ($objects as $elementobject) {
3051 $outputList =
dol_concatdesc($outputList, $outputlangs->transnoentities($elementobject->ref) . (empty($elementobject->ref_client) ?
'' :
' (' . $elementobject->ref_client .
')') . (empty($elementobject->ref_supplier) ?
'' :
' (' . $elementobject->ref_supplier .
')') .
' ');
3052 $outputList =
dol_concatdesc($outputList, $outputlangs->transnoentities(
"OrderDate") .
' : ' .
dol_print_date($elementobject->date,
'day',
'', $outputlangs));
3056 if (!empty($outputList)) {
3062 $elementobject = array_shift($objects);
3064 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder");
3065 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref).(!empty($elementobject->ref_client) ?
' ('.$elementobject->ref_client.
')' :
'').(!empty($elementobject->ref_supplier) ?
' ('.$elementobject->ref_supplier.
')' :
'');
3066 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"OrderDate");
3067 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
3070 } elseif ($objecttype ==
'contrat') {
3071 '@phan-var-force Contrat[] $objects';
3072 $outputlangs->load(
'contracts');
3073 foreach ($objects as $elementobject) {
3075 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefContract");
3076 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
3077 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DateContract");
3078 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date_contrat,
'day',
'', $outputlangs);
3081 } elseif ($objecttype ==
'fichinter') {
3082 '@phan-var-force Fichinter[] $objects';
3083 $outputlangs->load(
'interventions');
3084 foreach ($objects as $elementobject) {
3086 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"InterRef");
3087 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
3088 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"InterDate");
3089 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->datec,
'day',
'', $outputlangs);
3092 } elseif ($objecttype ==
'shipping') {
3093 '@phan-var-force Expedition[] $objects';
3094 $outputlangs->loadLangs(array(
"orders",
"sendings"));
3096 if (count($objects) > 1) {
3100 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
3101 $refListsTxt .= $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending").
' :';
3103 $refListsTxt .= $outputlangs->transnoentities(
"RefSending").
' :';
3106 foreach ($objects as $elementobject) {
3107 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
3108 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
3109 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
3110 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
3112 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
3118 $refListsTxt .= (!empty($refListsTxt) ?
' ' :
'');
3119 if (! is_object($order)) {
3120 $refListsTxt .= $outputlangs->transnoentities($elementobject->ref);
3122 $refListsTxt .= $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
'');
3123 $refListsTxt .=
' / '.$outputlangs->transnoentities($elementobject->ref);
3127 if (empty(
$object->context[
'DolPublicNoteAppendedGetLinkedObjects']) && !
getDolGlobalString(
"PDF_HIDE_LINKED_OBJECT_IN_PUBLIC_NOTE")) {
3130 } elseif (count($objects) == 1) {
3131 $elementobject = array_shift($objects);
3134 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
3135 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
3136 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
3137 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
3139 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
3146 if (! is_object($order)) {
3147 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefSending");
3148 if (empty($linkedobjects[$objecttype][
'ref_value'])) {
3149 $linkedobjects[$objecttype][
'ref_value'] =
'';
3151 $linkedobjects[$objecttype][
'ref_value'] .=
' / ';
3153 $linkedobjects[$objecttype][
'ref_value'] .= $outputlangs->transnoentities($elementobject->ref);
3154 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
3156 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending");
3157 if (empty($linkedobjects[$objecttype][
'ref_value'])) {
3158 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
'');
3160 $linkedobjects[$objecttype][
'ref_value'] .=
' / '.$outputlangs->transnoentities($elementobject->ref);
3161 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
3167 $object->context[
'DolPublicNoteAppendedGetLinkedObjects'] = 1;
3170 if (is_object($hookmanager)) {
3171 $parameters = array(
'linkedobjects' => $linkedobjects,
'outputlangs' => $outputlangs);
3173 $reshook = $hookmanager->executeHooks(
'pdf_getLinkedObjects', $parameters,
$object, $action);
3174 if (empty($reshook)) {
3175 $linkedobjects = array_replace($linkedobjects, $hookmanager->resArray);
3176 } elseif ($reshook > 0) {
3178 $linkedobjects = $hookmanager->resArray;
3182 return $linkedobjects;
3195 $maxheight =
getDolGlobalInt(
'MAIN_DOCUMENTS_WITH_PICTURE_HEIGHT', 32);
3197 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
3201 if ($tmp[
'height']) {
3202 $width = (int) round($maxheight * $tmp[
'width'] / $tmp[
'height']);
3203 if ($width > $maxwidth) {
3205 $height = (int) round($maxwidth * $tmp[
'height'] / $tmp[
'width']);
3207 $height = $maxheight;
3210 return array(
'width' => $width,
'height' => $height);
3226 global $hookmanager;
3232 if (
$object->lines[$i]->special_code == 3) {
3234 return $outputlangs->transnoentities(
"Option");
3236 if (is_object($hookmanager)) {
3237 $special_code =
$object->lines[$i]->special_code;
3238 if (!empty(
$object->lines[$i]->fk_parent_line)) {
3239 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
3242 $parameters = array(
3244 'outputlangs' => $outputlangs,
3245 'hidedetails' => $hidedetails,
3246 'special_code' => $special_code,
3247 'multicurrency' => $multicurrency
3252 if ($hookmanager->executeHooks(
'getlinetotalremise', $parameters,
$object, $action) > 0) {
3253 if (isset($hookmanager->resArray[
'linetotalremise'])) {
3254 return (
float) $hookmanager->resArray[
'linetotalremise'];
3256 return (
float) $hookmanager->resPrint;
3261 if (empty($hidedetails) || $hidedetails > 1) {
3262 if (empty($multicurrency)) {
3264 return (
float)
price2num($diff,
'MT', 1);
3266 $diff = (float)
price2num($sign *
$object->lines[$i]->multicurrency_subprice * (
float)
$object->lines[$i]->qty,
'MT', 1) -
$object->lines[$i]->multicurrency_total_ht;
3267 return (
float)
price2num($diff,
'MT', 1);
3284 return "ERROR: FILE NOT FOUND OR NOT VALID";
3295 $content = preg_replace(
'/[^(\x20-\x7F)]*/',
'', $content);
3296 if (preg_match(
'/\/' . preg_quote($field,
'/') .
'\s*\((.*?)\)/', $content, $matches)) {
3297 return trim($matches[1]);
3299 return "ERROR: NOT FOUND";
3301 return "ERROR: FAILED TO READ PDF";
3332 bool $isSubtotal =
false,
3333 bool $applySubtotalLogic =
true
3335 $savePage = $pdf->getPage();
3336 $saveX = $pdf->GetX();
3337 $prevAlign = $generator->cols[
'desc'][
'content'][
'align'];
3339 if ($isSubtotal && $applySubtotalLogic &&
$object->lines[$i]->qty < 0) {
3340 $outputlangs->load(
"subtotals");
3341 $object->lines[$i]->desc =
getDolGlobalString(
"SUBTOTAL_LINE_TEXT_DOES_NOT_INCLUDE_TITLE_TEXT") ? $outputlangs->trans(
"SubTotal") : $outputlangs->trans(
"SubtotalOf",
$object->lines[$i]->desc);
3342 $generator->cols[
'desc'][
'content'][
'align'] = ($prevAlign ===
'L') ?
'R' :
'L';
3345 $pdf->startTransaction();
3346 $pdf->SetXY($saveX, $curY);
3348 $pageAfter = $pdf->getPage();
3349 $yAfter = $pdf->GetY();
3350 $pdf->rollbackTransaction(
true);
3352 $pdf->SetFillColor($bgColor[0], $bgColor[1], $bgColor[2]);
3353 $width = $generator->page_largeur - $generator->marge_droite - $generator->marge_gauche;
3355 $pdf->SetXY($generator->marge_gauche, $curY);
3356 if ($pageAfter === $savePage) {
3357 $pdf->MultiCell($width, max(0, $yAfter - $curY),
'', 0,
'',
true);
3359 $pdf->MultiCell($width, $pdf->getPageHeight() - $pdf->getBreakMargin() - $curY,
'', 0,
'',
true);
3361 $pdf->setPage($pageAfter);
3362 $pdf->SetXY($generator->marge_gauche, $pdf->getMargins()[
'top']);
3363 $pdf->MultiCell($width, max(0, $yAfter - $pdf->getMargins()[
'top']),
'', 0,
'',
true);
3365 $pdf->setPage($savePage);
3368 $pdf->SetTextColor(
colorIsLight(implode(
',', $bgColor)));
3369 $pdf->SetXY($saveX, $curY);
3373 $generator->cols[
'desc'][
'content'][
'align'] = $prevAlign;
if(! $sortfield) if(! $sortorder) $object
pdfWriteBlockedLogSignature(&$pdf, $outputlangs, $page_height, $object, &$w, &$posx, &$posy)
Add some information from the blockedlog module.
pdfCertifMentionblockedLog(&$pdf, $outputlangs, $seller, $default_font_size, &$posy, $pdftemplate)
Add legal mention.
isALNERunningVersion($blockedlogtestalreadydone=0, $blockedlogmodulealreadydone=0)
Return if the application is executed with the LNE requirements on.
Class to manage categories.
Class to manage customers orders.
Parent class for documents (PDF, ODT, ...) generators.
printColDescContent($pdf, &$curY, $colKey, $object, $i, $outputlangs, $hideref=0, $hidedesc=0, $issupplierline=0)
print description column content
setAfterColsLinePositionsData(string $colId, float $y, int $pageNumb)
Used for to set afterColsLinePositions var in a pdf draw line loop.
Parent class of all other business classes (invoices, contracts, proposals, orders,...
Class to manage absolute discounts.
Class to manage warehouses.
File of class to manage predefined price products or services by customer.
Class to manage predefined suppliers products.
Class to manage products or services.
Manage record for batch number management.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
getState($id, $withcode='0', $dbtouse=null, $withregion=0, $outputlangs=null, $entconv=1)
Return state translated from an id.
getFormeJuridiqueLabel($code)
Return the name translated of juridical status.
dol_is_file($pathoffile)
Return if path is a file.
dol_print_reduction($reduction, $langs)
Returns formatted reduction.
dol_getDefaultFormat($outputlangs=null)
Try to guess default paper format according to language into $langs.
dol_html_entity_decode($a, $b, $c='UTF-8', $keepsomeentities=0)
Replace html_entity_decode functions to manage errors.
dol_now($mode='gmt')
Return date for now.
getDolGlobalFloat($key, $default=0)
Return a Dolibarr global constant float value.
vatrate($rate, $addpercent=false, $info_bits=0, $usestarfornpr=0, $html=0)
Return a string with VAT rate label formatted for view output Used into pdf and HTML pages.
dol_format_address($object, $withcountry=0, $sep="\n", $outputlangs=null, $mode=0, $extralangcode='')
Return a formatted address (part address/zip/town/state) according to country rules.
dol_osencode($str)
Return a string encoded into OS filesystem encoding.
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...
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.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
complete_head_from_modules($conf, $langs, $object, &$head, &$h, $type, $mode='add', $filterorigmodule='')
Complete or removed entries into a head array (used to build tabs).
dol_htmlentitiesbr($stringtoencode, $nl2brmode=0, $pagecodefrom='UTF-8', $removelasteolbr=1)
This function is called to encode a string into a HTML string but differs from htmlentities because a...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_mkdir($dir, $dataroot='', $newmask='')
Creation of a directory (this can create recursive subdir)
dol_getImageSize($file, $url=false)
Return size of image file on disk (Supported extensions are gif, jpg, png, bmp and webp)
pdf_getSizeForImage($realpath)
Return dimensions to use for images onto PDF checking that width and height are not higher than maxim...
pdf_watermark($pdf, $outputlangs, $h, $w, $unit, $text)
Add a draft watermark on PDF files.
pdf_getlinetotalexcltax($object, $i, $outputlangs, $hidedetails=0)
Return line total excluding tax.
pdfCertifMention($pdf, $outputlangs, $seller, $default_font_size, &$posy, $pdftemplate)
Add legal certificate mention.
pdf_getlinedesc($object, $i, $outputlangs, $hideref=0, $hidedesc=0, $issupplierline=0)
Return line description translated in outputlangs and encoded into htmlentities and with
pdf_getFormat($outputlangs=null, $mode='setup')
Return array with format properties of default PDF format.
pdfGetLineTotalDiscountAmount($object, $i, $outputlangs, $hidedetails=0, $multicurrency=0)
Return line total amount discount.
pdf_writeLinkedObjects($pdf, $object, $outputlangs, $posx, $posy, $w, $h, $align, $default_font_size)
Show linked objects for PDF generation.
pdf_getPDFFontSize($outputlangs)
Return font size to use for PDF generation.
pdfExtractMetadata($file, $field='Keywords')
Function to extract metadata from a PDF file by doing a binary parsing of the PDF file.
pdf_bank($pdf, $outputlangs, $curx, $cury, $account, $onlynumber=0, $default_font_size=10)
Show bank information for PDF generation.
pdf_getlineqty_shipped($object, $i, $outputlangs, $hidedetails=0)
Return line quantity shipped.
pdf_getlinenum($object, $i, $outputlangs, $hidedetails=0)
Return line num.
pdf_getEncryption($pathoffile)
Return if pdf file is protected/encrypted.
pdf_writelinedesc($pdf, $object, $i, $outputlangs, $w, $h, $posx, $posy, $hideref=0, $hidedesc=0, $issupplierline=0, $align='J')
Output line description into PDF.
pdf_getlineupwithtax($object, $i, $outputlangs, $hidedetails=0)
Return line unit price including tax.
pdf_getHeightForLogo($logo, $url=false)
Return height to use for Logo onto PDF.
pdf_getlineref_supplier($object, $i, $outputlangs, $hidedetails=0)
Return line ref_supplier.
pdfWriteVATArray($docgenerator, &$index, $pdf, $outputlangs, $outputlangsbis, $object, $col1x, $col2x, $largcol2, $tab2_top, $tab2_hl)
Add some information from the blockedlog module.
pdf_getlinetotalwithtax($object, $i, $outputlangs, $hidedetails=0)
Return line total including tax.
pdf_getlineupexcltax($object, $i, $outputlangs, $hidedetails=0)
Return line unit price excluding tax.
pdf_getlineprogress($object, $i, $outputlangs, $hidedetails=0, $hookmanager=null)
Return line percent.
pdf_getlinevatrate($object, $i, $outputlangs, $hidedetails=0)
Return line vat rate.
pdf_admin_prepare_head()
Return array head with list of tabs to view object information.
canDisplayLinkedObjectInPDF($object, $elementobject)
Check if a linked object can be displayed based on third-party privacy rules.
pdf_pagehead($pdf, $outputlangs, $page_height)
Show header of page for PDF generation.
pdfGetHeightForHtmlContent($pdf, $htmlcontent)
Function to try to calculate height of a HTML Content.
pdf_pagefoot($pdf, $outputlangs, $paramfreetext, $fromcompany, $marge_basse, $marge_gauche, $page_hauteur, $object, $showdetails=0, $hidefreetext=0, $page_largeur=0, $watermark='')
Show footer of page for PDF generation.
pdf_getPDFFont($outputlangs)
Return font name to use for PDF generation.
pdf_render_subtotals(TCPDF $pdf, CommonDocGenerator $generator, float $curY, CommonObject $object, int $i, Translate $outputlangs, int $hideref, int $hidedesc, array $bgColor, bool $isSubtotal=false, bool $applySubtotalLogic=true)
Render subtotals line with a colored background and adapted text color .
pdf_getlineqty_keeptoship($object, $i, $outputlangs, $hidedetails=0)
Return line keep to ship quantity.
pdf_getlineref($object, $i, $outputlangs, $hidedetails=0)
Return line product ref.
pdfWriteAdditionnalTitle($pdf, $outputlangs, $page_height, $object, &$w, &$posx, &$posy)
Add some information from the blockedlog module.
pdfWriteAlreadyPaid($docgenerator, &$index, $pdf, $outputlangs, $outputlangsbis, $object, $col1x, $col2x, $largcol2, $tab2_top, $tab2_hl, $deja_regle, $creditnoteamount, $depositsamount, $resteapayer, $resteapayer_origin)
Add some information from the blockedlog module.
pdf_build_address($outputlangs, $sourcecompany, $targetcompany='', $targetcontact='', $usecontact=0, $mode='source', $object=null)
Return a string with full address formatted for output on PDF documents.
pdf_getlineunit($object, $i, $outputlangs, $hidedetails=0)
Return line unit.
pdf_getlineremisepercent($object, $i, $outputlangs, $hidedetails=0)
Return line remise percent.
pdf_getlineqty_asked($object, $i, $outputlangs, $hidedetails=0)
Return line quantity asked.
pdf_getlineqty($object, $i, $outputlangs, $hidedetails=0)
Return line quantity.
pdf_getSubstitutionArray($outputlangs, $exclude=null, $object=null, $onlykey=0, $include=null)
Return array of possible substitutions for PDF content (without external module substitutions).
pdf_getInstance($format='', $metric='mm', $pagetype='P')
Return a PDF instance object.
pdfBuildThirdpartyName($thirdparty, Translate $outputlangs, $includealias=0)
Returns the name of the thirdparty.