dolibarr 24.0.0-beta
supplier_invoice.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004-2013 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2005-2011 Regis Houssin <regis.houssin@inodbox.com>
5 * Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org>
6 * Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
7 * Copyright (C) 2010-2013 Juanjo Menent <jmenent@2byte.es>
8 * Copyright (C) 2011-2018 Philippe Grand <philippe.grand@atoo-net.com>
9 * Copyright (C) 2024-2025 MDW <mdeweerd@users.noreply.github.com>
10 * Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
11 * Copyright (C) 2026 Pierre Ardoin <developpeur@lesmetiersdubatiment.fr>
12 * Copyright (C) 2026 Alexandre Spangaro <alexandre@inovea-conseil.com>
13 *
14 * This program is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License as published by
16 * the Free Software Foundation; either version 3 of the License, or
17 * (at your option) any later version.
18 *
19 * This program is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
23 *
24 * You should have received a copy of the GNU General Public License
25 * along with this program. If not, see <https://www.gnu.org/licenses/>.
26 */
27
34// Load Dolibarr environment
35require '../../main.inc.php';
36
46require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
47require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
48if (getDolGlobalString('MAIN_USE_NEW_SUPPLIERMOD')) {
49 require_once DOL_DOCUMENT_ROOT . '/core/lib/supplier_invoice.lib.php';
50} else {
51 require_once DOL_DOCUMENT_ROOT . '/core/lib/fourn.lib.php';
52}
53require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.class.php';
54require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
55
56// Load translation files required by the page
57$langs->loadLangs(array("admin", "other", "orders"));
58
59$action = GETPOST('action', 'aZ09');
60
61$type = GETPOST('type', 'alpha');
62$value = GETPOST('value', 'alpha');
63$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
64
65$label = GETPOST('label', 'alpha');
66$scandir = GETPOST('scan_dir', 'alpha');
67
68$specimenthirdparty = new Societe($db);
69$specimenthirdparty->initAsSpecimen();
70
71$error = 0;
72
73if (!$user->admin) {
75}
76
77
78/*
79 * Actions
80 */
81
82include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php';
83
84if ($action == 'updateMask') {
85 $maskconstinvoice = GETPOST('maskconstinvoice', 'aZ09');
86 $maskconstcredit = GETPOST('maskconstcredit', 'aZ09');
87 $maskconstdeposit = GETPOST('maskconstdeposit', 'aZ09');
88 $maskinvoice = GETPOST('maskinvoice', 'alpha');
89 $maskcredit = GETPOST('maskcredit', 'alpha');
90 $maskdeposit = GETPOST('maskdeposit', 'alpha');
91 $res = 0;
92
93 if ($maskconstinvoice && preg_match('/_MASK$/', $maskconstinvoice)) {
94 $res = dolibarr_set_const($db, $maskconstinvoice, $maskinvoice, 'chaine', 0, '', $conf->entity);
95 }
96 if ($maskconstcredit && preg_match('/_MASK$/', $maskconstcredit)) {
97 $res = dolibarr_set_const($db, $maskconstcredit, $maskcredit, 'chaine', 0, '', $conf->entity);
98 }
99 if ($maskconstdeposit && preg_match('/_MASK$/', $maskconstdeposit)) {
100 $res = dolibarr_set_const($db, $maskconstdeposit, $maskdeposit, 'chaine', 0, '', $conf->entity);
101 }
102
103 if (!($res > 0)) {
104 $error++;
105 }
106
107 if (!$error) {
108 setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
109 } else {
110 setEventMessages($langs->trans("Error"), null, 'errors');
111 }
112}
113
114if ($action == 'specimen') { // For invoices
115 $modele = GETPOST('module', 'alpha');
116
117 $facture = new FactureFournisseur($db);
118 $facture->initAsSpecimen();
119 $facture->thirdparty = $specimenthirdparty; // Define who should has build the invoice (so the supplier)
120
121 // Search template files
122 $file = '';
123 $classname = '';
124 $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
125 foreach ($dirmodels as $reldir) {
126 $file = dol_buildpath($reldir."core/modules/supplier_invoice/doc/pdf_".$modele.".modules.php", 0);
127 if (file_exists($file)) {
128 $classname = "pdf_".$modele;
129 break;
130 }
131 }
132
133 if ($classname !== '') {
134 require_once $file;
135
136 $module = new $classname($db, $facture);
137 '@phan-var-force ModelePDFSuppliersInvoices $module';
138
139 if ($module->write_file($facture, $langs) > 0) {
140 header("Location: ".DOL_URL_ROOT."/document.php?modulepart=facture_fournisseur&file=SPECIMEN.pdf");
141 return;
142 } else {
143 setEventMessages($module->error, $module->errors, 'errors');
144 dol_syslog($module->error, LOG_ERR);
145 }
146 } else {
147 setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors');
148 dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR);
149 }
150} elseif ($action == 'set') {
151 // Activate a model
152 $ret = addDocumentModel($value, $type, $label, $scandir);
153} elseif ($action == 'del') {
154 $ret = delDocumentModel($value, $type);
155 if ($ret > 0) {
156 if (getDolGlobalString('INVOICE_SUPPLIER_ADDON_PDF') == "$value") {
157 dolibarr_del_const($db, 'INVOICE_SUPPLIER_ADDON_PDF', $conf->entity);
158 }
159 }
160} elseif ($action == 'setdoc') {
161 // Set default model
162 if (dolibarr_set_const($db, "INVOICE_SUPPLIER_ADDON_PDF", $value, 'chaine', 0, '', $conf->entity)) {
163 // La constante qui a ete lue en avant du nouveau set
164 // on passe donc par une variable pour avoir un affichage coherent
165 $conf->global->INVOICE_SUPPLIER_ADDON_PDF = $value;
166 }
167
168 // On active le modele
169 $ret = delDocumentModel($value, $type);
170 if ($ret > 0) {
171 $ret = addDocumentModel($value, $type, $label, $scandir);
172 }
173} elseif ($action == 'unsetdoc') {
174 dolibarr_del_const($db, "INVOICE_SUPPLIER_ADDON_PDF", $conf->entity);
175}
176
177if ($action == 'setmod') {
178 // TODO Verify if the chosen numbering module can be activated
179 // by calling method canBeActivated
180
181 dolibarr_set_const($db, "INVOICE_SUPPLIER_ADDON_NUMBER", $value, 'chaine', 0, '', $conf->entity);
182}
183
184if ($action == 'addcat') {
185 $fourn = new Fournisseur($db);
186 $fourn->CreateCategory($user, GETPOST('cat', 'alphanohtml'));
187}
188
189if ($action == 'set_SUPPLIER_INVOICE_FREE_TEXT') {
190 $freetext = GETPOST('SUPPLIER_INVOICE_FREE_TEXT', 'restricthtml'); // No alpha here, we want exact string
191
192 $res = dolibarr_set_const($db, "SUPPLIER_INVOICE_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity);
193
194 if (!($res > 0)) {
195 $error++;
196 }
197
198 if (!$error) {
199 setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
200 } else {
201 setEventMessages($langs->trans("Error"), null, 'errors');
202 }
203}
204
205
206/*
207 * View
208 */
209
210$form = new Form($db);
211
212$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
213
214llxHeader('', '', '', '', 0, 0, '', '', '', 'mod-admin page-supplier_invoice');
215
216$linkback = '<a href="'.dolBuildUrl(DOL_URL_ROOT.'/admin/modules.php', ['restore_lastsearch_values' => 1]).'">'.img_picto($langs->trans("BackToModuleList"), 'back', 'class="pictofixedwidth"').'<span class="hideonsmartphone">'.$langs->trans("BackToModuleList").'</span></a>';
217
218print load_fiche_titre($langs->trans("SuppliersSetup"), $linkback, 'title_setup');
219
220print "<br>";
221
222if (getDolGlobalString('MAIN_USE_NEW_SUPPLIERMOD')) {
224} else {
226}
227
228print dol_get_fiche_head($head, 'invoice', $langs->trans("Suppliers"), -1, 'company');
229
230
231// Supplier invoice numbering module
232
233print load_fiche_titre($langs->trans("SuppliersInvoiceNumberingModel"), '', '');
234
235print '<div class="div-table-responsive-no-min">';
236print '<table class="noborder centpercent">';
237print '<tr class="liste_titre">';
238print '<td width="100">'.$langs->trans("Name").'</td>';
239print '<td>'.$langs->trans("Description").'</td>';
240print '<td>'.$langs->trans("Example").'</td>';
241print '<td align="center" width="60">'.$langs->trans("Status").'</td>';
242print '<td align="center" width="16">'.$langs->trans("ShortInfo").'</td>';
243print "</tr>\n";
244
245clearstatcache();
246
247foreach ($dirmodels as $reldir) {
248 $dir = dol_buildpath($reldir."core/modules/supplier_invoice");
249
250 if (is_dir($dir)) {
251 $handle = opendir($dir);
252 if (is_resource($handle)) {
253 while (($file = readdir($handle)) !== false) {
254 if (substr($file, 0, 24) == 'mod_facture_fournisseur_' && substr($file, dol_strlen($file) - 3, 3) == 'php') {
255 $file = substr($file, 0, dol_strlen($file) - 4);
256
257 require_once $dir.'/'.$file.'.php';
258
259 $module = new $file();
260
261 '@phan-var-force ModeleNumRefSuppliersInvoices $module';
262
263 if ($module->isEnabled()) {
264 // Show modules according to features level
265 if ($module->version == 'development' && getDolGlobalInt('MAIN_FEATURES_LEVEL') < 2) {
266 continue;
267 }
268 if ($module->version == 'experimental' && getDolGlobalInt('MAIN_FEATURES_LEVEL') < 1) {
269 continue;
270 }
271
272
273 print '<tr class="oddeven"><td>'.$module->getName($langs)."</td><td>\n";
274 print $module->info($langs);
275 print '</td>';
276
277 // Show example of numbering module
278 print '<td class="nowrap">';
279 $tmp = $module->getExample();
280 if (preg_match('/^Error/', $tmp)) {
281 $langs->load("errors");
282 print '<div class="error">'.$langs->trans($tmp).'</div>';
283 } elseif ($tmp == 'NotConfigured') {
284 print '<span class="opacitymedium">'.$langs->trans($tmp).'</span>';
285 } else {
286 print $tmp;
287 }
288 print '</td>'."\n";
289
290 print '<td class="center">';
291 if (getDolGlobalString('INVOICE_SUPPLIER_ADDON_NUMBER') == "$file") {
292 print img_picto($langs->trans("Activated"), 'switch_on');
293 } else {
294 print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=setmod&token='.newToken().'&value='.urlencode($file).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"), 'switch_off').'</a>';
295 }
296 print '</td>';
297
298 $invoice = new FactureFournisseur($db);
299 $invoice->initAsSpecimen();
300
301 // Info
302 $htmltooltip = '';
303 $htmltooltip .= ''.$langs->trans("Version").': <b>'.$module->getVersion().'</b><br>';
304 $nextval = $module->getNextValue($mysoc, $invoice);
305 if ("$nextval" != $langs->trans("NotAvailable")) { // Keep " on nextval
306 $htmltooltip .= ''.$langs->trans("NextValue").': ';
307 if ($nextval) {
308 if (preg_match('/^Error/', $nextval) || $nextval == 'NotConfigured') {
309 $nextval = $langs->trans($nextval);
310 }
311 $htmltooltip .= $nextval.'<br>';
312 } else {
313 $htmltooltip .= $langs->trans($module->error).'<br>';
314 }
315 }
316
317 print '<td class="center">';
318 print $form->textwithpicto('', $htmltooltip, 1, 'info');
319 print '</td>';
320
321 print '</tr>';
322 }
323 }
324 }
325 closedir($handle);
326 }
327 }
328}
329
330print '</table></div><br>';
331
332
333
334
335/*
336 * Documents models for supplier invoices
337 */
338
339print load_fiche_titre($langs->trans("BillsPDFModules"), '', '');
340
341// Defini tableau def de modele
342$def = array();
343
344$sql = "SELECT nom";
345$sql .= " FROM ".MAIN_DB_PREFIX."document_model";
346$sql .= " WHERE type = 'invoice_supplier'";
347$sql .= " AND entity = ".((int) $conf->entity);
348
349$resql = $db->query($sql);
350if ($resql) {
351 $i = 0;
352 $num_rows = $db->num_rows($resql);
353 while ($i < $num_rows) {
354 $array = $db->fetch_array($resql);
355 if (is_array($array)) {
356 array_push($def, $array[0]);
357 }
358 $i++;
359 }
360} else {
362}
363
364print '<div class="div-table-responsive-no-min">';
365print '<table class="noborder centpercent">'."\n";
366print '<tr class="liste_titre">'."\n";
367print '<td width="100">'.$langs->trans("Name").'</td>'."\n";
368print '<td>'.$langs->trans("Description").'</td>'."\n";
369print '<td align="center" width="60">'.$langs->trans("Status").'</td>'."\n";
370print '<td align="center" width="60">'.$langs->trans("Default").'</td>'."\n";
371print '<td align="center" width="40">'.$langs->trans("ShortInfo").'</td>';
372print '<td align="center" width="40">'.$langs->trans("Preview").'</td>';
373print '</tr>'."\n";
374
375clearstatcache();
376
377foreach ($dirmodels as $reldir) {
378 $realpath = $reldir."core/modules/supplier_invoice/doc";
379 $dir = dol_buildpath($realpath);
380
381 if (is_dir($dir)) {
382 $handle = opendir($dir);
383
384
385 if (is_resource($handle)) {
386 while (($file = readdir($handle)) !== false) {
387 if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) {
388 $name = substr($file, 4, dol_strlen($file) - 16);
389 $classname = substr($file, 0, dol_strlen($file) - 12);
390
391 require_once $dir.'/'.$file;
392 $module = new $classname($db, new FactureFournisseur($db));
393
394 '@phan-var-force ModelePDFSuppliersInvoices $module';
395
396
397 print "<tr class=\"oddeven\">\n";
398 print "<td>";
399 print(empty($module->name) ? $name : $module->name);
400 print "</td>\n";
401 print "<td>\n";
402 require_once $dir.'/'.$file;
403 $module = new $classname($db, $specimenthirdparty);
404 '@phan-var-force ModelePDFSuppliersInvoices $module';
405 if (method_exists($module, 'info')) {
406 print $module->info($langs); // @phan-suppress-current-line PhanUndeclaredMethod
407 } else {
408 print $module->description;
409 }
410
411 print "</td>\n";
412
413 // Active
414 if (in_array($name, $def)) {
415 print '<td class="center">'."\n";
416 //if ($conf->global->INVOICE_SUPPLIER_ADDON_PDF != "$name")
417 //{
418 // Even if choice is the default value, we allow to disable it: For supplier invoice, we accept to have no doc generation at all
419 print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=del&token='.newToken().'&value='.urlencode($name).'&scan_dir='.urlencode($module->scandir).'&label='.urlencode($module->name).'&amp;type=invoice_supplier">';
420 print img_picto($langs->trans("Enabled"), 'switch_on');
421 print '</a>';
422 /*}
423 else
424 {
425 print img_picto($langs->trans("Enabled"),'switch_on');
426 }*/
427 print "</td>";
428 } else {
429 print '<td class="center">'."\n";
430 print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=set&token='.newToken().'&value='.urlencode($name).'&scan_dir='.urlencode($module->scandir).'&label='.urlencode($module->name).'&amp;type=invoice_supplier">'.img_picto($langs->trans("Disabled"), 'switch_off').'</a>';
431 print "</td>";
432 }
433
434 // Default
435 print '<td class="center">';
436 if (getDolGlobalString("INVOICE_SUPPLIER_ADDON_PDF") == "$name") {
437 //print img_picto($langs->trans("Default"),'on');
438 // Even if choice is the default value, we allow to disable it: For supplier invoice, we accept to have no doc generation at all
439 print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=unsetdoc&token='.newToken().'&value='.$name.'&scan_dir='.$module->scandir.'&label='.urlencode($module->name).'&type=invoice_supplier"" alt="'.$langs->trans("Disable").'">'.img_picto($langs->trans("Enabled"), 'on').'</a>';
440 } else {
441 print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=setdoc&token='.newToken().'&value='.$name.'&scan_dir='.$module->scandir.'&label='.urlencode($module->name).'&type=invoice_supplier"" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"), 'off').'</a>';
442 }
443 print '</td>';
444
445 // Info
446 $htmltooltip = ''.$langs->trans("Name").': '.$module->name;
447 $htmltooltip .= '<br>'.$langs->trans("Type").': '.($module->type ? $module->type : $langs->trans("Unknown"));
448 $htmltooltip .= '<br>'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur;
449 $htmltooltip .= '<br>'.$langs->trans("Path").': '.preg_replace('/^\//', '', $realpath).'/'.$file;
450
451 $htmltooltip .= '<br><br><u>'.$langs->trans("FeaturesSupported").':</u>';
452 $htmltooltip .= '<br>'.$langs->trans("Logo").': '.yn($module->option_logo, 1, 1);
453 $htmltooltip .= '<br>'.$langs->trans("PaymentMode").': '.yn($module->option_modereg, 1, 1);
454 $htmltooltip .= '<br>'.$langs->trans("PaymentConditions").': '.yn($module->option_condreg, 1, 1);
455 print '<td class="center">';
456 print $form->textwithpicto('', $htmltooltip, 1, 'info');
457 print '</td>';
458 print '<td class="center">';
459 print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.urlencode($name).'">'.img_object($langs->trans("Preview"), 'pdf').'</a>';
460 print '</td>';
461
462 print "</tr>\n";
463 }
464 }
465
466 closedir($handle);
467 }
468 }
469}
470
471print '</table></div><br>';
472
473/*
474 * Other options
475 */
476
477print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
478print '<input type="hidden" name="token" value="'.newToken().'">';
479print '<input type="hidden" name="action" value="set_SUPPLIER_INVOICE_FREE_TEXT">';
480
481print load_fiche_titre($langs->trans("OtherOptions"), '', '');
482
483print '<div class="div-table-responsive-no-min">';
484print '<table class="noborder centpercent">';
485print '<tr class="liste_titre">';
486print '<td>'.$langs->trans("Parameter").'</td>';
487print '<td></td>';
488print '<td width="80">&nbsp;</td>';
489print "</tr>\n";
490
491$substitutionarray = pdf_getSubstitutionArray($langs, null, null, 2);
492$substitutionarray['__(AnyTranslationKey)__'] = $langs->trans("Translation");
493$htmltext = '<i>'.$langs->trans("AvailableVariables").':<br>';
494foreach ($substitutionarray as $key => $val) {
495 $htmltext .= $key.'<br>';
496}
497$htmltext .= '</i>';
498
499print '<tr class="oddeven"><td colspan="2">';
500print $form->textwithpicto($langs->trans("FreeLegalTextOnInvoices"), $langs->trans("AddCRIfTooLong").'<br><br>'.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'<br>';
501$variablename = 'SUPPLIER_INVOICE_FREE_TEXT';
502if (!getDolGlobalString('PDF_ALLOW_HTML_FOR_FREE_TEXT')) {
503 print '<textarea name="'.$variablename.'" class="flat" cols="120">'.getDolGlobalString($variablename).'</textarea>';
504} else {
505 include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
506 $doleditor = new DolEditor($variablename, getDolGlobalString($variablename), '', 80, 'dolibarr_notes');
507 print $doleditor->Create();
508}
509print '</td><td class="right">';
510print '<input type="submit" class="button button-edit" value="'.$langs->trans("Modify").'">';
511print "</td></tr>\n";
512
513// Allow external download
514print '<tr class="oddeven">';
515print '<td>'.$langs->trans("AllowExternalDownload").'</td>';
516print '<td class="left" colspan="2">';
517print ajax_constantonoff('SUPPLIER_INVOICE_ALLOW_EXTERNAL_DOWNLOAD', array(), null, 0, 0, 0, 2, 0, 1);
518print '</td></tr>';
519
520// Notifications
521print '<tr class="oddeven">';
522print '<td>'.img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("Notifications").'</td>';
523print '<td colspan="2">';
524print $langs->trans("YouMayFindNotificationsFeaturesIntoModuleNotification");
525print '</td></tr>';
526
527// More PDF options
528/*
529print '<tr class="oddeven">';
530print '<td>'.img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("MoreOptionsRelatedToPDF").'</td>';
531print '<td colspan="2">';
532print img_picto('', 'url', 'class="pictofixedwidth"').'<a href="'.DOL_URL_ROOT.'/admin/pdf_other.php">'.$langs->trans("SeeInPDFSetupPage").'</a>';
533print '</td></tr>';
534*/
535
536print '</table></div><br>';
537
538print '</form>';
539
540print '</table>';
541print '</div>';
542
543// End of page
544llxFooter();
545$db->close();
addDocumentModel($name, $type, $label='', $description='')
Add document model used by doc generator.
dolibarr_set_const($db, $name, $value, $type='chaine', $visible=0, $note='', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
dolibarr_del_const($db, $name, $entity=1)
Delete a constant.
delDocumentModel($name, $type)
Delete document model used by doc generator.
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
Definition wrapper.php:91
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Definition wrapper.php:73
Class to manage a WYSIWYG editor.
Class to manage suppliers invoices.
Class to manage generation of HTML components Only common components must be here.
Class to manage suppliers.
Class to manage third parties objects (customers, suppliers, prospects...)
global $mysoc
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $conf
The main.inc.php has been included so the following variable are now defined:
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $db
API class for accounts.
supplierorder_admin_prepare_head()
Return array head with list of tabs to view object information.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $allowothertags=array())
Show a picto called object_picto (generic function)
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
yn($yesno, $format=1, $color=0)
Return yes or no in current language.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
pdf_getSubstitutionArray($outputlangs, $exclude=null, $object=null, $onlykey=0, $include=null)
Return array of possible substitutions for PDF content (without external module substitutions).
Definition pdf.lib.php:1135
$conf db name
Only used if Module[ID]Name translation string is not found.
Definition repair.php:133
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
supplier_invoice_admin_prepare_head()
Prepare array with list of tabs.