35require
'../../main.inc.php';
36require_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_order/modules_commandefournisseur.php';
37require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
38require_once DOL_DOCUMENT_ROOT.
'/core/lib/fourn.lib.php';
39require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
40require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.dispatch.class.php';
41require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
42require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/mouvementstock.class.php';
43require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/productlot.class.php';
45if (isModEnabled(
'project')) {
46 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
58$langs->loadLangs(array(
"bills",
"orders",
"sendings",
"companies",
"deliveries",
"products",
"stocks",
"receptions"));
60if (isModEnabled(
'productbatch')) {
61 $langs->load(
'productbatch');
68$action =
GETPOST(
'action',
'aZ09');
69$fk_default_warehouse =
GETPOSTINT(
'fk_default_warehouse');
70$cancel =
GETPOST(
'cancel',
'alpha');
71$confirm =
GETPOST(
'confirm',
'alpha');
74 $socid = $user->socid;
77$hookmanager->initHooks(array(
'ordersupplierdispatch'));
81if (GETPOSTISSET(
"projectid")) {
87if ($id > 0 || !empty($ref)) {
88 $result =
$object->fetch($id, $ref);
92 $result =
$object->fetch_thirdparty();
98if (empty(
$conf->reception->enabled)) {
99 $permissiontoreceive = $user->hasRight(
"fournisseur",
"commande",
"receptionner");
100 $permissiontocontrol = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
"fournisseur",
"commande",
"receptionner")) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
"fournisseur",
"commande_advance",
"check")));
102 $permissiontoreceive = $user->hasRight(
"reception",
"creer");
103 $permissiontocontrol = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
"reception",
"creer")) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
"reception",
"reception_advance",
"validate")));
107$result =
restrictedArea($user,
'fournisseur', $object,
'commande_fournisseur',
'commande');
109if (!isModEnabled(
'stock')) {
113$usercancreate = ($user->hasRight(
"fournisseur",
"commande",
"creer") || $user->hasRight(
"supplier_order",
"creer"));
114$permissiontoadd = $usercancreate;
123$parameters = array();
124$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
129if ($action ==
'checkdispatchline' && $permissiontocontrol) {
134 $result = $supplierorderdispatch->fetch($lineid);
137 setEventMessages($supplierorderdispatch->error, $supplierorderdispatch->errors,
'errors');
142 $result = $supplierorderdispatch->setStatut(1);
144 setEventMessages($supplierorderdispatch->error, $supplierorderdispatch->errors,
'errors');
151 $result =
$object->calcAndSetStatusDispatch($user);
165if ($action ==
'uncheckdispatchline' && $permissiontocontrol) {
170 $result = $supplierorderdispatch->fetch($lineid);
173 setEventMessages($supplierorderdispatch->error, $supplierorderdispatch->errors,
'errors');
178 $result = $supplierorderdispatch->setStatut(0);
180 setEventMessages($supplierorderdispatch->error, $supplierorderdispatch->errors,
'errors');
186 $result =
$object->calcAndSetStatusDispatch($user);
200if ($action ==
'denydispatchline' && $permissiontocontrol) {
205 $result = $supplierorderdispatch->fetch($lineid);
208 setEventMessages($supplierorderdispatch->error, $supplierorderdispatch->errors,
'errors');
213 $result = $supplierorderdispatch->setStatut(2);
215 setEventMessages($supplierorderdispatch->error, $supplierorderdispatch->errors,
'errors');
221 $result =
$object->calcAndSetStatusDispatch($user);
235$saveprice =
"savepriceIsNotSet";
236if ($action ==
'dispatch' && $permissiontoreceive) {
242 foreach ($_POST as $key => $value) {
245 if (preg_match(
'/^product_([0-9]+)_([0-9]+)$/i', $key, $reg)) {
250 $prod =
"product_".$reg[1].
'_'.$reg[2];
251 $qty =
"qty_".$reg[1].
'_'.$reg[2];
252 $ent =
"entrepot_".$reg[1].
'_'.$reg[2];
254 $ent = $fk_default_warehouse;
256 $pu =
"pu_".$reg[1].
'_'.$reg[2];
257 $fk_commandefourndet =
"fk_commandefourndet_".$reg[1].
'_'.$reg[2];
260 if (!isModEnabled(
"multicurrency") && empty(
$conf->dynamicprices->enabled)) {
261 $dto =
GETPOSTINT(
"dto_".$reg[1].
'_'.$reg[2]);
263 $unit_price =
price2num((
float)
GETPOST(
"pu_".$reg[1]) * (100 - $dto) / 100,
'MU');
265 $saveprice =
"saveprice_".$reg[1].
'_'.$reg[2];
272 if ($qtytomove != 0) {
274 dol_syslog(
'No dispatch for line '.$key.
' as no warehouse was chosen.');
275 $text = $langs->transnoentities(
'Warehouse').
', '.$langs->transnoentities(
'Line').
' '.($numline);
276 setEventMessages($langs->trans(
'ErrorFieldRequired', $text),
null,
'errors');
281 $result =
$object->dispatchProduct($user,
GETPOSTINT($prod), $qtytomove,
GETPOSTINT($ent), $puformove,
GETPOST(
'comment'),
'',
'',
'',
GETPOSTINT($fk_commandefourndet), $notrigger);
287 if (!$error &&
getDolGlobalString(
'SUPPLIER_ORDER_CAN_UPDATE_BUYINGPRICE_DURING_RECEIPT')) {
288 if (!isModEnabled(
"multicurrency") && empty(
$conf->dynamicprices->enabled)) {
295 if (GETPOSTISSET($saveprice)) {
297 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"product_fournisseur_price";
298 $sql .=
" SET unitprice='".price2num(
GETPOST($pu),
'MU').
"'";
299 $sql .=
", price=".price2num(
GETPOST($pu),
'MU').
"*quantity";
300 $sql .=
", remise_percent = ".((float) $dto);
301 $sql .=
" WHERE fk_soc=".((int)
$object->socid);
302 $sql .=
" AND fk_product=".(GETPOSTINT($prod));
304 $resql = $db->query($sql);
312 if (preg_match(
'/^product_batch_([0-9]+)_([0-9]+)$/i', $key, $reg)) {
318 $prod =
'product_batch_'.$reg[1].
'_'.$reg[2];
319 $qty =
'qty_'.$reg[1].
'_'.$reg[2];
320 $ent =
'entrepot_'.$reg[1].
'_'.$reg[2];
321 $pu =
'pu_'.$reg[1].
'_'.$reg[2];
322 $fk_commandefourndet =
'fk_commandefourndet_'.$reg[1].
'_'.$reg[2];
323 $lot =
'lot_number_'.$reg[1].
'_'.$reg[2];
327 $fk_commandefourndet =
'fk_commandefourndet_'.$reg[1].
'_'.$reg[2];
330 if (!isModEnabled(
"multicurrency") && empty(
$conf->dynamicprices->enabled)) {
331 $dto =
GETPOSTINT(
"dto_".$reg[1].
'_'.$reg[2]);
333 $unit_price =
price2num((
float)
GETPOST(
"pu_".$reg[1]) * (100 - $dto) / 100,
'MU');
335 $saveprice =
"saveprice_".$reg[1].
'_'.$reg[2];
342 if ($qtytomove > 0) {
346 dol_syslog(
'No dispatch for line '.$key.
' as no warehouse was chosen.');
347 $text = $langs->transnoentities(
'Warehouse').
', '.$langs->transnoentities(
'Line').
' '.($numline).
'-'.((
int) $reg[1] + 1);
348 setEventMessages($langs->trans(
'ErrorFieldRequired', $text),
null,
'errors');
361 if (!
GETPOST($lot,
'alpha') && !$dDLUO && !$dDLC) {
362 dol_syslog(
'No dispatch for line '.$key.
' as serial/eat-by/sellby date are not set');
363 $text = $langs->transnoentities(
'atleast1batchfield').
', '.$langs->transnoentities(
'Line').
' '.($numline).
'-'.((
int) $reg[1] + 1);
364 setEventMessages($langs->trans(
'ErrorFieldRequired', $text),
null,
'errors');
369 $result =
$object->dispatchProduct($user, $productId, $qtytomove,
GETPOSTINT($ent), $puformove,
GETPOST(
'comment'), $dDLUO, $dDLC,
GETPOST($lot,
'alpha'),
GETPOSTINT($fk_commandefourndet), $notrigger);
375 if (!$error &&
getDolGlobalString(
'SUPPLIER_ORDER_CAN_UPDATE_BUYINGPRICE_DURING_RECEIPT')) {
376 if (!isModEnabled(
"multicurrency") && empty(
$conf->dynamicprices->enabled)) {
377 $dto =
GETPOSTINT(
"dto_".$reg[1].
'_'.$reg[2]);
379 if (GETPOSTISSET($saveprice)) {
381 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"product_fournisseur_price";
382 $sql .=
" SET unitprice = ".price2num(
GETPOST($pu),
'MU', 2);
383 $sql .=
", price = ".price2num(
GETPOST($pu),
'MU', 2).
" * quantity";
384 $sql .=
", remise_percent = ".price2num((empty($dto) ? 0 : $dto), 3, 2).
"'";
385 $sql .=
" WHERE fk_soc = ".((int)
$object->socid);
386 $sql .=
" AND fk_product=".((int) $productId);
388 $resql = $db->query($sql);
398 $result =
$object->calcAndSetStatusDispatch($user,
GETPOST(
'closeopenorder') ? 1 : 0,
GETPOST(
'comment'));
405 if ($result >= 0 && !$error) {
410 header(
"Location: dispatch.php?id=".$id);
425if ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $permissiontoreceive) {
429 $result = $supplierorderdispatch->fetch($lineid);
431 $qty = $supplierorderdispatch->qty;
432 $entrepot = $supplierorderdispatch->fk_entrepot;
433 $product = $supplierorderdispatch->fk_product;
435 $comment = $supplierorderdispatch->comment;
436 $eatby = $supplierorderdispatch->eatby;
437 $sellby = $supplierorderdispatch->sellby;
438 $batch = $supplierorderdispatch->batch;
440 $result = $supplierorderdispatch->delete($user);
447 if ($entrepot > 0 && isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER') && empty($supplierorderdispatch->fk_reception)) {
452 $result = $mouv->livraison($user, $product, $entrepot, $qty, $price, $comment,
'', $eatby, $sellby, $batch);
454 $errors = $mouv->errors;
469if ($action ==
'updateline' && $permissiontoreceive && empty($cancel)) {
473 $result = $supplierorderdispatch->fetch($lineid);
475 $qty = $supplierorderdispatch->qty;
476 $entrepot = $supplierorderdispatch->fk_entrepot;
477 $product = $supplierorderdispatch->fk_product;
479 $comment = $supplierorderdispatch->comment;
480 $eatby = $supplierorderdispatch->eatby;
481 $sellby = $supplierorderdispatch->sellby;
482 $batch = $supplierorderdispatch->batch;
484 $supplierorderdispatch->qty =
GETPOSTFLOAT(
'qty',
'MS');
485 $supplierorderdispatch->fk_entrepot =
GETPOSTINT(
'fk_entrepot');
486 $result = $supplierorderdispatch->update($user);
490 $errors = $supplierorderdispatch->errors;
493 if ($entrepot > 0 && isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER')) {
498 $result = $mouv->livraison($user, $product, $entrepot, $qty, $price, $comment,
'', $eatby, $sellby, $batch);
500 $errors = $mouv->errors;
504 $result = $mouv->reception($user, $product, $supplierorderdispatch->fk_entrepot, $supplierorderdispatch->qty, $price, $comment, $eatby, $sellby, $batch);
506 $errors = $mouv->errors;
528$form =
new Form($db);
530$warehouse_static =
new Entrepot($db);
533$title =
$object->ref.
" - ".$langs->trans(
'OrderDispatch');
534$help_url =
'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores';
535$morejs = array(
'/fourn/js/lib_dispatch.js.php');
537llxHeader(
'', $title, $help_url,
'', 0, 0, $morejs,
'',
'',
'mod-supplier-order page-card_dispatch');
539if ($id > 0 || !empty($ref)) {
543 $author =
new User($db);
544 $author->fetch(
$object->user_author_id);
548 $title = $langs->trans(
"SupplierOrder");
554 if ($action ==
'ask_deleteline') {
555 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteLine'), $langs->trans(
'ConfirmDeleteLine'),
'confirm_deleteline',
'', 0, 1);
559 $parameters = array(
'lineid' => $lineid);
561 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
562 if (empty($reshook)) {
563 $formconfirm .= $hookmanager->resPrint;
564 } elseif ($reshook > 0) {
565 $formconfirm = $hookmanager->resPrint;
573 $linkback =
'<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php'.(!empty($socid) ?
'?socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
575 $morehtmlref =
'<div class="refidno">';
577 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, 0,
'string',
'', 0, 1);
578 $morehtmlref .= $form->editfieldval(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, 0,
'string',
'',
null,
null,
'', 1);
580 $morehtmlref .=
'<br>'.$object->thirdparty->getNomUrl(1);
582 if (isModEnabled(
'project')) {
583 $langs->load(
"projects");
584 $morehtmlref .=
'<br>';
586 $caneditproject =
false;
587 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
588 if ($action !=
'classify' && $caneditproject) {
589 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
591 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (!
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS') ?
$object->socid : -1),
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
593 if (!empty(
$object->fk_project)) {
595 $proj->fetch(
$object->fk_project);
596 $morehtmlref .= $proj->getNomUrl(1);
598 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
603 $morehtmlref .=
'</div>';
606 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
609 print
'<div class="fichecenter">';
610 print
'<div class="underbanner clearboth"></div>';
612 print
'<table class="border tableforfield" width="100%">';
615 if (
$object->methode_commande_id > 0) {
616 print
'<tr><td class="titlefield">'.$langs->trans(
"Date").
'</td><td>';
622 if (
$object->methode_commande) {
623 print
'<tr><td>'.$langs->trans(
"Method").
'</td><td>'.
$object->getInputMethod().
'</td></tr>';
628 print
'<tr><td class="titlefield">'.$langs->trans(
"AuthorRequest").
'</td>';
629 print
'<td>'.$author->getNomUrl(1,
'', 0, 0, 0).
'</td>';
632 $parameters = array();
633 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
650 print
'<br><span class="opacitymedium">'.$langs->trans(
"OrderStatusNotReadyToDispatch").
'</span>';
656 $listwarehouses = array();
661 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
663 $formproduct->loadWarehouses();
665 $listwarehouses = $entrepot->list_array(1);
668 if (empty(
$conf->reception->enabled)) {
669 print
'<form method="POST" action="dispatch.php?id='.$object->id.
'">';
671 print
'<form method="post" action="'.dol_buildpath(
'/reception/card.php', 1).
'?originid='.
$object->id.
'&origin=supplierorder">';
674 print
'<input type="hidden" name="token" value="'.newToken().
'">';
675 if (empty(
$conf->reception->enabled)) {
676 print
'<input type="hidden" name="action" value="dispatch">';
678 print
'<input type="hidden" name="action" value="create">';
681 print
'<div class="div-table-responsive-no-min">';
682 print
'<table class="noborder centpercent">';
685 $products_dispatched = array();
686 $sql =
"SELECT l.rowid, cfd.fk_product, sum(cfd.qty) as qty";
687 $sql .=
" FROM ".MAIN_DB_PREFIX.
"receptiondet_batch as cfd";
688 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"commande_fournisseurdet as l on l.rowid = cfd.fk_elementdet";
689 $sql .=
" WHERE cfd.fk_element = ".((int)
$object->id);
690 $sql .=
" GROUP BY l.rowid, cfd.fk_product";
692 $resql = $db->query($sql);
694 $num = $db->num_rows($resql);
699 $objd = $db->fetch_object($resql);
700 $products_dispatched[$objd->rowid] =
price2num($objd->qty,
'MS');
708 $sql =
"SELECT l.rowid, l.fk_product, l.subprice, l.remise_percent, l.ref AS sref, l.qty as qty,";
709 $sql .=
" p.ref, p.label, p.tobatch, p.fk_default_warehouse";
712 $parameters = array();
713 $reshook = $hookmanager->executeHooks(
714 'printFieldListSelect',
722 $sql .= $hookmanager->resPrint;
724 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commande_fournisseurdet as l";
725 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p ON l.fk_product=p.rowid";
726 $sql .=
" WHERE l.fk_commande = ".((int)
$object->id);
728 $sql .=
" AND l.product_type = 0";
732 $parameters = array();
733 $reshook = $hookmanager->executeHooks(
734 'printFieldListWhere',
742 $sql .= $hookmanager->resPrint;
745 $sql .=
" ORDER BY l.rang, p.ref, p.label";
751 $resql = $db->query($sql);
753 $num = $db->num_rows($resql);
757 print
'<tr class="liste_titre">';
759 print
'<td>'.$langs->trans(
"Description").
'</td>';
760 if (isModEnabled(
'productbatch')) {
761 print
'<td class="dispatch_batch_number_title">'.$langs->trans(
"batch_number").
'</td>';
763 print
'<td class="dispatch_dlc_title">'.$langs->trans(
"SellByDate").
'</td>';
766 print
'<td class="dispatch_dluo_title">'.$langs->trans(
"EatByDate").
'</td>';
773 print
'<td class="right">'.$langs->trans(
"SupplierRef").
'</td>';
774 print
'<td class="right">'.$langs->trans(
"QtyOrdered").
'</td>';
775 print
'<td class="right">'.$langs->trans(
"QtyDispatchedShort").
'</td>';
776 print
' <td class="right">'.$langs->trans(
"QtyToDispatchShort");
777 print
'<br><a href="#" id="autoreset">'.img_picto($langs->trans(
"Reset"),
'eraser',
'class="pictofixedwidth opacitymedium"').$langs->trans(
"Reset").
'</a></td>';
778 print
'<td width="32"></td>';
781 if (!isModEnabled(
"multicurrency") && empty(
$conf->dynamicprices->enabled)) {
782 print
'<td class="right">'.$langs->trans(
"Price").
'</td>';
783 print
'<td class="right">'.$langs->trans(
"ReductionShort").
' (%)</td>';
784 print
'<td class="right">'.$langs->trans(
"UpdatePrice").
'</td>';
788 print
'<td align="right">'.$langs->trans(
"Warehouse");
791 if (count($listwarehouses) > 1) {
792 print
'<br>'.$form->selectarray(
'fk_default_warehouse', $listwarehouses, $fk_default_warehouse, $langs->trans(
"ForceTo"), 0, 0,
'', 0, 0, $disabled,
'',
'minwidth100 maxwidth300', 1);
793 } elseif (count($listwarehouses) == 1) {
794 print
'<br>'.$form->selectarray(
'fk_default_warehouse', $listwarehouses, $fk_default_warehouse, 0, 0, 0,
'', 0, 0, $disabled,
'',
'minwidth100 maxwidth300', 1);
800 $parameters = array();
801 $reshook = $hookmanager->executeHooks(
802 'printFieldListTitle',
810 print $hookmanager->resPrint;
817 $conf->cache[
'product'] = array();
821 $objp = $db->fetch_object($resql);
824 if (!$objp->fk_product > 0) {
827 $alreadydispatched = isset($products_dispatched[$objp->rowid]) ? $products_dispatched[$objp->rowid] : 0;
828 $remaintodispatch =
price2num($objp->qty - ((
float) $alreadydispatched), 5);
829 if ($remaintodispatch < 0 && !
getDolGlobalString(
'SUPPLIER_ORDER_ALLOW_NEGATIVE_QTY_FOR_SUPPLIER_ORDER_RETURN')) {
830 $remaintodispatch = 0;
833 if ($remaintodispatch || !
getDolGlobalString(
'SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED')) {
842 print
'<!-- Line to dispatch '.$suffix.
' -->'.
"\n";
844 print
'<input id="qty_ordered'.$suffix.
'" type="hidden" value="'.$objp->qty.
'">';
845 print
'<input id="qty_dispatched'.$suffix.
'" type="hidden" value="'.(float) $alreadydispatched.
'">';
846 print
'<tr class="oddeven">';
848 if (empty(
$conf->cache[
'product'][$objp->fk_product])) {
849 $tmpproduct =
new Product($db);
850 $tmpproduct->fetch($objp->fk_product);
851 $conf->cache[
'product'][$objp->fk_product] = $tmpproduct;
853 $tmpproduct =
$conf->cache[
'product'][$objp->fk_product];
856 $linktoprod = $tmpproduct->getNomUrl(1);
857 $linktoprod .=
' - '.$objp->label.
"\n";
859 if (isModEnabled(
'productbatch')) {
860 if ($objp->tobatch) {
865 print
'<td class="dispatch_batch_number"></td>';
867 print
'<td class="dispatch_dlc"></td>';
870 print
'<td class="dispatch_dluo"></td>';
877 print
'<td class="dispatch_batch_number">';
878 print
'<span class="opacitymedium small">'.$langs->trans(
"ProductDoesNotUseBatchSerial").
'</small>';
881 print
'<td class="dispatch_dlc"></td>';
884 print
'<td class="dispatch_dluo"></td>';
888 print
'<td colspan="4">';
894 $up_ht_disc = $objp->subprice;
895 if (!empty($objp->remise_percent) && !
getDolGlobalString(
'STOCK_EXCLUDE_DISCOUNT_FOR_PMP')) {
896 $up_ht_disc =
price2num($up_ht_disc * (100 - $objp->remise_percent) / 100,
'MU');
900 print
'<td class="right">'.$objp->sref.
'</td>';
903 print
'<td class="right">'.$objp->qty.
'</td>';
906 print
'<td class="right">'.$alreadydispatched.
'</td>';
908 if (isModEnabled(
'productbatch') && $objp->tobatch > 0) {
910 print
'<td class="right">';
920 'is_information_row' =>
true,
925 $reshook = $hookmanager->executeHooks(
926 'printFieldListValue',
934 print $hookmanager->resPrint;
938 print
'<tr class="oddeven" name="'.$type.$suffix.
'">';
940 print
'<input name="fk_commandefourndet'.$suffix.
'" type="hidden" value="'.$objp->rowid.
'">';
941 print
'<input name="product_batch'.$suffix.
'" type="hidden" value="'.$objp->fk_product.
'">';
943 print
'<!-- This is a up (may include discount or not depending on STOCK_EXCLUDE_DISCOUNT_FOR_PMP. will be used for PMP calculation) -->';
945 print $langs->trans(
"BuyingPrice").
': <input class="maxwidth75" name="pu'.$suffix.
'" type="text" value="'.
price2num($up_ht_disc,
'MU').
'">';
947 print
'<input class="maxwidth75" name="pu'.$suffix.
'" type="hidden" value="'.
price2num($up_ht_disc,
'MU').
'">';
953 print
'<input type="text" class="inputlotnumber quatrevingtquinzepercent" id="lot_number'.$suffix.
'" name="lot_number'.$suffix.
'" value="'.
GETPOST(
'lot_number'.$suffix).
'">';
956 print
'<td class="nowraponall">';
958 print $form->selectDate($dlcdatesuffix,
'dlc'.$suffix, 0, 0, 1,
'');
962 print
'<td class="nowraponall">';
964 print $form->selectDate($dluodatesuffix,
'dluo'.$suffix, 0, 0, 1,
'');
967 print
'<td colspan="3"> </td>';
973 print
'<td class="right">';
983 'is_information_row' =>
true,
988 $reshook = $hookmanager->executeHooks(
989 'printFieldListValue',
997 print $hookmanager->resPrint;
1001 print
'<tr class="oddeven" name="'.$type.$suffix.
'">';
1002 print
'<td colspan="'.$colspan.
'">';
1003 print
'<input name="fk_commandefourndet'.$suffix.
'" type="hidden" value="'.$objp->rowid.
'">';
1004 print
'<input name="product'.$suffix.
'" type="hidden" value="'.$objp->fk_product.
'">';
1006 print
'<!-- This is a up (may include discount or not depending on STOCK_EXCLUDE_DISCOUNT_FOR_PMP. will be used for PMP calculation) -->';
1008 print $langs->trans(
"BuyingPrice").
': <input class="maxwidth75" name="pu'.$suffix.
'" type="text" value="'.
price2num($up_ht_disc,
'MU').
'">';
1010 print
'<input class="maxwidth75" name="pu'.$suffix.
'" type="hidden" value="'.
price2num($up_ht_disc,
'MU').
'">';
1017 print
'<td class="right nowrap">';
1018 if ($remaintodispatch > 0) {
1019 $btnLabel = $langs->trans(
"Fill").
' : '.$remaintodispatch;
1020 print
'<button class="auto-fill-qty btn-low-emphasis --btn-icon" data-rowname="qty'.$suffix.
'" data-value="'.$remaintodispatch.
'" title="'.
dol_escape_htmltag($btnLabel).
'" aria-label="'.
dol_escape_htmltag($btnLabel).
'" >'.
img_picto($btnLabel,
'fa-arrow-right',
'aria-hidden="true"', 0, 0, 1).
'</button>';
1022 print
'<input id="qty'.$suffix.
'" name="qty'.$suffix.
'" type="number" step="any" class="width50 right qtydispatchinput" value="'.(GETPOSTISSET(
'qty'.$suffix) ?
GETPOSTINT(
'qty'.$suffix) : (!
getDolGlobalString(
'SUPPLIER_ORDER_DISPATCH_FORCE_QTY_INPUT_TO_ZERO') ? $remaintodispatch : 0)).
'">';
1023 print
'<button class="resetline btn-low-emphasis --btn-icon" id="reset'.$suffix.
'" title="'.
dol_escape_htmltag($langs->trans(
"Reset")).
'" >'.
img_picto($langs->trans(
"Reset"),
'eraser',
'aria-hidden="true"', 0, 0, 1).
'</button>';
1027 if (isModEnabled(
'productbatch') && $objp->tobatch > 0) {
1029 print
img_picto($langs->trans(
'AddStockLocationLine'),
'split.png',
'class="splitbutton" onClick="addDispatchLine('.$i.
', \''.$type.
'\')
"');
1032 print img_picto($langs->trans('AddStockLocationLine'), 'split.png', 'class="splitbutton
" onClick="addDispatchLine(
'.$i.', \
''.$type.
'\')
"');
1036 if (getDolGlobalString('SUPPLIER_ORDER_CAN_UPDATE_BUYINGPRICE_DURING_RECEIPT')) {
1037 if (!isModEnabled("multicurrency
") && empty($conf->dynamicprices->enabled)) {
1039 print '<td class="right
">';
1040 print '<input id="pu
'.$suffix.'" name="pu
'.$suffix.'" type="text
" size="8
" value="'.price((GETPOST('pu
'.$suffix) != '' ? price2num(GETPOST('pu
'.$suffix)) : $up_ht_disc)).'">';
1044 print '<td class="right
">';
1045 print '<input id="dto
'.$suffix.'" name="dto
'.$suffix.'" type="text
" size="8
" value="'.(GETPOST('dto
'.$suffix) != '' ? GETPOST('dto
'.$suffix) : '').'">';
1049 print '<td class="center
">';
1050 print '<input class="flat checkformerge
" type="checkbox
" name="saveprice
'.$suffix.'" value="'.(GETPOST('saveprice
'.$suffix) != '' ? GETPOST('saveprice
'.$suffix) : '').'">';
1056 print '<td class="right
">';
1057 if (count($listwarehouses) > 1) {
1058 print $formproduct->selectWarehouses(GETPOST("entrepot
".$suffix) ? GETPOST("entrepot
".$suffix) : ($objp->fk_default_warehouse ? $objp->fk_default_warehouse : ''), "entrepot
".$suffix, '', 1, 0, $objp->fk_product, '', 1, 0, array(), 'csswarehouse'.$suffix);
1059 } elseif (count($listwarehouses) == 1) {
1060 print $formproduct->selectWarehouses(GETPOST("entrepot
".$suffix) ? GETPOST("entrepot
".$suffix) : ($objp->fk_default_warehouse ? $objp->fk_default_warehouse : ''), "entrepot
".$suffix, '', 0, 0, $objp->fk_product, '', 1, 0, array(), 'csswarehouse'.$suffix);
1062 $langs->load("errors
");
1063 print $langs->trans("ErrorNoWarehouseDefined
");
1067 // Enable hooks to append additional columns
1068 $parameters = array(
1069 'is_information_row' => false, // this is a dispatch form row
1071 'suffix' => $suffix,
1074 $reshook = $hookmanager->executeHooks(
1075 'printFieldListValue',
1081 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
1083 print $hookmanager->resPrint;
1092 dol_print_error($db);
1099 $checkboxlabel = $langs->trans("CloseReceivedSupplierOrdersAutomatically
", $langs->transnoentitiesnoconv('StatusOrderReceivedAll'));
1101 print '<div class="center
">';
1102 $parameters = array();
1103 $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been
1105 if (empty($reshook)) {
1106 if (empty($conf->reception->enabled)) {
1107 print $langs->trans("Comment").' : ';
1108 print '<input type="text
" class="minwidth400
" maxlength="128
" name="comment
" value="';
1109 print GETPOSTISSET("comment") ? GETPOST("comment") : $langs->trans("DispatchSupplierOrder", $object->ref);
1110 // print ' /
'.$object->ref_supplier; // Not yet available
1111 print '" class="flat
"><br>';
1113 print '<input type="checkbox
" checked="checked
" name="closeopenorder
"> '.$checkboxlabel;
1116 $dispatchBt = empty($conf->reception->enabled) ? $langs->trans("Receive
") : $langs->trans("CreateReception
");
1119 print '<input type="hidden
" name="backtopageforcancel
" value="'.$_SERVER["PHP_SELF"].'?
id=
'.$object->id.'">';
1120 print '<input type="submit
" class="button" name="dispatch
" value="'.dol_escape_htmltag($dispatchBt).'"';
1122 if (!$permissiontoreceive) {
1125 if (count($listwarehouses) <= 0) {
1137 // Message if nothing to dispatch
1140 if (!getDolGlobalString('SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED')) {
1141 print '<div class="opacitymedium
">'.$langs->trans("NoPredefinedProductToDispatch
").'</div>'; // No predefined line at all
1143 print '<div class="opacitymedium
">'.$langs->trans("NoMorePredefinedProductToDispatch
").'</div>'; // No predefined line that remain to be dispatched.
1150 print dol_get_fiche_end();
1152 // traitement entrepot par défaut
1153 print '<script type="text/javascript
">
1154 $(document).ready(function () {
1155 $("select[
name=fk_default_warehouse]
").change(function() {
1156 var fk_default_warehouse = $("option:selected
", this).val();
1157 $("select[
name^=entrepot_]
").val(fk_default_warehouse).change();
1160 $(".auto-fill-qty
").on("click touchstart
", function(e){
1162 $("input[
name=
"+$(this).data("rowname
")+"]
").val($(this).data("value
")).trigger("change
");
1165 $("#autoreset
").click(function() {
1166 $(".qtydispatchinput
").each(function(){
1167 id = $(this).attr("id");
1168 idtab = id.split("_
");
1172 $("#qty_dispatched_0_
"+idtab[2]).val("0
");
1174 obj = $(this).parent().parent();
1175 nameobj = obj.attr("name");
1176 nametab = nameobj.split("_
");
1178 $("tr[
name^=\
'"+nametab[0]+"_\'][name$=\'_"+nametab[2]+"\']:last .splitbutton").show();
1183 $(".resetline").click(function(e){
1185 id = $(this).attr("id");
1186 id = id.split("reset_");
1187 console.log("Reset trigger for id = qty_"+id[1]);
1188 $("#qty_"+id[1]).val("");
1194 $sql =
"SELECT p.rowid as pid, p.ref, p.label,";
1195 $sql .=
" e.rowid as warehouse_id, e.ref as entrepot,";
1196 $sql .=
" cfd.rowid as dispatchlineid, cfd.fk_product, cfd.qty, cfd.eatby, cfd.sellby, cfd.batch, cfd.comment, cfd.status, cfd.datec";
1197 $sql .=
" ,cd.rowid, cd.subprice";
1198 if (isModEnabled(
'reception')) {
1199 $sql .=
" ,cfd.fk_reception, r.date_delivery";
1201 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product as p,";
1202 $sql .=
" ".MAIN_DB_PREFIX.
"receptiondet_batch as cfd";
1203 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"commande_fournisseurdet as cd ON cd.rowid = cfd.fk_elementdet";
1204 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"entrepot as e ON cfd.fk_entrepot = e.rowid";
1205 if (isModEnabled(
'reception')) {
1206 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"reception as r ON cfd.fk_reception = r.rowid";
1208 $sql .=
" WHERE cfd.fk_element = ".((int)
$object->id);
1209 $sql .=
" AND cfd.fk_product = p.rowid";
1210 $sql .=
" ORDER BY cfd.rowid ASC";
1212 $resql = $db->query($sql);
1214 $num = $db->num_rows($resql);
1222 print
'<div class="div-table-responsive">';
1223 print
'<table id="dispatch_received_products" class="noborder centpercent">';
1225 print
'<tr class="liste_titre">';
1227 if (isModEnabled(
"reception")) {
1228 print
'<td>'.$langs->trans(
"Reception").
'</td>';
1231 print
'<td>'.$langs->trans(
"Product").
'</td>';
1232 print
'<td class="center">'.$langs->trans(
"DateCreation").
'</td>';
1233 print
'<td class="center">'.$langs->trans(
"DateDeliveryPlanned").
'</td>';
1234 if (isModEnabled(
'productbatch')) {
1235 print
'<td class="dispatch_batch_number_title">'.$langs->trans(
"batch_number").
'</td>';
1237 print
'<td class="dispatch_dlc_title">'.$langs->trans(
"SellByDate").
'</td>';
1240 print
'<td class="dispatch_dluo_title">'.$langs->trans(
"EatByDate").
'</td>';
1243 print
'<td class="right">'.$langs->trans(
"QtyDispatched").
'</td>';
1244 print
'<td>'.$langs->trans(
"Warehouse").
'</td>';
1245 print
'<td>'.$langs->trans(
"Comment").
'</td>';
1248 if (
getDolGlobalString(
'SUPPLIER_ORDER_USE_DISPATCH_STATUS') && $reception !==
null && empty($reception->rowid)) {
1249 print
'<td class="center" colspan="2">'.$langs->trans(
"Status").
'</td>';
1250 } elseif (isModEnabled(
"reception")) {
1251 print
'<td class="center"></td>';
1254 print
'<td class="center" colspan="2"></td>';
1263 $objp = $db->fetch_object($resql);
1265 if ($action ==
'editline' && $lineid == $objp->dispatchlineid) {
1266 print
'<form name="editdispatchedlines" id="editdispatchedlines" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'#line_'.
GETPOSTINT(
'lineid').
'" method="POST">
1267 <input type="hidden" name="token" value="'.
newToken().
'">
1268 <input type="hidden" name="action" value="updateline">
1269 <input type="hidden" name="mode" value="">
1270 <input type="hidden" name="lineid" value="'.$objp->dispatchlineid.
'">';
1273 print
'<tr class="oddeven" id="line_'.$objp->dispatchlineid.
'" >';
1277 if (isModEnabled(
"reception")) {
1278 print
'<td class="nowraponall">';
1279 if (!empty($objp->fk_reception)) {
1281 $reception->fetch($objp->fk_reception);
1282 print $reception->getNomUrl(1);
1289 print
'<td class="tdoverflowmax150">';
1290 if (empty(
$conf->cache[
'product'][$objp->fk_product])) {
1291 $tmpproduct =
new Product($db);
1292 $tmpproduct->fetch($objp->fk_product);
1293 $conf->cache[
'product'][$objp->fk_product] = $tmpproduct;
1295 $tmpproduct =
$conf->cache[
'product'][$objp->fk_product];
1297 print $tmpproduct->getNomUrl(1);
1298 print
' - '.$objp->label;
1302 print
'<td class="center">'.dol_print_date($db->jdate($objp->datec),
'day').
'</td>';
1305 if (property_exists($objp,
"date_delivery")) {
1306 print
'<td class="center">' .
dol_print_date($db->jdate($objp->date_delivery),
'day') .
'</td>';
1308 print
'<td class="center"></td>';
1312 if (isModEnabled(
'productbatch')) {
1314 include_once DOL_DOCUMENT_ROOT.
'/product/stock/class/productlot.class.php';
1316 $lot->fetch(0, $objp->pid, $objp->batch);
1317 print
'<td class="dispatch_batch_number">'.$lot->getNomUrl(1).
'</td>';
1319 print
'<td class="dispatch_dlc">'.dol_print_date($lot->sellby,
'day').
'</td>';
1322 print
'<td class="dispatch_dluo">'.dol_print_date($lot->eatby,
'day').
'</td>';
1325 print
'<td class="dispatch_batch_number"></td>';
1327 print
'<td class="dispatch_dlc"></td>';
1330 print
'<td class="dispatch_dluo"></td>';
1336 print
'<td class="right">';
1337 if ($action ==
'editline' && $lineid == $objp->dispatchlineid) {
1338 print
'<input style="width: 50px;" type="text" min="1" name="qty" value="'.$objp->qty.
'" />';
1342 print
'<input type="hidden" name="price" value="'.$objp->subprice.
'" />';
1345 print
'<td class="tdoverflowmax150">';
1346 if ($action ==
'editline' && $lineid == $objp->dispatchlineid) {
1347 $warehouse_id =
GETPOSTINT(
"fk_entrepot") ?
GETPOSTINT(
"fk_entrepot") : ($objp->warehouse_id ? $objp->warehouse_id :
'');
1348 if (count($listwarehouses) > 1) {
1349 print $formproduct->selectWarehouses($warehouse_id,
"fk_entrepot",
'', 1, 0, $objp->fk_product,
'', 1, 1, array(),
'csswarehouse');
1350 } elseif (count($listwarehouses) == 1) {
1351 print $formproduct->selectWarehouses($warehouse_id,
"fk_entrepot",
'', 0, 0, $objp->fk_product,
'', 1, 1, array(),
'csswarehouse');
1353 $langs->load(
"errors");
1354 print $langs->trans(
"ErrorNoWarehouseDefined");
1357 $warehouse_static->id = $objp->warehouse_id;
1358 $warehouse_static->label = $objp->entrepot;
1359 print $warehouse_static->getNomUrl(1);
1364 print
'<td class="tdoverflowmax300" style="white-space: pre;">'.$objp->comment.
'</td>';
1367 if (
getDolGlobalString(
'SUPPLIER_ORDER_USE_DISPATCH_STATUS') && ($reception ===
null || empty($reception->rowid))) {
1368 print
'<td class="right">';
1369 $supplierorderdispatch->status = (empty($objp->status) ? 0 : $objp->status);
1371 print $supplierorderdispatch->getLibStatut(5);
1375 print
'<td class="center">';
1376 if (!$permissiontocontrol) {
1377 if (empty($objp->status)) {
1378 print
'<a class="button buttonRefused" href="#">'.$langs->trans(
"Approve").
'</a>';
1379 print
'<a class="button buttonRefused" href="#">'.$langs->trans(
"Deny").
'</a>';
1381 print
'<a class="button buttonRefused" href="#">'.$langs->trans(
"Disapprove").
'</a>';
1382 print
'<a class="button buttonRefused" href="#">'.$langs->trans(
"Deny").
'</a>';
1389 if (empty($objp->status)) {
1390 print
'<a class="button'.($disabled ?
' buttonRefused' :
'').
'" href="'.$_SERVER[
"PHP_SELF"].
"?id=".
$id.
"&action=checkdispatchline&lineid=".$objp->dispatchlineid.
'">'.$langs->trans(
"Approve").
'</a>';
1391 print
'<a class="button'.($disabled ?
' buttonRefused' :
'').
'" href="'.$_SERVER[
"PHP_SELF"].
"?id=".
$id.
"&action=denydispatchline&lineid=".$objp->dispatchlineid.
'">'.$langs->trans(
"Deny").
'</a>';
1393 if ($objp->status == 1) {
1394 print
'<a class="button'.($disabled ?
' buttonRefused' :
'').
'" href="'.$_SERVER[
"PHP_SELF"].
"?id=".
$id.
"&action=uncheckdispatchline&lineid=".$objp->dispatchlineid.
'">'.$langs->trans(
"Reinit").
'</a>';
1395 print
'<a class="button'.($disabled ?
' buttonRefused' :
'').
'" href="'.$_SERVER[
"PHP_SELF"].
"?id=".
$id.
"&action=denydispatchline&lineid=".$objp->dispatchlineid.
'">'.$langs->trans(
"Deny").
'</a>';
1397 if ($objp->status == 2) {
1398 print
'<a class="button'.($disabled ?
' buttonRefused' :
'').
'" href="'.$_SERVER[
"PHP_SELF"].
"?id=".
$id.
"&action=uncheckdispatchline&lineid=".$objp->dispatchlineid.
'">'.$langs->trans(
"Reinit").
'</a>';
1399 print
'<a class="button'.($disabled ?
' buttonRefused' :
'').
'" href="'.$_SERVER[
"PHP_SELF"].
"?id=".
$id.
"&action=checkdispatchline&lineid=".$objp->dispatchlineid.
'">'.$langs->trans(
"Approve").
'</a>';
1403 } elseif (isModEnabled(
"reception")) {
1404 print
'<td class="right">';
1405 if ($reception !==
null && !empty($reception->id)) {
1406 print $reception->getLibStatut(5);
1412 if ($action !=
'editline' || $lineid != $objp->dispatchlineid) {
1413 if (($reception ===
null) || empty($reception->id) || ($reception->statut == Reception::STATUS_DRAFT)) {
1414 print
'<td class="linecoledit center">';
1415 print
'<a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=editline&token='.
newToken().
'&lineid='.$objp->dispatchlineid.
'#line_'.$objp->dispatchlineid.
'">';
1420 print
'<td class="linecoldelete center">';
1421 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=ask_deleteline&token='.
newToken().
'&lineid='.$objp->dispatchlineid.
'#dispatch_received_products">';
1426 print
'<td></td><td></td>';
1429 print
'<td class="center valignmiddle">';
1430 print
'<input type="submit" class="button button-save" id="savelinebutton" name="save" value="'.$langs->trans(
"Save").
'" />';
1432 print
'<td class="center valignmiddle">';
1433 print
'<input type="submit" class="button button-cancel" id="cancellinebutton" name="cancel" value="'.$langs->trans(
"Cancel").
'" />';
1439 if ($action ==
'editline' && $lineid == $objp->dispatchlineid) {
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
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.
Class to manage table ReceptionLineBatch.
Class to manage predefined suppliers products.
const STATUS_RECEIVED_PARTIALLY
Received partially.
const STATUS_CANCELED
Order canceled.
const STATUS_RECEIVED_COMPLETELY
Received completely.
const STATUS_ACCEPTED
Accepted.
const STATUS_ORDERSENT
Order sent, shipment on process.
Class to manage warehouses.
Class to manage stock movements.
Class to manage products or services.
Class with list of lots and properties.
Class to manage projects.
Class to manage receptions.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage Dolibarr users.
ordersupplier_prepare_head(CommandeFournisseur $object)
Prepare array with list of tabs.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_now($mode='auto')
Return date for now.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
GETPOSTFLOAT($paramname, $rounding='')
Return the value of a $_GET or $_POST supervariable, converted into float.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
treeview li table
No Email.
ui state ui widget content ui state ui widget header ui state a ui button
0 = Do not include form tag and submit button -1 = Do not include form tag but include submit button
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
$conf db name
Only used if Module[ID]Name translation string is not found.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.