40require
'../main.inc.php';
41require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
42require_once DOL_DOCUMENT_ROOT.
'/reception/class/reception.class.php';
43require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
44require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
45require_once DOL_DOCUMENT_ROOT.
'/core/lib/product.lib.php';
46require_once DOL_DOCUMENT_ROOT.
'/core/lib/reception.lib.php';
47require_once DOL_DOCUMENT_ROOT.
'/core/modules/reception/modules_reception.php';
48require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
49require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
50require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
51require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/productlot.class.php';
53 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
56 require_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
58require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
59require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.orderline.class.php';
60require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.dispatch.class.php';
62 require_once DOL_DOCUMENT_ROOT.
'/product/class/productbatch.class.php';
65 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
66 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
77$langs->loadLangs(array(
"receptions",
"companies",
"bills",
'orders',
'stocks',
'other',
'propal',
'sendings'));
80 $langs->load(
'incoterm');
83 $langs->load(
'productbatch');
86$origin =
GETPOST(
'origin',
'alpha');
89if (empty($origin_id) && !empty($origin)) {
92if (empty($origin_id) && !empty($origin)) {
95if (empty($origin_id) && !empty($origin)) {
102$action =
GETPOST(
'action',
'alpha');
107$confirm =
GETPOST(
'confirm',
'alpha');
108$cancel =
GETPOST(
'cancel',
'alpha');
109$backtopage =
GETPOST(
'backtopage',
'alpha');
110$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
116$cancel =
GETPOST(
'cancel',
'alpha');
119$backtopage =
GETPOST(
'backtopage',
'alpha');
130$extrafields->fetch_name_optionals_label(
$object->table_element);
131$extrafields->fetch_name_optionals_label(
$object->table_element_line);
132$extrafields->fetch_name_optionals_label($objectorder->table_element_line);
135include DOL_DOCUMENT_ROOT.
'/core/actions_fetchobject.inc.php';
147 if (empty($origin)) {
148 if (!empty(
$object->origin_type)) {
149 $origin =
$object->origin_type;
154 if (empty($origin_id)) {
155 $origin_id =
$object->origin_id;
160$hookmanager->initHooks(array(
'receptioncard',
'globalcard'));
167 $socid = $user->socid;
171if (
isModEnabled(
"reception") || $origin ==
'reception' || empty($origin)) {
175 if ($origin ==
'supplierorder' || $origin ==
'order_supplier') {
176 $result =
restrictedArea($user,
'fournisseur', $origin_id,
'commande_fournisseur',
'commande');
177 } elseif (!$user->hasRight($origin,
'lire') && !$user->hasRight($origin,
'read')) {
183 $permissiontoread = $user->hasRight(
'reception',
'lire');
184 $permissiontoadd = $user->hasRight(
'reception',
'creer');
185 $permissiontoedit = $user->hasRight(
'reception',
'creer');
186 $permissiondellink = $user->hasRight(
'reception',
'creer');
187 $permissiontovalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'reception',
'creer')) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'reception',
'reception_advance',
'validate')));
188 $permissiontodelete = $user->hasRight(
'reception',
'supprimer');
190 $permissiontoread = $user->hasRight(
'fournisseur',
'commande',
'receptionner');
191 $permissiontoadd = $user->hasRight(
'fournisseur',
'commande',
'receptionner');
192 $permissiondellink = $user->hasRight(
'fournisseur',
'commande',
'receptionner');
193 $permissiontovalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'fournisseur',
'commande',
'receptionner')) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'fournisseur',
'commande_advance',
'check')));
194 $permissiontodelete = $user->hasRight(
'fournisseur',
'commande',
'receptionner');
196$permissiontoeditextra = $permissiontoadd;
197if (
GETPOST(
'attribute',
'aZ09') && isset($extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')])) {
199 $permissiontoeditextra =
dol_eval((
string) $extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')]);
206$shipping_method_id =
null;
217$parameters = array();
218$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
223if (empty($reshook)) {
224 $backurlforlist = DOL_URL_ROOT.
'/reception/list.php';
226 if (empty($backtopage) || ($cancel && empty($id))) {
227 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
228 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
229 $backtopage = $backurlforlist;
231 $backtopage = DOL_URL_ROOT.
'/reception/card.php?id='.((!empty($id) &&
$id > 0) ? $id :
'__ID__');
237 if (!empty($backtopageforcancel)) {
238 header(
"Location: ".$backtopageforcancel);
240 } elseif (!empty($backtopage)) {
241 header(
"Location: ".$backtopage);
255 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
258 if ($action ==
'reopen' && $permissiontoadd) {
266 if ($action ==
'modif' && $permissiontoadd) {
267 $result =
$object->setDraft($user);
271 $outputlangs = $langs;
274 $newlang =
GETPOST(
'lang_id',
'aZ09');
277 $newlang =
$object->thirdparty->default_lang;
279 if (!empty($newlang)) {
281 $outputlangs->setDefaultLang($newlang);
285 $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
293 if ($action ==
'set_incoterms' &&
isModEnabled(
'incoterm') && $permissiontoadd) {
297 if ($action ==
'setref_supplier' && $permissiontoadd) {
302 $result =
$object->setValueFrom(
'ref_supplier',
GETPOST(
'ref_supplier',
'alpha'),
'',
null,
'text',
'', $user,
'RECEPTION_MODIFY');
305 $action =
'editref_supplier';
307 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
312 if ($action ==
'update_extras' && $permissiontoeditextra) {
315 $attribute_name =
GETPOST(
'attribute',
'aZ09');
318 $ret = $extrafields->setOptionalsFromPost(
null, $object, $attribute_name);
324 $result =
$object->updateExtraField($attribute_name,
'RECEPTION_MODIFY');
332 $action =
'edit_extras';
337 if ($action ==
'add' && $permissiontoadd) {
343 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ThirdParty")),
null,
'errors');
352 $object->origin_type = $origin;
353 $object->origin_id = $origin_id;
363 $object->date_delivery = $date_delivery;
364 $object->date_reception = $date_reception;
370 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
375 $ret = $extrafields->setOptionalsFromPost(
null, $object);
388 if ($origin && $origin_id > 0) {
392 $object->origin_type = $origin;
393 $object->origin_id = $origin_id;
404 $object->date_delivery = $date_delivery;
405 $object->date_reception = $date_reception;
411 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
413 if (
$object->origin ==
"supplierorder") {
414 $object->origin =
'order_supplier';
415 $object->origin_type =
'order_supplier';
416 $classname =
'CommandeFournisseur';
418 $classname = ucfirst(
$object->origin);
420 $objectsrc =
new $classname($db);
421 $objectsrc->fetch(
$object->origin_id);
423 $object->socid = $objectsrc->socid;
424 $object->fk_delivery_address = $objectsrc->fk_delivery_address;
427 $batch_line = array();
428 $stockLine = array();
429 $array_options = array();
434 foreach ($_POST as $key => $value) {
437 if (strpos($key,
'qtyasked') !==
false) {
443 for ($i = 1; $i <= $num; $i++) {
455 if (
GETPOST($qty,
'alpha') > 0) {
460 $array_options[$i] = $extrafields->getOptionalsFromPost(
$object->table_element_line, (
string) $i);
465 for ($i = 1; $i <= $num; $i++) {
469 foreach ($objectsrc->lines as $linesrc) {
470 if ($linesrc->id == $lineId) {
471 $lineToTest = $linesrc;
475 if (empty($lineToTest)) {
479 $comment =
"comment".$i;
484 $cost_price =
"cost_price".$i;
503 if ($entrepot_id < 0) {
510 $eatby =
GETPOST($eatby,
'alpha');
511 $sellby =
GETPOST($sellby,
'alpha');
512 $eatbydate = str_replace(
'/',
'-', $eatby);
513 $sellbydate = str_replace(
'/',
'-', $sellby);
516 $ret =
$object->addline($entrepot_id,
GETPOSTINT($idl), (
float)
price2num(
GETPOST($qty),
'MS'), $array_options[$i],
GETPOST($comment), strtotime($eatbydate), strtotime($sellbydate),
GETPOST($batch),
GETPOSTFLOAT($cost_price,
'MU'));
528 $ret = $extrafields->setOptionalsFromPost(
null, $object);
542 $outputlangs = $langs;
545 $newlang =
GETPOST(
'lang_id',
'aZ09');
548 $newlang =
$object->thirdparty->default_lang;
550 if (!empty($newlang)) {
552 $outputlangs->setDefaultLang($newlang);
557 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
565 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"QtyToReceive").
'/'.$langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
571 header(
"Location: card.php?id=" .
$object->id);
578 } elseif ($action ==
'confirm_valid' && $confirm ==
'yes' && $permissiontovalidate) {
581 $result =
$object->valid($user);
584 $langs->load(
"errors");
589 $outputlangs = $langs;
592 $newlang =
GETPOST(
'lang_id',
'aZ09');
595 $newlang =
$object->thirdparty->default_lang;
597 if (!empty($newlang)) {
599 $outputlangs->setDefaultLang($newlang);
604 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
610 } elseif ($action ==
'confirm_delete' && $confirm ==
'yes' && $permissiontodelete) {
611 $result =
$object->delete($user);
613 header(
"Location: ".DOL_URL_ROOT.
'/reception/index.php');
625 } elseif ($action ==
'setdate_livraison' && $permissiontoadd) {
629 $result =
$object->setDeliveryDate($user, $datedelivery);
633 } elseif ($action ==
'setdate_reception' && $user->hasRight(
'reception',
'creer')) {
637 $result =
$object->setReceptionDate($user, $datereception);
641 } elseif ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $permissiontoadd) {
643 $result =
$object->deleteLine($user, $lineid);
648 $outputlangs = $langs;
651 $newlang =
GETPOST(
'lang_id',
'aZ09');
654 $newlang =
$object->thirdparty->default_lang;
656 if (!empty($newlang)) {
658 $outputlangs->setDefaultLang($newlang);
662 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
665 header(
'Location: ' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id);
670 } elseif (in_array($action, array(
'settracking_number',
'settracking_url',
'settrueWeight',
'settrueWidth',
'settrueHeight',
'settrueDepth',
'setshipping_method_id')) && $permissiontoadd) {
674 if ($action ==
'settracking_number') {
675 $object->tracking_number = trim(
GETPOST(
'tracking_number',
'alpha'));
677 if ($action ==
'settracking_url') {
678 $object->tracking_url = trim(
GETPOST(
'tracking_url',
'restricthtml'));
680 if ($action ==
'settrueWeight') {
684 if ($action ==
'settrueWidth') {
687 if ($action ==
'settrueHeight') {
691 if ($action ==
'settrueDepth') {
694 if ($action ==
'setshipping_method_id') {
698 if (
$object->update($user) >= 0) {
699 header(
"Location: card.php?id=" .
$object->id);
705 } elseif ($action ==
'builddoc' && $permissiontoread) {
714 $outputlangs = $langs;
717 $newlang =
GETPOST(
'lang_id',
'aZ09');
720 $newlang = $reception->thirdparty->default_lang;
722 if (!empty($newlang)) {
724 $outputlangs->setDefaultLang($newlang);
726 $result =
$object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
731 } elseif ($action ==
'remove_file' && $permissiontoadd) {
733 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
735 $upload_dir = $conf->reception->dir_output;
736 $file = $upload_dir.
'/'.
GETPOST(
'file');
743 } elseif ($action ==
'classifybilled' && $permissiontoadd) {
744 $result =
$object->setBilled();
746 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
752 } elseif ($action ==
'classifyclosed' && $permissiontoread) {
753 $result =
$object->setClosed();
755 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
761 } elseif ($action ==
'deleteline' && !empty($line_id) && $permissiontoread) {
766 $num_prod = count($lines);
767 for ($i = 0; $i < $num_prod; $i++) {
768 if ($lines[$i]->
id == $line_id) {
770 $line->id = $line_id;
771 if (!$error && $line->delete($user) < 0) {
775 unset($_POST[
"lineid"]);
779 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
784 } elseif ($action ==
'updateline' &&
GETPOST(
'save') && $permissiontoadd) {
789 if (!
$object->fetch($id) > 0) {
794 $qty =
GETPOST(
'qty',
'alpha');
796 $element_type =
'reception';
802 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
803 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
805 if (is_array($extralabelsline)) {
807 foreach ($extralabelsline as $key => $value) {
808 unset($_POST[
"options_" . $key]);
817 $result =
$object->updatelinefree(
GETPOSTINT(
'lineid'), (
float) $qty, $element_type, $fk_product,
GETPOSTINT(
'units'), $rang, $description, 0, $array_options);
822 $outputlangs = $langs;
825 $newlang =
GETPOST(
'lang_id',
'aZ09');
828 $newlang =
$object->thirdparty->default_lang;
830 if (!empty($newlang)) {
832 $outputlangs->setDefaultLang($newlang);
833 $outputlangs->load(
'products');
837 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
839 unset($_POST[
'qty']);
840 unset($_POST[
'units']);
845 } elseif ($origin && $origin_id > 0) {
853 $num_prod = count($lines);
854 for ($i = 0; $i < $num_prod; $i++) {
855 if ($lines[$i]->
id == $line_id) {
857 $line->fetch($line_id);
859 $extrafields->fetch_name_optionals_label(
$object->table_element_line);
860 $line->array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
862 $line->fk_product = $lines[$i]->fk_product;
864 if ($lines[$i]->fk_product > 0) {
866 $stockLocation =
"entl".$line_id;
867 $qty =
"qtyl".$line_id;
868 $comment =
"comment".$line_id;
870 $line->id = $line_id;
871 $line->fk_entrepot =
GETPOSTINT($stockLocation);
873 $line->comment =
GETPOST($comment,
'alpha');
876 $batch =
"batch".$line_id;
877 $dlc =
"dlc".$line_id;
878 $dluo =
"dluo".$line_id;
880 $eatby =
GETPOST($dluo,
'alpha');
881 $eatbydate = str_replace(
'/',
'-', $eatby);
883 $sellby =
GETPOST($dlc,
'alpha');
884 $sellbydate = str_replace(
'/',
'-', $sellby);
885 $line->batch =
GETPOST($batch,
'alpha');
886 $line->eatby = strtotime($eatbydate);
887 $line->sellby = strtotime($sellbydate);
890 if ($line->update($user) < 0) {
895 $qty =
"qtyl".$line_id;
896 $line->id = $line_id;
898 $line->fk_entrepot = 0;
899 if ($line->update($user) < 0) {
908 unset($_POST[
"lineid"]);
913 $outputlangs = $langs;
916 $newlang =
GETPOST(
'lang_id',
'aZ09');
919 $newlang =
$object->thirdparty->default_lang;
921 if (!empty($newlang)) {
923 $outputlangs->setDefaultLang($newlang);
927 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
933 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
936 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
940 } elseif ($action ==
'updateline' && $permissiontoadd &&
GETPOST(
'cancel',
'alpha') == $langs->trans(
"Cancel")) {
941 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
943 } elseif ($action ==
'addline' && !$origin &&
getDolGlobalString(
'RECEPTION_STANDALONE') && $permissiontoadd) {
944 $langs->load(
'errors');
946 $line_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
950 $element_type =
'reception';
956 $prod_entry_mode =
GETPOST(
'prod_entry_mode',
'aZ09');
957 if ($prod_entry_mode ==
'free') {
962 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
970 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
971 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
973 if (is_array($extralabelsline)) {
975 foreach ($extralabelsline as $key => $value) {
976 unset($_POST[
"options_".$key]);
980 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) &&
GETPOST(
'type') < 0) {
981 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
986 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
990 setEventMessages($langs->trans(
'FieldCannotBeNegative', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
993 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && empty($line_desc)) {
994 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
998 if (!$error &&
isModEnabled(
'variants') && $prod_entry_mode !=
'free') {
999 if ($combinations =
GETPOST(
'combinations',
'array')) {
1003 if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
1004 $idprod = $res->fk_product_child;
1005 $fk_product = $idprod;
1007 setEventMessages($langs->trans(
'ErrorProductCombinationNotFound'),
null,
'errors');
1013 if (!$error && ($qty >= 0) && (!empty($line_desc) || (!empty($idprod) && $idprod > 0))) {
1015 if (!empty($idprod) && $idprod > 0) {
1017 $prod->fetch($idprod);
1018 $desc = $prod->label;
1019 $description = $desc;
1022 $outputlangs = $langs;
1024 if (
GETPOST(
'lang_id',
'aZ09')) {
1025 $newlang =
GETPOST(
'lang_id',
'aZ09');
1027 if (empty($newlang)) {
1028 $newlang =
$object->thirdparty->default_lang;
1030 if (!empty($newlang)) {
1031 $outputlangs =
new Translate(
"", $conf);
1032 $outputlangs->setDefaultLang($newlang);
1035 $description = (!empty($prod->multilangs[$outputlangs->defaultlang][
"description"])) ? $prod->multilangs[$outputlangs->defaultlang][
"description"] : $prod->
description;
1037 $description = $prod->description;
1042 $description = $line_desc;
1046 if (!
getDolGlobalString(
'MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE') && (!empty($prod->customcode) || !empty($prod->country_code))) {
1049 $outputlangs = $langs;
1051 if (
GETPOST(
'lang_id',
'alpha')) {
1052 $newlang =
GETPOST(
'lang_id',
'alpha');
1054 if (empty($newlang)) {
1055 $newlang =
$object->thirdparty->default_lang;
1057 if (!empty($newlang)) {
1058 $outputlangs =
new Translate(
"", $conf);
1059 $outputlangs->setDefaultLang($newlang);
1060 $outputlangs->load(
'products');
1062 if (!empty($prod->customcode)) {
1063 $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CustomsCode").
': '.$prod->customcode;
1065 if (!empty($prod->customcode) && !empty($prod->country_code)) {
1068 if (!empty($prod->country_code)) {
1069 $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CountryOrigin").
': '.
getCountry($prod->country_code,
'', $db, $outputlangs, 0);
1072 if (!empty($prod->customcode)) {
1073 $tmptxt .= $langs->transnoentitiesnoconv(
"CustomsCode").
': '.$prod->customcode;
1075 if (!empty($prod->customcode) && !empty($prod->country_code)) {
1078 if (!empty($prod->country_code)) {
1079 $tmptxt .= $langs->transnoentitiesnoconv(
"CountryOrigin").
': '.
getCountry($prod->country_code,
'', $db, $langs, 0);
1085 $type = $prod->type;
1086 $fk_unit = $prod->fk_unit;
1088 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
1091 $fk_unit =
GETPOST(
'units',
'alpha');
1092 $description = $desc;
1093 $fk_elementdet =
'';
1099 $result =
$object->addlinefree((
float) $qty, $element_type, $idprod, $fk_unit, min($rank, count(
$object->lines) + 1), $description, $array_options);
1106 $outputlangs = $langs;
1107 $newlang =
GETPOST(
'lang_id',
'alpha');
1109 $newlang =
$object->thirdparty->default_lang;
1111 if (!empty($newlang)) {
1112 $outputlangs =
new Translate(
"", $conf);
1113 $outputlangs->setDefaultLang($newlang);
1115 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1118 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
1125 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
1131 $triggersendname =
'RECEPTION_SENTBYMAIL';
1133 $mode =
'emailfromreception';
1134 $autocopy =
'MAIN_MAIL_AUTOCOPY_RECEPTION_TO';
1135 $trackid =
'rec'.$object->id;
1136 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
1144$title =
$object->ref.
' - '.$langs->trans(
'Reception');
1145if ($action ==
'create') {
1146 $title = $langs->trans(
"NewReception");
1148llxHeader(
'', $title,
'Reception',
'', 0, 0,
'',
'',
'',
'mod-reception page-card');
1150$form =
new Form($db);
1157 $formproject =
null;
1160$product_static =
new Product($db);
1162$warehousestatic =
new Entrepot($db);
1164if ($action ==
'create' && $origin !=
'supplierorder' && !
getDolGlobalString(
'RECEPTION_STANDALONE')) {
1165 print
load_fiche_titre($langs->trans(
"CreateReception"),
'',
'dollyrevert');
1167 print
'<br>'.$langs->trans(
"ReceptionCreationIsDoneFromOrder");
1174if ($action ==
'create' && $permissiontoadd) {
1181 $res = $soc->fetch($socid);
1184 $note_private =
$object->getDefaultCreateValueFor(
'note_private');
1185 $note_public =
$object->getDefaultCreateValueFor(
'note_public');
1187 print
'<form name="crea_reception" action="' . $_SERVER[
"PHP_SELF"] .
'" method="POST">';
1188 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
1189 print
'<input type="hidden" name="action" value="add">';
1190 print
'<input type="hidden" name="changecompany" value="0">';
1191 print
'<input type="hidden" name="originid" value="' .
$id .
'">';
1192 print
'<input type="hidden" name="backtopage" value="' . $backtopage .
'">';
1196 print
'<table class="border centpercent">';
1201 print
'<td class="fieldrequired">' . $langs->trans(
'ThirdParty') .
'</td>';
1204 print $soc->getNomUrl(1);
1205 print
'<input type="hidden" name="socid" value="' . $soc->id .
'">';
1208 print
'<td class="valuefieldcreate">';
1209 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company(
'',
'socid',
'',
'SelectThirdParty', 1, 0, array(), 0,
'minwidth175 maxwidth500 widthcentpercentminusxx');
1213 $(document).ready(function() {
1214 $("#socid").change(function() {
1215 console.log("We have changed the company - Reload page");
1216 var socid = $(this).val();
1218 $("input[name=action]").val("create");
1219 $("input[name=changecompany]").val("1");
1220 $("form[name=crea_reception]").submit();
1225 print
' <a href="'.DOL_URL_ROOT.
'/societe/card.php?action=create&client=3&fournisseur=0&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create').
'"><span class="fa fa-plus-circle valignmiddle paddingleft" title="'.$langs->trans(
"AddThirdParty").
'"></span></a>';
1231 if (
isModEnabled(
'project') && is_object($formproject)) {
1233 if (empty($projectid) && !empty(
$object->fk_project)) {
1234 $projectid = (int)
$object->fk_project;
1236 $langs->load(
"projects");
1238 print
'<td>' . $langs->trans(
"Project") .
'</td><td colspan="2">';
1239 print
img_picto(
'',
'project',
'class="pictofixedwidth"');
1240 print $formproject->select_projects($soc->id, $projectid,
'projectid', 0, 0, 1, 0, 0, 0, 0,
'', 1, 0,
'widthcentpercentminusxx');
1241 print
' <a class="paddingleft" 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"></span></a>';
1247 print
'<tr><td>'.$langs->trans(
"DateReception").
'</td>';
1248 print
'<td colspan="3">';
1249 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1250 $date_reception = ($date_reception ? $date_reception :
$object->date_reception);
1251 print $form->selectDate($date_reception ? $date_reception : -1,
'date_reception', 1, 1, 1);
1256 print
'<tr><td>'.$langs->trans(
"DateDeliveryPlanned").
'</td>';
1257 print
'<td colspan="3">';
1258 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1259 $date_delivery = ($date_delivery ? $date_delivery :
$object->delivery_date);
1260 print $form->selectDate($date_delivery ? $date_delivery : -1,
'date_delivery', 1, 1, 1);
1266 print $langs->trans(
"Weight");
1267 print
'</td><td colspan="3">';
1268 print
img_picto(
'',
'fa-balance-scale',
'class="pictofixedwidth"');
1269 print
'<input name="weight" size="4" value="'.GETPOST(
'weight').
'"> ';
1270 $text = $formproduct->selectMeasuringUnits(
"weight_units",
"weight", (
string)
GETPOSTINT(
'weight_units'), 0, 2);
1271 $htmltext = $langs->trans(
"KeepEmptyForAutoCalculation");
1272 print $form->textwithpicto($text, $htmltext);
1277 print $langs->trans(
"Width").
' x '.$langs->trans(
"Height").
' x '.$langs->trans(
"Depth");
1278 print
' </td><td colspan="3">';
1279 print
img_picto(
'',
'fa-ruler',
'class="pictofixedwidth"');
1280 print
'<input name="sizeW" size="4" value="'.GETPOST(
'sizeW').
'">';
1281 print
' x <input name="sizeH" size="4" value="'.GETPOST(
'sizeH').
'">';
1282 print
' x <input name="sizeS" size="4" value="'.GETPOST(
'sizeS').
'">';
1284 $text = $formproduct->selectMeasuringUnits(
"size_units",
"size", (
string)
GETPOSTINT(
'size_units'), 0, 2);
1285 $htmltext = $langs->trans(
"KeepEmptyForAutoCalculation");
1286 print $form->textwithpicto($text, $htmltext);
1290 print
"<tr><td>".$langs->trans(
"ReceptionMethod").
"</td>";
1291 print
'<td colspan="3">';
1292 $recept->fetch_delivery_methods();
1293 print $form->selectarray(
"shipping_method_id", $recept->meths,
GETPOSTINT(
'shipping_method_id'), 1, 0, 0,
"", 1);
1295 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
1297 print
"</td></tr>\n";
1300 print
"<tr><td>".$langs->trans(
"TrackingNumber").
"</td>";
1301 print
'<td colspan="3">';
1302 print
img_picto(
'',
'barcode',
'class="pictofixedwidth"');
1303 print
'<input name="tracking_number" size="20" value="'.GETPOST(
'tracking_number',
'alpha').
'">';
1304 print
"</td></tr>\n";
1307 $extrafields->fetch_name_optionals_label(
$object->table_element);
1308 if (empty($reshook) && !empty($extrafields->attributes[
$object->table_element][
'label'])) {
1309 if (
$object->fetch_optionals() > 0) {
1310 $recept->array_options = array_merge($recept->array_options,
$object->array_options);
1312 print $recept->showOptionals($extrafields,
'create', $parameters);
1318 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"),
$object->label_incoterms, 1).
'</label></td>';
1319 print
'<td colspan="3" class="maxwidthonsmartphone">';
1320 print
img_picto(
'',
'incoterm',
'class="pictofixedwidth"');
1321 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''));
1326 print
'<tr><td>'.$langs->trans(
'Model').
'</td>';
1327 print
'<td colspan="2">';
1328 print
img_picto(
'',
'pdf',
'class="pictofixedwidth"');
1329 include_once DOL_DOCUMENT_ROOT.
'/core/modules/reception/modules_reception.php';
1331 print $form->selectarray(
'model', $list,
getDolGlobalString(
'RECEPTION_ADDON_PDF'), 0, 0, 0,
'', 0, 0, 0,
'',
'maxwidth200 widthcentpercentminusx', 1);
1337 print
'<td class="tdtop">';
1338 print $form->textwithpicto($langs->trans(
'NotePublic'), $htmltext);
1340 print
'<td valign="top" colspan="2">';
1341 $doleditor =
new DolEditor(
'note_public', (
string) $note_public,
'', 80,
'dolibarr_notes',
'In',
false,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
1342 print $doleditor->Create(1);
1345 if (!$user->socid) {
1347 print
'<td class="tdtop">';
1348 print $form->textwithpicto($langs->trans(
'NotePrivate'), $htmltext);
1350 print
'<td valign="top" colspan="2">';
1351 $doleditor =
new DolEditor(
'note_private', (
string) $note_private,
'', 80,
'dolibarr_notes',
'In',
false,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
1352 print $doleditor->Create(1);
1360 print $form->buttonsSaveCancel(
"CreateDraft");
1363 } elseif ($origin) {
1364 if ($origin ==
'supplierorder') {
1365 $classname =
'CommandeFournisseur';
1367 $classname = ucfirst($origin);
1370 $objectsrc =
new $classname($db);
1371 if ($objectsrc->fetch($origin_id)) {
1373 $soc->fetch($objectsrc->socid);
1375 $author =
new User($db);
1376 $author->fetch($objectsrc->user_author_id);
1382 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1383 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1384 print
'<input type="hidden" name="action" value="add">';
1385 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
1386 print
'<input type="hidden" name="origin_id" value="'.$objectsrc->id.
'">';
1387 print
'<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.
'">';
1388 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1390 print
'<input type="hidden" name="entrepot_id" value="'.GETPOSTINT(
'entrepot_id').
'">';
1395 print
'<table class="border centpercent">';
1398 print
'<tr><td class="titlefieldcreate fieldrequired">';
1399 if ($origin ==
'supplierorder' &&
isModEnabled(
"supplier_order")) {
1400 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;
1403 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;
1410 if ($origin ==
'supplier_order') {
1411 print $langs->trans(
'SupplierOrder');
1413 print $langs->trans(
'RefSupplier');
1415 print
'</td><td colspan="3">';
1416 print
'<input type="text" name="ref_supplier" value="'.$objectsrc->ref_supplier.
'" />';
1421 print
'<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans(
'Company').
'</td>';
1422 print
'<td colspan="3">'.$soc->getNomUrl(1).
'</td>';
1426 if (
isModEnabled(
'project') && $formproject !==
null) {
1428 if (empty($projectid) && !empty($objectsrc->fk_project)) {
1429 $projectid = $objectsrc->fk_project;
1431 if ($origin ==
'project') {
1432 $projectid = ($origin_id ? $origin_id : 0);
1435 $langs->load(
"projects");
1437 print
'<td>'.$langs->trans(
"Project").
'</td><td colspan="2">';
1438 print
img_picto(
'',
'project',
'class="paddingright"');
1439 print $formproject->select_projects((!
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS') ? $soc->id : -1), (string) $projectid,
'projectid', 0, 0, 1, 0, 1, 0, 0,
'', 1, 0,
'maxwidth500');
1440 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>';
1446 print
'<tr><td>'.$langs->trans(
"DateReception").
'</td>';
1447 print
'<td colspan="3">';
1448 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1449 $date_reception = ($date_reception ? $date_reception :
$object->date_reception);
1450 print $form->selectDate($date_reception ? $date_reception : -1,
'date_reception', 1, 1, 1);
1455 print
'<tr><td>'.$langs->trans(
"DateDeliveryPlanned").
'</td>';
1456 print
'<td colspan="3">';
1457 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1458 $date_delivery = ($date_delivery ? $date_delivery : $objectsrc->delivery_date);
1459 print $form->selectDate($date_delivery ? $date_delivery : -1,
'date_delivery', 1, 1, 1);
1464 print
'<tr><td>'.$langs->trans(
"NotePublic").
'</td>';
1465 print
'<td colspan="3">';
1466 $doleditor =
new DolEditor(
'note_public', $objectsrc->note_public,
'', 60,
'dolibarr_notes',
'In',
false,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
1467 print $doleditor->Create(1);
1471 if ($objectsrc->note_private && !$user->socid) {
1472 print
'<tr><td>'.$langs->trans(
"NotePrivate").
'</td>';
1473 print
'<td colspan="3">';
1474 $doleditor =
new DolEditor(
'note_private', $objectsrc->note_private,
'', 60,
'dolibarr_notes',
'In',
false,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
1475 print $doleditor->Create(1);
1481 print $langs->trans(
"Weight");
1482 print
'</td><td colspan="3"><input name="weight" size="4" value="'.GETPOST(
'weight').
'"> ';
1483 $text = $formproduct->selectMeasuringUnits(
"weight_units",
"weight", (
string)
GETPOSTINT(
'weight_units'), 0, 2);
1484 $htmltext = $langs->trans(
"KeepEmptyForAutoCalculation");
1485 print $form->textwithpicto($text, $htmltext);
1489 print $langs->trans(
"Width").
' x '.$langs->trans(
"Height").
' x '.$langs->trans(
"Depth");
1490 print
' </td><td colspan="3"><input name="trueWidth" size="4" value="'.GETPOST(
'trueWidth').
'">';
1491 print
' x <input name="trueHeight" size="4" value="'.GETPOST(
'trueHeight').
'">';
1492 print
' x <input name="trueDepth" size="4" value="'.GETPOST(
'trueDepth').
'">';
1494 $text = $formproduct->selectMeasuringUnits(
"size_units",
"size", (
string)
GETPOSTINT(
'size_units'), 0, 2);
1495 $htmltext = $langs->trans(
"KeepEmptyForAutoCalculation");
1496 print $form->textwithpicto($text, $htmltext);
1500 print
"<tr><td>".$langs->trans(
"ReceptionMethod").
"</td>";
1501 print
'<td colspan="3">';
1502 $recept->fetch_delivery_methods();
1503 print $form->selectarray(
"shipping_method_id", $recept->meths,
GETPOSTINT(
'shipping_method_id'), 1, 0, 0,
"", 1);
1505 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
1507 print
"</td></tr>\n";
1510 print
"<tr><td>".$langs->trans(
"TrackingNumber").
"</td>";
1511 print
'<td colspan="3">';
1512 print
'<input name="tracking_number" size="20" value="'.GETPOST(
'tracking_number',
'alpha').
'">';
1513 print
"</td></tr>\n";
1516 $parameters = array(
'objectsrc' => $objectsrc,
'colspan' =>
' colspan="3"',
'cols' =>
'3',
'socid' => $socid);
1517 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $recept, $action);
1518 print $hookmanager->resPrint;
1521 $extrafields->fetch_name_optionals_label(
$object->table_element);
1522 if (empty($reshook) && !empty($extrafields->attributes[
$object->table_element][
'label'])) {
1524 if ($objectsrc->fetch_optionals() > 0) {
1525 $recept->array_options = array_merge($recept->array_options, $objectsrc->array_options);
1527 print $recept->showOptionals($extrafields,
'create', $parameters);
1533 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"), $objectsrc->label_incoterms, 1).
'</label></td>';
1534 print
'<td colspan="3" class="maxwidthonsmartphone">';
1535 print $form->select_incoterms((!empty($objectsrc->fk_incoterms) ? $objectsrc->fk_incoterms :
''), (!empty($objectsrc->location_incoterms) ? $objectsrc->location_incoterms :
''));
1540 include_once DOL_DOCUMENT_ROOT.
'/core/modules/reception/modules_reception.php';
1543 if (is_array($list) && count($list) > 1) {
1544 print
"<tr><td>".$langs->trans(
"DefaultModel").
"</td>";
1545 print
'<td colspan="3">';
1547 print
"</td></tr>\n";
1561 $suffix2numAsked = array();
1562 $dispatchLines = array();
1564 foreach ($_POST as $key => $value) {
1569 if (preg_match(
'/^product_([0-9]+)_([0-9]+)$/i', $key, $reg)) {
1571 $paramSuffix = $reg[1] .
'_' . $reg[2];
1572 $suffix2numAsked[$paramSuffix] = $numAsked;
1575 $numline = $numAsked;
1577 $prod =
"product_" . $paramSuffix;
1578 $qty =
"qty_" . $paramSuffix;
1579 $ent =
"entrepot_" . $paramSuffix;
1580 $pu =
"pu_" . $paramSuffix;
1581 $fk_commandefourndet =
"fk_commandefourndet_" . $paramSuffix;
1586 if (preg_match(
'/^product_batch_([0-9]+)_([0-9]+)$/i', $key, $reg)) {
1588 $paramSuffix = $reg[1] .
'_' . $reg[2];
1589 $suffix2numAsked[$paramSuffix] = $numAsked;
1593 $numline = $numAsked;
1595 $prod =
'product_batch_' . $paramSuffix;
1596 $qty =
'qty_' . $paramSuffix;
1597 $ent =
'entrepot_' . $paramSuffix;
1598 $pu =
'pu_' . $paramSuffix;
1599 $lot =
'lot_number_' . $paramSuffix;
1602 $fk_commandefourndet =
'fk_commandefourndet_'.$paramSuffix;
1603 $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));
1607 if (preg_match(
'/^productl([0-9]+)$/i', $key, $reg)) {
1609 $paramSuffix = $reg[1];
1610 $suffix2numAsked[$paramSuffix] = $numAsked;
1614 $numline = $numAsked;
1616 $prod =
'productid'.$paramSuffix;
1617 $comment =
'comment'.$paramSuffix;
1618 $qty =
'qtyl'.$paramSuffix;
1619 $ent =
'entl'.$paramSuffix;
1620 $pu =
'pul'.$paramSuffix;
1621 $lot =
'batch'.$paramSuffix;
1624 $fk_commandefourndet =
'fk_commandefournisseurdet'.$paramSuffix;
1625 $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));
1632 foreach ($suffix2numAsked as $suffix => $n) {
1633 $dispatchLines[$n][
'array_options'] = $extrafields->getOptionalsFromPost(
'receptiondet_batch',
'_' . $suffix,
'');
1636 print
'<script type="text/javascript">
1637 jQuery(document).ready(function() {
1638 jQuery("#autofill").click(function(event) {
1639 event.preventDefault();';
1641 while ($i <= $numAsked) {
1642 print
'jQuery("#qtyl'.$i.
'").val(jQuery("#qtyasked'.$i.
'").val() - jQuery("#qtydelivered'.$i.
'").val());'.
"\n";
1646 jQuery("#autoreset").click(function(event) {
1647 event.preventDefault();';
1649 while ($i <= $numAsked) {
1650 print
'jQuery("#qtyl'.$i.
'").val(0);'.
"\n";
1659 print
'<table class="noborder centpercent">';
1662 $objectsrc->loadReceptions();
1665 print
'<tr class="liste_titre">';
1666 print
'<td>'.$langs->trans(
"Description").
'</td>';
1667 print
'<td>'.$langs->trans(
"Comment").
'</td>';
1668 print
'<td class="center">'.$langs->trans(
"QtyOrdered").
'</td>';
1669 print
'<td class="center">'.$langs->trans(
"QtyReceived").
'</td>';
1670 print
'<td class="center">'.$langs->trans(
"QtyToReceive");
1672 print
'<td>'.$langs->trans(
"BuyingPrice").
'</td>';
1675 print
' <br><center><a href="#" id="autofill"><span class="fas fa-fill pictofixedwidth" style=""></span> '.$langs->trans(
"Fill").
'</a>';
1676 print
' <a href="#" id="autoreset"><span class="fas fa-eraser pictofixedwidth" style=""></span>'.$langs->trans(
"Reset").
'</a></center><br>';
1680 print
'<td class="left">'.$langs->trans(
"Warehouse").
' ('.$langs->trans(
"Stock").
')</td>';
1683 print
'<td class="left">'.$langs->trans(
"batch_number").
'</td>';
1685 print
'<td class="left">'.$langs->trans(
"SellByDate").
'</td>';
1688 print
'<td class="left">'.$langs->trans(
"EatByDate").
'</td>';
1697 $arrayofpurchaselinealreadyoutput = array();
1701 while ($indiceAsked <= $numAsked) {
1706 foreach ($objectsrc->lines as $supplierLine) {
1707 if ($dispatchLines[$indiceAsked][
'fk_commandefourndet'] == $supplierLine->id) {
1708 $line = $supplierLine;
1716 $type = $line->product_type ? $line->product_type : $line->fk_product_type;
1718 if (!empty($line->date_start)) {
1721 if (!empty($line->date_end)) {
1725 print
'<!-- line fk_commandefourndet='.$line->id.
' for product='.$line->fk_product.
' -->'.
"\n";
1726 print
'<tr class="oddeven">'.
"\n";
1729 if ($line->fk_product > 0) {
1730 $product->fetch($line->fk_product);
1731 $product->load_stock(
'warehouseopen');
1736 print
'<a name="'.$line->id.
'"></a>';
1738 print
'<input type="hidden" name="productl'.$indiceAsked.
'" value="'.$line->fk_product.
'">';
1740 if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {
1741 print
'<input type="hidden" name="productid'.$indiceAsked.
'" value="'.$line->fk_product.
'">';
1744 $product_static = $product;
1746 $text = $product_static->getNomUrl(1);
1747 $text .=
' - '.(!empty($line->label) ? $line->label : $line->product_label);
1749 print $form->textwithtooltip($text, $description, 3, 0,
'', (
string) $i);
1752 print_date_range($db->jdate($line->date_start), $db->jdate($line->date_end));
1756 print ($line->desc && $line->desc != $line->product_label) ?
'<br>'.dol_htmlentitiesbr($line->desc) :
'';
1762 if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {
1764 $text =
img_object($langs->trans(
'Service'),
'service');
1766 $text =
img_object($langs->trans(
'Product'),
'product');
1769 if (!empty($line->label)) {
1770 $text .=
' <strong>'.$line->label.
'</strong>';
1771 print $form->textwithtooltip($text, $line->desc, 3, 0,
'', (
string) $i);
1773 print $text.
' '.nl2br($line->desc);
1777 print_date_range($db->jdate($line->date_start), $db->jdate($line->date_end));
1784 $defaultcomment = $dispatchLines[$indiceAsked][
'comment'];
1786 print
'<input type="text" class="maxwidth100" name="comment'.$indiceAsked.
'" value="'.$defaultcomment.
'">';
1790 print
'<td class="center">';
1791 if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {
1794 print
'<input type="hidden" name="fk_commandefournisseurdet'.$indiceAsked.
'" value="'.$line->id.
'">';
1795 print
'<input type="hidden" name="pul'.$indiceAsked.
'" value="'.$line->subprice.
'">';
1796 print
'<input name="qtyasked'.$indiceAsked.
'" id="qtyasked'.$indiceAsked.
'" type="hidden" value="'.$line->qty.
'">';
1798 $qtyProdCom = $line->qty;
1801 print
'<td class="center">';
1802 $quantityDelivered = isset($objectsrc->receptions[$line->id]) ? $objectsrc->receptions[$line->id] : 0;
1803 if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {
1804 print $quantityDelivered;
1806 print
'<input name="qtydelivered'.$indiceAsked.
'" id="qtydelivered'.$indiceAsked.
'" type="hidden" value="'.$quantityDelivered.
'">';
1811 $quantityToBeDelivered = 0;
1813 $quantityToBeDelivered = $dispatchLines[$indiceAsked][
'qty'];
1815 $warehouse_id = $dispatchLines[$indiceAsked][
'ent'];
1818 $warehouseObject =
null;
1821 print
'<!-- Case warehouse already known or product not a predefined product -->';
1822 if (array_key_exists($dispatchLines[$indiceAsked][
'ent'], $product->stock_warehouse)) {
1823 $stock = +$product->stock_warehouse[$dispatchLines[$indiceAsked][
'ent']]->real;
1825 $deliverableQty = $dispatchLines[$indiceAsked][
'qty'];
1826 $cost_price = $dispatchLines[$indiceAsked][
'pu'];
1829 print
'<td class="center">';
1832 $defaultqty =
GETPOSTINT(
'qtyl'.$indiceAsked);
1834 print
'<input name="idl'.$indiceAsked.
'" type="hidden" value="'.$line->id.
'">';
1835 print
'<input class="right" name="qtyl'.$indiceAsked.
'" id="qtyl'.$indiceAsked.
'" type="text" size="4" value="'.$deliverableQty.
'">';
1837 print $langs->trans(
"NA");
1843 print
'<input class="width75 right" name="cost_price'.$indiceAsked.
'" id="cost_price'.$indiceAsked.
'" value="'.
price($cost_price).
'">';
1849 print
'<td class="left">';
1852 $ent =
"entl".$indiceAsked;
1853 $idl =
"idl".$indiceAsked;
1855 if ($line->fk_product > 0) {
1856 print
'<!-- Show warehouse selection -->';
1857 print $formproduct->selectWarehouses($tmpentrepot_id,
'entl'.$indiceAsked,
'', 0, 0, $line->fk_product,
'', 1);
1860 print $langs->trans(
"Service");
1866 if (!empty($product->status_batch)) {
1867 print
'<td><input name="batch'.$indiceAsked.
'" value="'.$dispatchLines[$indiceAsked][
'lot'].
'"></td>';
1869 print
'<td class="nowraponall">';
1870 print $form->selectDate($dispatchLines[$indiceAsked][
'DLC'],
'dlc'.$indiceAsked, 0, 0, 1,
"");
1874 print
'<td class="nowraponall">';
1875 print $form->selectDate($dispatchLines[$indiceAsked][
'DLUO'],
'dluo'.$indiceAsked, 0, 0, 1,
"");
1879 print
'<td colspan="3"></td>';
1884 $arrayofpurchaselinealreadyoutput[$line->id] = $line->id;
1890 if (!empty($extrafields)) {
1904 $srcLine->id = $line->id;
1905 $srcLine->fetch_optionals();
1907 if (empty($recLine->array_options) && !empty($dispatchLines[$indiceAsked][
'array_options'])) {
1908 $recLine->array_options = $dispatchLines[$indiceAsked][
'array_options'];
1910 $recLine->array_options = array_merge($recLine->array_options, $srcLine->array_options);
1912 print $recLine->showOptionals($extrafields,
'edit', array(
'style' =>
'class="oddeven"',
'colspan' => $colspan), (
string) $indiceAsked,
'',
'1');
1922 print $form->buttonsSaveCancel(
"Create");
1939 $num_prod = count($lines);
1943 print $langs->trans(
"NoRecordFound");
1950 $typeobject =
$object->origin;
1952 $origin_id =
$object->origin_id;
1959 $res =
$object->fetch_optionals();
1962 print
dol_get_fiche_head($head,
'reception', $langs->trans(
"Reception"), -1,
'dollyrevert');
1967 if ($action ==
'delete') {
1968 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $langs->trans(
'DeleteReception'), $langs->trans(
"ConfirmDeleteReception",
$object->ref),
'confirm_delete',
'', 0, 1);
1972 if ($action ==
'valid') {
1973 $objectref = substr(
$object->ref, 1, 4);
1974 if ($objectref ==
'PROV') {
1975 $numref =
$object->getNextNumRef($soc);
1977 $numref = (string)
$object->ref;
1980 $text = $langs->trans(
"ConfirmValidateReception", $numref);
1982 $text .=
'<br>'.img_picto(
'',
'movement',
'class="pictofixedwidth"').$langs->trans(
"StockMovementWillBeRecorded").
'.';
1984 $text .=
'<br>'.img_picto(
'',
'movement',
'class="pictofixedwidth"').$langs->trans(
"StockMovementNotYetRecorded").
'.';
1988 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1989 $notify =
new Notify($db);
1991 $text .= $notify->confirmMessage(
'RECEPTION_VALIDATE',
$object->socid, $object);
1994 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $langs->trans(
'ValidateReception'), $text,
'confirm_valid',
'', 0, 1, 250);
1998 if ($action ==
'annuler') {
1999 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $langs->trans(
'CancelReception'), $langs->trans(
"ConfirmCancelReception",
$object->ref),
'confirm_cancel',
'', 0, 1);
2002 if (!$formconfirm) {
2003 $parameters = array(
'formConfirm' => $formconfirm);
2004 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
2005 if (empty($reshook)) {
2006 $formconfirm .= $hookmanager->resPrint;
2007 } elseif ($reshook > 0) {
2008 $formconfirm = $hookmanager->resPrint;
2018 $tmparray =
$object->getTotalWeightVolume();
2019 $totalWeight = $tmparray[
'weight'];
2020 $totalVolume = $tmparray[
'volume'];
2025 $objectsrc->fetch(
$object->origin_object->id);
2028 $objectsrc =
new Propal($db);
2029 $objectsrc->fetch(
$object->origin_object->id);
2031 if (($typeobject ==
'supplier_order' || $typeobject ==
'CommandeFournisseur') &&
$object->origin_object->id &&
isModEnabled(
"supplier_order")) {
2033 $objectsrc->fetch(
$object->origin_object->id);
2036 $linkback =
'<a href="'.DOL_URL_ROOT.
'/reception/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
2037 $morehtmlref =
'<div class="refidno">';
2040 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, $user->hasRight(
'reception',
'creer'),
'string',
'', 0, 1);
2041 $morehtmlref .= $form->editfieldval(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, $user->hasRight(
'reception',
'creer'),
'string',
'',
null,
null,
'', 1);
2044 $morehtmlref .=
'<br>'.$object->thirdparty->getNomUrl(1);
2046 if ($origin && $origin_id > 0) {
2048 $langs->load(
"projects");
2049 $morehtmlref .=
'<br>';
2051 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
2052 if ($action !=
'classify') {
2053 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
2055 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $objectsrc->socid, (
string) $objectsrc->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
2057 if (!empty($objectsrc) && !empty($objectsrc->fk_project)) {
2059 $proj->fetch($objectsrc->fk_project);
2060 $morehtmlref .= $proj->getNomUrl(1);
2062 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
2070 $langs->load(
"projects");
2071 $morehtmlref .=
'<br>';
2072 if ($permissiontoadd) {
2073 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
2074 if ($action !=
'classify') {
2075 $morehtmlref .=
'<a class="editfielda" href="' . $_SERVER[
'PHP_SELF'] .
'?action=classify&token=' .
newToken() .
'&id=' .
$object->id .
'">' .
img_edit($langs->transnoentitiesnoconv(
'SetProject')) .
'</a> ';
2077 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->socid, (
string)
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
2079 if (!empty(
$object->fk_project)) {
2081 $proj->fetch(
$object->fk_project);
2082 $morehtmlref .= $proj->getNomUrl(1);
2084 $morehtmlref .=
'<span class="opacitymedium"> - ' .
dol_escape_htmltag($proj->title) .
'</span>';
2090 $morehtmlref .=
'</div>';
2092 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
2095 print
'<div class="fichecenter">';
2096 print
'<div class="fichehalfleft">';
2097 print
'<div class="underbanner clearboth"></div>';
2099 print
'<table class="border centpercent tableforfield">';
2104 print $langs->trans(
"RefOrder").
'</td>';
2105 print
'<td colspan="3">';
2106 print $objectsrc->getNomUrl(1,
'commande');
2112 print $langs->trans(
"RefProposal").
'</td>';
2113 print
'<td colspan="3">';
2114 print $objectsrc->getNomUrl(1,
'reception');
2118 if (($typeobject ==
'supplier_order' || $typeobject ==
'CommandeFournisseur') &&
$object->origin_object->id &&
isModEnabled(
"propal")) {
2120 print $langs->trans(
"SupplierOrder").
'</td>';
2121 print
'<td colspan="3">';
2122 print $objectsrc->getNomUrl(1,
'reception');
2128 print
'<tr><td class="titlefield">'.$langs->trans(
"DateCreation").
'</td>';
2129 print
'<td colspan="3">'.dol_print_date(
$object->date_creation,
"dayhour",
"tzuserrel").
"</td>\n";
2133 print
'<tr><td height="10">';
2134 print
'<table class="nobordernopadding centpercent"><tr><td>';
2135 print $langs->trans(
'DateReception');
2137 if ($action !=
'editdate_reception') {
2138 print
'<td class="right"><a class="editfielda" href="' . $_SERVER[
"PHP_SELF"] .
'?action=editdate_reception&token=' .
newToken() .
'&id=' .
$object->id .
'">' .
img_edit($langs->trans(
'SetReceptionDate'), 1) .
'</a></td>';
2140 print
'</tr></table>';
2142 if ($action ==
'editdate_reception') {
2143 print
'<form name="setdate_reception" action="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'" method="post">';
2144 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
2145 print
'<input type="hidden" name="action" value="setdate_reception">';
2146 print $form->selectDate(
$object->date_reception ?
$object->date_reception : -1,
'recep_', 1, 1, 0,
"setdate_reception", 1, 0);
2147 print
'<input type="submit" class="button button-edit smallpaddingimp" value="' . $langs->trans(
'Modify') .
'">';
2156 print
'<tr><td height="10">';
2157 print
'<table class="nobordernopadding" width="100%"><tr><td>';
2158 print $langs->trans(
'DateDeliveryPlanned');
2161 if ($action !=
'editdate_livraison' && $permissiontoadd) {
2162 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>';
2164 print
'</tr></table>';
2165 print
'</td><td colspan="2">';
2166 if ($action ==
'editdate_livraison') {
2167 print
'<form name="setdate_livraison" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
2168 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2169 print
'<input type="hidden" name="action" value="setdate_livraison">';
2170 print $form->selectDate(
$object->date_delivery ?
$object->date_delivery : -1,
'liv_', 1, 1, 0,
"setdate_livraison", 1, 0);
2171 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
2181 print $form->editfieldkey(
"Weight",
'trueWeight', (
string)
$object->trueWeight, $object, $user->hasRight(
'reception',
'creer'));
2182 print
'</td><td colspan="3">';
2184 if ($action ==
'edittrueWeight') {
2185 print
'<form name="settrueweight" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
2186 print
'<input name="action" value="settrueWeight" type="hidden">';
2187 print
'<input name="id" value="'.$object->id.
'" type="hidden">';
2188 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2189 print
'<input id="trueWeight" name="trueWeight" value="'.$object->trueWeight.
'" type="text">';
2190 print $formproduct->selectMeasuringUnits(
"weight_units",
"weight", (
string)
$object->weight_units, 0, 2);
2191 print
' <input class="button" name="modify" value="'.$langs->trans(
"Modify").
'" type="submit">';
2192 print
' <input class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'" type="submit">';
2196 print (
$object->trueWeight &&
$object->weight_units !=
'') ?
' '.measuringUnitString(0,
"weight",
$object->weight_units) :
'';
2200 if ($totalWeight > 0) {
2201 if (!empty(
$object->trueWeight)) {
2202 print
' ('.$langs->trans(
"SumOfProductWeights").
': ';
2205 if (!empty(
$object->trueWeight)) {
2212 print
'<tr><td>'.$form->editfieldkey(
"Width",
'trueWidth', (
string)
$object->trueWidth, $object, $user->hasRight(
'reception',
'creer')).
'</td><td colspan="3">';
2213 print $form->editfieldval(
"Width",
'trueWidth',
$object->trueWidth, $object, $user->hasRight(
'reception',
'creer'));
2214 print (
$object->trueWidth &&
$object->width_units !=
'') ?
' '.measuringUnitString(0,
"size",
$object->width_units) :
'';
2218 print
'<tr><td>'.$form->editfieldkey(
"Height",
'trueHeight', (
string)
$object->trueHeight, $object, $user->hasRight(
'reception',
'creer')).
'</td><td colspan="3">';
2219 if ($action ==
'edittrueHeight') {
2220 print
'<form name="settrueHeight" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
2221 print
'<input name="action" value="settrueHeight" type="hidden">';
2222 print
'<input name="id" value="'.$object->id.
'" type="hidden">';
2223 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2224 print
'<input id="trueHeight" name="trueHeight" value="'.$object->trueHeight.
'" type="text">';
2225 print $formproduct->selectMeasuringUnits(
"size_units",
"size",
$object->size_units, 0, 2);
2226 print
' <input class="button" name="modify" value="'.$langs->trans(
"Modify").
'" type="submit">';
2227 print
' <input class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'" type="submit">';
2231 print (
$object->trueHeight &&
$object->height_units !=
'') ?
' '.measuringUnitString(0,
"size",
$object->height_units) :
'';
2237 print
'<tr><td>'.$form->editfieldkey(
"Depth",
'trueDepth', (
string)
$object->trueDepth, $object, $user->hasRight(
'reception',
'creer')).
'</td><td colspan="3">';
2238 print $form->editfieldval(
"Depth",
'trueDepth',
$object->trueDepth, $object, $user->hasRight(
'reception',
'creer'));
2239 print (
$object->trueDepth &&
$object->depth_units !=
'') ?
' '.measuringUnitString(0,
"size",
$object->depth_units) :
'';
2244 print $langs->trans(
"Volume");
2246 print
'<td colspan="3">';
2247 $calculatedVolume = 0;
2251 $volumeUnit =
$object->size_units * 3;
2254 if ($calculatedVolume > 0) {
2255 if ($volumeUnit < 50) {
2261 if ($totalVolume > 0) {
2262 if ($calculatedVolume) {
2263 print
' ('.$langs->trans(
"SumOfProductVolumes").
': ';
2267 if ($calculatedVolume) {
2277 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
2282 print
'<div class="fichehalfright">';
2283 print
'<div class="underbanner clearboth"></div>';
2285 print
'<table class="border centpercent tableforfield">';
2288 print
'<tr><td height="10">';
2289 print
'<table class="nobordernopadding centpercent"><tr><td>';
2290 print $langs->trans(
'ReceptionMethod');
2293 if ($action !=
'editshipping_method_id' && $permissiontoadd) {
2294 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>';
2296 print
'</tr></table>';
2297 print
'</td><td colspan="2">';
2298 if ($action ==
'editshipping_method_id') {
2299 print
'<form name="setshipping_method_id" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
2300 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2301 print
'<input type="hidden" name="action" value="setshipping_method_id">';
2302 $object->fetch_delivery_methods();
2303 print $form->selectarray(
"shipping_method_id",
$object->meths,
$object->shipping_method_id, 1, 0, 0,
"", 1);
2305 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
2307 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
2310 if (
$object->shipping_method_id > 0) {
2312 $code = $langs->getLabelFromKey($db, (
string)
$object->shipping_method_id,
'c_shipment_mode',
'rowid',
'code');
2313 print $langs->trans(
"SendingMethod".strtoupper($code));
2320 print
'<tr><td class="titlefield">'.$form->editfieldkey(
"TrackingNumber",
'tracking_number',
$object->tracking_number, $object, $user->hasRight(
'reception',
'creer')).
'</td><td colspan="3">';
2321 print $form->editfieldval(
"TrackingNumber",
'tracking_number',
$object->tracking_url, $object, $user->hasRight(
'reception',
'creer'),
'safehtmlstring',
$object->tracking_number);
2327 print
'<table width="100%" class="nobordernopadding"><tr><td>';
2328 print $langs->trans(
'IncotermLabel');
2329 print
'<td><td class="right">';
2330 if ($user->hasRight(
'reception',
'creer')) {
2331 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/reception/card.php?id='.
$object->id.
'&action=editincoterm&token='.
newToken().
'">'.
img_edit().
'</a>';
2335 print
'</td></tr></table>';
2337 print
'<td colspan="3">';
2338 if ($action !=
'editincoterm') {
2339 print $form->textwithpicto(
$object->display_incoterms(),
$object->label_incoterms, 1);
2341 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
2351 print
'<div class="clearboth"></div>';
2357 if (!empty(
$object->table_element_line)) {
2359 $result =
$object->getLinesArray();
2361 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.(($action !=
'editline') ?
'' :
'#line_'.
GETPOSTINT(
'lineid')).
'" method="POST">
2362 <input type="hidden" name="token" value="' .
newToken().
'">
2363 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">
2364 <input type="hidden" name="mode" value="">
2365 <input type="hidden" name="page_y" value="">
2366 <input type="hidden" name="id" value="' .
$object->id.
'">
2369 if (!empty($conf->use_javascript_ajax) &&
$object->status == $object::STATUS_DRAFT) {
2370 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
2373 print
'<div class="div-table-responsive-no-min">';
2374 if (!empty(
$object->lines) || (
$object->status == $object::STATUS_DRAFT && $permissiontoadd && $action !=
'selectlines' && $action !=
'editline')) {
2375 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
2383 if (
$object->status == $object::STATUS_DRAFT && $permissiontoadd && $action !=
'selectlines') {
2384 if ($action !=
'editline') {
2387 $parameters = array();
2388 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
2392 if (empty($reshook)) {
2398 if (!empty(
$object->lines) || (
$object->status == Reception::STATUS_DRAFT && $permissiontoadd && $action !=
'selectlines' && $action !=
'editline')) {
2407 if ($action ==
'editline') {
2408 print
'<form name="updateline" id="updateline" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$line_id.
'" method="POST">
2409 <input type="hidden" name="token" value="' .
newToken().
'">
2410 <input type="hidden" name="action" value="updateline">
2411 <input type="hidden" name="mode" value="">
2412 <input type="hidden" name="id" value="' .
$object->id.
'">';
2416 print
'<div class="div-table-responsive-no-min">';
2417 print
'<table id="tablelines" class="noborder centpercent">';
2419 print
'<tr class="liste_titre">';
2422 print
'<td width="5" class="center"> </td>';
2425 print
'<td>'.$langs->trans(
"Products").
'</td>';
2427 print
'<td>'.$langs->trans(
"Comment").
'</td>';
2429 print
'<td class="center">'.$langs->trans(
"QtyOrdered").
'</td>';
2430 if ($origin && $origin_id > 0) {
2431 print
'<td class="center">'.$langs->trans(
"QtyInOtherReceptions").
'</td>';
2435 if ($action ==
'editline') {
2439 if (empty($conf->productbatch->enabled)) {
2442 print
'<td class="center" colspan="'.$editColspan.
'">';
2444 print $langs->trans(
"QtyToReceive").
' - ';
2446 print $langs->trans(
"QtyReceived").
' - ';
2449 print $langs->trans(
"WarehouseTarget").
' - ';
2452 print $langs->trans(
"Batch");
2456 $statusreceived = $object::STATUS_CLOSED;
2458 $statusreceived = $object::STATUS_VALIDATED;
2461 $statusreceived = $object::STATUS_CLOSED;
2463 if (
$object->statut < $statusreceived) {
2464 print
'<td class="center">'.$langs->trans(
"QtyToReceive").
'</td>';
2466 print
'<td class="center">'.$langs->trans(
"QtyReceived").
'</td>';
2469 print
'<td class="left">'.$langs->trans(
"WarehouseTarget").
'</td>';
2473 print
'<td class="left">'.$langs->trans(
"Batch").
'</td>';
2476 print
'<td class="center">'.$langs->trans(
"CalculatedWeight").
'</td>';
2477 print
'<td class="center">'.$langs->trans(
"CalculatedVolume").
'</td>';
2480 print
'<td class="linecoledit"></td>';
2481 print
'<td class="linecoldelete" width="10"></td>';
2488 $outputlangs = $langs;
2492 if (
GETPOST(
'lang_id',
'aZ09')) {
2493 $newlang =
GETPOST(
'lang_id',
'aZ09');
2495 if (empty($newlang)) {
2496 $newlang =
$object->thirdparty->default_lang;
2498 if (!empty($newlang)) {
2499 $outputlangs =
new Translate(
"", $conf);
2500 $outputlangs->setDefaultLang($newlang);
2505 $alreadysent = array();
2507 if (empty($origin)) {
2508 $origin =
'supplier_order';
2511 if ($origin_id > 0) {
2512 $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";
2513 $sql .=
", ed.rowid as receptionline_id, ed.qty, ed.fk_reception as reception_id, ed.fk_entrepot";
2514 $sql .=
", e.rowid as reception_id, e.ref as reception_ref, e.date_creation, e.date_valid, e.date_delivery, e.date_reception";
2515 $sql .=
', p.label as product_label, p.ref, p.fk_product_type, p.rowid as prodid, p.tobatch as product_tobatch';
2516 $sql .=
', p.description as product_desc';
2517 $sql .=
" FROM ".MAIN_DB_PREFIX.
"receptiondet_batch as ed";
2518 $sql .=
", ".MAIN_DB_PREFIX.
"reception as e";
2519 $sql .=
", ".MAIN_DB_PREFIX.(($origin ==
'supplier_order') ?
'commande_fournisseur' : $origin).
"det as obj";
2520 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p ON obj.fk_product = p.rowid";
2521 $sql .=
" WHERE e.entity IN (".getEntity(
'reception').
")";
2522 $sql .=
" AND obj.fk_commande = ".((int) $origin_id);
2523 $sql .=
" AND obj.rowid = ed.fk_elementdet";
2524 $sql .=
" AND ed.fk_reception = e.rowid";
2525 $sql .=
" AND ed.fk_reception !=".((int)
$object->id);
2526 $sql .=
" ORDER BY obj.fk_product";
2528 dol_syslog(
"get list of reception lines", LOG_DEBUG);
2529 $resql = $db->query($sql);
2531 $num = $db->num_rows($resql);
2535 $obj = $db->fetch_object($resql);
2538 $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);
2546 $arrayofpurchaselinealreadyoutput = array();
2550 for ($i = 0; $i < $num_prod; $i++) {
2551 print
'<!-- origin line id = '.(!empty($lines[$i]->origin_line_id) ? $lines[$i]->origin_line_id : 0).
' -->';
2552 print
'<tr class="oddeven" id="row-'.$lines[$i]->id.
'" data-id="'.$lines[$i]->id.
'" data-element="'.$lines[$i]->element.
'">';
2556 print
'<td class="center">'.($i + 1).
'</td>';
2560 if ($lines[$i]->fk_product > 0) {
2564 $prod->fetch($lines[$i]->fk_product);
2565 $label = (!empty($prod->multilangs[$outputlangs->defaultlang][
"label"])) ? $prod->multilangs[$outputlangs->defaultlang][
"label"] : $lines[$i]->product->label;
2567 $label = (!empty($lines[$i]->product->label) ? $lines[$i]->product->label : $lines[$i]->product->product_label);
2570 print
'<td class="linecoldescription">';
2571 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
2572 $text = $lines[$i]->product->getNomUrl(1);
2573 $text .=
' - '.$label;
2575 print $form->textwithtooltip($text, $description, 3, 0,
'', (
string) $i);
2576 print_date_range(!empty($lines[$i]->date_start) ? $lines[$i]->date_start : 0, !empty($lines[$i]->date_end) ? $lines[$i]->date_end : 0);
2583 print
'<td class="linecoldescription">';
2584 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
2586 $text =
img_object($langs->trans(
'Service'),
'service');
2588 $text =
img_object($langs->trans(
'Product'),
'product');
2591 if (!empty($lines[$i]->label)) {
2592 $text .=
' <strong>'.$lines[$i]->label.
'</strong>';
2593 print $form->textwithtooltip($text, $lines[$i]->
description, 3, 0,
'', (
string) $i);
2603 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
2604 print
'<td><input name="comment'.$line_id.
'" id="comment'.$line_id.
'" value="'.
dol_escape_htmltag($lines[$i]->comment).
'"></td>';
2606 print
'<td style="white-space: pre-wrap; max-width: 200px;">'.dol_escape_htmltag($lines[$i]->comment).
'</td>';
2611 print
'<td class="center linecolqty">';
2612 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
2613 print $lines[$i]->qty_asked;
2618 if ($origin && $origin_id > 0) {
2619 print
'<td class="center nowrap linecolqtyinotherreceptions">';
2621 $qtyalreadyreceived = 0;
2622 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
2623 foreach ($alreadysent as $key => $val) {
2624 if ($lines[$i]->fk_commandefourndet == $key) {
2626 foreach ($val as $receptionline_id => $receptionline_var) {
2627 if ($receptionline_var[
'reception_id'] == $lines[$i]->fk_reception) {
2633 $htmltooltip .=
'<br>';
2635 $reception_static->fetch($receptionline_var[
'reception_id']);
2636 $htmltooltip .= $reception_static->getNomUrl(1,
'nolink', 0, 0, 1);
2637 $htmltooltip .=
' - '.$receptionline_var[
'qty'];
2639 $htmltext = $langs->trans(
"DateValidation").
' : '.(empty($receptionline_var[
'date_valid']) ? $langs->trans(
"Draft") :
dol_print_date($receptionline_var[
'date_valid'],
'dayhour'));
2640 if (
isModEnabled(
'stock') && $receptionline_var[
'warehouse'] > 0) {
2641 $warehousestatic->fetch($receptionline_var[
'warehouse']);
2642 $htmltext .=
'<br>'.$langs->trans(
"From").
' : '.$warehousestatic->getNomUrl(1,
'', 0, 1);
2644 $htmltooltip .=
' '.$form->textwithpicto(
'', $htmltext, 1);
2646 $qtyalreadyreceived += $receptionline_var[
'qty'];
2649 $htmltooltip = $langs->trans(
"QtyInOtherReceptions").
'...<br><br>'.$htmltooltip.
'<br><input type="submit" name="dummyhiddenbuttontogetfocus" style="display:none" autofocus>';
2654 print $form->textwithpicto((
string) $qtyalreadyreceived, $htmltooltip, 1,
'info',
'', 0, 3,
'tooltip'.$lines[$i]->
id);
2658 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
2660 print
'<td colspan="'.$editColspan.
'" class="center"><table class="nobordernopadding">';
2662 if ($lines[$i]->fk_product > 0) {
2663 print
'<!-- case edit 1 -->';
2666 print
'<td><input name="qtyl'.$line_id.
'" id="qtyl'.$line_id.
'" type="text" size="4" value="'.$lines[$i]->qty.
'"></td>';
2668 print
'<td>'.$formproduct->selectWarehouses($lines[$i]->fk_entrepot,
'entl'.$line_id,
'', 1, 0, $lines[$i]->fk_product,
'', 1).
'</td>';
2670 if ($conf->productbatch->enabled && !empty($lines[$i]->product->status_batch)) {
2671 print
'<td class="nowraponall left"><input name="batch'.$line_id.
'" id="batch'.$line_id.
'" type="text" value="'.$lines[$i]->batch.
'"><br>';
2673 print $langs->trans(
'SellByDate').
' : ';
2674 print $form->selectDate($lines[$i]->sellby,
'dlc'.$line_id, 0, 0, 1,
"").
'</br>';
2677 print $langs->trans(
'EatByDate').
' : ';
2678 print $form->selectDate($lines[$i]->eatby,
'dluo'.$line_id, 0, 0, 1,
"");
2684 print
'<!-- case edit 2 -->';
2687 print
'<td><input name="qtyl'.$line_id.
'" id="qtyl'.$line_id.
'" type="text" size="4" value="'.$lines[$i]->qty.
'"></td>';
2695 print
'</table></td>';
2698 print
'<td class="center linecolqtytoreceive">'.$lines[$i]->qty.
'</td>';
2702 if ($lines[$i]->fk_entrepot > 0) {
2704 $entrepot->fetch($lines[$i]->fk_entrepot);
2706 print
'<td class="left tdoverflowmax150" title="'.dol_escape_htmltag($entrepot->label).
'">';
2707 print $entrepot->getNomUrl(1);
2716 if (isset($lines[$i]->batch)) {
2717 print
'<!-- Detail of lot -->';
2718 print
'<td class="linecolbatch nowrap">';
2719 $detail = $langs->trans(
"NA");
2720 if ($lines[$i]->product->status_batch > 0 && $lines[$i]->fk_product > 0) {
2721 require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/productlot.class.php';
2723 $reslot = $productlot->fetch(0, $lines[$i]->fk_product, $lines[$i]->batch);
2725 $detail = $productlot->getNomUrl(1);
2728 $batchinfo = $langs->trans(
"Batch").
': '.$lines[$i]->batch;
2730 $batchinfo .=
' - '.$langs->trans(
"SellByDate").
': '.
dol_print_date($lines[$i]->sellby,
"day");
2733 $batchinfo .=
' - '.$langs->trans(
"EatByDate").
': '.
dol_print_date($lines[$i]->eatby,
"day");
2735 $detail = $form->textwithtooltip(
img_picto(
'',
'object_barcode').
' '.$langs->trans(
"DetailBatchNumber"), $batchinfo);
2738 print $detail .
'</td>';
2746 print
'<td class="center linecolweight">';
2748 print $lines[$i]->product->weight * $lines[$i]->qty.
' '.
measuringUnitString(0,
"weight", $lines[$i]->product->weight_units);
2755 print
'<td class="center linecolvolume">';
2757 print $lines[$i]->product->volume * $lines[$i]->qty.
' '.
measuringUnitString(0,
"volume", $lines[$i]->product->volume_units);
2764 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
2765 print
'<td class="center valignmiddle" colspan="2">';
2766 print
'<input type="submit" class="button small button-save" id="savelinebutton marginbottomonly" name="save" value="'.$langs->trans(
"Save").
'"><br>';
2767 print
'<input type="submit" class="button small button-cancel" id="cancellinebutton" name="cancel" value="'.$langs->trans(
"Cancel").
'"><br>';
2769 } elseif (
$object->statut == Reception::STATUS_DRAFT) {
2771 print
'<td class="linecoledit center">';
2772 print
'<a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=editline&token='.
newToken().
'&lineid='.$lines[$i]->id.
'">'.
img_edit().
'</a>';
2774 print
'<td class="linecoldelete" width="10">';
2775 print
'<a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=deleteline&token='.
newToken().
'&lineid='.$lines[$i]->id.
'">'.
img_delete().
'</a>';
2779 if (isset($rowExtrafieldsStart, $rowExtrafieldsView, $rowEnd)) {
2780 print $rowExtrafieldsStart;
2781 print $rowExtrafieldsView;
2787 $arrayofpurchaselinealreadyoutput[$lines[$i]->fk_commandefourndet] = $lines[$i]->fk_commandefourndet;
2790 $extralabelslines = $extrafields->attributes[$lines[$i]->table_element];
2791 if (!empty($extralabelslines) && is_array($extralabelslines) && count($extralabelslines) > 0) {
2801 $line->id = $lines[$i]->id;
2802 $line->fetch_optionals();
2804 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
2805 print $line->showOptionals($extrafields,
'edit', array(
'colspan' => $colspan),
'');
2807 print $line->showOptionals($extrafields,
'view', array(
'colspan' => $colspan),
'');
2829 if (($user->socid == 0) && ($action !=
'presend')) {
2830 print
'<div class="tabsAction">';
2832 $parameters = array();
2833 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
2834 if (empty($reshook)) {
2835 if (
$object->statut == Reception::STATUS_DRAFT && $num_prod > 0) {
2836 if ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'reception',
'creer'))
2837 || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'reception',
'reception_advance',
'validate'))) {
2838 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=valid&token='.
newToken().
'">'.$langs->trans(
"Validate").
'</a>';
2840 print
'<a class="butActionRefused" href="#" title="'.$langs->trans(
"NotAllowed").
'">'.$langs->trans(
"Validate").
'</a>';
2844 if (
$object->statut == Reception::STATUS_VALIDATED && $user->hasRight(
'reception',
'creer')) {
2845 print
'<div class="inline-block divButAction"><a class="butAction" href="card.php?id='.$object->id.
'&action=modif&token='.
newToken().
'">'.$langs->trans(
'SetToDraft').
'</a></div>';
2850 if (
$object->statut == Reception::STATUS_CLOSED && $user->hasRight(
'reception',
'creer')) {
2851 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"ReOpen").
'</a>';
2855 if (empty($user->socid)) {
2857 if (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
'reception',
'reception_advance',
'send')) {
2858 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=presend&mode=init#formmailbeforetitle">'.$langs->trans(
'SendByMail').
'</a>';
2860 print
'<a class="butActionRefused" href="#">'.$langs->trans(
'SendByMail').
'</a>';
2867 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
'supplier_invoice',
'creer')) {
2869 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>';
2876 if (
$object->statut == Reception::STATUS_VALIDATED) {
2877 if ($user->hasRight(
'reception',
'creer') &&
$object->statut > 0) {
2879 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifybilled&token='.
newToken().
'">'.$langs->trans(
'ClassifyBilled').
'</a>';
2881 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifyclosed&token='.
newToken().
'">'.$langs->trans(
"Close").
'</a>';
2885 if ($user->hasRight(
'reception',
'supprimer')) {
2886 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=delete&token='.
newToken().
'">'.$langs->trans(
"Delete").
'</a>';
2898 if ($action !=
'presend' && $action !=
'editline') {
2899 print
'<div class="fichecenter"><div class="fichehalfleft">';
2902 $filedir = $conf->reception->dir_output.
"/".$objectref;
2904 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
2906 $genallowed = $user->hasRight(
'reception',
'lire');
2907 $delallowed = $user->hasRight(
'reception',
'creer');
2909 print $formfile->showdocuments(
'reception', $objectref, $filedir, $urlsource, $genallowed, $delallowed,
$object->model_pdf, 1, 0, 0, 28, 0,
'',
'',
'', $soc->default_lang);
2913 $somethingshown = $form->showLinkedObjectBlock($object,
'');
2915 print
'</div><div class="fichehalfright">';
2917 print
'</div></div>';
2921 $modelmail =
'reception_send';
2922 $defaulttopic =
'SendReceptionRef';
2923 $diroutput = $conf->reception->dir_output;
2924 $trackid =
'rec'.$object->id;
2926 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
$id
Support class for third parties, contacts, members, users or resources.
if(! $sortfield) if(! $sortorder) $object
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
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.
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 ProductCombination Used to represent the relation between a product and one of its variants.
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 table commandefournisseurdispatch.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
Class to manage Dolibarr users.
getCountry($searchkey, $withcode='', $dbtouse=null, $outputlangs=null, $entconv=1, $searchlabel='')
Return country label, code or id from an id, code or label.
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...
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
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, $morecssdiv='')
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.
dol_eval($s, $returnvalue=1, $hideerrors=1, $onlysimplestring='1')
Replace eval function to add more security.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $allowothertags=array())
Show a picto called object_picto (generic function)
dol_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0, $allowdash=0)
Clean a string to use it as a file name.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
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'.
GETPOSTFLOAT($paramname, $rounding='', $option=2)
Return the value of a $_GET or $_POST supervariable, converted into float.
dol_htmlcleanlastbr($stringtodecode)
This function remove all ending and br at end.
dol_concatdesc($text1, $text2, $forxml=false, $invert=false)
Concat 2 descriptions with a new line between them (second operand after first one with appropriate n...
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.
dol_clone($srcobject, $native=2)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
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 a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
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($unitid, $measuring_style='', $unitscale=null, $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.