40require
'../main.inc.php';
49require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
50require_once DOL_DOCUMENT_ROOT.
'/reception/class/reception.class.php';
51require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
52require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
53require_once DOL_DOCUMENT_ROOT.
'/core/lib/product.lib.php';
54require_once DOL_DOCUMENT_ROOT.
'/core/lib/reception.lib.php';
55require_once DOL_DOCUMENT_ROOT.
'/core/modules/reception/modules_reception.php';
56require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
57require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
58require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
59require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/productlot.class.php';
61 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
64 require_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
66require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
67require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.orderline.class.php';
68require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.dispatch.class.php';
70 require_once DOL_DOCUMENT_ROOT.
'/product/class/productbatch.class.php';
73 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
74 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_type);
420 $objectsrc =
new $classname(
$db);
421 $objectsrc->fetch(
$object->origin_id);
423 $object->socid = $objectsrc->socid;
426 $batch_line = array();
427 $stockLine = array();
428 $array_options = array();
433 foreach ($_POST as $key => $value) {
436 if (strpos($key,
'qtyasked') !==
false) {
442 for ($i = 1; $i <= $num; $i++) {
454 if (
GETPOST($qty,
'alpha') > 0) {
459 $array_options[$i] = $extrafields->getOptionalsFromPost(
$object->table_element_line, (
string) $i);
464 for ($i = 1; $i <= $num; $i++) {
468 foreach ($objectsrc->lines as $linesrc) {
469 if ($linesrc->id == $lineId) {
470 $lineToTest = $linesrc;
474 if (empty($lineToTest)) {
478 $comment =
"comment".$i;
483 $cost_price =
"cost_price".$i;
502 if ($entrepot_id < 0) {
509 $eatby =
GETPOST($eatby,
'alpha');
510 $sellby =
GETPOST($sellby,
'alpha');
511 $eatbydate = str_replace(
'/',
'-', $eatby);
512 $sellbydate = str_replace(
'/',
'-', $sellby);
515 $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'));
527 $ret = $extrafields->setOptionalsFromPost(
null, $object);
541 $outputlangs = $langs;
544 $newlang =
GETPOST(
'lang_id',
'aZ09');
547 $newlang =
$object->thirdparty->default_lang;
549 if (!empty($newlang)) {
551 $outputlangs->setDefaultLang($newlang);
556 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
564 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"QtyToReceive").
'/'.$langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
570 header(
"Location: card.php?id=" .
$object->id);
577 } elseif ($action ==
'confirm_valid' && $confirm ==
'yes' && $permissiontovalidate) {
580 $result =
$object->valid($user);
583 $langs->load(
"errors");
588 $outputlangs = $langs;
591 $newlang =
GETPOST(
'lang_id',
'aZ09');
594 $newlang =
$object->thirdparty->default_lang;
596 if (!empty($newlang)) {
598 $outputlangs->setDefaultLang($newlang);
603 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
609 } elseif ($action ==
'confirm_delete' && $confirm ==
'yes' && $permissiontodelete) {
610 $result =
$object->delete($user);
612 header(
"Location: ".DOL_URL_ROOT.
'/reception/index.php');
624 } elseif ($action ==
'setdate_livraison' && $permissiontoadd) {
628 $result =
$object->setDeliveryDate($user, $datedelivery);
632 } elseif ($action ==
'setdate_reception' && $user->hasRight(
'reception',
'creer')) {
636 $result =
$object->setReceptionDate($user, $datereception);
640 } elseif ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $permissiontoadd) {
642 $result =
$object->deleteLine($user, $lineid);
647 $outputlangs = $langs;
650 $newlang =
GETPOST(
'lang_id',
'aZ09');
653 $newlang =
$object->thirdparty->default_lang;
655 if (!empty($newlang)) {
657 $outputlangs->setDefaultLang($newlang);
661 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
664 header(
'Location: ' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id);
669 } elseif (in_array($action, array(
'settracking_number',
'settracking_url',
'settrueWeight',
'settrueWidth',
'settrueHeight',
'settrueDepth',
'setshipping_method_id')) && $permissiontoadd) {
673 if ($action ==
'settracking_number') {
674 $object->tracking_number = trim(
GETPOST(
'tracking_number',
'alpha'));
676 if ($action ==
'settracking_url') {
677 $object->tracking_url = trim(
GETPOST(
'tracking_url',
'restricthtml'));
679 if ($action ==
'settrueWeight') {
683 if ($action ==
'settrueWidth') {
686 if ($action ==
'settrueHeight') {
690 if ($action ==
'settrueDepth') {
693 if ($action ==
'setshipping_method_id') {
697 if (
$object->update($user) >= 0) {
698 header(
"Location: card.php?id=" .
$object->id);
704 } elseif ($action ==
'builddoc' && $permissiontoread) {
713 $outputlangs = $langs;
716 $newlang =
GETPOST(
'lang_id',
'aZ09');
719 $newlang =
$object->thirdparty->default_lang;
721 if (!empty($newlang)) {
723 $outputlangs->setDefaultLang($newlang);
725 $result =
$object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
730 } elseif ($action ==
'remove_file' && $permissiontoadd) {
732 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
734 $upload_dir =
$conf->reception->dir_output;
735 $file = $upload_dir.
'/'.
GETPOST(
'file');
742 } elseif ($action ==
'classifybilled' && $permissiontoadd) {
743 $result =
$object->setBilled();
745 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
751 } elseif ($action ==
'classifyclosed' && $permissiontoread) {
752 $result =
$object->setClosed();
754 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
760 } elseif ($action ==
'deleteline' && !empty($line_id) && $permissiontoread) {
765 $num_prod = count($lines);
766 for ($i = 0; $i < $num_prod; $i++) {
767 if ($lines[$i]->
id == $line_id) {
769 $line->id = $line_id;
770 if (!$error && $line->delete($user) < 0) {
774 unset($_POST[
"lineid"]);
778 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
783 } elseif ($action ==
'updateline' &&
GETPOST(
'save') && $permissiontoadd) {
788 if (!
$object->fetch($id) > 0) {
793 $qty =
GETPOST(
'qty',
'alpha');
795 $element_type =
'reception';
801 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
802 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
804 if (is_array($extralabelsline)) {
806 foreach ($extralabelsline as $key => $value) {
807 unset($_POST[
"options_" . $key]);
816 $result =
$object->updatelinefree(
GETPOSTINT(
'lineid'), (
float) $qty, $element_type, $fk_product,
GETPOSTINT(
'units'), $rang, $description, 0, $array_options);
821 $outputlangs = $langs;
824 $newlang =
GETPOST(
'lang_id',
'aZ09');
827 $newlang =
$object->thirdparty->default_lang;
829 if (!empty($newlang)) {
831 $outputlangs->setDefaultLang($newlang);
832 $outputlangs->load(
'products');
836 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
838 unset($_POST[
'qty']);
839 unset($_POST[
'units']);
844 } elseif ($origin && $origin_id > 0) {
852 $num_prod = count($lines);
853 for ($i = 0; $i < $num_prod; $i++) {
854 if ($lines[$i]->
id == $line_id) {
856 $line->fetch($line_id);
858 $extrafields->fetch_name_optionals_label(
$object->table_element_line);
859 $line->array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
861 $line->fk_product = $lines[$i]->fk_product;
863 if ($lines[$i]->fk_product > 0) {
865 $stockLocation =
"entl".$line_id;
866 $qty =
"qtyl".$line_id;
867 $comment =
"comment".$line_id;
869 $line->id = $line_id;
870 $line->fk_entrepot =
GETPOSTINT($stockLocation);
872 $line->comment =
GETPOST($comment,
'alpha');
875 $batch =
"batch".$line_id;
876 $dlc =
"dlc".$line_id;
877 $dluo =
"dluo".$line_id;
879 $eatby =
GETPOST($dluo,
'alpha');
880 $eatbydate = str_replace(
'/',
'-', $eatby);
882 $sellby =
GETPOST($dlc,
'alpha');
883 $sellbydate = str_replace(
'/',
'-', $sellby);
884 $line->batch =
GETPOST($batch,
'alpha');
885 $line->eatby = strtotime($eatbydate);
886 $line->sellby = strtotime($sellbydate);
889 if ($line->update($user) < 0) {
894 $qty =
"qtyl".$line_id;
895 $line->id = $line_id;
897 $line->fk_entrepot = 0;
898 if ($line->update($user) < 0) {
907 unset($_POST[
"lineid"]);
912 $outputlangs = $langs;
915 $newlang =
GETPOST(
'lang_id',
'aZ09');
918 $newlang =
$object->thirdparty->default_lang;
920 if (!empty($newlang)) {
922 $outputlangs->setDefaultLang($newlang);
926 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
932 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
935 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
939 } elseif ($action ==
'updateline' && $permissiontoadd &&
GETPOST(
'cancel',
'alpha') == $langs->trans(
"Cancel")) {
940 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
942 } elseif ($action ==
'addline' && !$origin &&
getDolGlobalString(
'RECEPTION_STANDALONE') && $permissiontoadd) {
943 $langs->load(
'errors');
949 $element_type =
'reception';
955 $prod_entry_mode =
GETPOST(
'prod_entry_mode',
'aZ09');
956 if ($prod_entry_mode ==
'free') {
961 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
969 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
970 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
972 if (is_array($extralabelsline)) {
974 foreach ($extralabelsline as $key => $value) {
975 unset($_POST[
"options_".$key]);
979 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) &&
GETPOST(
'type') < 0) {
980 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
985 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
989 setEventMessages($langs->trans(
'FieldCannotBeNegative', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
992 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && empty($line_desc)) {
993 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
997 if (!$error &&
isModEnabled(
'variants') && $prod_entry_mode !=
'free') {
998 if ($combinations =
GETPOST(
'combinations',
'array')) {
1002 if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
1003 $idprod = $res->fk_product_child;
1004 $fk_product = $idprod;
1006 setEventMessages($langs->trans(
'ErrorProductCombinationNotFound'),
null,
'errors');
1012 if (!$error && ($qty >= 0) && (!empty($line_desc) || (!empty($idprod) && $idprod > 0))) {
1014 if (!empty($idprod) && $idprod > 0) {
1016 $prod->fetch($idprod);
1017 $desc =
$prod->label;
1018 $description = $desc;
1021 $outputlangs = $langs;
1023 if (
GETPOST(
'lang_id',
'aZ09')) {
1024 $newlang =
GETPOST(
'lang_id',
'aZ09');
1026 if (empty($newlang)) {
1027 $newlang =
$object->thirdparty->default_lang;
1029 if (!empty($newlang)) {
1031 $outputlangs->setDefaultLang($newlang);
1034 $description = (!empty(
$prod->multilangs[$outputlangs->defaultlang][
"description"])) ?
$prod->multilangs[$outputlangs->defaultlang][
"description"] :
$prod->
description;
1036 $description =
$prod->description;
1041 $description = $line_desc;
1048 $outputlangs = $langs;
1050 if (
GETPOST(
'lang_id',
'alpha')) {
1051 $newlang =
GETPOST(
'lang_id',
'alpha');
1053 if (empty($newlang)) {
1054 $newlang =
$object->thirdparty->default_lang;
1056 if (!empty($newlang)) {
1058 $outputlangs->setDefaultLang($newlang);
1059 $outputlangs->load(
'products');
1061 if (!empty(
$prod->customcode)) {
1062 $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CustomsCode").
': '.
$prod->customcode;
1064 if (!empty(
$prod->customcode) && !empty(
$prod->country_code)) {
1067 if (!empty(
$prod->country_code)) {
1068 $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CountryOrigin").
': '.
getCountry(
$prod->country_code,
'',
$db, $outputlangs, 0);
1071 if (!empty(
$prod->customcode)) {
1072 $tmptxt .= $langs->transnoentitiesnoconv(
"CustomsCode").
': '.
$prod->customcode;
1074 if (!empty(
$prod->customcode) && !empty(
$prod->country_code)) {
1077 if (!empty(
$prod->country_code)) {
1078 $tmptxt .= $langs->transnoentitiesnoconv(
"CountryOrigin").
': '.
getCountry(
$prod->country_code,
'',
$db, $langs, 0);
1084 $type =
$prod->type;
1085 $fk_unit =
$prod->fk_unit;
1087 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
1090 $fk_unit =
GETPOST(
'units',
'alpha');
1091 $description = $desc;
1092 $fk_elementdet =
'';
1098 $result =
$object->addlinefree((
float) $qty, $element_type, $idprod, $fk_unit, min($rank, count(
$object->lines) + 1), $description, $array_options);
1105 $outputlangs = $langs;
1106 $newlang =
GETPOST(
'lang_id',
'alpha');
1108 $newlang =
$object->thirdparty->default_lang;
1110 if (!empty($newlang)) {
1112 $outputlangs->setDefaultLang($newlang);
1114 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1117 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
1124 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
1130 $triggersendname =
'RECEPTION_SENTBYMAIL';
1132 $mode =
'emailfromreception';
1133 $autocopy =
'MAIN_MAIL_AUTOCOPY_RECEPTION_TO';
1134 $trackid =
'rec'.$object->id;
1135 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
1143$title =
$object->ref.
' - '.$langs->trans(
'Reception');
1144if ($action ==
'create') {
1145 $title = $langs->trans(
"NewReception");
1147llxHeader(
'', $title,
'Reception',
'', 0, 0,
'',
'',
'',
'mod-reception page-card');
1156 $formproject =
null;
1163if ($action ==
'create' && $origin !=
'supplierorder' && !
getDolGlobalString(
'RECEPTION_STANDALONE')) {
1164 print
load_fiche_titre($langs->trans(
"CreateReception"),
'',
'dollyrevert');
1166 print
'<br>'.$langs->trans(
"ReceptionCreationIsDoneFromOrder");
1173if ($action ==
'create' && $permissiontoadd) {
1180 $res = $soc->fetch($socid);
1183 $note_private =
$object->getDefaultCreateValueFor(
'note_private');
1184 $note_public =
$object->getDefaultCreateValueFor(
'note_public');
1186 print
'<form name="crea_reception" action="' . $_SERVER[
"PHP_SELF"] .
'" method="POST">';
1187 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
1188 print
'<input type="hidden" name="action" value="add">';
1189 print
'<input type="hidden" name="changecompany" value="0">';
1190 print
'<input type="hidden" name="originid" value="' .
$id .
'">';
1191 print
'<input type="hidden" name="backtopage" value="' . $backtopage .
'">';
1195 print
'<table class="border centpercent">';
1200 print
'<td class="fieldrequired">' . $langs->trans(
'ThirdParty') .
'</td>';
1203 print $soc->getNomUrl(1);
1204 print
'<input type="hidden" name="socid" value="' . $soc->id .
'">';
1207 print
'<td class="valuefieldcreate">';
1208 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company(
'',
'socid',
'',
'SelectThirdParty', 1, 0, array(), 0,
'minwidth175 maxwidth500 widthcentpercentminusxx');
1212 $(document).ready(function() {
1213 $("#socid").change(function() {
1214 console.log("We have changed the company - Reload page");
1215 var socid = $(this).val();
1217 $("input[name=action]").val("create");
1218 $("input[name=changecompany]").val("1");
1219 $("form[name=crea_reception]").submit();
1224 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>';
1230 if (
isModEnabled(
'project') && is_object($formproject)) {
1232 if (empty($projectid) && !empty(
$object->fk_project)) {
1233 $projectid = (int)
$object->fk_project;
1235 $langs->load(
"projects");
1237 print
'<td>' . $langs->trans(
"Project") .
'</td><td colspan="2">';
1238 print
img_picto(
'',
'project',
'class="pictofixedwidth"');
1239 print $formproject->select_projects($soc->id, $projectid,
'projectid', 0, 0, 1, 0, 0, 0, 0,
'', 1, 0,
'widthcentpercentminusxx');
1240 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>';
1246 print
'<tr><td>'.$langs->trans(
"DateReception").
'</td>';
1247 print
'<td colspan="3">';
1248 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1249 $date_reception = ($date_reception ? $date_reception :
$object->date_reception);
1250 print $form->selectDate($date_reception ? $date_reception : -1,
'date_reception', 1, 1, 1);
1255 print
'<tr><td>'.$langs->trans(
"DateDeliveryPlanned").
'</td>';
1256 print
'<td colspan="3">';
1257 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1258 $date_delivery = ($date_delivery ? $date_delivery :
$object->delivery_date);
1259 print $form->selectDate($date_delivery ? $date_delivery : -1,
'date_delivery', 1, 1, 1);
1265 print $langs->trans(
"Weight");
1266 print
'</td><td colspan="3">';
1267 print
img_picto(
'',
'fa-balance-scale',
'class="pictofixedwidth"');
1268 print
'<input name="weight" size="4" value="'.GETPOST(
'weight').
'"> ';
1269 $text = $formproduct->selectMeasuringUnits(
"weight_units",
"weight", (
string)
GETPOSTINT(
'weight_units'), 0, 2);
1270 $htmltext = $langs->trans(
"KeepEmptyForAutoCalculation");
1271 print $form->textwithpicto($text, $htmltext);
1276 print $langs->trans(
"Width").
' x '.$langs->trans(
"Height").
' x '.$langs->trans(
"Depth");
1277 print
' </td><td colspan="3">';
1278 print
img_picto(
'',
'fa-ruler',
'class="pictofixedwidth"');
1279 print
'<input name="sizeW" size="4" value="'.GETPOST(
'sizeW').
'">';
1280 print
' x <input name="sizeH" size="4" value="'.GETPOST(
'sizeH').
'">';
1281 print
' x <input name="sizeS" size="4" value="'.GETPOST(
'sizeS').
'">';
1283 $text = $formproduct->selectMeasuringUnits(
"size_units",
"size", (
string)
GETPOSTINT(
'size_units'), 0, 2);
1284 $htmltext = $langs->trans(
"KeepEmptyForAutoCalculation");
1285 print $form->textwithpicto($text, $htmltext);
1289 print
"<tr><td>".$langs->trans(
"ReceptionMethod").
"</td>";
1290 print
'<td colspan="3">';
1291 $recept->fetch_delivery_methods();
1292 print $form->selectarray(
"shipping_method_id", $recept->meths,
GETPOSTINT(
'shipping_method_id'), 1, 0, 0,
"", 1);
1294 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
1296 print
"</td></tr>\n";
1299 print
"<tr><td>".$langs->trans(
"TrackingNumber").
"</td>";
1300 print
'<td colspan="3">';
1301 print
img_picto(
'',
'barcode',
'class="pictofixedwidth"');
1302 print
'<input name="tracking_number" size="20" value="'.GETPOST(
'tracking_number',
'alpha').
'">';
1303 print
"</td></tr>\n";
1306 $extrafields->fetch_name_optionals_label(
$object->table_element);
1307 if (empty($reshook) && !empty($extrafields->attributes[
$object->table_element][
'label'])) {
1308 if (
$object->fetch_optionals() > 0) {
1309 $recept->array_options = array_merge($recept->array_options,
$object->array_options);
1311 print $recept->showOptionals($extrafields,
'create', $parameters);
1317 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"),
$object->label_incoterms, 1).
'</label></td>';
1318 print
'<td colspan="3" class="maxwidthonsmartphone">';
1319 print
img_picto(
'',
'incoterm',
'class="pictofixedwidth"');
1320 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''));
1326 if (is_countable($list) && count($list) > 0) {
1327 print
'<tr><td>'.$langs->trans(
'Model').
'</td>';
1328 print
'<td colspan="2">';
1329 print
img_picto(
'',
'pdf',
'class="pictofixedwidth"');
1330 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);
1338 print
'<td class="tdtop">';
1339 print $form->textwithpicto($langs->trans(
'NotePublic'), $htmltext);
1341 print
'<td valign="top" colspan="2">';
1342 $doleditor =
new DolEditor(
'note_public', (
string) $note_public,
'', 80,
'dolibarr_notes',
'In',
false,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
1343 print $doleditor->Create(1);
1346 if (!$user->socid) {
1348 print
'<td class="tdtop">';
1349 print $form->textwithpicto($langs->trans(
'NotePrivate'), $htmltext);
1351 print
'<td valign="top" colspan="2">';
1352 $doleditor =
new DolEditor(
'note_private', (
string) $note_private,
'', 80,
'dolibarr_notes',
'In',
false,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
1353 print $doleditor->Create(1);
1361 print $form->buttonsSaveCancel(
"CreateDraft");
1364 } elseif ($origin) {
1365 if ($origin ==
'supplierorder') {
1366 $classname =
'CommandeFournisseur';
1368 $classname = ucfirst($origin);
1371 $objectsrc =
new $classname(
$db);
1372 if ($objectsrc->fetch($origin_id)) {
1374 $soc->fetch($objectsrc->socid);
1377 $author->fetch($objectsrc->user_author_id);
1383 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1384 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1385 print
'<input type="hidden" name="action" value="add">';
1386 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
1387 print
'<input type="hidden" name="origin_id" value="'.$objectsrc->id.
'">';
1388 print
'<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.
'">';
1389 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1391 print
'<input type="hidden" name="entrepot_id" value="'.GETPOSTINT(
'entrepot_id').
'">';
1396 print
'<table class="border centpercent">';
1399 print
'<tr><td class="titlefieldcreate fieldrequired">';
1400 if ($origin ==
'supplierorder' &&
isModEnabled(
"supplier_order")) {
1401 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;
1404 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;
1411 if ($origin ==
'supplier_order') {
1412 print $langs->trans(
'SupplierOrder');
1414 print $langs->trans(
'RefSupplier');
1416 print
'</td><td colspan="3">';
1417 print
'<input type="text" name="ref_supplier" value="'.$objectsrc->ref_supplier.
'" />';
1422 print
'<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans(
'Company').
'</td>';
1423 print
'<td colspan="3">'.$soc->getNomUrl(1).
'</td>';
1427 if (
isModEnabled(
'project') && $formproject !==
null) {
1429 if (empty($projectid) && !empty($objectsrc->fk_project)) {
1430 $projectid = $objectsrc->fk_project;
1432 if ($origin ==
'project') {
1433 $projectid = ($origin_id ? $origin_id : 0);
1436 $langs->load(
"projects");
1438 print
'<td>'.$langs->trans(
"Project").
'</td><td colspan="2">';
1439 print
img_picto(
'',
'project',
'class="paddingright"');
1440 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');
1441 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>';
1447 print
'<tr><td>'.$langs->trans(
"DateReception").
'</td>';
1448 print
'<td colspan="3">';
1449 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1450 $date_reception = ($date_reception ? $date_reception :
$object->date_reception);
1451 print $form->selectDate($date_reception ? $date_reception : -1,
'date_reception', 1, 1, 1);
1456 print
'<tr><td>'.$langs->trans(
"DateDeliveryPlanned").
'</td>';
1457 print
'<td colspan="3">';
1458 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1459 $date_delivery = ($date_delivery ? $date_delivery : $objectsrc->delivery_date);
1460 print $form->selectDate($date_delivery ? $date_delivery : -1,
'date_delivery', 1, 1, 1);
1465 print
'<tr><td>'.$langs->trans(
"NotePublic").
'</td>';
1466 print
'<td colspan="3">';
1467 $doleditor =
new DolEditor(
'note_public', $objectsrc->note_public,
'', 60,
'dolibarr_notes',
'In',
false,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
1468 print $doleditor->Create(1);
1472 if ($objectsrc->note_private && !$user->socid) {
1473 print
'<tr><td>'.$langs->trans(
"NotePrivate").
'</td>';
1474 print
'<td colspan="3">';
1475 $doleditor =
new DolEditor(
'note_private', $objectsrc->note_private,
'', 60,
'dolibarr_notes',
'In',
false,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
1476 print $doleditor->Create(1);
1482 print $langs->trans(
"Weight");
1483 print
'</td><td colspan="3"><input name="weight" size="4" value="'.GETPOST(
'weight').
'"> ';
1484 $text = $formproduct->selectMeasuringUnits(
"weight_units",
"weight", (
string)
GETPOSTINT(
'weight_units'), 0, 2);
1485 $htmltext = $langs->trans(
"KeepEmptyForAutoCalculation");
1486 print $form->textwithpicto($text, $htmltext);
1490 print $langs->trans(
"Width").
' x '.$langs->trans(
"Height").
' x '.$langs->trans(
"Depth");
1491 print
' </td><td colspan="3"><input name="trueWidth" size="4" value="'.GETPOST(
'trueWidth').
'">';
1492 print
' x <input name="trueHeight" size="4" value="'.GETPOST(
'trueHeight').
'">';
1493 print
' x <input name="trueDepth" size="4" value="'.GETPOST(
'trueDepth').
'">';
1495 $text = $formproduct->selectMeasuringUnits(
"size_units",
"size", (
string)
GETPOSTINT(
'size_units'), 0, 2);
1496 $htmltext = $langs->trans(
"KeepEmptyForAutoCalculation");
1497 print $form->textwithpicto($text, $htmltext);
1501 print
"<tr><td>".$langs->trans(
"ReceptionMethod").
"</td>";
1502 print
'<td colspan="3">';
1503 $recept->fetch_delivery_methods();
1504 print $form->selectarray(
"shipping_method_id", $recept->meths,
GETPOSTINT(
'shipping_method_id'), 1, 0, 0,
"", 1);
1506 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
1508 print
"</td></tr>\n";
1511 print
"<tr><td>".$langs->trans(
"TrackingNumber").
"</td>";
1512 print
'<td colspan="3">';
1513 print
'<input name="tracking_number" size="20" value="'.GETPOST(
'tracking_number',
'alpha').
'">';
1514 print
"</td></tr>\n";
1517 $parameters = array(
'objectsrc' => $objectsrc,
'colspan' =>
' colspan="3"',
'cols' =>
'3',
'socid' => $socid);
1518 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $recept, $action);
1519 print $hookmanager->resPrint;
1522 $extrafields->fetch_name_optionals_label(
$object->table_element);
1523 if (empty($reshook) && !empty($extrafields->attributes[
$object->table_element][
'label'])) {
1525 if ($objectsrc->fetch_optionals() > 0) {
1526 $recept->array_options = array_merge($recept->array_options, $objectsrc->array_options);
1528 print $recept->showOptionals($extrafields,
'create', $parameters);
1534 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"), $objectsrc->label_incoterms, 1).
'</label></td>';
1535 print
'<td colspan="3" class="maxwidthonsmartphone">';
1536 print $form->select_incoterms((!empty($objectsrc->fk_incoterms) ? $objectsrc->fk_incoterms :
''), (!empty($objectsrc->location_incoterms) ? $objectsrc->location_incoterms :
''));
1541 include_once DOL_DOCUMENT_ROOT.
'/core/modules/reception/modules_reception.php';
1544 if (is_array($list) && count($list) > 1) {
1545 print
"<tr><td>".$langs->trans(
"DefaultModel").
"</td>";
1546 print
'<td colspan="3">';
1548 print
"</td></tr>\n";
1562 $suffix2numAsked = array();
1563 $dispatchLines = array();
1565 foreach ($_POST as $key => $value) {
1570 if (preg_match(
'/^product_([0-9]+)_([0-9]+)$/i', $key, $reg)) {
1572 $paramSuffix = $reg[1] .
'_' . $reg[2];
1573 $suffix2numAsked[$paramSuffix] = $numAsked;
1576 $numline = $numAsked;
1578 $prod =
"product_" . $paramSuffix;
1579 $qty =
"qty_" . $paramSuffix;
1580 $ent =
"entrepot_" . $paramSuffix;
1581 $pu =
"pu_" . $paramSuffix;
1582 $fk_commandefourndet =
"fk_commandefourndet_" . $paramSuffix;
1587 if (preg_match(
'/^product_batch_([0-9]+)_([0-9]+)$/i', $key, $reg)) {
1589 $paramSuffix = $reg[1] .
'_' . $reg[2];
1590 $suffix2numAsked[$paramSuffix] = $numAsked;
1594 $numline = $numAsked;
1596 $prod =
'product_batch_' . $paramSuffix;
1597 $qty =
'qty_' . $paramSuffix;
1598 $ent =
'entrepot_' . $paramSuffix;
1599 $pu =
'pu_' . $paramSuffix;
1600 $lot =
'lot_number_' . $paramSuffix;
1603 $fk_commandefourndet =
'fk_commandefourndet_'.$paramSuffix;
1604 $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));
1608 if (preg_match(
'/^productl([0-9]+)$/i', $key, $reg)) {
1610 $paramSuffix = $reg[1];
1611 $suffix2numAsked[$paramSuffix] = $numAsked;
1615 $numline = $numAsked;
1617 $prod =
'productid'.$paramSuffix;
1618 $comment =
'comment'.$paramSuffix;
1619 $qty =
'qtyl'.$paramSuffix;
1620 $ent =
'entl'.$paramSuffix;
1621 $pu =
'pul'.$paramSuffix;
1622 $lot =
'batch'.$paramSuffix;
1625 $fk_commandefourndet =
'fk_commandefournisseurdet'.$paramSuffix;
1626 $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));
1633 foreach ($suffix2numAsked as $suffix => $n) {
1634 $dispatchLines[$n][
'array_options'] = $extrafields->getOptionalsFromPost(
'receptiondet_batch',
'_' . $suffix,
'');
1637 $reshook = $hookmanager->executeHooks(
'dataProcessing', $parameters, $object, $action);
1640 } elseif (empty($reshook)) {
1642 if (is_array($hookmanager->resArray) && !empty($hookmanager->resArray)) {
1644 $tempMerged = array_merge($dispatchLines, $hookmanager->resArray);
1648 foreach ($dispatchLines as $idx => $val) {
1649 if (!is_array($tempMerged[$idx]) || !isset($tempMerged[$idx][
'fk_commandefourndet'])) {
1656 $dispatchLines = $tempMerged;
1659 error_log(
"WARNING: Hook dataProcessing returned invalid data, ignoring merge.");
1662 } elseif ($reshook > 0) {
1664 $dispatchLines = $hookmanager->resArray;
1665 array_unshift($dispatchLines,
null);
1666 unset($dispatchLines[0]);
1667 $numAsked = count($dispatchLines);
1670 print
'<script type="text/javascript">
1671 jQuery(document).ready(function() {
1672 jQuery("#autofill").click(function(event) {
1673 event.preventDefault();';
1675 while ($i <= $numAsked) {
1676 print
'jQuery("#qtyl'.$i.
'").val(jQuery("#qtyasked'.$i.
'").val() - jQuery("#qtydelivered'.$i.
'").val());'.
"\n";
1680 jQuery("#autoreset").click(function(event) {
1681 event.preventDefault();';
1683 while ($i <= $numAsked) {
1684 print
'jQuery("#qtyl'.$i.
'").val(0);'.
"\n";
1693 print
'<table class="noborder centpercent">';
1696 $objectsrc->loadReceptions();
1699 print
'<tr class="liste_titre">';
1700 print
'<td>'.$langs->trans(
"Description").
'</td>';
1701 print
'<td>'.$langs->trans(
"Comment").
'</td>';
1702 print
'<td class="center">'.$langs->trans(
"QtyOrdered").
'</td>';
1703 print
'<td class="center">'.$langs->trans(
"QtyReceived").
'</td>';
1704 print
'<td class="center">'.$langs->trans(
"QtyToReceive");
1706 print
'<td>'.$langs->trans(
"BuyingPrice").
'</td>';
1709 print
' <br><center><a href="#" id="autofill"><span class="fas fa-fill pictofixedwidth" style=""></span> '.$langs->trans(
"Fill").
'</a>';
1710 print
' <a href="#" id="autoreset"><span class="fas fa-eraser pictofixedwidth" style=""></span>'.$langs->trans(
"Reset").
'</a></center><br>';
1714 print
'<td class="left">'.$langs->trans(
"Warehouse").
' ('.$langs->trans(
"Stock").
')</td>';
1717 print
'<td class="left">'.$langs->trans(
"batch_number").
'</td>';
1719 print
'<td class="left">'.$langs->trans(
"SellByDate").
'</td>';
1722 print
'<td class="left">'.$langs->trans(
"EatByDate").
'</td>';
1726 $parameters = array();
1727 $reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters, $object, $action);
1731 print $hookmanager->resPrint;
1739 $arrayofpurchaselinealreadyoutput = array();
1743 while ($indiceAsked <= $numAsked) {
1748 foreach ($objectsrc->lines as $supplierLine) {
1749 if ($dispatchLines[$indiceAsked][
'fk_commandefourndet'] == $supplierLine->id) {
1750 $line = $supplierLine;
1758 $type = $line->product_type ? $line->product_type : $line->fk_product_type;
1760 if (!empty($line->date_start)) {
1763 if (!empty($line->date_end)) {
1767 print
'<!-- line fk_commandefourndet='.$line->id.
' for product='.$line->fk_product.
' -->'.
"\n";
1768 print
'<tr class="oddeven">'.
"\n";
1771 if ($line->fk_product > 0) {
1772 $product->fetch($line->fk_product);
1773 $product->load_stock(
'warehouseopen');
1778 print
'<a name="'.$line->id.
'"></a>';
1780 print
'<input type="hidden" name="productl'.$indiceAsked.
'" value="'.$line->fk_product.
'">';
1782 if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {
1783 print
'<input type="hidden" name="productid'.$indiceAsked.
'" value="'.$line->fk_product.
'">';
1786 $product_static = $product;
1788 $text = $product_static->getNomUrl(1);
1789 $text .=
' - '.(!empty($line->label) ? $line->label : $line->product_label);
1791 print $form->textwithtooltip($text, $description, 3, 0,
'', (
string) $i);
1798 print ($line->desc && $line->desc != $line->product_label) ?
'<br>'.dol_htmlentitiesbr($line->desc) :
'';
1804 if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {
1806 $text =
img_object($langs->trans(
'Service'),
'service');
1808 $text =
img_object($langs->trans(
'Product'),
'product');
1811 if (!empty($line->label)) {
1812 $text .=
' <strong>'.$line->label.
'</strong>';
1813 print $form->textwithtooltip($text, $line->desc, 3, 0,
'', (
string) $i);
1815 print $text.
' '.nl2br($line->desc);
1826 $defaultcomment = $dispatchLines[$indiceAsked][
'comment'];
1828 print
'<input type="text" class="maxwidth100" name="comment'.$indiceAsked.
'" value="'.$defaultcomment.
'">';
1832 print
'<td class="center">';
1833 if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {
1836 print
'<input type="hidden" name="fk_commandefournisseurdet'.$indiceAsked.
'" value="'.$line->id.
'">';
1837 print
'<input type="hidden" name="pul'.$indiceAsked.
'" value="'.$line->subprice.
'">';
1838 print
'<input name="qtyasked'.$indiceAsked.
'" id="qtyasked'.$indiceAsked.
'" type="hidden" value="'.$line->qty.
'">';
1840 $qtyProdCom = $line->qty;
1843 print
'<td class="center">';
1844 $quantityDelivered = isset($objectsrc->receptions[$line->id]) ? $objectsrc->receptions[$line->id] : 0;
1845 if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {
1846 print $quantityDelivered;
1848 print
'<input name="qtydelivered'.$indiceAsked.
'" id="qtydelivered'.$indiceAsked.
'" type="hidden" value="'.$quantityDelivered.
'">';
1853 $quantityToBeDelivered = 0;
1855 $quantityToBeDelivered = $dispatchLines[$indiceAsked][
'qty'];
1857 $warehouse_id = $dispatchLines[$indiceAsked][
'ent'];
1860 $warehouseObject =
null;
1863 print
'<!-- Case warehouse already known or product not a predefined product -->';
1864 if (array_key_exists($dispatchLines[$indiceAsked][
'ent'], $product->stock_warehouse)) {
1865 $stock = +$product->stock_warehouse[$dispatchLines[$indiceAsked][
'ent']]->real;
1867 $deliverableQty = $dispatchLines[$indiceAsked][
'qty'];
1868 $cost_price = $dispatchLines[$indiceAsked][
'pu'];
1871 print
'<td class="center">';
1874 $defaultqty =
GETPOSTINT(
'qtyl'.$indiceAsked);
1876 print
'<input name="idl'.$indiceAsked.
'" type="hidden" value="'.$line->id.
'">';
1877 print
'<input class="right" name="qtyl'.$indiceAsked.
'" id="qtyl'.$indiceAsked.
'" type="text" size="4" value="'.$deliverableQty.
'">';
1879 print $langs->trans(
"NA");
1885 print
'<input class="width75 right" name="cost_price'.$indiceAsked.
'" id="cost_price'.$indiceAsked.
'" value="'.
price($cost_price).
'">';
1891 print
'<td class="left">';
1894 $ent =
"entl".$indiceAsked;
1895 $idl =
"idl".$indiceAsked;
1897 if ($line->fk_product > 0) {
1898 print
'<!-- Show warehouse selection -->';
1899 print $formproduct->selectWarehouses($tmpentrepot_id,
'entl'.$indiceAsked,
'', 0, 0, $line->fk_product,
'', 1);
1902 print $langs->trans(
"Service");
1908 if (!empty($product->status_batch)) {
1909 print
'<td><input name="batch'.$indiceAsked.
'" value="'.$dispatchLines[$indiceAsked][
'lot'].
'"></td>';
1911 print
'<td class="nowraponall">';
1912 print $form->selectDate($dispatchLines[$indiceAsked][
'DLC'],
'dlc'.$indiceAsked, 0, 0, 1,
"");
1916 print
'<td class="nowraponall">';
1917 print $form->selectDate($dispatchLines[$indiceAsked][
'DLUO'],
'dluo'.$indiceAsked, 0, 0, 1,
"");
1921 print
'<td colspan="3"></td>';
1925 $parameters = array();
1926 $parameters[
'dispatchLine'] = $dispatchLines[$indiceAsked];
1927 $parameters[
'indiceAsked'] = $indiceAsked;
1928 $reshook = $hookmanager->executeHooks(
'printFieldListValue', $parameters, $object, $action);
1932 print $hookmanager->resPrint;
1936 $arrayofpurchaselinealreadyoutput[$line->id] = $line->id;
1942 if (!empty($extrafields)) {
1956 $srcLine->id = $line->id;
1957 $srcLine->fetch_optionals();
1959 if (empty($recLine->array_options) && !empty($dispatchLines[$indiceAsked][
'array_options'])) {
1960 $recLine->array_options = $dispatchLines[$indiceAsked][
'array_options'];
1962 $recLine->array_options = array_merge($recLine->array_options, $srcLine->array_options);
1964 print $recLine->showOptionals($extrafields,
'edit', array(
'style' =>
'class="oddeven"',
'colspan' => $colspan), (
string) $indiceAsked,
'',
'1');
1974 print $form->buttonsSaveCancel(
"Create");
1991 $num_prod = count($lines);
1995 print $langs->trans(
"NoRecordFound");
2002 $typeobject =
$object->origin;
2004 $origin_id =
$object->origin_id;
2011 $res =
$object->fetch_optionals();
2014 print
dol_get_fiche_head($head,
'reception', $langs->trans(
"Reception"), -1,
'dollyrevert');
2019 if ($action ==
'delete') {
2020 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $langs->trans(
'DeleteReception'), $langs->trans(
"ConfirmDeleteReception",
$object->ref),
'confirm_delete',
'', 0, 1);
2024 if ($action ==
'valid') {
2025 $objectref = substr(
$object->ref, 1, 4);
2026 if ($objectref ==
'PROV') {
2027 $numref =
$object->getNextNumRef($soc);
2032 $text = $langs->trans(
"ConfirmValidateReception", $numref);
2034 $text .=
'<br>'.img_picto(
'',
'movement',
'class="pictofixedwidth"').$langs->trans(
"StockMovementWillBeRecorded").
'.';
2036 $text .=
'<br>'.img_picto(
'',
'movement',
'class="pictofixedwidth"').$langs->trans(
"StockMovementNotYetRecorded").
'.';
2040 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2043 $text .= $notify->confirmMessage(
'RECEPTION_VALIDATE',
$object->socid, $object);
2046 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $langs->trans(
'ValidateReception'), $text,
'confirm_valid',
'', 0, 1, 250);
2050 if ($action ==
'annuler') {
2051 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $langs->trans(
'CancelReception'), $langs->trans(
"ConfirmCancelReception",
$object->ref),
'confirm_cancel',
'', 0, 1);
2054 if (!$formconfirm) {
2055 $parameters = array(
'formConfirm' => $formconfirm);
2056 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
2057 if (empty($reshook)) {
2058 $formconfirm .= $hookmanager->resPrint;
2059 } elseif ($reshook > 0) {
2060 $formconfirm = $hookmanager->resPrint;
2070 $tmparray =
$object->getTotalWeightVolume();
2071 $totalWeight = $tmparray[
'weight'];
2072 $totalVolume = $tmparray[
'volume'];
2077 $objectsrc->fetch(
$object->origin_object->id);
2081 $objectsrc->fetch(
$object->origin_object->id);
2083 if (($typeobject ==
'supplier_order' || $typeobject ==
'CommandeFournisseur') &&
$object->origin_object->id &&
isModEnabled(
"supplier_order")) {
2085 $objectsrc->fetch(
$object->origin_object->id);
2088 $linkback =
'<a href="'.DOL_URL_ROOT.
'/reception/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
2089 $morehtmlref =
'<div class="refidno">';
2092 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, $user->hasRight(
'reception',
'creer'),
'string',
'', 0, 1);
2093 $morehtmlref .= $form->editfieldval(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, $user->hasRight(
'reception',
'creer'),
'string',
'',
null,
null,
'', 1);
2096 $morehtmlref .=
'<br>'.$object->thirdparty->getNomUrl(1);
2098 if ($origin && $origin_id > 0) {
2100 $langs->load(
"projects");
2101 $morehtmlref .=
'<br>';
2103 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
2104 if ($action !=
'classify') {
2105 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
2107 $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');
2109 if (!empty($objectsrc) && !empty($objectsrc->fk_project)) {
2111 $proj->fetch($objectsrc->fk_project);
2112 $morehtmlref .= $proj->getNomUrl(1);
2114 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
2122 $langs->load(
"projects");
2123 $morehtmlref .=
'<br>';
2124 if ($permissiontoadd) {
2125 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
2126 if ($action !=
'classify') {
2127 $morehtmlref .=
'<a class="editfielda" href="' . $_SERVER[
'PHP_SELF'] .
'?action=classify&token=' .
newToken() .
'&id=' .
$object->id .
'">' .
img_edit($langs->transnoentitiesnoconv(
'SetProject')) .
'</a> ';
2129 $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');
2131 if (!empty(
$object->fk_project)) {
2133 $proj->fetch(
$object->fk_project);
2134 $morehtmlref .= $proj->getNomUrl(1);
2136 $morehtmlref .=
'<span class="opacitymedium"> - ' .
dol_escape_htmltag($proj->title) .
'</span>';
2142 $morehtmlref .=
'</div>';
2144 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
2147 print
'<div class="fichecenter">';
2148 print
'<div class="fichehalfleft">';
2149 print
'<div class="underbanner clearboth"></div>';
2151 print
'<table class="border centpercent tableforfield">';
2156 print $langs->trans(
"RefOrder").
'</td>';
2157 print
'<td colspan="3">';
2158 print $objectsrc->getNomUrl(1,
'commande');
2164 print $langs->trans(
"RefProposal").
'</td>';
2165 print
'<td colspan="3">';
2166 print $objectsrc->getNomUrl(1,
'reception');
2170 if (($typeobject ==
'supplier_order' || $typeobject ==
'CommandeFournisseur') &&
$object->origin_object->id &&
isModEnabled(
"propal")) {
2172 print $langs->trans(
"SupplierOrder").
'</td>';
2173 print
'<td colspan="3">';
2174 print $objectsrc->getNomUrl(1,
'reception');
2180 print
'<tr><td class="titlefield">'.$langs->trans(
"DateCreation").
'</td>';
2181 print
'<td colspan="3">'.dol_print_date(
$object->date_creation,
"dayhour",
"tzuserrel").
"</td>\n";
2185 print
'<tr><td height="10">';
2186 print
'<table class="nobordernopadding centpercent"><tr><td>';
2187 print $langs->trans(
'DateReception');
2189 if ($action !=
'editdate_reception') {
2190 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>';
2192 print
'</tr></table>';
2194 if ($action ==
'editdate_reception') {
2195 print
'<form name="setdate_reception" action="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'" method="post">';
2196 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
2197 print
'<input type="hidden" name="action" value="setdate_reception">';
2198 print $form->selectDate(
$object->date_reception ?
$object->date_reception : -1,
'recep_', 1, 1, 0,
"setdate_reception", 1, 0);
2199 print
'<input type="submit" class="button button-edit smallpaddingimp" value="' . $langs->trans(
'Modify') .
'">';
2208 print
'<tr><td height="10">';
2209 print
'<table class="nobordernopadding" width="100%"><tr><td>';
2210 print $langs->trans(
'DateDeliveryPlanned');
2213 if ($action !=
'editdate_livraison' && $permissiontoadd) {
2214 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>';
2216 print
'</tr></table>';
2217 print
'</td><td colspan="2">';
2218 if ($action ==
'editdate_livraison') {
2219 print
'<form name="setdate_livraison" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
2220 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2221 print
'<input type="hidden" name="action" value="setdate_livraison">';
2222 print $form->selectDate(
$object->date_delivery ?
$object->date_delivery : -1,
'liv_', 1, 1, 0,
"setdate_livraison", 1, 0);
2223 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
2233 print $form->editfieldkey(
"Weight",
'trueWeight', (
string)
$object->trueWeight, $object, $user->hasRight(
'reception',
'creer'));
2234 print
'</td><td colspan="3">';
2236 if ($action ==
'edittrueWeight') {
2237 print
'<form name="settrueweight" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
2238 print
'<input name="action" value="settrueWeight" type="hidden">';
2239 print
'<input name="id" value="'.$object->id.
'" type="hidden">';
2240 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2241 print
'<input id="trueWeight" name="trueWeight" value="'.$object->trueWeight.
'" type="text">';
2242 print $formproduct->selectMeasuringUnits(
"weight_units",
"weight", (
string)
$object->weight_units, 0, 2);
2243 print
' <input class="button" name="modify" value="'.$langs->trans(
"Modify").
'" type="submit">';
2244 print
' <input class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'" type="submit">';
2248 print (
$object->trueWeight &&
$object->weight_units !=
'') ?
' '.measuringUnitString(0,
"weight",
$object->weight_units) :
'';
2252 if ($totalWeight > 0) {
2253 if (!empty(
$object->trueWeight)) {
2254 print
' ('.$langs->trans(
"SumOfProductWeights").
': ';
2257 if (!empty(
$object->trueWeight)) {
2264 print
'<tr><td>'.$form->editfieldkey(
"Width",
'trueWidth', (
string)
$object->trueWidth, $object, $user->hasRight(
'reception',
'creer')).
'</td><td colspan="3">';
2265 print $form->editfieldval(
"Width",
'trueWidth',
$object->trueWidth, $object, $user->hasRight(
'reception',
'creer'));
2266 print (
$object->trueWidth &&
$object->width_units !=
'') ?
' '.measuringUnitString(0,
"size",
$object->width_units) :
'';
2270 print
'<tr><td>'.$form->editfieldkey(
"Height",
'trueHeight', (
string)
$object->trueHeight, $object, $user->hasRight(
'reception',
'creer')).
'</td><td colspan="3">';
2271 if ($action ==
'edittrueHeight') {
2272 print
'<form name="settrueHeight" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
2273 print
'<input name="action" value="settrueHeight" type="hidden">';
2274 print
'<input name="id" value="'.$object->id.
'" type="hidden">';
2275 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2276 print
'<input id="trueHeight" name="trueHeight" value="'.$object->trueHeight.
'" type="text">';
2277 print $formproduct->selectMeasuringUnits(
"size_units",
"size",
$object->size_units, 0, 2);
2278 print
' <input class="button" name="modify" value="'.$langs->trans(
"Modify").
'" type="submit">';
2279 print
' <input class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'" type="submit">';
2283 print (
$object->trueHeight &&
$object->height_units !=
'') ?
' '.measuringUnitString(0,
"size",
$object->height_units) :
'';
2289 print
'<tr><td>'.$form->editfieldkey(
"Depth",
'trueDepth', (
string)
$object->trueDepth, $object, $user->hasRight(
'reception',
'creer')).
'</td><td colspan="3">';
2290 print $form->editfieldval(
"Depth",
'trueDepth',
$object->trueDepth, $object, $user->hasRight(
'reception',
'creer'));
2291 print (
$object->trueDepth &&
$object->depth_units !=
'') ?
' '.measuringUnitString(0,
"size",
$object->depth_units) :
'';
2296 print $langs->trans(
"Volume");
2298 print
'<td colspan="3">';
2299 $calculatedVolume = 0;
2303 $volumeUnit =
$object->size_units * 3;
2306 if ($calculatedVolume > 0) {
2307 if ($volumeUnit < 50) {
2313 if ($totalVolume > 0) {
2314 if ($calculatedVolume) {
2315 print
' ('.$langs->trans(
"SumOfProductVolumes").
': ';
2319 if ($calculatedVolume) {
2329 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
2334 print
'<div class="fichehalfright">';
2335 print
'<div class="underbanner clearboth"></div>';
2337 print
'<table class="border centpercent tableforfield">';
2340 print
'<tr><td height="10">';
2341 print
'<table class="nobordernopadding centpercent"><tr><td>';
2342 print $langs->trans(
'ReceptionMethod');
2345 if ($action !=
'editshipping_method_id' && $permissiontoadd) {
2346 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>';
2348 print
'</tr></table>';
2349 print
'</td><td colspan="2">';
2350 if ($action ==
'editshipping_method_id') {
2351 print
'<form name="setshipping_method_id" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
2352 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2353 print
'<input type="hidden" name="action" value="setshipping_method_id">';
2354 $object->fetch_delivery_methods();
2355 print $form->selectarray(
"shipping_method_id",
$object->meths,
$object->shipping_method_id, 1, 0, 0,
"", 1);
2357 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
2359 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
2362 if (
$object->shipping_method_id > 0) {
2364 $code = $langs->getLabelFromKey(
$db, (
string)
$object->shipping_method_id,
'c_shipment_mode',
'rowid',
'code');
2365 print $langs->trans(
"SendingMethod".strtoupper($code));
2372 print
'<tr><td class="titlefield">'.$form->editfieldkey(
"TrackingNumber",
'tracking_number',
$object->tracking_number, $object, $user->hasRight(
'reception',
'creer')).
'</td><td colspan="3">';
2373 print $form->editfieldval(
"TrackingNumber",
'tracking_number',
$object->tracking_url, $object, $user->hasRight(
'reception',
'creer'),
'safehtmlstring',
$object->tracking_number);
2379 print
'<table width="100%" class="nobordernopadding"><tr><td>';
2380 print $langs->trans(
'IncotermLabel');
2381 print
'<td><td class="right">';
2382 if ($user->hasRight(
'reception',
'creer')) {
2383 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/reception/card.php?id='.
$object->id.
'&action=editincoterm&token='.
newToken().
'">'.
img_edit().
'</a>';
2387 print
'</td></tr></table>';
2389 print
'<td colspan="3">';
2390 if ($action !=
'editincoterm') {
2391 print $form->textwithpicto(
$object->display_incoterms(),
$object->label_incoterms, 1);
2393 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
2403 print
'<div class="clearboth"></div>';
2409 if (!empty(
$object->table_element_line)) {
2411 $result =
$object->getLinesArray();
2413 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.(($action !=
'editline') ?
'' :
'#line_'.
GETPOSTINT(
'lineid')).
'" method="POST">
2414 <input type="hidden" name="token" value="' .
newToken().
'">
2415 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">
2416 <input type="hidden" name="mode" value="">
2417 <input type="hidden" name="page_y" value="">
2418 <input type="hidden" name="id" value="' .
$object->id.
'">
2421 if (!empty(
$conf->use_javascript_ajax) &&
$object->status == $object::STATUS_DRAFT) {
2422 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
2425 print
'<div class="div-table-responsive-no-min">';
2426 if (!empty(
$object->lines) || (
$object->status == $object::STATUS_DRAFT && $permissiontoadd && $action !=
'selectlines' && $action !=
'editline')) {
2427 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
2435 if (
$object->status == $object::STATUS_DRAFT && $permissiontoadd && $action !=
'selectlines') {
2436 if ($action !=
'editline') {
2439 $parameters = array();
2440 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
2444 if (empty($reshook)) {
2450 if (!empty(
$object->lines) || (
$object->status == Reception::STATUS_DRAFT && $permissiontoadd && $action !=
'selectlines' && $action !=
'editline')) {
2459 if ($action ==
'editline') {
2460 print
'<form name="updateline" id="updateline" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$line_id.
'" method="POST">
2461 <input type="hidden" name="token" value="' .
newToken().
'">
2462 <input type="hidden" name="action" value="updateline">
2463 <input type="hidden" name="mode" value="">
2464 <input type="hidden" name="id" value="' .
$object->id.
'">';
2468 print
'<div class="div-table-responsive-no-min">';
2469 print
'<table id="tablelines" class="noborder centpercent">';
2471 print
'<tr class="liste_titre">';
2474 print
'<td width="5" class="center"> </td>';
2477 print
'<td>'.$langs->trans(
"Products").
'</td>';
2479 print
'<td>'.$langs->trans(
"Comment").
'</td>';
2481 print
'<td class="center">'.$langs->trans(
"QtyOrdered").
'</td>';
2482 if ($origin && $origin_id > 0) {
2483 print
'<td class="center">'.$langs->trans(
"QtyInOtherReceptions").
'</td>';
2487 if ($action ==
'editline') {
2491 if (empty(
$conf->productbatch->enabled)) {
2494 print
'<td class="center" colspan="'.$editColspan.
'">';
2496 print $langs->trans(
"QtyToReceive").
' - ';
2498 print $langs->trans(
"QtyReceived").
' - ';
2501 print $langs->trans(
"WarehouseTarget").
' - ';
2504 print $langs->trans(
"Batch");
2508 $parameters = array();
2509 $reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters, $object, $action);
2513 print $hookmanager->resPrint;
2516 $statusreceived = $object::STATUS_CLOSED;
2518 $statusreceived = $object::STATUS_VALIDATED;
2521 $statusreceived = $object::STATUS_CLOSED;
2523 if (
$object->statut < $statusreceived) {
2524 print
'<td class="center">'.$langs->trans(
"QtyToReceive").
'</td>';
2526 print
'<td class="center">'.$langs->trans(
"QtyReceived").
'</td>';
2529 print
'<td class="left">'.$langs->trans(
"WarehouseTarget").
'</td>';
2533 print
'<td class="left">'.$langs->trans(
"Batch").
'</td>';
2536 $parameters = array();
2537 $reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters, $object, $action);
2541 print $hookmanager->resPrint;
2544 print
'<td class="center">'.$langs->trans(
"CalculatedWeight").
'</td>';
2545 print
'<td class="center">'.$langs->trans(
"CalculatedVolume").
'</td>';
2548 print
'<td class="linecoledit"></td>';
2549 print
'<td class="linecoldelete" width="10"></td>';
2556 $outputlangs = $langs;
2560 if (
GETPOST(
'lang_id',
'aZ09')) {
2561 $newlang =
GETPOST(
'lang_id',
'aZ09');
2563 if (empty($newlang)) {
2564 $newlang =
$object->thirdparty->default_lang;
2566 if (!empty($newlang)) {
2568 $outputlangs->setDefaultLang($newlang);
2573 $alreadysent = array();
2575 if (empty($origin) || $origin ==
'order_supplier') {
2576 $origin =
'supplier_order';
2579 if ($origin_id > 0) {
2580 $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";
2581 $sql .=
", ed.rowid as receptionline_id, ed.qty, ed.fk_reception as reception_id, ed.fk_entrepot";
2582 $sql .=
", e.rowid as reception_id, e.ref as reception_ref, e.date_creation, e.date_valid, e.date_delivery, e.date_reception";
2583 $sql .=
', p.label as product_label, p.ref, p.fk_product_type, p.rowid as prodid, p.tobatch as product_tobatch';
2584 $sql .=
', p.description as product_desc';
2585 $sql .=
" FROM ".MAIN_DB_PREFIX.
"receptiondet_batch as ed";
2586 $sql .=
", ".MAIN_DB_PREFIX.
"reception as e";
2587 $sql .=
", ".MAIN_DB_PREFIX.(($origin ==
'supplier_order') ?
'commande_fournisseur' : $origin).
"det as obj";
2588 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p ON obj.fk_product = p.rowid";
2589 $sql .=
" WHERE e.entity IN (".getEntity(
'reception').
")";
2590 $sql .=
" AND obj.fk_commande = ".((int) $origin_id);
2591 $sql .=
" AND obj.rowid = ed.fk_elementdet";
2592 $sql .=
" AND ed.fk_reception = e.rowid";
2593 $sql .=
" AND ed.fk_reception !=".((int)
$object->id);
2594 $sql .=
" ORDER BY obj.fk_product";
2596 dol_syslog(
"get list of reception lines", LOG_DEBUG);
2597 $resql =
$db->query($sql);
2599 $num =
$db->num_rows($resql);
2603 $obj =
$db->fetch_object($resql);
2606 $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);
2614 $arrayofpurchaselinealreadyoutput = array();
2618 for ($i = 0; $i < $num_prod; $i++) {
2619 print
'<!-- origin line id = '.(!empty($lines[$i]->origin_line_id) ? $lines[$i]->origin_line_id : 0).
' -->';
2620 print
'<tr class="oddeven" id="row-'.$lines[$i]->id.
'" data-id="'.$lines[$i]->id.
'" data-element="'.$lines[$i]->element.
'">';
2624 print
'<td class="center">'.($i + 1).
'</td>';
2628 if ($lines[$i]->fk_product > 0) {
2632 $prod->fetch($lines[$i]->fk_product);
2633 $label = (!empty(
$prod->multilangs[$outputlangs->defaultlang][
"label"])) ?
$prod->multilangs[$outputlangs->defaultlang][
"label"] : $lines[$i]->product->label;
2635 $label = (!empty($lines[$i]->product->label) ? $lines[$i]->product->label : $lines[$i]->product->product_label);
2638 print
'<td class="linecoldescription">';
2639 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
2640 $text = $lines[$i]->product->getNomUrl(1);
2641 $text .=
' - '.$label;
2643 print $form->textwithtooltip($text, $description, 3, 0,
'', (
string) $i);
2644 print_date_range(!empty($lines[$i]->date_start) ? $lines[$i]->date_start : 0, !empty($lines[$i]->date_end) ? $lines[$i]->date_end : 0);
2651 print
'<td class="linecoldescription">';
2652 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
2654 $text =
img_object($langs->trans(
'Service'),
'service');
2656 $text =
img_object($langs->trans(
'Product'),
'product');
2659 if (!empty($lines[$i]->label)) {
2660 $text .=
' <strong>'.$lines[$i]->label.
'</strong>';
2661 print $form->textwithtooltip($text, $lines[$i]->
description, 3, 0,
'', (
string) $i);
2671 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
2672 print
'<td><input name="comment'.$line_id.
'" id="comment'.$line_id.
'" value="'.
dol_escape_htmltag($lines[$i]->comment).
'"></td>';
2674 print
'<td style="white-space: pre-wrap; max-width: 200px;">'.dol_escape_htmltag($lines[$i]->comment).
'</td>';
2679 print
'<td class="center linecolqty">';
2680 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
2681 print $lines[$i]->qty_asked;
2686 if ($origin && $origin_id > 0) {
2687 print
'<td class="center nowrap linecolqtyinotherreceptions">';
2689 $qtyalreadyreceived = 0;
2690 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
2691 foreach ($alreadysent as $key => $val) {
2692 if ($lines[$i]->fk_commandefourndet == $key) {
2694 foreach ($val as $receptionline_id => $receptionline_var) {
2695 if ($receptionline_var[
'reception_id'] == $lines[$i]->fk_reception) {
2701 $htmltooltip .=
'<br>';
2703 $reception_static->fetch($receptionline_var[
'reception_id']);
2704 $htmltooltip .= $reception_static->getNomUrl(1,
'nolink', 0, 0, 1);
2705 $htmltooltip .=
' - '.$receptionline_var[
'qty'];
2707 $htmltext = $langs->trans(
"DateValidation").
' : '.(empty($receptionline_var[
'date_valid']) ? $langs->trans(
"Draft") :
dol_print_date($receptionline_var[
'date_valid'],
'dayhour'));
2708 if (
isModEnabled(
'stock') && $receptionline_var[
'warehouse'] > 0) {
2709 $warehousestatic->fetch($receptionline_var[
'warehouse']);
2710 $htmltext .=
'<br>'.$langs->trans(
"From").
' : '.$warehousestatic->getNomUrl(1,
'', 0, 1);
2712 $htmltooltip .=
' '.$form->textwithpicto(
'', $htmltext, 1);
2714 $qtyalreadyreceived += $receptionline_var[
'qty'];
2717 $htmltooltip = $langs->trans(
"QtyInOtherReceptions").
'...<br><br>'.$htmltooltip.
'<br><input type="submit" name="dummyhiddenbuttontogetfocus" style="display:none" autofocus>';
2722 print $form->textwithpicto((
string) $qtyalreadyreceived, $htmltooltip, 1,
'info',
'', 0, 3,
'tooltip'.$lines[$i]->
id);
2726 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
2728 print
'<td colspan="'.$editColspan.
'" class="center"><table class="nobordernopadding">';
2730 if ($lines[$i]->fk_product > 0) {
2731 print
'<!-- case edit 1 -->';
2734 print
'<td><input name="qtyl'.$line_id.
'" id="qtyl'.$line_id.
'" type="text" size="4" value="'.$lines[$i]->qty.
'"></td>';
2736 print
'<td>'.$formproduct->selectWarehouses($lines[$i]->fk_entrepot,
'entl'.$line_id,
'', 1, 0, $lines[$i]->fk_product,
'', 1).
'</td>';
2738 if (
$conf->productbatch->enabled && !empty($lines[$i]->product->status_batch)) {
2739 print
'<td class="nowraponall left"><input name="batch'.$line_id.
'" id="batch'.$line_id.
'" type="text" value="'.$lines[$i]->batch.
'"><br>';
2741 print $langs->trans(
'SellByDate').
' : ';
2742 print $form->selectDate($lines[$i]->sellby,
'dlc'.$line_id, 0, 0, 1,
"").
'</br>';
2745 print $langs->trans(
'EatByDate').
' : ';
2746 print $form->selectDate($lines[$i]->eatby,
'dluo'.$line_id, 0, 0, 1,
"");
2752 print
'<!-- case edit 2 -->';
2755 print
'<td><input name="qtyl'.$line_id.
'" id="qtyl'.$line_id.
'" type="text" size="4" value="'.$lines[$i]->qty.
'"></td>';
2763 print
'</table></td>';
2765 $parameters = array();
2766 $parameters[
'line'] = $lines[$i];
2767 $reshook = $hookmanager->executeHooks(
'printFieldListValue', $parameters, $object, $action);
2771 print $hookmanager->resPrint;
2775 print
'<td class="center linecolqtytoreceive">'.$lines[$i]->qty.
'</td>';
2779 if ($lines[$i]->fk_entrepot > 0) {
2781 $entrepot->fetch($lines[$i]->fk_entrepot);
2783 print
'<td class="left tdoverflowmax150" title="'.dol_escape_htmltag($entrepot->label).
'">';
2784 print $entrepot->getNomUrl(1);
2793 if (isset($lines[$i]->batch)) {
2794 print
'<!-- Detail of lot -->';
2795 print
'<td class="linecolbatch nowrap">';
2796 $detail = $langs->trans(
"NA");
2797 if ($lines[$i]->product->status_batch > 0 && $lines[$i]->fk_product > 0) {
2798 require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/productlot.class.php';
2800 $reslot = $productlot->fetch(0, $lines[$i]->fk_product, $lines[$i]->batch);
2802 $detail = $productlot->getNomUrl(1);
2805 $batchinfo = $langs->trans(
"Batch").
': '.$lines[$i]->batch;
2807 $batchinfo .=
' - '.$langs->trans(
"SellByDate").
': '.
dol_print_date($lines[$i]->sellby,
"day");
2810 $batchinfo .=
' - '.$langs->trans(
"EatByDate").
': '.
dol_print_date($lines[$i]->eatby,
"day");
2812 $detail = $form->textwithtooltip(
img_picto(
'',
'object_barcode').
' '.$langs->trans(
"DetailBatchNumber"), $batchinfo);
2815 print $detail .
'</td>';
2821 $parameters = array();
2822 $parameters[
'line'] = $lines[$i];
2823 $reshook = $hookmanager->executeHooks(
'printFieldListValue', $parameters, $object, $action);
2827 print $hookmanager->resPrint;
2832 print
'<td class="center linecolweight">';
2834 print $lines[$i]->product->weight * $lines[$i]->qty.
' '.
measuringUnitString(0,
"weight", $lines[$i]->product->weight_units);
2841 print
'<td class="center linecolvolume">';
2843 print $lines[$i]->product->volume * $lines[$i]->qty.
' '.
measuringUnitString(0,
"volume", $lines[$i]->product->volume_units);
2850 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
2851 print
'<td class="center valignmiddle" colspan="2">';
2852 print
'<input type="submit" class="button small button-save" id="savelinebutton marginbottomonly" name="save" value="'.$langs->trans(
"Save").
'"><br>';
2853 print
'<input type="submit" class="button small button-cancel" id="cancellinebutton" name="cancel" value="'.$langs->trans(
"Cancel").
'"><br>';
2855 } elseif (
$object->statut == Reception::STATUS_DRAFT) {
2857 print
'<td class="linecoledit center">';
2858 print
'<a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=editline&token='.
newToken().
'&lineid='.$lines[$i]->id.
'">'.
img_edit().
'</a>';
2860 print
'<td class="linecoldelete" width="10">';
2861 print
'<a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=deleteline&token='.
newToken().
'&lineid='.$lines[$i]->id.
'">'.
img_delete().
'</a>';
2865 if (isset($rowExtrafieldsStart, $rowExtrafieldsView, $rowEnd)) {
2866 print $rowExtrafieldsStart;
2867 print $rowExtrafieldsView;
2873 $arrayofpurchaselinealreadyoutput[$lines[$i]->fk_commandefourndet] = $lines[$i]->fk_commandefourndet;
2875 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
2879 print $hookmanager->resPrint;
2883 $extralabelslines = $extrafields->attributes[$lines[$i]->table_element];
2884 if (!empty($extralabelslines) && is_array($extralabelslines) && count($extralabelslines) > 0) {
2894 $line->id = $lines[$i]->id;
2895 $line->fetch_optionals();
2897 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
2898 print $line->showOptionals($extrafields,
'edit', array(
'colspan' => $colspan),
'');
2900 print $line->showOptionals($extrafields,
'view', array(
'colspan' => $colspan),
'');
2922 if (($user->socid == 0) && ($action !=
'presend')) {
2923 print
'<div class="tabsAction">';
2925 $parameters = array();
2926 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
2927 if (empty($reshook)) {
2928 if (
$object->statut == Reception::STATUS_DRAFT && $num_prod > 0) {
2929 if ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'reception',
'creer'))
2930 || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'reception',
'reception_advance',
'validate'))) {
2931 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=valid&token='.
newToken().
'">'.$langs->trans(
"Validate").
'</a>';
2933 print
'<a class="butActionRefused" href="#" title="'.$langs->trans(
"NotAllowed").
'">'.$langs->trans(
"Validate").
'</a>';
2937 if (
$object->statut == Reception::STATUS_VALIDATED && $user->hasRight(
'reception',
'creer')) {
2938 print
'<div class="inline-block divButAction"><a class="butAction" href="card.php?id='.$object->id.
'&action=modif&token='.
newToken().
'">'.$langs->trans(
'SetToDraft').
'</a></div>';
2943 if (
$object->statut == Reception::STATUS_CLOSED && $user->hasRight(
'reception',
'creer')) {
2944 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"ReOpen").
'</a>';
2948 if (empty($user->socid)) {
2950 if (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
'reception',
'reception_advance',
'send')) {
2951 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=presend&mode=init#formmailbeforetitle">'.$langs->trans(
'SendByMail').
'</a>';
2953 print
'<a class="butActionRefused" href="#">'.$langs->trans(
'SendByMail').
'</a>';
2960 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
'supplier_invoice',
'creer')) {
2962 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>';
2969 if (
$object->statut == Reception::STATUS_VALIDATED) {
2970 if ($user->hasRight(
'reception',
'creer') &&
$object->statut > 0) {
2972 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifybilled&token='.
newToken().
'">'.$langs->trans(
'ClassifyBilled').
'</a>';
2974 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifyclosed&token='.
newToken().
'">'.$langs->trans(
"Close").
'</a>';
2978 if ($user->hasRight(
'reception',
'supprimer')) {
2979 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=delete&token='.
newToken().
'">'.$langs->trans(
"Delete").
'</a>';
2991 if ($action !=
'presend' && $action !=
'editline') {
2992 print
'<div class="fichecenter"><div class="fichehalfleft">';
2995 $filedir =
$conf->reception->dir_output.
"/".$objectref;
2997 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
2999 $genallowed = $user->hasRight(
'reception',
'lire');
3000 $delallowed = $user->hasRight(
'reception',
'creer');
3002 print $formfile->showdocuments(
'reception', $objectref, $filedir, $urlsource, $genallowed, $delallowed,
$object->model_pdf, 1, 0, 0, 28, 0,
'',
'',
'', $soc->default_lang);
3006 $somethingshown = $form->showLinkedObjectBlock($object,
'');
3008 print
'</div><div class="fichehalfright">';
3010 print
'</div></div>';
3014 $modelmail =
'reception_send';
3015 $defaulttopic =
'SendReceptionRef';
3016 $diroutput =
$conf->reception->dir_output;
3017 $trackid =
'rec'.$object->id;
3019 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.
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'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
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.
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
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.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
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.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='', $textonpictotooltip='', $cssfordropdown='info_admin')
Show information in HTML for admin users or standard users.
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...
print $langs trans("Show") . '< td style="' . $timeColor . '" align="center"> s</td > badge status0 badge status4 badge status3 Error badge status8< td align="center">< span class="badge ' . $badge . '"></span ></td >< td align="center">< a href="#" class="button button-small" onclick="openLogModal(this)" data-req="' . dol_escape_htmltag($reqSafe) . '" data-res="' . dol_escape_htmltag($resSafe) . '" data-err="' . dol_escape_htmltag($errSafe) . '">< span class="fa fa-search-plus"></span ></a ></td ></tr >< tr >< td colspan="' . $colspan . '" class="opacitymedium"></td ></tr ></table ></div ></form > logModal none logModal none s a JSON string
buildzip.php
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.