39 include_once DOL_DOCUMENT_ROOT.
'/core/lib/signature.lib.php';
49 global $langs, $conf, $user;
54 $head[$h][0] = DOL_URL_ROOT.
'/admin/pdf.php';
55 $head[$h][1] = $langs->trans(
"Parameters");
56 $head[$h][2] =
'general';
66 $head[$h][0] = DOL_URL_ROOT.
'/admin/pdf_other.php';
67 $head[$h][1] = $langs->trans(
"Others");
68 $head[$h][2] =
'other';
87 global $conf, $db, $langs;
89 dol_syslog(
"pdf_getFormat Get paper format with mode=".$mode.
" MAIN_PDF_FORMAT=".(empty($conf->global->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'));
96 if ($mode ==
'auto' || empty($conf->global->MAIN_PDF_FORMAT) || $conf->global->MAIN_PDF_FORMAT ==
'auto') {
97 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
100 $pdfformat = $conf->global->MAIN_PDF_FORMAT;
103 $sql =
"SELECT code, label, width, height, unit FROM ".MAIN_DB_PREFIX.
"c_paper_format";
104 $sql .=
" WHERE code = '".$db->escape($pdfformat).
"'";
105 $resql = $db->query(
$sql);
107 $obj = $db->fetch_object($resql);
109 $width = (int) $obj->width;
110 $height = (
int) $obj->height;
116 return array(
'width'=>$width,
'height'=>$height,
'unit'=>$unit);
132 if (!defined(
'K_TCPDF_EXTERNAL_CONFIG')) {
133 define(
'K_TCPDF_EXTERNAL_CONFIG', 1);
134 define(
'K_PATH_CACHE', DOL_DATA_ROOT.
'/admin/temp/');
135 define(
'K_PATH_URL_CACHE', DOL_DATA_ROOT.
'/admin/temp/');
137 define(
'K_BLANK_IMAGE',
'_blank.png');
138 define(
'PDF_PAGE_FORMAT',
'A4');
139 define(
'PDF_PAGE_ORIENTATION',
'P');
140 define(
'PDF_CREATOR',
'TCPDF');
141 define(
'PDF_AUTHOR',
'TCPDF');
142 define(
'PDF_HEADER_TITLE',
'TCPDF Example');
143 define(
'PDF_HEADER_STRING',
"by Dolibarr ERP CRM");
144 define(
'PDF_UNIT',
'mm');
145 define(
'PDF_MARGIN_HEADER', 5);
146 define(
'PDF_MARGIN_FOOTER', 10);
147 define(
'PDF_MARGIN_TOP', 27);
148 define(
'PDF_MARGIN_BOTTOM', 25);
149 define(
'PDF_MARGIN_LEFT', 15);
150 define(
'PDF_MARGIN_RIGHT', 15);
151 define(
'PDF_FONT_NAME_MAIN',
'helvetica');
152 define(
'PDF_FONT_SIZE_MAIN', 10);
153 define(
'PDF_FONT_NAME_DATA',
'helvetica');
154 define(
'PDF_FONT_SIZE_DATA', 8);
155 define(
'PDF_FONT_MONOSPACED',
'courier');
156 define(
'PDF_IMAGE_SCALE_RATIO', 1.25);
157 define(
'HEAD_MAGNIFICATION', 1.1);
158 define(
'K_CELL_HEIGHT_RATIO', 1.25);
159 define(
'K_TITLE_MAGNIFICATION', 1.3);
160 define(
'K_SMALL_RATIO', 2 / 3);
161 define(
'K_THAI_TOPCHARS',
true);
162 define(
'K_TCPDF_CALLS_IN_HTML',
true);
163 if (!empty($conf->global->TCPDF_THROW_ERRORS_INSTEAD_OF_DIE)) {
164 define(
'K_TCPDF_THROW_EXCEPTION_ERROR',
true);
166 define(
'K_TCPDF_THROW_EXCEPTION_ERROR',
false);
171 require_once TCPDF_PATH.
'tcpdf.php';
174 if (empty($conf->global->MAIN_DISABLE_TCPDI)) {
175 require_once TCPDI_PATH.
'tcpdi.php';
183 if (!empty($conf->global->PDF_USE_A)) {
184 $pdfa = $conf->global->PDF_USE_A;
187 if (class_exists(
'TCPDI')) {
188 $pdf =
new TCPDI($pagetype, $metric, $format,
true,
'UTF-8',
false, $pdfa);
190 $pdf =
new TCPDF($pagetype, $metric, $format,
true,
'UTF-8',
false, $pdfa);
194 if (!empty($conf->global->PDF_SECURITY_ENCRYPTION)) {
208 $pdfrights = (!empty($conf->global->PDF_SECURITY_ENCRYPTION_RIGHTS) ?json_decode($conf->global->PDF_SECURITY_ENCRYPTION_RIGHTS,
true) : array(
'modify',
'copy'));
211 $pdfuserpass = (!empty($conf->global->PDF_SECURITY_ENCRYPTION_USERPASS) ? $conf->global->PDF_SECURITY_ENCRYPTION_USERPASS :
'');
214 $pdfownerpass = (!empty($conf->global->PDF_SECURITY_ENCRYPTION_OWNERPASS) ? $conf->global->PDF_SECURITY_ENCRYPTION_OWNERPASS :
null);
217 $encstrength = (!empty($conf->global->PDF_SECURITY_ENCRYPTION_STRENGTH) ? $conf->global->PDF_SECURITY_ENCRYPTION_STRENGTH : 0);
221 $pubkeys = (!empty($conf->global->PDF_SECURITY_ENCRYPTION_PUBKEYS) ?json_decode($conf->global->PDF_SECURITY_ENCRYPTION_PUBKEYS,
true) :
null);
223 $pdf->SetProtection($pdfrights, $pdfuserpass, $pdfownerpass, $encstrength, $pubkeys);
237 require_once TCPDF_PATH.
'tcpdf_parser.php';
239 $isencrypted =
false;
241 $content = file_get_contents($pathoffile);
244 @($parser =
new TCPDF_PARSER(ltrim($content)));
245 list($xref, $data) = $parser->getParsedData();
249 if (isset($xref[
'trailer'][
'encrypt'])) {
270 if (!empty($conf->global->MAIN_PDF_FORCE_FONT)) {
271 return $conf->global->MAIN_PDF_FORCE_FONT;
275 if (class_exists(
'TCPDF')) {
276 if ($outputlangs->trans(
'FONTFORPDF') !=
'FONTFORPDF') {
277 $font = $outputlangs->trans(
'FONTFORPDF');
294 if (class_exists(
'TCPDF')) {
295 if ($outputlangs->trans(
'FONTSIZEFORPDF') !=
'FONTSIZEFORPDF') {
296 $size = (int) $outputlangs->trans(
'FONTSIZEFORPDF');
299 if (!empty($conf->global->MAIN_PDF_FORCE_FONT_SIZE)) {
300 $size = $conf->global->MAIN_PDF_FORCE_FONT_SIZE;
317 $height = (empty($conf->global->MAIN_DOCUMENTS_LOGO_HEIGHT) ? 20 : $conf->global->MAIN_DOCUMENTS_LOGO_HEIGHT);
319 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
321 if ($tmp[
'height']) {
322 $width = round($height * $tmp[
'width'] / $tmp[
'height']);
323 if ($width > $maxwidth) {
324 $height = $height * $maxwidth / $width;
342 $pdf->startTransaction();
344 $start_y = $pdf->GetY();
346 $start_page = $pdf->getPage();
348 $pdf->writeHTMLCell(0, 0, 0, $start_y, $htmlcontent, 0, 1,
false,
true,
'J',
true);
350 $end_y = $pdf->GetY();
351 $end_page = $pdf->getPage();
354 if ($end_page == $start_page) {
355 $height = $end_y - $start_y;
357 for ($page = $start_page; $page <= $end_page; ++$page) {
358 $pdf->setPage($page);
359 $tmpm = $pdf->getMargins();
360 $tMargin = $tmpm[
'top'];
361 if ($page == $start_page) {
363 $height = $pdf->getPageHeight() - $start_y - $pdf->getBreakMargin();
364 } elseif ($page == $end_page) {
366 $height = $end_y - $tMargin;
368 $height = $pdf->getPageHeight() - $tMargin - $pdf->getBreakMargin();
373 $pdf = $pdf->rollbackTransaction();
394 if ($thirdparty instanceof
Societe) {
395 $socname = $thirdparty->name;
396 if (($includealias ||
getDolGlobalInt(
'PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) && !empty($thirdparty->name_alias)) {
398 $socname = $thirdparty->name_alias.
" - ".$thirdparty->name;
400 $socname = $thirdparty->name.
" - ".$thirdparty->name_alias;
403 } elseif ($thirdparty instanceof
Contact) {
404 if ($thirdparty->socid > 0) {
405 $thirdparty->fetch_thirdparty();
406 $socname = $thirdparty->thirdparty->name;
407 if (($includealias ||
getDolGlobalInt(
'PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) && !empty($thirdparty->thirdparty->name_alias)) {
409 $socname = $thirdparty->thirdparty->name_alias.
" - ".$thirdparty->thirdparty->name;
411 $socname = $thirdparty->thirdparty->name.
" - ".$thirdparty->thirdparty->name_alias;
416 throw new InvalidArgumentException(
'Parameter 1 $thirdparty is not a Societe nor Contact');
419 return $outputlangs->convToOutputCharset($socname);
435 function pdf_build_address($outputlangs, $sourcecompany, $targetcompany =
'', $targetcontact =
'', $usecontact = 0, $mode =
'source', $object =
null)
437 global $conf, $hookmanager;
439 if ($mode ==
'source' && !is_object($sourcecompany)) {
442 if ($mode ==
'target' && !is_object($targetcompany)) {
446 if (!empty($sourcecompany->state_id) && empty($sourcecompany->state)) {
447 $sourcecompany->state =
getState($sourcecompany->state_id);
449 if (!empty($targetcompany->state_id) && empty($targetcompany->state)) {
450 $targetcompany->state =
getState($targetcompany->state_id);
455 if (is_object($hookmanager)) {
456 $parameters = array(
'sourcecompany' => &$sourcecompany,
'targetcompany' => &$targetcompany,
'targetcontact' => &$targetcontact,
'outputlangs' => $outputlangs,
'mode' => $mode,
'usecontact' => $usecontact);
458 $reshook = $hookmanager->executeHooks(
'pdf_build_address', $parameters, $object, $action);
459 $stringaddress .= $hookmanager->resPrint;
461 if (empty($reshook)) {
462 if ($mode ==
'source') {
464 if (isset($targetcompany->country_code) && !empty($sourcecompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
468 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($sourcecompany, $withCountry,
"\n", $outputlangs)).
"\n";
470 if (empty($conf->global->MAIN_PDF_DISABLESOURCEDETAILS)) {
472 if ($sourcecompany->phone) {
473 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"PhoneShort").
": ".$outputlangs->convToOutputCharset($sourcecompany->phone);
476 if ($sourcecompany->fax) {
477 $stringaddress .= ($stringaddress ? ($sourcecompany->phone ?
" - " :
"\n") :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($sourcecompany->fax);
480 if ($sourcecompany->email) {
481 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($sourcecompany->email);
484 if ($sourcecompany->url) {
485 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($sourcecompany->url);
489 if (!empty($conf->global->MAIN_TVAINTRA_IN_SOURCE_ADDRESS)) {
490 if ($sourcecompany->tva_intra) {
491 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($sourcecompany->tva_intra);
496 if (!empty($conf->global->MAIN_PROFID1_IN_SOURCE_ADDRESS) && !empty($sourcecompany->idprof1)) {
497 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $sourcecompany->country_code);
498 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
501 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof1);
503 if (!empty($conf->global->MAIN_PROFID2_IN_SOURCE_ADDRESS) && !empty($sourcecompany->idprof2)) {
504 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $sourcecompany->country_code);
505 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
508 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof2);
510 if (!empty($conf->global->MAIN_PROFID3_IN_SOURCE_ADDRESS) && !empty($sourcecompany->idprof3)) {
511 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $sourcecompany->country_code);
512 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
515 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof3);
517 if (!empty($conf->global->MAIN_PROFID4_IN_SOURCE_ADDRESS) && !empty($sourcecompany->idprof4)) {
518 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $sourcecompany->country_code);
519 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
522 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof4);
524 if (!empty($conf->global->MAIN_PROFID5_IN_SOURCE_ADDRESS) && !empty($sourcecompany->idprof5)) {
525 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $sourcecompany->country_code);
526 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
529 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof5);
531 if (!empty($conf->global->MAIN_PROFID6_IN_SOURCE_ADDRESS) && !empty($sourcecompany->idprof6)) {
532 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $sourcecompany->country_code);
533 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
536 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof6);
538 if (!empty($conf->global->PDF_ADD_MORE_AFTER_SOURCE_ADDRESS)) {
539 $stringaddress .= ($stringaddress ?
"\n" :
'').$conf->global->PDF_ADD_MORE_AFTER_SOURCE_ADDRESS;
543 if ($mode ==
'target' || preg_match(
'/targetwithdetails/', $mode)) {
545 if (is_object($targetcontact)) {
546 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($targetcontact->getFullName($outputlangs, 1));
548 if (!empty($targetcontact->address)) {
549 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcontact)).
"\n";
551 $companytouseforaddress = $targetcompany;
554 if ($targetcontact->socid > 0 && $targetcontact->socid != $targetcompany->id) {
555 $targetcontact->fetch_thirdparty();
556 $companytouseforaddress = $targetcontact->thirdparty;
559 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($companytouseforaddress)).
"\n";
562 if (!empty($targetcontact->country_code) && $targetcontact->country_code != $sourcecompany->country_code) {
563 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcontact->country_code));
564 } elseif (empty($targetcontact->country_code) && !empty($targetcompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
565 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
568 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || preg_match(
'/targetwithdetails/', $mode)) {
570 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
571 if (!empty($targetcontact->phone_pro) || !empty($targetcontact->phone_mobile)) {
572 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
574 if (!empty($targetcontact->phone_pro)) {
575 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_pro);
577 if (!empty($targetcontact->phone_pro) && !empty($targetcontact->phone_mobile)) {
578 $stringaddress .=
" / ";
580 if (!empty($targetcontact->phone_mobile)) {
581 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_mobile);
585 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
586 if ($targetcontact->fax) {
587 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcontact->fax);
591 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
592 if ($targetcontact->email) {
593 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcontact->email);
597 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
598 if ($targetcontact->url) {
599 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($targetcontact->url);
605 if (is_object($targetcompany)) {
606 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcompany));
608 if (!empty($targetcompany->country_code) && $targetcompany->country_code != $sourcecompany->country_code) {
609 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
611 $stringaddress .= ($stringaddress ?
"\n" :
'');
614 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || preg_match(
'/targetwithdetails/', $mode)) {
616 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
617 if (!empty($targetcompany->phone)) {
618 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
620 if (!empty($targetcompany->phone)) {
621 $stringaddress .= $outputlangs->convToOutputCharset($targetcompany->phone);
625 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
626 if ($targetcompany->fax) {
627 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcompany->fax);
631 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
632 if ($targetcompany->email) {
633 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcompany->email);
637 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
638 if ($targetcompany->url) {
639 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($targetcompany->url);
647 if (empty($conf->global->MAIN_TVAINTRA_NOT_IN_ADDRESS)) {
648 if ($targetcompany->tva_intra) {
649 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($targetcompany->tva_intra);
654 if (!empty($conf->global->MAIN_PROFID1_IN_ADDRESS) && !empty($targetcompany->idprof1)) {
655 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $targetcompany->country_code);
656 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
659 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof1);
661 if (!empty($conf->global->MAIN_PROFID2_IN_ADDRESS) && !empty($targetcompany->idprof2)) {
662 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $targetcompany->country_code);
663 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
666 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof2);
668 if (!empty($conf->global->MAIN_PROFID3_IN_ADDRESS) && !empty($targetcompany->idprof3)) {
669 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $targetcompany->country_code);
670 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
673 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof3);
675 if (!empty($conf->global->MAIN_PROFID4_IN_ADDRESS) && !empty($targetcompany->idprof4)) {
676 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $targetcompany->country_code);
677 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
680 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof4);
682 if (!empty($conf->global->MAIN_PROFID5_IN_ADDRESS) && !empty($targetcompany->idprof5)) {
683 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $targetcompany->country_code);
684 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
687 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof5);
689 if (!empty($conf->global->MAIN_PROFID6_IN_ADDRESS) && !empty($targetcompany->idprof6)) {
690 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $targetcompany->country_code);
691 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
694 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof6);
698 if (!empty($conf->global->MAIN_PUBLIC_NOTE_IN_ADDRESS)) {
699 if ($mode ==
'source' && !empty($sourcecompany->note_public)) {
700 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($sourcecompany->note_public);
702 if (($mode ==
'target' || preg_match(
'/targetwithdetails/', $mode)) && !empty($targetcompany->note_public)) {
703 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($targetcompany->note_public);
709 return $stringaddress;
726 if (!empty($conf->global->MAIN_USE_BACKGROUND_ON_PDF) && ($conf->global->MAIN_USE_BACKGROUND_ON_PDF !=
'-1')) {
727 $filepath = $conf->mycompany->dir_output.
'/logos/'.$conf->global->MAIN_USE_BACKGROUND_ON_PDF;
728 if (file_exists($filepath)) {
729 $pdf->SetAutoPageBreak(0, 0);
730 if (
getDolGlobalString(
'MAIN_USE_BACKGROUND_ON_PDF_ALPHA')) { $pdf->SetAlpha($conf->global->MAIN_USE_BACKGROUND_ON_PDF_ALPHA); }
731 $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);
734 $pdf->SetAutoPageBreak(1, 0);
756 $substitutionarray[
'__FROM_NAME__'] =
'__FROM_NAME__';
757 $substitutionarray[
'__FROM_EMAIL__'] =
'__FROM_EMAIL__';
758 return $substitutionarray;
775 global $langs, $mysoc, $user;
780 } elseif ($unit ==
'mm') {
782 } elseif ($unit ==
'cm') {
784 } elseif ($unit ==
'in') {
792 $text = $outputlangs->convToOutputCharset($text);
794 $savx = $pdf->getX();
795 $savy = $pdf->getY();
797 $watermark_angle = atan($h / $w) / 2;
798 $watermark_x_pos = 0;
799 $watermark_y_pos = $h / 3;
800 $watermark_x = $w / 2;
801 $watermark_y = $h / 3;
802 $pdf->SetFont(
'',
'B', 40);
803 $pdf->SetTextColor(255, 192, 203);
805 $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));
807 $pdf->SetXY($watermark_x_pos, $watermark_y_pos);
808 $pdf->Cell($w - 20, 25, $outputlangs->convToOutputCharset($text),
"", 2,
"C", 0);
812 $pdf->SetXY($savx, $savy);
828 function pdf_bank(&$pdf, $outputlangs, $curx, $cury, $account, $onlynumber = 0, $default_font_size = 10)
830 global $mysoc, $conf;
832 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formbank.class.php';
834 $diffsizetitle = (empty($conf->global->PDF_DIFFSIZE_TITLE) ? 3 : $conf->global->PDF_DIFFSIZE_TITLE);
835 $diffsizecontent = (empty($conf->global->PDF_DIFFSIZE_CONTENT) ? 4 : $conf->global->PDF_DIFFSIZE_CONTENT);
836 $pdf->SetXY($curx, $cury);
838 if (empty($onlynumber)) {
839 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizetitle);
840 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
'PaymentByTransferOnThisBankAccount').
':', 0,
'L', 0);
844 $outputlangs->load(
"banks");
847 $bickey =
"BICNumber";
848 if ($account->getCountryCode() ==
'IN') {
853 $usedetailedbban = $account->useDetailedBBAN();
856 if ($usedetailedbban) {
859 if (empty($onlynumber)) {
860 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
861 $pdf->SetXY($curx, $cury);
862 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L', 0);
866 if (empty($conf->global->PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN)) {
872 if (empty($onlynumber)) {
873 $pdf->line($curx + 1, $cury + 1, $curx + 1, $cury + 6);
877 foreach ($account->getFieldsToShow() as $val) {
878 $pdf->SetXY($curx, $cury + 4);
879 $pdf->SetFont(
'',
'', $default_font_size - 3);
881 if ($val ==
'BankCode') {
884 $content = $account->code_banque;
885 } elseif ($val ==
'DeskCode') {
888 $content = $account->code_guichet;
889 } elseif ($val ==
'BankAccountNumber') {
892 $content = $account->number;
893 } elseif ($val ==
'BankAccountNumberKey') {
896 $content = $account->cle_rib;
897 } elseif ($val ==
'IBAN' || $val ==
'BIC') {
902 dol_print_error($account->db,
'Unexpected value for getFieldsToShow: '.$val);
906 $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($content), 0,
'C', 0);
907 $pdf->SetXY($curx, $cury + 1);
909 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
910 $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities($val), 0,
'C', 0);
911 if (empty($onlynumber)) {
912 $pdf->line($curx, $cury + 1, $curx, $cury + 7);
920 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
921 $pdf->SetXY($curx, $cury);
922 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L', 0);
925 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
926 $pdf->SetXY($curx, $cury);
927 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"BankAccountNumber").
': '.$outputlangs->convToOutputCharset($account->number), 0,
'L', 0);
930 if ($diffsizecontent <= 2) {
935 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
937 if (empty($onlynumber) && !empty($account->domiciliation)) {
938 $pdf->SetXY($curx, $cury);
939 $val = $outputlangs->transnoentities(
"Residence").
': '.$outputlangs->convToOutputCharset($account->domiciliation);
940 $pdf->MultiCell(100, 3, $val, 0,
'L', 0);
943 $tmpy = $pdf->getStringHeight(100, $val);
947 if (!empty($account->proprio)) {
948 $pdf->SetXY($curx, $cury);
949 $val = $outputlangs->transnoentities(
"BankAccountOwner").
': '.$outputlangs->convToOutputCharset($account->proprio);
950 $pdf->MultiCell(100, 3, $val, 0,
'L', 0);
951 $tmpy = $pdf->getStringHeight(100, $val);
953 } elseif (!$usedetailedbban) {
960 if (!empty($account->iban)) {
962 $ibanDisplay_temp = str_replace(
' ',
'', $outputlangs->convToOutputCharset($account->iban));
965 $nbIbanDisplay_temp =
dol_strlen($ibanDisplay_temp);
966 for ($i = 0; $i < $nbIbanDisplay_temp; $i++) {
967 $ibanDisplay .= $ibanDisplay_temp[$i];
968 if ($i % 4 == 3 && $i > 0) {
973 $pdf->SetFont(
'',
'B', $default_font_size - 3);
974 $pdf->SetXY($curx, $cury);
975 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($ibankey).
': '.$ibanDisplay, 0,
'L', 0);
979 if (!empty($account->bic)) {
980 $pdf->SetFont(
'',
'B', $default_font_size - 3);
981 $pdf->SetXY($curx, $cury);
982 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($bickey).
': '.$outputlangs->convToOutputCharset($account->bic), 0,
'L', 0);
1005 function pdf_pagefoot(&$pdf, $outputlangs, $paramfreetext, $fromcompany, $marge_basse, $marge_gauche, $page_hauteur, $object, $showdetails = 0, $hidefreetext = 0, $page_largeur = 0, $watermark =
'')
1007 global $conf, $user, $mysoc, $hookmanager;
1009 $outputlangs->load(
"dict");
1013 $dims = $pdf->getPageDimensions();
1016 if (empty($hidefreetext) && !empty($conf->global->$paramfreetext)) {
1019 $substitutionarray[
'__FROM_NAME__'] = $fromcompany->name;
1020 $substitutionarray[
'__FROM_EMAIL__'] = $fromcompany->email;
1022 $newfreetext =
make_substitutions($conf->global->$paramfreetext, $substitutionarray, $outputlangs);
1028 $newfreetext = preg_replace(
'/(<img.*src=")[^\"]*viewimage\.php[^\"]*modulepart=medias[^\"]*file=([^\"]*)("[^\/]*\/>)/',
'\1file:/'.DOL_DATA_ROOT.
'/medias/\2\3', $newfreetext);
1030 $line .= $outputlangs->convToOutputCharset($newfreetext);
1039 if ($showdetails == 1 || $showdetails == 3) {
1041 if ($fromcompany->name) {
1042 $line1 .= ($line1 ?
" - " :
"").$outputlangs->transnoentities(
"RegisteredOffice").
": ".$fromcompany->name;
1045 if ($fromcompany->address) {
1046 $line1 .= ($line1 ?
" - " :
"").str_replace(
"\n",
", ", $fromcompany->address);
1049 if ($fromcompany->zip) {
1050 $line1 .= ($line1 ?
" - " :
"").$fromcompany->zip;
1053 if ($fromcompany->town) {
1054 $line1 .= ($line1 ?
" " :
"").$fromcompany->town;
1057 if ($fromcompany->country) {
1058 $line1 .= ($line1 ?
", " :
"").$fromcompany->country;
1061 if ($fromcompany->phone) {
1062 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Phone").
": ".$fromcompany->phone;
1065 if ($fromcompany->fax) {
1066 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Fax").
": ".$fromcompany->fax;
1070 if ($fromcompany->url) {
1071 $line2 .= ($line2 ?
" - " :
"").$fromcompany->url;
1074 if ($fromcompany->email) {
1075 $line2 .= ($line2 ?
" - " :
"").$fromcompany->email;
1078 if ($showdetails == 2 || $showdetails == 3 || (!empty($fromcompany->country_code) && $fromcompany->country_code ==
'DE')) {
1080 if ($fromcompany->managers) {
1081 $line2 .= ($line2 ?
" - " :
"").$fromcompany->managers;
1087 if (!empty($fromcompany->forme_juridique_code) && $fromcompany->forme_juridique_code) {
1088 $line3 .= ($line3 ?
" - " :
"").$outputlangs->convToOutputCharset(
getFormeJuridiqueLabel($fromcompany->forme_juridique_code));
1091 if (!empty($fromcompany->capital)) {
1092 $tmpamounttoshow =
price2num($fromcompany->capital);
1093 if (is_numeric($tmpamounttoshow) && $tmpamounttoshow > 0) {
1094 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf",
price($tmpamounttoshow, 0, $outputlangs, 0, 0, 0, $conf->currency));
1095 } elseif (!empty($fromcompany->capital)) {
1096 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf", $fromcompany->capital, $outputlangs);
1100 if (!empty($fromcompany->idprof1) && $fromcompany->idprof1 && ($fromcompany->country_code !=
'FR' || !$fromcompany->idprof2)) {
1101 $field = $outputlangs->transcountrynoentities(
"ProfId1", $fromcompany->country_code);
1102 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1105 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof1);
1108 if (!empty($fromcompany->idprof2) && $fromcompany->idprof2) {
1109 $field = $outputlangs->transcountrynoentities(
"ProfId2", $fromcompany->country_code);
1110 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1113 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof2);
1118 if (!empty($fromcompany->idprof3) && $fromcompany->idprof3) {
1119 $field = $outputlangs->transcountrynoentities(
"ProfId3", $fromcompany->country_code);
1120 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1123 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof3);
1126 if (!empty($fromcompany->idprof4) && $fromcompany->idprof4) {
1127 $field = $outputlangs->transcountrynoentities(
"ProfId4", $fromcompany->country_code);
1128 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1131 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof4);
1134 if (!empty($fromcompany->idprof5) && $fromcompany->idprof5) {
1135 $field = $outputlangs->transcountrynoentities(
"ProfId5", $fromcompany->country_code);
1136 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1139 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof5);
1142 if (!empty($fromcompany->idprof6) && $fromcompany->idprof6) {
1143 $field = $outputlangs->transcountrynoentities(
"ProfId6", $fromcompany->country_code);
1144 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1147 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof6);
1150 if (!empty($fromcompany->tva_intra) && $fromcompany->tva_intra !=
'') {
1151 $line4 .= ($line4 ?
" - " :
"").$outputlangs->transnoentities(
"VATIntraShort").
": ".$outputlangs->convToOutputCharset($fromcompany->tva_intra);
1154 $pdf->SetFont(
'',
'', 7);
1155 $pdf->SetDrawColor(224, 224, 224);
1157 if (!empty($conf->global->PDF_FOOTER_TEXT_COLOR)) {
1158 list($r, $g, $b) = sscanf($conf->global->PDF_FOOTER_TEXT_COLOR,
'%d, %d, %d');
1159 $pdf->SetTextColor($r, $g, $b);
1163 $freetextheight = 0;
1166 if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) {
1169 if (!empty($conf->global->MAIN_USE_AUTOWRAP_ON_FREETEXT)) {
1173 $freetextheight = $pdf->getStringHeight($width, $line);
1181 if (is_object($hookmanager)) {
1182 $parameters = array(
'line1' => $line1,
'line2' => $line2,
'line3' => $line3,
'line4' => $line4,
'outputlangs'=>$outputlangs);
1184 $hookmanager->executeHooks(
'pdf_pagefoot', $parameters, $object, $action);
1185 if (!empty($hookmanager->resPrint) && $hidefreetext == 0) {
1186 $mycustomfooter = $hookmanager->resPrint;
1189 $marginwithfooter = $marge_basse + $freetextheight + $mycustomfooterheight;
1190 $posy = (
float) $marginwithfooter;
1194 list($r, $g, $b) = sscanf($conf->global->PDF_FOOTER_BACKGROUND_COLOR,
'%d, %d, %d');
1195 $pdf->SetAutoPageBreak(0, 0);
1196 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F',
'', $fill_color = array($r, $g, $b));
1197 $pdf->SetAutoPageBreak(1, 0);
1200 if (
getDolGlobalInt(
'PDF_FREETEXT_DISABLE_PAGEBREAK') === 1) { $pdf->SetAutoPageBreak(0, 0); }
1202 $pdf->SetXY($dims[
'lm'], -$posy);
1204 $pdf->MultiCell(0, 3, $line, 0, $align, 0);
1206 $pdf->writeHTMLCell($pdf->page_largeur - $pdf->margin_left - $pdf->margin_right, $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1208 $posy -= $freetextheight;
1210 if (
getDolGlobalInt(
'PDF_FREETEXT_DISABLE_PAGEBREAK') === 1) { $pdf->SetAutoPageBreak(1, 0); }
1216 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1226 if (
getDolGlobalInt(
'PDF_FOOTER_DISABLE_PAGEBREAK') === 1) { $pdf->SetAutoPageBreak(0, 0); }
1227 $pdf->writeHTMLCell($pdf->page_largeur - $pdf->margin_left - $pdf->margin_right, $mycustomfooterheight, $dims[
'lm'], $dims[
'hk'] - $posy,
dol_htmlentitiesbr($mycustomfooter, 1,
'UTF-8', 0));
1228 if (
getDolGlobalInt(
'PDF_FOOTER_DISABLE_PAGEBREAK') === 1) { $pdf->SetAutoPageBreak(1, 0); }
1230 $posy -= $mycustomfooterheight - 3;
1233 $marginwithfooter = $marge_basse + $freetextheight + (!empty($line1) ? 3 : 0) + (!empty($line2) ? 3 : 0) + (!empty($line3) ? 3 : 0) + (!empty($line4) ? 3 : 0);
1234 $posy = (
float) $marginwithfooter;
1238 list($r, $g, $b) = sscanf($conf->global->PDF_FOOTER_BACKGROUND_COLOR,
'%d, %d, %d');
1239 $pdf->SetAutoPageBreak(0, 0);
1240 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F',
'', $fill_color = array($r, $g, $b));
1241 $pdf->SetAutoPageBreak(1, 0);
1244 if (
getDolGlobalInt(
'PDF_FREETEXT_DISABLE_PAGEBREAK') === 1) { $pdf->SetAutoPageBreak(0, 0); }
1246 $pdf->SetXY($dims[
'lm'], -$posy);
1248 $pdf->MultiCell(0, 3, $line, 0, $align, 0);
1250 $pdf->writeHTMLCell($pdf->page_largeur - $pdf->margin_left - $pdf->margin_right, $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1252 $posy -= $freetextheight;
1254 if (
getDolGlobalInt(
'PDF_FREETEXT_DISABLE_PAGEBREAK') === 1) { $pdf->SetAutoPageBreak(1, 0); }
1262 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1272 if (!empty($line1)) {
1273 $pdf->SetFont(
'',
'B', 7);
1274 $pdf->SetXY($dims[
'lm'], -$posy);
1275 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line1, 0,
'C', 0);
1277 $pdf->SetFont(
'',
'', 7);
1280 if (!empty($line2)) {
1281 $pdf->SetFont(
'',
'B', 7);
1282 $pdf->SetXY($dims[
'lm'], -$posy);
1283 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line2, 0,
'C', 0);
1285 $pdf->SetFont(
'',
'', 7);
1288 if (!empty($line3)) {
1289 $pdf->SetXY($dims[
'lm'], -$posy);
1290 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line3, 0,
'C', 0);
1293 if (!empty($line4)) {
1295 $pdf->SetXY($dims[
'lm'], -$posy);
1296 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line4, 0,
'C', 0);
1303 $pdf->SetXY($dims[
'wk'] - $dims[
'rm'] - 18 -
getDolGlobalInt(
'PDF_FOOTER_PAGE_NUMBER_X', 0), -$posy -
getDolGlobalInt(
'PDF_FOOTER_PAGE_NUMBER_Y', 0));
1307 $pagination = $pdf->PageNo().
' / '.$pdf->getNumPages();
1308 $pdf->MultiCell(18, 2, $pagination, 0,
'R', 0);
1312 if (!empty($watermark)) {
1313 pdf_watermark($pdf, $outputlangs, $page_hauteur, $page_largeur,
'mm', $watermark);
1316 return $marginwithfooter;
1336 if (!empty($linkedobjects)) {
1337 foreach ($linkedobjects as $linkedobject) {
1338 $reftoshow = $linkedobject[
"ref_title"].
' : '.$linkedobject[
"ref_value"];
1339 if (!empty($linkedobject[
"date_value"])) {
1340 $reftoshow .=
' / '.$linkedobject[
"date_value"];
1344 $pdf->SetXY($posx, $posy);
1345 $pdf->SetFont(
'',
'', $default_font_size - 2);
1346 $pdf->MultiCell($w, $h, $reftoshow,
'', $align);
1350 return $pdf->getY();
1369 function pdf_writelinedesc(&$pdf, $object, $i, $outputlangs, $w, $h, $posx, $posy, $hideref = 0, $hidedesc = 0, $issupplierline = 0)
1371 global $db, $conf, $langs, $hookmanager;
1376 if (is_object($hookmanager)) {
1377 $special_code = empty($object->lines[$i]->special_code) ?
'' : $object->lines[$i]->special_code;
1378 if (!empty($object->lines[$i]->fk_parent_line)) {
1379 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1381 $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);
1383 $reshook = $hookmanager->executeHooks(
'pdf_writelinedesc', $parameters, $object, $action);
1385 if (!empty($hookmanager->resPrint)) {
1386 $result .= $hookmanager->resPrint;
1389 if (empty($reshook)) {
1390 $labelproductservice =
pdf_getlinedesc($object, $i, $outputlangs, $hideref, $hidedesc, $issupplierline);
1397 $labelproductservice = preg_replace(
'/(<img[^>]*src=")([^"]*)(&)([^"]*")/',
'\1\2&\4', $labelproductservice, -1, $nbrep);
1402 $pdf->writeHTMLCell($w, $h, $posx, $posy, $outputlangs->convToOutputCharset($labelproductservice), 0, 1,
false,
true,
'J',
true);
1403 $result .= $labelproductservice;
1419 function pdf_getlinedesc($object, $i, $outputlangs, $hideref = 0, $hidedesc = 0, $issupplierline = 0)
1421 global $db, $conf, $langs;
1423 $idprod = (!empty($object->lines[$i]->fk_product) ? $object->lines[$i]->fk_product :
false);
1424 $label = (!empty($object->lines[$i]->label) ? $object->lines[$i]->label : (!empty($object->lines[$i]->product_label) ? $object->lines[$i]->product_label :
''));
1425 $desc = (!empty($object->lines[$i]->desc) ? $object->lines[$i]->desc : (!empty($object->lines[$i]->description) ? $object->lines[$i]->description :
''));
1426 $ref_supplier = (!empty($object->lines[$i]->ref_supplier) ? $object->lines[$i]->ref_supplier : (!empty($object->lines[$i]->ref_fourn) ? $object->lines[$i]->ref_fourn :
''));
1427 $note = (!empty($object->lines[$i]->note) ? $object->lines[$i]->note :
'');
1428 $dbatch = (!empty($object->lines[$i]->detail_batch) ? $object->lines[$i]->detail_batch :
false);
1430 if ($issupplierline) {
1431 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
1434 include_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
1437 if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
1438 include_once DOL_DOCUMENT_ROOT .
'/product/class/productcustomerprice.class.php';
1443 $prodser->fetch($idprod);
1445 if (
getDolGlobalInt(
'MAIN_MULTILANGS') && ($outputlangs->defaultlang != $langs->defaultlang)) {
1446 $translatealsoifmodified = (!empty($conf->global->MAIN_MULTILANG_TRANSLATE_EVEN_IF_MODIFIED));
1454 $textwasnotmodified = ($label == $prodser->label);
1455 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"label"]) && ($textwasnotmodified || $translatealsoifmodified)) {
1456 $label = $prodser->multilangs[$outputlangs->defaultlang][
"label"];
1461 $textwasnotmodified =
false;
1465 $textwasnotmodified = ($desc == $prodser->description);
1467 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"description"]) && ($textwasnotmodified || $translatealsoifmodified)) {
1468 $desc = $prodser->multilangs[$outputlangs->defaultlang][
"description"];
1472 $textwasnotmodified = ($note == $prodser->note_public);
1473 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"other"]) && ($textwasnotmodified || $translatealsoifmodified)) {
1474 $note = $prodser->multilangs[$outputlangs->defaultlang][
"other"];
1477 } elseif (($object->element ==
'facture' || $object->element ==
'facturefourn') && preg_match(
'/^\(DEPOSIT\).+/', $desc)) {
1478 $desc = str_replace(
'(DEPOSIT)', $outputlangs->trans(
'Deposit'), $desc);
1481 if (empty($conf->global->PDF_HIDE_PRODUCT_LABEL_IN_SUPPLIER_LINES)) {
1483 $libelleproduitservice = $label;
1484 if (!empty($libelleproduitservice) && !empty($conf->global->PDF_BOLD_PRODUCT_LABEL)) {
1488 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1490 $libelleproduitservice =
'<b>'.$libelleproduitservice.
'</b>';
1496 if (!empty($conf->global->SHOW_SUBPRODUCT_REF_IN_PDF)) {
1497 $prodser->get_sousproduits_arbo();
1498 if (!empty($prodser->sousprods) && is_array($prodser->sousprods) && count($prodser->sousprods)) {
1499 $tmparrayofsubproducts = reset($prodser->sousprods);
1500 if (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF)) {
1501 foreach ($tmparrayofsubproducts as $subprodval) {
1502 $libelleproduitservice =
dol_concatdesc($libelleproduitservice,
" * ".$subprodval[3].
' ('.$subprodval[1].
')');
1505 foreach ($tmparrayofsubproducts as $subprodval) {
1506 $libelleproduitservice =
dol_concatdesc($libelleproduitservice,
" * ".$subprodval[5].(($subprodval[5] && $subprodval[3]) ?
' - ' :
'').$subprodval[3].
' ('.$subprodval[1].
')');
1513 if (!empty($desc) && ($desc != $label)) {
1514 if ($desc ==
'(CREDIT_NOTE)' && $object->lines[$i]->fk_remise_except) {
1516 $discount->fetch($object->lines[$i]->fk_remise_except);
1517 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
1518 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromCreditNote", $sourceref);
1519 } elseif ($desc ==
'(DEPOSIT)' && $object->lines[$i]->fk_remise_except) {
1521 $discount->fetch($object->lines[$i]->fk_remise_except);
1522 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
1523 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromDeposit", $sourceref);
1525 if (!empty($conf->global->INVOICE_ADD_DEPOSIT_DATE)) {
1526 $libelleproduitservice .=
' ('.dol_print_date($discount->datec,
'day',
'', $outputlangs).
')';
1528 } elseif ($desc ==
'(EXCESS RECEIVED)' && $object->lines[$i]->fk_remise_except) {
1530 $discount->fetch($object->lines[$i]->fk_remise_except);
1531 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessReceived", $discount->ref_facture_source);
1532 } elseif ($desc ==
'(EXCESS PAID)' && $object->lines[$i]->fk_remise_except) {
1534 $discount->fetch($object->lines[$i]->fk_remise_except);
1535 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessPaid", $discount->ref_invoice_supplier_source);
1539 if (!empty($object->element)) {
1540 $tmpkey =
'MAIN_DOCUMENTS_HIDE_DESCRIPTION_FOR_'.strtoupper($object->element);
1541 if (!empty($conf->global->$tmpkey)) {
1545 if (empty($hidedesc)) {
1546 if (!empty($conf->global->MAIN_DOCUMENTS_DESCRIPTION_FIRST)) {
1547 $libelleproduitservice =
dol_concatdesc($desc, $libelleproduitservice);
1549 if (!empty($conf->global->HIDE_LABEL_VARIANT_PDF) && $prodser->isVariant()) {
1550 $libelleproduitservice = $desc;
1552 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
1557 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
1563 $prefix_prodserv =
"";
1565 if (!empty($conf->global->PRODUCT_ADD_TYPE_IN_DOCUMENTS)) {
1566 if ($prodser->isService()) {
1567 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Service").
" ";
1569 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Product").
" ";
1573 if (empty($hideref)) {
1574 if ($issupplierline) {
1575 if (empty($conf->global->PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES)) {
1576 $ref_prodserv = $prodser->ref;
1577 if ($ref_supplier) {
1578 $ref_prodserv .= ($prodser->ref ?
' (' :
'').$outputlangs->transnoentitiesnoconv(
"SupplierRef").
' '.$ref_supplier.($prodser->ref ?
')' :
'');
1580 } elseif ($conf->global->PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES == 1) {
1581 $ref_prodserv = $ref_supplier;
1582 } elseif ($conf->global->PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES == 2) {
1583 $ref_prodserv = $ref_supplier.
' ('.$outputlangs->transnoentitiesnoconv(
"InternalRef").
' '.$prodser->ref.
')';
1586 $ref_prodserv = $prodser->ref;
1588 if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
1590 $filter = array(
'fk_product' => $idprod,
'fk_soc' => $object->socid);
1592 $nbCustomerPrices = $productCustomerPriceStatic->fetchAll(
'',
'', 1, 0, $filter);
1594 if ($nbCustomerPrices > 0) {
1595 $productCustomerPrice = $productCustomerPriceStatic->lines[0];
1597 if (!empty($productCustomerPrice->ref_customer)) {
1598 switch ($conf->global->PRODUIT_CUSTOMER_PRICES_PDF_REF_MODE) {
1600 $ref_prodserv = $productCustomerPrice->ref_customer;
1604 $ref_prodserv = $productCustomerPrice->ref_customer .
' (' . $outputlangs->transnoentitiesnoconv(
'InternalRef') .
' ' . $ref_prodserv .
')';
1608 $ref_prodserv = $ref_prodserv .
' (' . $outputlangs->transnoentitiesnoconv(
'RefCustomer') .
' ' . $productCustomerPrice->ref_customer .
')';
1615 if (!empty($libelleproduitservice) && !empty($ref_prodserv)) {
1616 $ref_prodserv .=
" - ";
1620 if (!empty($ref_prodserv) && !empty($conf->global->PDF_BOLD_PRODUCT_REF_AND_PERIOD)) {
1622 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1624 $ref_prodserv =
'<b>'.$ref_prodserv.
'</b>';
1627 $libelleproduitservice = $prefix_prodserv.$ref_prodserv.$libelleproduitservice;
1630 if (!empty($conf->global->CATEGORY_ADD_DESC_INTO_DOC) && $idprod &&
isModEnabled(
'categorie')) {
1631 include_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
1634 $tblcateg = $categstatic->containing($idprod, Categorie::TYPE_PRODUCT);
1635 foreach ($tblcateg as $cate) {
1637 $desccateg = $cate->description;
1639 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desccateg);
1644 if (!empty($object->lines[$i]->date_start) || !empty($object->lines[$i]->date_end)) {
1648 if ($object->lines[$i]->date_start && $object->lines[$i]->date_end) {
1649 $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)).
')';
1651 if ($object->lines[$i]->date_start && !$object->lines[$i]->date_end) {
1652 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateFrom',
dol_print_date($object->lines[$i]->date_start, $format,
false, $outputlangs)).
')';
1654 if (!$object->lines[$i]->date_start && $object->lines[$i]->date_end) {
1655 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateUntil',
dol_print_date($object->lines[$i]->date_end, $format,
false, $outputlangs)).
')';
1658 if (!empty($conf->global->PDF_BOLD_PRODUCT_REF_AND_PERIOD)) {
1660 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1662 $libelleproduitservice .=
'<br><b style="color:#333666;" ><em>'.$period.
'</em></b>';
1664 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $period);
1670 if (!empty($dbatch)) {
1675 include_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
1676 include_once DOL_DOCUMENT_ROOT.
'/product/class/productbatch.class.php';
1681 foreach ($dbatch as $detail) {
1683 if ($detail->eatby) {
1684 $dte[] = $outputlangs->transnoentitiesnoconv(
'printEatby',
dol_print_date($detail->eatby, $format,
false, $outputlangs));
1686 if ($detail->sellby) {
1687 $dte[] = $outputlangs->transnoentitiesnoconv(
'printSellby',
dol_print_date($detail->sellby, $format,
false, $outputlangs));
1689 if ($detail->batch) {
1690 $dte[] = $outputlangs->transnoentitiesnoconv(
'printBatch', $detail->batch);
1692 $dte[] = $outputlangs->transnoentitiesnoconv(
'printQty', $detail->qty);
1695 if ($object->element ==
'shipping' && $detail->fk_origin_stock > 0 &&
getDolGlobalInt(
'PRODUCTBATCH_SHOW_WAREHOUSE_ON_SHIPMENT')) {
1696 $resproductbatch = $tmpproductbatch->fetch($detail->fk_origin_stock);
1697 if ($resproductbatch > 0) {
1698 $reswarehouse = $tmpwarehouse->fetch($tmpproductbatch->warehouseid);
1699 if ($reswarehouse > 0) {
1700 $dte[] = $tmpwarehouse->ref;
1705 $libelleproduitservice .=
"__N__ ".implode(
" - ", $dte);
1715 $libelleproduitservice = preg_replace(
'/__N__/',
'<br>', $libelleproduitservice);
1717 $libelleproduitservice = preg_replace(
'/__N__/',
"\n", $libelleproduitservice);
1721 return $libelleproduitservice;
1735 global $hookmanager;
1740 if (is_object($hookmanager)) {
1741 $special_code = $object->lines[$i]->special_code;
1742 if (!empty($object->lines[$i]->fk_parent_line)) {
1743 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1745 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
1747 $reshook = $hookmanager->executeHooks(
'pdf_getlinenum', $parameters, $object, $action);
1748 $result .= $hookmanager->resPrint;
1750 if (empty($reshook)) {
1768 global $hookmanager;
1773 if (is_object($hookmanager)) {
1774 $special_code = $object->lines[$i]->special_code;
1775 if (!empty($object->lines[$i]->fk_parent_line)) {
1776 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1778 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
1780 $reshook = $hookmanager->executeHooks(
'pdf_getlineref', $parameters, $object, $action);
1781 $result .= $hookmanager->resPrint;
1783 if (empty($reshook)) {
1800 global $hookmanager;
1805 if (is_object($hookmanager)) {
1806 $special_code = $object->lines[$i]->special_code;
1807 if (!empty($object->lines[$i]->fk_parent_line)) {
1808 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1810 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
1812 $reshook = $hookmanager->executeHooks(
'pdf_getlineref_supplier', $parameters, $object, $action);
1813 $result .= $hookmanager->resPrint;
1815 if (empty($reshook)) {
1832 global $conf, $hookmanager, $mysoc;
1837 if (is_object($hookmanager)) {
1838 $special_code = $object->lines[$i]->special_code;
1839 if (!empty($object->lines[$i]->fk_parent_line)) {
1840 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1842 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
1844 $reshook = $hookmanager->executeHooks(
'pdf_getlinevatrate', $parameters, $object, $action);
1846 if (!empty($hookmanager->resPrint)) {
1847 $result .= $hookmanager->resPrint;
1850 if (empty($reshook)) {
1851 if (empty($hidedetails) || $hidedetails > 1) {
1854 $tmpresult .=
vatrate($object->lines[$i]->tva_tx, 0, $object->lines[$i]->info_bits, -1);
1855 if (empty($conf->global->MAIN_PDF_MAIN_HIDE_SECOND_TAX)) {
1856 if ($object->lines[$i]->total_localtax1 != 0) {
1857 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
1862 $tmpresult .=
vatrate(abs($object->lines[$i]->localtax1_tx), 0);
1865 if (empty($conf->global->MAIN_PDF_MAIN_HIDE_THIRD_TAX)) {
1866 if ($object->lines[$i]->total_localtax2 != 0) {
1867 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
1872 $tmpresult .=
vatrate(abs($object->lines[$i]->localtax2_tx), 0);
1877 $result .= $tmpresult;
1894 global $conf, $hookmanager;
1897 if (isset($object->type) && $object->type == 2 && !empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) {
1904 if (is_object($hookmanager)) {
1905 $special_code = $object->lines[$i]->special_code;
1906 if (!empty($object->lines[$i]->fk_parent_line)) {
1907 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1909 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
1911 $reshook = $hookmanager->executeHooks(
'pdf_getlineupexcltax', $parameters, $object, $action);
1913 if (!empty($hookmanager->resPrint)) {
1914 $result .= $hookmanager->resPrint;
1917 if (empty($reshook)) {
1918 if (empty($hidedetails) || $hidedetails > 1) {
1919 $subprice = (
isModEnabled(
"multicurrency") && $object->multicurrency_tx != 1 ? $object->lines[$i]->multicurrency_subprice : $object->lines[$i]->subprice);
1920 $result .=
price($sign * $subprice, 0, $outputlangs);
1937 global $hookmanager, $conf;
1940 if (isset($object->type) && $object->type == 2 && !empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) {
1947 if (is_object($hookmanager)) {
1948 $special_code = $object->lines[$i]->special_code;
1949 if (!empty($object->lines[$i]->fk_parent_line)) {
1950 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1952 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
1954 $reshook = $hookmanager->executeHooks(
'pdf_getlineupwithtax', $parameters, $object, $action);
1956 if (!empty($hookmanager->resPrint)) {
1957 $result .= $hookmanager->resPrint;
1960 if (empty($reshook)) {
1961 if (empty($hidedetails) || $hidedetails > 1) {
1962 $result .=
price($sign * (($object->lines[$i]->subprice) + ($object->lines[$i]->subprice) * ($object->lines[$i]->tva_tx) / 100), 0, $outputlangs);
1979 global $hookmanager;
1984 if (is_object($hookmanager)) {
1985 $special_code = $object->lines[$i]->special_code;
1986 if (!empty($object->lines[$i]->fk_parent_line)) {
1987 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1989 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
1991 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty', $parameters, $object, $action);
1993 if (!empty($hookmanager->resPrint)) {
1994 $result = $hookmanager->resPrint;
1997 if (empty($reshook)) {
1998 if ($object->lines[$i]->special_code == 3) {
2001 if (empty($hidedetails) || $hidedetails > 1) {
2002 $result .= $object->lines[$i]->qty;
2019 global $hookmanager;
2024 if (is_object($hookmanager)) {
2025 $special_code = $object->lines[$i]->special_code;
2026 if (!empty($object->lines[$i]->fk_parent_line)) {
2027 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2029 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
2031 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_asked', $parameters, $object, $action);
2033 if (!empty($hookmanager->resPrint)) {
2034 $result .= $hookmanager->resPrint;
2037 if (empty($reshook)) {
2038 if ($object->lines[$i]->special_code == 3) {
2041 if (empty($hidedetails) || $hidedetails > 1) {
2042 $result .= $object->lines[$i]->qty_asked;
2059 global $hookmanager;
2064 if (is_object($hookmanager)) {
2065 $special_code = $object->lines[$i]->special_code;
2066 if (!empty($object->lines[$i]->fk_parent_line)) {
2067 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2069 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
2071 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_shipped', $parameters, $object, $action);
2073 if (!empty($hookmanager->resPrint)) {
2074 $result .= $hookmanager->resPrint;
2077 if (empty($reshook)) {
2078 if ($object->lines[$i]->special_code == 3) {
2081 if (empty($hidedetails) || $hidedetails > 1) {
2082 $result .= $object->lines[$i]->qty_shipped;
2099 global $hookmanager;
2104 if (is_object($hookmanager)) {
2105 $special_code = $object->lines[$i]->special_code;
2106 if (!empty($object->lines[$i]->fk_parent_line)) {
2107 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2109 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
2111 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_keeptoship', $parameters, $object, $action);
2113 if (!empty($hookmanager->resPrint)) {
2114 $result .= $hookmanager->resPrint;
2117 if (empty($reshook)) {
2118 if ($object->lines[$i]->special_code == 3) {
2121 if (empty($hidedetails) || $hidedetails > 1) {
2122 $result .= ($object->lines[$i]->qty_asked - $object->lines[$i]->qty_shipped);
2138 function pdf_getlineunit($object, $i, $outputlangs, $hidedetails = 0, $hookmanager =
false)
2145 if (is_object($hookmanager)) {
2146 $special_code = $object->lines[$i]->special_code;
2147 if (!empty($object->lines[$i]->fk_parent_line)) {
2148 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2150 $parameters = array(
2152 'outputlangs' => $outputlangs,
2153 'hidedetails' => $hidedetails,
2154 'special_code' => $special_code
2157 $reshook = $hookmanager->executeHooks(
'pdf_getlineunit', $parameters, $object, $action);
2159 if (!empty($hookmanager->resPrint)) {
2160 $result .= $hookmanager->resPrint;
2163 if (empty($reshook)) {
2164 if (empty($hidedetails) || $hidedetails > 1) {
2165 $result .= $langs->transnoentitiesnoconv($object->lines[$i]->getLabelOfUnit(
'short'));
2183 global $hookmanager;
2185 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
2190 if (is_object($hookmanager)) {
2191 $special_code = $object->lines[$i]->special_code;
2192 if (!empty($object->lines[$i]->fk_parent_line)) {
2193 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2195 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
2197 $reshook = $hookmanager->executeHooks(
'pdf_getlineremisepercent', $parameters, $object, $action);
2199 if (!empty($hookmanager->resPrint)) {
2200 $result .= $hookmanager->resPrint;
2203 if (empty($reshook)) {
2204 if ($object->lines[$i]->special_code == 3) {
2207 if (empty($hidedetails) || $hidedetails > 1) {
2226 if (empty($hookmanager)) {
2227 global $hookmanager;
2234 if (is_object($hookmanager)) {
2235 $special_code = $object->lines[$i]->special_code;
2236 if (!empty($object->lines[$i]->fk_parent_line)) {
2237 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2239 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2241 $reshook = $hookmanager->executeHooks(
'pdf_getlineprogress', $parameters, $object, $action);
2243 if (!empty($hookmanager->resPrint)) {
2244 return $hookmanager->resPrint;
2247 if (empty($reshook)) {
2248 if ($object->lines[$i]->special_code == 3) {
2251 if (empty($hidedetails) || $hidedetails > 1) {
2252 if (!empty($conf->global->SITUATION_DISPLAY_DIFF_ON_PDF)) {
2254 if (method_exists($object->lines[$i],
'get_prev_progress')) {
2255 $prev_progress = $object->lines[$i]->get_prev_progress($object->id);
2257 $result = round($object->lines[$i]->situation_percent - $prev_progress, 1).
'%';
2259 $result = round($object->lines[$i]->situation_percent, 1).
'%';
2277 global $conf, $hookmanager;
2280 if (isset($object->type) && $object->type == 2 && !empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) {
2287 if (is_object($hookmanager)) {
2288 $special_code = $object->lines[$i]->special_code;
2289 if (!empty($object->lines[$i]->fk_parent_line)) {
2290 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2292 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code,
'sign'=>$sign);
2294 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalexcltax', $parameters, $object, $action);
2296 if (!empty($hookmanager->resPrint)) {
2297 $result .= $hookmanager->resPrint;
2300 if (empty($reshook)) {
2301 if ($object->lines[$i]->special_code == 3) {
2302 $result .= $outputlangs->transnoentities(
"Option");
2303 } elseif (empty($hidedetails) || $hidedetails > 1) {
2304 $total_ht = (
isModEnabled(
"multicurrency") && $object->multicurrency_tx != 1 ? $object->lines[$i]->multicurrency_total_ht : $object->lines[$i]->total_ht);
2305 if (!empty($object->lines[$i]->situation_percent) && $object->lines[$i]->situation_percent > 0) {
2309 if (method_exists($object->lines[$i],
'get_prev_progress')) {
2310 $prev_progress = $object->lines[$i]->get_prev_progress($object->id);
2311 $progress = ($object->lines[$i]->situation_percent - $prev_progress) / 100;
2313 $result .=
price($sign * ($total_ht / ($object->lines[$i]->situation_percent / 100)) * $progress, 0, $outputlangs);
2315 $result .=
price($sign * $total_ht, 0, $outputlangs);
2333 global $hookmanager, $conf;
2336 if (isset($object->type) && $object->type == 2 && !empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) {
2343 if (is_object($hookmanager)) {
2344 $special_code = $object->lines[$i]->special_code;
2345 if (!empty($object->lines[$i]->fk_parent_line)) {
2346 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2348 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
2350 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalwithtax', $parameters, $object, $action);
2352 if (!empty($hookmanager->resPrint)) {
2353 $result .= $hookmanager->resPrint;
2356 if (empty($reshook)) {
2357 if ($object->lines[$i]->special_code == 3) {
2358 $result .= $outputlangs->transnoentities(
"Option");
2359 } elseif (empty($hidedetails) || $hidedetails > 1) {
2360 $total_ttc = (
isModEnabled(
"multicurrency") && $object->multicurrency_tx != 1 ? $object->lines[$i]->multicurrency_total_ttc : $object->lines[$i]->total_ttc);
2361 if ($object->lines[$i]->situation_percent > 0) {
2365 if (method_exists($object->lines[$i],
'get_prev_progress')) {
2366 $prev_progress = $object->lines[$i]->get_prev_progress($object->id);
2367 $progress = ($object->lines[$i]->situation_percent - $prev_progress) / 100;
2369 $result .=
price($sign * ($total_ttc / ($object->lines[$i]->situation_percent / 100)) * $progress, 0, $outputlangs);
2371 $result .=
price($sign * $total_ttc, 0, $outputlangs);
2388 global $db, $hookmanager;
2390 $linkedobjects = array();
2392 $object->fetchObjectLinked();
2394 foreach ($object->linkedObjects as $objecttype => $objects) {
2395 if ($objecttype ==
'facture') {
2397 } elseif ($objecttype ==
'propal' || $objecttype ==
'supplier_proposal') {
2398 $outputlangs->load(
'propal');
2400 foreach ($objects as $elementobject) {
2401 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefProposal");
2402 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2403 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DatePropal");
2404 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
2406 } elseif ($objecttype ==
'commande' || $objecttype ==
'supplier_order') {
2407 $outputlangs->load(
'orders');
2410 $object->note_public =
dol_concatdesc($object->note_public, $outputlangs->transnoentities(
"RefOrder").
' :');
2411 foreach ($objects as $elementobject) {
2412 $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.
')').
' ');
2413 $object->note_public =
dol_concatdesc($object->note_public, $outputlangs->transnoentities(
"OrderDate").
' : '.
dol_print_date($elementobject->date,
'day',
'', $outputlangs));
2415 } elseif (count($objects) == 1) {
2416 $elementobject = array_shift($objects);
2417 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder");
2418 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref).(!empty($elementobject->ref_client) ?
' ('.$elementobject->ref_client.
')' :
'').(!empty($elementobject->ref_supplier) ?
' ('.$elementobject->ref_supplier.
')' :
'');
2419 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"OrderDate");
2420 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
2422 } elseif ($objecttype ==
'contrat') {
2423 $outputlangs->load(
'contracts');
2424 foreach ($objects as $elementobject) {
2425 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefContract");
2426 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2427 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DateContract");
2428 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date_contrat,
'day',
'', $outputlangs);
2430 } elseif ($objecttype ==
'fichinter') {
2431 $outputlangs->load(
'interventions');
2432 foreach ($objects as $elementobject) {
2433 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"InterRef");
2434 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2435 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"InterDate");
2436 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->datec,
'day',
'', $outputlangs);
2438 } elseif ($objecttype ==
'shipping') {
2439 $outputlangs->loadLangs(array(
"orders",
"sendings"));
2441 if (count($objects) > 1) {
2443 if (empty($object->linkedObjects[
'commande']) && $object->element !=
'commande') {
2444 $object->note_public =
dol_concatdesc($object->note_public, $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending").
' :');
2446 $object->note_public =
dol_concatdesc($object->note_public, $outputlangs->transnoentities(
"RefSending").
' :');
2449 foreach ($objects as $elementobject) {
2450 if (empty($object->linkedObjects[
'commande']) && $object->element !=
'commande') {
2451 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
2452 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
2453 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2455 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
2462 if (! is_object($order)) {
2463 $object->note_public =
dol_concatdesc($object->note_public, $outputlangs->transnoentities($elementobject->ref));
2465 $object->note_public =
dol_concatdesc($object->note_public, $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
''));
2466 $object->note_public =
dol_concatdesc($object->note_public,
' / '.$outputlangs->transnoentities($elementobject->ref));
2469 } elseif (count($objects) == 1) {
2470 $elementobject = array_shift($objects);
2473 if (empty($object->linkedObjects[
'commande']) && $object->element !=
'commande') {
2474 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
2475 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
2476 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2478 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
2485 if (! is_object($order)) {
2486 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefSending");
2487 if (!empty($linkedobjects[$objecttype][
'ref_value'])) $linkedobjects[$objecttype][
'ref_value'] .=
' / ';
2488 $linkedobjects[$objecttype][
'ref_value'] .= $outputlangs->transnoentities($elementobject->ref);
2489 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
2491 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending");
2492 if (empty($linkedobjects[$objecttype][
'ref_value'])) $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
'');
2493 $linkedobjects[$objecttype][
'ref_value'] .=
' / '.$outputlangs->transnoentities($elementobject->ref);
2494 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
2501 if (is_object($hookmanager)) {
2502 $parameters = array(
'linkedobjects' => $linkedobjects,
'outputlangs'=>$outputlangs);
2504 $hookmanager->executeHooks(
'pdf_getLinkedObjects', $parameters, $object, $action);
2505 if (!empty($hookmanager->resArray)) {
2506 $linkedobjects = $hookmanager->resArray;
2510 return $linkedobjects;
2524 $maxwidth = (empty($conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH) ? 20 : $conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH);
2525 $maxheight = (empty($conf->global->MAIN_DOCUMENTS_WITH_PICTURE_HEIGHT) ? 32 : $conf->global->MAIN_DOCUMENTS_WITH_PICTURE_HEIGHT);
2526 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
2530 if ($tmp[
'height']) {
2531 $width = (int) round($maxheight * $tmp[
'width'] / $tmp[
'height']);
2532 if ($width > $maxwidth) {
2534 $height = (int) round($maxwidth * $tmp[
'height'] / $tmp[
'width']);
2537 $height = $maxheight;
2540 return array(
'width'=>$width,
'height'=>$height);
2554 global $conf, $hookmanager;
2557 if (isset($object->type) && $object->type == 2 && !empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) {
2560 if ($object->lines[$i]->special_code == 3) {
2561 return $outputlangs->transnoentities(
"Option");
2563 if (is_object($hookmanager)) {
2564 $special_code = $object->lines[$i]->special_code;
2565 if (!empty($object->lines[$i]->fk_parent_line)) {
2566 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2569 $parameters = array(
2571 'outputlangs'=>$outputlangs,
2572 'hidedetails'=>$hidedetails,
2573 'special_code'=>$special_code
2578 if ($hookmanager->executeHooks(
'getlinetotalremise', $parameters, $object, $action) > 0) {
2579 if (isset($hookmanager->resArray[
'linetotalremise'])) {
2580 return $hookmanager->resArray[
'linetotalremise'];
2582 return (
float) $hookmanager->resPrint;
2587 if (empty($hidedetails) || $hidedetails > 1) {
2588 return $sign * (($object->lines[$i]->subprice * $object->lines[$i]->qty) - $object->lines[$i]->total_ht);
Class to manage categories.
Class to manage customers orders.
Class to manage absolute discounts.
Class to manage warehouses.
Class to manage predefined suppliers products.
Class to manage products or services.
Manage record for batch number management.
File of class to manage predefined price products or services by customer.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
getState($id, $withcode='', $dbtouse=0, $withregion=0, $outputlangs='', $entconv=1)
Return state translated from an id.
getFormeJuridiqueLabel($code)
Return the name translated of juridical status.
if(isModEnabled('facture') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') && $user->hasRight('don', 'lire')) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $sql
Social contributions to pay.
dol_print_reduction($reduction, $langs)
Returns formated 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 formated for view output Used into pdf and HTML pages.
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_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_format_address($object, $withcountry=0, $sep="\n", $outputlangs='', $mode=0, $extralangcode='')
Return a formated address (part address/zip/town/state) according to country rules.
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
dol_concatdesc($text1, $text2, $forxml=false, $invert=false)
Concat 2 descriptions with a new line between them (second operand after first one with appropriate n...
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.
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.
isModEnabled($module)
Is Dolibarr module enabled.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_mkdir($dir, $dataroot='', $newmask='')
Creation of a directory (this can create recursive subdir)
dol_getImageSize($file, $url=false)
Return size of image file on disk (Supported extensions are gif, jpg, png, bmp and webp)
div float
Buy price without taxes.
pdf_getSizeForImage($realpath)
Return dimensions to use for images onto PDF checking that width and height are not higher than maxim...
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_writelinedesc(&$pdf, $object, $i, $outputlangs, $w, $h, $posx, $posy, $hideref=0, $hidedesc=0, $issupplierline=0)
Output line description into PDF.
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.
pdf_getlineunit($object, $i, $outputlangs, $hidedetails=0, $hookmanager=false)
Return line unit.
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 informations.
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 informations 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 formated for output on documents.
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.