40include_once DOL_DOCUMENT_ROOT.
'/core/lib/signature.lib.php';
55 $head[$h][0] = DOL_URL_ROOT.
'/admin/pdf.php';
56 $head[$h][1] = $langs->trans(
"Parameters");
57 $head[$h][2] =
'general';
66 if (isModEnabled(
"propal") || isModEnabled(
'invoice') || isModEnabled(
'reception')) {
67 $head[$h][0] = DOL_URL_ROOT.
'/admin/pdf_other.php';
68 $head[$h][1] = $langs->trans(
"Others");
69 $head[$h][2] =
'other';
88 global $conf, $db, $langs;
90 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'));
98 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
104 $sql =
"SELECT code, label, width, height, unit FROM ".MAIN_DB_PREFIX.
"c_paper_format";
105 $sql .=
" WHERE code = '".$db->escape($pdfformat).
"'";
106 $resql = $db->query($sql);
108 $obj = $db->fetch_object($resql);
110 $width = (int) $obj->width;
111 $height = (int) $obj->height;
117 return array(
'width' => $width,
'height' => $height,
'unit' => $unit);
133 if (!defined(
'K_TCPDF_EXTERNAL_CONFIG')) {
134 define(
'K_TCPDF_EXTERNAL_CONFIG', 1);
135 define(
'K_PATH_CACHE', DOL_DATA_ROOT.
'/admin/temp/');
136 define(
'K_PATH_URL_CACHE', DOL_DATA_ROOT.
'/admin/temp/');
138 define(
'K_BLANK_IMAGE',
'_blank.png');
139 define(
'PDF_PAGE_FORMAT',
'A4');
140 define(
'PDF_PAGE_ORIENTATION',
'P');
141 define(
'PDF_CREATOR',
'TCPDF');
142 define(
'PDF_AUTHOR',
'TCPDF');
143 define(
'PDF_HEADER_TITLE',
'TCPDF Example');
144 define(
'PDF_HEADER_STRING',
"by Dolibarr ERP CRM");
145 define(
'PDF_UNIT',
'mm');
146 define(
'PDF_MARGIN_HEADER', 5);
147 define(
'PDF_MARGIN_FOOTER', 10);
148 define(
'PDF_MARGIN_TOP', 27);
149 define(
'PDF_MARGIN_BOTTOM', 25);
150 define(
'PDF_MARGIN_LEFT', 15);
151 define(
'PDF_MARGIN_RIGHT', 15);
152 define(
'PDF_FONT_NAME_MAIN',
'helvetica');
153 define(
'PDF_FONT_SIZE_MAIN', 10);
154 define(
'PDF_FONT_NAME_DATA',
'helvetica');
155 define(
'PDF_FONT_SIZE_DATA', 8);
156 define(
'PDF_FONT_MONOSPACED',
'courier');
157 define(
'PDF_IMAGE_SCALE_RATIO', 1.25);
158 define(
'HEAD_MAGNIFICATION', 1.1);
159 define(
'K_CELL_HEIGHT_RATIO', 1.25);
160 define(
'K_TITLE_MAGNIFICATION', 1.3);
161 define(
'K_SMALL_RATIO', 2 / 3);
162 define(
'K_THAI_TOPCHARS',
true);
163 define(
'K_TCPDF_CALLS_IN_HTML',
true);
165 define(
'K_TCPDF_THROW_EXCEPTION_ERROR',
true);
167 define(
'K_TCPDF_THROW_EXCEPTION_ERROR',
false);
172 require_once TCPDF_PATH.
'tcpdf.php';
176 require_once TCPDI_PATH.
'tcpdi.php';
187 $pdf =
new TCPDI($pagetype, $metric, $format,
true,
'UTF-8',
false, $pdfa);
189 $pdf =
new TCPDF($pagetype, $metric, $format,
true,
'UTF-8',
false, $pdfa);
207 $pdfrights = (
getDolGlobalString(
'PDF_SECURITY_ENCRYPTION_RIGHTS') ? json_decode($conf->global->PDF_SECURITY_ENCRYPTION_RIGHTS,
true) : array(
'modify',
'copy'));
220 $pubkeys = (
getDolGlobalString(
'PDF_SECURITY_ENCRYPTION_PUBKEYS') ? json_decode($conf->global->PDF_SECURITY_ENCRYPTION_PUBKEYS,
true) :
null);
222 $pdf->SetProtection($pdfrights, $pdfuserpass, $pdfownerpass, $encstrength, $pubkeys);
236 require_once TCPDF_PATH.
'tcpdf_parser.php';
238 $isencrypted =
false;
240 $content = file_get_contents($pathoffile);
243 @($parser =
new TCPDF_PARSER(ltrim($content)));
244 list($xref, $data) = $parser->getParsedData();
248 if (isset($xref[
'trailer'][
'encrypt'])) {
270 return $conf->global->MAIN_PDF_FORCE_FONT;
274 if (class_exists(
'TCPDF')) {
275 if ($outputlangs->trans(
'FONTFORPDF') !=
'FONTFORPDF') {
276 $font = $outputlangs->trans(
'FONTFORPDF');
293 if (class_exists(
'TCPDF')) {
294 if ($outputlangs->trans(
'FONTSIZEFORPDF') !=
'FONTSIZEFORPDF') {
295 $size = (int) $outputlangs->trans(
'FONTSIZEFORPDF');
316 $height = (!
getDolGlobalString(
'MAIN_DOCUMENTS_LOGO_HEIGHT') ? 20 : $conf->global->MAIN_DOCUMENTS_LOGO_HEIGHT);
318 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
320 if ($tmp[
'height']) {
321 $width = round($height * $tmp[
'width'] / $tmp[
'height']);
322 if ($width > $maxwidth) {
323 $height = $height * $maxwidth / $width;
341 $pdf->startTransaction();
343 $start_y = $pdf->GetY();
345 $start_page = $pdf->getPage();
347 $pdf->writeHTMLCell(0, 0, 0, $start_y, $htmlcontent, 0, 1,
false,
true,
'J',
true);
349 $end_y = $pdf->GetY();
350 $end_page = $pdf->getPage();
353 if ($end_page == $start_page) {
354 $height = $end_y - $start_y;
356 for ($page = $start_page; $page <= $end_page; ++$page) {
357 $pdf->setPage($page);
358 $tmpm = $pdf->getMargins();
359 $tMargin = $tmpm[
'top'];
360 if ($page == $start_page) {
362 $height = $pdf->getPageHeight() - $start_y - $pdf->getBreakMargin();
363 } elseif ($page == $end_page) {
365 $height = $end_y - $tMargin;
367 $height = $pdf->getPageHeight() - $tMargin - $pdf->getBreakMargin();
372 $pdf = $pdf->rollbackTransaction();
393 if ($thirdparty instanceof
Societe) {
394 $socname = $thirdparty->name;
395 if (($includealias ||
getDolGlobalInt(
'PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) && !empty($thirdparty->name_alias)) {
397 $socname = $thirdparty->name_alias.
" - ".$thirdparty->name;
399 $socname = $thirdparty->name.
" - ".$thirdparty->name_alias;
402 } elseif ($thirdparty instanceof
Contact) {
403 if ($thirdparty->socid > 0) {
404 $thirdparty->fetch_thirdparty();
405 $socname = $thirdparty->thirdparty->name;
406 if (($includealias ||
getDolGlobalInt(
'PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) && !empty($thirdparty->thirdparty->name_alias)) {
408 $socname = $thirdparty->thirdparty->name_alias.
" - ".$thirdparty->thirdparty->name;
410 $socname = $thirdparty->thirdparty->name.
" - ".$thirdparty->thirdparty->name_alias;
415 throw new InvalidArgumentException(
'Parameter 1 $thirdparty is not a Societe nor Contact');
418 return $outputlangs->convToOutputCharset($socname);
434function pdf_build_address($outputlangs, $sourcecompany, $targetcompany =
'', $targetcontact =
'', $usecontact = 0, $mode =
'source',
$object =
null)
438 if ($mode ==
'source' && !is_object($sourcecompany)) {
441 if ($mode ==
'target' && !is_object($targetcompany)) {
445 if (!empty($sourcecompany->state_id) && empty($sourcecompany->state)) {
446 $sourcecompany->state =
getState($sourcecompany->state_id);
448 if (!empty($targetcompany->state_id) && empty($targetcompany->state)) {
449 $targetcompany->state =
getState($targetcompany->state_id);
454 if (is_object($hookmanager)) {
455 $parameters = array(
'sourcecompany' => &$sourcecompany,
'targetcompany' => &$targetcompany,
'targetcontact' => &$targetcontact,
'outputlangs' => $outputlangs,
'mode' => $mode,
'usecontact' => $usecontact);
457 $reshook = $hookmanager->executeHooks(
'pdf_build_address', $parameters,
$object, $action);
458 $stringaddress .= $hookmanager->resPrint;
460 if (empty($reshook)) {
461 if ($mode ==
'source') {
463 if (isset($targetcompany->country_code) && !empty($sourcecompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
467 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($sourcecompany, $withCountry,
"\n", $outputlangs)).
"\n";
471 if ($sourcecompany->phone) {
472 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"PhoneShort").
": ".$outputlangs->convToOutputCharset($sourcecompany->phone);
475 if ($sourcecompany->fax) {
476 $stringaddress .= ($stringaddress ? ($sourcecompany->phone ?
" - " :
"\n") :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($sourcecompany->fax);
479 if ($sourcecompany->email) {
480 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($sourcecompany->email);
483 if ($sourcecompany->url) {
484 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($sourcecompany->url);
489 if ($sourcecompany->tva_intra) {
490 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($sourcecompany->tva_intra);
495 if (
getDolGlobalString(
'MAIN_PROFID1_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof1)) {
496 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $sourcecompany->country_code);
497 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
500 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof1);
502 if (
getDolGlobalString(
'MAIN_PROFID2_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof2)) {
503 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $sourcecompany->country_code);
504 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
507 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof2);
509 if (
getDolGlobalString(
'MAIN_PROFID3_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof3)) {
510 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $sourcecompany->country_code);
511 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
514 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof3);
516 if (
getDolGlobalString(
'MAIN_PROFID4_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof4)) {
517 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $sourcecompany->country_code);
518 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
521 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof4);
523 if (
getDolGlobalString(
'MAIN_PROFID5_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof5)) {
524 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $sourcecompany->country_code);
525 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
528 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof5);
530 if (
getDolGlobalString(
'MAIN_PROFID6_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof6)) {
531 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $sourcecompany->country_code);
532 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
535 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof6);
538 $stringaddress .= ($stringaddress ?
"\n" :
'') .
getDolGlobalString(
'PDF_ADD_MORE_AFTER_SOURCE_ADDRESS');
542 if ($mode ==
'target' || preg_match(
'/targetwithdetails/', $mode)) {
544 if (is_object($targetcontact)) {
545 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($targetcontact->getFullName($outputlangs, 1));
547 if (!empty($targetcontact->address)) {
548 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcontact)).
"\n";
550 $companytouseforaddress = $targetcompany;
553 if ($targetcontact->socid > 0 && $targetcontact->socid != $targetcompany->id) {
554 $targetcontact->fetch_thirdparty();
555 $companytouseforaddress = $targetcontact->thirdparty;
558 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($companytouseforaddress)).
"\n";
561 if (!empty($targetcontact->country_code) && $targetcontact->country_code != $sourcecompany->country_code) {
562 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcontact->country_code));
563 } elseif (empty($targetcontact->country_code) && !empty($targetcompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
564 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
567 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || preg_match(
'/targetwithdetails/', $mode)) {
569 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
570 if (!empty($targetcontact->phone_pro) || !empty($targetcontact->phone_mobile)) {
571 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
573 if (!empty($targetcontact->phone_pro)) {
574 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_pro);
576 if (!empty($targetcontact->phone_pro) && !empty($targetcontact->phone_mobile)) {
577 $stringaddress .=
" / ";
579 if (!empty($targetcontact->phone_mobile)) {
580 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_mobile);
584 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
585 if ($targetcontact->fax) {
586 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcontact->fax);
590 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
591 if ($targetcontact->email) {
592 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcontact->email);
596 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
597 if ($targetcontact->url) {
598 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($targetcontact->url);
604 if (is_object($targetcompany)) {
605 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcompany));
607 if (!empty($targetcompany->country_code) && $targetcompany->country_code != $sourcecompany->country_code) {
608 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
610 $stringaddress .= ($stringaddress ?
"\n" :
'');
613 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || preg_match(
'/targetwithdetails/', $mode)) {
615 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
616 if (!empty($targetcompany->phone)) {
617 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
619 if (!empty($targetcompany->phone)) {
620 $stringaddress .= $outputlangs->convToOutputCharset($targetcompany->phone);
624 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
625 if ($targetcompany->fax) {
626 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcompany->fax);
630 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
631 if ($targetcompany->email) {
632 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcompany->email);
636 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
637 if ($targetcompany->url) {
638 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($targetcompany->url);
647 if ($usecontact && is_object($targetcontact) &&
getDolGlobalInt(
'MAIN_USE_COMPANY_NAME_OF_CONTACT')) {
648 $targetcontact->fetch_thirdparty();
649 if (!empty($targetcontact->thirdparty->id) && $targetcontact->thirdparty->tva_intra) {
650 $stringaddress .= ($stringaddress ?
"\n" :
'') . $outputlangs->transnoentities(
"VATIntraShort") .
': ' . $outputlangs->convToOutputCharset($targetcontact->thirdparty->tva_intra);
652 } elseif (!empty($targetcompany->tva_intra)) {
653 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($targetcompany->tva_intra);
658 if (
getDolGlobalString(
'MAIN_LEGALFORM_IN_ADDRESS') && !empty($targetcompany->forme_juridique_code)) {
660 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp;
664 if (
getDolGlobalString(
'MAIN_PROFID1_IN_ADDRESS') && !empty($targetcompany->idprof1)) {
665 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $targetcompany->country_code);
666 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
669 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof1);
671 if (
getDolGlobalString(
'MAIN_PROFID2_IN_ADDRESS') && !empty($targetcompany->idprof2)) {
672 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $targetcompany->country_code);
673 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
676 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof2);
678 if (
getDolGlobalString(
'MAIN_PROFID3_IN_ADDRESS') && !empty($targetcompany->idprof3)) {
679 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $targetcompany->country_code);
680 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
683 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof3);
685 if (
getDolGlobalString(
'MAIN_PROFID4_IN_ADDRESS') && !empty($targetcompany->idprof4)) {
686 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $targetcompany->country_code);
687 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
690 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof4);
692 if (
getDolGlobalString(
'MAIN_PROFID5_IN_ADDRESS') && !empty($targetcompany->idprof5)) {
693 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $targetcompany->country_code);
694 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
697 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof5);
699 if (
getDolGlobalString(
'MAIN_PROFID6_IN_ADDRESS') && !empty($targetcompany->idprof6)) {
700 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $targetcompany->country_code);
701 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
704 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof6);
709 if ($mode ==
'source' && !empty($sourcecompany->note_public)) {
710 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($sourcecompany->note_public);
712 if (($mode ==
'target' || preg_match(
'/targetwithdetails/', $mode)) && !empty($targetcompany->note_public)) {
713 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($targetcompany->note_public);
719 return $stringaddress;
737 $filepath = $conf->mycompany->dir_output.
'/logos/' .
getDolGlobalString(
'MAIN_USE_BACKGROUND_ON_PDF');
738 if (file_exists($filepath)) {
739 $pdf->SetAutoPageBreak(0, 0);
741 $pdf->SetAlpha($conf->global->MAIN_USE_BACKGROUND_ON_PDF_ALPHA);
743 $pdf->Image($filepath, (isset($conf->global->MAIN_USE_BACKGROUND_ON_PDF_X) ? $conf->global->MAIN_USE_BACKGROUND_ON_PDF_X : 0), (isset($conf->global->MAIN_USE_BACKGROUND_ON_PDF_Y) ? $conf->global->MAIN_USE_BACKGROUND_ON_PDF_Y : 0), 0, $page_height);
748 $pdf->SetAutoPageBreak(1, 0);
770 $substitutionarray[
'__FROM_NAME__'] =
'__FROM_NAME__';
771 $substitutionarray[
'__FROM_EMAIL__'] =
'__FROM_EMAIL__';
772 return $substitutionarray;
792 } elseif ($unit ==
'mm') {
794 } elseif ($unit ==
'cm') {
796 } elseif ($unit ==
'in') {
800 dol_print_error(
null,
'Unexpected unit "'.$unit.
'" for pdf_watermark');
807 $text = $outputlangs->convToOutputCharset($text);
809 $savx = $pdf->getX();
810 $savy = $pdf->getY();
812 $watermark_angle = atan($h / $w) / 2;
813 $watermark_x_pos = 0;
814 $watermark_y_pos = $h / 3;
815 $watermark_x = $w / 2;
816 $watermark_y = $h / 3;
817 $pdf->SetFont(
'',
'B', 40);
818 $pdf->SetTextColor(255, 192, 203);
821 $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));
824 $pdf->SetXY($watermark_x_pos, $watermark_y_pos);
825 $pdf->Cell($w - 20, 25, $outputlangs->convToOutputCharset($text),
"", 2,
"C", 0);
829 $pdf->SetXY($savx, $savy);
845function pdf_bank(&$pdf, $outputlangs, $curx, $cury, $account, $onlynumber = 0, $default_font_size = 10)
847 global $mysoc, $conf;
849 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formbank.class.php';
853 $pdf->SetXY($curx, $cury);
855 if (empty($onlynumber)) {
856 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizetitle);
857 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
'PaymentByTransferOnThisBankAccount').
':', 0,
'L', 0);
861 $outputlangs->load(
"banks");
864 $bickey =
"BICNumber";
865 if ($account->getCountryCode() ==
'IN') {
870 $usedetailedbban = $account->useDetailedBBAN();
873 if ($usedetailedbban) {
876 if (empty($onlynumber)) {
877 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
878 $pdf->SetXY($curx, $cury);
879 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L', 0);
889 if (empty($onlynumber)) {
890 $pdf->line($curx + 1, $cury + 1, $curx + 1, $cury + 6);
894 foreach ($account->getFieldsToShow() as $val) {
895 $pdf->SetXY($curx, $cury + 4);
896 $pdf->SetFont(
'',
'', $default_font_size - 3);
898 if ($val ==
'BankCode') {
901 $content = $account->code_banque;
902 } elseif ($val ==
'DeskCode') {
905 $content = $account->code_guichet;
906 } elseif ($val ==
'BankAccountNumber') {
909 $content = $account->number;
910 } elseif ($val ==
'BankAccountNumberKey') {
913 $content = $account->cle_rib;
914 } elseif ($val ==
'IBAN' || $val ==
'BIC') {
919 dol_print_error($account->db,
'Unexpected value for getFieldsToShow: '.$val);
923 $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($content), 0,
'C', 0);
924 $pdf->SetXY($curx, $cury + 1);
926 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
927 $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities($val), 0,
'C', 0);
928 if (empty($onlynumber)) {
929 $pdf->line($curx, $cury + 1, $curx, $cury + 7);
936 } elseif (!empty($account->number)) {
937 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
938 $pdf->SetXY($curx, $cury);
939 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L', 0);
942 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
943 $pdf->SetXY($curx, $cury);
944 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"BankAccountNumber").
': '.$outputlangs->convToOutputCharset($account->number), 0,
'L', 0);
947 if ($diffsizecontent <= 2) {
952 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
954 if (empty($onlynumber) && (!empty($account->domiciliation) || !empty($account->address))) {
955 $pdf->SetXY($curx, $cury);
956 $val = $outputlangs->transnoentities(
"Residence").
': '.$outputlangs->convToOutputCharset(empty($account->address) ? $account->domiciliation : $account->address);
957 $pdf->MultiCell(100, 3, $val, 0,
'L', 0);
960 $tmpy = $pdf->getStringHeight(100, $val);
964 if (!empty($account->owner_name)) {
965 $pdf->SetXY($curx, $cury);
966 $val = $outputlangs->transnoentities(
"BankAccountOwner").
': '.$outputlangs->convToOutputCharset($account->owner_name);
967 $pdf->MultiCell(100, 3, $val, 0,
'L', 0);
968 $tmpy = $pdf->getStringHeight(100, $val);
970 } elseif (!$usedetailedbban) {
977 if (!empty($account->iban)) {
979 $ibanDisplay_temp = str_replace(
' ',
'', $outputlangs->convToOutputCharset($account->iban));
982 $nbIbanDisplay_temp =
dol_strlen($ibanDisplay_temp);
983 for ($i = 0; $i < $nbIbanDisplay_temp; $i++) {
984 $ibanDisplay .= $ibanDisplay_temp[$i];
985 if ($i % 4 == 3 && $i > 0) {
990 $pdf->SetFont(
'',
'B', $default_font_size - 3);
991 $pdf->SetXY($curx, $cury);
992 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($ibankey).
': '.$ibanDisplay, 0,
'L', 0);
996 if (!empty($account->bic)) {
997 $pdf->SetFont(
'',
'B', $default_font_size - 3);
998 $pdf->SetXY($curx, $cury);
999 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($bickey).
': '.$outputlangs->convToOutputCharset($account->bic), 0,
'L', 0);
1002 return $pdf->getY();
1022function pdf_pagefoot(&$pdf, $outputlangs, $paramfreetext, $fromcompany, $marge_basse, $marge_gauche, $page_hauteur,
$object, $showdetails = 0, $hidefreetext = 0, $page_largeur = 0, $watermark =
'')
1024 global $conf, $hookmanager;
1026 $outputlangs->load(
"dict");
1029 $marginwithfooter = 0;
1031 $dims = $pdf->getPageDimensions();
1037 $substitutionarray[
'__FROM_NAME__'] = $fromcompany->name;
1038 $substitutionarray[
'__FROM_EMAIL__'] = $fromcompany->email;
1046 $newfreetext = preg_replace(
'/(<img.*src=")[^\"]*viewimage\.php[^\"]*modulepart=medias[^\"]*file=([^\"]*)("[^\/]*\/>)/',
'\1file:/'.DOL_DATA_ROOT.
'/medias/\2\3', $newfreetext);
1048 $line .= $outputlangs->convToOutputCharset($newfreetext);
1057 if ($showdetails == 1 || $showdetails == 3) {
1059 if ($fromcompany->name) {
1060 $line1 .= ($line1 ?
" - " :
"").$outputlangs->transnoentities(
"RegisteredOffice").
": ".$fromcompany->name;
1063 if ($fromcompany->address) {
1064 $line1 .= ($line1 ?
" - " :
"").str_replace(
"\n",
", ", $fromcompany->address);
1067 if ($fromcompany->zip) {
1068 $line1 .= ($line1 ?
" - " :
"").$fromcompany->zip;
1071 if ($fromcompany->town) {
1072 $line1 .= ($line1 ?
" " :
"").$fromcompany->town;
1075 if ($fromcompany->country) {
1076 $line1 .= ($line1 ?
", " :
"").$fromcompany->country;
1079 if ($fromcompany->phone) {
1080 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Phone").
": ".$fromcompany->phone;
1083 if ($fromcompany->fax) {
1084 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Fax").
": ".$fromcompany->fax;
1088 if ($fromcompany->url) {
1089 $line2 .= ($line2 ?
" - " :
"").$fromcompany->url;
1092 if ($fromcompany->email) {
1093 $line2 .= ($line2 ?
" - " :
"").$fromcompany->email;
1096 if ($showdetails == 2 || $showdetails == 3 || (!empty($fromcompany->country_code) && $fromcompany->country_code ==
'DE')) {
1098 if ($fromcompany->managers) {
1099 $line2 .= ($line2 ?
" - " :
"").$fromcompany->managers;
1105 if (!empty($fromcompany->forme_juridique_code) && $fromcompany->forme_juridique_code) {
1106 $line3 .= ($line3 ?
" - " :
"").$outputlangs->convToOutputCharset(
getFormeJuridiqueLabel((
string) $fromcompany->forme_juridique_code));
1109 if (!empty($fromcompany->capital)) {
1110 $tmpamounttoshow =
price2num($fromcompany->capital);
1111 if (is_numeric($tmpamounttoshow) && $tmpamounttoshow > 0) {
1112 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf",
price($tmpamounttoshow, 0, $outputlangs, 0, 0, 0, $conf->currency));
1113 } elseif (!empty($fromcompany->capital)) {
1114 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf", $fromcompany->capital, $outputlangs);
1118 if (!empty($fromcompany->idprof1) && $fromcompany->idprof1 && ($fromcompany->country_code !=
'FR' || !$fromcompany->idprof2)) {
1119 $field = $outputlangs->transcountrynoentities(
"ProfId1", $fromcompany->country_code);
1120 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1123 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof1);
1126 if (!empty($fromcompany->idprof2) && $fromcompany->idprof2) {
1127 $field = $outputlangs->transcountrynoentities(
"ProfId2", $fromcompany->country_code);
1128 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1131 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof2);
1136 if (!empty($fromcompany->idprof3) && $fromcompany->idprof3) {
1137 $field = $outputlangs->transcountrynoentities(
"ProfId3", $fromcompany->country_code);
1138 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1141 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof3);
1144 if (!empty($fromcompany->idprof4) && $fromcompany->idprof4) {
1145 $field = $outputlangs->transcountrynoentities(
"ProfId4", $fromcompany->country_code);
1146 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1149 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof4);
1152 if (!empty($fromcompany->idprof5) && $fromcompany->idprof5) {
1153 $field = $outputlangs->transcountrynoentities(
"ProfId5", $fromcompany->country_code);
1154 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1157 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof5);
1160 if (!empty($fromcompany->idprof6) && $fromcompany->idprof6) {
1161 $field = $outputlangs->transcountrynoentities(
"ProfId6", $fromcompany->country_code);
1162 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1165 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof6);
1168 if (!empty($fromcompany->idprof7) && $fromcompany->idprof7) {
1169 $field = $outputlangs->transcountrynoentities(
"ProfId7", $fromcompany->country_code);
1170 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1173 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof7);
1176 if (!empty($fromcompany->idprof8) && $fromcompany->idprof8) {
1177 $field = $outputlangs->transcountrynoentities(
"ProfId8", $fromcompany->country_code);
1178 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1181 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof8);
1184 if (!empty($fromcompany->idprof9) && $fromcompany->idprof9) {
1185 $field = $outputlangs->transcountrynoentities(
"ProfId9", $fromcompany->country_code);
1186 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1189 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof9);
1192 if (!empty($fromcompany->idprof10) && $fromcompany->idprof10) {
1193 $field = $outputlangs->transcountrynoentities(
"ProfId10", $fromcompany->country_code);
1194 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1197 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof10);
1200 if (!empty($fromcompany->tva_intra) && $fromcompany->tva_intra !=
'') {
1201 $line4 .= ($line4 ?
" - " :
"").$outputlangs->transnoentities(
"VATIntraShort").
": ".$outputlangs->convToOutputCharset($fromcompany->tva_intra);
1204 $pdf->SetFont(
'',
'', 7);
1205 $pdf->SetDrawColor(224, 224, 224);
1208 list($r, $g, $b) = sscanf($conf->global->PDF_FOOTER_TEXT_COLOR,
'%d, %d, %d');
1209 $pdf->SetTextColor($r, $g, $b);
1213 $freetextheight = 0;
1224 $freetextheight = $pdf->getStringHeight($width, $line);
1233 if (is_object($hookmanager)) {
1234 $parameters = array(
'line1' => $line1,
'line2' => $line2,
'line3' => $line3,
'line4' => $line4,
'outputlangs' => $outputlangs);
1236 $hookmanager->executeHooks(
'pdf_pagefoot', $parameters,
$object, $action);
1237 if (!empty($hookmanager->resPrint) && $hidefreetext == 0) {
1238 $mycustomfooter = $hookmanager->resPrint;
1241 $marginwithfooter = $marge_basse + $freetextheight + $mycustomfooterheight;
1242 $posy = (float) $marginwithfooter;
1246 list($r, $g, $b) = sscanf($conf->global->PDF_FOOTER_BACKGROUND_COLOR,
'%d, %d, %d');
1247 $pdf->SetAutoPageBreak(0, 0);
1248 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F', array(), $fill_color = array($r, $g, $b));
1249 $pdf->SetAutoPageBreak(1, 0);
1253 $pdf->SetAutoPageBreak(0, 0);
1256 $pdf->SetXY($dims[
'lm'], -$posy);
1258 $pdf->MultiCell(0, 3, $line, 0, $align, 0);
1260 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1262 $posy -= $freetextheight;
1265 $pdf->SetAutoPageBreak(1, 0);
1272 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1283 $pdf->SetAutoPageBreak(0, 0);
1285 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $mycustomfooterheight, $dims[
'lm'], $dims[
'hk'] - $posy,
dol_htmlentitiesbr($mycustomfooter, 1,
'UTF-8', 0));
1287 $pdf->SetAutoPageBreak(1, 0);
1290 $posy -= $mycustomfooterheight - 3;
1293 $marginwithfooter = $marge_basse + $freetextheight + (!empty($line1) ? 3 : 0) + (!empty($line2) ? 3 : 0) + (!empty($line3) ? 3 : 0) + (!empty($line4) ? 3 : 0);
1294 $posy = (float) $marginwithfooter;
1298 list($r, $g, $b) = sscanf($conf->global->PDF_FOOTER_BACKGROUND_COLOR,
'%d, %d, %d');
1299 $pdf->SetAutoPageBreak(0, 0);
1300 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F', array(), $fill_color = array($r, $g, $b));
1301 $pdf->SetAutoPageBreak(1, 0);
1305 $pdf->SetAutoPageBreak(0, 0);
1308 $pdf->SetXY($dims[
'lm'], -$posy);
1310 $pdf->MultiCell(0, 3, $line, 0, $align, 0);
1312 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1314 $posy -= $freetextheight;
1317 $pdf->SetAutoPageBreak(1, 0);
1326 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1336 if (!empty($line1)) {
1337 $pdf->SetFont(
'',
'B', 7);
1338 $pdf->SetXY($dims[
'lm'], -$posy);
1339 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line1, 0,
'C', 0);
1341 $pdf->SetFont(
'',
'', 7);
1344 if (!empty($line2)) {
1345 $pdf->SetFont(
'',
'B', 7);
1346 $pdf->SetXY($dims[
'lm'], -$posy);
1347 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line2, 0,
'C', 0);
1349 $pdf->SetFont(
'',
'', 7);
1352 if (!empty($line3)) {
1353 $pdf->SetXY($dims[
'lm'], -$posy);
1354 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line3, 0,
'C', 0);
1357 if (!empty($line4)) {
1359 $pdf->SetXY($dims[
'lm'], -$posy);
1360 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line4, 0,
'C', 0);
1367 $pdf->SetXY($dims[
'wk'] - $dims[
'rm'] - 18 -
getDolGlobalInt(
'PDF_FOOTER_PAGE_NUMBER_X', 0), -$posy -
getDolGlobalInt(
'PDF_FOOTER_PAGE_NUMBER_Y', 0));
1369 $pagination = $pdf->PageNo().
' / '.$pdf->getAliasNbPages();
1370 $fontRenderCorrection = 0;
1371 if (in_array(
pdf_getPDFFont($outputlangs), array(
'freemono',
'DejaVuSans'))) {
1372 $fontRenderCorrection = 10;
1374 $pdf->MultiCell(18 + $fontRenderCorrection, 2, $pagination, 0,
'R', 0);
1377 if (!empty($watermark)) {
1378 pdf_watermark($pdf, $outputlangs, $page_hauteur, $page_largeur,
'mm', $watermark);
1381 return $marginwithfooter;
1401 if (!empty($linkedobjects)) {
1402 foreach ($linkedobjects as $linkedobject) {
1403 $reftoshow = $linkedobject[
"ref_title"].
' : '.$linkedobject[
"ref_value"];
1404 if (!empty($linkedobject[
"date_value"])) {
1405 $reftoshow .=
' / '.$linkedobject[
"date_value"];
1409 $pdf->SetXY($posx, $posy);
1410 $pdf->SetFont(
'',
'', (
float) $default_font_size - 2);
1411 $pdf->MultiCell($w, $h, $reftoshow,
'', $align);
1415 return $pdf->getY();
1435function pdf_writelinedesc(&$pdf,
$object, $i, $outputlangs, $w, $h, $posx, $posy, $hideref = 0, $hidedesc = 0, $issupplierline = 0, $align =
'J')
1437 global $db, $conf, $langs, $hookmanager;
1442 if (is_object($hookmanager)) {
1443 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1444 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1445 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1447 $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);
1449 $reshook = $hookmanager->executeHooks(
'pdf_writelinedesc', $parameters,
$object, $action);
1451 if (!empty($hookmanager->resPrint)) {
1452 $result .= $hookmanager->resPrint;
1455 if (empty($reshook)) {
1457 $labelproductservice = preg_replace(
'/(<img[^>]*src=")[^\"]*viewimage\.php[^\"]*modulepart=medias[^\"]*file=([^\"]*)/',
'\1file:/'.DOL_DATA_ROOT.
'/medias/\2\3', $labelproductservice, -1, $nbrep);
1464 $labelproductservice = preg_replace(
'/(<img[^>]*src=")([^"]*)(&)([^"]*")/',
'\1\2&\4', $labelproductservice, -1, $nbrep);
1467 $pdf->setListIndentWidth(5);
1468 $TMarginList = [
'ul' => [[
'h' => 0.1, ],[
'h' => 0.1, ]],
'li' => [[
'h' => 0.1, ],],];
1469 $pdf->setHtmlVSpace($TMarginList);
1473 $pdf->writeHTMLCell($w, $h, $posx, $posy, $outputlangs->convToOutputCharset($labelproductservice), 0, 1,
false,
true, $align,
true);
1474 $result .= $labelproductservice;
1492 global $db, $conf, $langs;
1494 $idprod = (!empty(
$object->lines[$i]->fk_product) ?
$object->lines[$i]->fk_product :
false);
1495 $label = (!empty(
$object->lines[$i]->label) ?
$object->lines[$i]->label : (!empty(
$object->lines[$i]->product_label) ?
$object->lines[$i]->product_label :
''));
1496 $product_barcode = (!empty(
$object->lines[$i]->product_barcode) ?
$object->lines[$i]->product_barcode :
"");
1497 $desc = (!empty(
$object->lines[$i]->desc) ?
$object->lines[$i]->desc : (!empty(
$object->lines[$i]->description) ?
$object->lines[$i]->description :
''));
1498 $ref_supplier = (!empty(
$object->lines[$i]->ref_supplier) ?
$object->lines[$i]->ref_supplier : (!empty(
$object->lines[$i]->ref_fourn) ?
$object->lines[$i]->ref_fourn :
''));
1499 $note = (!empty(
$object->lines[$i]->note) ?
$object->lines[$i]->note :
'');
1500 $dbatch = (!empty(
$object->lines[$i]->detail_batch) ?
$object->lines[$i]->detail_batch :
false);
1502 if ($issupplierline) {
1503 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
1506 include_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
1510 include_once DOL_DOCUMENT_ROOT .
'/product/class/productcustomerprice.class.php';
1515 $prodser->fetch($idprod);
1517 if (
getDolGlobalInt(
'MAIN_MULTILANGS') && ($outputlangs->defaultlang != $langs->defaultlang)) {
1518 $translatealsoifmodified = (
getDolGlobalString(
'MAIN_MULTILANG_TRANSLATE_EVEN_IF_MODIFIED'));
1526 $textwasnotmodified = ($label == $prodser->label);
1527 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"label"]) && ($textwasnotmodified || $translatealsoifmodified)) {
1528 $label = $prodser->multilangs[$outputlangs->defaultlang][
"label"];
1533 $textwasnotmodified =
false;
1537 $textwasnotmodified = ($desc == $prodser->description);
1539 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"description"])) {
1540 if ($textwasnotmodified) {
1541 $desc = str_replace($prodser->description, $prodser->multilangs[$outputlangs->defaultlang][
"description"], $desc);
1542 } elseif ($translatealsoifmodified) {
1543 $desc = $prodser->multilangs[$outputlangs->defaultlang][
"description"];
1548 $textwasnotmodified = ($note == $prodser->note_public);
1549 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"other"]) && ($textwasnotmodified || $translatealsoifmodified)) {
1550 $note = $prodser->multilangs[$outputlangs->defaultlang][
"other"];
1553 } elseif ((
$object->element ==
'facture' ||
$object->element ==
'facturefourn') && preg_match(
'/^\(DEPOSIT\).+/', $desc)) {
1554 $desc = str_replace(
'(DEPOSIT)', $outputlangs->trans(
'Deposit'), $desc);
1557 $libelleproduitservice =
'';
1560 $libelleproduitservice = $label;
1561 if (!empty($libelleproduitservice) &&
getDolGlobalString(
'PDF_BOLD_PRODUCT_LABEL')) {
1565 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1567 $libelleproduitservice =
'<b>'.$libelleproduitservice.
'</b>';
1574 $prodser->get_sousproduits_arbo();
1575 if (!empty($prodser->sousprods) && is_array($prodser->sousprods) && count($prodser->sousprods)) {
1576 $outputlangs->load(
'mrp');
1577 $tmparrayofsubproducts = reset($prodser->sousprods);
1580 if (isset(
$object->lines[$i]->qty) && !empty(
$object->lines[$i]->qty)) {
1581 $qtyText =
$object->lines[$i]->qty;
1582 } elseif (isset(
$object->lines[$i]->qty_shipped) && !empty(
$object->lines[$i]->qty_shipped)) {
1583 $qtyText =
$object->lines[$i]->qty;
1587 foreach ($tmparrayofsubproducts as $subprodval) {
1591 $outputlangs->trans(
'Qty').
':'.$qtyText.
' x '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1].
'= '.$outputlangs->trans(
'QtyTot').
':'.$subprodval[1] * $qtyText :
1592 $outputlangs->trans(
'Qty').
' '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1])
1596 foreach ($tmparrayofsubproducts as $subprodval) {
1598 dol_concatdesc($libelleproduitservice,
" * ".$subprodval[5].(($subprodval[5] && $subprodval[3]) ?
' - ' :
'').$subprodval[3]),
1600 $outputlangs->trans(
'Qty').
':'.$qtyText.
' x '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1].
'= '.$outputlangs->trans(
'QtyTot').
':'.$subprodval[1] * $qtyText :
1601 $outputlangs->trans(
'Qty').
' '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1])
1608 if (isModEnabled(
'barcode') &&
getDolGlobalString(
'MAIN_GENERATE_DOCUMENTS_SHOW_PRODUCT_BARCODE') && !empty($product_barcode)) {
1609 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $outputlangs->trans(
"BarCode").
" ".$product_barcode);
1613 if (!empty($desc) && ($desc != $label)) {
1614 if ($desc ==
'(CREDIT_NOTE)' &&
$object->lines[$i]->fk_remise_except) {
1616 $discount->fetch(
$object->lines[$i]->fk_remise_except);
1617 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
1618 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromCreditNote", $sourceref);
1619 } elseif ($desc ==
'(DEPOSIT)' &&
$object->lines[$i]->fk_remise_except) {
1621 $discount->fetch(
$object->lines[$i]->fk_remise_except);
1622 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
1623 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromDeposit", $sourceref);
1626 $libelleproduitservice .=
' ('.dol_print_date($discount->datec,
'day',
'', $outputlangs).
')';
1628 } elseif ($desc ==
'(EXCESS RECEIVED)' &&
$object->lines[$i]->fk_remise_except) {
1630 $discount->fetch(
$object->lines[$i]->fk_remise_except);
1631 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessReceived", $discount->ref_facture_source);
1632 } elseif ($desc ==
'(EXCESS PAID)' &&
$object->lines[$i]->fk_remise_except) {
1634 $discount->fetch(
$object->lines[$i]->fk_remise_except);
1635 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessPaid", $discount->ref_invoice_supplier_source);
1639 if (!empty(
$object->element)) {
1640 $tmpkey =
'MAIN_DOCUMENTS_HIDE_DESCRIPTION_FOR_'.strtoupper(
$object->element);
1645 if (empty($hidedesc)) {
1647 $libelleproduitservice =
dol_concatdesc($desc, $libelleproduitservice);
1650 $libelleproduitservice = $desc;
1652 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
1657 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
1663 $prefix_prodserv =
"";
1666 if ($prodser->isService()) {
1667 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Service").
" ";
1669 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Product").
" ";
1673 if (empty($hideref)) {
1674 if ($issupplierline) {
1676 $ref_prodserv = $prodser->ref;
1677 if ($ref_supplier) {
1678 $ref_prodserv .= ($prodser->ref ?
' (' :
'').$outputlangs->transnoentitiesnoconv(
"SupplierRef").
' '.$ref_supplier.($prodser->ref ?
')' :
'');
1680 } elseif (
getDolGlobalInt(
'PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES') == 1) {
1681 $ref_prodserv = $ref_supplier;
1682 } elseif (
getDolGlobalInt(
'PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES') == 2) {
1683 $ref_prodserv = $ref_supplier.
' ('.$outputlangs->transnoentitiesnoconv(
"InternalRef").
' '.$prodser->ref.
')';
1686 $ref_prodserv = $prodser->ref;
1690 $filter = array(
'fk_product' => $idprod,
'fk_soc' =>
$object->socid);
1692 $nbCustomerPrices = $productCustomerPriceStatic->fetchAll(
'',
'', 1, 0, $filter);
1694 if ($nbCustomerPrices > 0) {
1695 $productCustomerPrice = $productCustomerPriceStatic->lines[0];
1697 if (!empty($productCustomerPrice->ref_customer)) {
1698 switch ($conf->global->PRODUIT_CUSTOMER_PRICES_PDF_REF_MODE) {
1700 $ref_prodserv = $productCustomerPrice->ref_customer;
1704 $ref_prodserv = $productCustomerPrice->ref_customer .
' (' . $outputlangs->transnoentitiesnoconv(
'InternalRef') .
' ' . $ref_prodserv .
')';
1708 $ref_prodserv = $ref_prodserv .
' (' . $outputlangs->transnoentitiesnoconv(
'RefCustomer') .
' ' . $productCustomerPrice->ref_customer .
')';
1715 if (!empty($libelleproduitservice) && !empty($ref_prodserv)) {
1716 $ref_prodserv .=
" - ";
1720 if (!empty($ref_prodserv) &&
getDolGlobalString(
'PDF_BOLD_PRODUCT_REF_AND_PERIOD')) {
1722 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1724 $ref_prodserv =
'<b>'.$ref_prodserv.
'</b>';
1727 $libelleproduitservice = $prefix_prodserv.$ref_prodserv.$libelleproduitservice;
1730 if (
getDolGlobalString(
'CATEGORY_ADD_DESC_INTO_DOC') && $idprod && isModEnabled(
'category')) {
1731 include_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
1734 $tblcateg = $categstatic->containing($idprod, Categorie::TYPE_PRODUCT);
1735 foreach ($tblcateg as $cate) {
1737 $desccateg = $cate->description;
1739 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desccateg);
1744 if (!empty(
$object->lines[$i]->date_start) || !empty(
$object->lines[$i]->date_end)) {
1748 if (
$object->lines[$i]->date_start &&
$object->lines[$i]->date_end) {
1749 $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)).
')';
1751 if (
$object->lines[$i]->date_start && !
$object->lines[$i]->date_end) {
1752 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateFrom',
dol_print_date(
$object->lines[$i]->date_start, $format,
false, $outputlangs)).
')';
1754 if (!
$object->lines[$i]->date_start &&
$object->lines[$i]->date_end) {
1755 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateUntil',
dol_print_date(
$object->lines[$i]->date_end, $format,
false, $outputlangs)).
')';
1760 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1762 $libelleproduitservice .=
'<br><b style="color:#333666;" ><em>'.$period.
'</em></b>';
1764 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $period);
1770 if (!empty($dbatch)) {
1775 include_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
1776 include_once DOL_DOCUMENT_ROOT.
'/product/class/productbatch.class.php';
1781 foreach ($dbatch as $detail) {
1783 if ($detail->eatby) {
1784 $dte[] = $outputlangs->transnoentitiesnoconv(
'printEatby',
dol_print_date($detail->eatby, $format,
false, $outputlangs));
1786 if ($detail->sellby) {
1787 $dte[] = $outputlangs->transnoentitiesnoconv(
'printSellby',
dol_print_date($detail->sellby, $format,
false, $outputlangs));
1789 if ($detail->batch) {
1790 $dte[] = $outputlangs->transnoentitiesnoconv(
'printBatch', $detail->batch);
1792 $dte[] = $outputlangs->transnoentitiesnoconv(
'printQty', $detail->qty);
1795 if (
$object->element ==
'shipping' && $detail->fk_origin_stock > 0 &&
getDolGlobalInt(
'PRODUCTBATCH_SHOW_WAREHOUSE_ON_SHIPMENT')) {
1796 $resproductbatch = $tmpproductbatch->fetch($detail->fk_origin_stock);
1797 if ($resproductbatch > 0) {
1798 $reswarehouse = $tmpwarehouse->fetch($tmpproductbatch->warehouseid);
1799 if ($reswarehouse > 0) {
1800 $dte[] = $tmpwarehouse->ref;
1805 $libelleproduitservice .=
"__N__ ".implode(
" - ", $dte);
1815 $libelleproduitservice = preg_replace(
'/__N__/',
'<br>', $libelleproduitservice);
1817 $libelleproduitservice = preg_replace(
'/__N__/',
"\n", $libelleproduitservice);
1821 return $libelleproduitservice;
1835 global $hookmanager;
1840 if (is_object($hookmanager)) {
1841 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1842 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1843 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1845 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
1847 $reshook = $hookmanager->executeHooks(
'pdf_getlinenum', $parameters,
$object, $action);
1848 $result .= $hookmanager->resPrint;
1850 if (empty($reshook)) {
1868 global $hookmanager;
1873 if (is_object($hookmanager)) {
1874 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1875 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1876 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1878 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
1880 $reshook = $hookmanager->executeHooks(
'pdf_getlineref', $parameters,
$object, $action);
1881 $result .= $hookmanager->resPrint;
1883 if (empty($reshook)) {
1901 global $hookmanager;
1906 if (is_object($hookmanager)) {
1907 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1908 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1909 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1911 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
1913 $reshook = $hookmanager->executeHooks(
'pdf_getlineref_supplier', $parameters,
$object, $action);
1914 $result .= $hookmanager->resPrint;
1916 if (empty($reshook)) {
1933 global $conf, $hookmanager, $mysoc;
1938 if (is_object($hookmanager)) {
1939 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1940 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1941 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1943 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
1945 $reshook = $hookmanager->executeHooks(
'pdf_getlinevatrate', $parameters,
$object, $action);
1947 if (!empty($hookmanager->resPrint)) {
1948 $result .= $hookmanager->resPrint;
1951 if (empty($reshook)) {
1952 if (empty($hidedetails) || $hidedetails > 1) {
1957 if (
$object->lines[$i]->total_localtax1 != 0) {
1958 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
1963 $tmpresult .=
vatrate((
string) abs(
$object->lines[$i]->localtax1_tx), 0);
1967 if (
$object->lines[$i]->total_localtax2 != 0) {
1968 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
1973 $tmpresult .=
vatrate((
string) abs(
$object->lines[$i]->localtax2_tx), 0);
1978 $result .= $tmpresult;
1995 global $conf, $hookmanager;
2005 if (is_object($hookmanager)) {
2006 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2007 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2008 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2010 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2012 $reshook = $hookmanager->executeHooks(
'pdf_getlineupexcltax', $parameters,
$object, $action);
2014 if (!empty($hookmanager->resPrint)) {
2015 $result .= $hookmanager->resPrint;
2018 if (empty($reshook)) {
2019 if (empty($hidedetails) || $hidedetails > 1) {
2020 $subprice = (isModEnabled(
"multicurrency") &&
$object->multicurrency_tx != 1 ?
$object->lines[$i]->multicurrency_subprice :
$object->lines[$i]->subprice);
2021 $result .=
price($sign * $subprice, 0, $outputlangs);
2038 global $hookmanager, $conf;
2048 if (is_object($hookmanager)) {
2049 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2050 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2051 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2053 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2055 $reshook = $hookmanager->executeHooks(
'pdf_getlineupwithtax', $parameters,
$object, $action);
2057 if (!empty($hookmanager->resPrint)) {
2058 $result .= $hookmanager->resPrint;
2061 if (empty($reshook)) {
2062 if (empty($hidedetails) || $hidedetails > 1) {
2063 $result .=
price($sign * ((
$object->lines[$i]->subprice) + (
$object->lines[$i]->subprice) * (
$object->lines[$i]->tva_tx) / 100), 0, $outputlangs);
2080 global $hookmanager;
2085 if (is_object($hookmanager)) {
2086 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2087 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2088 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2090 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2092 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty', $parameters,
$object, $action);
2094 if (!empty($hookmanager->resPrint)) {
2095 $result = $hookmanager->resPrint;
2098 if (empty($reshook)) {
2099 if (
$object->lines[$i]->special_code == 3) {
2102 if (empty($hidedetails) || $hidedetails > 1) {
2103 $result .=
$object->lines[$i]->qty;
2120 global $hookmanager;
2125 if (is_object($hookmanager)) {
2126 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2127 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2128 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2130 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2132 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_asked', $parameters,
$object, $action);
2134 if (!empty($hookmanager->resPrint)) {
2135 $result .= $hookmanager->resPrint;
2138 if (empty($reshook)) {
2139 if (
$object->lines[$i]->special_code == 3) {
2142 if (empty($hidedetails) || $hidedetails > 1) {
2143 $result .=
$object->lines[$i]->qty_asked;
2160 global $hookmanager;
2165 if (is_object($hookmanager)) {
2166 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2167 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2168 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2170 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2172 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_shipped', $parameters,
$object, $action);
2174 if (!empty($hookmanager->resPrint)) {
2175 $result .= $hookmanager->resPrint;
2178 if (empty($reshook)) {
2179 if (
$object->lines[$i]->special_code == 3) {
2182 if (empty($hidedetails) || $hidedetails > 1) {
2183 $result .=
$object->lines[$i]->qty_shipped;
2200 global $hookmanager;
2205 if (is_object($hookmanager)) {
2206 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2207 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2208 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2210 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2212 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_keeptoship', $parameters,
$object, $action);
2214 if (!empty($hookmanager->resPrint)) {
2215 $result .= $hookmanager->resPrint;
2218 if (empty($reshook)) {
2219 if (
$object->lines[$i]->special_code == 3) {
2222 if (empty($hidedetails) || $hidedetails > 1) {
2223 $result .= (
$object->lines[$i]->qty_asked -
$object->lines[$i]->qty_shipped);
2240 global $hookmanager, $langs;
2245 if (is_object($hookmanager)) {
2246 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2247 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2248 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2250 $parameters = array(
2252 'outputlangs' => $outputlangs,
2253 'hidedetails' => $hidedetails,
2254 'special_code' => $special_code
2257 $reshook = $hookmanager->executeHooks(
'pdf_getlineunit', $parameters,
$object, $action);
2259 if (!empty($hookmanager->resPrint)) {
2260 $result .= $hookmanager->resPrint;
2263 if (empty($reshook)) {
2264 if (empty($hidedetails) || $hidedetails > 1) {
2265 $result .= $langs->transnoentitiesnoconv(
$object->lines[$i]->getLabelOfUnit(
'short'));
2283 global $hookmanager;
2285 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
2290 if (is_object($hookmanager)) {
2291 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2292 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2293 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2295 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2297 $reshook = $hookmanager->executeHooks(
'pdf_getlineremisepercent', $parameters,
$object, $action);
2299 if (!empty($hookmanager->resPrint)) {
2300 $result .= $hookmanager->resPrint;
2303 if (empty($reshook)) {
2304 if (
$object->lines[$i]->special_code == 3) {
2307 if (empty($hidedetails) || $hidedetails > 1) {
2326 if (empty($hookmanager)) {
2327 global $hookmanager;
2334 if (is_object($hookmanager)) {
2335 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2336 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2337 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2339 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2341 $reshook = $hookmanager->executeHooks(
'pdf_getlineprogress', $parameters,
$object, $action);
2343 if (!empty($hookmanager->resPrint)) {
2344 return $hookmanager->resPrint;
2347 if (empty($reshook)) {
2348 if (
$object->lines[$i]->special_code == 3) {
2351 if (empty($hidedetails) || $hidedetails > 1) {
2354 if (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2355 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2357 $result = round(
$object->lines[$i]->situation_percent - $prev_progress, 1).
'%';
2359 $result = round(
$object->lines[$i]->situation_percent, 1).
'%';
2377 global $conf, $hookmanager;
2387 if (is_object($hookmanager)) {
2388 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2389 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2390 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2392 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code,
'sign' => $sign);
2394 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalexcltax', $parameters,
$object, $action);
2396 if (!empty($hookmanager->resPrint)) {
2397 $result .= $hookmanager->resPrint;
2400 if (empty($reshook)) {
2401 if (!empty(
$object->lines[$i]) &&
$object->lines[$i]->special_code == 3) {
2402 $result .= $outputlangs->transnoentities(
"Option");
2403 } elseif (empty($hidedetails) || $hidedetails > 1) {
2404 $total_ht = (isModEnabled(
"multicurrency") &&
$object->multicurrency_tx != 1 ?
$object->lines[$i]->multicurrency_total_ht :
$object->lines[$i]->total_ht);
2405 if (!empty(
$object->lines[$i]->situation_percent) &&
$object->lines[$i]->situation_percent > 0) {
2409 if (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2410 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2411 $progress = (
$object->lines[$i]->situation_percent - $prev_progress) / 100;
2413 $result .=
price($sign * ($total_ht / (
$object->lines[$i]->situation_percent / 100)) * $progress, 0, $outputlangs);
2415 $result .=
price($sign * $total_ht, 0, $outputlangs);
2433 global $hookmanager, $conf;
2443 if (is_object($hookmanager)) {
2444 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2445 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2446 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2448 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2450 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalwithtax', $parameters,
$object, $action);
2452 if (!empty($hookmanager->resPrint)) {
2453 $result .= $hookmanager->resPrint;
2456 if (empty($reshook)) {
2457 if (
$object->lines[$i]->special_code == 3) {
2458 $result .= $outputlangs->transnoentities(
"Option");
2459 } elseif (empty($hidedetails) || $hidedetails > 1) {
2460 $total_ttc = (isModEnabled(
"multicurrency") &&
$object->multicurrency_tx != 1 ?
$object->lines[$i]->multicurrency_total_ttc :
$object->lines[$i]->total_ttc);
2461 if (isset(
$object->lines[$i]->situation_percent) &&
$object->lines[$i]->situation_percent > 0) {
2465 if (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2466 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2467 $progress = (
$object->lines[$i]->situation_percent - $prev_progress) / 100;
2469 $result .=
price($sign * ($total_ttc / (
$object->lines[$i]->situation_percent / 100)) * $progress, 0, $outputlangs);
2471 $result .=
price($sign * $total_ttc, 0, $outputlangs);
2488 global $db, $hookmanager;
2490 $linkedobjects = array();
2494 foreach (
$object->linkedObjects as $objecttype => $objects) {
2495 if ($objecttype ==
'facture') {
2497 } elseif ($objecttype ==
'propal' || $objecttype ==
'supplier_proposal') {
2498 '@phan-var-force array<Propal|SupplierProposal> $objects';
2499 $outputlangs->load(
'propal');
2501 foreach ($objects as $elementobject) {
2502 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefProposal");
2503 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2504 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DatePropal");
2505 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
2507 } elseif ($objecttype ==
'commande' || $objecttype ==
'supplier_order') {
2508 '@phan-var-force array<Commande|CommandeFournisseur> $objects';
2509 $outputlangs->load(
'orders');
2511 if (count($objects) == 1) {
2512 $elementobject = array_shift($objects);
2513 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder");
2514 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref).(!empty($elementobject->ref_client) ?
' ('.$elementobject->ref_client.
')' :
'').(!empty($elementobject->ref_supplier) ?
' ('.$elementobject->ref_supplier.
')' :
'');
2515 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"OrderDate");
2516 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
2518 } elseif ($objecttype ==
'contrat') {
2519 '@phan-var-force Contrat[] $objects';
2520 $outputlangs->load(
'contracts');
2521 foreach ($objects as $elementobject) {
2522 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefContract");
2523 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2524 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DateContract");
2525 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date_contrat,
'day',
'', $outputlangs);
2527 } elseif ($objecttype ==
'fichinter') {
2528 '@phan-var-force Fichinter[] $objects';
2529 $outputlangs->load(
'interventions');
2530 foreach ($objects as $elementobject) {
2531 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"InterRef");
2532 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2533 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"InterDate");
2534 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->datec,
'day',
'', $outputlangs);
2536 } elseif ($objecttype ==
'shipping') {
2537 '@phan-var-force Expedition[] $objects';
2538 $outputlangs->loadLangs(array(
"orders",
"sendings"));
2540 if (count($objects) > 1) {
2542 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
2543 $object->note_public =
dol_concatdesc(
$object->note_public, $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending").
' :');
2548 foreach ($objects as $elementobject) {
2549 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
2550 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
2551 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
2552 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2554 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
2561 if (! is_object($order)) {
2564 $object->note_public =
dol_concatdesc(
$object->note_public, $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
''));
2568 } elseif (count($objects) == 1) {
2569 $elementobject = array_shift($objects);
2572 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
2573 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
2574 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
2575 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2577 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
2584 if (! is_object($order)) {
2585 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefSending");
2586 if (empty($linkedobjects[$objecttype][
'ref_value'])) {
2587 $linkedobjects[$objecttype][
'ref_value'] =
'';
2589 $linkedobjects[$objecttype][
'ref_value'] .=
' / ';
2591 $linkedobjects[$objecttype][
'ref_value'] .= $outputlangs->transnoentities($elementobject->ref);
2592 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
2594 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending");
2595 if (empty($linkedobjects[$objecttype][
'ref_value'])) {
2596 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
'');
2598 $linkedobjects[$objecttype][
'ref_value'] .=
' / '.$outputlangs->transnoentities($elementobject->ref);
2599 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
2606 if (is_object($hookmanager)) {
2607 $parameters = array(
'linkedobjects' => $linkedobjects,
'outputlangs' => $outputlangs);
2609 $hookmanager->executeHooks(
'pdf_getLinkedObjects', $parameters,
$object, $action);
2610 if (!empty($hookmanager->resArray)) {
2611 $linkedobjects = $hookmanager->resArray;
2615 return $linkedobjects;
2630 $maxheight =
getDolGlobalInt(
'MAIN_DOCUMENTS_WITH_PICTURE_HEIGHT', 32);
2631 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
2635 if ($tmp[
'height']) {
2636 $width = (int) round($maxheight * $tmp[
'width'] / $tmp[
'height']);
2637 if ($width > $maxwidth) {
2639 $height = (int) round($maxwidth * $tmp[
'height'] / $tmp[
'width']);
2641 $height = $maxheight;
2644 return array(
'width' => $width,
'height' => $height);
2658 global $conf, $hookmanager;
2664 if (
$object->lines[$i]->special_code == 3) {
2665 return $outputlangs->transnoentities(
"Option");
2667 if (is_object($hookmanager)) {
2668 $special_code =
$object->lines[$i]->special_code;
2669 if (!empty(
$object->lines[$i]->fk_parent_line)) {
2670 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2673 $parameters = array(
2675 'outputlangs' => $outputlangs,
2676 'hidedetails' => $hidedetails,
2677 'special_code' => $special_code
2682 if ($hookmanager->executeHooks(
'getlinetotalremise', $parameters,
$object, $action) > 0) {
2683 if (isset($hookmanager->resArray[
'linetotalremise'])) {
2684 return $hookmanager->resArray[
'linetotalremise'];
2686 return (
float) $hookmanager->resPrint;
2691 if (empty($hidedetails) || $hidedetails > 1) {
2692 return $sign * ((
$object->lines[$i]->subprice * (float)
$object->lines[$i]->qty) -
$object->lines[$i]->total_ht);
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Class to manage categories.
Class to manage customers 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_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.
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_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_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.
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...
getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $object=null, $include=null)
Return array of possible common substitutions.
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)
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
pdfGetLineTotalDiscountAmount($object, $i, $outputlangs, $hidedetails=0)
Return line total amount discount.
pdf_getFormat($outputlangs=null, $mode='setup')
Return array with format properties of default PDF format.
pdf_getPDFFontSize($outputlangs)
Return font size to use 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_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_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.