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 ==
'order_supplier' || $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 ==
'order_supplier' || $typeobject ==
'supplier_order' || $typeobject ==
'CommandeFournisseur') &&
$object->origin_object->id &&
isModEnabled(
"supplier_order")) {
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();
2509 if (empty($origin) || $origin ==
'order_supplier') {
2510 $origin =
'supplier_order';
2513 if ($origin_id > 0) {
2514 $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";
2515 $sql .=
", ed.rowid as receptionline_id, ed.qty, ed.fk_reception as reception_id, ed.fk_entrepot";
2516 $sql .=
", e.rowid as reception_id, e.ref as reception_ref, e.date_creation, e.date_valid, e.date_delivery, e.date_reception";
2517 $sql .=
', p.label as product_label, p.ref, p.fk_product_type, p.rowid as prodid, p.tobatch as product_tobatch';
2518 $sql .=
', p.description as product_desc';
2519 $sql .=
" FROM ".MAIN_DB_PREFIX.
"receptiondet_batch as ed";
2520 $sql .=
", ".MAIN_DB_PREFIX.
"reception as e";
2521 $sql .=
", ".MAIN_DB_PREFIX.(($origin ==
'supplier_order') ?
'commande_fournisseur' : $origin).
"det as obj";
2522 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p ON obj.fk_product = p.rowid";
2523 $sql .=
" WHERE e.entity IN (".getEntity(
'reception').
")";
2524 $sql .=
" AND obj.fk_commande = ".((int) $origin_id);
2525 $sql .=
" AND obj.rowid = ed.fk_elementdet";
2526 $sql .=
" AND ed.fk_reception = e.rowid";
2527 $sql .=
" AND ed.fk_reception !=".((int)
$object->id);
2528 $sql .=
" ORDER BY obj.fk_product";
2530 dol_syslog(
"get list of reception lines", LOG_DEBUG);
2531 $resql = $db->query($sql);
2533 $num = $db->num_rows($resql);
2537 $obj = $db->fetch_object($resql);
2540 $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);
2548 $arrayofpurchaselinealreadyoutput = array();
2552 for ($i = 0; $i < $num_prod; $i++) {
2553 print
'<!-- origin line id = '.(!empty($lines[$i]->origin_line_id) ? $lines[$i]->origin_line_id : 0).
' -->';
2554 print
'<tr class="oddeven" id="row-'.$lines[$i]->id.
'" data-id="'.$lines[$i]->id.
'" data-element="'.$lines[$i]->element.
'">';
2558 print
'<td class="center">'.($i + 1).
'</td>';
2562 if ($lines[$i]->fk_product > 0) {
2566 $prod->fetch($lines[$i]->fk_product);
2567 $label = (!empty($prod->multilangs[$outputlangs->defaultlang][
"label"])) ? $prod->multilangs[$outputlangs->defaultlang][
"label"] : $lines[$i]->product->label;
2569 $label = (!empty($lines[$i]->product->label) ? $lines[$i]->product->label : $lines[$i]->product->product_label);
2572 print
'<td class="linecoldescription">';
2573 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
2574 $text = $lines[$i]->product->getNomUrl(1);
2575 $text .=
' - '.$label;
2577 print $form->textwithtooltip($text, $description, 3, 0,
'', (
string) $i);
2578 print_date_range(!empty($lines[$i]->date_start) ? $lines[$i]->date_start : 0, !empty($lines[$i]->date_end) ? $lines[$i]->date_end : 0);
2585 print
'<td class="linecoldescription">';
2586 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
2588 $text =
img_object($langs->trans(
'Service'),
'service');
2590 $text =
img_object($langs->trans(
'Product'),
'product');
2593 if (!empty($lines[$i]->label)) {
2594 $text .=
' <strong>'.$lines[$i]->label.
'</strong>';
2595 print $form->textwithtooltip($text, $lines[$i]->
description, 3, 0,
'', (
string) $i);
2605 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
2606 print
'<td><input name="comment'.$line_id.
'" id="comment'.$line_id.
'" value="'.
dol_escape_htmltag($lines[$i]->comment).
'"></td>';
2608 print
'<td style="white-space: pre-wrap; max-width: 200px;">'.dol_escape_htmltag($lines[$i]->comment).
'</td>';
2613 print
'<td class="center linecolqty">';
2614 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
2615 print $lines[$i]->qty_asked;
2620 if ($origin && $origin_id > 0) {
2621 print
'<td class="center nowrap linecolqtyinotherreceptions">';
2623 $qtyalreadyreceived = 0;
2624 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
2625 foreach ($alreadysent as $key => $val) {
2626 if ($lines[$i]->fk_commandefourndet == $key) {
2628 foreach ($val as $receptionline_id => $receptionline_var) {
2629 if ($receptionline_var[
'reception_id'] == $lines[$i]->fk_reception) {
2635 $htmltooltip .=
'<br>';
2637 $reception_static->fetch($receptionline_var[
'reception_id']);
2638 $htmltooltip .= $reception_static->getNomUrl(1,
'nolink', 0, 0, 1);
2639 $htmltooltip .=
' - '.$receptionline_var[
'qty'];
2641 $htmltext = $langs->trans(
"DateValidation").
' : '.(empty($receptionline_var[
'date_valid']) ? $langs->trans(
"Draft") :
dol_print_date($receptionline_var[
'date_valid'],
'dayhour'));
2642 if (
isModEnabled(
'stock') && $receptionline_var[
'warehouse'] > 0) {
2643 $warehousestatic->fetch($receptionline_var[
'warehouse']);
2644 $htmltext .=
'<br>'.$langs->trans(
"From").
' : '.$warehousestatic->getNomUrl(1,
'', 0, 1);
2646 $htmltooltip .=
' '.$form->textwithpicto(
'', $htmltext, 1);
2648 $qtyalreadyreceived += $receptionline_var[
'qty'];
2651 $htmltooltip = $langs->trans(
"QtyInOtherReceptions").
'...<br><br>'.$htmltooltip.
'<br><input type="submit" name="dummyhiddenbuttontogetfocus" style="display:none" autofocus>';
2656 print $form->textwithpicto((
string) $qtyalreadyreceived, $htmltooltip, 1,
'info',
'', 0, 3,
'tooltip'.$lines[$i]->
id);
2660 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
2662 print
'<td colspan="'.$editColspan.
'" class="center"><table class="nobordernopadding">';
2664 if ($lines[$i]->fk_product > 0) {
2665 print
'<!-- case edit 1 -->';
2668 print
'<td><input name="qtyl'.$line_id.
'" id="qtyl'.$line_id.
'" type="text" size="4" value="'.$lines[$i]->qty.
'"></td>';
2670 print
'<td>'.$formproduct->selectWarehouses($lines[$i]->fk_entrepot,
'entl'.$line_id,
'', 1, 0, $lines[$i]->fk_product,
'', 1).
'</td>';
2672 if ($conf->productbatch->enabled && !empty($lines[$i]->product->status_batch)) {
2673 print
'<td class="nowraponall left"><input name="batch'.$line_id.
'" id="batch'.$line_id.
'" type="text" value="'.$lines[$i]->batch.
'"><br>';
2675 print $langs->trans(
'SellByDate').
' : ';
2676 print $form->selectDate($lines[$i]->sellby,
'dlc'.$line_id, 0, 0, 1,
"").
'</br>';
2679 print $langs->trans(
'EatByDate').
' : ';
2680 print $form->selectDate($lines[$i]->eatby,
'dluo'.$line_id, 0, 0, 1,
"");
2686 print
'<!-- case edit 2 -->';
2689 print
'<td><input name="qtyl'.$line_id.
'" id="qtyl'.$line_id.
'" type="text" size="4" value="'.$lines[$i]->qty.
'"></td>';
2697 print
'</table></td>';
2700 print
'<td class="center linecolqtytoreceive">'.$lines[$i]->qty.
'</td>';
2704 if ($lines[$i]->fk_entrepot > 0) {
2706 $entrepot->fetch($lines[$i]->fk_entrepot);
2708 print
'<td class="left tdoverflowmax150" title="'.dol_escape_htmltag($entrepot->label).
'">';
2709 print $entrepot->getNomUrl(1);
2718 if (isset($lines[$i]->batch)) {
2719 print
'<!-- Detail of lot -->';
2720 print
'<td class="linecolbatch nowrap">';
2721 $detail = $langs->trans(
"NA");
2722 if ($lines[$i]->product->status_batch > 0 && $lines[$i]->fk_product > 0) {
2723 require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/productlot.class.php';
2725 $reslot = $productlot->fetch(0, $lines[$i]->fk_product, $lines[$i]->batch);
2727 $detail = $productlot->getNomUrl(1);
2730 $batchinfo = $langs->trans(
"Batch").
': '.$lines[$i]->batch;
2732 $batchinfo .=
' - '.$langs->trans(
"SellByDate").
': '.
dol_print_date($lines[$i]->sellby,
"day");
2735 $batchinfo .=
' - '.$langs->trans(
"EatByDate").
': '.
dol_print_date($lines[$i]->eatby,
"day");
2737 $detail = $form->textwithtooltip(
img_picto(
'',
'object_barcode').
' '.$langs->trans(
"DetailBatchNumber"), $batchinfo);
2740 print $detail .
'</td>';
2748 print
'<td class="center linecolweight">';
2750 print $lines[$i]->product->weight * $lines[$i]->qty.
' '.
measuringUnitString(0,
"weight", $lines[$i]->product->weight_units);
2757 print
'<td class="center linecolvolume">';
2759 print $lines[$i]->product->volume * $lines[$i]->qty.
' '.
measuringUnitString(0,
"volume", $lines[$i]->product->volume_units);
2766 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
2767 print
'<td class="center valignmiddle" colspan="2">';
2768 print
'<input type="submit" class="button small button-save" id="savelinebutton marginbottomonly" name="save" value="'.$langs->trans(
"Save").
'"><br>';
2769 print
'<input type="submit" class="button small button-cancel" id="cancellinebutton" name="cancel" value="'.$langs->trans(
"Cancel").
'"><br>';
2771 } elseif (
$object->statut == Reception::STATUS_DRAFT) {
2773 print
'<td class="linecoledit center">';
2774 print
'<a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=editline&token='.
newToken().
'&lineid='.$lines[$i]->id.
'">'.
img_edit().
'</a>';
2776 print
'<td class="linecoldelete" width="10">';
2777 print
'<a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=deleteline&token='.
newToken().
'&lineid='.$lines[$i]->id.
'">'.
img_delete().
'</a>';
2781 if (isset($rowExtrafieldsStart, $rowExtrafieldsView, $rowEnd)) {
2782 print $rowExtrafieldsStart;
2783 print $rowExtrafieldsView;
2789 $arrayofpurchaselinealreadyoutput[$lines[$i]->fk_commandefourndet] = $lines[$i]->fk_commandefourndet;
2792 $extralabelslines = $extrafields->attributes[$lines[$i]->table_element];
2793 if (!empty($extralabelslines) && is_array($extralabelslines) && count($extralabelslines) > 0) {
2803 $line->id = $lines[$i]->id;
2804 $line->fetch_optionals();
2806 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
2807 print $line->showOptionals($extrafields,
'edit', array(
'colspan' => $colspan),
'');
2809 print $line->showOptionals($extrafields,
'view', array(
'colspan' => $colspan),
'');
2831 if (($user->socid == 0) && ($action !=
'presend')) {
2832 print
'<div class="tabsAction">';
2834 $parameters = array();
2835 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
2836 if (empty($reshook)) {
2837 if (
$object->statut == Reception::STATUS_DRAFT && $num_prod > 0) {
2838 if ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'reception',
'creer'))
2839 || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'reception',
'reception_advance',
'validate'))) {
2840 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=valid&token='.
newToken().
'">'.$langs->trans(
"Validate").
'</a>';
2842 print
'<a class="butActionRefused" href="#" title="'.$langs->trans(
"NotAllowed").
'">'.$langs->trans(
"Validate").
'</a>';
2846 if (
$object->statut == Reception::STATUS_VALIDATED && $user->hasRight(
'reception',
'creer')) {
2847 print
'<div class="inline-block divButAction"><a class="butAction" href="card.php?id='.$object->id.
'&action=modif&token='.
newToken().
'">'.$langs->trans(
'SetToDraft').
'</a></div>';
2852 if (
$object->statut == Reception::STATUS_CLOSED && $user->hasRight(
'reception',
'creer')) {
2853 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"ReOpen").
'</a>';
2857 if (empty($user->socid)) {
2859 if (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
'reception',
'reception_advance',
'send')) {
2860 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=presend&mode=init#formmailbeforetitle">'.$langs->trans(
'SendByMail').
'</a>';
2862 print
'<a class="butActionRefused" href="#">'.$langs->trans(
'SendByMail').
'</a>';
2869 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
'supplier_invoice',
'creer')) {
2871 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>';
2878 if (
$object->statut == Reception::STATUS_VALIDATED) {
2879 if ($user->hasRight(
'reception',
'creer') &&
$object->statut > 0) {
2881 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifybilled&token='.
newToken().
'">'.$langs->trans(
'ClassifyBilled').
'</a>';
2883 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifyclosed&token='.
newToken().
'">'.$langs->trans(
"Close").
'</a>';
2887 if ($user->hasRight(
'reception',
'supprimer')) {
2888 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=delete&token='.
newToken().
'">'.$langs->trans(
"Delete").
'</a>';
2900 if ($action !=
'presend' && $action !=
'editline') {
2901 print
'<div class="fichecenter"><div class="fichehalfleft">';
2904 $filedir = $conf->reception->dir_output.
"/".$objectref;
2906 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
2908 $genallowed = $user->hasRight(
'reception',
'lire');
2909 $delallowed = $user->hasRight(
'reception',
'creer');
2911 print $formfile->showdocuments(
'reception', $objectref, $filedir, $urlsource, $genallowed, $delallowed,
$object->model_pdf, 1, 0, 0, 28, 0,
'',
'',
'', $soc->default_lang);
2915 $somethingshown = $form->showLinkedObjectBlock($object,
'');
2917 print
'</div><div class="fichehalfright">';
2919 print
'</div></div>';
2923 $modelmail =
'reception_send';
2924 $defaulttopic =
'SendReceptionRef';
2925 $diroutput = $conf->reception->dir_output;
2926 $trackid =
'rec'.$object->id;
2928 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.