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';
189 $pdf =
new TCPDI($pagetype, $metric, $format,
true,
'UTF-8',
false, $pdfa);
191 $pdf =
new TCPDF($pagetype, $metric, $format,
true,
'UTF-8',
false, $pdfa);
209 $pdfrights = (
getDolGlobalString(
'PDF_SECURITY_ENCRYPTION_RIGHTS') ? json_decode($conf->global->PDF_SECURITY_ENCRYPTION_RIGHTS,
true) : array(
'modify',
'copy'));
212 $pdfuserpass = (
getDolGlobalString(
'PDF_SECURITY_ENCRYPTION_USERPASS') ? $conf->global->PDF_SECURITY_ENCRYPTION_USERPASS :
'');
215 $pdfownerpass = (
getDolGlobalString(
'PDF_SECURITY_ENCRYPTION_OWNERPASS') ? $conf->global->PDF_SECURITY_ENCRYPTION_OWNERPASS :
null);
218 $encstrength = (
getDolGlobalString(
'PDF_SECURITY_ENCRYPTION_STRENGTH') ? $conf->global->PDF_SECURITY_ENCRYPTION_STRENGTH : 0);
222 $pubkeys = (
getDolGlobalString(
'PDF_SECURITY_ENCRYPTION_PUBKEYS') ? json_decode($conf->global->PDF_SECURITY_ENCRYPTION_PUBKEYS,
true) :
null);
224 $pdf->SetProtection($pdfrights, $pdfuserpass, $pdfownerpass, $encstrength, $pubkeys);
238 require_once TCPDF_PATH.
'tcpdf_parser.php';
240 $isencrypted =
false;
242 $content = file_get_contents($pathoffile);
245 @($parser =
new TCPDF_PARSER(ltrim($content)));
246 list($xref, $data) = $parser->getParsedData();
250 if (isset($xref[
'trailer'][
'encrypt'])) {
272 return $conf->global->MAIN_PDF_FORCE_FONT;
276 if (class_exists(
'TCPDF')) {
277 if ($outputlangs->trans(
'FONTFORPDF') !=
'FONTFORPDF') {
278 $font = $outputlangs->trans(
'FONTFORPDF');
295 if (class_exists(
'TCPDF')) {
296 if ($outputlangs->trans(
'FONTSIZEFORPDF') !=
'FONTSIZEFORPDF') {
297 $size = (int) $outputlangs->trans(
'FONTSIZEFORPDF');
318 $height = (!
getDolGlobalString(
'MAIN_DOCUMENTS_LOGO_HEIGHT') ? 20 : $conf->global->MAIN_DOCUMENTS_LOGO_HEIGHT);
320 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
322 if ($tmp[
'height']) {
323 $width = round($height * $tmp[
'width'] / $tmp[
'height']);
324 if ($width > $maxwidth) {
325 $height = $height * $maxwidth / $width;
343 $pdf->startTransaction();
345 $start_y = $pdf->GetY();
347 $start_page = $pdf->getPage();
349 $pdf->writeHTMLCell(0, 0, 0, $start_y, $htmlcontent, 0, 1,
false,
true,
'J',
true);
351 $end_y = $pdf->GetY();
352 $end_page = $pdf->getPage();
355 if ($end_page == $start_page) {
356 $height = $end_y - $start_y;
358 for ($page = $start_page; $page <= $end_page; ++$page) {
359 $pdf->setPage($page);
360 $tmpm = $pdf->getMargins();
361 $tMargin = $tmpm[
'top'];
362 if ($page == $start_page) {
364 $height = $pdf->getPageHeight() - $start_y - $pdf->getBreakMargin();
365 } elseif ($page == $end_page) {
367 $height = $end_y - $tMargin;
369 $height = $pdf->getPageHeight() - $tMargin - $pdf->getBreakMargin();
374 $pdf = $pdf->rollbackTransaction();
395 if ($thirdparty instanceof
Societe) {
396 $socname = $thirdparty->name;
397 if (($includealias ||
getDolGlobalInt(
'PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) && !empty($thirdparty->name_alias)) {
399 $socname = $thirdparty->name_alias.
" - ".$thirdparty->name;
401 $socname = $thirdparty->name.
" - ".$thirdparty->name_alias;
404 } elseif ($thirdparty instanceof
Contact) {
405 if ($thirdparty->socid > 0) {
406 $thirdparty->fetch_thirdparty();
407 $socname = $thirdparty->thirdparty->name;
408 if (($includealias ||
getDolGlobalInt(
'PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) && !empty($thirdparty->thirdparty->name_alias)) {
410 $socname = $thirdparty->thirdparty->name_alias.
" - ".$thirdparty->thirdparty->name;
412 $socname = $thirdparty->thirdparty->name.
" - ".$thirdparty->thirdparty->name_alias;
417 throw new InvalidArgumentException(
'Parameter 1 $thirdparty is not a Societe nor Contact');
420 return $outputlangs->convToOutputCharset($socname);
436function pdf_build_address($outputlangs, $sourcecompany, $targetcompany =
'', $targetcontact =
'', $usecontact = 0, $mode =
'source',
$object =
null)
440 if ($mode ==
'source' && !is_object($sourcecompany)) {
443 if ($mode ==
'target' && !is_object($targetcompany)) {
447 if (!empty($sourcecompany->state_id) && empty($sourcecompany->state)) {
448 $sourcecompany->state =
getState($sourcecompany->state_id);
450 if (!empty($targetcompany->state_id) && empty($targetcompany->state)) {
451 $targetcompany->state =
getState($targetcompany->state_id);
456 if (is_object($hookmanager)) {
457 $parameters = array(
'sourcecompany' => &$sourcecompany,
'targetcompany' => &$targetcompany,
'targetcontact' => &$targetcontact,
'outputlangs' => $outputlangs,
'mode' => $mode,
'usecontact' => $usecontact);
459 $reshook = $hookmanager->executeHooks(
'pdf_build_address', $parameters,
$object, $action);
460 $stringaddress .= $hookmanager->resPrint;
462 if (empty($reshook)) {
463 if ($mode ==
'source') {
465 if (isset($targetcompany->country_code) && !empty($sourcecompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
469 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($sourcecompany, $withCountry,
"\n", $outputlangs)).
"\n";
473 if ($sourcecompany->phone) {
474 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"PhoneShort").
": ".$outputlangs->convToOutputCharset($sourcecompany->phone);
477 if ($sourcecompany->fax) {
478 $stringaddress .= ($stringaddress ? ($sourcecompany->phone ?
" - " :
"\n") :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($sourcecompany->fax);
481 if ($sourcecompany->email) {
482 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($sourcecompany->email);
485 if ($sourcecompany->url) {
486 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($sourcecompany->url);
491 if ($sourcecompany->tva_intra) {
492 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($sourcecompany->tva_intra);
497 if (
getDolGlobalString(
'MAIN_PROFID1_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof1)) {
498 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $sourcecompany->country_code);
499 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
502 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof1);
504 if (
getDolGlobalString(
'MAIN_PROFID2_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof2)) {
505 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $sourcecompany->country_code);
506 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
509 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof2);
511 if (
getDolGlobalString(
'MAIN_PROFID3_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof3)) {
512 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $sourcecompany->country_code);
513 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
516 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof3);
518 if (
getDolGlobalString(
'MAIN_PROFID4_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof4)) {
519 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $sourcecompany->country_code);
520 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
523 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof4);
525 if (
getDolGlobalString(
'MAIN_PROFID5_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof5)) {
526 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $sourcecompany->country_code);
527 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
530 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof5);
532 if (
getDolGlobalString(
'MAIN_PROFID6_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof6)) {
533 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $sourcecompany->country_code);
534 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
537 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof6);
540 $stringaddress .= ($stringaddress ?
"\n" :
'') .
getDolGlobalString(
'PDF_ADD_MORE_AFTER_SOURCE_ADDRESS');
544 if ($mode ==
'target' || preg_match(
'/targetwithdetails/', $mode)) {
546 if (is_object($targetcontact)) {
547 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($targetcontact->getFullName($outputlangs, 1));
549 if (!empty($targetcontact->address)) {
550 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcontact)).
"\n";
552 $companytouseforaddress = $targetcompany;
555 if ($targetcontact->socid > 0 && $targetcontact->socid != $targetcompany->id) {
556 $targetcontact->fetch_thirdparty();
557 $companytouseforaddress = $targetcontact->thirdparty;
560 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($companytouseforaddress)).
"\n";
563 if (!empty($targetcontact->country_code) && $targetcontact->country_code != $sourcecompany->country_code) {
564 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcontact->country_code));
565 } elseif (empty($targetcontact->country_code) && !empty($targetcompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
566 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
569 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || preg_match(
'/targetwithdetails/', $mode)) {
571 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
572 if (!empty($targetcontact->phone_pro) || !empty($targetcontact->phone_mobile)) {
573 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
575 if (!empty($targetcontact->phone_pro)) {
576 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_pro);
578 if (!empty($targetcontact->phone_pro) && !empty($targetcontact->phone_mobile)) {
579 $stringaddress .=
" / ";
581 if (!empty($targetcontact->phone_mobile)) {
582 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_mobile);
586 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
587 if ($targetcontact->fax) {
588 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcontact->fax);
592 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
593 if ($targetcontact->email) {
594 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcontact->email);
598 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
599 if ($targetcontact->url) {
600 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($targetcontact->url);
606 if (is_object($targetcompany)) {
607 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcompany));
609 if (!empty($targetcompany->country_code) && $targetcompany->country_code != $sourcecompany->country_code) {
610 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
612 $stringaddress .= ($stringaddress ?
"\n" :
'');
615 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || preg_match(
'/targetwithdetails/', $mode)) {
617 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
618 if (!empty($targetcompany->phone)) {
619 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
621 if (!empty($targetcompany->phone)) {
622 $stringaddress .= $outputlangs->convToOutputCharset($targetcompany->phone);
626 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
627 if ($targetcompany->fax) {
628 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcompany->fax);
632 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
633 if ($targetcompany->email) {
634 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcompany->email);
638 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
639 if ($targetcompany->url) {
640 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($targetcompany->url);
649 if ($usecontact && is_object($targetcontact) &&
getDolGlobalInt(
'MAIN_USE_COMPANY_NAME_OF_CONTACT')) {
650 $targetcontact->fetch_thirdparty();
651 if (!empty($targetcontact->thirdparty->id) && $targetcontact->thirdparty->tva_intra) {
652 $stringaddress .= ($stringaddress ?
"\n" :
'') . $outputlangs->transnoentities(
"VATIntraShort") .
': ' . $outputlangs->convToOutputCharset($targetcontact->thirdparty->tva_intra);
654 } elseif (!empty($targetcompany->tva_intra)) {
655 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($targetcompany->tva_intra);
660 if (
getDolGlobalString(
'MAIN_LEGALFORM_IN_ADDRESS') && !empty($targetcompany->forme_juridique_code)) {
662 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp;
666 if (
getDolGlobalString(
'MAIN_PROFID1_IN_ADDRESS') && !empty($targetcompany->idprof1)) {
667 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $targetcompany->country_code);
668 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
671 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof1);
673 if (
getDolGlobalString(
'MAIN_PROFID2_IN_ADDRESS') && !empty($targetcompany->idprof2)) {
674 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $targetcompany->country_code);
675 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
678 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof2);
680 if (
getDolGlobalString(
'MAIN_PROFID3_IN_ADDRESS') && !empty($targetcompany->idprof3)) {
681 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $targetcompany->country_code);
682 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
685 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof3);
687 if (
getDolGlobalString(
'MAIN_PROFID4_IN_ADDRESS') && !empty($targetcompany->idprof4)) {
688 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $targetcompany->country_code);
689 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
692 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof4);
694 if (
getDolGlobalString(
'MAIN_PROFID5_IN_ADDRESS') && !empty($targetcompany->idprof5)) {
695 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $targetcompany->country_code);
696 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
699 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof5);
701 if (
getDolGlobalString(
'MAIN_PROFID6_IN_ADDRESS') && !empty($targetcompany->idprof6)) {
702 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $targetcompany->country_code);
703 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
706 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof6);
711 if ($mode ==
'source' && !empty($sourcecompany->note_public)) {
712 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($sourcecompany->note_public);
714 if (($mode ==
'target' || preg_match(
'/targetwithdetails/', $mode)) && !empty($targetcompany->note_public)) {
715 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($targetcompany->note_public);
721 return $stringaddress;
739 $filepath = $conf->mycompany->dir_output.
'/logos/' .
getDolGlobalString(
'MAIN_USE_BACKGROUND_ON_PDF');
740 if (file_exists($filepath)) {
741 $pdf->SetAutoPageBreak(0, 0);
743 $pdf->SetAlpha($conf->global->MAIN_USE_BACKGROUND_ON_PDF_ALPHA);
745 $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);
750 $pdf->SetAutoPageBreak(1, 0);
772 $substitutionarray[
'__FROM_NAME__'] =
'__FROM_NAME__';
773 $substitutionarray[
'__FROM_EMAIL__'] =
'__FROM_EMAIL__';
774 return $substitutionarray;
794 } elseif ($unit ==
'mm') {
796 } elseif ($unit ==
'cm') {
798 } elseif ($unit ==
'in') {
806 $text = $outputlangs->convToOutputCharset($text);
808 $savx = $pdf->getX();
809 $savy = $pdf->getY();
811 $watermark_angle = atan($h / $w) / 2;
812 $watermark_x_pos = 0;
813 $watermark_y_pos = $h / 3;
814 $watermark_x = $w / 2;
815 $watermark_y = $h / 3;
816 $pdf->SetFont(
'',
'B', 40);
817 $pdf->SetTextColor(255, 192, 203);
820 $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));
822 $pdf->SetXY($watermark_x_pos, $watermark_y_pos);
823 $pdf->Cell($w - 20, 25, $outputlangs->convToOutputCharset($text),
"", 2,
"C", 0);
827 $pdf->SetXY($savx, $savy);
843function pdf_bank(&$pdf, $outputlangs, $curx, $cury, $account, $onlynumber = 0, $default_font_size = 10)
845 global $mysoc, $conf;
847 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formbank.class.php';
851 $pdf->SetXY($curx, $cury);
853 if (empty($onlynumber)) {
854 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizetitle);
855 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
'PaymentByTransferOnThisBankAccount').
':', 0,
'L', 0);
859 $outputlangs->load(
"banks");
862 $bickey =
"BICNumber";
863 if ($account->getCountryCode() ==
'IN') {
868 $usedetailedbban = $account->useDetailedBBAN();
871 if ($usedetailedbban) {
874 if (empty($onlynumber)) {
875 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
876 $pdf->SetXY($curx, $cury);
877 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L', 0);
887 if (empty($onlynumber)) {
888 $pdf->line($curx + 1, $cury + 1, $curx + 1, $cury + 6);
892 foreach ($account->getFieldsToShow() as $val) {
893 $pdf->SetXY($curx, $cury + 4);
894 $pdf->SetFont(
'',
'', $default_font_size - 3);
896 if ($val ==
'BankCode') {
899 $content = $account->code_banque;
900 } elseif ($val ==
'DeskCode') {
903 $content = $account->code_guichet;
904 } elseif ($val ==
'BankAccountNumber') {
907 $content = $account->number;
908 } elseif ($val ==
'BankAccountNumberKey') {
911 $content = $account->cle_rib;
912 } elseif ($val ==
'IBAN' || $val ==
'BIC') {
917 dol_print_error($account->db,
'Unexpected value for getFieldsToShow: '.$val);
921 $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($content), 0,
'C', 0);
922 $pdf->SetXY($curx, $cury + 1);
924 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
925 $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities($val), 0,
'C', 0);
926 if (empty($onlynumber)) {
927 $pdf->line($curx, $cury + 1, $curx, $cury + 7);
934 } elseif (!empty($account->number)) {
935 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
936 $pdf->SetXY($curx, $cury);
937 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L', 0);
940 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
941 $pdf->SetXY($curx, $cury);
942 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"BankAccountNumber").
': '.$outputlangs->convToOutputCharset($account->number), 0,
'L', 0);
945 if ($diffsizecontent <= 2) {
950 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
952 if (empty($onlynumber) && (!empty($account->domiciliation) || !empty($account->address))) {
953 $pdf->SetXY($curx, $cury);
954 $val = $outputlangs->transnoentities(
"Residence").
': '.$outputlangs->convToOutputCharset(empty($account->address) ? $account->domiciliation : $account->address);
955 $pdf->MultiCell(100, 3, $val, 0,
'L', 0);
958 $tmpy = $pdf->getStringHeight(100, $val);
962 if (!empty($account->owner_name)) {
963 $pdf->SetXY($curx, $cury);
964 $val = $outputlangs->transnoentities(
"BankAccountOwner").
': '.$outputlangs->convToOutputCharset($account->owner_name);
965 $pdf->MultiCell(100, 3, $val, 0,
'L', 0);
966 $tmpy = $pdf->getStringHeight(100, $val);
968 } elseif (!$usedetailedbban) {
975 if (!empty($account->iban)) {
977 $ibanDisplay_temp = str_replace(
' ',
'', $outputlangs->convToOutputCharset($account->iban));
980 $nbIbanDisplay_temp =
dol_strlen($ibanDisplay_temp);
981 for ($i = 0; $i < $nbIbanDisplay_temp; $i++) {
982 $ibanDisplay .= $ibanDisplay_temp[$i];
983 if ($i % 4 == 3 && $i > 0) {
988 $pdf->SetFont(
'',
'B', $default_font_size - 3);
989 $pdf->SetXY($curx, $cury);
990 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($ibankey).
': '.$ibanDisplay, 0,
'L', 0);
994 if (!empty($account->bic)) {
995 $pdf->SetFont(
'',
'B', $default_font_size - 3);
996 $pdf->SetXY($curx, $cury);
997 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($bickey).
': '.$outputlangs->convToOutputCharset($account->bic), 0,
'L', 0);
1000 return $pdf->getY();
1020function pdf_pagefoot(&$pdf, $outputlangs, $paramfreetext, $fromcompany, $marge_basse, $marge_gauche, $page_hauteur,
$object, $showdetails = 0, $hidefreetext = 0, $page_largeur = 0, $watermark =
'')
1022 global $conf, $hookmanager;
1024 $outputlangs->load(
"dict");
1027 $marginwithfooter = 0;
1029 $dims = $pdf->getPageDimensions();
1032 if (empty($hidefreetext) && !empty($conf->global->$paramfreetext)) {
1035 $substitutionarray[
'__FROM_NAME__'] = $fromcompany->name;
1036 $substitutionarray[
'__FROM_EMAIL__'] = $fromcompany->email;
1044 $newfreetext = preg_replace(
'/(<img.*src=")[^\"]*viewimage\.php[^\"]*modulepart=medias[^\"]*file=([^\"]*)("[^\/]*\/>)/',
'\1file:/'.DOL_DATA_ROOT.
'/medias/\2\3', $newfreetext);
1046 $line .= $outputlangs->convToOutputCharset($newfreetext);
1055 if ($showdetails == 1 || $showdetails == 3) {
1057 if ($fromcompany->name) {
1058 $line1 .= ($line1 ?
" - " :
"").$outputlangs->transnoentities(
"RegisteredOffice").
": ".$fromcompany->name;
1061 if ($fromcompany->address) {
1062 $line1 .= ($line1 ?
" - " :
"").str_replace(
"\n",
", ", $fromcompany->address);
1065 if ($fromcompany->zip) {
1066 $line1 .= ($line1 ?
" - " :
"").$fromcompany->zip;
1069 if ($fromcompany->town) {
1070 $line1 .= ($line1 ?
" " :
"").$fromcompany->town;
1073 if ($fromcompany->country) {
1074 $line1 .= ($line1 ?
", " :
"").$fromcompany->country;
1077 if ($fromcompany->phone) {
1078 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Phone").
": ".$fromcompany->phone;
1081 if ($fromcompany->fax) {
1082 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Fax").
": ".$fromcompany->fax;
1086 if ($fromcompany->url) {
1087 $line2 .= ($line2 ?
" - " :
"").$fromcompany->url;
1090 if ($fromcompany->email) {
1091 $line2 .= ($line2 ?
" - " :
"").$fromcompany->email;
1094 if ($showdetails == 2 || $showdetails == 3 || (!empty($fromcompany->country_code) && $fromcompany->country_code ==
'DE')) {
1096 if ($fromcompany->managers) {
1097 $line2 .= ($line2 ?
" - " :
"").$fromcompany->managers;
1103 if (!empty($fromcompany->forme_juridique_code) && $fromcompany->forme_juridique_code) {
1104 $line3 .= ($line3 ?
" - " :
"").$outputlangs->convToOutputCharset(
getFormeJuridiqueLabel($fromcompany->forme_juridique_code));
1107 if (!empty($fromcompany->capital)) {
1108 $tmpamounttoshow =
price2num($fromcompany->capital);
1109 if (is_numeric($tmpamounttoshow) && $tmpamounttoshow > 0) {
1110 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf",
price($tmpamounttoshow, 0, $outputlangs, 0, 0, 0, $conf->currency));
1111 } elseif (!empty($fromcompany->capital)) {
1112 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf", $fromcompany->capital, $outputlangs);
1116 if (!empty($fromcompany->idprof1) && $fromcompany->idprof1 && ($fromcompany->country_code !=
'FR' || !$fromcompany->idprof2)) {
1117 $field = $outputlangs->transcountrynoentities(
"ProfId1", $fromcompany->country_code);
1118 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1121 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof1);
1124 if (!empty($fromcompany->idprof2) && $fromcompany->idprof2) {
1125 $field = $outputlangs->transcountrynoentities(
"ProfId2", $fromcompany->country_code);
1126 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1129 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof2);
1134 if (!empty($fromcompany->idprof3) && $fromcompany->idprof3) {
1135 $field = $outputlangs->transcountrynoentities(
"ProfId3", $fromcompany->country_code);
1136 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1139 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof3);
1142 if (!empty($fromcompany->idprof4) && $fromcompany->idprof4) {
1143 $field = $outputlangs->transcountrynoentities(
"ProfId4", $fromcompany->country_code);
1144 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1147 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof4);
1150 if (!empty($fromcompany->idprof5) && $fromcompany->idprof5) {
1151 $field = $outputlangs->transcountrynoentities(
"ProfId5", $fromcompany->country_code);
1152 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1155 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof5);
1158 if (!empty($fromcompany->idprof6) && $fromcompany->idprof6) {
1159 $field = $outputlangs->transcountrynoentities(
"ProfId6", $fromcompany->country_code);
1160 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1163 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof6);
1166 if (!empty($fromcompany->idprof7) && $fromcompany->idprof7) {
1167 $field = $outputlangs->transcountrynoentities(
"ProfId7", $fromcompany->country_code);
1168 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1171 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof7);
1174 if (!empty($fromcompany->idprof8) && $fromcompany->idprof8) {
1175 $field = $outputlangs->transcountrynoentities(
"ProfId8", $fromcompany->country_code);
1176 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1179 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof8);
1182 if (!empty($fromcompany->idprof9) && $fromcompany->idprof9) {
1183 $field = $outputlangs->transcountrynoentities(
"ProfId9", $fromcompany->country_code);
1184 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1187 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof9);
1190 if (!empty($fromcompany->idprof10) && $fromcompany->idprof10) {
1191 $field = $outputlangs->transcountrynoentities(
"ProfId10", $fromcompany->country_code);
1192 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1195 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof10);
1198 if (!empty($fromcompany->tva_intra) && $fromcompany->tva_intra !=
'') {
1199 $line4 .= ($line4 ?
" - " :
"").$outputlangs->transnoentities(
"VATIntraShort").
": ".$outputlangs->convToOutputCharset($fromcompany->tva_intra);
1202 $pdf->SetFont(
'',
'', 7);
1203 $pdf->SetDrawColor(224, 224, 224);
1206 list($r, $g, $b) = sscanf($conf->global->PDF_FOOTER_TEXT_COLOR,
'%d, %d, %d');
1207 $pdf->SetTextColor($r, $g, $b);
1211 $freetextheight = 0;
1221 $freetextheight = $pdf->getStringHeight($width, $line);
1229 if (is_object($hookmanager)) {
1230 $parameters = array(
'line1' => $line1,
'line2' => $line2,
'line3' => $line3,
'line4' => $line4,
'outputlangs' => $outputlangs);
1232 $hookmanager->executeHooks(
'pdf_pagefoot', $parameters,
$object, $action);
1233 if (!empty($hookmanager->resPrint) && $hidefreetext == 0) {
1234 $mycustomfooter = $hookmanager->resPrint;
1237 $marginwithfooter = $marge_basse + $freetextheight + $mycustomfooterheight;
1238 $posy = (float) $marginwithfooter;
1242 list($r, $g, $b) = sscanf($conf->global->PDF_FOOTER_BACKGROUND_COLOR,
'%d, %d, %d');
1243 $pdf->SetAutoPageBreak(0, 0);
1244 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F',
'', $fill_color = array($r, $g, $b));
1245 $pdf->SetAutoPageBreak(1, 0);
1249 $pdf->SetAutoPageBreak(0, 0);
1252 $pdf->SetXY($dims[
'lm'], -$posy);
1254 $pdf->MultiCell(0, 3, $line, 0, $align, 0);
1256 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1258 $posy -= $freetextheight;
1261 $pdf->SetAutoPageBreak(1, 0);
1268 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1279 $pdf->SetAutoPageBreak(0, 0);
1281 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $mycustomfooterheight, $dims[
'lm'], $dims[
'hk'] - $posy,
dol_htmlentitiesbr($mycustomfooter, 1,
'UTF-8', 0));
1283 $pdf->SetAutoPageBreak(1, 0);
1286 $posy -= $mycustomfooterheight - 3;
1289 $marginwithfooter = $marge_basse + $freetextheight + (!empty($line1) ? 3 : 0) + (!empty($line2) ? 3 : 0) + (!empty($line3) ? 3 : 0) + (!empty($line4) ? 3 : 0);
1290 $posy = (float) $marginwithfooter;
1294 list($r, $g, $b) = sscanf($conf->global->PDF_FOOTER_BACKGROUND_COLOR,
'%d, %d, %d');
1295 $pdf->SetAutoPageBreak(0, 0);
1296 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F',
'', $fill_color = array($r, $g, $b));
1297 $pdf->SetAutoPageBreak(1, 0);
1301 $pdf->SetAutoPageBreak(0, 0);
1304 $pdf->SetXY($dims[
'lm'], -$posy);
1306 $pdf->MultiCell(0, 3, $line, 0, $align, 0);
1308 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1310 $posy -= $freetextheight;
1313 $pdf->SetAutoPageBreak(1, 0);
1322 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1332 if (!empty($line1)) {
1333 $pdf->SetFont(
'',
'B', 7);
1334 $pdf->SetXY($dims[
'lm'], -$posy);
1335 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line1, 0,
'C', 0);
1337 $pdf->SetFont(
'',
'', 7);
1340 if (!empty($line2)) {
1341 $pdf->SetFont(
'',
'B', 7);
1342 $pdf->SetXY($dims[
'lm'], -$posy);
1343 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line2, 0,
'C', 0);
1345 $pdf->SetFont(
'',
'', 7);
1348 if (!empty($line3)) {
1349 $pdf->SetXY($dims[
'lm'], -$posy);
1350 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line3, 0,
'C', 0);
1353 if (!empty($line4)) {
1355 $pdf->SetXY($dims[
'lm'], -$posy);
1356 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line4, 0,
'C', 0);
1363 $pdf->SetXY($dims[
'wk'] - $dims[
'rm'] - 18 -
getDolGlobalInt(
'PDF_FOOTER_PAGE_NUMBER_X', 0), -$posy -
getDolGlobalInt(
'PDF_FOOTER_PAGE_NUMBER_Y', 0));
1365 $pagination = $pdf->PageNo().
' / '.$pdf->getAliasNbPages();
1366 $fontRenderCorrection = 0;
1367 if (in_array(
pdf_getPDFFont($outputlangs), array(
'freemono',
'DejaVuSans'))) {
1368 $fontRenderCorrection = 10;
1370 $pdf->MultiCell(18 + $fontRenderCorrection, 2, $pagination, 0,
'R', 0);
1373 if (!empty($watermark)) {
1374 pdf_watermark($pdf, $outputlangs, $page_hauteur, $page_largeur,
'mm', $watermark);
1377 return $marginwithfooter;
1397 if (!empty($linkedobjects)) {
1398 foreach ($linkedobjects as $linkedobject) {
1399 $reftoshow = $linkedobject[
"ref_title"].
' : '.$linkedobject[
"ref_value"];
1400 if (!empty($linkedobject[
"date_value"])) {
1401 $reftoshow .=
' / '.$linkedobject[
"date_value"];
1405 $pdf->SetXY($posx, $posy);
1406 $pdf->SetFont(
'',
'', $default_font_size - 2);
1407 $pdf->MultiCell($w, $h, $reftoshow,
'', $align);
1411 return $pdf->getY();
1431function pdf_writelinedesc(&$pdf,
$object, $i, $outputlangs, $w, $h, $posx, $posy, $hideref = 0, $hidedesc = 0, $issupplierline = 0, $align =
'J')
1433 global $db, $conf, $langs, $hookmanager;
1438 if (is_object($hookmanager)) {
1439 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1440 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1441 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1443 $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);
1445 $reshook = $hookmanager->executeHooks(
'pdf_writelinedesc', $parameters,
$object, $action);
1447 if (!empty($hookmanager->resPrint)) {
1448 $result .= $hookmanager->resPrint;
1451 if (empty($reshook)) {
1453 $labelproductservice = preg_replace(
'/(<img[^>]*src=")[^\"]*viewimage\.php[^\"]*modulepart=medias[^\"]*file=([^\"]*)/',
'\1file:/'.DOL_DATA_ROOT.
'/medias/\2\3', $labelproductservice, -1, $nbrep);
1460 $labelproductservice = preg_replace(
'/(<img[^>]*src=")([^"]*)(&)([^"]*")/',
'\1\2&\4', $labelproductservice, -1, $nbrep);
1463 $pdf->setListIndentWidth(5);
1464 $TMarginList = [
'ul' => [[
'h'=>0.1, ],[
'h'=>0.1, ]],
'li' => [[
'h'=>0.1, ],],];
1465 $pdf->setHtmlVSpace($TMarginList);
1469 $pdf->writeHTMLCell($w, $h, $posx, $posy, $outputlangs->convToOutputCharset($labelproductservice), 0, 1,
false,
true, $align,
true);
1470 $result .= $labelproductservice;
1488 global $db, $conf, $langs;
1490 $idprod = (!empty(
$object->lines[$i]->fk_product) ?
$object->lines[$i]->fk_product :
false);
1491 $label = (!empty(
$object->lines[$i]->label) ?
$object->lines[$i]->label : (!empty(
$object->lines[$i]->product_label) ?
$object->lines[$i]->product_label :
''));
1492 $product_barcode = (!empty(
$object->lines[$i]->product_barcode) ?
$object->lines[$i]->product_barcode :
"");
1493 $desc = (!empty(
$object->lines[$i]->desc) ?
$object->lines[$i]->desc : (!empty(
$object->lines[$i]->description) ?
$object->lines[$i]->description :
''));
1494 $ref_supplier = (!empty(
$object->lines[$i]->ref_supplier) ?
$object->lines[$i]->ref_supplier : (!empty(
$object->lines[$i]->ref_fourn) ?
$object->lines[$i]->ref_fourn :
''));
1495 $note = (!empty(
$object->lines[$i]->note) ?
$object->lines[$i]->note :
'');
1496 $dbatch = (!empty(
$object->lines[$i]->detail_batch) ?
$object->lines[$i]->detail_batch :
false);
1498 if ($issupplierline) {
1499 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
1502 include_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
1506 include_once DOL_DOCUMENT_ROOT .
'/product/class/productcustomerprice.class.php';
1511 $prodser->fetch($idprod);
1513 if (
getDolGlobalInt(
'MAIN_MULTILANGS') && ($outputlangs->defaultlang != $langs->defaultlang)) {
1514 $translatealsoifmodified = (
getDolGlobalString(
'MAIN_MULTILANG_TRANSLATE_EVEN_IF_MODIFIED'));
1522 $textwasnotmodified = ($label == $prodser->label);
1523 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"label"]) && ($textwasnotmodified || $translatealsoifmodified)) {
1524 $label = $prodser->multilangs[$outputlangs->defaultlang][
"label"];
1529 $textwasnotmodified =
false;
1533 $textwasnotmodified = ($desc == $prodser->description);
1535 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"description"])) {
1536 if ($textwasnotmodified) {
1537 $desc = str_replace($prodser->description, $prodser->multilangs[$outputlangs->defaultlang][
"description"], $desc);
1538 } elseif ($translatealsoifmodified) {
1539 $desc = $prodser->multilangs[$outputlangs->defaultlang][
"description"];
1544 $textwasnotmodified = ($note == $prodser->note_public);
1545 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"other"]) && ($textwasnotmodified || $translatealsoifmodified)) {
1546 $note = $prodser->multilangs[$outputlangs->defaultlang][
"other"];
1549 } elseif ((
$object->element ==
'facture' ||
$object->element ==
'facturefourn') && preg_match(
'/^\(DEPOSIT\).+/', $desc)) {
1550 $desc = str_replace(
'(DEPOSIT)', $outputlangs->trans(
'Deposit'), $desc);
1555 $libelleproduitservice = $label;
1556 if (!empty($libelleproduitservice) &&
getDolGlobalString(
'PDF_BOLD_PRODUCT_LABEL')) {
1560 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1562 $libelleproduitservice =
'<b>'.$libelleproduitservice.
'</b>';
1569 $prodser->get_sousproduits_arbo();
1570 if (!empty($prodser->sousprods) && is_array($prodser->sousprods) && count($prodser->sousprods)) {
1571 $outputlangs->load(
'mrp');
1572 $tmparrayofsubproducts = reset($prodser->sousprods);
1575 if (isset(
$object->lines[$i]->qty) && !empty(
$object->lines[$i]->qty)) {
1576 $qtyText =
$object->lines[$i]->qty;
1577 } elseif (isset(
$object->lines[$i]->qty_shipped) && !empty(
$object->lines[$i]->qty_shipped)) {
1578 $qtyText =
$object->lines[$i]->qty;
1582 foreach ($tmparrayofsubproducts as $subprodval) {
1586 $outputlangs->trans(
'Qty').
':'.$qtyText.
' x '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1].
'= '.$outputlangs->trans(
'QtyTot').
':'.$subprodval[1] * $qtyText :
1587 $outputlangs->trans(
'Qty').
' '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1])
1591 foreach ($tmparrayofsubproducts as $subprodval) {
1593 dol_concatdesc($libelleproduitservice,
" * ".$subprodval[5].(($subprodval[5] && $subprodval[3]) ?
' - ' :
'').$subprodval[3]),
1595 $outputlangs->trans(
'Qty').
':'.$qtyText.
' x '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1].
'= '.$outputlangs->trans(
'QtyTot').
':'.$subprodval[1] * $qtyText :
1596 $outputlangs->trans(
'Qty').
' '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1])
1603 if (isModEnabled(
'barcode') &&
getDolGlobalString(
'MAIN_GENERATE_DOCUMENTS_SHOW_PRODUCT_BARCODE') && !empty($product_barcode)) {
1604 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $outputlangs->trans(
"BarCode").
" ".$product_barcode);
1608 if (!empty($desc) && ($desc != $label)) {
1609 if ($desc ==
'(CREDIT_NOTE)' &&
$object->lines[$i]->fk_remise_except) {
1611 $discount->fetch(
$object->lines[$i]->fk_remise_except);
1612 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
1613 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromCreditNote", $sourceref);
1614 } elseif ($desc ==
'(DEPOSIT)' &&
$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(
"DiscountFromDeposit", $sourceref);
1621 $libelleproduitservice .=
' ('.dol_print_date($discount->datec,
'day',
'', $outputlangs).
')';
1623 } elseif ($desc ==
'(EXCESS RECEIVED)' &&
$object->lines[$i]->fk_remise_except) {
1625 $discount->fetch(
$object->lines[$i]->fk_remise_except);
1626 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessReceived", $discount->ref_facture_source);
1627 } elseif ($desc ==
'(EXCESS PAID)' &&
$object->lines[$i]->fk_remise_except) {
1629 $discount->fetch(
$object->lines[$i]->fk_remise_except);
1630 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessPaid", $discount->ref_invoice_supplier_source);
1634 if (!empty(
$object->element)) {
1635 $tmpkey =
'MAIN_DOCUMENTS_HIDE_DESCRIPTION_FOR_'.strtoupper(
$object->element);
1636 if (!empty($conf->global->$tmpkey)) {
1640 if (empty($hidedesc)) {
1642 $libelleproduitservice =
dol_concatdesc($desc, $libelleproduitservice);
1645 $libelleproduitservice = $desc;
1647 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
1652 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
1658 $prefix_prodserv =
"";
1661 if ($prodser->isService()) {
1662 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Service").
" ";
1664 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Product").
" ";
1668 if (empty($hideref)) {
1669 if ($issupplierline) {
1671 $ref_prodserv = $prodser->ref;
1672 if ($ref_supplier) {
1673 $ref_prodserv .= ($prodser->ref ?
' (' :
'').$outputlangs->transnoentitiesnoconv(
"SupplierRef").
' '.$ref_supplier.($prodser->ref ?
')' :
'');
1675 } elseif (
getDolGlobalInt(
'PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES') == 1) {
1676 $ref_prodserv = $ref_supplier;
1677 } elseif (
getDolGlobalInt(
'PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES') == 2) {
1678 $ref_prodserv = $ref_supplier.
' ('.$outputlangs->transnoentitiesnoconv(
"InternalRef").
' '.$prodser->ref.
')';
1681 $ref_prodserv = $prodser->ref;
1685 $filter = array(
'fk_product' => $idprod,
'fk_soc' =>
$object->socid);
1687 $nbCustomerPrices = $productCustomerPriceStatic->fetchAll(
'',
'', 1, 0, $filter);
1689 if ($nbCustomerPrices > 0) {
1690 $productCustomerPrice = $productCustomerPriceStatic->lines[0];
1692 if (!empty($productCustomerPrice->ref_customer)) {
1693 switch ($conf->global->PRODUIT_CUSTOMER_PRICES_PDF_REF_MODE) {
1695 $ref_prodserv = $productCustomerPrice->ref_customer;
1699 $ref_prodserv = $productCustomerPrice->ref_customer .
' (' . $outputlangs->transnoentitiesnoconv(
'InternalRef') .
' ' . $ref_prodserv .
')';
1703 $ref_prodserv = $ref_prodserv .
' (' . $outputlangs->transnoentitiesnoconv(
'RefCustomer') .
' ' . $productCustomerPrice->ref_customer .
')';
1710 if (!empty($libelleproduitservice) && !empty($ref_prodserv)) {
1711 $ref_prodserv .=
" - ";
1715 if (!empty($ref_prodserv) &&
getDolGlobalString(
'PDF_BOLD_PRODUCT_REF_AND_PERIOD')) {
1717 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1719 $ref_prodserv =
'<b>'.$ref_prodserv.
'</b>';
1722 $libelleproduitservice = $prefix_prodserv.$ref_prodserv.$libelleproduitservice;
1725 if (
getDolGlobalString(
'CATEGORY_ADD_DESC_INTO_DOC') && $idprod && isModEnabled(
'category')) {
1726 include_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
1729 $tblcateg = $categstatic->containing($idprod, Categorie::TYPE_PRODUCT);
1730 foreach ($tblcateg as $cate) {
1732 $desccateg = $cate->description;
1734 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desccateg);
1739 if (!empty(
$object->lines[$i]->date_start) || !empty(
$object->lines[$i]->date_end)) {
1743 if (
$object->lines[$i]->date_start &&
$object->lines[$i]->date_end) {
1744 $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)).
')';
1746 if (
$object->lines[$i]->date_start && !
$object->lines[$i]->date_end) {
1747 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateFrom',
dol_print_date(
$object->lines[$i]->date_start, $format,
false, $outputlangs)).
')';
1749 if (!
$object->lines[$i]->date_start &&
$object->lines[$i]->date_end) {
1750 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateUntil',
dol_print_date(
$object->lines[$i]->date_end, $format,
false, $outputlangs)).
')';
1755 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1757 $libelleproduitservice .=
'<br><b style="color:#333666;" ><em>'.$period.
'</em></b>';
1759 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $period);
1765 if (!empty($dbatch)) {
1770 include_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
1771 include_once DOL_DOCUMENT_ROOT.
'/product/class/productbatch.class.php';
1776 foreach ($dbatch as $detail) {
1778 if ($detail->eatby) {
1779 $dte[] = $outputlangs->transnoentitiesnoconv(
'printEatby',
dol_print_date($detail->eatby, $format,
false, $outputlangs));
1781 if ($detail->sellby) {
1782 $dte[] = $outputlangs->transnoentitiesnoconv(
'printSellby',
dol_print_date($detail->sellby, $format,
false, $outputlangs));
1784 if ($detail->batch) {
1785 $dte[] = $outputlangs->transnoentitiesnoconv(
'printBatch', $detail->batch);
1787 $dte[] = $outputlangs->transnoentitiesnoconv(
'printQty', $detail->qty);
1790 if (
$object->element ==
'shipping' && $detail->fk_origin_stock > 0 &&
getDolGlobalInt(
'PRODUCTBATCH_SHOW_WAREHOUSE_ON_SHIPMENT')) {
1791 $resproductbatch = $tmpproductbatch->fetch($detail->fk_origin_stock);
1792 if ($resproductbatch > 0) {
1793 $reswarehouse = $tmpwarehouse->fetch($tmpproductbatch->warehouseid);
1794 if ($reswarehouse > 0) {
1795 $dte[] = $tmpwarehouse->ref;
1800 $libelleproduitservice .=
"__N__ ".implode(
" - ", $dte);
1810 $libelleproduitservice = preg_replace(
'/__N__/',
'<br>', $libelleproduitservice);
1812 $libelleproduitservice = preg_replace(
'/__N__/',
"\n", $libelleproduitservice);
1816 return $libelleproduitservice;
1830 global $hookmanager;
1835 if (is_object($hookmanager)) {
1836 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1837 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1838 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1840 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
1842 $reshook = $hookmanager->executeHooks(
'pdf_getlinenum', $parameters,
$object, $action);
1843 $result .= $hookmanager->resPrint;
1845 if (empty($reshook)) {
1863 global $hookmanager;
1868 if (is_object($hookmanager)) {
1869 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1870 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1871 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1873 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
1875 $reshook = $hookmanager->executeHooks(
'pdf_getlineref', $parameters,
$object, $action);
1876 $result .= $hookmanager->resPrint;
1878 if (empty($reshook)) {
1895 global $hookmanager;
1900 if (is_object($hookmanager)) {
1901 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1902 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1903 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1905 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
1907 $reshook = $hookmanager->executeHooks(
'pdf_getlineref_supplier', $parameters,
$object, $action);
1908 $result .= $hookmanager->resPrint;
1910 if (empty($reshook)) {
1927 global $conf, $hookmanager, $mysoc;
1932 if (is_object($hookmanager)) {
1933 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1934 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1935 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1937 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
1939 $reshook = $hookmanager->executeHooks(
'pdf_getlinevatrate', $parameters,
$object, $action);
1941 if (!empty($hookmanager->resPrint)) {
1942 $result .= $hookmanager->resPrint;
1945 if (empty($reshook)) {
1946 if (empty($hidedetails) || $hidedetails > 1) {
1951 if (
$object->lines[$i]->total_localtax1 != 0) {
1952 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
1961 if (
$object->lines[$i]->total_localtax2 != 0) {
1962 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
1972 $result .= $tmpresult;
1989 global $conf, $hookmanager;
1999 if (is_object($hookmanager)) {
2000 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2001 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2002 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2004 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2006 $reshook = $hookmanager->executeHooks(
'pdf_getlineupexcltax', $parameters,
$object, $action);
2008 if (!empty($hookmanager->resPrint)) {
2009 $result .= $hookmanager->resPrint;
2012 if (empty($reshook)) {
2013 if (empty($hidedetails) || $hidedetails > 1) {
2014 $subprice = (isModEnabled(
"multicurrency") &&
$object->multicurrency_tx != 1 ?
$object->lines[$i]->multicurrency_subprice :
$object->lines[$i]->subprice);
2015 $result .=
price($sign * $subprice, 0, $outputlangs);
2032 global $hookmanager, $conf;
2042 if (is_object($hookmanager)) {
2043 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2044 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2045 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2047 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2049 $reshook = $hookmanager->executeHooks(
'pdf_getlineupwithtax', $parameters,
$object, $action);
2051 if (!empty($hookmanager->resPrint)) {
2052 $result .= $hookmanager->resPrint;
2055 if (empty($reshook)) {
2056 if (empty($hidedetails) || $hidedetails > 1) {
2057 $result .=
price($sign * ((
$object->lines[$i]->subprice) + (
$object->lines[$i]->subprice) * (
$object->lines[$i]->tva_tx) / 100), 0, $outputlangs);
2074 global $hookmanager;
2079 if (is_object($hookmanager)) {
2080 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2081 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2082 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2084 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2086 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty', $parameters,
$object, $action);
2088 if (!empty($hookmanager->resPrint)) {
2089 $result = $hookmanager->resPrint;
2092 if (empty($reshook)) {
2093 if (
$object->lines[$i]->special_code == 3) {
2096 if (empty($hidedetails) || $hidedetails > 1) {
2097 $result .=
$object->lines[$i]->qty;
2114 global $hookmanager;
2119 if (is_object($hookmanager)) {
2120 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2121 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2122 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2124 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2126 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_asked', $parameters,
$object, $action);
2128 if (!empty($hookmanager->resPrint)) {
2129 $result .= $hookmanager->resPrint;
2132 if (empty($reshook)) {
2133 if (
$object->lines[$i]->special_code == 3) {
2136 if (empty($hidedetails) || $hidedetails > 1) {
2137 $result .=
$object->lines[$i]->qty_asked;
2154 global $hookmanager;
2159 if (is_object($hookmanager)) {
2160 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2161 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2162 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2164 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2166 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_shipped', $parameters,
$object, $action);
2168 if (!empty($hookmanager->resPrint)) {
2169 $result .= $hookmanager->resPrint;
2172 if (empty($reshook)) {
2173 if (
$object->lines[$i]->special_code == 3) {
2176 if (empty($hidedetails) || $hidedetails > 1) {
2177 $result .=
$object->lines[$i]->qty_shipped;
2194 global $hookmanager;
2199 if (is_object($hookmanager)) {
2200 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2201 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2202 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2204 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2206 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_keeptoship', $parameters,
$object, $action);
2208 if (!empty($hookmanager->resPrint)) {
2209 $result .= $hookmanager->resPrint;
2212 if (empty($reshook)) {
2213 if (
$object->lines[$i]->special_code == 3) {
2216 if (empty($hidedetails) || $hidedetails > 1) {
2217 $result .= (
$object->lines[$i]->qty_asked -
$object->lines[$i]->qty_shipped);
2234 global $hookmanager, $langs;
2239 if (is_object($hookmanager)) {
2240 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2241 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2242 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2244 $parameters = array(
2246 'outputlangs' => $outputlangs,
2247 'hidedetails' => $hidedetails,
2248 'special_code' => $special_code
2251 $reshook = $hookmanager->executeHooks(
'pdf_getlineunit', $parameters,
$object, $action);
2253 if (!empty($hookmanager->resPrint)) {
2254 $result .= $hookmanager->resPrint;
2257 if (empty($reshook)) {
2258 if (empty($hidedetails) || $hidedetails > 1) {
2259 $result .= $langs->transnoentitiesnoconv(
$object->lines[$i]->getLabelOfUnit(
'short'));
2277 global $hookmanager;
2279 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
2284 if (is_object($hookmanager)) {
2285 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2286 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2287 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2289 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2291 $reshook = $hookmanager->executeHooks(
'pdf_getlineremisepercent', $parameters,
$object, $action);
2293 if (!empty($hookmanager->resPrint)) {
2294 $result .= $hookmanager->resPrint;
2297 if (empty($reshook)) {
2298 if (
$object->lines[$i]->special_code == 3) {
2301 if (empty($hidedetails) || $hidedetails > 1) {
2320 if (empty($hookmanager)) {
2321 global $hookmanager;
2328 if (is_object($hookmanager)) {
2329 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2330 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2331 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2333 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2335 $reshook = $hookmanager->executeHooks(
'pdf_getlineprogress', $parameters,
$object, $action);
2337 if (!empty($hookmanager->resPrint)) {
2338 return $hookmanager->resPrint;
2341 if (empty($reshook)) {
2342 if (
$object->lines[$i]->special_code == 3) {
2345 if (empty($hidedetails) || $hidedetails > 1) {
2348 if (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2349 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2351 $result = round(
$object->lines[$i]->situation_percent - $prev_progress, 1).
'%';
2353 $result = round(
$object->lines[$i]->situation_percent, 1).
'%';
2371 global $conf, $hookmanager;
2381 if (is_object($hookmanager)) {
2382 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2383 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2384 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2386 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code,
'sign' => $sign);
2388 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalexcltax', $parameters,
$object, $action);
2390 if (!empty($hookmanager->resPrint)) {
2391 $result .= $hookmanager->resPrint;
2394 if (empty($reshook)) {
2395 if (!empty(
$object->lines[$i]) &&
$object->lines[$i]->special_code == 3) {
2396 $result .= $outputlangs->transnoentities(
"Option");
2397 } elseif (empty($hidedetails) || $hidedetails > 1) {
2398 $total_ht = (isModEnabled(
"multicurrency") &&
$object->multicurrency_tx != 1 ?
$object->lines[$i]->multicurrency_total_ht :
$object->lines[$i]->total_ht);
2399 if (!empty(
$object->lines[$i]->situation_percent) &&
$object->lines[$i]->situation_percent > 0) {
2403 if (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2404 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2405 $progress = (
$object->lines[$i]->situation_percent - $prev_progress) / 100;
2407 $result .=
price($sign * ($total_ht / (
$object->lines[$i]->situation_percent / 100)) * $progress, 0, $outputlangs);
2409 $result .=
price($sign * $total_ht, 0, $outputlangs);
2427 global $hookmanager, $conf;
2437 if (is_object($hookmanager)) {
2438 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2439 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2440 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2442 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2444 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalwithtax', $parameters,
$object, $action);
2446 if (!empty($hookmanager->resPrint)) {
2447 $result .= $hookmanager->resPrint;
2450 if (empty($reshook)) {
2451 if (
$object->lines[$i]->special_code == 3) {
2452 $result .= $outputlangs->transnoentities(
"Option");
2453 } elseif (empty($hidedetails) || $hidedetails > 1) {
2454 $total_ttc = (isModEnabled(
"multicurrency") &&
$object->multicurrency_tx != 1 ?
$object->lines[$i]->multicurrency_total_ttc :
$object->lines[$i]->total_ttc);
2455 if (isset(
$object->lines[$i]->situation_percent) &&
$object->lines[$i]->situation_percent > 0) {
2459 if (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2460 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2461 $progress = (
$object->lines[$i]->situation_percent - $prev_progress) / 100;
2463 $result .=
price($sign * ($total_ttc / (
$object->lines[$i]->situation_percent / 100)) * $progress, 0, $outputlangs);
2465 $result .=
price($sign * $total_ttc, 0, $outputlangs);
2482 global $db, $hookmanager;
2484 $linkedobjects = array();
2488 foreach (
$object->linkedObjects as $objecttype => $objects) {
2489 if ($objecttype ==
'facture') {
2491 } elseif ($objecttype ==
'propal' || $objecttype ==
'supplier_proposal') {
2492 $outputlangs->load(
'propal');
2494 foreach ($objects as $elementobject) {
2495 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefProposal");
2496 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2497 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DatePropal");
2498 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
2500 } elseif ($objecttype ==
'commande' || $objecttype ==
'supplier_order') {
2501 $outputlangs->load(
'orders');
2505 foreach ($objects as $elementobject) {
2506 $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.
')').
' ');
2509 } elseif (count($objects) == 1) {
2510 $elementobject = array_shift($objects);
2511 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder");
2512 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref).(!empty($elementobject->ref_client) ?
' ('.$elementobject->ref_client.
')' :
'').(!empty($elementobject->ref_supplier) ?
' ('.$elementobject->ref_supplier.
')' :
'');
2513 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"OrderDate");
2514 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
2516 } elseif ($objecttype ==
'contrat') {
2517 $outputlangs->load(
'contracts');
2518 foreach ($objects as $elementobject) {
2519 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefContract");
2520 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2521 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DateContract");
2522 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date_contrat,
'day',
'', $outputlangs);
2524 } elseif ($objecttype ==
'fichinter') {
2525 $outputlangs->load(
'interventions');
2526 foreach ($objects as $elementobject) {
2527 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"InterRef");
2528 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2529 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"InterDate");
2530 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->datec,
'day',
'', $outputlangs);
2532 } elseif ($objecttype ==
'shipping') {
2533 $outputlangs->loadLangs(array(
"orders",
"sendings"));
2535 if (count($objects) > 1) {
2537 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
2538 $object->note_public =
dol_concatdesc(
$object->note_public, $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending").
' :');
2543 foreach ($objects as $elementobject) {
2544 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
2545 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
2546 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
2547 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2549 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
2556 if (! is_object($order)) {
2559 $object->note_public =
dol_concatdesc(
$object->note_public, $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
''));
2563 } elseif (count($objects) == 1) {
2564 $elementobject = array_shift($objects);
2567 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
2568 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
2569 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
2570 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2572 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
2579 if (! is_object($order)) {
2580 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefSending");
2581 if (empty($linkedobjects[$objecttype][
'ref_value'])) {
2582 $linkedobjects[$objecttype][
'ref_value'] =
'';
2584 $linkedobjects[$objecttype][
'ref_value'] .=
' / ';
2586 $linkedobjects[$objecttype][
'ref_value'] .= $outputlangs->transnoentities($elementobject->ref);
2587 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
2589 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending");
2590 if (empty($linkedobjects[$objecttype][
'ref_value'])) {
2591 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
'');
2593 $linkedobjects[$objecttype][
'ref_value'] .=
' / '.$outputlangs->transnoentities($elementobject->ref);
2594 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
2601 if (is_object($hookmanager)) {
2602 $parameters = array(
'linkedobjects' => $linkedobjects,
'outputlangs' => $outputlangs);
2604 $hookmanager->executeHooks(
'pdf_getLinkedObjects', $parameters,
$object, $action);
2605 if (!empty($hookmanager->resArray)) {
2606 $linkedobjects = $hookmanager->resArray;
2610 return $linkedobjects;
2625 $maxheight =
getDolGlobalInt(
'MAIN_DOCUMENTS_WITH_PICTURE_HEIGHT', 32);
2626 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
2630 if ($tmp[
'height']) {
2631 $width = (int) round($maxheight * $tmp[
'width'] / $tmp[
'height']);
2632 if ($width > $maxwidth) {
2634 $height = (int) round($maxwidth * $tmp[
'height'] / $tmp[
'width']);
2636 $height = $maxheight;
2639 return array(
'width' => $width,
'height' => $height);
2653 global $conf, $hookmanager;
2659 if (
$object->lines[$i]->special_code == 3) {
2660 return $outputlangs->transnoentities(
"Option");
2662 if (is_object($hookmanager)) {
2663 $special_code =
$object->lines[$i]->special_code;
2664 if (!empty(
$object->lines[$i]->fk_parent_line)) {
2665 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2668 $parameters = array(
2670 'outputlangs' => $outputlangs,
2671 'hidedetails' => $hidedetails,
2672 'special_code' => $special_code
2677 if ($hookmanager->executeHooks(
'getlinetotalremise', $parameters,
$object, $action) > 0) {
2678 if (isset($hookmanager->resArray[
'linetotalremise'])) {
2679 return $hookmanager->resArray[
'linetotalremise'];
2681 return (
float) $hookmanager->resPrint;
2686 if (empty($hidedetails) || $hidedetails > 1) {
2687 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(Translate $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 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_getPDFFontSize($outputlangs)
Return font size to use for PDF generation.
pdf_getFormat(Translate $outputlangs=null, $mode='setup')
Return array with format properties of default PDF format.
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.