38require
'../main.inc.php';
39require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
40require_once DOL_DOCUMENT_ROOT.
'/reception/class/reception.class.php';
41require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
42require_once DOL_DOCUMENT_ROOT.
'/core/lib/product.lib.php';
43require_once DOL_DOCUMENT_ROOT.
'/core/lib/reception.lib.php';
44require_once DOL_DOCUMENT_ROOT.
'/core/modules/reception/modules_reception.php';
45require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
46require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
47require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
48require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/productlot.class.php';
49if (isModEnabled(
"product") || isModEnabled(
"service")) {
50 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
52if (isModEnabled(
"propal")) {
53 require_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
55require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
56require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.dispatch.class.php';
57if (isModEnabled(
'productbatch')) {
58 require_once DOL_DOCUMENT_ROOT.
'/product/class/productbatch.class.php';
60if (isModEnabled(
'project')) {
61 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
62 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
65$langs->loadLangs(array(
"receptions",
"companies",
"bills",
'deliveries',
'orders',
'stocks',
'other',
'propal',
'sendings'));
67if (isModEnabled(
'incoterm')) {
68 $langs->load(
'incoterm');
70if (isModEnabled(
'productbatch')) {
71 $langs->load(
'productbatch');
74$origin =
GETPOST(
'origin',
'alpha') ?
GETPOST(
'origin',
'alpha') :
'reception';
77if (empty($origin_id)) {
80if (empty($origin_id)) {
83if (empty($origin_id)) {
90$action =
GETPOST(
'action',
'alpha');
95$confirm =
GETPOST(
'confirm',
'alpha');
96$cancel =
GETPOST(
'cancel',
'alpha');
97$backtopage =
GETPOST(
'backtopage',
'alpha');
98$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
110$extrafields->fetch_name_optionals_label(
$object->table_element);
111$extrafields->fetch_name_optionals_label(
$object->table_element_line);
112$extrafields->fetch_name_optionals_label($objectorder->table_element_line);
115include DOL_DOCUMENT_ROOT.
'/core/actions_fetchobject.inc.php';
118$hookmanager->initHooks(array(
'receptioncard',
'globalcard'));
122if ($id > 0 || !empty($ref)) {
135 if (($origin ==
'order_supplier' || $origin ==
'supplier_order') && is_object(
$object->origin_object) && isModEnabled(
"supplier_order")) {
136 $origin_id =
$object->origin_object->id;
137 $objectsrc =
$object->origin_object;
144 $socid = $user->socid;
148if (isModEnabled(
"reception") || $origin ==
'reception' || empty($origin)) {
152 if ($origin ==
'supplierorder' || $origin ==
'order_supplier') {
153 $result =
restrictedArea($user,
'fournisseur', $origin_id,
'commande_fournisseur',
'commande');
154 } elseif (!$user->hasRight($origin,
'lire') && !$user->hasRight($origin,
'read')) {
159if (isModEnabled(
"reception")) {
160 $permissiontoread = $user->hasRight(
'reception',
'lire');
161 $permissiontoadd = $user->hasRight(
'reception',
'creer');
162 $permissiondellink = $user->hasRight(
'reception',
'creer');
163 $permissiontovalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'reception',
'creer')) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'reception',
'reception_advance',
'validate')));
164 $permissiontodelete = $user->hasRight(
'reception',
'supprimer');
166 $permissiontoread = $user->hasRight(
'fournisseur',
'commande',
'receptionner');
167 $permissiontoadd = $user->hasRight(
'fournisseur',
'commande',
'receptionner');
168 $permissiondellink = $user->hasRight(
'fournisseur',
'commande',
'receptionner');
169 $permissiontovalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'fournisseur',
'commande',
'receptionner')) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'fournisseur',
'commande_advance',
'check')));
170 $permissiontodelete = $user->hasRight(
'fournisseur',
'commande',
'receptionner');
178$parameters = array();
179$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
184if (empty($reshook)) {
200 if (!empty($backtopageforcancel)) {
201 header(
"Location: ".$backtopageforcancel);
203 } elseif (!empty($backtopage)) {
204 header(
"Location: ".$backtopage);
211 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
214 if ($action ==
'reopen' && $permissiontoadd) {
219 if ($action ==
'modif' && $permissiontoadd) {
220 $result =
$object->setDraft($user);
224 $outputlangs = $langs;
227 $newlang =
GETPOST(
'lang_id',
'aZ09');
230 $newlang =
$object->thirdparty->default_lang;
232 if (!empty($newlang)) {
234 $outputlangs->setDefaultLang($newlang);
238 $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
246 if ($action ==
'set_incoterms' && isModEnabled(
'incoterm') && $permissiontoadd) {
250 if ($action ==
'setref_supplier' && $permissiontoadd) {
255 $result =
$object->setValueFrom(
'ref_supplier',
GETPOST(
'ref_supplier',
'alpha'),
'',
null,
'text',
'', $user,
'RECEPTION_MODIFY');
258 $action =
'editref_supplier';
260 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
265 if ($action ==
'update_extras' && $permissiontoadd) {
269 $ret = $extrafields->setOptionalsFromPost(
null,
$object,
GETPOST(
'attribute',
'restricthtml'));
276 $result =
$object->insertExtraFields(
'RECEPTION_MODIFY');
284 $action =
'edit_extras';
289 if ($action ==
'add' && $permissiontoadd) {
297 $object->origin_id = $origin_id;
309 if (
$object->origin ==
"supplierorder") {
310 $classname =
'CommandeFournisseur';
312 $classname = ucfirst(
$object->origin);
314 $objectsrc =
new $classname($db);
315 $objectsrc->fetch(
$object->origin_id);
317 $object->socid = $objectsrc->socid;
320 $object->date_delivery = $date_delivery;
321 $object->fk_delivery_address = $objectsrc->fk_delivery_address;
327 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
329 $batch_line = array();
330 $stockLine = array();
331 $array_options = array();
336 foreach ($_POST as $key => $value) {
339 if (strpos($key,
'qtyasked') !==
false) {
345 for ($i = 1; $i <= $num; $i++) {
357 if (
GETPOST($qty,
'alpha') > 0) {
362 $array_options[$i] = $extrafields->getOptionalsFromPost(
$object->table_element_line, $i);
367 for ($i = 1; $i <= $num; $i++) {
371 foreach ($objectsrc->lines as $linesrc) {
372 if ($linesrc->id == $lineId) {
373 $lineToTest = $linesrc;
377 if (empty($lineToTest)) {
381 $comment =
"comment".$i;
386 $cost_price =
"cost_price".$i;
405 if ($entrepot_id < 0) {
412 $eatby =
GETPOST($eatby,
'alpha');
413 $sellby =
GETPOST($sellby,
'alpha');
414 $eatbydate = str_replace(
'/',
'-', $eatby);
415 $sellbydate = str_replace(
'/',
'-', $sellby);
418 $ret =
$object->addline($entrepot_id,
GETPOSTINT($idl),
price2num(
GETPOST($qty),
'MS'), $array_options[$i],
GETPOST($comment), strtotime($eatbydate), strtotime($sellbydate),
GETPOST($batch),
GETPOSTFLOAT($cost_price,
'MU'));
430 $ret = $extrafields->setOptionalsFromPost(
null,
$object);
443 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"QtyToReceive").
'/'.$langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
449 header(
"Location: card.php?id=".
$object->id);
456 } elseif ($action ==
'confirm_valid' && $confirm ==
'yes' && $permissiontovalidate) {
459 $result =
$object->valid($user);
462 $langs->load(
"errors");
467 $outputlangs = $langs;
470 $newlang =
GETPOST(
'lang_id',
'aZ09');
473 $newlang =
$object->thirdparty->default_lang;
475 if (!empty($newlang)) {
477 $outputlangs->setDefaultLang($newlang);
482 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
488 } elseif ($action ==
'confirm_delete' && $confirm ==
'yes' && $permissiontodelete) {
489 $result =
$object->delete($user);
491 header(
"Location: ".DOL_URL_ROOT.
'/reception/index.php');
503 } elseif ($action ==
'setdate_livraison' && $permissiontoadd) {
507 $result =
$object->setDeliveryDate($user, $datedelivery);
511 } elseif (($action ==
'settracking_number' || $action ==
'settracking_url'
512 || $action ==
'settrueWeight'
513 || $action ==
'settrueWidth'
514 || $action ==
'settrueHeight'
515 || $action ==
'settrueDepth'
516 || $action ==
'setshipping_method_id') && $permissiontoadd) {
520 if ($action ==
'settracking_number') {
521 $object->tracking_number = trim(
GETPOST(
'tracking_number',
'alpha'));
523 if ($action ==
'settracking_url') {
524 $object->tracking_url = trim(
GETPOST(
'tracking_url',
'restricthtml'));
526 if ($action ==
'settrueWeight') {
530 if ($action ==
'settrueWidth') {
533 if ($action ==
'settrueHeight') {
537 if ($action ==
'settrueDepth') {
540 if ($action ==
'setshipping_method_id') {
545 if (
$object->update($user) >= 0) {
546 header(
"Location: card.php?id=".
$object->id);
553 } elseif ($action ==
'builddoc' && $permissiontoread) {
562 $outputlangs = $langs;
565 $newlang =
GETPOST(
'lang_id',
'aZ09');
568 $newlang = $reception->thirdparty->default_lang;
570 if (!empty($newlang)) {
572 $outputlangs->setDefaultLang($newlang);
574 $result =
$object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
579 } elseif ($action ==
'remove_file' && $permissiontoadd) {
581 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
583 $upload_dir = $conf->reception->dir_output;
584 $file = $upload_dir.
'/'.
GETPOST(
'file');
591 } elseif ($action ==
'classifybilled' && $permissiontoadd) {
592 $result =
$object->setBilled();
594 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
600 } elseif ($action ==
'classifyclosed' && $permissiontoread) {
601 $result =
$object->setClosed();
603 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
609 } elseif ($action ==
'deleteline' && !empty($line_id) && $permissiontoread) {
614 $num_prod = count($lines);
615 for ($i = 0; $i < $num_prod; $i++) {
616 if ($lines[$i]->
id == $line_id) {
618 $line->id = $line_id;
619 if (!$error && $line->delete($user) < 0) {
623 unset($_POST[
"lineid"]);
627 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
632 } elseif ($action ==
'updateline' &&
GETPOST(
'save') && $permissiontoadd) {
640 $num_prod = count($lines);
641 for ($i = 0; $i < $num_prod; $i++) {
642 if ($lines[$i]->
id == $line_id) {
644 $line->fetch($line_id);
646 $extrafields->fetch_name_optionals_label(
$object->table_element_line);
647 $line->array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
650 $line->fk_product = $lines[$i]->fk_product;
653 if ($lines[$i]->fk_product > 0) {
655 $stockLocation =
"entl".$line_id;
656 $qty =
"qtyl".$line_id;
657 $comment =
"comment".$line_id;
660 $line->id = $line_id;
661 $line->fk_entrepot =
GETPOSTINT($stockLocation);
663 $line->comment =
GETPOST($comment,
'alpha');
665 if (isModEnabled(
'productbatch')) {
666 $batch =
"batch".$line_id;
667 $dlc =
"dlc".$line_id;
668 $dluo =
"dluo".$line_id;
670 $eatby =
GETPOST($dluo,
'alpha');
671 $eatbydate = str_replace(
'/',
'-', $eatby);
673 $sellby =
GETPOST($dlc,
'alpha');
674 $sellbydate = str_replace(
'/',
'-', $sellby);
675 $line->batch =
GETPOST($batch,
'alpha');
676 $line->eatby = strtotime($eatbydate);
677 $line->sellby = strtotime($sellbydate);
680 if ($line->update($user) < 0) {
685 $qty =
"qtyl".$line_id;
686 $line->id = $line_id;
688 $line->fk_entrepot = 0;
689 if ($line->update($user) < 0) {
698 unset($_POST[
"lineid"]);
703 $outputlangs = $langs;
706 $newlang =
GETPOST(
'lang_id',
'aZ09');
709 $newlang =
$object->thirdparty->default_lang;
711 if (!empty($newlang)) {
713 $outputlangs->setDefaultLang($newlang);
717 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
720 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
723 } elseif ($action ==
'updateline' && $permissiontoadd &&
GETPOST(
'cancel',
'alpha') == $langs->trans(
"Cancel")) {
724 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
728 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
734 $triggersendname =
'RECEPTION_SENTBYMAIL';
736 $mode =
'emailfromreception';
737 $autocopy =
'MAIN_MAIL_AUTOCOPY_RECEPTION_TO';
738 $trackid =
'rec'.$object->id;
739 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
747$title =
$object->ref.
' - '.$langs->trans(
'Reception');
749llxHeader(
'', $title,
'Reception',
'', 0, 0,
'',
'',
'',
'mod-reception page-card');
751$form =
new Form($db);
754if (isModEnabled(
'project')) {
758$product_static =
new Product($db);
760$warehousestatic =
new Entrepot($db);
762if ($action ==
'create2') {
763 print
load_fiche_titre($langs->trans(
"CreateReception"),
'',
'dollyrevert');
765 print
'<br>'.$langs->trans(
"ReceptionCreationIsDoneFromOrder");
772if ($action ==
'create') {
781 if ($origin ==
'supplierorder') {
782 $classname =
'CommandeFournisseur';
784 $classname = ucfirst($origin);
787 $objectsrc =
new $classname($db);
788 if ($objectsrc->fetch($origin_id)) {
790 $soc->fetch($objectsrc->socid);
792 $author =
new User($db);
793 $author->fetch($objectsrc->user_author_id);
795 if (isModEnabled(
'stock')) {
799 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
800 print
'<input type="hidden" name="token" value="'.newToken().
'">';
801 print
'<input type="hidden" name="action" value="add">';
802 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
803 print
'<input type="hidden" name="origin_id" value="'.$objectsrc->id.
'">';
804 print
'<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.
'">';
805 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
807 print
'<input type="hidden" name="entrepot_id" value="'.GETPOSTINT(
'entrepot_id').
'">';
812 print
'<table class="border centpercent">';
815 print
'<tr><td class="titlefieldcreate fieldrequired">';
816 if ($origin ==
'supplierorder' && isModEnabled(
"supplier_order")) {
817 print $langs->trans(
"RefOrder").
'</td><td colspan="3"><a href="'.DOL_URL_ROOT.
'/fourn/commande/card.php?id='.$objectsrc->id.
'">'.
img_object($langs->trans(
"ShowOrder"),
'order').
' '.$objectsrc->ref;
819 if ($origin ==
'propal' && isModEnabled(
"propal")) {
820 print $langs->trans(
"RefProposal").
'</td><td colspan="3"><a href="'.DOL_URL_ROOT.
'/comm/card.php?id='.$objectsrc->id.
'">'.
img_object($langs->trans(
"ShowProposal"),
'propal').
' '.$objectsrc->ref;
827 if ($origin ==
'supplier_order') {
828 print $langs->trans(
'SupplierOrder');
830 print $langs->trans(
'RefSupplier');
832 print
'</td><td colspan="3">';
833 print
'<input type="text" name="ref_supplier" value="'.$objectsrc->ref_supplier.
'" />';
838 print
'<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans(
'Company').
'</td>';
839 print
'<td colspan="3">'.$soc->getNomUrl(1).
'</td>';
843 if (isModEnabled(
'project')) {
845 if (empty($projectid) && !empty($objectsrc->fk_project)) {
846 $projectid = $objectsrc->fk_project;
848 if ($origin ==
'project') {
849 $projectid = ($originid ? $originid : 0);
852 $langs->load(
"projects");
854 print
'<td>'.$langs->trans(
"Project").
'</td><td colspan="2">';
855 print
img_picto(
'',
'project',
'class="paddingright"');
856 print $formproject->select_projects((!
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS') ? $soc->id : -1), $projectid,
'projectid', 0, 0, 1, 0, 1, 0, 0,
'', 1, 0,
'maxwidth500');
857 print
' <a href="'.DOL_URL_ROOT.
'/projet/card.php?socid='.$soc->id.
'&action=create&status=1&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create&socid='.$soc->id).
'"><span class="fa fa-plus-circle valignmiddle" title="'.$langs->trans(
"AddProject").
'"></span></a>';
863 print
'<tr><td>'.$langs->trans(
"DateDeliveryPlanned").
'</td>';
864 print
'<td colspan="3">';
865 $date_delivery = ($date_delivery ? $date_delivery : $objectsrc->delivery_date);
866 print $form->selectDate($date_delivery ? $date_delivery : -1,
'date_delivery', 1, 1, 1);
871 print
'<tr><td>'.$langs->trans(
"NotePublic").
'</td>';
872 print
'<td colspan="3">';
873 $doleditor =
new DolEditor(
'note_public', $objectsrc->note_public,
'', 60,
'dolibarr_notes',
'In', 0,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
874 print $doleditor->Create(1);
878 if ($objectsrc->note_private && !$user->socid) {
879 print
'<tr><td>'.$langs->trans(
"NotePrivate").
'</td>';
880 print
'<td colspan="3">';
881 $doleditor =
new DolEditor(
'note_private', $objectsrc->note_private,
'', 60,
'dolibarr_notes',
'In', 0,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
882 print $doleditor->Create(1);
888 print $langs->trans(
"Weight");
889 print
'</td><td colspan="3"><input name="weight" size="4" value="'.GETPOSTINT(
'weight').
'"> ';
890 $text = $formproduct->selectMeasuringUnits(
"weight_units",
"weight",
GETPOSTINT(
'weight_units'), 0, 2);
891 $htmltext = $langs->trans(
"KeepEmptyForAutoCalculation");
892 print $form->textwithpicto($text, $htmltext);
896 print $langs->trans(
"Width").
' x '.$langs->trans(
"Height").
' x '.$langs->trans(
"Depth");
897 print
' </td><td colspan="3"><input name="trueWidth" size="4" value="'.GETPOSTINT(
'trueWidth').
'">';
898 print
' x <input name="trueHeight" size="4" value="'.GETPOSTINT(
'trueHeight').
'">';
899 print
' x <input name="trueDepth" size="4" value="'.GETPOSTINT(
'trueDepth').
'">';
901 $text = $formproduct->selectMeasuringUnits(
"size_units",
"size",
GETPOSTINT(
'size_units'), 0, 2);
902 $htmltext = $langs->trans(
"KeepEmptyForAutoCalculation");
903 print $form->textwithpicto($text, $htmltext);
907 print
"<tr><td>".$langs->trans(
"ReceptionMethod").
"</td>";
908 print
'<td colspan="3">';
909 $recept->fetch_delivery_methods();
910 print $form->selectarray(
"shipping_method_id", $recept->meths,
GETPOSTINT(
'shipping_method_id'), 1, 0, 0,
"", 1);
912 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
914 print
"</td></tr>\n";
917 print
"<tr><td>".$langs->trans(
"TrackingNumber").
"</td>";
918 print
'<td colspan="3">';
919 print
'<input name="tracking_number" size="20" value="'.GETPOST(
'tracking_number',
'alpha').
'">';
920 print
"</td></tr>\n";
923 $parameters = array(
'objectsrc' => $objectsrc,
'colspan' =>
' colspan="3"',
'cols' =>
'3',
'socid' => $socid);
924 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $recept, $action);
925 print $hookmanager->resPrint;
928 $extrafields->fetch_name_optionals_label(
$object->table_element);
929 if (empty($reshook) && !empty($extrafields->attributes[
$object->table_element][
'label'])) {
931 if ($objectsrc->fetch_optionals() > 0) {
932 $recept->array_options = array_merge($recept->array_options, $objectsrc->array_options);
934 print $recept->showOptionals($extrafields,
'create', $parameters);
938 if (isModEnabled(
'incoterm')) {
940 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"), $objectsrc->label_incoterms, 1).
'</label></td>';
941 print
'<td colspan="3" class="maxwidthonsmartphone">';
942 print $form->select_incoterms((!empty($objectsrc->fk_incoterms) ? $objectsrc->fk_incoterms :
''), (!empty($objectsrc->location_incoterms) ? $objectsrc->location_incoterms :
''));
947 include_once DOL_DOCUMENT_ROOT.
'/core/modules/reception/modules_reception.php';
950 if (count($list) > 1) {
951 print
"<tr><td>".$langs->trans(
"DefaultModel").
"</td>";
952 print
'<td colspan="3">';
953 print $form->selectarray(
'model', $list, $conf->global->RECEPTION_ADDON_PDF);
954 print
"</td></tr>\n";
968 $suffix2numAsked = array();
969 $dispatchLines = array();
971 foreach ($_POST as $key => $value) {
976 if (preg_match(
'/^product_([0-9]+)_([0-9]+)$/i', $key, $reg)) {
978 $paramSuffix = $reg[1] .
'_' . $reg[2];
979 $suffix2numAsked[$paramSuffix] = $numAsked;
982 $numline = $numAsked;
984 $prod =
"product_" . $paramSuffix;
985 $qty =
"qty_" . $paramSuffix;
986 $ent =
"entrepot_" . $paramSuffix;
987 $pu =
"pu_" . $paramSuffix;
988 $fk_commandefourndet =
"fk_commandefourndet_" . $paramSuffix;
993 if (preg_match(
'/^product_batch_([0-9]+)_([0-9]+)$/i', $key, $reg)) {
995 $paramSuffix = $reg[1] .
'_' . $reg[2];
996 $suffix2numAsked[$paramSuffix] = $numAsked;
1000 $numline = $numAsked;
1002 $prod =
'product_batch_' . $paramSuffix;
1003 $qty =
'qty_' . $paramSuffix;
1004 $ent =
'entrepot_' . $paramSuffix;
1005 $pu =
'pu_' . $paramSuffix;
1006 $lot =
'lot_number_' . $paramSuffix;
1009 $fk_commandefourndet =
'fk_commandefourndet_'.$paramSuffix;
1010 $dispatchLines[$numAsked] = array(
'paramSuffix' => $paramSuffix,
'prod' =>
GETPOSTINT($prod),
'qty' =>
price2num(
GETPOST($qty),
'MS'),
'ent' =>
GETPOSTINT($ent),
'pu' =>
price2num(
GETPOST($pu),
'MU'),
'comment' =>
GETPOST(
'comment'),
'fk_commandefourndet' =>
GETPOSTINT($fk_commandefourndet),
'DLC' => $dDLC,
'DLUO' => $dDLUO,
'lot' =>
GETPOST($lot));
1014 if (preg_match(
'/^productl([0-9]+)$/i', $key, $reg)) {
1016 $paramSuffix = $reg[1];
1017 $suffix2numAsked[$paramSuffix] = $numAsked;
1021 $numline = $numAsked;
1023 $prod =
'productid'.$paramSuffix;
1024 $comment =
'comment'.$paramSuffix;
1025 $qty =
'qtyl'.$paramSuffix;
1026 $ent =
'entl'.$paramSuffix;
1027 $pu =
'pul'.$paramSuffix;
1028 $lot =
'batch'.$paramSuffix;
1031 $fk_commandefourndet =
'fk_commandefournisseurdet'.$paramSuffix;
1032 $dispatchLines[$numAsked] = array(
'prod' =>
GETPOSTINT($prod),
'qty' =>
price2num(
GETPOST($qty),
'MS'),
'ent' =>
GETPOSTINT($ent),
'pu' =>
price2num(
GETPOST($pu),
'MU'),
'comment' =>
GETPOST($comment),
'fk_commandefourndet' =>
GETPOSTINT($fk_commandefourndet),
'DLC' => $dDLC,
'DLUO' => $dDLUO,
'lot' =>
GETPOSTINT($lot));
1039 foreach ($suffix2numAsked as $suffix => $n) {
1040 $dispatchLines[$n][
'array_options'] = $extrafields->getOptionalsFromPost(
'receptiondet_batch',
'_' . $suffix,
'');
1043 print
'<script type="text/javascript">
1044 jQuery(document).ready(function() {
1045 jQuery("#autofill").click(function(event) {
1046 event.preventDefault();';
1048 while ($i <= $numAsked) {
1049 print
'jQuery("#qtyl'.$i.
'").val(jQuery("#qtyasked'.$i.
'").val() - jQuery("#qtydelivered'.$i.
'").val());'.
"\n";
1053 jQuery("#autoreset").click(function(event) {
1054 event.preventDefault();';
1056 while ($i <= $numAsked) {
1057 print
'jQuery("#qtyl'.$i.
'").val(0);'.
"\n";
1066 print
'<table class="noborder centpercent">';
1069 $objectsrc->loadReceptions();
1072 print
'<tr class="liste_titre">';
1073 print
'<td>'.$langs->trans(
"Description").
'</td>';
1074 print
'<td>'.$langs->trans(
"Comment").
'</td>';
1075 print
'<td class="center">'.$langs->trans(
"QtyOrdered").
'</td>';
1076 print
'<td class="center">'.$langs->trans(
"QtyReceived").
'</td>';
1077 print
'<td class="center">'.$langs->trans(
"QtyToReceive");
1079 print
'<td>'.$langs->trans(
"BuyingPrice").
'</td>';
1081 if (!isModEnabled(
'productbatch')) {
1082 print
' <br><center><a href="#" id="autofill"><span class="fas fa-fill pictofixedwidth" style=""></span> '.$langs->trans(
"Fill").
'</a>';
1083 print
' <a href="#" id="autoreset"><span class="fas fa-eraser pictofixedwidth" style=""></span>'.$langs->trans(
"Reset").
'</a></center><br>';
1086 if (isModEnabled(
'stock')) {
1087 print
'<td class="left">'.$langs->trans(
"Warehouse").
' ('.$langs->trans(
"Stock").
')</td>';
1089 if (isModEnabled(
'productbatch')) {
1090 print
'<td class="left">'.$langs->trans(
"batch_number").
'</td>';
1092 print
'<td class="left">'.$langs->trans(
"SellByDate").
'</td>';
1095 print
'<td class="left">'.$langs->trans(
"EatByDate").
'</td>';
1104 $arrayofpurchaselinealreadyoutput = array();
1108 while ($indiceAsked <= $numAsked) {
1112 foreach ($objectsrc->lines as $supplierLine) {
1113 if ($dispatchLines[$indiceAsked][
'fk_commandefourndet'] == $supplierLine->id) {
1114 $line = $supplierLine;
1120 $type = $line->product_type ? $line->product_type : $line->fk_product_type;
1123 if (!empty($line->date_start)) {
1126 if (!empty($line->date_end)) {
1130 print
'<!-- line fk_commandefourndet='.$line->id.
' for product='.$line->fk_product.
' -->'.
"\n";
1131 print
'<tr class="oddeven">'.
"\n";
1134 if ($line->fk_product > 0) {
1135 $product->fetch($line->fk_product);
1136 $product->load_stock(
'warehouseopen');
1141 print
'<a name="'.$line->id.
'"></a>';
1143 print
'<input type="hidden" name="productl'.$indiceAsked.
'" value="'.$line->fk_product.
'">';
1145 if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {
1146 print
'<input type="hidden" name="productid'.$indiceAsked.
'" value="'.$line->fk_product.
'">';
1149 $product_static = $product;
1151 $text = $product_static->getNomUrl(1);
1152 $text .=
' - '.(!empty($line->label) ? $line->label : $line->product_label);
1154 print $form->textwithtooltip($text, $description, 3,
'',
'', $i);
1157 print_date_range($db->jdate($line->date_start), $db->jdate($line->date_end));
1161 print ($line->desc && $line->desc != $line->product_label) ?
'<br>'.dol_htmlentitiesbr($line->desc) :
'';
1167 if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {
1169 $text =
img_object($langs->trans(
'Service'),
'service');
1171 $text =
img_object($langs->trans(
'Product'),
'product');
1174 if (!empty($line->label)) {
1175 $text .=
' <strong>'.$line->label.
'</strong>';
1176 print $form->textwithtooltip($text, $line->desc, 3,
'',
'', $i);
1178 print $text.
' '.nl2br($line->desc);
1182 print_date_range($db->jdate($line->date_start), $db->jdate($line->date_end));
1189 $defaultcomment = $dispatchLines[$indiceAsked][
'comment'];
1191 print
'<input type="text" class="maxwidth100" name="comment'.$indiceAsked.
'" value="'.$defaultcomment.
'">';
1195 print
'<td class="center">';
1196 if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {
1199 print
'<input type="hidden" name="fk_commandefournisseurdet'.$indiceAsked.
'" value="'.$line->id.
'">';
1200 print
'<input type="hidden" name="pul'.$indiceAsked.
'" value="'.$line->pu_ht.
'">';
1201 print
'<input name="qtyasked'.$indiceAsked.
'" id="qtyasked'.$indiceAsked.
'" type="hidden" value="'.$line->qty.
'">';
1203 $qtyProdCom = $line->qty;
1206 print
'<td class="center">';
1207 $quantityDelivered = $objectsrc->receptions[$line->id];
1208 if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {
1209 print $quantityDelivered;
1211 print
'<input name="qtydelivered'.$indiceAsked.
'" id="qtydelivered'.$indiceAsked.
'" type="hidden" value="'.$quantityDelivered.
'">';
1216 $quantityToBeDelivered = 0;
1218 $quantityToBeDelivered = $dispatchLines[$indiceAsked][
'qty'];
1220 $warehouse_id = $dispatchLines[$indiceAsked][
'ent'];
1223 $warehouseObject =
null;
1224 if (isModEnabled(
'stock')) {
1226 print
'<!-- Case warehouse already known or product not a predefined product -->';
1227 if (array_key_exists($dispatchLines[$indiceAsked][
'ent'], $product->stock_warehouse)) {
1228 $stock = +$product->stock_warehouse[$dispatchLines[$indiceAsked][
'ent']]->real;
1230 $deliverableQty = $dispatchLines[$indiceAsked][
'qty'];
1231 $cost_price = $dispatchLines[$indiceAsked][
'pu'];
1234 print
'<td class="center">';
1237 $defaultqty =
GETPOSTINT(
'qtyl'.$indiceAsked);
1239 print
'<input name="idl'.$indiceAsked.
'" type="hidden" value="'.$line->id.
'">';
1240 print
'<input class="right" name="qtyl'.$indiceAsked.
'" id="qtyl'.$indiceAsked.
'" type="text" size="4" value="'.$deliverableQty.
'">';
1242 print $langs->trans(
"NA");
1248 print
'<input class="width75 right" name="cost_price'.$indiceAsked.
'" id="cost_price'.$indiceAsked.
'" value="'.$cost_price.
'">';
1253 if (isModEnabled(
'stock')) {
1254 print
'<td class="left">';
1257 $ent =
"entl".$indiceAsked;
1258 $idl =
"idl".$indiceAsked;
1260 if ($line->fk_product > 0) {
1261 print
'<!-- Show warehouse selection -->';
1262 print $formproduct->selectWarehouses($tmpentrepot_id,
'entl'.$indiceAsked,
'', 0, 0, $line->fk_product,
'', 1);
1265 print $langs->trans(
"Service");
1270 if (isModEnabled(
'productbatch')) {
1271 if (!empty($product->status_batch)) {
1272 print
'<td><input name="batch'.$indiceAsked.
'" value="'.$dispatchLines[$indiceAsked][
'lot'].
'"></td>';
1274 print
'<td class="nowraponall">';
1275 print $form->selectDate($dispatchLines[$indiceAsked][
'DLC'],
'dlc'.$indiceAsked, 0, 0, 1,
"");
1279 print
'<td class="nowraponall">';
1280 print $form->selectDate($dispatchLines[$indiceAsked][
'DLUO'],
'dluo'.$indiceAsked, 0, 0, 1,
"");
1284 print
'<td colspan="3"></td>';
1289 $arrayofpurchaselinealreadyoutput[$line->id] = $line->id;
1295 if (!empty($extrafields)) {
1297 if (isModEnabled(
'productbatch')) {
1309 $srcLine->id = $line->id;
1310 $srcLine->fetch_optionals();
1312 if (empty($recLine->array_options) && !empty($dispatchLines[$indiceAsked][
'array_options'])) {
1313 $recLine->array_options = $dispatchLines[$indiceAsked][
'array_options'];
1315 $recLine->array_options = array_merge($recLine->array_options, $srcLine->array_options);
1317 print $recLine->showOptionals($extrafields,
'edit', array(
'style' =>
'class="oddeven"',
'colspan' => $colspan), $indiceAsked,
'', 1);
1327 print $form->buttonsSaveCancel(
"Create");
1336} elseif ($id || $ref) {
1344 $num_prod = count($lines);
1348 print $langs->trans(
"NoRecordFound");
1354 $object->origin =
'CommandeFournisseur';
1355 $typeobject =
$object->origin;
1357 $origin_id =
$object->origin_id;
1364 $res =
$object->fetch_optionals();
1367 print
dol_get_fiche_head($head,
'reception', $langs->trans(
"Reception"), -1,
'dollyrevert');
1372 if ($action ==
'delete') {
1373 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $langs->trans(
'DeleteReception'), $langs->trans(
"ConfirmDeleteReception",
$object->ref),
'confirm_delete',
'', 0, 1);
1377 if ($action ==
'valid') {
1378 $objectref = substr(
$object->ref, 1, 4);
1379 if ($objectref ==
'PROV') {
1380 $numref =
$object->getNextNumRef($soc);
1385 $text = $langs->trans(
"ConfirmValidateReception", $numref);
1387 $text .=
'<br>'.img_picto(
'',
'movement',
'class="pictofixedwidth"').$langs->trans(
"StockMovementWillBeRecorded").
'.';
1389 $text .=
'<br>'.img_picto(
'',
'movement',
'class="pictofixedwidth"').$langs->trans(
"StockMovementNotYetRecorded").
'.';
1392 if (isModEnabled(
'notification')) {
1393 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1394 $notify =
new Notify($db);
1396 $text .= $notify->confirmMessage(
'RECEPTION_VALIDATE',
$object->socid,
$object);
1399 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $langs->trans(
'ValidateReception'), $text,
'confirm_valid',
'', 0, 1, 250);
1403 if ($action ==
'annuler') {
1404 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $langs->trans(
'CancelReception'), $langs->trans(
"ConfirmCancelReception",
$object->ref),
'confirm_cancel',
'', 0, 1);
1407 if (!$formconfirm) {
1408 $parameters = array(
'formConfirm' => $formconfirm);
1409 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters,
$object, $action);
1410 if (empty($reshook)) {
1411 $formconfirm .= $hookmanager->resPrint;
1412 } elseif ($reshook > 0) {
1413 $formconfirm = $hookmanager->resPrint;
1423 $tmparray =
$object->getTotalWeightVolume();
1424 $totalWeight = $tmparray[
'weight'];
1425 $totalVolume = $tmparray[
'volume'];
1428 if ($typeobject ==
'commande' &&
$object->origin_object->id && isModEnabled(
'order')) {
1430 $objectsrc->fetch(
$object->origin_object->id);
1432 if ($typeobject ==
'propal' &&
$object->origin_object->id && isModEnabled(
"propal")) {
1433 $objectsrc =
new Propal($db);
1434 $objectsrc->fetch(
$object->origin_object->id);
1436 if ($typeobject ==
'CommandeFournisseur' &&
$object->origin_object->id && isModEnabled(
"supplier_order")) {
1438 $objectsrc->fetch(
$object->origin_object->id);
1441 $linkback =
'<a href="'.DOL_URL_ROOT.
'/reception/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
1442 $morehtmlref =
'<div class="refidno">';
1445 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier',
$object->ref_supplier,
$object, $user->hasRight(
'reception',
'creer'),
'string',
'', 0, 1);
1446 $morehtmlref .= $form->editfieldval(
"RefSupplier",
'ref_supplier',
$object->ref_supplier,
$object, $user->hasRight(
'reception',
'creer'),
'string',
'',
null,
null,
'', 1);
1449 $morehtmlref .=
'<br>'.$object->thirdparty->getNomUrl(1);
1451 if (isModEnabled(
'project')) {
1452 $langs->load(
"projects");
1453 $morehtmlref .=
'<br>';
1455 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
1456 if ($action !=
'classify' && $permissiontoadd) {
1457 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
1459 $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');
1461 if (!empty($objectsrc) && !empty($objectsrc->fk_project)) {
1463 $proj->fetch($objectsrc->fk_project);
1464 $morehtmlref .= $proj->getNomUrl(1);
1466 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
1471 $morehtmlref .=
'</div>';
1473 dol_banner_tab(
$object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
1476 print
'<div class="fichecenter">';
1477 print
'<div class="fichehalfleft">';
1478 print
'<div class="underbanner clearboth"></div>';
1480 print
'<table class="border centpercent tableforfield">';
1483 if ($typeobject ==
'commande' &&
$object->origin_object->id && isModEnabled(
'order')) {
1485 print $langs->trans(
"RefOrder").
'</td>';
1486 print
'<td colspan="3">';
1487 print $objectsrc->getNomUrl(1,
'commande');
1491 if ($typeobject ==
'propal' &&
$object->origin_object->id && isModEnabled(
"propal")) {
1493 print $langs->trans(
"RefProposal").
'</td>';
1494 print
'<td colspan="3">';
1495 print $objectsrc->getNomUrl(1,
'reception');
1499 if ($typeobject ==
'CommandeFournisseur' &&
$object->origin_object->id && isModEnabled(
"propal")) {
1501 print $langs->trans(
"SupplierOrder").
'</td>';
1502 print
'<td colspan="3">';
1503 print $objectsrc->getNomUrl(1,
'reception');
1509 print
'<tr><td class="titlefield">'.$langs->trans(
"DateCreation").
'</td>';
1510 print
'<td colspan="3">'.dol_print_date(
$object->date_creation,
"dayhour",
"tzuserrel").
"</td>\n";
1514 print
'<tr><td height="10">';
1515 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1516 print $langs->trans(
'DateDeliveryPlanned');
1519 if ($action !=
'editdate_livraison' && $permissiontoadd) {
1520 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editdate_livraison&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->trans(
'SetDeliveryDate'), 1).
'</a></td>';
1522 print
'</tr></table>';
1523 print
'</td><td colspan="2">';
1524 if ($action ==
'editdate_livraison') {
1525 print
'<form name="setdate_livraison" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
1526 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1527 print
'<input type="hidden" name="action" value="setdate_livraison">';
1528 print $form->selectDate(
$object->date_delivery ?
$object->date_delivery : -1,
'liv_', 1, 1, 0,
"setdate_livraison", 1, 0);
1529 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
1539 print $form->editfieldkey(
"Weight",
'trueWeight',
$object->trueWeight,
$object, $user->hasRight(
'reception',
'creer'));
1540 print
'</td><td colspan="3">';
1542 if ($action ==
'edittrueWeight') {
1543 print
'<form name="settrueweight" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1544 print
'<input name="action" value="settrueWeight" type="hidden">';
1545 print
'<input name="id" value="'.$object->id.
'" type="hidden">';
1546 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1547 print
'<input id="trueWeight" name="trueWeight" value="'.$object->trueWeight.
'" type="text">';
1548 print $formproduct->selectMeasuringUnits(
"weight_units",
"weight",
$object->weight_units, 0, 2);
1549 print
' <input class="button" name="modify" value="'.$langs->trans(
"Modify").
'" type="submit">';
1550 print
' <input class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'" type="submit">';
1554 print (
$object->trueWeight &&
$object->weight_units !=
'') ?
' '.measuringUnitString(0,
"weight",
$object->weight_units) :
'';
1558 if ($totalWeight > 0) {
1559 if (!empty(
$object->trueWeight)) {
1560 print
' ('.$langs->trans(
"SumOfProductWeights").
': ';
1562 print
showDimensionInBestUnit($totalWeight, 0,
"weight", $langs, isset($conf->global->MAIN_WEIGHT_DEFAULT_ROUND) ? $conf->global->MAIN_WEIGHT_DEFAULT_ROUND : -1, isset($conf->global->MAIN_WEIGHT_DEFAULT_UNIT) ? $conf->global->MAIN_WEIGHT_DEFAULT_UNIT :
'no');
1563 if (!empty(
$object->trueWeight)) {
1570 print
'<tr><td>'.$form->editfieldkey(
"Width",
'trueWidth',
$object->trueWidth,
$object, $user->hasRight(
'reception',
'creer')).
'</td><td colspan="3">';
1571 print $form->editfieldval(
"Width",
'trueWidth',
$object->trueWidth,
$object, $user->hasRight(
'reception',
'creer'));
1572 print (
$object->trueWidth &&
$object->width_units !=
'') ?
' '.measuringUnitString(0,
"size",
$object->width_units) :
'';
1576 print
'<tr><td>'.$form->editfieldkey(
"Height",
'trueHeight',
$object->trueHeight,
$object, $user->hasRight(
'reception',
'creer')).
'</td><td colspan="3">';
1577 if ($action ==
'edittrueHeight') {
1578 print
'<form name="settrueHeight" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1579 print
'<input name="action" value="settrueHeight" type="hidden">';
1580 print
'<input name="id" value="'.$object->id.
'" type="hidden">';
1581 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1582 print
'<input id="trueHeight" name="trueHeight" value="'.$object->trueHeight.
'" type="text">';
1583 print $formproduct->selectMeasuringUnits(
"size_units",
"size",
$object->size_units, 0, 2);
1584 print
' <input class="button" name="modify" value="'.$langs->trans(
"Modify").
'" type="submit">';
1585 print
' <input class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'" type="submit">';
1589 print (
$object->trueHeight &&
$object->height_units !=
'') ?
' '.measuringUnitString(0,
"size",
$object->height_units) :
'';
1595 print
'<tr><td>'.$form->editfieldkey(
"Depth",
'trueDepth',
$object->trueDepth,
$object, $user->hasRight(
'reception',
'creer')).
'</td><td colspan="3">';
1596 print $form->editfieldval(
"Depth",
'trueDepth',
$object->trueDepth,
$object, $user->hasRight(
'reception',
'creer'));
1597 print (
$object->trueDepth &&
$object->depth_units !=
'') ?
' '.measuringUnitString(0,
"size",
$object->depth_units) :
'';
1602 print $langs->trans(
"Volume");
1604 print
'<td colspan="3">';
1605 $calculatedVolume = 0;
1609 $volumeUnit =
$object->size_units * 3;
1612 if ($calculatedVolume > 0) {
1613 if ($volumeUnit < 50) {
1614 print
showDimensionInBestUnit($calculatedVolume, $volumeUnit,
"volume", $langs, isset($conf->global->MAIN_VOLUME_DEFAULT_ROUND) ? $conf->global->MAIN_VOLUME_DEFAULT_ROUND : -1, isset($conf->global->MAIN_VOLUME_DEFAULT_UNIT) ? $conf->global->MAIN_VOLUME_DEFAULT_UNIT :
'no');
1619 if ($totalVolume > 0) {
1620 if ($calculatedVolume) {
1621 print
' ('.$langs->trans(
"SumOfProductVolumes").
': ';
1623 print
showDimensionInBestUnit($totalVolume, 0,
"volume", $langs, isset($conf->global->MAIN_VOLUME_DEFAULT_ROUND) ? $conf->global->MAIN_VOLUME_DEFAULT_ROUND : -1, isset($conf->global->MAIN_VOLUME_DEFAULT_UNIT) ? $conf->global->MAIN_VOLUME_DEFAULT_UNIT :
'no');
1625 if ($calculatedVolume) {
1635 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1640 print
'<div class="fichehalfright">';
1641 print
'<div class="underbanner clearboth"></div>';
1643 print
'<table class="border centpercent tableforfield">';
1646 print
'<tr><td height="10">';
1647 print
'<table class="nobordernopadding centpercent"><tr><td>';
1648 print $langs->trans(
'ReceptionMethod');
1651 if ($action !=
'editshipping_method_id' && $permissiontoadd) {
1652 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editshipping_method_id&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->trans(
'SetReceptionMethod'), 1).
'</a></td>';
1654 print
'</tr></table>';
1655 print
'</td><td colspan="2">';
1656 if ($action ==
'editshipping_method_id') {
1657 print
'<form name="setshipping_method_id" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
1658 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1659 print
'<input type="hidden" name="action" value="setshipping_method_id">';
1660 $object->fetch_delivery_methods();
1661 print $form->selectarray(
"shipping_method_id",
$object->meths,
$object->shipping_method_id, 1, 0, 0,
"", 1);
1663 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
1665 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
1668 if (
$object->shipping_method_id > 0) {
1670 $code = $langs->getLabelFromKey($db,
$object->shipping_method_id,
'c_shipment_mode',
'rowid',
'code');
1671 print $langs->trans(
"SendingMethod".strtoupper($code));
1678 print
'<tr><td class="titlefield">'.$form->editfieldkey(
"TrackingNumber",
'tracking_number',
$object->tracking_number,
$object, $user->hasRight(
'reception',
'creer')).
'</td><td colspan="3">';
1679 print $form->editfieldval(
"TrackingNumber",
'tracking_number',
$object->tracking_url,
$object, $user->hasRight(
'reception',
'creer'),
'safehtmlstring',
$object->tracking_number);
1683 if (isModEnabled(
'incoterm')) {
1685 print
'<table width="100%" class="nobordernopadding"><tr><td>';
1686 print $langs->trans(
'IncotermLabel');
1687 print
'<td><td class="right">';
1688 if ($user->hasRight(
'reception',
'creer')) {
1689 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/reception/card.php?id='.
$object->id.
'&action=editincoterm&token='.
newToken().
'">'.
img_edit().
'</a>';
1693 print
'</td></tr></table>';
1695 print
'<td colspan="3">';
1696 if ($action !=
'editincoterm') {
1697 print $form->textwithpicto(
$object->display_incoterms(),
$object->label_incoterms, 1);
1699 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
1709 print
'<div class="clearboth"></div>';
1713 if ($action ==
'editline') {
1714 print
'<form name="updateline" id="updateline" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$line_id.
'" method="POST">
1715 <input type="hidden" name="token" value="' .
newToken().
'">
1716 <input type="hidden" name="action" value="updateline">
1717 <input type="hidden" name="mode" value="">
1718 <input type="hidden" name="id" value="' .
$object->id.
'">';
1722 print
'<div class="div-table-responsive-no-min">';
1723 print
'<table id="tablelines" class="noborder centpercent">';
1725 print
'<tr class="liste_titre">';
1728 print
'<td width="5" class="center"> </td>';
1731 print
'<td>'.$langs->trans(
"Products").
'</td>';
1733 print
'<td>'.$langs->trans(
"Comment").
'</td>';
1735 print
'<td class="center">'.$langs->trans(
"QtyOrdered").
'</td>';
1736 if ($origin && $origin_id > 0) {
1737 print
'<td class="center">'.$langs->trans(
"QtyInOtherReceptions").
'</td>';
1739 if ($action ==
'editline') {
1741 if (!isModEnabled(
'stock')) {
1744 if (empty($conf->productbatch->enabled)) {
1747 print
'<td class="center" colspan="'.$editColspan.
'">';
1749 print $langs->trans(
"QtyToReceive").
' - ';
1751 print $langs->trans(
"QtyReceived").
' - ';
1753 if (isModEnabled(
'stock')) {
1754 print $langs->trans(
"WarehouseTarget").
' - ';
1756 if (isModEnabled(
'productbatch')) {
1757 print $langs->trans(
"Batch");
1761 $statusreceived = $object::STATUS_CLOSED;
1763 $statusreceived = $object::STATUS_VALIDATED;
1766 $statusreceived = $object::STATUS_CLOSED;
1768 if (
$object->statut < $statusreceived) {
1769 print
'<td class="center">'.$langs->trans(
"QtyToReceive").
'</td>';
1771 print
'<td class="center">'.$langs->trans(
"QtyReceived").
'</td>';
1773 if (isModEnabled(
'stock')) {
1774 print
'<td class="left">'.$langs->trans(
"WarehouseTarget").
'</td>';
1777 if (isModEnabled(
'productbatch')) {
1778 print
'<td class="left">'.$langs->trans(
"Batch").
'</td>';
1781 print
'<td class="center">'.$langs->trans(
"CalculatedWeight").
'</td>';
1782 print
'<td class="center">'.$langs->trans(
"CalculatedVolume").
'</td>';
1785 print
'<td class="linecoledit"></td>';
1786 print
'<td class="linecoldelete" width="10"></td>';
1795 $outputlangs = $langs;
1797 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
1798 $newlang =
GETPOST(
'lang_id',
'aZ09');
1800 if (empty($newlang)) {
1801 $newlang =
$object->thirdparty->default_lang;
1803 if (!empty($newlang)) {
1804 $outputlangs =
new Translate(
"", $conf);
1805 $outputlangs->setDefaultLang($newlang);
1810 $alreadysent = array();
1812 $origin =
'commande_fournisseur';
1814 if ($origin && $origin_id > 0) {
1815 $sql =
"SELECT obj.rowid, obj.fk_product, obj.label, obj.description, obj.product_type as fk_product_type, obj.qty as qty_asked, obj.date_start, obj.date_end";
1816 $sql .=
", ed.rowid as receptionline_id, ed.qty, ed.fk_reception as reception_id, ed.fk_entrepot";
1817 $sql .=
", e.rowid as reception_id, e.ref as reception_ref, e.date_creation, e.date_valid, e.date_delivery, e.date_reception";
1819 $sql .=
', p.label as product_label, p.ref, p.fk_product_type, p.rowid as prodid, p.tobatch as product_tobatch';
1820 $sql .=
', p.description as product_desc';
1821 $sql .=
" FROM ".MAIN_DB_PREFIX.
"receptiondet_batch as ed";
1822 $sql .=
", ".MAIN_DB_PREFIX.
"reception as e";
1823 $sql .=
", ".MAIN_DB_PREFIX.$origin.
"det as obj";
1825 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p ON obj.fk_product = p.rowid";
1826 $sql .=
" WHERE e.entity IN (".getEntity(
'reception').
")";
1827 $sql .=
" AND obj.fk_commande = ".((int) $origin_id);
1828 $sql .=
" AND obj.rowid = ed.fk_elementdet";
1829 $sql .=
" AND ed.fk_reception = e.rowid";
1830 $sql .=
" AND ed.fk_reception !=".((int)
$object->id);
1832 $sql .=
" ORDER BY obj.fk_product";
1834 dol_syslog(
"get list of reception lines", LOG_DEBUG);
1835 $resql = $db->query($sql);
1837 $num = $db->num_rows($resql);
1841 $obj = $db->fetch_object($resql);
1844 $alreadysent[$obj->rowid][$obj->receptionline_id] = array(
'reception_ref' => $obj->reception_ref,
'reception_id' => $obj->reception_id,
'warehouse' => $obj->fk_entrepot,
'qty' => $obj->qty,
'date_valid' => $obj->date_valid,
'date_delivery' => $obj->date_delivery);
1852 $arrayofpurchaselinealreadyoutput = array();
1856 for ($i = 0; $i < $num_prod; $i++) {
1857 print
'<!-- origin line id = '.(!empty($lines[$i]->origin_line_id) ? $lines[$i]->origin_line_id : 0).
' -->';
1858 print
'<tr class="oddeven" id="row-'.$lines[$i]->id.
'" data-id="'.$lines[$i]->id.
'" data-element="'.$lines[$i]->element.
'">';
1862 print
'<td class="center">'.($i + 1).
'</td>';
1866 if ($lines[$i]->fk_product > 0) {
1870 $prod->fetch($lines[$i]->fk_product);
1871 $label = (!empty($prod->multilangs[$outputlangs->defaultlang][
"label"])) ? $prod->multilangs[$outputlangs->defaultlang][
"label"] : $lines[$i]->product->label;
1873 $label = (!empty($lines[$i]->product->label) ? $lines[$i]->product->label : $lines[$i]->product->product_label);
1876 print
'<td class="linecoldescription">';
1877 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
1878 $text = $lines[$i]->product->getNomUrl(1);
1879 $text .=
' - '.$label;
1881 print $form->textwithtooltip($text, $description, 3,
'',
'', $i);
1882 print_date_range(!empty($lines[$i]->date_start) ? $lines[$i]->date_start : 0, !empty($lines[$i]->date_end) ? $lines[$i]->date_end : 0);
1884 print (!empty($lines[$i]->product->description) && $lines[$i]->description != $lines[$i]->product->description) ?
'<br>'.dol_htmlentitiesbr($lines[$i]->
description) :
'';
1889 print
'<td class="linecoldescription">';
1890 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
1892 $text =
img_object($langs->trans(
'Service'),
'service');
1894 $text =
img_object($langs->trans(
'Product'),
'product');
1897 if (!empty($lines[$i]->label)) {
1898 $text .=
' <strong>'.$lines[$i]->label.
'</strong>';
1899 print $form->textwithtooltip($text, $lines[$i]->
description, 3,
'',
'', $i);
1909 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
1910 print
'<td><input name="comment'.$line_id.
'" id="comment'.$line_id.
'" value="'.
dol_escape_htmltag($lines[$i]->comment).
'"></td>';
1912 print
'<td style="white-space: pre-wrap; max-width: 200px;">'.dol_escape_htmltag($lines[$i]->comment).
'</td>';
1917 print
'<td class="center linecolqty">';
1918 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
1919 print $lines[$i]->qty_asked;
1924 if ($origin && $origin_id > 0) {
1925 print
'<td class="center nowrap linecolqtyinotherreceptions">';
1927 $qtyalreadyreceived = 0;
1928 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
1929 foreach ($alreadysent as $key => $val) {
1930 if ($lines[$i]->fk_commandefourndet == $key) {
1932 foreach ($val as $receptionline_id => $receptionline_var) {
1933 if ($receptionline_var[
'reception_id'] == $lines[$i]->fk_reception) {
1939 $htmltooltip .=
'<br>';
1941 $reception_static->fetch($receptionline_var[
'reception_id']);
1942 $htmltooltip .= $reception_static->getNomUrl(1, 0, 0, 0, 1);
1943 $htmltooltip .=
' - '.$receptionline_var[
'qty'];
1945 $htmltext = $langs->trans(
"DateValidation").
' : '.(empty($receptionline_var[
'date_valid']) ? $langs->trans(
"Draft") :
dol_print_date($receptionline_var[
'date_valid'],
'dayhour'));
1946 if (isModEnabled(
'stock') && $receptionline_var[
'warehouse'] > 0) {
1947 $warehousestatic->fetch($receptionline_var[
'warehouse']);
1948 $htmltext .=
'<br>'.$langs->trans(
"From").
' : '.$warehousestatic->getNomUrl(1,
'', 0, 1);
1950 $htmltooltip .=
' '.$form->textwithpicto(
'', $htmltext, 1);
1952 $qtyalreadyreceived += $receptionline_var[
'qty'];
1955 $htmltooltip = $langs->trans(
"QtyInOtherReceptions").
'...<br><br>'.$htmltooltip.
'<br><input type="submit" name="dummyhiddenbuttontogetfocus" style="display:none" autofocus>';
1960 print $form->textwithpicto($qtyalreadyreceived, $htmltooltip, 1,
'info',
'', 0, 3,
'tooltip'.$lines[$i]->
id);
1964 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
1966 print
'<td colspan="'.$editColspan.
'" class="center"><table class="nobordernopadding">';
1967 if (isModEnabled(
'stock')) {
1968 if ($lines[$i]->fk_product > 0) {
1969 print
'<!-- case edit 1 -->';
1972 print
'<td><input name="qtyl'.$line_id.
'" id="qtyl'.$line_id.
'" type="text" size="4" value="'.$lines[$i]->qty.
'"></td>';
1974 print
'<td>'.$formproduct->selectWarehouses($lines[$i]->fk_entrepot,
'entl'.$line_id,
'', 1, 0, $lines[$i]->fk_product,
'', 1).
'</td>';
1976 if ($conf->productbatch->enabled && !empty($lines[$i]->product->status_batch)) {
1977 print
'<td class="nowraponall left"><input name="batch'.$line_id.
'" id="batch'.$line_id.
'" type="text" value="'.$lines[$i]->batch.
'"><br>';
1979 print $langs->trans(
'SellByDate').
' : ';
1980 print $form->selectDate($lines[$i]->sellby,
'dlc'.$line_id, 0, 0, 1,
"").
'</br>';
1983 print $langs->trans(
'EatByDate').
' : ';
1984 print $form->selectDate($lines[$i]->eatby,
'dluo'.$line_id, 0, 0, 1,
"");
1990 print
'<!-- case edit 2 -->';
1993 print
'<td><input name="qtyl'.$line_id.
'" id="qtyl'.$line_id.
'" type="text" size="4" value="'.$lines[$i]->qty.
'"></td>';
2001 print
'</table></td>';
2004 print
'<td class="center linecolqtytoreceive">'.$lines[$i]->qty.
'</td>';
2007 if (isModEnabled(
'stock')) {
2008 if ($lines[$i]->fk_entrepot > 0) {
2010 $entrepot->fetch($lines[$i]->fk_entrepot);
2012 print
'<td class="left tdoverflowmax150" title="'.dol_escape_htmltag($entrepot->label).
'">';
2013 print $entrepot->getNomUrl(1);
2021 if (isModEnabled(
'productbatch')) {
2022 if (isset($lines[$i]->batch)) {
2023 print
'<!-- Detail of lot -->';
2024 print
'<td class="linecolbatch nowrap">';
2025 $detail = $langs->trans(
"NA");
2026 if ($lines[$i]->product->status_batch > 0 && $lines[$i]->fk_product > 0) {
2027 require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/productlot.class.php';
2029 $reslot = $productlot->fetch(0, $lines[$i]->fk_product, $lines[$i]->batch);
2031 $detail = $productlot->getNomUrl(1);
2034 $batchinfo = $langs->trans(
"Batch").
': '.$lines[$i]->batch;
2036 $batchinfo .=
' - '.$langs->trans(
"SellByDate").
': '.
dol_print_date($lines[$i]->sellby,
"day");
2039 $batchinfo .=
' - '.$langs->trans(
"EatByDate").
': '.
dol_print_date($lines[$i]->eatby,
"day");
2041 $detail = $form->textwithtooltip(
img_picto(
'',
'object_barcode').
' '.$langs->trans(
"DetailBatchNumber"), $batchinfo);
2044 print $detail .
'</td>';
2052 print
'<td class="center linecolweight">';
2054 print $lines[$i]->product->weight * $lines[$i]->qty.
' '.
measuringUnitString(0,
"weight", $lines[$i]->product->weight_units);
2061 print
'<td class="center linecolvolume">';
2063 print $lines[$i]->product->volume * $lines[$i]->qty.
' '.
measuringUnitString(0,
"volume", $lines[$i]->product->volume_units);
2070 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
2071 print
'<td class="center valignmiddle" colspan="2">';
2072 print
'<input type="submit" class="button small button-save" id="savelinebutton marginbottomonly" name="save" value="'.$langs->trans(
"Save").
'"><br>';
2073 print
'<input type="submit" class="button small button-cancel" id="cancellinebutton" name="cancel" value="'.$langs->trans(
"Cancel").
'"><br>';
2075 } elseif (
$object->statut == Reception::STATUS_DRAFT) {
2077 print
'<td class="linecoledit center">';
2078 print
'<a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=editline&token='.
newToken().
'&lineid='.$lines[$i]->id.
'">'.
img_edit().
'</a>';
2080 print
'<td class="linecoldelete" width="10">';
2081 print
'<a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=deleteline&token='.
newToken().
'&lineid='.$lines[$i]->id.
'">'.
img_delete().
'</a>';
2085 if (!empty($rowExtrafieldsStart)) {
2086 print $rowExtrafieldsStart;
2087 print $rowExtrafieldsView;
2093 $arrayofpurchaselinealreadyoutput[$lines[$i]->fk_commandefourndet] = $lines[$i]->fk_commandefourndet;
2096 $extralabelslines = $extrafields->attributes[$lines[$i]->table_element];
2097 if (!empty($extralabelslines) && is_array($extralabelslines) && count($extralabelslines) > 0) {
2099 if (isModEnabled(
'stock')) {
2102 if (isModEnabled(
'productbatch')) {
2107 $line->id = $lines[$i]->id;
2108 $line->fetch_optionals();
2110 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
2111 print $line->showOptionals($extrafields,
'edit', array(
'colspan' => $colspan),
'');
2113 print $line->showOptionals($extrafields,
'view', array(
'colspan' => $colspan),
'');
2135 if (($user->socid == 0) && ($action !=
'presend')) {
2136 print
'<div class="tabsAction">';
2138 $parameters = array();
2139 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
2140 if (empty($reshook)) {
2141 if (
$object->statut == Reception::STATUS_DRAFT && $num_prod > 0) {
2142 if ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'reception',
'creer'))
2143 || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'reception',
'reception_advance',
'validate'))) {
2144 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=valid&token='.
newToken().
'">'.$langs->trans(
"Validate").
'</a>';
2146 print
'<a class="butActionRefused" href="#" title="'.$langs->trans(
"NotAllowed").
'">'.$langs->trans(
"Validate").
'</a>';
2150 if (
$object->statut == Reception::STATUS_VALIDATED && $user->hasRight(
'reception',
'creer')) {
2151 print
'<div class="inline-block divButAction"><a class="butAction" href="card.php?id='.$object->id.
'&action=modif&token='.
newToken().
'">'.$langs->trans(
'SetToDraft').
'</a></div>';
2156 if (
$object->statut == Reception::STATUS_CLOSED && $user->hasRight(
'reception',
'creer')) {
2157 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"ReOpen").
'</a>';
2161 if (empty($user->socid)) {
2163 if (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
'reception',
'reception_advance',
'send')) {
2164 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=presend&mode=init#formmailbeforetitle">'.$langs->trans(
'SendByMail').
'</a>';
2166 print
'<a class="butActionRefused" href="#">'.$langs->trans(
'SendByMail').
'</a>';
2172 if (isModEnabled(
"supplier_invoice") && (
$object->statut == Reception::STATUS_VALIDATED ||
$object->statut == Reception::STATUS_CLOSED)) {
2173 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
'supplier_invoice',
'creer')) {
2175 print
'<a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/facture/card.php?action=create&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->socid.
'">'.$langs->trans(
"CreateBill").
'</a>';
2182 if (
$object->statut == Reception::STATUS_VALIDATED) {
2183 if ($user->hasRight(
'reception',
'creer') &&
$object->statut > 0) {
2185 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifybilled&token='.
newToken().
'">'.$langs->trans(
'ClassifyBilled').
'</a>';
2187 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifyclosed&token='.
newToken().
'">'.$langs->trans(
"Close").
'</a>';
2191 if ($user->hasRight(
'reception',
'supprimer')) {
2192 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=delete&token='.
newToken().
'">'.$langs->trans(
"Delete").
'</a>';
2204 if ($action !=
'presend' && $action !=
'editline') {
2205 print
'<div class="fichecenter"><div class="fichehalfleft">';
2208 $filedir = $conf->reception->dir_output.
"/".$objectref;
2210 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
2212 $genallowed = $user->hasRight(
'reception',
'lire');
2213 $delallowed = $user->hasRight(
'reception',
'creer');
2215 print $formfile->showdocuments(
'reception', $objectref, $filedir, $urlsource, $genallowed, $delallowed,
$object->model_pdf, 1, 0, 0, 28, 0,
'',
'',
'', $soc->default_lang);
2219 $somethingshown = $form->showLinkedObjectBlock(
$object,
'');
2221 print
'</div><div class="fichehalfright">';
2223 print
'</div></div>';
2227 $modelmail =
'shipping_send';
2228 $defaulttopic =
'SendReceptionRef';
2229 $diroutput = $conf->reception->dir_output;
2230 $trackid =
'rec'.$object->id;
2232 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
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()
Empty header.
Class to manage table ReceptionLineBatch.
Class to manage predefined suppliers products.
Class to manage line orders.
Class to manage customers orders.
Class to manage a WYSIWYG editor.
Class to manage warehouses.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
Class to manage the table of subscription to notifications.
Class to manage products or services.
const TYPE_PRODUCT
Regular product.
const TYPE_SERVICE
Service.
Class with list of lots and properties.
Class to manage projects.
Class to manage proposals.
Class to manage receptions.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
Class to manage Dolibarr users.
print $script_file $mode $langs defaultlang(is_numeric($duration_value) ? " delay=". $duration_value :"").(is_numeric($duration_value2) ? " after cd cd cd description as description
Only used if Module[ID]Desc translation string is not found.
dol_delete_file($file, $disableglob=0, $nophperrors=0, $nohook=0, $object=null, $allowdotdot=false, $indexdatabase=1, $nolog=0)
Remove a file or several files with a mask.
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.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
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_get_fiche_end($notab=0)
Return tab footer of a card.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
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).
showDimensionInBestUnit($dimension, $unit, $type, $outputlangs, $round=-1, $forceunitoutput='no', $use_short_label=0)
Output a dimension with best unit.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dol_clone($object, $native=0)
Create a clone of instance of object (new instance with same value for each properties) With native =...
print_date_range($date_start, $date_end, $format='', $outputlangs=null)
Format output for start and end date.
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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_htmlentitiesbr($stringtoencode, $nl2brmode=0, $pagecodefrom='UTF-8', $removelasteolbr=1)
This function is called to encode a string into a HTML string but differs from htmlentities because a...
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
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...
measuringUnitString($unit, $measuring_style='', $scale='', $use_short_label=0, $outputlangs=null)
Return translation label of a unit key.
reception_prepare_head(Reception $object)
Prepare array with list of tabs.
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.