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(
"Parameters");
58 $head[$h][2] =
'general';
67 if (isModEnabled(
"propal") || isModEnabled(
'invoice') || isModEnabled(
'reception')) {
68 $head[$h][0] = DOL_URL_ROOT.
'/admin/pdf_other.php';
69 $head[$h][1] = $langs->trans(
"Others");
70 $head[$h][2] =
'other';
89 global
$conf, $db, $langs;
91 dol_syslog(
"pdf_getFormat Get paper format with mode=".$mode.
" MAIN_PDF_FORMAT=".(!
getDolGlobalString(
'MAIN_PDF_FORMAT') ?
'null' :
$conf->global->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);
166 define(
'K_TCPDF_THROW_EXCEPTION_ERROR',
true);
168 define(
'K_TCPDF_THROW_EXCEPTION_ERROR',
false);
173 require_once TCPDF_PATH.
'tcpdf.php';
177 require_once TCPDI_PATH.
'tcpdi.php';
188 $pdf =
new TCPDI($pagetype, $metric, $format,
true,
'UTF-8',
false, $pdfa);
190 $pdf =
new TCPDF($pagetype, $metric, $format,
true,
'UTF-8',
false, $pdfa);
223 $pdf->SetProtection($pdfrights, $pdfuserpass, $pdfownerpass, $encstrength, $pubkeys);
237 require_once TCPDF_PATH.
'tcpdf_parser.php';
239 $isencrypted =
false;
241 $content = file_get_contents($pathoffile);
244 @($parser =
new TCPDF_PARSER(ltrim($content)));
245 list($xref, $data) = $parser->getParsedData();
249 if (isset($xref[
'trailer'][
'encrypt'])) {
271 return $conf->global->MAIN_PDF_FORCE_FONT;
275 if (class_exists(
'TCPDF')) {
276 if ($outputlangs->trans(
'FONTFORPDF') !=
'FONTFORPDF') {
277 $font = $outputlangs->trans(
'FONTFORPDF');
294 if (class_exists(
'TCPDF')) {
295 if ($outputlangs->trans(
'FONTSIZEFORPDF') !=
'FONTSIZEFORPDF') {
296 $size = (int) $outputlangs->trans(
'FONTSIZEFORPDF');
317 $height = (!
getDolGlobalString(
'MAIN_DOCUMENTS_LOGO_HEIGHT') ? 20 :
$conf->global->MAIN_DOCUMENTS_LOGO_HEIGHT);
319 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
321 if ($tmp[
'height']) {
322 $width = round($height * $tmp[
'width'] / $tmp[
'height']);
323 if ($width > $maxwidth) {
324 $height = $height * $maxwidth / $width;
343 $pdf->startTransaction();
348 $start_y = $pdf->GetY();
350 $start_page = $pdf->getPage();
352 $pdf->writeHTMLCell(0, 0, 0, $start_y, $htmlcontent, 0, 1,
false,
true,
'J',
true);
354 $end_y = $pdf->GetY();
355 $end_page = $pdf->getPage();
358 if ($end_page == $start_page) {
359 $height = $end_y - $start_y;
361 for ($page = $start_page; $page <= $end_page; ++$page) {
362 $pdf->setPage($page);
363 $tmpm = $pdf->getMargins();
364 $tMargin = $tmpm[
'top'];
365 if ($page == $start_page) {
367 $height = $pdf->getPageHeight() - $start_y - $pdf->getBreakMargin();
368 } elseif ($page == $end_page) {
370 $height = $end_y - $tMargin;
372 $height = $pdf->getPageHeight() - $tMargin - $pdf->getBreakMargin();
377 $pdf = $pdf->rollbackTransaction();
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);
439function pdf_build_address($outputlangs, $sourcecompany, $targetcompany =
'', $targetcontact =
'', $usecontact = 0, $mode =
'source',
$object =
null)
443 if ($mode ==
'source' && !is_object($sourcecompany)) {
446 if ($mode ==
'target' && !is_object($targetcompany)) {
450 if (!empty($sourcecompany->state_id) && empty($sourcecompany->state)) {
451 $sourcecompany->state =
getState($sourcecompany->state_id);
453 if (!empty($targetcompany->state_id) && empty($targetcompany->state)) {
454 $targetcompany->state =
getState($targetcompany->state_id);
459 if (is_object($hookmanager)) {
460 $parameters = array(
'sourcecompany' => &$sourcecompany,
'targetcompany' => &$targetcompany,
'targetcontact' => &$targetcontact,
'outputlangs' => $outputlangs,
'mode' => $mode,
'usecontact' => $usecontact);
463 $reshook = $hookmanager->executeHooks(
'pdf_build_address', $parameters,
$object, $action);
464 $stringaddress .= $hookmanager->resPrint;
466 if (empty($reshook)) {
467 if ($mode ==
'source') {
469 if (isset($targetcompany->country_code) && !empty($sourcecompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
475 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($fulladdress).
"\n";
480 if ($sourcecompany->phone) {
481 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"PhoneShort").
": ".$outputlangs->convToOutputCharset($sourcecompany->phone);
484 if ($sourcecompany->phone_mobile &&
getDolGlobalString(
'MAIN_PDF_SHOW_SOURCE_PHONE_MOBILE')) {
485 $stringaddress .= ($stringaddress ? ($sourcecompany->phone ?
" - " :
"\n") :
'').$outputlangs->transnoentities(
"PhoneShort").
": ".$outputlangs->convToOutputCharset($sourcecompany->phone_mobile);
488 if ($sourcecompany->fax) {
489 $stringaddress .= ($stringaddress ? ($sourcecompany->phone ?
" - " :
"\n") :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($sourcecompany->fax);
492 if ($sourcecompany->email) {
493 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($sourcecompany->email);
496 if ($sourcecompany->url) {
497 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($sourcecompany->url);
502 if ($sourcecompany->tva_intra) {
503 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($sourcecompany->tva_intra);
508 if (
getDolGlobalString(
'MAIN_PROFID1_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof1)) {
509 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $sourcecompany->country_code);
510 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
513 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof1);
515 if (
getDolGlobalString(
'MAIN_PROFID2_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof2)) {
516 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $sourcecompany->country_code);
517 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
520 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof2);
522 if (
getDolGlobalString(
'MAIN_PROFID3_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof3)) {
523 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $sourcecompany->country_code);
524 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
527 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof3);
529 if (
getDolGlobalString(
'MAIN_PROFID4_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof4)) {
530 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $sourcecompany->country_code);
531 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
534 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof4);
536 if (
getDolGlobalString(
'MAIN_PROFID5_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof5)) {
537 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $sourcecompany->country_code);
538 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
541 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof5);
543 if (
getDolGlobalString(
'MAIN_PROFID6_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof6)) {
544 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $sourcecompany->country_code);
545 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
548 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof6);
551 $stringaddress .= ($stringaddress ?
"\n" :
'') .
getDolGlobalString(
'PDF_ADD_MORE_AFTER_SOURCE_ADDRESS');
555 if ($mode ==
'target' || preg_match(
'/targetwithdetails/', $mode)) {
556 if ($usecontact && (is_object($targetcontact))) {
557 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($targetcontact->getFullName($outputlangs, 1));
559 if (!empty($targetcontact->address)) {
560 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcontact)).
"\n";
561 } elseif (is_object($targetcompany)) {
562 $companytouseforaddress = $targetcompany;
565 if ($targetcontact->socid > 0 && $targetcontact->socid != $targetcompany->id) {
566 $targetcontact->fetch_thirdparty();
567 $companytouseforaddress = $targetcontact->thirdparty;
570 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($companytouseforaddress)).
"\n";
573 if (!empty($targetcontact->country_code) && $targetcontact->country_code != $sourcecompany->country_code) {
574 $stringaddress .= (($stringaddress && !
getDolGlobalString(
'MAIN_PDF_REMOVE_BREAK_BEFORE_COUNTRY')) ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcontact->country_code));
575 } elseif (empty($targetcontact->country_code) && !empty($targetcompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
576 $stringaddress .= (($stringaddress && !
getDolGlobalString(
'MAIN_PDF_REMOVE_BREAK_BEFORE_COUNTRY')) ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
579 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || preg_match(
'/targetwithdetails/', $mode)) {
581 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
582 if (!empty($targetcontact->phone_pro) || !empty($targetcontact->phone_mobile)) {
583 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
585 if (!empty($targetcontact->phone_pro)) {
586 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_pro);
588 if (!empty($targetcontact->phone_pro) && !empty($targetcontact->phone_mobile)) {
589 $stringaddress .=
" / ";
591 if (!empty($targetcontact->phone_mobile)) {
592 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_mobile);
596 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
597 if ($targetcontact->fax) {
598 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcontact->fax);
602 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
603 if ($targetcontact->email) {
604 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcontact->email);
608 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
609 if ($targetcontact->url) {
610 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset((
string) $targetcontact->url);
615 if (is_object($targetcompany)) {
616 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcompany));
618 if (!empty($targetcompany->country_code) && $targetcompany->country_code != $sourcecompany->country_code) {
619 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
621 $stringaddress .= ($stringaddress ?
"\n" :
'');
624 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || preg_match(
'/targetwithdetails/', $mode)) {
626 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
627 if (!empty($targetcompany->phone)) {
628 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
630 if (!empty($targetcompany->phone)) {
631 $stringaddress .= $outputlangs->convToOutputCharset($targetcompany->phone);
635 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
636 if ($targetcompany->fax) {
637 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcompany->fax);
641 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
642 if ($targetcompany->email) {
643 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcompany->email);
647 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
648 if ($targetcompany->url) {
649 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($targetcompany->url);
658 if ($usecontact && is_object($targetcontact) &&
getDolGlobalInt(
'MAIN_USE_COMPANY_NAME_OF_CONTACT')) {
659 $targetcontact->fetch_thirdparty();
660 if (!empty($targetcontact->thirdparty->id) && $targetcontact->thirdparty->tva_intra) {
661 $stringaddress .= ($stringaddress ?
"\n" :
'') . $outputlangs->transnoentities(
"VATIntraShort") .
': ' . $outputlangs->convToOutputCharset($targetcontact->thirdparty->tva_intra);
663 } elseif (!empty($targetcompany->tva_intra)) {
664 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($targetcompany->tva_intra);
669 if (
getDolGlobalString(
'MAIN_LEGALFORM_IN_ADDRESS') && !empty($targetcompany->forme_juridique_code)) {
671 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp;
675 if (
getDolGlobalString(
'MAIN_PROFID1_IN_ADDRESS') && !empty($targetcompany->idprof1)) {
676 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $targetcompany->country_code);
677 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
680 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof1);
682 if (
getDolGlobalString(
'MAIN_PROFID2_IN_ADDRESS') && !empty($targetcompany->idprof2)) {
683 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $targetcompany->country_code);
684 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
687 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof2);
689 if (
getDolGlobalString(
'MAIN_PROFID3_IN_ADDRESS') && !empty($targetcompany->idprof3)) {
690 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $targetcompany->country_code);
691 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
694 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof3);
696 if (
getDolGlobalString(
'MAIN_PROFID4_IN_ADDRESS') && !empty($targetcompany->idprof4)) {
697 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $targetcompany->country_code);
698 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
701 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof4);
703 if (
getDolGlobalString(
'MAIN_PROFID5_IN_ADDRESS') && !empty($targetcompany->idprof5)) {
704 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $targetcompany->country_code);
705 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
708 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof5);
710 if (
getDolGlobalString(
'MAIN_PROFID6_IN_ADDRESS') && !empty($targetcompany->idprof6)) {
711 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $targetcompany->country_code);
712 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
715 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof6);
720 if ($mode ==
'source' && !empty($sourcecompany->note_public)) {
721 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($sourcecompany->note_public);
723 if (($mode ==
'target' || preg_match(
'/targetwithdetails/', $mode)) && !empty($targetcompany->note_public)) {
724 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($targetcompany->note_public);
730 return $stringaddress;
749 if (file_exists($filepath)) {
750 $pdf->setAutoPageBreak(
false, 0);
759 $pdf->setAutoPageBreak(
true, 0);
780 $substitutionarray = getCommonSubstitutionArray($outputlangs, $onlykey, $exclude,
$object, $include);
781 $substitutionarray[
'__FROM_NAME__'] =
'__FROM_NAME__';
782 $substitutionarray[
'__FROM_EMAIL__'] =
'__FROM_EMAIL__';
783 return $substitutionarray;
803 } elseif ($unit ==
'mm') {
805 } elseif ($unit ==
'cm') {
807 } elseif ($unit ==
'in') {
811 dol_print_error(
null,
'Unexpected unit "'.$unit.
'" for pdf_watermark');
818 $text = $outputlangs->convToOutputCharset($text);
820 $savx = $pdf->getX();
821 $savy = $pdf->getY();
823 $watermark_angle = atan($h / $w) / 2;
824 $watermark_x_pos = 0;
825 $watermark_y_pos = $h / 3;
826 $watermark_x = $w / 2;
827 $watermark_y = $h / 3;
828 $pdf->SetFont(
'',
'B', 40);
829 $pdf->SetTextColor(255, 0, 0);
832 $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));
835 $pdf->SetXY($watermark_x_pos, $watermark_y_pos);
839 $pdf->Cell($w - 20, 25, $outputlangs->convToOutputCharset($text),
"", 2,
"C",
false);
844 $pdf->SetXY($savx, $savy);
863function pdf_bank(&$pdf, $outputlangs, $curx, $cury, $account, $onlynumber = 0, $default_font_size = 10)
865 global $mysoc,
$conf;
867 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formbank.class.php';
871 $pdf->SetXY($curx, $cury);
873 if (empty($onlynumber)) {
874 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizetitle);
875 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
'PaymentByTransferOnThisBankAccount').
':', 0,
'L',
false);
879 $outputlangs->load(
"banks");
882 $bickey =
"BICNumber";
883 if ($account->getCountryCode() ==
'IN') {
888 $usedetailedbban = $account->useDetailedBBAN();
891 if ($usedetailedbban) {
894 if (empty($onlynumber)) {
895 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
896 $pdf->SetXY($curx, $cury);
897 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L',
false);
907 if (empty($onlynumber)) {
908 $pdf->line($curx + 1, $cury + 1, $curx + 1, $cury + 6);
911 $bank_number_length = 0;
912 foreach ($account->getFieldsToShow() as $val) {
913 $pdf->SetXY($curx, $cury + 4);
914 $pdf->SetFont(
'',
'', $default_font_size - 3);
916 if ($val ==
'BankCode') {
919 $content = $account->code_banque;
920 } elseif ($val ==
'DeskCode') {
923 $content = $account->code_guichet;
924 } elseif ($val ==
'BankAccountNumber') {
927 $content = $account->number;
928 } elseif ($val ==
'BankAccountNumberKey') {
931 $content = $account->cle_rib;
932 } elseif ($val ==
'IBAN' || $val ==
'BIC') {
937 dol_print_error($account->db,
'Unexpected value for getFieldsToShow: '.$val);
941 if ($content ==
'') {
945 $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($content), 0,
'C',
false);
946 $pdf->SetXY($curx, $cury + 1);
948 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
949 $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities($val), 0,
'C',
false);
950 if (empty($onlynumber)) {
951 $pdf->line($curx, $cury + 1, $curx, $cury + 7);
955 $bank_number_length = 8;
959 $cury += $bank_number_length;
961 } elseif (!empty($account->number)) {
962 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
963 $pdf->SetXY($curx, $cury);
964 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L',
false);
967 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
968 $pdf->SetXY($curx, $cury);
969 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"BankAccountNumber").
': '.$outputlangs->convToOutputCharset($account->number), 0,
'L',
false);
972 if ($diffsizecontent <= 2) {
977 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
979 if (empty($onlynumber) && !empty($account->address)) {
980 $pdf->SetXY($curx, $cury);
981 $val = $outputlangs->transnoentities(
"Residence").
': '.$outputlangs->convToOutputCharset($account->address);
982 $pdf->MultiCell(100, 3, $val, 0,
'L',
false);
985 $tmpy = $pdf->getStringHeight(100, $val);
989 if (!empty($account->owner_name)) {
990 $pdf->SetXY($curx, $cury);
991 $val = $outputlangs->transnoentities(
"BankAccountOwner").
': '.$outputlangs->convToOutputCharset($account->owner_name);
992 $pdf->MultiCell(100, 3, $val, 0,
'L',
false);
993 $tmpy = $pdf->getStringHeight(100, $val);
995 } elseif (!$usedetailedbban) {
1002 if (!empty($account->iban)) {
1004 $ibanDisplay_temp = str_replace(
' ',
'', $outputlangs->convToOutputCharset($account->iban));
1007 $nbIbanDisplay_temp =
dol_strlen($ibanDisplay_temp);
1008 for ($i = 0; $i < $nbIbanDisplay_temp; $i++) {
1009 $ibanDisplay .= $ibanDisplay_temp[$i];
1010 if ($i % 4 == 3 && $i > 0) {
1011 $ibanDisplay .=
" ";
1015 $pdf->SetFont(
'',
'B', $default_font_size - 3);
1016 $pdf->SetXY($curx, $cury);
1017 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($ibankey).
': '.$ibanDisplay, 0,
'L',
false);
1021 if (!empty($account->bic)) {
1022 $pdf->SetFont(
'',
'B', $default_font_size - 3);
1023 $pdf->SetXY($curx, $cury);
1024 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($bickey).
': '.$outputlangs->convToOutputCharset($account->bic), 0,
'L',
false);
1027 return $pdf->getY();
1047function pdf_pagefoot(&$pdf, $outputlangs, $paramfreetext, $fromcompany, $marge_basse, $marge_gauche, $page_hauteur,
$object, $showdetails = 0, $hidefreetext = 0, $page_largeur = 0, $watermark =
'')
1049 global
$conf, $hookmanager;
1051 $outputlangs->load(
"dict");
1054 $marginwithfooter = 0;
1056 $dims = $pdf->getPageDimensions();
1062 if (is_object($fromcompany)) {
1063 $substitutionarray[
'__FROM_NAME__'] = $fromcompany->name;
1064 $substitutionarray[
'__FROM_EMAIL__'] = $fromcompany->email;
1073 $newfreetext = preg_replace(
'/(<img.*src=")[^\"]*viewimage\.php[^\"]*modulepart=medias[^\"]*file=([^\"]*)("[^\/]*\/>)/',
'\1file:/'.DOL_DATA_ROOT.
'/medias/\2\3', $newfreetext);
1075 $line .= $outputlangs->convToOutputCharset($newfreetext);
1084 if (is_object($fromcompany) && in_array($showdetails, array(1, 3))) {
1086 if ($fromcompany->name) {
1087 $line1 .= ($line1 ?
" - " :
"").$outputlangs->transnoentities(
"RegisteredOffice").
": ".$fromcompany->name;
1090 if ($fromcompany->address) {
1091 $line1 .= ($line1 ?
" - " :
"").str_replace(
"\n",
", ", $fromcompany->address);
1094 if ($fromcompany->zip) {
1095 $line1 .= ($line1 ?
" - " :
"").$fromcompany->zip;
1098 if ($fromcompany->town) {
1099 $line1 .= ($line1 ?
" " :
"").$fromcompany->town;
1102 if ($fromcompany->country) {
1103 $line1 .= ($line1 ?
", " :
"").$fromcompany->country;
1106 if ($fromcompany->phone) {
1107 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Phone").
": ".$fromcompany->phone;
1110 if ($fromcompany->fax) {
1111 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Fax").
": ".$fromcompany->fax;
1115 if ($fromcompany->url) {
1116 $line2 .= ($line2 ?
" - " :
"").$fromcompany->url;
1119 if ($fromcompany->email) {
1120 $line2 .= ($line2 ?
" - " :
"").$fromcompany->email;
1123 if ($showdetails == 2 || $showdetails == 3 || (!empty($fromcompany->country_code) && $fromcompany->country_code ==
'DE')) {
1125 if ($fromcompany->managers) {
1126 $line2 .= ($line2 ?
" - " :
"").$fromcompany->managers;
1132 if (!empty($fromcompany->forme_juridique_code) && $fromcompany->forme_juridique_code) {
1133 $line3 .= ($line3 ?
" - " :
"").$outputlangs->convToOutputCharset(
getFormeJuridiqueLabel((
string) $fromcompany->forme_juridique_code));
1136 if (!empty($fromcompany->capital)) {
1137 $tmpamounttoshow =
price2num($fromcompany->capital);
1138 if (is_numeric($tmpamounttoshow) && $tmpamounttoshow > 0) {
1139 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf",
price($tmpamounttoshow, 0, $outputlangs, 0, 0, 0,
$conf->currency));
1140 } elseif (!empty($fromcompany->capital)) {
1141 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf", (
string) $fromcompany->capital);
1145 if (!empty($fromcompany->idprof1) && $fromcompany->idprof1 && ($fromcompany->country_code !=
'FR' || !$fromcompany->idprof2)) {
1146 $field = $outputlangs->transcountrynoentities(
"ProfId1", $fromcompany->country_code);
1147 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1150 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof1);
1153 if (!empty($fromcompany->idprof2) && $fromcompany->idprof2) {
1154 $field = $outputlangs->transcountrynoentities(
"ProfId2", $fromcompany->country_code);
1155 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1158 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof2);
1163 if (!empty($fromcompany->idprof3) && $fromcompany->idprof3) {
1164 $field = $outputlangs->transcountrynoentities(
"ProfId3", $fromcompany->country_code);
1165 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1168 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof3);
1171 if (!empty($fromcompany->idprof4) && $fromcompany->idprof4) {
1172 $field = $outputlangs->transcountrynoentities(
"ProfId4", $fromcompany->country_code);
1173 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1176 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof4);
1179 if (!empty($fromcompany->idprof5) && $fromcompany->idprof5) {
1180 $field = $outputlangs->transcountrynoentities(
"ProfId5", $fromcompany->country_code);
1181 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1184 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof5);
1187 if (!empty($fromcompany->idprof6) && $fromcompany->idprof6) {
1188 $field = $outputlangs->transcountrynoentities(
"ProfId6", $fromcompany->country_code);
1189 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1192 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof6);
1195 if (!empty($fromcompany->idprof7) && $fromcompany->idprof7) {
1196 $field = $outputlangs->transcountrynoentities(
"ProfId7", $fromcompany->country_code);
1197 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1200 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof7);
1203 if (!empty($fromcompany->idprof8) && $fromcompany->idprof8) {
1204 $field = $outputlangs->transcountrynoentities(
"ProfId8", $fromcompany->country_code);
1205 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1208 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof8);
1211 if (!empty($fromcompany->idprof9) && $fromcompany->idprof9) {
1212 $field = $outputlangs->transcountrynoentities(
"ProfId9", $fromcompany->country_code);
1213 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1216 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof9);
1219 if (!empty($fromcompany->idprof10) && $fromcompany->idprof10) {
1220 $field = $outputlangs->transcountrynoentities(
"ProfId10", $fromcompany->country_code);
1221 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1224 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof10);
1227 if (!empty($fromcompany->tva_intra) && $fromcompany->tva_intra !=
'') {
1228 $line4 .= ($line4 ?
" - " :
"").$outputlangs->transnoentities(
"VATIntraShort").
": ".$outputlangs->convToOutputCharset($fromcompany->tva_intra);
1231 $pdf->SetFont(
'',
'', 7);
1232 $pdf->SetDrawColor(224, 224, 224);
1235 list($r, $g, $b) = sscanf(
getDolGlobalString(
'PDF_FOOTER_TEXT_COLOR'),
'%d, %d, %d');
1236 $pdf->SetTextColor($r, $g, $b);
1240 $freetextheight = 0;
1251 $freetextheight = $pdf->getStringHeight($width, $line);
1260 if (is_object($hookmanager)) {
1261 $parameters = array(
'line1' => $line1,
'line2' => $line2,
'line3' => $line3,
'line4' => $line4,
'outputlangs' => $outputlangs);
1263 $hookmanager->executeHooks(
'pdf_pagefoot', $parameters,
$object, $action);
1264 if (!empty($hookmanager->resPrint) && $hidefreetext == 0) {
1265 $mycustomfooter = $hookmanager->resPrint;
1268 $marginwithfooter = $marge_basse + $freetextheight + $mycustomfooterheight;
1269 $posy = (float) $marginwithfooter;
1273 list($r, $g, $b) = sscanf(
$conf->global->PDF_FOOTER_BACKGROUND_COLOR,
'%d, %d, %d');
1274 $pdf->setAutoPageBreak(
false, 0);
1275 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F', array(), $fill_color = array($r, $g, $b));
1276 $pdf->setAutoPageBreak(
true, 0);
1280 $pdf->setAutoPageBreak(
false, 0);
1283 $pdf->SetXY($dims[
'lm'], -$posy);
1285 $pdf->MultiCell(0, 3, $line, 0, $align,
false);
1287 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1289 $posy -= $freetextheight;
1292 $pdf->setAutoPageBreak(
true, 0);
1299 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1310 $pdf->setAutoPageBreak(
false, 0);
1312 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $mycustomfooterheight, $dims[
'lm'], $dims[
'hk'] - $posy,
dol_htmlentitiesbr($mycustomfooter, 1,
'UTF-8', 0));
1314 $pdf->setAutoPageBreak(
true, 0);
1317 $posy -= $mycustomfooterheight - 3;
1320 $marginwithfooter = $marge_basse + $freetextheight + (!empty($line1) ? 3 : 0) + (!empty($line2) ? 3 : 0) + (!empty($line3) ? 3 : 0) + (!empty($line4) ? 3 : 0);
1321 $posy = (float) $marginwithfooter;
1325 list($r, $g, $b) = sscanf(
$conf->global->PDF_FOOTER_BACKGROUND_COLOR,
'%d, %d, %d');
1326 $pdf->setAutoPageBreak(
false, 0);
1327 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F', array(), $fill_color = array($r, $g, $b));
1328 $pdf->setAutoPageBreak(
true, 0);
1332 $pdf->setAutoPageBreak(
false, 0);
1335 $pdf->SetXY($dims[
'lm'], -$posy);
1337 $pdf->MultiCell(0, 3, $line, 0, $align,
false);
1339 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1341 $posy -= $freetextheight;
1344 $pdf->setAutoPageBreak(
true, 0);
1353 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1363 if (!empty($line1)) {
1364 $pdf->SetFont(
'',
'B', 7);
1365 $pdf->SetXY($dims[
'lm'], -$posy);
1366 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line1, 0,
'C',
false);
1368 $pdf->SetFont(
'',
'', 7);
1371 if (!empty($line2)) {
1372 $pdf->SetFont(
'',
'B', 7);
1373 $pdf->SetXY($dims[
'lm'], -$posy);
1374 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line2, 0,
'C',
false);
1376 $pdf->SetFont(
'',
'', 7);
1379 if (!empty($line3)) {
1380 $pdf->SetXY($dims[
'lm'], -$posy);
1381 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line3, 0,
'C',
false);
1384 if (!empty($line4)) {
1386 $pdf->SetXY($dims[
'lm'], -$posy);
1387 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line4, 0,
'C',
false);
1394 $pdf->SetXY($dims[
'wk'] - $dims[
'rm'] - 18 -
getDolGlobalInt(
'PDF_FOOTER_PAGE_NUMBER_X', 0), -$posy -
getDolGlobalInt(
'PDF_FOOTER_PAGE_NUMBER_Y', 0));
1396 $pagination = $pdf->PageNo().
' / '.$pdf->getAliasNbPages();
1397 $fontRenderCorrection = 0;
1398 if (in_array(
pdf_getPDFFont($outputlangs), array(
'freemono',
'DejaVuSans'))) {
1399 $fontRenderCorrection = 10;
1401 $pdf->MultiCell(18 + $fontRenderCorrection, 2, $pagination, 0,
'R',
false);
1404 if (!empty($watermark)) {
1405 pdf_watermark($pdf, $outputlangs, $page_hauteur, $page_largeur,
'mm', $watermark);
1408 return $marginwithfooter;
1429 if (!empty($linkedobjects)) {
1430 foreach ($linkedobjects as $linkedobject) {
1431 $reftoshow = $linkedobject[
"ref_title"].
' : '.$linkedobject[
"ref_value"];
1432 if (!empty($linkedobject[
"date_value"])) {
1433 $reftoshow .=
' / '.$linkedobject[
"date_value"];
1437 $pdf->SetXY($posx, $posy);
1438 $pdf->SetFont(
'',
'', (
float) $default_font_size - 2);
1439 $pdf->MultiCell($w, $h, $reftoshow,
'', $align);
1443 return $pdf->getY();
1463function pdf_writelinedesc(&$pdf,
$object, $i, $outputlangs, $w, $h, $posx, $posy, $hideref = 0, $hidedesc = 0, $issupplierline = 0, $align =
'J')
1465 global $db,
$conf, $langs, $hookmanager;
1470 if (is_object($hookmanager)) {
1471 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1472 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1473 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1475 $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);
1479 $reshook = $hookmanager->executeHooks(
'pdf_writelinedesc', $parameters,
$object, $action);
1481 if (!empty($hookmanager->resPrint)) {
1482 $result .= $hookmanager->resPrint;
1485 if (empty($reshook)) {
1487 $labelproductservice = preg_replace(
'/(<img[^>]*src=")[^\"]*viewimage\.php[^\"]*modulepart=medias[^\"]*file=([^\"]*)/',
'\1file:/'.DOL_DATA_ROOT.
'/medias/\2\3', $labelproductservice, -1, $nbrep);
1494 $labelproductservice = preg_replace(
'/(<img[^>]*src=")([^"]*)(&)([^"]*")/',
'\1\2&\4', $labelproductservice, -1, $nbrep);
1497 $pdf->setListIndentWidth(5);
1498 $TMarginList = [
'ul' => [[
'h' => 0.1, ],[
'h' => 0.1, ]],
'li' => [[
'h' => 0.1, ],],];
1499 $pdf->setHtmlVSpace($TMarginList);
1503 $pdf->writeHTMLCell($w, $h, $posx, $posy, $outputlangs->convToOutputCharset($labelproductservice), 0, 1,
false,
true, $align,
true);
1504 $result .= $labelproductservice;
1522 global $db,
$conf, $langs;
1524 $idprod = (!empty(
$object->lines[$i]->fk_product) ?
$object->lines[$i]->fk_product :
false);
1525 $label = (!empty(
$object->lines[$i]->label) ?
$object->lines[$i]->label : (!empty(
$object->lines[$i]->product_label) ?
$object->lines[$i]->product_label :
''));
1526 $product_barcode = (!empty(
$object->lines[$i]->product_barcode) ?
$object->lines[$i]->product_barcode :
"");
1527 $desc = (!empty(
$object->lines[$i]->desc) ?
$object->lines[$i]->desc : (!empty(
$object->lines[$i]->description) ?
$object->lines[$i]->description :
''));
1528 $ref_supplier = (!empty(
$object->lines[$i]->ref_supplier) ?
$object->lines[$i]->ref_supplier : (!empty(
$object->lines[$i]->ref_fourn) ?
$object->lines[$i]->ref_fourn :
''));
1529 $note = (!empty(
$object->lines[$i]->note) ?
$object->lines[$i]->note :
'');
1530 $dbatch = (!empty(
$object->lines[$i]->detail_batch) ?
$object->lines[$i]->detail_batch :
false);
1534 if ($issupplierline) {
1535 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
1538 include_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
1542 include_once DOL_DOCUMENT_ROOT .
'/product/class/productcustomerprice.class.php';
1547 $idprod = (!empty(
$object->lines[$i]->fk_product) ?
$object->lines[$i]->fk_product :
false);
1549 $prodser->fetch($idprod);
1551 if ($multilangsactive) {
1552 $prodser->getMultiLangs();
1553 $object->lines[$i]->multilangs = $prodser->multilangs;
1557 if (!empty(
$object->lines[$i]->label)) {
1558 $label =
$object->lines[$i]->label;
1560 if (!empty(
$object->lines[$i]->multilangs[$outputlangs->defaultlang][
'label']) && $multilangsactive) {
1561 $label =
$object->lines[$i]->multilangs[$outputlangs->defaultlang][
'label'];
1563 if (!empty(
$object->lines[$i]->product_label)) {
1564 $label =
$object->lines[$i]->product_label;
1571 if (!empty(
$object->lines[$i]->desc)) {
1572 $desc =
$object->lines[$i]->desc;
1574 if (!empty(
$object->lines[$i]->multilangs[$outputlangs->defaultlang][
'description']) && $multilangsactive) {
1575 $desc =
$object->lines[$i]->multilangs[$outputlangs->defaultlang][
'description'];
1577 if (!empty(
$object->lines[$i]->description)) {
1578 $desc =
$object->lines[$i]->description;
1585 $ref_supplier = (!empty(
$object->lines[$i]->ref_supplier) ?
$object->lines[$i]->ref_supplier : (!empty(
$object->lines[$i]->ref_fourn) ?
$object->lines[$i]->ref_fourn :
''));
1587 $note = (!empty(
$object->lines[$i]->note) ?
$object->lines[$i]->note :
'');
1589 $dbatch = (!empty(
$object->lines[$i]->detail_batch) ?
$object->lines[$i]->detail_batch :
false);
1593 if ($multilangsactive && ($outputlangs->defaultlang != $langs->defaultlang)) {
1594 $translatealsoifmodified =
getDolGlobalString(
'MAIN_MULTILANG_TRANSLATE_EVEN_IF_MODIFIED');
1602 $textwasnotmodified = ($label == $prodser->label);
1603 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"label"]) && ($textwasnotmodified || $translatealsoifmodified)) {
1604 $label = $prodser->multilangs[$outputlangs->defaultlang][
"label"];
1609 $textwasnotmodified =
false;
1613 $textwasnotmodified = ($desc == $prodser->description);
1615 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"description"])) {
1616 if ($textwasnotmodified) {
1617 $desc = str_replace($prodser->description, $prodser->multilangs[$outputlangs->defaultlang][
"description"], $desc);
1618 } elseif ($translatealsoifmodified) {
1619 $desc = $prodser->multilangs[$outputlangs->defaultlang][
"description"];
1624 $textwasnotmodified = ($note == $prodser->note_public);
1625 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"other"]) && ($textwasnotmodified || $translatealsoifmodified)) {
1626 $note = $prodser->multilangs[$outputlangs->defaultlang][
"other"];
1629 } elseif ((
$object->element ==
'facture' ||
$object->element ==
'facturefourn') && preg_match(
'/^\(DEPOSIT\).+/', $desc)) {
1630 $desc = str_replace(
'(DEPOSIT)', $outputlangs->trans(
'Deposit'), $desc);
1633 $libelleproduitservice =
'';
1636 $libelleproduitservice = $label;
1637 if (!empty($libelleproduitservice) &&
getDolGlobalString(
'PDF_BOLD_PRODUCT_LABEL')) {
1641 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1643 $libelleproduitservice =
'<b>'.$libelleproduitservice.
'</b>';
1650 $prodser->get_sousproduits_arbo();
1651 if (!empty($prodser->sousprods) && is_array($prodser->sousprods) && count($prodser->sousprods)) {
1652 $outputlangs->load(
'mrp');
1653 $tmparrayofsubproducts = reset($prodser->sousprods);
1656 if (isset(
$object->lines[$i]->qty) && !empty(
$object->lines[$i]->qty)) {
1657 $qtyText =
$object->lines[$i]->qty;
1658 } elseif (isset(
$object->lines[$i]->qty_shipped) && !empty(
$object->lines[$i]->qty_shipped)) {
1659 $qtyText =
$object->lines[$i]->qty;
1663 foreach ($tmparrayofsubproducts as $subprodval) {
1667 $outputlangs->trans(
'Qty').
':'.$qtyText.
' x '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1].
'= '.$outputlangs->trans(
'QtyTot').
':'.$subprodval[1] * $qtyText :
1668 $outputlangs->trans(
'Qty').
' '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1])
1672 foreach ($tmparrayofsubproducts as $subprodval) {
1674 dol_concatdesc($libelleproduitservice,
" * ".$subprodval[5].(($subprodval[5] && $subprodval[3]) ?
' - ' :
'').$subprodval[3]),
1676 $outputlangs->trans(
'Qty').
':'.$qtyText.
' x '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1].
'= '.$outputlangs->trans(
'QtyTot').
':'.$subprodval[1] * $qtyText :
1677 $outputlangs->trans(
'Qty').
' '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1])
1684 if (isModEnabled(
'barcode') &&
getDolGlobalString(
'MAIN_GENERATE_DOCUMENTS_SHOW_PRODUCT_BARCODE') && !empty($product_barcode)) {
1685 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $outputlangs->trans(
"BarCode").
" ".$product_barcode);
1689 if (!empty($desc) && ($desc != $label)) {
1690 if ($desc ==
'(CREDIT_NOTE)' &&
$object->lines[$i]->fk_remise_except) {
1692 $discount->fetch(
$object->lines[$i]->fk_remise_except);
1693 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
1694 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromCreditNote", $sourceref);
1695 } elseif ($desc ==
'(DEPOSIT)' &&
$object->lines[$i]->fk_remise_except) {
1697 $discount->fetch(
$object->lines[$i]->fk_remise_except);
1698 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
1699 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromDeposit", $sourceref);
1702 $libelleproduitservice .=
' ('.dol_print_date($discount->datec,
'day',
'', $outputlangs).
')';
1704 } elseif ($desc ==
'(EXCESS RECEIVED)' &&
$object->lines[$i]->fk_remise_except) {
1706 $discount->fetch(
$object->lines[$i]->fk_remise_except);
1707 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessReceived", $discount->ref_facture_source);
1708 } elseif ($desc ==
'(EXCESS PAID)' &&
$object->lines[$i]->fk_remise_except) {
1710 $discount->fetch(
$object->lines[$i]->fk_remise_except);
1711 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessPaid", $discount->ref_invoice_supplier_source);
1715 if (!empty(
$object->element)) {
1716 $tmpkey =
'MAIN_DOCUMENTS_HIDE_DESCRIPTION_FOR_'.strtoupper(
$object->element);
1721 if (empty($hidedesc)) {
1723 $libelleproduitservice =
dol_concatdesc($desc, $libelleproduitservice);
1726 $libelleproduitservice = $desc;
1728 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
1733 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
1739 $prefix_prodserv =
"";
1742 if ($prodser->isService()) {
1743 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Service").
" ";
1745 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Product").
" ";
1749 if (empty($hideref)) {
1750 if ($issupplierline) {
1752 $ref_prodserv = $prodser->ref;
1753 if ($ref_supplier) {
1754 $ref_prodserv .= ($prodser->ref ?
' (' :
'').$outputlangs->transnoentitiesnoconv(
"SupplierRef").
' '.$ref_supplier.($prodser->ref ?
')' :
'');
1756 } elseif (
getDolGlobalInt(
'PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES') == 1) {
1757 $ref_prodserv = $ref_supplier;
1758 } elseif (
getDolGlobalInt(
'PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES') == 2) {
1759 $ref_prodserv = $ref_supplier.
' ('.$outputlangs->transnoentitiesnoconv(
"InternalRef").
' '.$prodser->ref.
')';
1762 $ref_prodserv = $prodser->ref;
1766 $filter = array(
'fk_product' => (
string) $idprod,
'fk_soc' => (
string)
$object->socid);
1768 $nbCustomerPrices = $productCustomerPriceStatic->fetchAll(
'',
'', 1, 0, $filter);
1770 if ($nbCustomerPrices > 0) {
1771 $productCustomerPrice =
null;
1772 if (count($productCustomerPriceStatic->lines) > 0) {
1773 $date_now = (int) floor(
dol_now() / 86400) * 86400;
1774 foreach ($productCustomerPriceStatic->lines as $k => $custprice_line) {
1775 if ($custprice_line->date_begin <= $date_now && (empty($custprice_line->date_end) || $date_now <= $custprice_line->date_end)) {
1776 $productCustomerPrice = $custprice_line;
1782 if (isset($productCustomerPrice) && !empty($productCustomerPrice->ref_customer)) {
1783 switch (
$conf->global->PRODUIT_CUSTOMER_PRICES_PDF_REF_MODE) {
1785 $ref_prodserv = $productCustomerPrice->ref_customer;
1789 $ref_prodserv = $productCustomerPrice->ref_customer .
' (' . $outputlangs->transnoentitiesnoconv(
'InternalRef') .
' ' . $ref_prodserv .
')';
1793 $ref_prodserv = $ref_prodserv .
' (' . $outputlangs->transnoentitiesnoconv(
'RefCustomer') .
' ' . $productCustomerPrice->ref_customer .
')';
1800 if (!empty($libelleproduitservice) && !empty($ref_prodserv)) {
1801 $ref_prodserv .=
" - ";
1805 if (!empty($ref_prodserv) &&
getDolGlobalString(
'PDF_BOLD_PRODUCT_REF_AND_PERIOD')) {
1807 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1809 $ref_prodserv =
'<b>'.$ref_prodserv.
'</b>';
1812 $libelleproduitservice = $prefix_prodserv.$ref_prodserv.$libelleproduitservice;
1815 if (
getDolGlobalString(
'CATEGORY_ADD_DESC_INTO_DOC') && $idprod && isModEnabled(
'category')) {
1816 include_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
1819 $tblcateg = $categstatic->containing($idprod, Categorie::TYPE_PRODUCT);
1820 foreach ($tblcateg as $cate) {
1822 $desccateg = $cate->description;
1824 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desccateg);
1829 if (!empty(
$object->lines[$i]->date_start) || !empty(
$object->lines[$i]->date_end)) {
1833 if (
$object->lines[$i]->date_start &&
$object->lines[$i]->date_end) {
1834 $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)).
')';
1836 if (
$object->lines[$i]->date_start && !
$object->lines[$i]->date_end) {
1837 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateFrom',
dol_print_date(
$object->lines[$i]->date_start, $format,
false, $outputlangs)).
')';
1839 if (!
$object->lines[$i]->date_start &&
$object->lines[$i]->date_end) {
1840 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateUntil',
dol_print_date(
$object->lines[$i]->date_end, $format,
false, $outputlangs)).
')';
1845 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1847 $libelleproduitservice .=
'<br><b style="color:#333666;" ><em>'.$period.
'</em></b>';
1849 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $period);
1855 if (!empty($dbatch)) {
1860 include_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
1861 include_once DOL_DOCUMENT_ROOT.
'/product/class/productbatch.class.php';
1866 foreach ($dbatch as $detail) {
1868 if ($detail->eatby) {
1869 $dte[] = $outputlangs->transnoentitiesnoconv(
'printEatby',
dol_print_date($detail->eatby, $format,
false, $outputlangs));
1871 if ($detail->sellby) {
1872 $dte[] = $outputlangs->transnoentitiesnoconv(
'printSellby',
dol_print_date($detail->sellby, $format,
false, $outputlangs));
1874 if ($detail->batch) {
1875 $dte[] = $outputlangs->transnoentitiesnoconv(
'printBatch', $detail->batch);
1878 $dte[] = $outputlangs->transnoentitiesnoconv(
'printQty', (
string) $detail->qty);
1882 if (
$object->element ==
'shipping' && $detail->fk_origin_stock > 0 &&
getDolGlobalInt(
'PRODUCTBATCH_SHOW_WAREHOUSE_ON_SHIPMENT')) {
1883 $resproductbatch = $tmpproductbatch->fetch($detail->fk_origin_stock);
1884 if ($resproductbatch > 0) {
1885 $reswarehouse = $tmpwarehouse->fetch($tmpproductbatch->warehouseid);
1886 if ($reswarehouse > 0) {
1887 $dte[] = $tmpwarehouse->ref;
1892 $libelleproduitservice .=
"__N__ ".implode(
" - ", $dte);
1902 $libelleproduitservice = preg_replace(
'/__N__/',
'<br>', $libelleproduitservice);
1904 $libelleproduitservice = preg_replace(
'/__N__/',
"\n", $libelleproduitservice);
1908 return $libelleproduitservice;
1922 global $hookmanager;
1927 if (is_object($hookmanager)) {
1928 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1929 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1930 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1932 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
1934 $reshook = $hookmanager->executeHooks(
'pdf_getlinenum', $parameters,
$object, $action);
1935 $result .= $hookmanager->resPrint;
1937 if (empty($reshook)) {
1955 global $hookmanager;
1960 if (is_object($hookmanager)) {
1961 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1962 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1963 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1965 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
1967 $reshook = $hookmanager->executeHooks(
'pdf_getlineref', $parameters,
$object, $action);
1968 $result .= $hookmanager->resPrint;
1970 if (empty($reshook)) {
1988 global $hookmanager;
1993 if (is_object($hookmanager)) {
1994 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1995 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1996 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1998 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2000 $reshook = $hookmanager->executeHooks(
'pdf_getlineref_supplier', $parameters,
$object, $action);
2001 $result .= $hookmanager->resPrint;
2003 if (empty($reshook)) {
2020 global
$conf, $hookmanager, $mysoc;
2025 if (is_object($hookmanager)) {
2026 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2027 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2028 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2030 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2032 $reshook = $hookmanager->executeHooks(
'pdf_getlinevatrate', $parameters,
$object, $action);
2034 if (!empty($hookmanager->resPrint)) {
2035 $result .= $hookmanager->resPrint;
2038 if (empty($reshook)) {
2039 if (empty($hidedetails) || $hidedetails > 1) {
2045 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
2050 $tmpresult .=
vatrate((
string) abs(
$object->lines[$i]->localtax1_tx),
false);
2055 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
2060 $tmpresult .=
vatrate((
string) abs(
$object->lines[$i]->localtax2_tx),
false);
2065 $result .= $tmpresult;
2082 global
$conf, $hookmanager;
2092 if (is_object($hookmanager)) {
2093 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2094 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2095 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2097 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2099 $reshook = $hookmanager->executeHooks(
'pdf_getlineupexcltax', $parameters,
$object, $action);
2101 if (!empty($hookmanager->resPrint)) {
2102 $result .= $hookmanager->resPrint;
2105 if (empty($reshook)) {
2106 if (empty($hidedetails) || $hidedetails > 1) {
2107 $subprice = (isModEnabled(
"multicurrency") &&
$object->multicurrency_tx != 1 ?
$object->lines[$i]->multicurrency_subprice :
$object->lines[$i]->subprice);
2108 $result .=
price($sign * $subprice, 0, $outputlangs);
2125 global $hookmanager,
$conf;
2135 if (is_object($hookmanager)) {
2136 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2137 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2138 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2140 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2142 $reshook = $hookmanager->executeHooks(
'pdf_getlineupwithtax', $parameters,
$object, $action);
2144 if (!empty($hookmanager->resPrint)) {
2145 $result .= $hookmanager->resPrint;
2148 if (empty($reshook)) {
2149 if (empty($hidedetails) || $hidedetails > 1) {
2150 $result .=
price($sign * ((
$object->lines[$i]->subprice) + (
$object->lines[$i]->subprice) * (
$object->lines[$i]->tva_tx) / 100), 0, $outputlangs);
2167 global $hookmanager;
2172 if (is_object($hookmanager)) {
2173 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2174 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2175 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2177 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2179 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty', $parameters,
$object, $action);
2181 if (!empty($hookmanager->resPrint)) {
2182 $result = $hookmanager->resPrint;
2185 if (empty($reshook)) {
2186 if (
$object->lines[$i]->special_code == 3) {
2189 if (empty($hidedetails) || $hidedetails > 1) {
2190 $result .=
$object->lines[$i]->qty;
2207 global $hookmanager;
2212 if (is_object($hookmanager)) {
2213 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2214 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2215 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2217 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2219 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_asked', $parameters,
$object, $action);
2221 if (!empty($hookmanager->resPrint)) {
2222 $result .= $hookmanager->resPrint;
2225 if (empty($reshook)) {
2226 if (
$object->lines[$i]->special_code == 3) {
2229 if (empty($hidedetails) || $hidedetails > 1) {
2230 $result .=
$object->lines[$i]->qty_asked;
2247 global $hookmanager;
2252 if (is_object($hookmanager)) {
2253 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2254 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2255 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2257 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2259 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_shipped', $parameters,
$object, $action);
2261 if (!empty($hookmanager->resPrint)) {
2262 $result .= $hookmanager->resPrint;
2265 if (empty($reshook)) {
2266 if (
$object->lines[$i]->special_code == 3) {
2269 if (empty($hidedetails) || $hidedetails > 1) {
2270 $result .=
$object->lines[$i]->qty_shipped;
2287 global $hookmanager;
2292 if (is_object($hookmanager)) {
2293 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2294 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2295 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2297 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2299 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_keeptoship', $parameters,
$object, $action);
2301 if (!empty($hookmanager->resPrint)) {
2302 $result .= $hookmanager->resPrint;
2305 if (empty($reshook)) {
2306 if (
$object->lines[$i]->special_code == 3) {
2309 if (empty($hidedetails) || $hidedetails > 1) {
2310 $result .= (
$object->lines[$i]->qty_asked -
$object->lines[$i]->qty_shipped);
2327 global $hookmanager;
2332 if (is_object($hookmanager)) {
2333 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2334 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2335 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2337 $parameters = array(
2339 'outputlangs' => $outputlangs,
2340 'hidedetails' => $hidedetails,
2341 'special_code' => $special_code
2344 $reshook = $hookmanager->executeHooks(
'pdf_getlineunit', $parameters,
$object, $action);
2346 if (!empty($hookmanager->resPrint)) {
2347 $result .= $hookmanager->resPrint;
2350 if (empty($reshook)) {
2351 if (empty($hidedetails) || $hidedetails > 1) {
2352 $result .=
$object->lines[$i]->getLabelOfUnit(
'short', $outputlangs, 1);
2370 global $hookmanager;
2372 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
2377 if (is_object($hookmanager)) {
2378 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2379 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2380 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2382 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2384 $reshook = $hookmanager->executeHooks(
'pdf_getlineremisepercent', $parameters,
$object, $action);
2386 if (!empty($hookmanager->resPrint)) {
2387 $result .= $hookmanager->resPrint;
2390 if (empty($reshook)) {
2391 if (
$object->lines[$i]->special_code == 3) {
2394 if (empty($hidedetails) || $hidedetails > 1) {
2413 if (empty($hookmanager)) {
2414 global $hookmanager;
2421 if (is_object($hookmanager)) {
2422 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2423 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2424 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2426 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2428 $reshook = $hookmanager->executeHooks(
'pdf_getlineprogress', $parameters,
$object, $action);
2430 if (!empty($hookmanager->resPrint)) {
2431 return $hookmanager->resPrint;
2434 if (empty($reshook)) {
2435 if (
$object->lines[$i]->special_code == 3) {
2438 if (empty($hidedetails) || $hidedetails > 1) {
2441 if (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2442 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2444 $result = round(
$object->lines[$i]->situation_percent - $prev_progress, 1).
'%';
2446 $result = round(
$object->lines[$i]->situation_percent, 1).
'%';
2464 global
$conf, $hookmanager;
2474 if (is_object($hookmanager)) {
2475 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2476 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2477 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2479 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code,
'sign' => $sign);
2481 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalexcltax', $parameters,
$object, $action);
2483 if (!empty($hookmanager->resPrint)) {
2484 $result .= $hookmanager->resPrint;
2487 if (empty($reshook)) {
2488 if (!empty(
$object->lines[$i]) &&
$object->lines[$i]->special_code == 3) {
2489 $result .= $outputlangs->transnoentities(
"Option");
2490 } elseif (empty($hidedetails) || $hidedetails > 1) {
2491 $total_ht = (isModEnabled(
"multicurrency") &&
$object->multicurrency_tx != 1 ?
$object->lines[$i]->multicurrency_total_ht :
$object->lines[$i]->total_ht);
2492 if (!empty(
$object->lines[$i]->situation_percent) &&
$object->lines[$i]->situation_percent > 0) {
2496 if (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2497 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2498 $progress = (
$object->lines[$i]->situation_percent - $prev_progress) / 100;
2500 $result .=
price($sign * ($total_ht / (
$object->lines[$i]->situation_percent / 100)) * $progress, 0, $outputlangs);
2502 $result .=
price($sign * $total_ht, 0, $outputlangs);
2520 global $hookmanager,
$conf;
2530 if (is_object($hookmanager)) {
2531 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2532 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2533 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2535 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2537 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalwithtax', $parameters,
$object, $action);
2539 if (!empty($hookmanager->resPrint)) {
2540 $result .= $hookmanager->resPrint;
2543 if (empty($reshook)) {
2544 if (
$object->lines[$i]->special_code == 3) {
2545 $result .= $outputlangs->transnoentities(
"Option");
2546 } elseif (empty($hidedetails) || $hidedetails > 1) {
2547 $total_ttc = (isModEnabled(
"multicurrency") &&
$object->multicurrency_tx != 1 ?
$object->lines[$i]->multicurrency_total_ttc :
$object->lines[$i]->total_ttc);
2548 if (isset(
$object->lines[$i]->situation_percent) &&
$object->lines[$i]->situation_percent > 0) {
2552 if (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2553 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2554 $progress = (
$object->lines[$i]->situation_percent - $prev_progress) / 100;
2556 $result .=
price($sign * ($total_ttc / (
$object->lines[$i]->situation_percent / 100)) * $progress, 0, $outputlangs);
2558 $result .=
price($sign * $total_ttc, 0, $outputlangs);
2575 global $db, $hookmanager;
2577 $linkedobjects = array();
2581 foreach (
$object->linkedObjects as $objecttype => $objects) {
2582 if ($objecttype ==
'facture') {
2584 } elseif ($objecttype ==
'propal' || $objecttype ==
'supplier_proposal') {
2585 '@phan-var-force array<Propal|SupplierProposal> $objects';
2586 $outputlangs->load(
'propal');
2588 foreach ($objects as $elementobject) {
2589 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefProposal");
2590 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2591 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DatePropal");
2592 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
2594 } elseif ($objecttype ==
'commande' || $objecttype ==
'supplier_order' || $objecttype ==
'order_supplier') {
2595 '@phan-var-force array<Commande|CommandeFournisseur> $objects';
2596 $outputlangs->load(
'orders');
2599 if (empty(
$object->context[
'DolPublicNoteAppendedGetLinkedObjects'])) {
2601 foreach ($objects as $elementobject) {
2602 $object->note_public =
dol_concatdesc(
$object->note_public, $outputlangs->transnoentities($elementobject->ref).(empty($elementobject->ref_client) ?
'' :
' ('.$elementobject->ref_client.
')').(empty($elementobject->ref_supplier) ?
'' :
' ('.$elementobject->ref_supplier.
')').
' ');
2606 } elseif (count($objects) == 1) {
2607 $elementobject = array_shift($objects);
2608 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder");
2609 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref).(!empty($elementobject->ref_client) ?
' ('.$elementobject->ref_client.
')' :
'').(!empty($elementobject->ref_supplier) ?
' ('.$elementobject->ref_supplier.
')' :
'');
2610 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"OrderDate");
2611 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
2613 } elseif ($objecttype ==
'contrat') {
2614 '@phan-var-force Contrat[] $objects';
2615 $outputlangs->load(
'contracts');
2616 foreach ($objects as $elementobject) {
2617 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefContract");
2618 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2619 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DateContract");
2620 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date_contrat,
'day',
'', $outputlangs);
2622 } elseif ($objecttype ==
'fichinter') {
2623 '@phan-var-force Fichinter[] $objects';
2624 $outputlangs->load(
'interventions');
2625 foreach ($objects as $elementobject) {
2626 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"InterRef");
2627 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2628 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"InterDate");
2629 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->datec,
'day',
'', $outputlangs);
2631 } elseif ($objecttype ==
'shipping') {
2632 '@phan-var-force Expedition[] $objects';
2633 $outputlangs->loadLangs(array(
"orders",
"sendings"));
2635 if (count($objects) > 1) {
2639 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
2640 $refListsTxt .= $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending").
' :';
2642 $refListsTxt .= $outputlangs->transnoentities(
"RefSending").
' :';
2645 foreach ($objects as $elementobject) {
2646 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
2647 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
2648 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
2649 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2651 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
2657 $refListsTxt .= (!empty($refListsTxt) ?
' ' :
'');
2658 if (! is_object($order)) {
2659 $refListsTxt .= $outputlangs->transnoentities($elementobject->ref);
2661 $refListsTxt .= $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
'');
2662 $refListsTxt .=
' / '.$outputlangs->transnoentities($elementobject->ref);
2666 if (empty(
$object->context[
'DolPublicNoteAppendedGetLinkedObjects']) && !
getDolGlobalString(
"PDF_HIDE_LINKED_OBJECT_IN_PUBLIC_NOTE")) {
2669 } elseif (count($objects) == 1) {
2670 $elementobject = array_shift($objects);
2673 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
2674 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
2675 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
2676 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2678 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
2685 if (! is_object($order)) {
2686 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefSending");
2687 if (empty($linkedobjects[$objecttype][
'ref_value'])) {
2688 $linkedobjects[$objecttype][
'ref_value'] =
'';
2690 $linkedobjects[$objecttype][
'ref_value'] .=
' / ';
2692 $linkedobjects[$objecttype][
'ref_value'] .= $outputlangs->transnoentities($elementobject->ref);
2693 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
2695 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending");
2696 if (empty($linkedobjects[$objecttype][
'ref_value'])) {
2697 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
'');
2699 $linkedobjects[$objecttype][
'ref_value'] .=
' / '.$outputlangs->transnoentities($elementobject->ref);
2700 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
2706 $object->context[
'DolPublicNoteAppendedGetLinkedObjects'] = 1;
2709 if (is_object($hookmanager)) {
2710 $parameters = array(
'linkedobjects' => $linkedobjects,
'outputlangs' => $outputlangs);
2712 $reshook = $hookmanager->executeHooks(
'pdf_getLinkedObjects', $parameters,
$object, $action);
2713 if (empty($reshook)) {
2714 $linkedobjects = array_replace($linkedobjects, $hookmanager->resArray);
2715 } elseif ($reshook > 0) {
2717 $linkedobjects = $hookmanager->resArray;
2721 return $linkedobjects;
2734 $maxheight =
getDolGlobalInt(
'MAIN_DOCUMENTS_WITH_PICTURE_HEIGHT', 32);
2736 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
2740 if ($tmp[
'height']) {
2741 $width = (int) round($maxheight * $tmp[
'width'] / $tmp[
'height']);
2742 if ($width > $maxwidth) {
2744 $height = (int) round($maxwidth * $tmp[
'height'] / $tmp[
'width']);
2746 $height = $maxheight;
2749 return array(
'width' => $width,
'height' => $height);
2765 global $hookmanager;
2771 if (
$object->lines[$i]->special_code == 3) {
2773 return $outputlangs->transnoentities(
"Option");
2775 if (is_object($hookmanager)) {
2776 $special_code =
$object->lines[$i]->special_code;
2777 if (!empty(
$object->lines[$i]->fk_parent_line)) {
2778 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2781 $parameters = array(
2783 'outputlangs' => $outputlangs,
2784 'hidedetails' => $hidedetails,
2785 'special_code' => $special_code,
2786 'multicurrency' => $multicurrency
2791 if ($hookmanager->executeHooks(
'getlinetotalremise', $parameters,
$object, $action) > 0) {
2792 if (isset($hookmanager->resArray[
'linetotalremise'])) {
2793 return (
float) $hookmanager->resArray[
'linetotalremise'];
2795 return (
float) $hookmanager->resPrint;
2800 if (empty($hidedetails) || $hidedetails > 1) {
2801 if (empty($multicurrency)) {
2804 return (
float)
price2num($sign * ((
$object->lines[$i]->multicurrency_subprice * (
float)
$object->lines[$i]->qty) -
$object->lines[$i]->multicurrency_total_ht),
'MT', 1);
2821 return "ERROR: FILE NOT FOUND OR NOT VALID";
2832 $content = preg_replace(
'/[^(\x20-\x7F)]*/',
'', $content);
2833 if (preg_match(
'/\/' . preg_quote($field,
'/') .
'\s*\((.*?)\)/', $content, $matches)) {
2834 return trim($matches[1]);
2836 return "ERROR: NOT FOUND";
2838 return "ERROR: FAILED TO READ PDF";
2869 bool $isSubtotal =
false,
2870 bool $applySubtotalLogic =
true
2872 $savePage = $pdf->getPage();
2873 $saveX = $pdf->GetX();
2874 $prevAlign = $generator->cols[
'desc'][
'content'][
'align'];
2876 if ($isSubtotal && $applySubtotalLogic &&
$object->lines[$i]->qty < 0) {
2877 $outputlangs->load(
"subtotals");
2878 $object->lines[$i]->desc = $outputlangs->trans(
"SubtotalOf",
$object->lines[$i]->desc);
2879 $generator->cols[
'desc'][
'content'][
'align'] = ($prevAlign ===
'L') ?
'R' :
'L';
2882 $pdf->startTransaction();
2883 $pdf->SetXY($saveX, $curY);
2885 $pageAfter = $pdf->getPage();
2886 $yAfter = $pdf->GetY();
2887 $pdf->rollbackTransaction(
true);
2889 $pdf->SetFillColor($bgColor[0], $bgColor[1], $bgColor[2]);
2890 $width = $generator->page_largeur - $generator->marge_droite - $generator->marge_gauche;
2892 $pdf->SetXY($generator->marge_gauche, $curY);
2893 if ($pageAfter === $savePage) {
2894 $pdf->MultiCell($width, max(0, $yAfter - $curY),
'', 0,
'',
true);
2896 $pdf->MultiCell($width, $pdf->getPageHeight() - $pdf->getBreakMargin() - $curY,
'', 0,
'',
true);
2898 $pdf->setPage($pageAfter);
2899 $pdf->SetXY($generator->marge_gauche, $pdf->getMargins()[
'top']);
2900 $pdf->MultiCell($width, max(0, $yAfter - $pdf->getMargins()[
'top']),
'', 0,
'',
true);
2902 $pdf->setPage($savePage);
2905 $pdf->SetTextColor(
colorIsLight(implode(
',', $bgColor)));
2906 $pdf->SetXY($saveX, $curY);
2910 $generator->cols[
'desc'][
'content'][
'align'] = $prevAlign;
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
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.
getDolGlobalFloat($key, $default=0)
Return a Dolibarr global constant float value.
vatrate($rate, $addpercent=false, $info_bits=0, $usestarfornpr=0, $html=0)
Return a string with VAT rate label formatted for view output Used into pdf and HTML pages.
dol_format_address($object, $withcountry=0, $sep="\n", $outputlangs=null, $mode=0, $extralangcode='')
Return a formatted address (part address/zip/town/state) according to country rules.
dol_osencode($str)
Return a string encoded into OS filesystem encoding.
dol_string_nohtmltag($stringtoclean, $removelinefeed=1, $pagecodeto='UTF-8', $strip_tags=0, $removedoublespaces=1)
Clean a string from all HTML tags and entities.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_concatdesc($text1, $text2, $forxml=false, $invert=false)
Concat 2 descriptions with a new line between them (second operand after first one with appropriate n...
complete_substitutions_array(&$substitutionarray, $outputlangs, $object=null, $parameters=null, $callfunc="completesubstitutionarray")
Complete the $substitutionarray with more entries coming from external module that had set the "subst...
make_substitutions($text, $substitutionarray, $outputlangs=null, $converttextinhtmlifnecessary=0)
Make substitution into a text string, replacing keys with vals from $substitutionarray (oldval=>newva...
dol_textishtml($msg, $option=0)
Return if a text is a html content.
colorIsLight($stringcolor)
Return true if the color is light.
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.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_mkdir($dir, $dataroot='', $newmask='')
Creation of a directory (this can create recursive subdir)
dol_getImageSize($file, $url=false)
Return size of image file on disk (Supported extensions are gif, jpg, png, bmp and webp)
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
pdf_getSizeForImage($realpath)
Return dimensions to use for images onto PDF checking that width and height are not higher than maxim...
pdf_writelinedesc(&$pdf, $object, $i, $outputlangs, $w, $h, $posx, $posy, $hideref=0, $hidedesc=0, $issupplierline=0, $align='J')
Output line description into PDF.
pdf_getlinetotalexcltax($object, $i, $outputlangs, $hidedetails=0)
Return line total excluding tax.
pdf_getlinedesc($object, $i, $outputlangs, $hideref=0, $hidedesc=0, $issupplierline=0)
Return line description translated in outputlangs and encoded into htmlentities and with
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_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_getlineqty_shipped($object, $i, $outputlangs, $hidedetails=0)
Return line quantity shipped.
pdf_getlinenum($object, $i, $outputlangs, $hidedetails=0)
Return line num.
pdf_getEncryption($pathoffile)
Return if pdf file is protected/encrypted.
pdf_getlineupwithtax($object, $i, $outputlangs, $hidedetails=0)
Return line unit price including tax.
pdf_getLinkedObjects(&$object, $outputlangs)
Return linked objects to use for document generation.
pdf_getHeightForLogo($logo, $url=false)
Return height to use for Logo onto PDF.
pdf_getlineref_supplier($object, $i, $outputlangs, $hidedetails=0)
Return line ref_supplier.
pdf_getlinetotalwithtax($object, $i, $outputlangs, $hidedetails=0)
Return line total including tax.
pdf_pagefoot(&$pdf, $outputlangs, $paramfreetext, $fromcompany, $marge_basse, $marge_gauche, $page_hauteur, $object, $showdetails=0, $hidefreetext=0, $page_largeur=0, $watermark='')
Show footer of page for PDF generation.
pdf_getlineupexcltax($object, $i, $outputlangs, $hidedetails=0)
Return line unit price excluding tax.
pdf_getlineprogress($object, $i, $outputlangs, $hidedetails=0, $hookmanager=null)
Return line percent.
pdf_getlinevatrate($object, $i, $outputlangs, $hidedetails=0)
Return line vat rate.
pdfGetHeightForHtmlContent(&$pdf, $htmlcontent)
Function to try to calculate height of a HTML Content.
pdf_admin_prepare_head()
Return array head with list of tabs to view object information.
pdf_pagehead(&$pdf, $outputlangs, $page_height)
Show header of page for PDF generation.
pdf_writeLinkedObjects(&$pdf, $object, $outputlangs, $posx, $posy, $w, $h, $align, $default_font_size)
Show linked objects for PDF generation.
pdf_bank(&$pdf, $outputlangs, $curx, $cury, $account, $onlynumber=0, $default_font_size=10)
Show bank information for PDF generation.
pdf_getPDFFont($outputlangs)
Return font name to use for PDF generation.
pdf_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.
pdf_build_address($outputlangs, $sourcecompany, $targetcompany='', $targetcontact='', $usecontact=0, $mode='source', $object=null)
Return a string with full address formatted for output on PDF documents.
pdf_getlineunit($object, $i, $outputlangs, $hidedetails=0)
Return line unit.
pdf_getlineremisepercent($object, $i, $outputlangs, $hidedetails=0)
Return line remise percent.
pdf_getlineqty_asked($object, $i, $outputlangs, $hidedetails=0)
Return line quantity asked.
pdf_getlineqty($object, $i, $outputlangs, $hidedetails=0)
Return line quantity.
pdf_getSubstitutionArray($outputlangs, $exclude=null, $object=null, $onlykey=0, $include=null)
Return array of possible substitutions for PDF content (without external module substitutions).
pdf_getInstance($format='', $metric='mm', $pagetype='P')
Return a PDF instance object.
pdfBuildThirdpartyName($thirdparty, Translate $outputlangs, $includealias=0)
Returns the name of the thirdparty.
pdf_watermark(&$pdf, $outputlangs, $h, $w, $unit, $text)
Add a draft watermark on PDF files.