pdf.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627
  1. <?php
  2. /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
  3. * Copyright (C) 2004-2022 Laurent Destailleur <eldy@users.sourceforge.net>
  4. * Copyright (C) 2005-2011 Regis Houssin <regis.houssin@inodbox.com>
  5. * Copyright (C) 2012-2107 Juanjo Menent <jmenent@2byte.es>
  6. * Copyright (C) 2019 Ferran Marcet <fmarcet@2byte.es>
  7. * Copyright (C) 2021-2022 Anthony Berton <bertonanthony@gmail.com>
  8. *
  9. * This program is free software; you can redistribute it and/or modify
  10. * it under the terms of the GNU General Public License as published by
  11. * the Free Software Foundation; either version 3 of the License, or
  12. * (at your option) any later version.
  13. *
  14. * This program is distributed in the hope that it will be useful,
  15. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. * GNU General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU General Public License
  20. * along with this program. If not, see <https://www.gnu.org/licenses/>.
  21. */
  22. /**
  23. * \file htdocs/admin/pdf.php
  24. * \brief Page to setup PDF options
  25. */
  26. // Load Dolibarr environment
  27. require '../main.inc.php';
  28. require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
  29. require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
  30. require_once DOL_DOCUMENT_ROOT.'/core/lib/usergroups.lib.php';
  31. require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
  32. require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
  33. require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
  34. // Load translation files required by the page
  35. $langs->loadLangs(array('admin', 'companies', 'languages', 'members', 'other', 'products', 'stocks', 'trips'));
  36. if (!$user->admin) {
  37. accessforbidden();
  38. }
  39. $action = GETPOST('action', 'aZ09');
  40. $cancel = GETPOST('cancel', 'alpha');
  41. /*
  42. * Actions
  43. */
  44. if ($cancel) {
  45. $action = '';
  46. }
  47. if ($action == 'update') {
  48. if (GETPOSTISSET('MAIN_PDF_FORMAT')) {
  49. dolibarr_set_const($db, "MAIN_PDF_FORMAT", GETPOST("MAIN_PDF_FORMAT"), 'chaine', 0, '', $conf->entity);
  50. }
  51. if (GETPOSTISSET('MAIN_PDF_MARGIN_LEFT')) {
  52. dolibarr_set_const($db, "MAIN_PDF_MARGIN_LEFT", GETPOST("MAIN_PDF_MARGIN_LEFT"), 'chaine', 0, '', $conf->entity);
  53. }
  54. if (GETPOSTISSET('MAIN_PDF_MARGIN_RIGHT')) {
  55. dolibarr_set_const($db, "MAIN_PDF_MARGIN_RIGHT", GETPOST("MAIN_PDF_MARGIN_RIGHT"), 'chaine', 0, '', $conf->entity);
  56. }
  57. if (GETPOSTISSET('MAIN_PDF_MARGIN_TOP')) {
  58. dolibarr_set_const($db, "MAIN_PDF_MARGIN_TOP", GETPOST("MAIN_PDF_MARGIN_TOP"), 'chaine', 0, '', $conf->entity);
  59. }
  60. if (GETPOSTISSET('MAIN_PDF_MARGIN_BOTTOM')) {
  61. dolibarr_set_const($db, "MAIN_PDF_MARGIN_BOTTOM", GETPOST("MAIN_PDF_MARGIN_BOTTOM"), 'chaine', 0, '', $conf->entity);
  62. }
  63. if (GETPOSTISSET('MAIN_PROFID1_IN_ADDRESS')) {
  64. dolibarr_set_const($db, "MAIN_PROFID1_IN_ADDRESS", GETPOST("MAIN_PROFID1_IN_ADDRESS"), 'chaine', 0, '', $conf->entity);
  65. }
  66. if (GETPOSTISSET('MAIN_PROFID2_IN_ADDRESS')) {
  67. dolibarr_set_const($db, "MAIN_PROFID2_IN_ADDRESS", GETPOST("MAIN_PROFID2_IN_ADDRESS"), 'chaine', 0, '', $conf->entity);
  68. }
  69. if (GETPOSTISSET('MAIN_PROFID3_IN_ADDRESS')) {
  70. dolibarr_set_const($db, "MAIN_PROFID3_IN_ADDRESS", GETPOST("MAIN_PROFID3_IN_ADDRESS"), 'chaine', 0, '', $conf->entity);
  71. }
  72. if (GETPOSTISSET('MAIN_PROFID4_IN_ADDRESS')) {
  73. dolibarr_set_const($db, "MAIN_PROFID4_IN_ADDRESS", GETPOST("MAIN_PROFID4_IN_ADDRESS"), 'chaine', 0, '', $conf->entity);
  74. }
  75. if (GETPOSTISSET('MAIN_PROFID5_IN_ADDRESS')) {
  76. dolibarr_set_const($db, "MAIN_PROFID5_IN_ADDRESS", GETPOST("MAIN_PROFID5_IN_ADDRESS"), 'chaine', 0, '', $conf->entity);
  77. }
  78. if (GETPOSTISSET('MAIN_PROFID6_IN_ADDRESS')) {
  79. dolibarr_set_const($db, "MAIN_PROFID6_IN_ADDRESS", GETPOST("MAIN_PROFID6_IN_ADDRESS"), 'chaine', 0, '', $conf->entity);
  80. }
  81. if (GETPOSTISSET('MAIN_PDF_NO_SENDER_FRAME')) {
  82. dolibarr_set_const($db, "MAIN_PDF_NO_SENDER_FRAME", GETPOST("MAIN_PDF_NO_SENDER_FRAME"), 'chaine', 0, '', $conf->entity);
  83. }
  84. if (GETPOSTISSET('MAIN_PDF_NO_RECIPENT_FRAME')) {
  85. dolibarr_set_const($db, "MAIN_PDF_NO_RECIPENT_FRAME", GETPOST("MAIN_PDF_NO_RECIPENT_FRAME"), 'chaine', 0, '', $conf->entity);
  86. }
  87. /*if (GETPOSTISSET('MAIN_PDF_HIDE_SENDER_NAME')) {
  88. dolibarr_set_const($db, "MAIN_PDF_HIDE_SENDER_NAME", GETPOST("MAIN_PDF_HIDE_SENDER_NAME"), 'chaine', 0, '', $conf->entity);
  89. }*/
  90. if (GETPOSTISSET('MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT')) {
  91. dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT", GETPOST("MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT"), 'chaine', 0, '', $conf->entity);
  92. }
  93. if (GETPOSTISSET('MAIN_TVAINTRA_NOT_IN_ADDRESS')) {
  94. dolibarr_set_const($db, "MAIN_TVAINTRA_NOT_IN_ADDRESS", GETPOST("MAIN_TVAINTRA_NOT_IN_ADDRESS"), 'chaine', 0, '', $conf->entity);
  95. }
  96. if (isModEnabled('project')) {
  97. if (GETPOST('PDF_SHOW_PROJECT_REF_OR_LABEL') == 'no') {
  98. dolibarr_del_const($db, "PDF_SHOW_PROJECT", $conf->entity);
  99. dolibarr_del_const($db, "PDF_SHOW_PROJECT_TITLE", $conf->entity);
  100. } elseif (GETPOST('PDF_SHOW_PROJECT_REF_OR_LABEL') == 'showprojectref') {
  101. dolibarr_set_const($db, "PDF_SHOW_PROJECT", GETPOST("PDF_SHOW_PROJECT_REF_OR_LABEL"), 'chaine', 0, '', $conf->entity);
  102. dolibarr_del_const($db, "PDF_SHOW_PROJECT_TITLE", $conf->entity);
  103. } elseif (GETPOST('PDF_SHOW_PROJECT_REF_OR_LABEL') == 'showprojectlabel') {
  104. dolibarr_del_const($db, "PDF_SHOW_PROJECT", $conf->entity);
  105. dolibarr_set_const($db, "PDF_SHOW_PROJECT_TITLE", GETPOST("PDF_SHOW_PROJECT_REF_OR_LABEL"), 'chaine', 0, '', $conf->entity);
  106. }
  107. }
  108. if (GETPOSTISSET('MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS')) {
  109. dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS", GETPOST("MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS"), 'chaine', 0, '', $conf->entity);
  110. }
  111. if (GETPOSTISSET('MAIN_GENERATE_DOCUMENTS_HIDE_DESC')) {
  112. dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_HIDE_DESC", GETPOST("MAIN_GENERATE_DOCUMENTS_HIDE_DESC"), 'chaine', 0, '', $conf->entity);
  113. }
  114. if (GETPOSTISSET('MAIN_GENERATE_DOCUMENTS_HIDE_REF')) {
  115. dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_HIDE_REF", GETPOST("MAIN_GENERATE_DOCUMENTS_HIDE_REF"), 'chaine', 0, '', $conf->entity);
  116. }
  117. if (GETPOSTISSET('MAIN_DOCUMENTS_LOGO_HEIGHT')) {
  118. dolibarr_set_const($db, "MAIN_DOCUMENTS_LOGO_HEIGHT", GETPOST("MAIN_DOCUMENTS_LOGO_HEIGHT", 'int'), 'chaine', 0, '', $conf->entity);
  119. }
  120. if (GETPOSTISSET('MAIN_INVERT_SENDER_RECIPIENT')) {
  121. dolibarr_set_const($db, "MAIN_INVERT_SENDER_RECIPIENT", GETPOST("MAIN_INVERT_SENDER_RECIPIENT"), 'chaine', 0, '', $conf->entity);
  122. }
  123. if (GETPOSTISSET('MAIN_PDF_USE_ISO_LOCATION')) {
  124. dolibarr_set_const($db, "MAIN_PDF_USE_ISO_LOCATION", GETPOST("MAIN_PDF_USE_ISO_LOCATION"), 'chaine', 0, '', $conf->entity);
  125. }
  126. if (GETPOSTISSET('MAIN_PDF_NO_CUSTOMER_CODE')) {
  127. dolibarr_set_const($db, "MAIN_PDF_NO_CUSTOMER_CODE", GETPOST("MAIN_PDF_NO_CUSTOMER_CODE"), 'chaine', 0, '', $conf->entity);
  128. }
  129. if (GETPOSTISSET('MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS')) {
  130. dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS", GETPOST("MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS"), 'chaine', 0, '', $conf->entity);
  131. }
  132. if (GETPOSTISSET('MAIN_PDF_MAIN_HIDE_SECOND_TAX')) {
  133. dolibarr_set_const($db, "MAIN_PDF_MAIN_HIDE_SECOND_TAX", GETPOST("MAIN_PDF_MAIN_HIDE_SECOND_TAX"), 'chaine', 0, '', $conf->entity);
  134. }
  135. if (GETPOSTISSET('MAIN_PDF_MAIN_HIDE_THIRD_TAX')) {
  136. dolibarr_set_const($db, "MAIN_PDF_MAIN_HIDE_THIRD_TAX", GETPOST("MAIN_PDF_MAIN_HIDE_THIRD_TAX"), 'chaine', 0, '', $conf->entity);
  137. }
  138. if (GETPOSTISSET('PDF_USE_ALSO_LANGUAGE_CODE')) {
  139. dolibarr_set_const($db, "PDF_USE_ALSO_LANGUAGE_CODE", GETPOST('PDF_USE_ALSO_LANGUAGE_CODE', 'alpha'), 'chaine', 0, '', $conf->entity);
  140. }
  141. if (GETPOSTISSET('SHOW_SUBPRODUCT_REF_IN_PDF')) {
  142. dolibarr_set_const($db, "SHOW_SUBPRODUCT_REF_IN_PDF", GETPOST('SHOW_SUBPRODUCT_REF_IN_PDF', 'alpha'), 'chaine', 0, '', $conf->entity);
  143. }
  144. if (GETPOSTISSET('PDF_SHOW_LINK_TO_ONLINE_PAYMENT')) {
  145. dolibarr_set_const($db, "PDF_SHOW_LINK_TO_ONLINE_PAYMENT", GETPOST('PDF_SHOW_LINK_TO_ONLINE_PAYMENT', 'alpha'), 'chaine', 0, '', $conf->entity);
  146. }
  147. if (GETPOSTISSET('DOC_SHOW_FIRST_SALES_REP')) {
  148. dolibarr_set_const($db, "DOC_SHOW_FIRST_SALES_REP", GETPOST('DOC_SHOW_FIRST_SALES_REP', 'alpha'), 'chaine', 0, '', $conf->entity);
  149. }
  150. if (GETPOSTISSET('PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) {
  151. dolibarr_set_const($db, "PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME", GETPOST('PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME', 'alpha'), 'chaine', 0, '', $conf->entity);
  152. }
  153. if (GETPOSTISSET('PDF_USE_A')) {
  154. dolibarr_set_const($db, "PDF_USE_A", GETPOST('PDF_USE_A', 'alpha'), 'chaine', 0, '', $conf->entity);
  155. }
  156. if (GETPOSTISSET('PDF_BOLD_PRODUCT_LABEL')) {
  157. dolibarr_set_const($db, "PDF_BOLD_PRODUCT_LABEL", GETPOST('PDF_BOLD_PRODUCT_LABEL', 'alpha'), 'chaine', 0, '', $conf->entity);
  158. }
  159. if (GETPOSTISSET('PDF_BOLD_PRODUCT_REF_AND_PERIOD')) {
  160. dolibarr_set_const($db, "PDF_BOLD_PRODUCT_REF_AND_PERIOD", GETPOST('PDF_BOLD_PRODUCT_REF_AND_PERIOD', 'alpha'), 'chaine', 0, '', $conf->entity);
  161. }
  162. setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
  163. header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup");
  164. exit;
  165. }
  166. /*
  167. * View
  168. */
  169. $wikihelp = 'EN:First_setup|FR:Premiers_param&eacute;trages|ES:Primeras_configuraciones';
  170. llxHeader('', $langs->trans("Setup"), $wikihelp);
  171. $form = new Form($db);
  172. $formother = new FormOther($db);
  173. $formadmin = new FormAdmin($db);
  174. $arraydetailsforpdffoot = array(
  175. 0 => $langs->transnoentitiesnoconv('NoDetails'),
  176. 1 => $langs->transnoentitiesnoconv('DisplayCompanyInfo'),
  177. 2 => $langs->transnoentitiesnoconv('DisplayCompanyManagers'),
  178. 3 => $langs->transnoentitiesnoconv('DisplayCompanyInfoAndManagers')
  179. );
  180. $arraylistofpdfformat = array(
  181. 0 => $langs->transnoentitiesnoconv('PDF 1.7'),
  182. 1 => $langs->transnoentitiesnoconv('PDF/A-1b'),
  183. 3 => $langs->transnoentitiesnoconv('PDF/A-3b'),
  184. );
  185. $s = $langs->trans("LibraryToBuildPDF")."<br>";
  186. $i = 0;
  187. $pdf = pdf_getInstance('A4');
  188. if (class_exists('FPDF') && !class_exists('TCPDF')) {
  189. if ($i) {
  190. $s .= ' + ';
  191. }
  192. $s .= 'FPDF';
  193. $s .= ' ('.@constant('FPDF_PATH').')';
  194. $i++;
  195. }
  196. if (class_exists('TCPDF')) {
  197. if ($i) {
  198. $s .= ' + ';
  199. }
  200. $s .= 'TCPDF';
  201. $s .= ' ('.@constant('TCPDF_PATH').')';
  202. $i++;
  203. }
  204. if (class_exists('FPDI')) {
  205. if ($i) {
  206. $s .= ' + ';
  207. }
  208. $s .= 'FPDI';
  209. $s .= ' ('.@constant('FPDI_PATH').')';
  210. $i++;
  211. }
  212. if (class_exists('TCPDI')) {
  213. if ($i) {
  214. $s .= ' + ';
  215. }
  216. $s .= 'TCPDI';
  217. $s .= ' ('.@constant('TCPDI_PATH').')';
  218. $i++;
  219. }
  220. print load_fiche_titre($langs->trans("PDF"), '', 'title_setup');
  221. $head = pdf_admin_prepare_head();
  222. print dol_get_fiche_head($head, 'general', '', -1, '');
  223. print '<span class="opacitymedium">'.$form->textwithpicto($langs->trans("PDFDesc"), $s)."</span><br>\n";
  224. print "<br>\n";
  225. $noCountryCode = (empty($mysoc->country_code) ? true : false);
  226. print '<form method="post" action="'.$_SERVER["PHP_SELF"].'">';
  227. print '<input type="hidden" name="token" value="'.newToken().'">';
  228. print '<input type="hidden" name="action" value="update">';
  229. clearstatcache();
  230. if (getDolGlobalString('PDF_SECURITY_ENCRYPTION')) {
  231. print '<div class="warning">';
  232. print 'The not supported and hidden option PDF_SECURITY_ENCRYPTION has been enabled. This means a lof of feature related to PDF will be broken, like mass PDF generation or online signature of PDF.'."\n";
  233. print 'You should disable this option.';
  234. print '</div>';
  235. }
  236. // Misc options
  237. print load_fiche_titre($langs->trans("DictionaryPaperFormat"), '', '');
  238. print '<div class="div-table-responsive-no-min">';
  239. print '<table summary="more" class="noborder centpercent">';
  240. print '<tr class="liste_titre"><td class="titlefieldmiddle">'.$langs->trans("Parameters").'</td><td width="200px">'.$langs->trans("Value").'</td></tr>';
  241. $selected = (isset($conf->global->MAIN_PDF_FORMAT) ? $conf->global->MAIN_PDF_FORMAT : '');
  242. if (empty($selected)) {
  243. $selected = dol_getDefaultFormat();
  244. }
  245. // Show pdf format
  246. print '<tr class="oddeven"><td>'.$langs->trans("DictionaryPaperFormat").'</td><td>';
  247. print $formadmin->select_paper_format($selected, 'MAIN_PDF_FORMAT');
  248. print '</td></tr>';
  249. print '<tr class="oddeven"><td>'.$langs->trans("MAIN_PDF_MARGIN_LEFT").'</td><td>';
  250. print '<input type="text" class="maxwidth50" name="MAIN_PDF_MARGIN_LEFT" value="'.getDolGlobalInt('MAIN_PDF_MARGIN_LEFT', 10).'">';
  251. print '</td></tr>';
  252. print '<tr class="oddeven"><td>'.$langs->trans("MAIN_PDF_MARGIN_RIGHT").'</td><td>';
  253. print '<input type="text" class="maxwidth50" name="MAIN_PDF_MARGIN_RIGHT" value="'.getDolGlobalInt('MAIN_PDF_MARGIN_RIGHT', 10).'">';
  254. print '</td></tr>';
  255. print '<tr class="oddeven"><td>'.$langs->trans("MAIN_PDF_MARGIN_TOP").'</td><td>';
  256. print '<input type="text" class="maxwidth50" name="MAIN_PDF_MARGIN_TOP" value="'.getDolGlobalInt('MAIN_PDF_MARGIN_TOP', 10).'">';
  257. print '</td></tr>';
  258. print '<tr class="oddeven"><td>'.$langs->trans("MAIN_PDF_MARGIN_BOTTOM").'</td><td>';
  259. print '<input type="text" class="maxwidth50" name="MAIN_PDF_MARGIN_BOTTOM" value="'.getDolGlobalInt('MAIN_PDF_MARGIN_BOTTOM', 10).'">';
  260. print '</td></tr>';
  261. print '</table>';
  262. print '</div>';
  263. print '<br>';
  264. // Addresses
  265. print load_fiche_titre($langs->trans("PDFAddressForging"), '', '');
  266. print '<div class="div-table-responsive-no-min">';
  267. print '<table summary="more" class="noborder centpercent">';
  268. print '<tr class="liste_titre"><td class="">'.$langs->trans("Parameter").'</td><td></td></tr>';
  269. // Show sender name
  270. /* Set option as hidden because no need of this for 99.99% of users. Having it as hidden feature is enough.
  271. print '<tr class="oddeven"><td>'.$langs->trans("MAIN_PDF_HIDE_SENDER_NAME").'</td><td>';
  272. if ($conf->use_javascript_ajax) {
  273. print ajax_constantonoff('MAIN_PDF_HIDE_SENDER_NAME');
  274. } else {
  275. print $form->selectyesno('MAIN_PDF_HIDE_SENDER_NAME', (!empty($conf->global->MAIN_PDF_HIDE_SENDER_NAME)) ? $conf->global->MAIN_PDF_HIDE_SENDER_NAME : 0, 1);
  276. }
  277. print '</td></tr>';
  278. */
  279. // Hide VAT Intra on address
  280. print '<tr class="oddeven"><td>'.$langs->trans("ShowVATIntaInAddress").' - <span class="opacitymedium">'.$langs->trans("ThirdPartyAddress").'</span></td><td>';
  281. if ($conf->use_javascript_ajax) {
  282. print ajax_constantonoff('MAIN_TVAINTRA_NOT_IN_ADDRESS');
  283. } else {
  284. print $form->selectyesno('MAIN_TVAINTRA_NOT_IN_ADDRESS', (!empty($conf->global->MAIN_TVAINTRA_NOT_IN_ADDRESS)) ? $conf->global->MAIN_TVAINTRA_NOT_IN_ADDRESS : 0, 1);
  285. }
  286. print '</td></tr>';
  287. // Show prof id in address into pdf
  288. for ($i = 1; $i <= 6; $i++) {
  289. if (!$noCountryCode) {
  290. $pid = $langs->transcountry("ProfId".$i, $mysoc->country_code);
  291. if ($pid == '-') {
  292. $pid = false;
  293. }
  294. } else {
  295. $pid = img_warning().' <span class="error">'.$langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CompanyCountry")).'</span>';
  296. }
  297. if ($pid) {
  298. print '<tr class="oddeven"><td>'.$langs->trans("ShowProfIdInAddress").' - '.$pid.' - <span class="opacitymedium">'.$langs->trans("ThirdPartyAddress").'</span></td><td>';
  299. $keyforconstant = 'MAIN_PROFID'.$i.'_IN_ADDRESS';
  300. if ($conf->use_javascript_ajax) {
  301. print ajax_constantonoff($keyforconstant);
  302. } else {
  303. print $form->selectyesno($keyforconstant, isset($conf->global->$keyforconstant) ? $conf->global->$keyforconstant : 0, 1, $noCountryCode);
  304. }
  305. print '</td></tr>';
  306. }
  307. }
  308. // Borders on address frame
  309. print '<tr class="oddeven"><td>'.$langs->trans("MAIN_PDF_NO_SENDER_FRAME").'</td><td>';
  310. if ($conf->use_javascript_ajax) {
  311. print ajax_constantonoff('MAIN_PDF_NO_SENDER_FRAME');
  312. } else {
  313. $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
  314. print $form->selectarray("MAIN_PDF_NO_SENDER_FRAME", $arrval, $conf->global->MAIN_PDF_NO_SENDER_FRAME);
  315. }
  316. print '</td></tr>';
  317. print '<tr class="oddeven"><td>'.$langs->trans("MAIN_PDF_NO_RECIPENT_FRAME").'</td><td>';
  318. if ($conf->use_javascript_ajax) {
  319. print ajax_constantonoff('MAIN_PDF_NO_RECIPENT_FRAME');
  320. } else {
  321. $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
  322. print $form->selectarray("MAIN_PDF_NO_RECIPENT_FRAME", $arrval, $conf->global->MAIN_PDF_NO_RECIPENT_FRAME);
  323. }
  324. print '</td></tr>';
  325. //Invert sender and recipient
  326. print '<tr class="oddeven"><td>'.$langs->trans("SwapSenderAndRecipientOnPDF").'</td><td>';
  327. if ($conf->use_javascript_ajax) {
  328. print ajax_constantonoff('MAIN_INVERT_SENDER_RECIPIENT');
  329. } else {
  330. print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT', (!empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) ? $conf->global->MAIN_INVERT_SENDER_RECIPIENT : 0, 1);
  331. }
  332. print '</td></tr>';
  333. // Place customer adress to the ISO location
  334. print '<tr class="oddeven"><td>'.$langs->trans("PlaceCustomerAddressToIsoLocation").'</td><td>';
  335. if ($conf->use_javascript_ajax) {
  336. print ajax_constantonoff('MAIN_PDF_USE_ISO_LOCATION');
  337. } else {
  338. print $form->selectyesno('MAIN_PDF_USE_ISO_LOCATION', (!empty($conf->global->MAIN_PDF_USE_ISO_LOCATION)) ? $conf->global->MAIN_PDF_USE_ISO_LOCATION : 0, 1);
  339. }
  340. print '</td></tr>';
  341. // Show alias in thirdparty name
  342. print '<tr class="oddeven"><td>'.$langs->trans("PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME").'</td><td>';
  343. if ($conf->use_javascript_ajax) {
  344. $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("THIRDPARTY_ALIAS"), '2' => $langs->trans("ALIAS_THIRDPARTY"));
  345. print $form->selectarray("PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME", $arrval, getDolGlobalInt('PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME'));
  346. }
  347. print '</table>';
  348. print '</div>';
  349. print '<br>';
  350. // Localtaxes
  351. $locales = '';
  352. $text = '';
  353. if ($mysoc->useLocalTax(1) || $mysoc->useLocalTax(2)) {
  354. if ($mysoc->useLocalTax(1)) {
  355. $locales = $langs->transcountry("LT1", $mysoc->country_code);
  356. $text = '<tr class="oddeven"><td class="titlefieldmiddle">'.$langs->trans("HideLocalTaxOnPDF", $langs->transcountry("LT1", $mysoc->country_code)).'</td><td>';
  357. if ($conf->use_javascript_ajax) {
  358. $text .= ajax_constantonoff('MAIN_PDF_MAIN_HIDE_SECOND_TAX');
  359. } else {
  360. $text .= $form->selectyesno('MAIN_PDF_MAIN_HIDE_SECOND_TAX', (!empty($conf->global->MAIN_PDF_MAIN_HIDE_SECOND_TAX)) ? $conf->global->MAIN_PDF_MAIN_HIDE_SECOND_TAX : 0, 1);
  361. }
  362. $text .= '</td></tr>';
  363. }
  364. if ($mysoc->useLocalTax(2)) {
  365. $locales .= ($locales ? ' & ' : '').$langs->transcountry("LT2", $mysoc->country_code);
  366. $text .= '<tr class="oddeven"><td class="titlefieldmiddle">'.$langs->trans("HideLocalTaxOnPDF", $langs->transcountry("LT2", $mysoc->country_code)).'</td><td>';
  367. if ($conf->use_javascript_ajax) {
  368. $text .= ajax_constantonoff('MAIN_PDF_MAIN_HIDE_THIRD_TAX');
  369. } else {
  370. $text .= $form->selectyesno('MAIN_PDF_MAIN_HIDE_THIRD_TAX', (!empty($conf->global->MAIN_PDF_MAIN_HIDE_THIRD_TAX)) ? $conf->global->MAIN_PDF_MAIN_HIDE_THIRD_TAX : 0, 1);
  371. }
  372. $text .= '</td></tr>';
  373. }
  374. }
  375. $title = $langs->trans("PDFRulesForSalesTax");
  376. if ($mysoc->useLocalTax(1) || $mysoc->useLocalTax(2)) {
  377. $title .= ' - '.$langs->trans("PDFLocaltax", $locales);
  378. }
  379. print load_fiche_titre($title, '', '');
  380. print '<table summary="more" class="noborder centpercent">';
  381. print '<tr class="liste_titre"><td>'.$langs->trans("Parameter").'</td><td></td></tr>';
  382. // Hide any information on Sale tax / VAT
  383. print '<tr class="oddeven"><td>'.$langs->trans("HideAnyVATInformationOnPDF").'</td><td>';
  384. if ($conf->use_javascript_ajax) {
  385. print ajax_constantonoff('MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT');
  386. } else {
  387. print $form->selectyesno('MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT', (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT)) ? $conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT : 0, 1);
  388. }
  389. print '</td></tr>';
  390. // Locataxes
  391. print $text;
  392. print '</table>';
  393. print '<br>';
  394. // Other
  395. print load_fiche_titre($langs->trans("Other"), '', '');
  396. print '<div class="div-table-responsive-no-min">';
  397. print '<table summary="more" class="noborder centpercent">';
  398. print '<tr class="liste_titre"><td>'.$langs->trans("Parameter").'</td><td>'.$langs->trans("Value").'</td></tr>';
  399. // Use 2 languages into PDF
  400. print '<tr class="oddeven"><td>';
  401. print $form->textwithpicto($langs->trans("PDFIn2Languages"), $langs->trans("PDF_USE_ALSO_LANGUAGE_CODE"));
  402. print '</td><td>';
  403. $selected = GETPOSTISSET('PDF_USE_ALSO_LANGUAGE_CODE') ? GETPOST('PDF_USE_ALSO_LANGUAGE_CODE') : (!empty($conf->global->PDF_USE_ALSO_LANGUAGE_CODE) ? $conf->global->PDF_USE_ALSO_LANGUAGE_CODE : 0);
  404. print $formadmin->select_language($selected, 'PDF_USE_ALSO_LANGUAGE_CODE', 0, null, 1);
  405. print '</td></tr>';
  406. // Height of logo
  407. print '<tr class="oddeven"><td>'.$langs->trans("MAIN_DOCUMENTS_LOGO_HEIGHT").'</td><td>';
  408. print '<input type="text" class="maxwidth50" name="MAIN_DOCUMENTS_LOGO_HEIGHT" value="'.(!empty($conf->global->MAIN_DOCUMENTS_LOGO_HEIGHT) ? $conf->global->MAIN_DOCUMENTS_LOGO_HEIGHT : 20).'">';
  409. print '</td></tr>';
  410. // Show project
  411. if (isModEnabled('project')) {
  412. print '<tr class="oddeven"><td>'.$langs->trans("PDF_SHOW_PROJECT").'</td><td>';
  413. $tmparray = array('no' => 'No', 'showprojectref' => 'RefProject', 'showprojectlabel' => 'ShowProjectLabel');
  414. $showprojectref = empty($conf->global->PDF_SHOW_PROJECT) ? (empty($conf->global->PDF_SHOW_PROJECT_TITLE) ? 'no' : 'showprojectlabel') : 'showprojectref';
  415. print $form->selectarray('PDF_SHOW_PROJECT_REF_OR_LABEL', $tmparray, $showprojectref, 0, 0, 0, '', 1);
  416. print '</td></tr>';
  417. }
  418. //
  419. print '<tr class="oddeven"><td>'.$langs->trans("MAIN_PDF_HIDE_CUSTOMER_CODE");
  420. print '</td><td>';
  421. if ($conf->use_javascript_ajax) {
  422. print ajax_constantonoff('MAIN_PDF_HIDE_CUSTOMER_CODE');
  423. } else {
  424. $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
  425. print $form->selectarray("MAIN_PDF_HIDE_CUSTOMER_CODE", $arrval, $conf->global->MAIN_PDF_HIDE_CUSTOMER_CODE);
  426. }
  427. print '</td></tr>';
  428. // Ref
  429. print '<tr class="oddeven"><td>'.$langs->trans("HideRefOnPDF").'</td><td>';
  430. if ($conf->use_javascript_ajax) {
  431. print ajax_constantonoff('MAIN_GENERATE_DOCUMENTS_HIDE_REF');
  432. } else {
  433. print $form->selectyesno('MAIN_GENERATE_DOCUMENTS_HIDE_REF', (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF)) ? $conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF : 0, 1);
  434. }
  435. print '</td></tr>';
  436. // Desc
  437. print '<tr class="oddeven"><td>'.$langs->trans("HideDescOnPDF").'</td><td>';
  438. if ($conf->use_javascript_ajax) {
  439. print ajax_constantonoff('MAIN_GENERATE_DOCUMENTS_HIDE_DESC');
  440. } else {
  441. print $form->selectyesno('MAIN_GENERATE_DOCUMENTS_HIDE_DESC', (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC)) ? $conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC : 0, 1);
  442. }
  443. print '</td></tr>';
  444. // Details
  445. print '<tr class="oddeven"><td>'.$langs->trans("HideDetailsOnPDF").'</td><td>';
  446. if ($conf->use_javascript_ajax) {
  447. print ajax_constantonoff('MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS');
  448. } else {
  449. print $form->selectyesno('MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS', (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS)) ? $conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS : 0, 1);
  450. }
  451. print '</td></tr>';
  452. // Swicth in Bold
  453. print '<tr class="oddeven"><td>'.$langs->trans("BoldLabelOnPDF").'</td><td>';
  454. if ($conf->use_javascript_ajax) {
  455. print ajax_constantonoff('PDF_BOLD_PRODUCT_LABEL');
  456. } else {
  457. print $form->selectyesno('PDF_BOLD_PRODUCT_LABEL', (!empty($conf->global->PDF_BOLD_PRODUCT_LABEL)) ? $conf->global->PDF_BOLD_PRODUCT_LABEL : 0, 1);
  458. }
  459. print '</td></tr>';
  460. // Swicth in Bold
  461. print '<tr class="oddeven"><td>'.$langs->trans("BoldRefAndPeriodOnPDF").'</td><td>';
  462. if ($conf->use_javascript_ajax) {
  463. print ajax_constantonoff('PDF_BOLD_PRODUCT_REF_AND_PERIOD');
  464. } else {
  465. print $form->selectyesno('PDF_BOLD_PRODUCT_REF_AND_PERIOD', (!empty($conf->global->PDF_BOLD_PRODUCT_REF_AND_PERIOD)) ? $conf->global->PDF_BOLD_PRODUCT_REF_AND_PERIOD : 0, 1);
  466. }
  467. print '</td></tr>';
  468. // SHOW_SUBPRODUCT_REF_IN_PDF - Option to show the detail of product ref for kits.
  469. print '<tr class="oddeven"><td>'.$langs->trans("SHOW_SUBPRODUCT_REF_IN_PDF", $langs->transnoentitiesnoconv("AssociatedProductsAbility"), $langs->transnoentitiesnoconv("Products")).'</td><td>';
  470. if ($conf->use_javascript_ajax) {
  471. print ajax_constantonoff('SHOW_SUBPRODUCT_REF_IN_PDF');
  472. } else {
  473. print $form->selectyesno('SHOW_SUBPRODUCT_REF_IN_PDF', (!empty($conf->global->SHOW_SUBPRODUCT_REF_IN_PDF)) ? $conf->global->SHOW_SUBPRODUCT_REF_IN_PDF : 0, 1);
  474. }
  475. print '</td></tr>';
  476. // Show more details in footer
  477. print '<tr class="oddeven"><td>'.$langs->trans("ShowDetailsInPDFPageFoot").'</td><td>';
  478. print $form->selectarray('MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS', $arraydetailsforpdffoot, (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS) ? $conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS : 0));
  479. print '</td></tr>';
  480. // Show the first sales representative
  481. print '<tr class="oddeven"><td>'.$langs->trans("DOC_SHOW_FIRST_SALES_REP");
  482. print ' <span class="opacitymedium">('.$langs->trans("SalesRepresentativeInfo").')</span>';
  483. print '</td><td>';
  484. if ($conf->use_javascript_ajax) {
  485. print ajax_constantonoff('DOC_SHOW_FIRST_SALES_REP');
  486. } else {
  487. $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
  488. print $form->selectarray("DOC_SHOW_FIRST_SALES_REP", $arrval, $conf->global->DOC_SHOW_FIRST_SALES_REP);
  489. }
  490. // Show online payment link on invoices
  491. print '<tr class="oddeven"><td>'.$langs->trans("PDF_SHOW_LINK_TO_ONLINE_PAYMENT").'</td><td>';
  492. if ($conf->use_javascript_ajax) {
  493. print ajax_constantonoff('PDF_SHOW_LINK_TO_ONLINE_PAYMENT');
  494. } else {
  495. print $form->selectyesno('PDF_SHOW_LINK_TO_ONLINE_PAYMENT', (!empty($conf->global->PDF_SHOW_LINK_TO_ONLINE_PAYMENT)) ? $conf->global->PDF_SHOW_LINK_TO_ONLINE_PAYMENT : 0, 1);
  496. }
  497. print '</td></tr>';
  498. print '<tr class="oddeven"><td>'.$langs->trans("PDF_USE_A").'</td><td>';
  499. print $form->selectarray('PDF_USE_A', $arraylistofpdfformat, (empty($conf->global->PDF_USE_A) ? 0 : $conf->global->PDF_USE_A));
  500. print '</td></tr>';
  501. print '</table>';
  502. print '</div>';
  503. print $form->buttonsSaveCancel("Save", '');
  504. print '</form>';
  505. // End of page
  506. llxFooter();
  507. $db->close();