25 require
'../main.inc.php';
27 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
28 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
29 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
30 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
31 require_once DOL_DOCUMENT_ROOT.
'/mrp/class/mo.class.php';
32 require_once DOL_DOCUMENT_ROOT.
'/mrp/lib/mrp_mo.lib.php';
33 require_once DOL_DOCUMENT_ROOT.
'/bom/class/bom.class.php';
36 $langs->loadLangs(array(
"mrp",
"other"));
41 $action =
GETPOST(
'action',
'aZ09');
42 $confirm =
GETPOST(
'confirm',
'alpha');
43 $cancel =
GETPOST(
'cancel',
'aZ09');
44 $contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'mocard';
45 $backtopage =
GETPOST(
'backtopage',
'alpha');
46 $backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
50 $object =
new Mo($db);
51 $objectbom =
new BOM($db);
53 $diroutputmassaction = $conf->mrp->dir_output.
'/temp/massgeneration/'.$user->id;
54 $hookmanager->initHooks(array(
'mocard',
'globalcard'));
57 $extrafields->fetch_name_optionals_label($object->table_element);
59 $search_array_options = $extrafields->getOptionalsFromPost($object->table_element,
'',
'search_');
62 $search_all =
GETPOST(
"search_all",
'alpha');
64 foreach ($object->fields as $key => $val)
66 if (
GETPOST(
'search_'.$key,
'alpha')) $search[$key] =
GETPOST(
'search_'.$key,
'alpha');
69 if (empty($action) && empty($id) && empty($ref)) $action =
'view';
72 include DOL_DOCUMENT_ROOT.
'/core/actions_fetchobject.inc.php';
76 $objectbom->fetch(
GETPOST(
'fk_bom',
'int'));
78 if ($action !=
'add') {
80 $_POST[
'fk_product'] = $objectbom->fk_product;
81 $_POST[
'qty'] = $objectbom->qty;
82 $_POST[
'fk_warehouse'] = $objectbom->fk_warehouse;
83 $_POST[
'note_private'] = $objectbom->note_private;
90 $isdraft = (($object->status == $object::STATUS_DRAFT) ? 1 : 0);
91 $result =
restrictedArea($user,
'mrp', $object->id,
'mrp_mo',
'',
'fk_soc',
'rowid', $isdraft);
93 $permissionnote = $user->rights->mrp->write;
94 $permissiondellink = $user->rights->mrp->write;
95 $permissiontoadd = $user->rights->mrp->write;
96 $permissiontodelete = $user->rights->mrp->delete || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_DRAFT);
97 $upload_dir = $conf->mrp->multidir_output[isset($object->entity) ? $object->entity : 1];
104 $parameters = array();
105 $reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
106 if ($reshook < 0)
setEventMessages($hookmanager->error, $hookmanager->errors,
'errors');
114 if (empty($backtopage) || ($cancel && empty($id))) {
115 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
116 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) $backtopage = $backurlforlist;
117 else $backtopage = DOL_URL_ROOT.
'/mrp/mo_card.php?id='.($id > 0 ? $id :
'__ID__');
120 if ($cancel && !empty($backtopageforcancel)) {
121 $backtopage = $backtopageforcancel;
124 $triggermodname =
'MRP_MO_MODIFY';
127 include DOL_DOCUMENT_ROOT.
'/core/actions_addupdatedelete.inc.php';
130 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
133 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
136 $triggersendname =
'MO_SENTBYMAIL';
137 $autocopy =
'MAIN_MAIL_AUTOCOPY_MO_TO';
138 $trackid =
'mo'.$object->id;
139 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
144 if ($action ==
'set_thirdparty' && $permissiontoadd)
146 $object->setValueFrom(
'fk_soc',
GETPOST(
'fk_soc',
'int'),
'',
'',
'date',
'', $user,
'MO_MODIFY');
148 if ($action ==
'classin' && $permissiontoadd)
150 $object->setProject(
GETPOST(
'projectid',
'int'));
154 if ($action ==
'confirm_produced' && $confirm ==
'yes' && $permissiontoadd)
156 $result = $object->setStatut($object::STATUS_PRODUCED, 0,
'',
'MRP_MO_PRODUCED');
160 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
162 $outputlangs = $langs;
164 if ($conf->global->MAIN_MULTILANGS && empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) $newlang =
GETPOST(
'lang_id',
'aZ09');
165 if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang;
166 if (!empty($newlang)) {
168 $outputlangs->setDefaultLang($newlang);
170 $model = $object->model_pdf;
171 $ret = $object->fetch($id);
173 $object->generateDocument($model, $outputlangs, 0, 0, 0);
188 $form =
new Form($db);
195 print '<script type="text/javascript" language="javascript">
196 jQuery(document).ready(function() {
197 function init_myfunc()
199 jQuery("#myid").removeAttr(\'disabled\');
200 jQuery("#myid").attr(\'disabled\',\'disabled\');
203 jQuery("#mybutton").click(function() {
211 if ($action ==
'create')
213 print
load_fiche_titre($langs->trans(
"NewObject", $langs->transnoentitiesnoconv(
"Mo")),
'',
'mrp');
215 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
216 print
'<input type="hidden" name="token" value="'.newToken().
'">';
217 print
'<input type="hidden" name="action" value="add">';
218 if ($backtopage) print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
219 if ($backtopageforcancel) print
'<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.
'">';
223 print
'<table class="border centpercent tableforfieldcreate">'.
"\n";
226 include DOL_DOCUMENT_ROOT.
'/core/tpl/commonfields_add.tpl.php';
229 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_add.tpl.php';
231 print
'</table>'.
"\n";
237 $(document).ready(
function () {
238 jQuery(
'#fk_bom').change(
function() {
239 console.log(
'We change value of BOM with BOM of id '+jQuery(
'#fk_bom').val());
240 if (jQuery(
'#fk_bom').val() > 0)
243 window.location.href =
'<?php echo $_SERVER["PHP_SELF"] ?>?action=create&fk_bom='+jQuery(
'#fk_bom').val();
269 else if (jQuery(
'#fk_bom').val() < 0) {
271 console.log(jQuery(
'#fk_product').val());
272 window.location.href =
'<?php echo $_SERVER["PHP_SELF"] ?>?action=create&qty='+jQuery(
'#qty').val()+
'&fk_product='+jQuery(
'#fk_product').val()+
'&label='+jQuery(
'#label').val()+
'&fk_project='+jQuery(
'#fk_project').val()+
'&fk_warehouse='+jQuery(
'#fk_warehouse').val();
290 print
'<div class="center">';
291 print
'<input type="submit" class="button" name="add" value="'.dol_escape_htmltag($langs->trans(
"Create")).
'">';
293 print
'<input type="'.($backtopage ?
"submit" :
"button").
'" class="button button-cancel" name="cancel" value="'.
dol_escape_htmltag($langs->trans(
"Cancel")).
'"'.($backtopage ?
'' :
' onclick="javascript:history.go(-1)"').
'>';
296 if (
GETPOST(
'fk_bom',
'int') > 0) {
299 print
'<div class="div-table-responsive-no-min">';
300 print
'<table class="noborder centpercent">';
302 $object->lines = $objectbom->lines;
303 $object->bom = $objectbom;
305 $object->printOriginLinesList(
'', array());
315 if (($id || $ref) && $action ==
'edit')
319 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
320 print
'<input type="hidden" name="token" value="'.newToken().
'">';
321 print
'<input type="hidden" name="action" value="update">';
322 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
323 if ($backtopage) print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
324 if ($backtopageforcancel) print
'<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.
'">';
328 $object->fields[
'fk_bom'][
'disabled'] = 1;
330 print
'<table class="border centpercent tableforfieldedit">'.
"\n";
333 include DOL_DOCUMENT_ROOT.
'/core/tpl/commonfields_edit.tpl.php';
336 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_edit.tpl.php';
342 print
'<div class="center"><input type="submit" class="button button-save" name="save" value="'.$langs->trans(
"Save").
'">';
343 print
' <input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
350 if ($object->id > 0 && (empty($action) || ($action !=
'edit' && $action !=
'create')))
352 $res = $object->fetch_thirdparty();
353 $res = $object->fetch_optionals();
357 print
dol_get_fiche_head($head,
'card', $langs->trans(
"ManufacturingOrder"), -1, $object->picto);
362 if ($action ==
'delete')
364 $formconfirm = $form->formconfirm(
$_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'DeleteMo'), $langs->trans(
'ConfirmDeleteMo'),
'confirm_delete',
'', 0, 1);
367 if ($action ==
'deleteline')
369 $formconfirm = $form->formconfirm(
$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteLine'), $langs->trans(
'ConfirmDeleteLine'),
'confirm_deleteline',
'', 0, 1);
373 if ($action ==
'validate')
376 $ref = substr($object->ref, 1, 4);
377 if ($ref ==
'PROV') {
378 $object->fetch_product();
379 $numref = $object->getNextNumRef($object->fk_product);
381 $numref = $object->ref;
384 $text = $langs->trans(
'ConfirmValidateMo', $numref);
393 $formquestion = array();
394 if (!empty($conf->mrp->enabled))
397 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
400 if ($conf->browser->name ==
'ie') $forcecombo = 1;
401 $formquestion = array(
408 $formconfirm = $form->formconfirm(
$_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'Validate'), $text,
'confirm_validate', $formquestion, 0, 1, 220);
412 if ($action ==
'clone') {
414 $formquestion = array();
415 $formconfirm = $form->formconfirm(
$_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneMo', $object->ref),
'confirm_clone', $formquestion,
'yes', 1);
419 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
420 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
421 if (empty($reshook)) $formconfirm .= $hookmanager->resPrint;
422 elseif ($reshook > 0) $formconfirm = $hookmanager->resPrint;
430 $linkback = '<a href="'.
dol_buildpath('/mrp/mo_list.php', 1).'?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
432 $morehtmlref = '<div class="refidno">';
438 $morehtmlref .= $langs->trans('ThirdParty').' ';
439 $morehtmlref .= ': '.(is_object($object->thirdparty) ? $object->thirdparty->getNomUrl(1) : '');
441 if (!empty($conf->projet->enabled))
443 $langs->load(
"projects");
444 $morehtmlref .=
'<br>'.$langs->trans(
'Project').
' ';
445 if ($permissiontoadd)
447 if ($action !=
'classify')
448 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> : ';
449 if ($action ==
'classify') {
451 $morehtmlref .=
'<form method="post" action="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'">';
452 $morehtmlref .=
'<input type="hidden" name="action" value="classin">';
453 $morehtmlref .=
'<input type="hidden" name="token" value="'.newToken().
'">';
454 $morehtmlref .= $formproject->select_projects($object->fk_soc, $object->fk_project,
'projectid', 0, 0, 1, 0, 1, 0, 0,
'', 1);
455 $morehtmlref .=
'<input type="submit" class="button valignmiddle" value="'.$langs->trans(
"Modify").
'">';
456 $morehtmlref .=
'</form>';
458 $morehtmlref .= $form->form_project(
$_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->fk_soc, $object->fk_project,
'none', 0, 0, 0, 1);
461 if (!empty($object->fk_project)) {
463 $proj->fetch($object->fk_project);
464 $morehtmlref .=
' : '.$proj->getNomUrl();
470 $morehtmlref .=
'</div>';
473 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
476 print
'<div class="fichecenter">';
477 print
'<div class="fichehalfleft">';
478 print
'<div class="underbanner clearboth"></div>';
479 print
'<table class="border centpercent tableforfield">'.
"\n";
482 $keyforbreak =
'fk_warehouse';
483 unset($object->fields[
'fk_project']);
484 unset($object->fields[
'fk_soc']);
485 include DOL_DOCUMENT_ROOT.
'/core/tpl/commonfields_view.tpl.php';
488 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
494 print
'<div class="clearboth"></div>';
503 if (!empty($object->table_element_line))
507 $object->fetchLines();
509 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.(($action !=
'editline') ?
'#addline' :
'#line_'.
GETPOST(
'lineid',
'int')).
'" method="POST">
510 <input type="hidden" name="token" value="' .
newToken().
'">
511 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">
512 <input type="hidden" name="mode" value="">
513 <input type="hidden" name="id" value="' . $object->id.
'">
520 if (!empty($object->lines))
522 print
'<div class="div-table-responsive-no-min">';
523 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
525 print
'<tr class="liste_titre">';
526 print
'<td class="liste_titre">'.$langs->trans(
"Summary").
'</td>';
530 print
'<tr class="oddeven">';
531 print
'<td>'.$langs->trans(
"ProductsToConsume").
'</td>';
533 if (!empty($object->lines))
536 foreach ($object->lines as $line) {
537 if ($line->role ==
'toconsume') {
539 $tmpproduct =
new Product($db);
540 $tmpproduct->fetch($line->fk_product);
541 print $tmpproduct->getNomUrl(1);
549 print
'<tr class="oddeven">';
550 print
'<td>'.$langs->trans(
"ProductsToProduce").
'</td>';
552 if (!empty($object->lines))
555 foreach ($object->lines as $line) {
556 if ($line->role ==
'toproduce') {
558 $tmpproduct =
new Product($db);
559 $tmpproduct->fetch($line->fk_product);
560 print $tmpproduct->getNomUrl(1);
578 if ($action !=
'presend' && $action !=
'editline') {
579 print
'<div class="tabsAction">'.
"\n";
580 $parameters = array();
581 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
582 if ($reshook < 0)
setEventMessages($hookmanager->error, $hookmanager->errors,
'errors');
592 if ($object->status == $object::STATUS_VALIDATED)
594 if ($permissiontoadd)
597 print
'<a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&action=confirm_setdraft&confirm=yes">'.$langs->trans(
"SetToDraft").
'</a>';
602 if ($object->status == $object::STATUS_DRAFT) {
603 if ($permissiontoadd)
605 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=edit">'.$langs->trans(
"Modify").
'</a>'.
"\n";
607 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotEnoughPermissions")).
'">'.$langs->trans(
'Modify').
'</a>'.
"\n";
612 if ($object->status == $object::STATUS_DRAFT)
614 if ($permissiontoadd)
616 if (empty($object->table_element_line) || (is_array($object->lines) && count($object->lines) > 0))
618 print
'<a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&action=validate">'.$langs->trans(
"Validate").
'</a>';
620 $langs->load(
"errors");
621 print
'<a class="butActionRefused" href="" title="'.$langs->trans(
"ErrorAddAtLeastOneLineFirst").
'">'.$langs->trans(
"Validate").
'</a>';
627 if ($permissiontoadd)
629 print
'<a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&socid='.$object->fk_soc.
'&action=clone&object=mo">'.$langs->trans(
"ToClone").
'</a>';
633 if ($permissiontoadd)
635 if ($object->status == $object::STATUS_VALIDATED || $object->status == $object::STATUS_INPROGRESS)
637 $arrayproduced = $object->fetchLinesLinked(
'produced', 0);
639 foreach ($arrayproduced as $lineproduced) {
640 $nbProduced += $lineproduced[
'qty'];
642 if ($nbProduced > 0) {
643 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=confirm_produced&confirm=yes">'.$langs->trans(
"Close").
'</a>'.
"\n";
645 print
'<a class="butActionRefused" href="#" title="'.$langs->trans(
"GoOnTabProductionToProduceFirst", $langs->transnoentitiesnoconv(
"Production")).
'">'.$langs->trans(
"Close").
'</a>'.
"\n";
648 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=confirm_close&confirm=yes">'.$langs->trans(
"Cancel").
'</a>'.
"\n";
651 if ($object->status == $object::STATUS_PRODUCED || $object->status == $object::STATUS_CANCELED)
653 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=confirm_reopen&confirm=yes">'.$langs->trans(
"ReOpen").
'</a>'.
"\n";
658 if ($permissiontodelete || ($object->status == $object::STATUS_DRAFT && $permissiontoadd))
660 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=delete&token='.
newToken().
'">'.$langs->trans(
'Delete').
'</a>'.
"\n";
662 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotEnoughPermissions")).
'">'.$langs->trans(
'Delete').
'</a>'.
"\n";
670 if (
GETPOST(
'modelselected')) {
674 if ($action !=
'presend')
676 print
'<div class="fichecenter"><div class="fichehalfleft">';
677 print
'<a name="builddoc"></a>';
681 $relativepath = $objref.
'/'.$objref.
'.pdf';
682 $filedir = $conf->mrp->dir_output.
'/'.$objref;
683 $urlsource =
$_SERVER[
"PHP_SELF"].
"?id=".$object->id;
684 $genallowed = $user->rights->mrp->read;
685 $delallowed = $user->rights->mrp->create;
686 print $formfile->showdocuments(
'mrp:mo', $objref, $filedir, $urlsource, $genallowed, $delallowed, $object->model_pdf, 1, 0, 0, 28, 0,
'',
'',
'', $mysoc->default_lang);
689 $linktoelem = $form->showLinkToObjectBlock($object, null, array(
'mo'));
690 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
693 print
'</div><div class="fichehalfright"><div class="ficheaddleft">';
697 $morehtmlright =
'<a href="'.dol_buildpath(
'/mrp/mo_agenda.php', 1).
'?id='.$object->id.
'">';
698 $morehtmlright .= $langs->trans(
"SeeAll");
699 $morehtmlright .=
'</a>';
702 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
704 $somethingshown =
$formactions->showactions($object,
'mo', $socid, 1,
'', $MAXEVENT,
'', $morehtmlright);
706 print
'</div></div></div>';
710 if (
GETPOST(
'modelselected')) $action =
'presend';
714 $defaulttopic =
'InformationMessage';
715 $diroutput = $conf->mrp->dir_output;
716 $trackid =
'mo'.$object->id;
718 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
GETPOST($paramname, $check= 'alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
img_edit($titlealt= 'default', $float=0, $other= '')
Show logo editer/modifier fiche.
if(preg_match('/set_([a-z0-9_\-]+)/i', $action, $reg)) if(preg_match('/del_([a-z0-9_\-]+)/i', $action, $reg)) if($action== 'set') elseif($action== 'specimen') elseif($action== 'setmodel') elseif($action== 'del') elseif($action== 'setdoc') $formactions
View.
Class to manage products or services.
moPrepareHead($object)
Prepare array of tabs for Mo.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
setEventMessages($mesg, $mesgs, $style= 'mesgs', $messagekey= '')
Set event messages in dol_events session object.
Class to manage projects.
load_fiche_titre($titre, $morehtmlright= '', $picto= 'generic', $pictoisfullpath=0, $id= '', $morecssontable= '', $morehtmlcenter= '')
Load a title with picto.
restrictedArea($user, $features, $objectid=0, $tableandshare= '', $feature2= '', $dbt_keyfield= 'fk_soc', $dbt_select= 'rowid', $isdraft=0)
Check permissions of a user to show a page and an object.
Class to manage translations.
dol_sanitizeFileName($str, $newstr= '_', $unaccent=1)
Clean a string to use it as a file name.
print $_SERVER["PHP_SELF"]
Edit parameters.
dol_get_fiche_head($links=array(), $active= '', $title= '', $notab=0, $picto= '', $pictoisfullpath=0, $morehtmlright= '', $morecss= '', $limittoshow=0, $moretabssuffix= '')
Show tabs of a record.
print
Draft customers invoices.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_banner_tab($object, $paramid, $morehtml= '', $shownav=1, $fieldid= 'rowid', $fieldref= 'ref', $morehtmlref= '', $moreparam= '', $nodbprefix=0, $morehtmlleft= '', $morehtmlstatus= '', $onlybanner=0, $morehtmlright= '')
Show tab footer of a card.
if(!defined('CSRFCHECK_WITH_TOKEN')) define('CSRFCHECK_WITH_TOKEN'
Draft customers invoices.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $keepmoretags= '', $escapeonlyhtmltags=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields...