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;
1998 $textwasnotmodified = ($desc == $prodser->description);
2000 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"description"])) {
2001 if ($textwasnotmodified) {
2002 $desc = str_replace($prodser->description, $prodser->multilangs[$outputlangs->defaultlang][
"description"], $desc);
2003 } elseif ($translatealsoifmodified) {
2004 $desc = $prodser->multilangs[$outputlangs->defaultlang][
"description"];
2009 $textwasnotmodified = ($note == $prodser->note_public);
2010 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"other"]) && ($textwasnotmodified || $translatealsoifmodified)) {
2011 $note = $prodser->multilangs[$outputlangs->defaultlang][
"other"];
2014 } elseif ((
$object->element ==
'facture' ||
$object->element ==
'facturefourn') && preg_match(
'/^\(DEPOSIT\).+/', $desc)) {
2015 $desc = str_replace(
'(DEPOSIT)', $outputlangs->trans(
'Deposit'), $desc);
2018 $libelleproduitservice =
'';
2021 $libelleproduitservice = $label;
2022 if (!empty($libelleproduitservice) &&
getDolGlobalString(
'PDF_BOLD_PRODUCT_LABEL')) {
2026 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
2028 $libelleproduitservice =
'<b>'.$libelleproduitservice.
'</b>';
2035 $prodser->get_sousproduits_arbo();
2036 if (!empty($prodser->sousprods) && is_array($prodser->sousprods) && count($prodser->sousprods)) {
2037 $outputlangs->load(
'mrp');
2038 $tmparrayofsubproducts = reset($prodser->sousprods);
2041 if (isset(
$object->lines[$i]->qty) && !empty(
$object->lines[$i]->qty)) {
2042 $qtyText =
$object->lines[$i]->qty;
2043 } elseif (isset(
$object->lines[$i]->qty_shipped) && !empty(
$object->lines[$i]->qty_shipped)) {
2044 $qtyText =
$object->lines[$i]->qty;
2048 foreach ($tmparrayofsubproducts as $subprodval) {
2052 $outputlangs->trans(
'Qty').
':'.$qtyText.
' x '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1].
'= '.$outputlangs->trans(
'QtyTot').
':'.$subprodval[1] * $qtyText :
2053 $outputlangs->trans(
'Qty').
' '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1])
2057 foreach ($tmparrayofsubproducts as $subprodval) {
2059 dol_concatdesc($libelleproduitservice,
" * ".$subprodval[5].(($subprodval[5] && $subprodval[3]) ?
' - ' :
'').$subprodval[3]),
2061 $outputlangs->trans(
'Qty').
':'.$qtyText.
' x '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1].
'= '.$outputlangs->trans(
'QtyTot').
':'.$subprodval[1] * $qtyText :
2062 $outputlangs->trans(
'Qty').
' '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1])
2070 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $outputlangs->trans(
"BarCode").
" ".$product_barcode);
2074 if (!empty($desc) && ($desc != $label)) {
2075 if ($desc ==
'(CREDIT_NOTE)' &&
$object->lines[$i]->fk_remise_except) {
2077 $discount->fetch(
$object->lines[$i]->fk_remise_except);
2078 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
2079 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromCreditNote", $sourceref);
2080 } elseif ($desc ==
'(DEPOSIT)' &&
$object->lines[$i]->fk_remise_except) {
2082 $discount->fetch(
$object->lines[$i]->fk_remise_except);
2083 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
2084 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromDeposit", $sourceref);
2087 $libelleproduitservice .=
' ('.dol_print_date($discount->datec,
'day',
'', $outputlangs).
')';
2089 } elseif ($desc ==
'(EXCESS RECEIVED)' &&
$object->lines[$i]->fk_remise_except) {
2091 $discount->fetch(
$object->lines[$i]->fk_remise_except);
2092 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessReceived", $discount->ref_facture_source);
2093 } elseif ($desc ==
'(EXCESS PAID)' &&
$object->lines[$i]->fk_remise_except) {
2095 $discount->fetch(
$object->lines[$i]->fk_remise_except);
2096 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessPaid", $discount->ref_invoice_supplier_source);
2100 if (!empty(
$object->element)) {
2101 $tmpkey =
'MAIN_DOCUMENTS_HIDE_DESCRIPTION_FOR_'.strtoupper(
$object->element);
2106 if (empty($hidedesc)) {
2108 $libelleproduitservice =
dol_concatdesc($desc, $libelleproduitservice);
2111 $libelleproduitservice = $desc;
2113 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
2118 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
2124 $prefix_prodserv =
"";
2127 if ($prodser->isService()) {
2128 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Service").
" ";
2130 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Product").
" ";
2134 if (empty($hideref)) {
2135 if ($issupplierline) {
2137 $ref_prodserv = $prodser->ref;
2138 if ($ref_supplier) {
2139 $ref_prodserv .= ($prodser->ref ?
' (' :
'').$outputlangs->transnoentitiesnoconv(
"SupplierRef").
' '.$ref_supplier.($prodser->ref ?
')' :
'');
2141 } elseif (
getDolGlobalInt(
'PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES') == 1) {
2142 $ref_prodserv = $ref_supplier;
2143 } elseif (
getDolGlobalInt(
'PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES') == 2) {
2144 $ref_prodserv = $ref_supplier.
' ('.$outputlangs->transnoentitiesnoconv(
"InternalRef").
' '.$prodser->ref.
')';
2147 $ref_prodserv = $prodser->ref;
2151 $filter = array(
'fk_product' => (
string) $idprod,
'fk_soc' => (
string)
$object->socid);
2153 $nbCustomerPrices = $productCustomerPriceStatic->fetchAll(
'',
'', 1, 0, $filter);
2155 if ($nbCustomerPrices > 0) {
2156 $productCustomerPrice =
null;
2157 if (count($productCustomerPriceStatic->lines) > 0) {
2158 $date_now = (int) floor(
dol_now() / 86400) * 86400;
2159 foreach ($productCustomerPriceStatic->lines as $k => $custprice_line) {
2160 if ($custprice_line->date_begin <= $date_now && (empty($custprice_line->date_end) || $date_now <= $custprice_line->date_end)) {
2161 $productCustomerPrice = $custprice_line;
2167 if (isset($productCustomerPrice) && !empty($productCustomerPrice->ref_customer)) {
2168 $idcustprice =
getDolGlobalInt(
'PRODUIT_CUSTOMER_PRICES_PDF_REF_MODE');
2169 switch ($idcustprice) {
2171 $ref_prodserv = $productCustomerPrice->ref_customer;
2175 $ref_prodserv = $productCustomerPrice->ref_customer .
' (' . $outputlangs->transnoentitiesnoconv(
'InternalRef') .
' ' . $ref_prodserv .
')';
2179 $ref_prodserv = $ref_prodserv .
' (' . $outputlangs->transnoentitiesnoconv(
'RefCustomer') .
' ' . $productCustomerPrice->ref_customer .
')';
2186 if (!empty($libelleproduitservice) && !empty($ref_prodserv)) {
2187 $ref_prodserv .=
" - ";
2191 if (!empty($ref_prodserv) &&
getDolGlobalString(
'PDF_BOLD_PRODUCT_REF_AND_PERIOD')) {
2193 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
2195 $ref_prodserv =
'<b>'.$ref_prodserv.
'</b>';
2198 $libelleproduitservice = $prefix_prodserv.$ref_prodserv.$libelleproduitservice;
2202 include_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
2205 $tblcateg = $categstatic->containing($idprod, Categorie::TYPE_PRODUCT);
2206 foreach ($tblcateg as $cate) {
2208 $desccateg = $cate->description;
2210 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desccateg);
2215 if (!empty(
$object->lines[$i]->date_start) || !empty(
$object->lines[$i]->date_end)) {
2219 if (
$object->lines[$i]->date_start &&
$object->lines[$i]->date_end) {
2220 $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)).
')';
2222 if (
$object->lines[$i]->date_start && !
$object->lines[$i]->date_end) {
2223 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateFrom',
dol_print_date(
$object->lines[$i]->date_start, $format,
false, $outputlangs)).
')';
2225 if (!
$object->lines[$i]->date_start &&
$object->lines[$i]->date_end) {
2226 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateUntil',
dol_print_date(
$object->lines[$i]->date_end, $format,
false, $outputlangs)).
')';
2231 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
2233 $libelleproduitservice .=
'<br><b style="color:#333666;" ><em>'.$period.
'</em></b>';
2235 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $period);
2241 if (!empty($dbatch)) {
2246 include_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
2247 include_once DOL_DOCUMENT_ROOT.
'/product/class/productbatch.class.php';
2252 foreach ($dbatch as $detail) {
2254 if ($detail->eatby) {
2255 $dte[] = $outputlangs->transnoentitiesnoconv(
'printEatby',
dol_print_date($detail->eatby, $format,
false, $outputlangs));
2257 if ($detail->sellby) {
2258 $dte[] = $outputlangs->transnoentitiesnoconv(
'printSellby',
dol_print_date($detail->sellby, $format,
false, $outputlangs));
2260 if ($detail->batch) {
2261 $dte[] = $outputlangs->transnoentitiesnoconv(
'printBatch', $detail->batch);
2264 $dte[] = $outputlangs->transnoentitiesnoconv(
'printQty', (
string) $detail->qty);
2268 if (
$object->element ==
'shipping' && $detail->fk_origin_stock > 0 &&
getDolGlobalInt(
'PRODUCTBATCH_SHOW_WAREHOUSE_ON_SHIPMENT')) {
2269 $resproductbatch = $tmpproductbatch->fetch($detail->fk_origin_stock);
2270 if ($resproductbatch > 0) {
2271 $reswarehouse = $tmpwarehouse->fetch($tmpproductbatch->warehouseid);
2272 if ($reswarehouse > 0) {
2273 $dte[] = $tmpwarehouse->ref;
2278 $libelleproduitservice .=
"__N__ ".implode(
" - ", $dte);
2288 $libelleproduitservice = preg_replace(
'/__N__/',
'<br>', $libelleproduitservice);
2290 $libelleproduitservice = preg_replace(
'/__N__/',
"\n", $libelleproduitservice);
2294 return $libelleproduitservice;
2308 global $hookmanager;
2313 if (is_object($hookmanager)) {
2314 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2315 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2316 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2318 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2320 $reshook = $hookmanager->executeHooks(
'pdf_getlinenum', $parameters,
$object, $action);
2321 $result .= $hookmanager->resPrint;
2323 if (empty($reshook)) {
2341 global $hookmanager;
2346 if (is_object($hookmanager)) {
2347 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2348 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2349 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2351 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2353 $reshook = $hookmanager->executeHooks(
'pdf_getlineref', $parameters,
$object, $action);
2354 $result .= $hookmanager->resPrint;
2356 if (empty($reshook)) {
2374 global $hookmanager;
2379 if (is_object($hookmanager)) {
2380 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2381 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2382 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2384 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2386 $reshook = $hookmanager->executeHooks(
'pdf_getlineref_supplier', $parameters,
$object, $action);
2387 $result .= $hookmanager->resPrint;
2389 if (empty($reshook)) {
2411 if (is_object($hookmanager)) {
2412 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2413 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2414 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2416 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2418 $reshook = $hookmanager->executeHooks(
'pdf_getlinevatrate', $parameters,
$object, $action);
2420 if (!empty($hookmanager->resPrint)) {
2421 $result .= $hookmanager->resPrint;
2424 if (empty($reshook)) {
2425 if (empty($hidedetails) || $hidedetails > 1) {
2431 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
2436 $tmpresult .=
vatrate((
string) abs(
$object->lines[$i]->localtax1_tx),
false);
2441 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
2446 $tmpresult .=
vatrate((
string) abs(
$object->lines[$i]->localtax2_tx),
false);
2451 $result .= $tmpresult;
2468 global $hookmanager;
2478 if (is_object($hookmanager)) {
2479 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2480 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2481 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2483 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2485 $reshook = $hookmanager->executeHooks(
'pdf_getlineupexcltax', $parameters,
$object, $action);
2487 if (!empty($hookmanager->resPrint)) {
2488 $result .= $hookmanager->resPrint;
2491 if (empty($reshook)) {
2492 if (empty($hidedetails) || $hidedetails > 1) {
2494 $result .=
price($sign * $subprice, 0, $outputlangs);
2511 global $hookmanager;
2521 if (is_object($hookmanager)) {
2522 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2523 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2524 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2526 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2528 $reshook = $hookmanager->executeHooks(
'pdf_getlineupwithtax', $parameters,
$object, $action);
2530 if (!empty($hookmanager->resPrint)) {
2531 $result .= $hookmanager->resPrint;
2534 if (empty($reshook)) {
2535 if (empty($hidedetails) || $hidedetails > 1) {
2536 $result .=
price($sign * ((
$object->lines[$i]->subprice) + (
$object->lines[$i]->subprice) * (
$object->lines[$i]->tva_tx) / 100), 0, $outputlangs);
2553 global $hookmanager;
2558 if (is_object($hookmanager)) {
2559 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2560 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2561 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2563 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2565 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty', $parameters,
$object, $action);
2567 if (!empty($hookmanager->resPrint)) {
2568 $result = $hookmanager->resPrint;
2571 if (empty($reshook)) {
2572 if (
$object->lines[$i]->special_code == 3) {
2575 if (empty($hidedetails) || $hidedetails > 1) {
2576 $result .=
$object->lines[$i]->qty;
2593 global $hookmanager;
2598 if (is_object($hookmanager)) {
2599 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2600 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2601 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2603 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2605 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_asked', $parameters,
$object, $action);
2607 if (!empty($hookmanager->resPrint)) {
2608 $result .= $hookmanager->resPrint;
2611 if (empty($reshook)) {
2612 if (
$object->lines[$i]->special_code == 3) {
2615 if (empty($hidedetails) || $hidedetails > 1) {
2616 $result .=
$object->lines[$i]->qty_asked;
2633 global $hookmanager;
2638 if (is_object($hookmanager)) {
2639 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2640 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2641 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2643 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2645 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_shipped', $parameters,
$object, $action);
2647 if (!empty($hookmanager->resPrint)) {
2648 $result .= $hookmanager->resPrint;
2651 if (empty($reshook)) {
2652 if (
$object->lines[$i]->special_code == 3) {
2655 if (empty($hidedetails) || $hidedetails > 1) {
2656 $result .=
$object->lines[$i]->qty_shipped;
2673 global $hookmanager;
2678 if (is_object($hookmanager)) {
2679 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2680 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2681 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2683 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2685 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_keeptoship', $parameters,
$object, $action);
2687 if (!empty($hookmanager->resPrint)) {
2688 $result .= $hookmanager->resPrint;
2691 if (empty($reshook)) {
2692 if (
$object->lines[$i]->special_code == 3) {
2695 if (empty($hidedetails) || $hidedetails > 1) {
2696 $result .= (
$object->lines[$i]->qty_asked -
$object->lines[$i]->qty_shipped);
2713 global $hookmanager;
2718 if (is_object($hookmanager)) {
2719 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2720 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2721 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2723 $parameters = array(
2725 'outputlangs' => $outputlangs,
2726 'hidedetails' => $hidedetails,
2727 'special_code' => $special_code
2730 $reshook = $hookmanager->executeHooks(
'pdf_getlineunit', $parameters,
$object, $action);
2732 if (!empty($hookmanager->resPrint)) {
2733 $result .= $hookmanager->resPrint;
2736 if (empty($reshook)) {
2737 if (empty($hidedetails) || $hidedetails > 1) {
2738 $result .=
$object->lines[$i]->getLabelOfUnit(
'short', $outputlangs, 1);
2756 global $hookmanager;
2758 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
2763 if (is_object($hookmanager)) {
2764 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2765 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2766 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2768 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2770 $reshook = $hookmanager->executeHooks(
'pdf_getlineremisepercent', $parameters,
$object, $action);
2772 if (!empty($hookmanager->resPrint)) {
2773 $result .= $hookmanager->resPrint;
2776 if (empty($reshook)) {
2777 if (
$object->lines[$i]->special_code == 3) {
2780 if (empty($hidedetails) || $hidedetails > 1) {
2799 if (empty($hookmanager)) {
2800 global $hookmanager;
2806 if (is_object($hookmanager)) {
2807 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2808 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2809 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2811 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2813 $reshook = $hookmanager->executeHooks(
'pdf_getlineprogress', $parameters,
$object, $action);
2815 if (!empty($hookmanager->resPrint)) {
2816 return $hookmanager->resPrint;
2819 if (empty($reshook)) {
2820 if (
$object->lines[$i]->special_code == 3) {
2823 if (empty($hidedetails) || $hidedetails > 1) {
2829 if ($isCumulative xor $showDelta) {
2833 $result =
$object->lines[$i]->situation_percent;
2839 if (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2840 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2842 $result = $isCumulative ?
2844 $object->lines[$i]->situation_percent - $prev_progress :
2846 $prev_progress +
$object->lines[$i]->situation_percent;
2848 $result = round($result, 1).
'%';
2865 global $hookmanager;
2875 if (is_object($hookmanager)) {
2876 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2877 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2878 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2880 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code,
'sign' => $sign);
2882 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalexcltax', $parameters,
$object, $action);
2884 if (!empty($hookmanager->resPrint)) {
2885 $result .= $hookmanager->resPrint;
2888 if (empty($reshook)) {
2889 if (!empty(
$object->lines[$i]) &&
$object->lines[$i]->special_code == 3) {
2890 $result .= $outputlangs->transnoentities(
"Option");
2891 } elseif (empty($hidedetails) || $hidedetails > 1) {
2893 if (!empty(
$object->lines[$i]->situation_percent) &&
$object->lines[$i]->situation_percent > 0) {
2894 if (method_exists(
$object->lines[$i],
'getSituationRatio')) {
2895 $total_ht *=
$object->lines[$i]->getSituationRatio();
2898 $result .=
price($sign * $total_ht, 0, $outputlangs);
2915 global $hookmanager;
2925 if (is_object($hookmanager)) {
2926 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2927 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2928 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2930 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2932 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalwithtax', $parameters,
$object, $action);
2934 if (!empty($hookmanager->resPrint)) {
2935 $result .= $hookmanager->resPrint;
2938 if (empty($reshook)) {
2939 if (
$object->lines[$i]->special_code == 3) {
2940 $result .= $outputlangs->transnoentities(
"Option");
2941 } elseif (empty($hidedetails) || $hidedetails > 1) {
2943 if (isset(
$object->lines[$i]->situation_percent) &&
$object->lines[$i]->situation_percent > 0) {
2944 $total_ttc *=
$object->lines[$i]->getSituationRatio();
2946 $result .=
price($sign * $total_ttc, 0, $outputlangs);
2971 if (!empty($objectSocId) && !empty($elementSocId) && $objectSocId != $elementSocId) {
2986function pdf_getLinkedObjects(
$object, $outputlangs)
2988 global
$db, $hookmanager;
2990 $linkedobjects = array();
2994 foreach (
$object->linkedObjects as $objecttype => $objects) {
2995 if ($objecttype ==
'facture') {
2997 } elseif ($objecttype ==
'propal' || $objecttype ==
'supplier_proposal') {
2998 '@phan-var-force array<Propal|SupplierProposal> $objects';
3000 $outputlangs->load(
'propal');
3002 foreach ($objects as $elementobject) {
3003 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefProposal");
3004 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
3005 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DatePropal");
3006 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
3008 } elseif ($objecttype ==
'commande' || $objecttype ==
'supplier_order' || $objecttype ==
'order_supplier') {
3009 $optiontohidelinkedorders =
"PDF_HIDE_LINKED_ORDERS_ON_SAME_THIRDPARTY";
3010 if ($objecttype ==
'supplier_order' || $objecttype ==
'order_supplier') {
3011 $optiontohidelinkedorders =
"PDF_HIDE_LINKED_PURCHASE_ORDERS_ON_SAME_THIRDPARTY";
3013 '@phan-var-force array<Commande|CommandeFournisseur> $objects';
3014 $outputlangs->load(
'orders');
3017 if (empty(
$object->context[
'DolPublicNoteAppendedGetLinkedObjects'])) {
3019 foreach ($objects as $elementobject) {
3021 $outputList =
dol_concatdesc($outputList, $outputlangs->transnoentities($elementobject->ref) . (empty($elementobject->ref_client) ?
'' :
' (' . $elementobject->ref_client .
')') . (empty($elementobject->ref_supplier) ?
'' :
' (' . $elementobject->ref_supplier .
')') .
' ');
3022 $outputList =
dol_concatdesc($outputList, $outputlangs->transnoentities(
"OrderDate") .
' : ' .
dol_print_date($elementobject->date,
'day',
'', $outputlangs));
3026 if (!empty($outputList)) {
3032 $elementobject = array_shift($objects);
3034 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder");
3035 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref).(!empty($elementobject->ref_client) ?
' ('.$elementobject->ref_client.
')' :
'').(!empty($elementobject->ref_supplier) ?
' ('.$elementobject->ref_supplier.
')' :
'');
3036 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"OrderDate");
3037 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
3040 } elseif ($objecttype ==
'contrat') {
3041 '@phan-var-force Contrat[] $objects';
3042 $outputlangs->load(
'contracts');
3043 foreach ($objects as $elementobject) {
3045 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefContract");
3046 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
3047 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DateContract");
3048 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date_contrat,
'day',
'', $outputlangs);
3051 } elseif ($objecttype ==
'fichinter') {
3052 '@phan-var-force Fichinter[] $objects';
3053 $outputlangs->load(
'interventions');
3054 foreach ($objects as $elementobject) {
3056 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"InterRef");
3057 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
3058 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"InterDate");
3059 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->datec,
'day',
'', $outputlangs);
3062 } elseif ($objecttype ==
'shipping') {
3063 '@phan-var-force Expedition[] $objects';
3064 $outputlangs->loadLangs(array(
"orders",
"sendings"));
3066 if (count($objects) > 1) {
3070 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
3071 $refListsTxt .= $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending").
' :';
3073 $refListsTxt .= $outputlangs->transnoentities(
"RefSending").
' :';
3076 foreach ($objects as $elementobject) {
3077 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
3078 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
3079 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
3080 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
3082 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
3088 $refListsTxt .= (!empty($refListsTxt) ?
' ' :
'');
3089 if (! is_object($order)) {
3090 $refListsTxt .= $outputlangs->transnoentities($elementobject->ref);
3092 $refListsTxt .= $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
'');
3093 $refListsTxt .=
' / '.$outputlangs->transnoentities($elementobject->ref);
3097 if (empty(
$object->context[
'DolPublicNoteAppendedGetLinkedObjects']) && !
getDolGlobalString(
"PDF_HIDE_LINKED_OBJECT_IN_PUBLIC_NOTE")) {
3100 } elseif (count($objects) == 1) {
3101 $elementobject = array_shift($objects);
3104 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
3105 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
3106 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
3107 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
3109 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
3116 if (! is_object($order)) {
3117 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefSending");
3118 if (empty($linkedobjects[$objecttype][
'ref_value'])) {
3119 $linkedobjects[$objecttype][
'ref_value'] =
'';
3121 $linkedobjects[$objecttype][
'ref_value'] .=
' / ';
3123 $linkedobjects[$objecttype][
'ref_value'] .= $outputlangs->transnoentities($elementobject->ref);
3124 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
3126 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending");
3127 if (empty($linkedobjects[$objecttype][
'ref_value'])) {
3128 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
'');
3130 $linkedobjects[$objecttype][
'ref_value'] .=
' / '.$outputlangs->transnoentities($elementobject->ref);
3131 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
3137 $object->context[
'DolPublicNoteAppendedGetLinkedObjects'] = 1;
3140 if (is_object($hookmanager)) {
3141 $parameters = array(
'linkedobjects' => $linkedobjects,
'outputlangs' => $outputlangs);
3143 $reshook = $hookmanager->executeHooks(
'pdf_getLinkedObjects', $parameters,
$object, $action);
3144 if (empty($reshook)) {
3145 $linkedobjects = array_replace($linkedobjects, $hookmanager->resArray);
3146 } elseif ($reshook > 0) {
3148 $linkedobjects = $hookmanager->resArray;
3152 return $linkedobjects;
3165 $maxheight =
getDolGlobalInt(
'MAIN_DOCUMENTS_WITH_PICTURE_HEIGHT', 32);
3167 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
3171 if ($tmp[
'height']) {
3172 $width = (int) round($maxheight * $tmp[
'width'] / $tmp[
'height']);
3173 if ($width > $maxwidth) {
3175 $height = (int) round($maxwidth * $tmp[
'height'] / $tmp[
'width']);
3177 $height = $maxheight;
3180 return array(
'width' => $width,
'height' => $height);
3196 global $hookmanager;
3202 if (
$object->lines[$i]->special_code == 3) {
3204 return $outputlangs->transnoentities(
"Option");
3206 if (is_object($hookmanager)) {
3207 $special_code =
$object->lines[$i]->special_code;
3208 if (!empty(
$object->lines[$i]->fk_parent_line)) {
3209 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
3212 $parameters = array(
3214 'outputlangs' => $outputlangs,
3215 'hidedetails' => $hidedetails,
3216 'special_code' => $special_code,
3217 'multicurrency' => $multicurrency
3222 if ($hookmanager->executeHooks(
'getlinetotalremise', $parameters,
$object, $action) > 0) {
3223 if (isset($hookmanager->resArray[
'linetotalremise'])) {
3224 return (
float) $hookmanager->resArray[
'linetotalremise'];
3226 return (
float) $hookmanager->resPrint;
3231 if (empty($hidedetails) || $hidedetails > 1) {
3232 if (empty($multicurrency)) {
3234 return (
float)
price2num($diff,
'MT', 1);
3236 $diff = (float)
price2num($sign *
$object->lines[$i]->multicurrency_subprice * (
float)
$object->lines[$i]->qty,
'MT', 1) -
$object->lines[$i]->multicurrency_total_ht;
3237 return (
float)
price2num($diff,
'MT', 1);
3254 return "ERROR: FILE NOT FOUND OR NOT VALID";
3265 $content = preg_replace(
'/[^(\x20-\x7F)]*/',
'', $content);
3266 if (preg_match(
'/\/' . preg_quote($field,
'/') .
'\s*\((.*?)\)/', $content, $matches)) {
3267 return trim($matches[1]);
3269 return "ERROR: NOT FOUND";
3271 return "ERROR: FAILED TO READ PDF";
3302 bool $isSubtotal =
false,
3303 bool $applySubtotalLogic =
true
3305 $savePage = $pdf->getPage();
3306 $saveX = $pdf->GetX();
3307 $prevAlign = $generator->cols[
'desc'][
'content'][
'align'];
3309 if ($isSubtotal && $applySubtotalLogic &&
$object->lines[$i]->qty < 0) {
3310 $outputlangs->load(
"subtotals");
3311 $object->lines[$i]->desc = $outputlangs->trans(
"SubtotalOf",
$object->lines[$i]->desc);
3312 $generator->cols[
'desc'][
'content'][
'align'] = ($prevAlign ===
'L') ?
'R' :
'L';
3315 $pdf->startTransaction();
3316 $pdf->SetXY($saveX, $curY);
3318 $pageAfter = $pdf->getPage();
3319 $yAfter = $pdf->GetY();
3320 $pdf->rollbackTransaction(
true);
3322 $pdf->SetFillColor($bgColor[0], $bgColor[1], $bgColor[2]);
3323 $width = $generator->page_largeur - $generator->marge_droite - $generator->marge_gauche;
3325 $pdf->SetXY($generator->marge_gauche, $curY);
3326 if ($pageAfter === $savePage) {
3327 $pdf->MultiCell($width, max(0, $yAfter - $curY),
'', 0,
'',
true);
3329 $pdf->MultiCell($width, $pdf->getPageHeight() - $pdf->getBreakMargin() - $curY,
'', 0,
'',
true);
3331 $pdf->setPage($pageAfter);
3332 $pdf->SetXY($generator->marge_gauche, $pdf->getMargins()[
'top']);
3333 $pdf->MultiCell($width, max(0, $yAfter - $pdf->getMargins()[
'top']),
'', 0,
'',
true);
3335 $pdf->setPage($savePage);
3338 $pdf->SetTextColor(
colorIsLight(implode(
',', $bgColor)));
3339 $pdf->SetXY($saveX, $curY);
3343 $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.