39require
'../main.inc.php';
40require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
41require_once DOL_DOCUMENT_ROOT.
'/reception/class/reception.class.php';
42require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
43require_once DOL_DOCUMENT_ROOT.
'/core/lib/product.lib.php';
44require_once DOL_DOCUMENT_ROOT.
'/core/lib/reception.lib.php';
45require_once DOL_DOCUMENT_ROOT.
'/core/modules/reception/modules_reception.php';
46require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
47require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
48require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
49require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/productlot.class.php';
50if (isModEnabled(
"product") || isModEnabled(
"service")) {
51 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
53if (isModEnabled(
"propal")) {
54 require_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
56require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
57require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.dispatch.class.php';
58if (isModEnabled(
'productbatch')) {
59 require_once DOL_DOCUMENT_ROOT.
'/product/class/productbatch.class.php';
61if (isModEnabled(
'project')) {
62 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
63 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
73$langs->loadLangs(array(
"receptions",
"companies",
"bills",
'deliveries',
'orders',
'stocks',
'other',
'propal',
'sendings'));
75if (isModEnabled(
'incoterm')) {
76 $langs->load(
'incoterm');
78if (isModEnabled(
'productbatch')) {
79 $langs->load(
'productbatch');
82$origin =
GETPOST(
'origin',
'alpha') ?
GETPOST(
'origin',
'alpha') :
'reception';
85if (empty($origin_id)) {
88if (empty($origin_id)) {
91if (empty($origin_id)) {
98$action =
GETPOST(
'action',
'alpha');
103$confirm =
GETPOST(
'confirm',
'alpha');
104$cancel =
GETPOST(
'cancel',
'alpha');
105$backtopage =
GETPOST(
'backtopage',
'alpha');
106$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
118$extrafields->fetch_name_optionals_label(
$object->table_element);
119$extrafields->fetch_name_optionals_label(
$object->table_element_line);
120$extrafields->fetch_name_optionals_label($objectorder->table_element_line);
123include DOL_DOCUMENT_ROOT.
'/core/actions_fetchobject.inc.php';
126$hookmanager->initHooks(array(
'receptioncard',
'globalcard'));
130if ($id > 0 || !empty($ref)) {
143 if (($origin ==
'order_supplier' || $origin ==
'supplier_order') && is_object(
$object->origin_object) && isModEnabled(
"supplier_order")) {
144 $origin_id =
$object->origin_object->id;
145 $objectsrc =
$object->origin_object;
152 $socid = $user->socid;
156if (isModEnabled(
"reception") || $origin ==
'reception' || empty($origin)) {
160 if ($origin ==
'supplierorder' || $origin ==
'order_supplier') {
161 $result =
restrictedArea($user,
'fournisseur', $origin_id,
'commande_fournisseur',
'commande');
162 } elseif (!$user->hasRight($origin,
'lire') && !$user->hasRight($origin,
'read')) {
167if (isModEnabled(
"reception")) {
168 $permissiontoread = $user->hasRight(
'reception',
'lire');
169 $permissiontoadd = $user->hasRight(
'reception',
'creer');
170 $permissiondellink = $user->hasRight(
'reception',
'creer');
171 $permissiontovalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'reception',
'creer')) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'reception',
'reception_advance',
'validate')));
172 $permissiontodelete = $user->hasRight(
'reception',
'supprimer');
174 $permissiontoread = $user->hasRight(
'fournisseur',
'commande',
'receptionner');
175 $permissiontoadd = $user->hasRight(
'fournisseur',
'commande',
'receptionner');
176 $permissiondellink = $user->hasRight(
'fournisseur',
'commande',
'receptionner');
177 $permissiontovalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'fournisseur',
'commande',
'receptionner')) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'fournisseur',
'commande_advance',
'check')));
178 $permissiontodelete = $user->hasRight(
'fournisseur',
'commande',
'receptionner');
188$parameters = array();
189$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
194if (empty($reshook)) {
210 if (!empty($backtopageforcancel)) {
211 header(
"Location: ".$backtopageforcancel);
213 } elseif (!empty($backtopage)) {
214 header(
"Location: ".$backtopage);
221 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
224 if ($action ==
'reopen' && $permissiontoadd) {
229 if ($action ==
'modif' && $permissiontoadd) {
230 $result =
$object->setDraft($user);
234 $outputlangs = $langs;
237 $newlang =
GETPOST(
'lang_id',
'aZ09');
240 $newlang =
$object->thirdparty->default_lang;
242 if (!empty($newlang)) {
244 $outputlangs->setDefaultLang($newlang);
248 $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
256 if ($action ==
'set_incoterms' && isModEnabled(
'incoterm') && $permissiontoadd) {
260 if ($action ==
'setref_supplier' && $permissiontoadd) {
265 $result =
$object->setValueFrom(
'ref_supplier',
GETPOST(
'ref_supplier',
'alpha'),
'',
null,
'text',
'', $user,
'RECEPTION_MODIFY');
268 $action =
'editref_supplier';
270 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
275 if ($action ==
'update_extras' && $permissiontoadd) {
279 $ret = $extrafields->setOptionalsFromPost(
null,
$object,
GETPOST(
'attribute',
'restricthtml'));
286 $result =
$object->insertExtraFields(
'RECEPTION_MODIFY');
294 $action =
'edit_extras';
299 if ($action ==
'add' && $permissiontoadd) {
307 $object->origin_id = $origin_id;
319 if (
$object->origin ==
"supplierorder") {
320 $object->origin =
'order_supplier';
321 $classname =
'CommandeFournisseur';
323 $classname = ucfirst(
$object->origin);
325 $objectsrc =
new $classname($db);
326 $objectsrc->fetch(
$object->origin_id);
328 $object->socid = $objectsrc->socid;
331 $object->date_delivery = $date_delivery;
332 $object->fk_delivery_address = $objectsrc->fk_delivery_address;
338 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
340 $batch_line = array();
341 $stockLine = array();
342 $array_options = array();
347 foreach ($_POST as $key => $value) {
350 if (strpos($key,
'qtyasked') !==
false) {
356 for ($i = 1; $i <= $num; $i++) {
368 if (
GETPOST($qty,
'alpha') > 0) {
373 $array_options[$i] = $extrafields->getOptionalsFromPost(
$object->table_element_line, $i);
378 for ($i = 1; $i <= $num; $i++) {
382 foreach ($objectsrc->lines as $linesrc) {
383 if ($linesrc->id == $lineId) {
384 $lineToTest = $linesrc;
388 if (empty($lineToTest)) {
392 $comment =
"comment".$i;
397 $cost_price =
"cost_price".$i;
416 if ($entrepot_id < 0) {
423 $eatby =
GETPOST($eatby,
'alpha');
424 $sellby =
GETPOST($sellby,
'alpha');
425 $eatbydate = str_replace(
'/',
'-', $eatby);
426 $sellbydate = str_replace(
'/',
'-', $sellby);
429 $ret =
$object->addline($entrepot_id,
GETPOSTINT($idl),
price2num(
GETPOST($qty),
'MS'), $array_options[$i],
GETPOST($comment), strtotime($eatbydate), strtotime($sellbydate),
GETPOST($batch),
GETPOSTFLOAT($cost_price,
'MU'));
441 $ret = $extrafields->setOptionalsFromPost(
null,
$object);
455 $outputlangs = $langs;
458 $newlang =
GETPOST(
'lang_id',
'aZ09');
461 $newlang =
$object->thirdparty->default_lang;
463 if (!empty($newlang)) {
465 $outputlangs->setDefaultLang($newlang);
470 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
478 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"QtyToReceive").
'/'.$langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
484 header(
"Location: card.php?id=".
$object->id);
491 } elseif ($action ==
'confirm_valid' && $confirm ==
'yes' && $permissiontovalidate) {
494 $result =
$object->valid($user);
497 $langs->load(
"errors");
502 $outputlangs = $langs;
505 $newlang =
GETPOST(
'lang_id',
'aZ09');
508 $newlang =
$object->thirdparty->default_lang;
510 if (!empty($newlang)) {
512 $outputlangs->setDefaultLang($newlang);
517 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
523 } elseif ($action ==
'confirm_delete' && $confirm ==
'yes' && $permissiontodelete) {
524 $result =
$object->delete($user);
526 header(
"Location: ".DOL_URL_ROOT.
'/reception/index.php');
538 } elseif ($action ==
'setdate_livraison' && $permissiontoadd) {
542 $result =
$object->setDeliveryDate($user, $datedelivery);
546 } elseif (($action ==
'settracking_number' || $action ==
'settracking_url'
547 || $action ==
'settrueWeight'
548 || $action ==
'settrueWidth'
549 || $action ==
'settrueHeight'
550 || $action ==
'settrueDepth'
551 || $action ==
'setshipping_method_id') && $permissiontoadd) {
555 if ($action ==
'settracking_number') {
556 $object->tracking_number = trim(
GETPOST(
'tracking_number',
'alpha'));
558 if ($action ==
'settracking_url') {
559 $object->tracking_url = trim(
GETPOST(
'tracking_url',
'restricthtml'));
561 if ($action ==
'settrueWeight') {
565 if ($action ==
'settrueWidth') {
568 if ($action ==
'settrueHeight') {
572 if ($action ==
'settrueDepth') {
575 if ($action ==
'setshipping_method_id') {
580 if (
$object->update($user) >= 0) {
581 header(
"Location: card.php?id=".
$object->id);
588 } elseif ($action ==
'builddoc' && $permissiontoread) {
597 $outputlangs = $langs;
600 $newlang =
GETPOST(
'lang_id',
'aZ09');
603 $newlang = $reception->thirdparty->default_lang;
605 if (!empty($newlang)) {
607 $outputlangs->setDefaultLang($newlang);
609 $result =
$object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
614 } elseif ($action ==
'remove_file' && $permissiontoadd) {
616 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
618 $upload_dir =
$conf->reception->dir_output;
619 $file = $upload_dir.
'/'.
GETPOST(
'file');
626 } elseif ($action ==
'classifybilled' && $permissiontoadd) {
627 $result =
$object->setBilled();
629 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
635 } elseif ($action ==
'classifyclosed' && $permissiontoread) {
636 $result =
$object->setClosed();
638 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
644 } elseif ($action ==
'deleteline' && !empty($line_id) && $permissiontoread) {
649 $num_prod = count($lines);
650 for ($i = 0; $i < $num_prod; $i++) {
651 if ($lines[$i]->
id == $line_id) {
653 $line->id = $line_id;
654 if (!$error && $line->delete($user) < 0) {
658 unset($_POST[
"lineid"]);
662 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
667 } elseif ($action ==
'updateline' &&
GETPOST(
'save') && $permissiontoadd) {
675 $num_prod = count($lines);
676 for ($i = 0; $i < $num_prod; $i++) {
677 if ($lines[$i]->
id == $line_id) {
679 $line->fetch($line_id);
681 $extrafields->fetch_name_optionals_label(
$object->table_element_line);
682 $line->array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
685 $line->fk_product = $lines[$i]->fk_product;
688 if ($lines[$i]->fk_product > 0) {
690 $stockLocation =
"entl".$line_id;
691 $qty =
"qtyl".$line_id;
692 $comment =
"comment".$line_id;
695 $line->id = $line_id;
696 $line->fk_entrepot =
GETPOSTINT($stockLocation);
698 $line->comment =
GETPOST($comment,
'alpha');
700 if (isModEnabled(
'productbatch')) {
701 $batch =
"batch".$line_id;
702 $dlc =
"dlc".$line_id;
703 $dluo =
"dluo".$line_id;
705 $eatby =
GETPOST($dluo,
'alpha');
706 $eatbydate = str_replace(
'/',
'-', $eatby);
708 $sellby =
GETPOST($dlc,
'alpha');
709 $sellbydate = str_replace(
'/',
'-', $sellby);
710 $line->batch =
GETPOST($batch,
'alpha');
711 $line->eatby = strtotime($eatbydate);
712 $line->sellby = strtotime($sellbydate);
715 if ($line->update($user) < 0) {
720 $qty =
"qtyl".$line_id;
721 $line->id = $line_id;
723 $line->fk_entrepot = 0;
724 if ($line->update($user) < 0) {
733 unset($_POST[
"lineid"]);
738 $outputlangs = $langs;
741 $newlang =
GETPOST(
'lang_id',
'aZ09');
744 $newlang =
$object->thirdparty->default_lang;
746 if (!empty($newlang)) {
748 $outputlangs->setDefaultLang($newlang);
752 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
755 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
758 } elseif ($action ==
'updateline' && $permissiontoadd &&
GETPOST(
'cancel',
'alpha') == $langs->trans(
"Cancel")) {
759 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
763 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
769 $triggersendname =
'RECEPTION_SENTBYMAIL';
771 $mode =
'emailfromreception';
772 $autocopy =
'MAIN_MAIL_AUTOCOPY_RECEPTION_TO';
773 $trackid =
'rec'.$object->id;
774 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
782$title =
$object->ref.
' - '.$langs->trans(
'Reception');
784llxHeader(
'', $title,
'Reception',
'', 0, 0,
'',
'',
'',
'mod-reception page-card');
786$form =
new Form($db);
789if (isModEnabled(
'project')) {
793$product_static =
new Product($db);
795$warehousestatic =
new Entrepot($db);
797if ($action ==
'create2') {
798 print
load_fiche_titre($langs->trans(
"CreateReception"),
'',
'dollyrevert');
800 print
'<br>'.$langs->trans(
"ReceptionCreationIsDoneFromOrder");
807if ($action ==
'create') {
816 if ($origin ==
'supplierorder') {
817 $classname =
'CommandeFournisseur';
819 $classname = ucfirst($origin);
822 $objectsrc =
new $classname($db);
823 if ($objectsrc->fetch($origin_id)) {
825 $soc->fetch($objectsrc->socid);
827 $author =
new User($db);
828 $author->fetch($objectsrc->user_author_id);
830 if (isModEnabled(
'stock')) {
834 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
835 print
'<input type="hidden" name="token" value="'.newToken().
'">';
836 print
'<input type="hidden" name="action" value="add">';
837 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
838 print
'<input type="hidden" name="origin_id" value="'.$objectsrc->id.
'">';
839 print
'<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.
'">';
840 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
842 print
'<input type="hidden" name="entrepot_id" value="'.GETPOSTINT(
'entrepot_id').
'">';
847 print
'<table class="border centpercent">';
850 print
'<tr><td class="titlefieldcreate fieldrequired">';
851 if ($origin ==
'supplierorder' && isModEnabled(
"supplier_order")) {
852 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;
854 if ($origin ==
'propal' && isModEnabled(
"propal")) {
855 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;
862 if ($origin ==
'supplier_order') {
863 print $langs->trans(
'SupplierOrder');
865 print $langs->trans(
'RefSupplier');
867 print
'</td><td colspan="3">';
868 print
'<input type="text" name="ref_supplier" value="'.$objectsrc->ref_supplier.
'" />';
873 print
'<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans(
'Company').
'</td>';
874 print
'<td colspan="3">'.$soc->getNomUrl(1).
'</td>';
878 if (isModEnabled(
'project')) {
880 if (empty($projectid) && !empty($objectsrc->fk_project)) {
881 $projectid = $objectsrc->fk_project;
883 if ($origin ==
'project') {
884 $projectid = ($originid ? $originid : 0);
887 $langs->load(
"projects");
889 print
'<td>'.$langs->trans(
"Project").
'</td><td colspan="2">';
890 print
img_picto(
'',
'project',
'class="paddingright"');
891 print $formproject->select_projects((!
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS') ? $soc->id : -1), $projectid,
'projectid', 0, 0, 1, 0, 1, 0, 0,
'', 1, 0,
'maxwidth500');
892 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>';
898 print
'<tr><td>'.$langs->trans(
"DateDeliveryPlanned").
'</td>';
899 print
'<td colspan="3">';
900 $date_delivery = ($date_delivery ? $date_delivery : $objectsrc->delivery_date);
901 print $form->selectDate($date_delivery ? $date_delivery : -1,
'date_delivery', 1, 1, 1);
906 print
'<tr><td>'.$langs->trans(
"NotePublic").
'</td>';
907 print
'<td colspan="3">';
908 $doleditor =
new DolEditor(
'note_public', $objectsrc->note_public,
'', 60,
'dolibarr_notes',
'In',
false,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
909 print $doleditor->Create(1);
913 if ($objectsrc->note_private && !$user->socid) {
914 print
'<tr><td>'.$langs->trans(
"NotePrivate").
'</td>';
915 print
'<td colspan="3">';
916 $doleditor =
new DolEditor(
'note_private', $objectsrc->note_private,
'', 60,
'dolibarr_notes',
'In',
false,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
917 print $doleditor->Create(1);
923 print $langs->trans(
"Weight");
924 print
'</td><td colspan="3"><input name="weight" size="4" value="'.GETPOSTINT(
'weight').
'"> ';
925 $text = $formproduct->selectMeasuringUnits(
"weight_units",
"weight",
GETPOSTINT(
'weight_units'), 0, 2);
926 $htmltext = $langs->trans(
"KeepEmptyForAutoCalculation");
927 print $form->textwithpicto($text, $htmltext);
931 print $langs->trans(
"Width").
' x '.$langs->trans(
"Height").
' x '.$langs->trans(
"Depth");
932 print
' </td><td colspan="3"><input name="trueWidth" size="4" value="'.GETPOSTINT(
'trueWidth').
'">';
933 print
' x <input name="trueHeight" size="4" value="'.GETPOSTINT(
'trueHeight').
'">';
934 print
' x <input name="trueDepth" size="4" value="'.GETPOSTINT(
'trueDepth').
'">';
936 $text = $formproduct->selectMeasuringUnits(
"size_units",
"size",
GETPOSTINT(
'size_units'), 0, 2);
937 $htmltext = $langs->trans(
"KeepEmptyForAutoCalculation");
938 print $form->textwithpicto($text, $htmltext);
942 print
"<tr><td>".$langs->trans(
"ReceptionMethod").
"</td>";
943 print
'<td colspan="3">';
944 $recept->fetch_delivery_methods();
945 print $form->selectarray(
"shipping_method_id", $recept->meths,
GETPOSTINT(
'shipping_method_id'), 1, 0, 0,
"", 1);
947 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
949 print
"</td></tr>\n";
952 print
"<tr><td>".$langs->trans(
"TrackingNumber").
"</td>";
953 print
'<td colspan="3">';
954 print
'<input name="tracking_number" size="20" value="'.GETPOST(
'tracking_number',
'alpha').
'">';
955 print
"</td></tr>\n";
958 $parameters = array(
'objectsrc' => $objectsrc,
'colspan' =>
' colspan="3"',
'cols' =>
'3',
'socid' => $socid);
959 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $recept, $action);
960 print $hookmanager->resPrint;
963 $extrafields->fetch_name_optionals_label(
$object->table_element);
964 if (empty($reshook) && !empty($extrafields->attributes[
$object->table_element][
'label'])) {
966 if ($objectsrc->fetch_optionals() > 0) {
967 $recept->array_options = array_merge($recept->array_options, $objectsrc->array_options);
969 print $recept->showOptionals($extrafields,
'create', $parameters);
973 if (isModEnabled(
'incoterm')) {
975 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"), $objectsrc->label_incoterms, 1).
'</label></td>';
976 print
'<td colspan="3" class="maxwidthonsmartphone">';
977 print $form->select_incoterms((!empty($objectsrc->fk_incoterms) ? $objectsrc->fk_incoterms :
''), (!empty($objectsrc->location_incoterms) ? $objectsrc->location_incoterms :
''));
982 include_once DOL_DOCUMENT_ROOT.
'/core/modules/reception/modules_reception.php';
985 if (is_countable($list) && count($list) > 1) {
986 print
"<tr><td>".$langs->trans(
"DefaultModel").
"</td>";
987 print
'<td colspan="3">';
989 print
"</td></tr>\n";
1003 $suffix2numAsked = array();
1004 $dispatchLines = array();
1006 foreach ($_POST as $key => $value) {
1011 if (preg_match(
'/^product_([0-9]+)_([0-9]+)$/i', $key, $reg)) {
1013 $paramSuffix = $reg[1] .
'_' . $reg[2];
1014 $suffix2numAsked[$paramSuffix] = $numAsked;
1017 $numline = $numAsked;
1019 $prod =
"product_" . $paramSuffix;
1020 $qty =
"qty_" . $paramSuffix;
1021 $ent =
"entrepot_" . $paramSuffix;
1022 $pu =
"pu_" . $paramSuffix;
1023 $fk_commandefourndet =
"fk_commandefourndet_" . $paramSuffix;
1028 if (preg_match(
'/^product_batch_([0-9]+)_([0-9]+)$/i', $key, $reg)) {
1030 $paramSuffix = $reg[1] .
'_' . $reg[2];
1031 $suffix2numAsked[$paramSuffix] = $numAsked;
1035 $numline = $numAsked;
1037 $prod =
'product_batch_' . $paramSuffix;
1038 $qty =
'qty_' . $paramSuffix;
1039 $ent =
'entrepot_' . $paramSuffix;
1040 $pu =
'pu_' . $paramSuffix;
1041 $lot =
'lot_number_' . $paramSuffix;
1044 $fk_commandefourndet =
'fk_commandefourndet_'.$paramSuffix;
1045 $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));
1049 if (preg_match(
'/^productl([0-9]+)$/i', $key, $reg)) {
1051 $paramSuffix = $reg[1];
1052 $suffix2numAsked[$paramSuffix] = $numAsked;
1056 $numline = $numAsked;
1058 $prod =
'productid'.$paramSuffix;
1059 $comment =
'comment'.$paramSuffix;
1060 $qty =
'qtyl'.$paramSuffix;
1061 $ent =
'entl'.$paramSuffix;
1062 $pu =
'pul'.$paramSuffix;
1063 $lot =
'batch'.$paramSuffix;
1066 $fk_commandefourndet =
'fk_commandefournisseurdet'.$paramSuffix;
1067 $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));
1074 foreach ($suffix2numAsked as $suffix => $n) {
1075 $dispatchLines[$n][
'array_options'] = $extrafields->getOptionalsFromPost(
'receptiondet_batch',
'_' . $suffix,
'');
1078 print
'<script type="text/javascript">
1079 jQuery(document).ready(function() {
1080 jQuery("#autofill").click(function(event) {
1081 event.preventDefault();';
1083 while ($i <= $numAsked) {
1084 print
'jQuery("#qtyl'.$i.
'").val(jQuery("#qtyasked'.$i.
'").val() - jQuery("#qtydelivered'.$i.
'").val());'.
"\n";
1088 jQuery("#autoreset").click(function(event) {
1089 event.preventDefault();';
1091 while ($i <= $numAsked) {
1092 print
'jQuery("#qtyl'.$i.
'").val(0);'.
"\n";
1101 print
'<table class="noborder centpercent">';
1104 $objectsrc->loadReceptions();
1107 print
'<tr class="liste_titre">';
1108 print
'<td>'.$langs->trans(
"Description").
'</td>';
1109 print
'<td>'.$langs->trans(
"Comment").
'</td>';
1110 print
'<td class="center">'.$langs->trans(
"QtyOrdered").
'</td>';
1111 print
'<td class="center">'.$langs->trans(
"QtyReceived").
'</td>';
1112 print
'<td class="center">'.$langs->trans(
"QtyToReceive");
1114 print
'<td>'.$langs->trans(
"BuyingPrice").
'</td>';
1116 if (!isModEnabled(
'productbatch')) {
1117 print
' <br><center><a href="#" id="autofill"><span class="fas fa-fill pictofixedwidth" style=""></span> '.$langs->trans(
"Fill").
'</a>';
1118 print
' <a href="#" id="autoreset"><span class="fas fa-eraser pictofixedwidth" style=""></span>'.$langs->trans(
"Reset").
'</a></center><br>';
1121 if (isModEnabled(
'stock')) {
1122 print
'<td class="left">'.$langs->trans(
"Warehouse").
' ('.$langs->trans(
"Stock").
')</td>';
1124 if (isModEnabled(
'productbatch')) {
1125 print
'<td class="left">'.$langs->trans(
"batch_number").
'</td>';
1127 print
'<td class="left">'.$langs->trans(
"SellByDate").
'</td>';
1130 print
'<td class="left">'.$langs->trans(
"EatByDate").
'</td>';
1139 $arrayofpurchaselinealreadyoutput = array();
1143 while ($indiceAsked <= $numAsked) {
1147 foreach ($objectsrc->lines as $supplierLine) {
1148 if ($dispatchLines[$indiceAsked][
'fk_commandefourndet'] == $supplierLine->id) {
1149 $line = $supplierLine;
1155 $type = $line->product_type ? $line->product_type : $line->fk_product_type;
1158 if (!empty($line->date_start)) {
1161 if (!empty($line->date_end)) {
1165 print
'<!-- line fk_commandefourndet='.$line->id.
' for product='.$line->fk_product.
' -->'.
"\n";
1166 print
'<tr class="oddeven">'.
"\n";
1169 if ($line->fk_product > 0) {
1170 $product->fetch($line->fk_product);
1171 $product->load_stock(
'warehouseopen');
1176 print
'<a name="'.$line->id.
'"></a>';
1178 print
'<input type="hidden" name="productl'.$indiceAsked.
'" value="'.$line->fk_product.
'">';
1180 if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {
1181 print
'<input type="hidden" name="productid'.$indiceAsked.
'" value="'.$line->fk_product.
'">';
1184 $product_static = $product;
1186 $text = $product_static->getNomUrl(1);
1187 $text .=
' - '.(!empty($line->label) ? $line->label : $line->product_label);
1189 print $form->textwithtooltip($text, $description, 3,
'',
'', $i);
1192 print_date_range($db->jdate($line->date_start), $db->jdate($line->date_end));
1196 print ($line->desc && $line->desc != $line->product_label) ?
'<br>'.dol_htmlentitiesbr($line->desc) :
'';
1202 if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {
1204 $text =
img_object($langs->trans(
'Service'),
'service');
1206 $text =
img_object($langs->trans(
'Product'),
'product');
1209 if (!empty($line->label)) {
1210 $text .=
' <strong>'.$line->label.
'</strong>';
1211 print $form->textwithtooltip($text, $line->desc, 3,
'',
'', $i);
1213 print $text.
' '.nl2br($line->desc);
1217 print_date_range($db->jdate($line->date_start), $db->jdate($line->date_end));
1224 $defaultcomment = $dispatchLines[$indiceAsked][
'comment'];
1226 print
'<input type="text" class="maxwidth100" name="comment'.$indiceAsked.
'" value="'.$defaultcomment.
'">';
1230 print
'<td class="center">';
1231 if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {
1234 print
'<input type="hidden" name="fk_commandefournisseurdet'.$indiceAsked.
'" value="'.$line->id.
'">';
1235 print
'<input type="hidden" name="pul'.$indiceAsked.
'" value="'.$line->pu_ht.
'">';
1236 print
'<input name="qtyasked'.$indiceAsked.
'" id="qtyasked'.$indiceAsked.
'" type="hidden" value="'.$line->qty.
'">';
1238 $qtyProdCom = $line->qty;
1241 print
'<td class="center">';
1242 $quantityDelivered = $objectsrc->receptions[$line->id];
1243 if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {
1244 print $quantityDelivered;
1246 print
'<input name="qtydelivered'.$indiceAsked.
'" id="qtydelivered'.$indiceAsked.
'" type="hidden" value="'.$quantityDelivered.
'">';
1251 $quantityToBeDelivered = 0;
1253 $quantityToBeDelivered = $dispatchLines[$indiceAsked][
'qty'];
1255 $warehouse_id = $dispatchLines[$indiceAsked][
'ent'];
1258 $warehouseObject =
null;
1259 if (isModEnabled(
'stock')) {
1261 print
'<!-- Case warehouse already known or product not a predefined product -->';
1262 if (array_key_exists($dispatchLines[$indiceAsked][
'ent'], $product->stock_warehouse)) {
1263 $stock = +$product->stock_warehouse[$dispatchLines[$indiceAsked][
'ent']]->real;
1265 $deliverableQty = $dispatchLines[$indiceAsked][
'qty'];
1266 $cost_price = $dispatchLines[$indiceAsked][
'pu'];
1269 print
'<td class="center">';
1272 $defaultqty =
GETPOSTINT(
'qtyl'.$indiceAsked);
1274 print
'<input name="idl'.$indiceAsked.
'" type="hidden" value="'.$line->id.
'">';
1275 print
'<input class="right" name="qtyl'.$indiceAsked.
'" id="qtyl'.$indiceAsked.
'" type="text" size="4" value="'.$deliverableQty.
'">';
1277 print $langs->trans(
"NA");
1283 print
'<input class="width75 right" name="cost_price'.$indiceAsked.
'" id="cost_price'.$indiceAsked.
'" value="'.$cost_price.
'">';
1288 if (isModEnabled(
'stock')) {
1289 print
'<td class="left">';
1292 $ent =
"entl".$indiceAsked;
1293 $idl =
"idl".$indiceAsked;
1295 if ($line->fk_product > 0) {
1296 print
'<!-- Show warehouse selection -->';
1297 print $formproduct->selectWarehouses($tmpentrepot_id,
'entl'.$indiceAsked,
'', 0, 0, $line->fk_product,
'', 1);
1300 print $langs->trans(
"Service");
1305 if (isModEnabled(
'productbatch')) {
1306 if (!empty($product->status_batch)) {
1307 print
'<td><input name="batch'.$indiceAsked.
'" value="'.$dispatchLines[$indiceAsked][
'lot'].
'"></td>';
1309 print
'<td class="nowraponall">';
1310 print $form->selectDate($dispatchLines[$indiceAsked][
'DLC'],
'dlc'.$indiceAsked, 0, 0, 1,
"");
1314 print
'<td class="nowraponall">';
1315 print $form->selectDate($dispatchLines[$indiceAsked][
'DLUO'],
'dluo'.$indiceAsked, 0, 0, 1,
"");
1319 print
'<td colspan="3"></td>';
1324 $arrayofpurchaselinealreadyoutput[$line->id] = $line->id;
1330 if (!empty($extrafields)) {
1332 if (isModEnabled(
'productbatch')) {
1344 $srcLine->id = $line->id;
1345 $srcLine->fetch_optionals();
1347 if (empty($recLine->array_options) && !empty($dispatchLines[$indiceAsked][
'array_options'])) {
1348 $recLine->array_options = $dispatchLines[$indiceAsked][
'array_options'];
1350 $recLine->array_options = array_merge($recLine->array_options, $srcLine->array_options);
1352 print $recLine->showOptionals($extrafields,
'edit', array(
'style' =>
'class="oddeven"',
'colspan' => $colspan), $indiceAsked,
'', 1);
1362 print $form->buttonsSaveCancel(
"Create");
1371} elseif ($id || $ref) {
1379 $num_prod = count($lines);
1383 print $langs->trans(
"NoRecordFound");
1389 $object->origin =
'CommandeFournisseur';
1390 $typeobject =
$object->origin;
1392 $origin_id =
$object->origin_id;
1399 $res =
$object->fetch_optionals();
1402 print
dol_get_fiche_head($head,
'reception', $langs->trans(
"Reception"), -1,
'dollyrevert');
1407 if ($action ==
'delete') {
1408 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $langs->trans(
'DeleteReception'), $langs->trans(
"ConfirmDeleteReception",
$object->ref),
'confirm_delete',
'', 0, 1);
1412 if ($action ==
'valid') {
1413 $objectref = substr(
$object->ref, 1, 4);
1414 if ($objectref ==
'PROV') {
1415 $numref =
$object->getNextNumRef($soc);
1420 $text = $langs->trans(
"ConfirmValidateReception", $numref);
1422 $text .=
'<br>'.img_picto(
'',
'movement',
'class="pictofixedwidth"').$langs->trans(
"StockMovementWillBeRecorded").
'.';
1424 $text .=
'<br>'.img_picto(
'',
'movement',
'class="pictofixedwidth"').$langs->trans(
"StockMovementNotYetRecorded").
'.';
1427 if (isModEnabled(
'notification')) {
1428 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1429 $notify =
new Notify($db);
1431 $text .= $notify->confirmMessage(
'RECEPTION_VALIDATE',
$object->socid,
$object);
1434 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $langs->trans(
'ValidateReception'), $text,
'confirm_valid',
'', 0, 1, 250);
1438 if ($action ==
'annuler') {
1439 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $langs->trans(
'CancelReception'), $langs->trans(
"ConfirmCancelReception",
$object->ref),
'confirm_cancel',
'', 0, 1);
1442 if (!$formconfirm) {
1443 $parameters = array(
'formConfirm' => $formconfirm);
1444 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters,
$object, $action);
1445 if (empty($reshook)) {
1446 $formconfirm .= $hookmanager->resPrint;
1447 } elseif ($reshook > 0) {
1448 $formconfirm = $hookmanager->resPrint;
1458 $tmparray =
$object->getTotalWeightVolume();
1459 $totalWeight = $tmparray[
'weight'];
1460 $totalVolume = $tmparray[
'volume'];
1463 if ($typeobject ==
'commande' &&
$object->origin_object->id && isModEnabled(
'order')) {
1465 $objectsrc->fetch(
$object->origin_object->id);
1467 if ($typeobject ==
'propal' &&
$object->origin_object->id && isModEnabled(
"propal")) {
1468 $objectsrc =
new Propal($db);
1469 $objectsrc->fetch(
$object->origin_object->id);
1471 if ($typeobject ==
'CommandeFournisseur' &&
$object->origin_object->id && isModEnabled(
"supplier_order")) {
1473 $objectsrc->fetch(
$object->origin_object->id);
1476 $linkback =
'<a href="'.DOL_URL_ROOT.
'/reception/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
1477 $morehtmlref =
'<div class="refidno">';
1480 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier',
$object->ref_supplier,
$object, $user->hasRight(
'reception',
'creer'),
'string',
'', 0, 1);
1481 $morehtmlref .= $form->editfieldval(
"RefSupplier",
'ref_supplier',
$object->ref_supplier,
$object, $user->hasRight(
'reception',
'creer'),
'string',
'',
null,
null,
'', 1);
1484 $morehtmlref .=
'<br>'.$object->thirdparty->getNomUrl(1);
1486 if (isModEnabled(
'project')) {
1487 $langs->load(
"projects");
1488 $morehtmlref .=
'<br>';
1490 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
1491 if ($action !=
'classify' && $permissiontoadd) {
1492 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
1494 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (!
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS') ?
$object->socid : -1),
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
1496 if (!empty($objectsrc) && !empty($objectsrc->fk_project)) {
1498 $proj->fetch($objectsrc->fk_project);
1499 $morehtmlref .= $proj->getNomUrl(1);
1501 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
1506 $morehtmlref .=
'</div>';
1508 dol_banner_tab(
$object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
1511 print
'<div class="fichecenter">';
1512 print
'<div class="fichehalfleft">';
1513 print
'<div class="underbanner clearboth"></div>';
1515 print
'<table class="border centpercent tableforfield">';
1518 if ($typeobject ==
'commande' &&
$object->origin_object->id && isModEnabled(
'order')) {
1520 print $langs->trans(
"RefOrder").
'</td>';
1521 print
'<td colspan="3">';
1522 print $objectsrc->getNomUrl(1,
'commande');
1526 if ($typeobject ==
'propal' &&
$object->origin_object->id && isModEnabled(
"propal")) {
1528 print $langs->trans(
"RefProposal").
'</td>';
1529 print
'<td colspan="3">';
1530 print $objectsrc->getNomUrl(1,
'reception');
1534 if ($typeobject ==
'CommandeFournisseur' &&
$object->origin_object->id && isModEnabled(
"propal")) {
1536 print $langs->trans(
"SupplierOrder").
'</td>';
1537 print
'<td colspan="3">';
1538 print $objectsrc->getNomUrl(1,
'reception');
1544 print
'<tr><td class="titlefield">'.$langs->trans(
"DateCreation").
'</td>';
1545 print
'<td colspan="3">'.dol_print_date(
$object->date_creation,
"dayhour",
"tzuserrel").
"</td>\n";
1549 print
'<tr><td height="10">';
1550 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1551 print $langs->trans(
'DateDeliveryPlanned');
1554 if ($action !=
'editdate_livraison' && $permissiontoadd) {
1555 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>';
1557 print
'</tr></table>';
1558 print
'</td><td colspan="2">';
1559 if ($action ==
'editdate_livraison') {
1560 print
'<form name="setdate_livraison" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
1561 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1562 print
'<input type="hidden" name="action" value="setdate_livraison">';
1563 print $form->selectDate(
$object->date_delivery ?
$object->date_delivery : -1,
'liv_', 1, 1, 0,
"setdate_livraison", 1, 0);
1564 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
1574 print $form->editfieldkey(
"Weight",
'trueWeight',
$object->trueWeight,
$object, $user->hasRight(
'reception',
'creer'));
1575 print
'</td><td colspan="3">';
1577 if ($action ==
'edittrueWeight') {
1578 print
'<form name="settrueweight" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1579 print
'<input name="action" value="settrueWeight" type="hidden">';
1580 print
'<input name="id" value="'.$object->id.
'" type="hidden">';
1581 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1582 print
'<input id="trueWeight" name="trueWeight" value="'.$object->trueWeight.
'" type="text">';
1583 print $formproduct->selectMeasuringUnits(
"weight_units",
"weight",
$object->weight_units, 0, 2);
1584 print
' <input class="button" name="modify" value="'.$langs->trans(
"Modify").
'" type="submit">';
1585 print
' <input class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'" type="submit">';
1589 print (
$object->trueWeight &&
$object->weight_units !=
'') ?
' '.measuringUnitString(0,
"weight",
$object->weight_units) :
'';
1593 if ($totalWeight > 0) {
1594 if (!empty(
$object->trueWeight)) {
1595 print
' ('.$langs->trans(
"SumOfProductWeights").
': ';
1598 if (!empty(
$object->trueWeight)) {
1605 print
'<tr><td>'.$form->editfieldkey(
"Width",
'trueWidth',
$object->trueWidth,
$object, $user->hasRight(
'reception',
'creer')).
'</td><td colspan="3">';
1606 print $form->editfieldval(
"Width",
'trueWidth',
$object->trueWidth,
$object, $user->hasRight(
'reception',
'creer'));
1607 print (
$object->trueWidth &&
$object->width_units !=
'') ?
' '.measuringUnitString(0,
"size",
$object->width_units) :
'';
1611 print
'<tr><td>'.$form->editfieldkey(
"Height",
'trueHeight',
$object->trueHeight,
$object, $user->hasRight(
'reception',
'creer')).
'</td><td colspan="3">';
1612 if ($action ==
'edittrueHeight') {
1613 print
'<form name="settrueHeight" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1614 print
'<input name="action" value="settrueHeight" type="hidden">';
1615 print
'<input name="id" value="'.$object->id.
'" type="hidden">';
1616 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1617 print
'<input id="trueHeight" name="trueHeight" value="'.$object->trueHeight.
'" type="text">';
1618 print $formproduct->selectMeasuringUnits(
"size_units",
"size",
$object->size_units, 0, 2);
1619 print
' <input class="button" name="modify" value="'.$langs->trans(
"Modify").
'" type="submit">';
1620 print
' <input class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'" type="submit">';
1624 print (
$object->trueHeight &&
$object->height_units !=
'') ?
' '.measuringUnitString(0,
"size",
$object->height_units) :
'';
1630 print
'<tr><td>'.$form->editfieldkey(
"Depth",
'trueDepth',
$object->trueDepth,
$object, $user->hasRight(
'reception',
'creer')).
'</td><td colspan="3">';
1631 print $form->editfieldval(
"Depth",
'trueDepth',
$object->trueDepth,
$object, $user->hasRight(
'reception',
'creer'));
1632 print (
$object->trueDepth &&
$object->depth_units !=
'') ?
' '.measuringUnitString(0,
"size",
$object->depth_units) :
'';
1637 print $langs->trans(
"Volume");
1639 print
'<td colspan="3">';
1640 $calculatedVolume = 0;
1644 $volumeUnit =
$object->size_units * 3;
1647 if ($calculatedVolume > 0) {
1648 if ($volumeUnit < 50) {
1654 if ($totalVolume > 0) {
1655 if ($calculatedVolume) {
1656 print
' ('.$langs->trans(
"SumOfProductVolumes").
': ';
1660 if ($calculatedVolume) {
1670 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1675 print
'<div class="fichehalfright">';
1676 print
'<div class="underbanner clearboth"></div>';
1678 print
'<table class="border centpercent tableforfield">';
1681 print
'<tr><td height="10">';
1682 print
'<table class="nobordernopadding centpercent"><tr><td>';
1683 print $langs->trans(
'ReceptionMethod');
1686 if ($action !=
'editshipping_method_id' && $permissiontoadd) {
1687 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>';
1689 print
'</tr></table>';
1690 print
'</td><td colspan="2">';
1691 if ($action ==
'editshipping_method_id') {
1692 print
'<form name="setshipping_method_id" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
1693 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1694 print
'<input type="hidden" name="action" value="setshipping_method_id">';
1695 $object->fetch_delivery_methods();
1696 print $form->selectarray(
"shipping_method_id",
$object->meths,
$object->shipping_method_id, 1, 0, 0,
"", 1);
1698 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
1700 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
1703 if (
$object->shipping_method_id > 0) {
1705 $code = $langs->getLabelFromKey($db,
$object->shipping_method_id,
'c_shipment_mode',
'rowid',
'code');
1706 print $langs->trans(
"SendingMethod".strtoupper($code));
1713 print
'<tr><td class="titlefield">'.$form->editfieldkey(
"TrackingNumber",
'tracking_number',
$object->tracking_number,
$object, $user->hasRight(
'reception',
'creer')).
'</td><td colspan="3">';
1714 print $form->editfieldval(
"TrackingNumber",
'tracking_number',
$object->tracking_url,
$object, $user->hasRight(
'reception',
'creer'),
'safehtmlstring',
$object->tracking_number);
1718 if (isModEnabled(
'incoterm')) {
1720 print
'<table width="100%" class="nobordernopadding"><tr><td>';
1721 print $langs->trans(
'IncotermLabel');
1722 print
'<td><td class="right">';
1723 if ($user->hasRight(
'reception',
'creer')) {
1724 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/reception/card.php?id='.
$object->id.
'&action=editincoterm&token='.
newToken().
'">'.
img_edit().
'</a>';
1728 print
'</td></tr></table>';
1730 print
'<td colspan="3">';
1731 if ($action !=
'editincoterm') {
1732 print $form->textwithpicto(
$object->display_incoterms(),
$object->label_incoterms, 1);
1734 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
1744 print
'<div class="clearboth"></div>';
1748 if ($action ==
'editline') {
1749 print
'<form name="updateline" id="updateline" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$line_id.
'" method="POST">
1750 <input type="hidden" name="token" value="' .
newToken().
'">
1751 <input type="hidden" name="action" value="updateline">
1752 <input type="hidden" name="mode" value="">
1753 <input type="hidden" name="id" value="' .
$object->id.
'">';
1757 print
'<div class="div-table-responsive-no-min">';
1758 print
'<table id="tablelines" class="noborder centpercent">';
1760 print
'<tr class="liste_titre">';
1763 print
'<td width="5" class="center"> </td>';
1766 print
'<td>'.$langs->trans(
"Products").
'</td>';
1768 print
'<td>'.$langs->trans(
"Comment").
'</td>';
1770 print
'<td class="center">'.$langs->trans(
"QtyOrdered").
'</td>';
1771 if ($origin && $origin_id > 0) {
1772 print
'<td class="center">'.$langs->trans(
"QtyInOtherReceptions").
'</td>';
1774 if ($action ==
'editline') {
1776 if (!isModEnabled(
'stock')) {
1779 if (empty(
$conf->productbatch->enabled)) {
1782 print
'<td class="center" colspan="'.$editColspan.
'">';
1784 print $langs->trans(
"QtyToReceive").
' - ';
1786 print $langs->trans(
"QtyReceived").
' - ';
1788 if (isModEnabled(
'stock')) {
1789 print $langs->trans(
"WarehouseTarget").
' - ';
1791 if (isModEnabled(
'productbatch')) {
1792 print $langs->trans(
"Batch");
1796 $statusreceived = $object::STATUS_CLOSED;
1798 $statusreceived = $object::STATUS_VALIDATED;
1801 $statusreceived = $object::STATUS_CLOSED;
1803 if (
$object->statut < $statusreceived) {
1804 print
'<td class="center">'.$langs->trans(
"QtyToReceive").
'</td>';
1806 print
'<td class="center">'.$langs->trans(
"QtyReceived").
'</td>';
1808 if (isModEnabled(
'stock')) {
1809 print
'<td class="left">'.$langs->trans(
"WarehouseTarget").
'</td>';
1812 if (isModEnabled(
'productbatch')) {
1813 print
'<td class="left">'.$langs->trans(
"Batch").
'</td>';
1816 print
'<td class="center">'.$langs->trans(
"CalculatedWeight").
'</td>';
1817 print
'<td class="center">'.$langs->trans(
"CalculatedVolume").
'</td>';
1820 print
'<td class="linecoledit"></td>';
1821 print
'<td class="linecoldelete" width="10"></td>';
1830 $outputlangs = $langs;
1832 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
1833 $newlang =
GETPOST(
'lang_id',
'aZ09');
1835 if (empty($newlang)) {
1836 $newlang =
$object->thirdparty->default_lang;
1838 if (!empty($newlang)) {
1840 $outputlangs->setDefaultLang($newlang);
1845 $alreadysent = array();
1847 $origin =
'commande_fournisseur';
1849 if ($origin && $origin_id > 0) {
1850 $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";
1851 $sql .=
", ed.rowid as receptionline_id, ed.qty, ed.fk_reception as reception_id, ed.fk_entrepot";
1852 $sql .=
", e.rowid as reception_id, e.ref as reception_ref, e.date_creation, e.date_valid, e.date_delivery, e.date_reception";
1854 $sql .=
', p.label as product_label, p.ref, p.fk_product_type, p.rowid as prodid, p.tobatch as product_tobatch';
1855 $sql .=
', p.description as product_desc';
1856 $sql .=
" FROM ".MAIN_DB_PREFIX.
"receptiondet_batch as ed";
1857 $sql .=
", ".MAIN_DB_PREFIX.
"reception as e";
1858 $sql .=
", ".MAIN_DB_PREFIX.$origin.
"det as obj";
1860 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p ON obj.fk_product = p.rowid";
1861 $sql .=
" WHERE e.entity IN (".getEntity(
'reception').
")";
1862 $sql .=
" AND obj.fk_commande = ".((int) $origin_id);
1863 $sql .=
" AND obj.rowid = ed.fk_elementdet";
1864 $sql .=
" AND ed.fk_reception = e.rowid";
1865 $sql .=
" AND ed.fk_reception !=".((int)
$object->id);
1867 $sql .=
" ORDER BY obj.fk_product";
1869 dol_syslog(
"get list of reception lines", LOG_DEBUG);
1870 $resql = $db->query($sql);
1872 $num = $db->num_rows($resql);
1876 $obj = $db->fetch_object($resql);
1879 $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);
1887 $arrayofpurchaselinealreadyoutput = array();
1891 for ($i = 0; $i < $num_prod; $i++) {
1892 print
'<!-- origin line id = '.(!empty($lines[$i]->origin_line_id) ? $lines[$i]->origin_line_id : 0).
' -->';
1893 print
'<tr class="oddeven" id="row-'.$lines[$i]->id.
'" data-id="'.$lines[$i]->id.
'" data-element="'.$lines[$i]->element.
'">';
1897 print
'<td class="center">'.($i + 1).
'</td>';
1901 if ($lines[$i]->fk_product > 0) {
1905 $prod->fetch($lines[$i]->fk_product);
1906 $label = (!empty($prod->multilangs[$outputlangs->defaultlang][
"label"])) ? $prod->multilangs[$outputlangs->defaultlang][
"label"] : $lines[$i]->product->label;
1908 $label = (!empty($lines[$i]->product->label) ? $lines[$i]->product->label : $lines[$i]->product->product_label);
1911 print
'<td class="linecoldescription">';
1912 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
1913 $text = $lines[$i]->product->getNomUrl(1);
1914 $text .=
' - '.$label;
1916 print $form->textwithtooltip($text, $description, 3,
'',
'', $i);
1917 print_date_range(!empty($lines[$i]->date_start) ? $lines[$i]->date_start : 0, !empty($lines[$i]->date_end) ? $lines[$i]->date_end : 0);
1919 print (!empty($lines[$i]->product->description) && $lines[$i]->description != $lines[$i]->product->description) ?
'<br>'.dol_htmlentitiesbr($lines[$i]->
description) :
'';
1924 print
'<td class="linecoldescription">';
1925 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
1927 $text =
img_object($langs->trans(
'Service'),
'service');
1929 $text =
img_object($langs->trans(
'Product'),
'product');
1932 if (!empty($lines[$i]->label)) {
1933 $text .=
' <strong>'.$lines[$i]->label.
'</strong>';
1934 print $form->textwithtooltip($text, $lines[$i]->
description, 3,
'',
'', $i);
1944 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
1945 print
'<td><input name="comment'.$line_id.
'" id="comment'.$line_id.
'" value="'.
dol_escape_htmltag($lines[$i]->comment).
'"></td>';
1947 print
'<td style="white-space: pre-wrap; max-width: 200px;">'.dol_escape_htmltag($lines[$i]->comment).
'</td>';
1952 print
'<td class="center linecolqty">';
1953 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
1954 print $lines[$i]->qty_asked;
1959 if ($origin && $origin_id > 0) {
1960 print
'<td class="center nowrap linecolqtyinotherreceptions">';
1962 $qtyalreadyreceived = 0;
1963 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
1964 foreach ($alreadysent as $key => $val) {
1965 if ($lines[$i]->fk_commandefourndet == $key) {
1967 foreach ($val as $receptionline_id => $receptionline_var) {
1968 if ($receptionline_var[
'reception_id'] == $lines[$i]->fk_reception) {
1974 $htmltooltip .=
'<br>';
1976 $reception_static->fetch($receptionline_var[
'reception_id']);
1977 $htmltooltip .= $reception_static->getNomUrl(1, 0, 0, 0, 1);
1978 $htmltooltip .=
' - '.$receptionline_var[
'qty'];
1980 $htmltext = $langs->trans(
"DateValidation").
' : '.(empty($receptionline_var[
'date_valid']) ? $langs->trans(
"Draft") :
dol_print_date($receptionline_var[
'date_valid'],
'dayhour'));
1981 if (isModEnabled(
'stock') && $receptionline_var[
'warehouse'] > 0) {
1982 $warehousestatic->fetch($receptionline_var[
'warehouse']);
1983 $htmltext .=
'<br>'.$langs->trans(
"From").
' : '.$warehousestatic->getNomUrl(1,
'', 0, 1);
1985 $htmltooltip .=
' '.$form->textwithpicto(
'', $htmltext, 1);
1987 $qtyalreadyreceived += $receptionline_var[
'qty'];
1990 $htmltooltip = $langs->trans(
"QtyInOtherReceptions").
'...<br><br>'.$htmltooltip.
'<br><input type="submit" name="dummyhiddenbuttontogetfocus" style="display:none" autofocus>';
1995 print $form->textwithpicto($qtyalreadyreceived, $htmltooltip, 1,
'info',
'', 0, 3,
'tooltip'.$lines[$i]->
id);
1999 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
2001 print
'<td colspan="'.$editColspan.
'" class="center"><table class="nobordernopadding">';
2002 if (isModEnabled(
'stock')) {
2003 if ($lines[$i]->fk_product > 0) {
2004 print
'<!-- case edit 1 -->';
2007 print
'<td><input name="qtyl'.$line_id.
'" id="qtyl'.$line_id.
'" type="text" size="4" value="'.$lines[$i]->qty.
'"></td>';
2009 print
'<td>'.$formproduct->selectWarehouses($lines[$i]->fk_entrepot,
'entl'.$line_id,
'', 1, 0, $lines[$i]->fk_product,
'', 1).
'</td>';
2011 if (
$conf->productbatch->enabled && !empty($lines[$i]->product->status_batch)) {
2012 print
'<td class="nowraponall left"><input name="batch'.$line_id.
'" id="batch'.$line_id.
'" type="text" value="'.$lines[$i]->batch.
'"><br>';
2014 print $langs->trans(
'SellByDate').
' : ';
2015 print $form->selectDate($lines[$i]->sellby,
'dlc'.$line_id, 0, 0, 1,
"").
'</br>';
2018 print $langs->trans(
'EatByDate').
' : ';
2019 print $form->selectDate($lines[$i]->eatby,
'dluo'.$line_id, 0, 0, 1,
"");
2025 print
'<!-- case edit 2 -->';
2028 print
'<td><input name="qtyl'.$line_id.
'" id="qtyl'.$line_id.
'" type="text" size="4" value="'.$lines[$i]->qty.
'"></td>';
2036 print
'</table></td>';
2039 print
'<td class="center linecolqtytoreceive">'.$lines[$i]->qty.
'</td>';
2042 if (isModEnabled(
'stock')) {
2043 if ($lines[$i]->fk_entrepot > 0) {
2045 $entrepot->fetch($lines[$i]->fk_entrepot);
2047 print
'<td class="left tdoverflowmax150" title="'.dol_escape_htmltag($entrepot->label).
'">';
2048 print $entrepot->getNomUrl(1);
2056 if (isModEnabled(
'productbatch')) {
2057 if (isset($lines[$i]->batch)) {
2058 print
'<!-- Detail of lot -->';
2059 print
'<td class="linecolbatch nowrap">';
2060 $detail = $langs->trans(
"NA");
2061 if ($lines[$i]->product->status_batch > 0 && $lines[$i]->fk_product > 0) {
2062 require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/productlot.class.php';
2064 $reslot = $productlot->fetch(0, $lines[$i]->fk_product, $lines[$i]->batch);
2066 $detail = $productlot->getNomUrl(1);
2069 $batchinfo = $langs->trans(
"Batch").
': '.$lines[$i]->batch;
2071 $batchinfo .=
' - '.$langs->trans(
"SellByDate").
': '.
dol_print_date($lines[$i]->sellby,
"day");
2074 $batchinfo .=
' - '.$langs->trans(
"EatByDate").
': '.
dol_print_date($lines[$i]->eatby,
"day");
2076 $detail = $form->textwithtooltip(
img_picto(
'',
'object_barcode').
' '.$langs->trans(
"DetailBatchNumber"), $batchinfo);
2079 print $detail .
'</td>';
2087 print
'<td class="center linecolweight">';
2089 print $lines[$i]->product->weight * $lines[$i]->qty.
' '.
measuringUnitString(0,
"weight", $lines[$i]->product->weight_units);
2096 print
'<td class="center linecolvolume">';
2098 print $lines[$i]->product->volume * $lines[$i]->qty.
' '.
measuringUnitString(0,
"volume", $lines[$i]->product->volume_units);
2105 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
2106 print
'<td class="center valignmiddle" colspan="2">';
2107 print
'<input type="submit" class="button small button-save" id="savelinebutton marginbottomonly" name="save" value="'.$langs->trans(
"Save").
'"><br>';
2108 print
'<input type="submit" class="button small button-cancel" id="cancellinebutton" name="cancel" value="'.$langs->trans(
"Cancel").
'"><br>';
2110 } elseif (
$object->statut == Reception::STATUS_DRAFT) {
2112 print
'<td class="linecoledit center">';
2113 print
'<a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=editline&token='.
newToken().
'&lineid='.$lines[$i]->id.
'">'.
img_edit().
'</a>';
2115 print
'<td class="linecoldelete" width="10">';
2116 print
'<a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=deleteline&token='.
newToken().
'&lineid='.$lines[$i]->id.
'">'.
img_delete().
'</a>';
2120 if (!empty($rowExtrafieldsStart)) {
2121 print $rowExtrafieldsStart;
2122 print $rowExtrafieldsView;
2128 $arrayofpurchaselinealreadyoutput[$lines[$i]->fk_commandefourndet] = $lines[$i]->fk_commandefourndet;
2131 $extralabelslines = $extrafields->attributes[$lines[$i]->table_element];
2132 if (!empty($extralabelslines) && is_array($extralabelslines) && count($extralabelslines) > 0) {
2134 if (isModEnabled(
'stock')) {
2137 if (isModEnabled(
'productbatch')) {
2142 $line->id = $lines[$i]->id;
2143 $line->fetch_optionals();
2145 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
2146 print $line->showOptionals($extrafields,
'edit', array(
'colspan' => $colspan),
'');
2148 print $line->showOptionals($extrafields,
'view', array(
'colspan' => $colspan),
'');
2170 if (($user->socid == 0) && ($action !=
'presend')) {
2171 print
'<div class="tabsAction">';
2173 $parameters = array();
2174 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
2175 if (empty($reshook)) {
2176 if (
$object->statut == Reception::STATUS_DRAFT && $num_prod > 0) {
2177 if ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'reception',
'creer'))
2178 || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'reception',
'reception_advance',
'validate'))) {
2179 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=valid&token='.
newToken().
'">'.$langs->trans(
"Validate").
'</a>';
2181 print
'<a class="butActionRefused" href="#" title="'.$langs->trans(
"NotAllowed").
'">'.$langs->trans(
"Validate").
'</a>';
2185 if (
$object->statut == Reception::STATUS_VALIDATED && $user->hasRight(
'reception',
'creer')) {
2186 print
'<div class="inline-block divButAction"><a class="butAction" href="card.php?id='.$object->id.
'&action=modif&token='.
newToken().
'">'.$langs->trans(
'SetToDraft').
'</a></div>';
2191 if (
$object->statut == Reception::STATUS_CLOSED && $user->hasRight(
'reception',
'creer')) {
2192 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"ReOpen").
'</a>';
2196 if (empty($user->socid)) {
2198 if (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
'reception',
'reception_advance',
'send')) {
2199 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=presend&mode=init#formmailbeforetitle">'.$langs->trans(
'SendByMail').
'</a>';
2201 print
'<a class="butActionRefused" href="#">'.$langs->trans(
'SendByMail').
'</a>';
2207 if (isModEnabled(
"supplier_invoice") && (
$object->statut == Reception::STATUS_VALIDATED ||
$object->statut == Reception::STATUS_CLOSED)) {
2208 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
'supplier_invoice',
'creer')) {
2210 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>';
2217 if (
$object->statut == Reception::STATUS_VALIDATED) {
2218 if ($user->hasRight(
'reception',
'creer') &&
$object->statut > 0) {
2220 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifybilled&token='.
newToken().
'">'.$langs->trans(
'ClassifyBilled').
'</a>';
2222 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifyclosed&token='.
newToken().
'">'.$langs->trans(
"Close").
'</a>';
2226 if ($user->hasRight(
'reception',
'supprimer')) {
2227 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=delete&token='.
newToken().
'">'.$langs->trans(
"Delete").
'</a>';
2239 if ($action !=
'presend' && $action !=
'editline') {
2240 print
'<div class="fichecenter"><div class="fichehalfleft">';
2243 $filedir =
$conf->reception->dir_output.
"/".$objectref;
2245 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
2247 $genallowed = $user->hasRight(
'reception',
'lire');
2248 $delallowed = $user->hasRight(
'reception',
'creer');
2250 print $formfile->showdocuments(
'reception', $objectref, $filedir, $urlsource, $genallowed, $delallowed,
$object->model_pdf, 1, 0, 0, 28, 0,
'',
'',
'', $soc->default_lang);
2254 $somethingshown = $form->showLinkedObjectBlock(
$object,
'');
2256 print
'</div><div class="fichehalfright">';
2258 print
'</div></div>';
2262 $modelmail =
'shipping_send';
2263 $defaulttopic =
'SendReceptionRef';
2264 $diroutput =
$conf->reception->dir_output;
2265 $trackid =
'rec'.$object->id;
2267 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($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 to manage products or services.
const TYPE_PRODUCT
Regular product.
const TYPE_SERVICE
Service.
Class with list of lots and properties.
Class to manage projects.
Class to manage proposals.
Class to manage receptions.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
Class to manage Dolibarr users.
print $script_file $mode $langs defaultlang(is_numeric($duration_value) ? " delay=". $duration_value :"").(is_numeric($duration_value2) ? " after cd cd cd description as description
Only used if Module[ID]Desc translation string is not found.
dol_delete_file($file, $disableglob=0, $nophperrors=0, $nohook=0, $object=null, $allowdotdot=false, $indexdatabase=1, $nolog=0)
Remove a file or several files with a mask.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
showDimensionInBestUnit($dimension, $unit, $type, $outputlangs, $round=-1, $forceunitoutput='no', $use_short_label=0)
Output a dimension with best unit.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
print_date_range($date_start, $date_end, $format='', $outputlangs=null)
Format output for start and end date.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
GETPOSTFLOAT($paramname, $rounding='')
Return the value of a $_GET or $_POST supervariable, converted into float.
dol_clone($object, $native=2)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_htmlentitiesbr($stringtoencode, $nl2brmode=0, $pagecodefrom='UTF-8', $removelasteolbr=1)
This function is called to encode a string into a HTML string but differs from htmlentities because a...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
measuringUnitString($unitid, $measuring_style='', $unitscale='', $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.