36 require
'../main.inc.php';
37 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
38 require_once DOL_DOCUMENT_ROOT.
'/reception/class/reception.class.php';
39 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
40 require_once DOL_DOCUMENT_ROOT.
'/core/lib/product.lib.php';
41 require_once DOL_DOCUMENT_ROOT.
'/core/lib/reception.lib.php';
42 require_once DOL_DOCUMENT_ROOT.
'/core/modules/reception/modules_reception.php';
43 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
44 require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
45 require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
46 require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/productlot.class.php';
47 if (!empty($conf->product->enabled) || !empty($conf->service->enabled)) {
48 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
50 if (!empty($conf->propal->enabled)) {
51 require_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
53 if ((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || !empty($conf->supplier_order->enabled)) {
54 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
55 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.dispatch.class.php';
57 if (!empty($conf->productbatch->enabled)) {
58 require_once DOL_DOCUMENT_ROOT.
'/product/class/productbatch.class.php';
60 if (!empty($conf->project->enabled)) {
61 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
62 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
65 $langs->loadLangs(array(
"receptions",
"companies",
"bills",
'deliveries',
'orders',
'stocks',
'other',
'propal',
'sendings'));
67 if (!empty($conf->incoterm->enabled)) {
68 $langs->load(
'incoterm');
70 if (!empty($conf->productbatch->enabled)) {
71 $langs->load(
'productbatch');
74 $origin =
GETPOST(
'origin',
'alpha') ?
GETPOST(
'origin',
'alpha') :
'reception';
77 if (empty($origin_id)) {
78 $origin_id =
GETPOST(
'origin_id',
'int');
80 if (empty($origin_id)) {
81 $origin_id =
GETPOST(
'object_id',
'int');
83 if (empty($origin_id)) {
84 $origin_id =
GETPOST(
'originid',
'int');
87 $line_id =
GETPOST(
'lineid',
'int') ?
GETPOST(
'lineid',
'int') :
'';
88 $facid =
GETPOST(
'facid',
'int');
90 $action =
GETPOST(
'action',
'alpha');
95 $confirm =
GETPOST(
'confirm',
'alpha');
96 $cancel =
GETPOST(
'cancel',
'alpha');
99 $hidedetails = (
GETPOST(
'hidedetails',
'int') ?
GETPOST(
'hidedetails',
'int') : (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS) ? 1 : 0));
100 $hidedesc = (
GETPOST(
'hidedesc',
'int') ?
GETPOST(
'hidedesc',
'int') : (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC) ? 1 : 0));
101 $hideref = (
GETPOST(
'hideref',
'int') ?
GETPOST(
'hideref',
'int') : (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF) ? 1 : 0));
108 $extrafields->fetch_name_optionals_label($object->table_element);
109 $extrafields->fetch_name_optionals_label($object->table_element_line);
110 $extrafields->fetch_name_optionals_label($objectorder->table_element_line);
113 include DOL_DOCUMENT_ROOT.
'/core/actions_fetchobject.inc.php';
116 $hookmanager->initHooks(array(
'receptioncard',
'globalcard'));
118 $date_delivery =
dol_mktime(
GETPOST(
'date_deliveryhour',
'int'),
GETPOST(
'date_deliverymin',
'int'), 0,
GETPOST(
'date_deliverymonth',
'int'),
GETPOST(
'date_deliveryday',
'int'),
GETPOST(
'date_deliveryyear',
'int'));
120 if ($id > 0 || !empty($ref)) {
121 $object->fetch($id, $ref);
122 $object->fetch_thirdparty();
124 if (!empty($object->origin)) {
125 $origin = $object->origin;
127 $object->fetch_origin();
128 $typeobject = $object->origin;
132 if ($origin ==
'order_supplier' && $object->$typeobject->id && (!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) || !empty($conf->supplier_order->enabled))) {
133 $origin_id = $object->$typeobject->id;
135 $objectsrc->fetch($object->$typeobject->id);
142 $socid = $user->socid;
145 if (!empty($conf->reception->enabled) || $origin ==
'reception' || empty($origin)) {
149 if ($origin ==
'supplierorder' || $origin ==
'order_supplier') {
150 $result =
restrictedArea($user,
'fournisseur', $origin_id,
'commande_fournisseur',
'commande');
151 } elseif (empty($user->rights->{$origin}->lire) && empty($user->rights->{$origin}->read)) {
156 if (!empty($conf->reception->enabled)) {
157 $permissiontoread = $user->rights->reception->lire;
158 $permissiontoadd = $user->rights->reception->creer;
159 $permissiondellink = $user->rights->reception->creer;
160 $permissiontovalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->reception->creer)) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->reception->reception_advance->validate)));
161 $permissiontodelete = $user->rights->reception->supprimer;
163 $permissiontoread = $user->rights->fournisseur->commande->receptionner;
164 $permissiontoadd = $user->rights->fournisseur->commande->receptionner;
165 $permissiondellink = $user->rights->fournisseur->commande->receptionner;
166 $permissiontovalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->fournisseur->commande->receptionner)) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->fournisseur->commande_advance->check)));
167 $permissiontodelete = $user->rights->fournisseur->commande->receptionner;
176 $reshook = $hookmanager->executeHooks(
'doActions',
$parameters, $object, $action);
181 if (empty($reshook)) {
186 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
189 if ($action ==
'reopen' && $permissiontoadd) {
190 $result = $object->reOpen();
194 if ($action ==
'modif' && $permissiontoadd) {
195 $result = $object->setDraft($user);
198 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
199 $outputlangs = $langs;
201 if ($conf->global->MAIN_MULTILANGS && empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
202 $newlang =
GETPOST(
'lang_id',
'aZ09');
204 if ($conf->global->MAIN_MULTILANGS && empty($newlang)) {
205 $newlang = $object->thirdparty->default_lang;
207 if (!empty($newlang)) {
209 $outputlangs->setDefaultLang($newlang);
211 $model = $object->model_pdf;
212 $ret = $object->fetch($id);
213 $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
221 if ($action ==
'set_incoterms' && !empty($conf->incoterm->enabled) && $permissiontoadd) {
222 $result = $object->setIncoterms(
GETPOST(
'incoterm_id',
'int'),
GETPOST(
'location_incoterms',
'alpha'));
225 if ($action ==
'setref_supplier' && $permissiontoadd) {
230 $result = $object->setValueFrom(
'ref_supplier',
GETPOST(
'ref_supplier',
'alpha'),
'',
null,
'text',
'', $user,
'RECEPTION_MODIFY');
233 $action =
'editref_supplier';
235 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$object->id);
240 if ($action ==
'update_extras' && $permissiontoadd) {
244 $ret = $extrafields->setOptionalsFromPost(
null, $object,
GETPOST(
'attribute',
'restricthtml'));
251 $result = $object->insertExtraFields(
'RECEPTION_MODIFY');
259 $action =
'edit_extras';
264 if ($action ==
'add' && $permissiontoadd) {
270 $object->note =
GETPOST(
'note',
'alpha');
271 $object->origin = $origin;
272 $object->origin_id = $origin_id;
273 $object->fk_project =
GETPOST(
'projectid',
'int');
274 $object->weight =
GETPOST(
'weight',
'int') ==
'' ? null :
GETPOST(
'weight',
'int');
275 $object->trueHeight =
GETPOST(
'trueHeight',
'int') ==
'' ? null :
GETPOST(
'trueHeight',
'int');
276 $object->trueWidth =
GETPOST(
'trueWidth',
'int') ==
'' ? null :
GETPOST(
'trueWidth',
'int');
277 $object->trueDepth =
GETPOST(
'trueDepth',
'int') ==
'' ? null :
GETPOST(
'trueDepth',
'int');
278 $object->size_units =
GETPOST(
'size_units',
'int');
279 $object->weight_units =
GETPOST(
'weight_units',
'int');
284 if ($object->origin ==
"supplierorder") {
285 $classname =
'CommandeFournisseur';
287 $classname = ucfirst($object->origin);
289 $objectsrc =
new $classname($db);
290 $objectsrc->fetch($object->origin_id);
292 $object->socid = $objectsrc->socid;
293 $object->ref_supplier =
GETPOST(
'ref_supplier',
'alpha');
294 $object->model_pdf =
GETPOST(
'model');
295 $object->date_delivery = $date_delivery;
296 $object->fk_delivery_address = $objectsrc->fk_delivery_address;
297 $object->shipping_method_id =
GETPOST(
'shipping_method_id',
'int');
298 $object->tracking_number =
GETPOST(
'tracking_number',
'alpha');
299 $object->note_private =
GETPOST(
'note_private',
'restricthtml');
300 $object->note_public =
GETPOST(
'note_public',
'restricthtml');
301 $object->fk_incoterms =
GETPOST(
'incoterm_id',
'int');
302 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
304 $batch_line = array();
305 $stockLine = array();
306 $array_options = array();
311 foreach ($_POST as $key => $value) {
314 if (strpos($key,
'qtyasked') !==
false) {
319 for ($i = 1; $i <= $num; $i++) {
326 $batch =
"batchl".$i.
"_0";
327 $stockLocation =
"ent1".$i.
"_0";
331 if (
GETPOST($qty,
'alpha') > 0) {
336 $array_options[$i] = $extrafields->getOptionalsFromPost($object->table_element_line, $i);
341 for ($i = 1; $i <= $num; $i++) {
343 $lineId =
GETPOST($idl,
'int');
344 foreach ($objectsrc->lines as $linesrc) {
345 if ($linesrc->id == $lineId) {
346 $lineToTest = $linesrc;
350 if (empty($lineToTest)) {
354 $comment =
"comment".$i;
360 $cost_price =
"cost_price".$i;
363 if (
GETPOST($qty,
'int') > 0 || (
GETPOST($qty,
'int') == 0 && $conf->global->RECEPTION_GETS_ALL_ORDER_PRODUCTS)) {
368 $entrepot_id = is_numeric(
GETPOST($ent,
'int')) ?
GETPOST($ent,
'int') :
GETPOST(
'entrepot_id',
'int');
370 if (!empty($lineToTest)) {
371 $fk_product = $lineToTest->fk_product;
373 $fk_product = $linesrc->fk_product;
376 if ($entrepot_id < 0) {
379 if (!($fk_product > 0) && empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
382 $eatby =
GETPOST($eatby,
'alpha');
383 $sellby =
GETPOST($sellby,
'alpha');
384 $eatbydate = str_replace(
'/',
'-', $eatby);
385 $sellbydate = str_replace(
'/',
'-', $sellby);
387 if (!empty($conf->global->STOCK_CALCULATE_ON_RECEPTION) || !empty($conf->global->STOCK_CALCULATE_ON_RECEPTION_CLOSE)) {
388 $ret = $object->addline($entrepot_id,
GETPOST($idl,
'int'),
GETPOST($qty,
'int'), $array_options[$i],
GETPOST($comment,
'alpha'), strtotime($eatbydate), strtotime($sellbydate),
GETPOST($batch,
'alpha'),
price2num(
GETPOST($cost_price,
'double'),
'MU'));
390 $ret = $object->addline($entrepot_id,
GETPOST($idl,
'int'),
GETPOST($qty,
'int'), $array_options[$i],
GETPOST($comment,
'alpha'), strtotime($eatbydate), strtotime($sellbydate),
GETPOST($batch,
'alpha'));
401 $ret = $extrafields->setOptionalsFromPost(
null, $object);
406 $ret = $object->create($user);
414 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"QtyToReceive").
'/'.$langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
420 header(
"Location: card.php?id=".$object->id);
424 $_GET[
"commande_id"] =
GETPOST(
'commande_id',
'int');
427 } elseif ($action ==
'confirm_valid' && $confirm ==
'yes' && $permissiontovalidate) {
428 $object->fetch_thirdparty();
430 $result = $object->valid($user);
433 $langs->load(
"errors");
437 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
438 $outputlangs = $langs;
440 if ($conf->global->MAIN_MULTILANGS && empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
441 $newlang =
GETPOST(
'lang_id',
'aZ09');
443 if ($conf->global->MAIN_MULTILANGS && empty($newlang)) {
444 $newlang = $object->thirdparty->default_lang;
446 if (!empty($newlang)) {
448 $outputlangs->setDefaultLang($newlang);
450 $model = $object->model_pdf;
451 $ret = $object->fetch($id);
453 $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
459 } elseif ($action ==
'confirm_delete' && $confirm ==
'yes' && $permissiontodelete) {
460 $result = $object->delete($user);
462 header(
"Location: ".DOL_URL_ROOT.
'/reception/index.php');
474 } elseif ($action ==
'setdate_livraison' && $permissiontoadd) {
475 $datedelivery =
dol_mktime(
GETPOST(
'liv_hour',
'int'),
GETPOST(
'liv_min',
'int'), 0,
GETPOST(
'liv_month',
'int'),
GETPOST(
'liv_day',
'int'),
GETPOST(
'liv_year',
'int'));
478 $result = $object->setDeliveryDate($user, $datedelivery);
482 } elseif ($action ==
'settracking_number' || $action ==
'settracking_url'
483 || $action ==
'settrueWeight'
484 || $action ==
'settrueWidth'
485 || $action ==
'settrueHeight'
486 || $action ==
'settrueDepth'
487 || $action ==
'setshipping_method_id') {
491 if ($action ==
'settracking_number') {
492 $object->tracking_number = trim(
GETPOST(
'tracking_number',
'alpha'));
494 if ($action ==
'settracking_url') {
495 $object->tracking_url = trim(
GETPOST(
'tracking_url',
'int'));
497 if ($action ==
'settrueWeight') {
498 $object->trueWeight = trim(
GETPOST(
'trueWeight',
'int'));
499 $object->weight_units =
GETPOST(
'weight_units',
'int');
501 if ($action ==
'settrueWidth') {
502 $object->trueWidth = trim(
GETPOST(
'trueWidth',
'int'));
504 if ($action ==
'settrueHeight') {
505 $object->trueHeight = trim(
GETPOST(
'trueHeight',
'int'));
506 $object->size_units =
GETPOST(
'size_units',
'int');
508 if ($action ==
'settrueDepth') {
509 $object->trueDepth = trim(
GETPOST(
'trueDepth',
'int'));
511 if ($action ==
'setshipping_method_id') {
512 $object->shipping_method_id = trim(
GETPOST(
'shipping_method_id',
'int'));
516 if ($object->update($user) >= 0) {
517 header(
"Location: card.php?id=".$object->id);
524 } elseif ($action ==
'builddoc' && $permissiontoread) {
529 $object->setDocModel($user,
GETPOST(
'model',
'alpha'));
533 $outputlangs = $langs;
535 if ($conf->global->MAIN_MULTILANGS && empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
536 $newlang =
GETPOST(
'lang_id',
'aZ09');
538 if ($conf->global->MAIN_MULTILANGS && empty($newlang)) {
539 $newlang = $reception->thirdparty->default_lang;
541 if (!empty($newlang)) {
543 $outputlangs->setDefaultLang($newlang);
545 $result = $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
550 } elseif ($action ==
'remove_file' && $permissiontoadd) {
552 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
554 $upload_dir = $conf->reception->dir_output;
555 $file = $upload_dir.
'/'.
GETPOST(
'file');
562 } elseif ($action ==
'classifybilled') {
563 $result = $object->setBilled();
565 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$object->id);
568 } elseif ($action ==
'classifyclosed' && $permissiontoread) {
569 $result = $object->setClosed();
571 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$object->id);
574 } elseif ($action ==
'deleteline' && !empty($line_id) && $permissiontoread) {
576 $lines = $object->lines;
579 $num_prod = count($lines);
580 for ($i = 0; $i < $num_prod; $i++) {
581 if ($lines[$i]->
id == $line_id) {
583 $line->id = $line_id;
584 if (!$error && $line->delete($user) < 0) {
588 unset($_POST[
"lineid"]);
592 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$object->id);
597 } elseif ($action ==
'updateline' &&
GETPOST(
'save') && $permissiontoadd) {
604 $lines = $object->lines;
605 $num_prod = count($lines);
606 for ($i = 0; $i < $num_prod; $i++) {
607 if ($lines[$i]->
id == $line_id) {
609 $line->fetch($line_id);
611 $extrafields->fetch_name_optionals_label($object->table_element_line);
612 $line->array_options = $extrafields->getOptionalsFromPost($object->table_element_line);
615 $line->fk_product = $lines[$i]->fk_product;
618 if ($lines[$i]->fk_product > 0) {
620 $stockLocation =
"entl".$line_id;
621 $qty =
"qtyl".$line_id;
622 $comment =
"comment".$line_id;
625 $line->id = $line_id;
626 $line->fk_entrepot =
GETPOST($stockLocation,
'int');
627 $line->qty =
GETPOST($qty,
'int');
628 $line->comment =
GETPOST($comment,
'alpha');
630 if (!empty($conf->productbatch->enabled)) {
631 $batch =
"batch".$line_id;
632 $dlc =
"dlc".$line_id;
633 $dluo =
"dluo".$line_id;
635 $eatby =
GETPOST($dluo,
'alpha');
636 $eatbydate = str_replace(
'/',
'-', $eatby);
638 $sellby =
GETPOST($dlc,
'alpha');
639 $sellbydate = str_replace(
'/',
'-', $sellby);
640 $line->batch =
GETPOST($batch,
'alpha');
641 $line->eatby = strtotime($eatbydate);
642 $line->sellby = strtotime($sellbydate);
645 if ($line->update($user) < 0) {
650 $qty =
"qtyl".$line_id;
651 $line->id = $line_id;
652 $line->qty =
GETPOST($qty,
'int');
653 $line->fk_entrepot = 0;
654 if ($line->update($user) < 0) {
663 unset($_POST[
"lineid"]);
666 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
668 $outputlangs = $langs;
670 if ($conf->global->MAIN_MULTILANGS && empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
671 $newlang =
GETPOST(
'lang_id',
'aZ09');
673 if ($conf->global->MAIN_MULTILANGS && empty($newlang)) {
674 $newlang = $object->thirdparty->default_lang;
676 if (!empty($newlang)) {
678 $outputlangs->setDefaultLang($newlang);
681 $ret = $object->fetch($object->id);
682 $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
685 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.$object->id);
688 } elseif ($action ==
'updateline' && $permissiontoadd &&
GETPOST(
'cancel',
'alpha') == $langs->trans(
"Cancel")) {
689 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.$object->id);
693 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
699 $triggersendname =
'RECEPTION_SENTBYMAIL';
701 $mode =
'emailfromreception';
702 $trackid =
'rec'.$object->id;
703 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
711 llxHeader(
'', $langs->trans(
'Reception'),
'Reception');
716 if (!empty($conf->project->enabled)) {
720 $product_static =
new Product($db);
722 $warehousestatic =
new Entrepot($db);
724 if ($action ==
'create2') {
725 print
load_fiche_titre($langs->trans(
"CreateReception"),
'',
'dollyrevert');
727 print
'<br>'.$langs->trans(
"ReceptionCreationIsDoneFromOrder");
728 $action =
''; $id =
''; $ref =
'';
732 if ($action ==
'create') {
741 if ($origin ==
'supplierorder') {
742 $classname =
'CommandeFournisseur';
744 $classname = ucfirst($origin);
747 $objectsrc =
new $classname($db);
748 if ($objectsrc->fetch($origin_id)) {
750 $soc->fetch($objectsrc->socid);
752 $author =
new User($db);
753 $author->fetch($objectsrc->user_author_id);
755 if (!empty($conf->stock->enabled)) {
759 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
760 print
'<input type="hidden" name="token" value="'.newToken().
'">';
761 print
'<input type="hidden" name="action" value="add">';
762 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
763 print
'<input type="hidden" name="origin_id" value="'.$objectsrc->id.
'">';
764 if (
GETPOST(
'entrepot_id',
'int')) {
765 print
'<input type="hidden" name="entrepot_id" value="'.GETPOST(
'entrepot_id',
'int').
'">';
770 print
'<table class="border centpercent">';
773 print
'<tr><td class="titlefieldcreate fieldrequired">';
774 if ($origin ==
'supplierorder' && ((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || !empty($conf->supplier_order->enabled))) {
775 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;
777 if ($origin ==
'propal' && !empty($conf->propal->enabled)) {
778 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;
785 if ($origin ==
'supplier_order') {
786 print $langs->trans(
'SupplierOrder');
788 print $langs->trans(
'RefSupplier');
790 print
'</td><td colspan="3">';
791 print
'<input type="text" name="ref_supplier" value="'.$objectsrc->ref_supplier.
'" />';
796 print
'<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans(
'Company').
'</td>';
797 print
'<td colspan="3">'.$soc->getNomUrl(1).
'</td>';
801 if (!empty($conf->project->enabled)) {
802 $projectid =
GETPOST(
'projectid',
'int') ?
GETPOST(
'projectid',
'int') : 0;
803 if (empty($projectid) && !empty($objectsrc->fk_project)) {
804 $projectid = $objectsrc->fk_project;
806 if ($origin ==
'project') {
807 $projectid = ($originid ? $originid : 0);
810 $langs->load(
"projects");
812 print
'<td>'.$langs->trans(
"Project").
'</td><td colspan="2">';
813 print
img_picto(
'',
'project',
'class="paddingright"');
814 print $formproject->select_projects((empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $soc->id : -1), $projectid,
'projectid', 0, 0, 1, 0, 1, 0, 0,
'', 1, 0,
'maxwidth500');
815 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>';
821 print
'<tr><td>'.$langs->trans(
"DateDeliveryPlanned").
'</td>';
822 print
'<td colspan="3">';
823 $date_delivery = ($date_delivery ? $date_delivery : $objectsrc->delivery_date);
824 print
$form->selectDate($date_delivery ? $date_delivery : -1,
'date_delivery', 1, 1, 1);
829 print
'<tr><td>'.$langs->trans(
"NotePublic").
'</td>';
830 print
'<td colspan="3">';
831 $doleditor =
new DolEditor(
'note_public', $objectsrc->note_public,
'', 60,
'dolibarr_notes',
'In', 0,
false, empty($conf->global->FCKEDITOR_ENABLE_NOTE_PUBLIC) ? 0 : 1, ROWS_3,
'90%');
832 print $doleditor->Create(1);
836 if ($objectsrc->note_private && !$user->socid) {
837 print
'<tr><td>'.$langs->trans(
"NotePrivate").
'</td>';
838 print
'<td colspan="3">';
839 $doleditor =
new DolEditor(
'note_private', $objectsrc->note_private,
'', 60,
'dolibarr_notes',
'In', 0,
false, empty($conf->global->FCKEDITOR_ENABLE_NOTE_PRIVATE) ? 0 : 1, ROWS_3,
'90%');
840 print $doleditor->Create(1);
846 print $langs->trans(
"Weight");
847 print
'</td><td colspan="3"><input name="weight" size="4" value="'.GETPOST(
'weight',
'int').
'"> ';
848 $text = $formproduct->selectMeasuringUnits(
"weight_units",
"weight",
GETPOST(
'weight_units',
'int'), 0, 2);
849 $htmltext = $langs->trans(
"KeepEmptyForAutoCalculation");
850 print
$form->textwithpicto($text, $htmltext);
854 print $langs->trans(
"Width").
' x '.$langs->trans(
"Height").
' x '.$langs->trans(
"Depth");
855 print
' </td><td colspan="3"><input name="trueWidth" size="4" value="'.GETPOST(
'trueWidth',
'int').
'">';
856 print
' x <input name="trueHeight" size="4" value="'.GETPOST(
'trueHeight',
'int').
'">';
857 print
' x <input name="trueDepth" size="4" value="'.GETPOST(
'trueDepth',
'int').
'">';
859 $text = $formproduct->selectMeasuringUnits(
"size_units",
"size",
GETPOST(
'size_units',
'int'), 0, 2);
860 $htmltext = $langs->trans(
"KeepEmptyForAutoCalculation");
861 print
$form->textwithpicto($text, $htmltext);
865 print
"<tr><td>".$langs->trans(
"ReceptionMethod").
"</td>";
866 print
'<td colspan="3">';
867 $recept->fetch_delivery_methods();
868 print
$form->selectarray(
"shipping_method_id", $recept->meths,
GETPOST(
'shipping_method_id',
'int'), 1, 0, 0,
"", 1);
870 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
872 print
"</td></tr>\n";
875 print
"<tr><td>".$langs->trans(
"TrackingNumber").
"</td>";
876 print
'<td colspan="3">';
877 print
'<input name="tracking_number" size="20" value="'.GETPOST(
'tracking_number',
'alpha').
'">';
878 print
"</td></tr>\n";
881 $parameters = array(
'objectsrc' => $objectsrc,
'colspan' =>
' colspan="3"',
'cols' =>
'3',
'socid'=>$socid);
882 $reshook = $hookmanager->executeHooks(
'formObjectOptions',
$parameters, $recept, $action);
883 print $hookmanager->resPrint;
886 $extrafields->fetch_name_optionals_label($object->table_element);
887 if (empty($reshook) && !empty($extrafields->attributes[$object->table_element][
'label'])) {
889 if ($objectsrc->fetch_optionals() > 0) {
890 $recept->array_options = array_merge($recept->array_options, $objectsrc->array_options);
892 print $recept->showOptionals($extrafields,
'create',
$parameters);
896 if (!empty($conf->incoterm->enabled)) {
898 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"), $objectsrc->label_incoterms, 1).
'</label></td>';
899 print
'<td colspan="3" class="maxwidthonsmartphone">';
900 print
$form->select_incoterms((!empty($objectsrc->fk_incoterms) ? $objectsrc->fk_incoterms :
''), (!empty($objectsrc->location_incoterms) ? $objectsrc->location_incoterms :
''));
905 include_once DOL_DOCUMENT_ROOT.
'/core/modules/reception/modules_reception.php';
908 if (count($list) > 1) {
909 print
"<tr><td>".$langs->trans(
"DefaultModel").
"</td>";
910 print
'<td colspan="3">';
911 print
$form->selectarray(
'model', $list, $conf->global->RECEPTION_ADDON_PDF);
912 print
"</td></tr>\n";
926 $suffix2numAsked = array();
927 $dispatchLines = array();
929 foreach ($_POST as $key => $value) {
934 if (preg_match(
'/^product_([0-9]+)_([0-9]+)$/i', $key, $reg)) {
936 $paramSuffix = $reg[1] .
'_' . $reg[2];
937 $suffix2numAsked[$paramSuffix] = $numAsked;
940 $numline = $numAsked;
942 $prod =
"product_" . $paramSuffix;
943 $qty =
"qty_" . $paramSuffix;
944 $ent =
"entrepot_" . $paramSuffix;
945 $pu =
"pu_" . $paramSuffix;
946 $fk_commandefourndet =
"fk_commandefourndet_" . $paramSuffix;
947 $dispatchLines[$numAsked] = array(
'prod' =>
GETPOST($prod,
'int'),
'qty' =>
price2num(
GETPOST($qty),
'MS'),
'ent' =>
GETPOST($ent,
'int'),
'pu' =>
price2num(
GETPOST($pu),
'MU'),
'comment' =>
GETPOST(
'comment'),
'fk_commandefourndet' =>
GETPOST($fk_commandefourndet,
'int'));
951 if (preg_match(
'/^product_batch_([0-9]+)_([0-9]+)$/i', $key, $reg)) {
953 $paramSuffix = $reg[1] .
'_' . $reg[2];
954 $suffix2numAsked[$paramSuffix] = $numAsked;
958 $numline = $numAsked;
960 $prod =
'product_batch_' . $paramSuffix;
961 $qty =
'qty_' . $paramSuffix;
962 $ent =
'entrepot_' . $paramSuffix;
963 $pu =
'pu_' . $paramSuffix;
964 $lot =
'lot_number_' . $paramSuffix;
965 $dDLUO =
dol_mktime(12, 0, 0,
GETPOST(
'dluo_'.$paramSuffix.
'month',
'int'),
GETPOST(
'dluo_'.$paramSuffix.
'day',
'int'),
GETPOST(
'dluo_'.$paramSuffix.
'year',
'int'));
966 $dDLC =
dol_mktime(12, 0, 0,
GETPOST(
'dlc_'.$paramSuffix.
'month',
'int'),
GETPOST(
'dlc_'.$paramSuffix.
'day',
'int'),
GETPOST(
'dlc_'.$paramSuffix.
'year',
'int'));
967 $fk_commandefourndet =
'fk_commandefourndet_'.$paramSuffix;
968 $dispatchLines[$numAsked] = array(
'prod' =>
GETPOST($prod,
'int'),
'qty' =>
price2num(
GETPOST($qty),
'MS'),
'ent' =>
GETPOST($ent,
'int'),
'pu' =>
price2num(
GETPOST($pu),
'MU'),
'comment' =>
GETPOST(
'comment'),
'fk_commandefourndet' =>
GETPOST($fk_commandefourndet,
'int'),
'DLC'=> $dDLC,
'DLUO'=> $dDLUO,
'lot'=>
GETPOST($lot,
'alpha'));
972 if (preg_match(
'/^productid([0-9]+)$/i', $key, $reg)) {
974 $paramSuffix = $reg[1];
975 $suffix2numAsked[$paramSuffix] = $numAsked;
979 $numline = $numAsked;
981 $prod =
'productid'.$paramSuffix;
982 $comment =
'comment'.$paramSuffix;
983 $qty =
'qtyl'.$paramSuffix;
984 $ent =
'entl'.$paramSuffix;
985 $pu =
'pul'.$paramSuffix;
986 $lot =
'batch'.$paramSuffix;
987 $dDLUO =
dol_mktime(12, 0, 0,
GETPOST(
'dluo'.$paramSuffix.
'month',
'int'),
GETPOST(
'dluo'.$paramSuffix.
'day',
'int'),
GETPOST(
'dluo'.$paramSuffix.
'year',
'int'));
988 $dDLC =
dol_mktime(12, 0, 0,
GETPOST(
'dlc'.$paramSuffix.
'month',
'int'),
GETPOST(
'dlc'.$paramSuffix.
'day',
'int'),
GETPOST(
'dlc'.$paramSuffix.
'year',
'int'));
989 $fk_commandefourndet =
'fk_commandefournisseurdet'.$paramSuffix;
990 $dispatchLines[$numAsked] = array(
'prod' =>
GETPOST($prod,
'int'),
'qty' =>
price2num(
GETPOST($qty),
'MS'),
'ent' =>
GETPOST($ent,
'int'),
'pu' =>
price2num(
GETPOST($pu),
'MU'),
'comment' =>
GETPOST($comment),
'fk_commandefourndet' =>
GETPOST($fk_commandefourndet,
'int'),
'DLC'=> $dDLC,
'DLUO'=> $dDLUO,
'lot'=>
GETPOST($lot,
'alpha'));
997 foreach ($suffix2numAsked as $suffix => $n) {
998 $dispatchLines[$n][
'array_options'] = $extrafields->getOptionalsFromPost(
'commande_fournisseur_dispatch',
'_' . $suffix,
'');
1001 print
'<script type="text/javascript">
1002 jQuery(document).ready(function() {
1003 jQuery("#autofill").click(function() {';
1005 while ($i <= $numAsked) {
1006 print
'jQuery("#qtyl'.$i.
'").val(jQuery("#qtyasked'.$i.
'").val() - jQuery("#qtydelivered'.$i.
'").val());'.
"\n";
1010 jQuery("#autoreset").click(function() {';
1012 while ($i <= $numAsked) {
1013 print
'jQuery("#qtyl'.$i.
'").val(0);'.
"\n";
1022 print
'<table class="noborder centpercent">';
1025 $objectsrc->loadReceptions();
1028 print
'<tr class="liste_titre">';
1029 print
'<td>'.$langs->trans(
"Description").
'</td>';
1030 print
'<td>'.$langs->trans(
"Comment").
'</td>';
1031 print
'<td class="center">'.$langs->trans(
"QtyOrdered").
'</td>';
1032 print
'<td class="center">'.$langs->trans(
"QtyReceived").
'</td>';
1033 print
'<td class="center">'.$langs->trans(
"QtyToReceive");
1034 if (!empty($conf->global->STOCK_CALCULATE_ON_RECEPTION || $conf->global->STOCK_CALCULATE_ON_RECEPTION_CLOSE)) {
1035 print
'<td>'.$langs->trans(
"BuyingPrice").
'</td>';
1037 if (empty($conf->productbatch->enabled)) {
1038 print
' <br>(<a href="#" id="autofill">'.$langs->trans(
"Fill").
'</a>';
1039 print
' / <a href="#" id="autoreset">'.$langs->trans(
"Reset").
'</a>)';
1042 if (!empty($conf->stock->enabled)) {
1043 print
'<td class="left">'.$langs->trans(
"Warehouse").
' ('.$langs->trans(
"Stock").
')</td>';
1045 if (!empty($conf->productbatch->enabled)) {
1046 print
'<td class="left">'.$langs->trans(
"batch_number").
'</td>';
1047 if (empty($conf->global->PRODUCT_DISABLE_SELLBY)) {
1048 print
'<td class="left">'.$langs->trans(
"SellByDate").
'</td>';
1050 if (empty($conf->global->PRODUCT_DISABLE_EATBY)) {
1051 print
'<td class="left">'.$langs->trans(
"EatByDate").
'</td>';
1060 $arrayofpurchaselinealreadyoutput= array();
1064 while ($indiceAsked <= $numAsked) {
1068 foreach ($objectsrc->lines as $supplierLine) {
1069 if ($dispatchLines[$indiceAsked][
'fk_commandefourndet'] == $supplierLine->id) {
1070 $line = $supplierLine;
1076 $type = $line->product_type ? $line->product_type : $line->fk_product_type;
1079 if (!empty($line->date_start)) {
1082 if (!empty($line->date_end)) {
1086 print
'<!-- line fk_commandefourndet='.$line->id.
' for product='.$line->fk_product.
' -->'.
"\n";
1087 print
'<tr class="oddeven">'.
"\n";
1090 if ($line->fk_product > 0) {
1091 $product->fetch($line->fk_product);
1092 $product->load_stock(
'warehouseopen');
1096 print
'<a name="'.$line->id.
'"></a>';
1097 if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {
1098 print
'<input type="hidden" name="productid'.$indiceAsked.
'" value="'.$line->fk_product.
'">';
1101 $product_static = $product;
1103 $text = $product_static->getNomUrl(1);
1104 $text .=
' - '.(!empty($line->label) ? $line->label : $line->product_label);
1105 $description = ($conf->global->PRODUIT_DESC_IN_FORM ?
'' :
dol_htmlentitiesbr($line->desc));
1106 print
$form->textwithtooltip($text, $description, 3,
'',
'', $i);
1109 print_date_range($db->jdate($line->date_start), $db->jdate($line->date_end));
1112 if (!empty($conf->global->PRODUIT_DESC_IN_FORM)) {
1113 print ($line->desc && $line->desc != $line->product_label) ?
'<br>'.dol_htmlentitiesbr($line->desc) :
'';
1119 if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {
1121 $text =
img_object($langs->trans(
'Service'),
'service');
1123 $text =
img_object($langs->trans(
'Product'),
'product');
1126 if (!empty($line->label)) {
1127 $text .=
' <strong>'.$line->label.
'</strong>';
1128 print
$form->textwithtooltip($text, $line->desc, 3,
'',
'', $i);
1130 print $text.
' '.nl2br($line->desc);
1134 print_date_range($db->jdate($line->date_start), $db->jdate($line->date_end));
1141 $defaultcomment = $dispatchLines[$indiceAsked][
'comment'];
1143 print
'<input type="text" class="maxwidth100" name="comment'.$indiceAsked.
'" value="'.$defaultcomment.
'">';
1147 print
'<td class="center">';
1148 if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {
1151 print
'<input type="hidden" name="fk_commandefournisseurdet'.$indiceAsked.
'" value="'.$line->id.
'">';
1152 print
'<input type="hidden" name="pul'.$indiceAsked.
'" value="'.$line->pu_ht.
'">';
1153 print
'<input name="qtyasked'.$indiceAsked.
'" id="qtyasked'.$indiceAsked.
'" type="hidden" value="'.$line->qty.
'">';
1155 $qtyProdCom = $line->qty;
1158 print
'<td class="center">';
1159 $quantityDelivered = $objectsrc->receptions[$line->id];
1160 if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {
1161 print $quantityDelivered;
1163 print
'<input name="qtydelivered'.$indiceAsked.
'" id="qtydelivered'.$indiceAsked.
'" type="hidden" value="'.$quantityDelivered.
'">';
1167 if ($line->product_type == 1 && empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
1168 $quantityToBeDelivered = 0;
1170 $quantityToBeDelivered = $dispatchLines[$indiceAsked][
'qty'];
1172 $warehouse_id = $dispatchLines[$indiceAsked][
'ent'];
1175 $warehouseObject =
null;
1176 if (!empty($conf->stock->enabled)) {
1177 print
'<!-- Case warehouse already known or product not a predefined product -->';
1179 $stock = + $product->stock_warehouse[$dispatchLines[$indiceAsked][
'ent']]->real;
1180 $deliverableQty = $dispatchLines[$indiceAsked][
'qty'];
1181 $cost_price = $dispatchLines[$indiceAsked][
'pu'];
1184 print
'<td class="center">';
1185 if ($line->product_type ==
Product::TYPE_PRODUCT || !empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
1186 if (
GETPOST(
'qtyl'.$indiceAsked,
'int')) {
1187 $defaultqty =
GETPOST(
'qtyl'.$indiceAsked,
'int');
1189 print
'<input name="idl'.$indiceAsked.
'" type="hidden" value="'.$line->id.
'">';
1190 print
'<input class="right" name="qtyl'.$indiceAsked.
'" id="qtyl'.$indiceAsked.
'" type="text" size="4" value="'.$deliverableQty.
'">';
1192 print $langs->trans(
"NA");
1196 if (!empty($conf->global->STOCK_CALCULATE_ON_RECEPTION) || !empty($conf->global->STOCK_CALCULATE_ON_RECEPTION_CLOSE)) {
1198 print
'<input class="width75 right" name="cost_price'.$indiceAsked.
'" id="cost_price'.$indiceAsked.
'" value="'.$cost_price.
'">';
1203 if (!empty($conf->stock->enabled)) {
1204 print
'<td class="left">';
1205 if ($line->product_type ==
Product::TYPE_PRODUCT || !empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
1207 $ent =
"entl".$indiceAsked;
1208 $idl =
"idl".$indiceAsked;
1209 $tmpentrepot_id = is_numeric(
GETPOST($ent,
'int')) ?
GETPOST($ent,
'int') : $warehouse_id;
1210 if ($line->fk_product > 0) {
1211 print
'<!-- Show warehouse selection -->';
1212 print $formproduct->selectWarehouses($tmpentrepot_id,
'entl'.$indiceAsked,
'', 0, 0, $line->fk_product,
'', 1);
1215 print $langs->trans(
"Service");
1220 if (!empty($conf->productbatch->enabled)) {
1221 if (!empty($product->status_batch)) {
1222 print
'<td><input name="batch'.$indiceAsked.
'" value="'.$dispatchLines[$indiceAsked][
'lot'].
'"></td>';
1223 if (empty($conf->global->PRODUCT_DISABLE_SELLBY)) {
1224 print
'<td class="nowraponall">';
1225 print
$form->selectDate($dispatchLines[$indiceAsked][
'DLC'],
'dlc'.$indiceAsked,
'',
'', 1,
"");
1228 if (empty($conf->global->PRODUCT_DISABLE_EATBY)) {
1229 print
'<td class="nowraponall">';
1230 print
$form->selectDate($dispatchLines[$indiceAsked][
'DLUO'],
'dluo'.$indiceAsked,
'',
'', 1,
"");
1234 print
'<td colspan="3"></td>';
1239 $arrayofpurchaselinealreadyoutput[$line->id] = $line->id;
1245 if (!empty($extrafields)) {
1254 $srcLine->id = $line->id;
1255 $srcLine->fetch_optionals();
1257 if (empty($recLine->array_options) && !empty($dispatchLines[$indiceAsked][
'array_options'])) {
1258 $recLine->array_options = $dispatchLines[$indiceAsked][
'array_options'];
1260 $recLine->array_options = array_merge($recLine->array_options, $srcLine->array_options);
1262 print $recLine->showOptionals($extrafields,
'edit', array(
'style'=>
'class="oddeven"',
'colspan'=>$colspan), $indiceAsked,
'', 1);
1272 print
$form->buttonsSaveCancel(
"Create");
1281 } elseif ($id || $ref) {
1287 $lines = $object->lines;
1289 $num_prod = count($lines);
1291 if ($object->id > 0) {
1292 if (!empty($object->origin) && $object->origin_id > 0) {
1293 $object->origin =
'CommandeFournisseur';
1294 $typeobject = $object->origin;
1295 $origin = $object->origin;
1296 $origin_id = $object->origin_id;
1297 $object->fetch_origin();
1301 $soc->fetch($object->socid);
1303 $res = $object->fetch_optionals();
1306 print
dol_get_fiche_head($head,
'reception', $langs->trans(
"Reception"), -1,
'dollyrevert');
1311 if ($action ==
'delete') {
1312 $formconfirm =
$form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $langs->trans(
'DeleteReception'), $langs->trans(
"ConfirmDeleteReception", $object->ref),
'confirm_delete',
'', 0, 1);
1316 if ($action ==
'valid') {
1317 $objectref = substr($object->ref, 1, 4);
1318 if ($objectref ==
'PROV') {
1319 $numref = $object->getNextNumRef($soc);
1321 $numref = $object->ref;
1324 $text = $langs->trans(
"ConfirmValidateReception", $numref);
1326 if (!empty($conf->notification->enabled)) {
1327 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1328 $notify =
new Notify($db);
1330 $text .= $notify->confirmMessage(
'RECEPTION_VALIDATE', $object->socid, $object);
1333 $formconfirm =
$form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $langs->trans(
'ValidateReception'), $text,
'confirm_valid',
'', 0, 1);
1337 if ($action ==
'annuler') {
1338 $formconfirm =
$form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $langs->trans(
'CancelReception'), $langs->trans(
"ConfirmCancelReception", $object->ref),
'confirm_cancel',
'', 0, 1);
1343 $reshook = $hookmanager->executeHooks(
'formConfirm',
$parameters, $object, $action);
1344 if (empty($reshook)) {
1346 } elseif ($reshook > 0) {
1357 $tmparray = $object->getTotalWeightVolume();
1358 $totalWeight = $tmparray[
'weight'];
1359 $totalVolume = $tmparray[
'volume'];
1362 if ($typeobject ==
'commande' && $object->$typeobject->id && !empty($conf->commande->enabled)) {
1364 $objectsrc->fetch($object->$typeobject->id);
1366 if ($typeobject ==
'propal' && $object->$typeobject->id && !empty($conf->propal->enabled)) {
1367 $objectsrc =
new Propal($db);
1368 $objectsrc->fetch($object->$typeobject->id);
1370 if ($typeobject ==
'CommandeFournisseur' && $object->$typeobject->id && ((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || !empty($conf->supplier_order->enabled))) {
1372 $objectsrc->fetch($object->$typeobject->id);
1375 $linkback =
'<a href="'.DOL_URL_ROOT.
'/reception/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
1376 $morehtmlref =
'<div class="refidno">';
1379 $morehtmlref .=
$form->editfieldkey(
"RefSupplier",
'ref_supplier', $object->ref_supplier, $object, $user->rights->reception->creer,
'string',
'', 0, 1);
1380 $morehtmlref .=
$form->editfieldval(
"RefSupplier",
'ref_supplier', $object->ref_supplier, $object, $user->rights->reception->creer,
'string',
'',
null,
null,
'', 1);
1383 $morehtmlref .=
'<br>'.$langs->trans(
'ThirdParty').
' : '.$object->thirdparty->getNomUrl(1);
1385 if (!empty($conf->project->enabled)) {
1386 $langs->load(
"projects");
1387 $morehtmlref .=
'<br>'.$langs->trans(
'Project').
' ';
1389 if ($action !=
'classify') {
1390 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> : ';
1392 if ($action ==
'classify') {
1394 $morehtmlref .=
'<form method="post" action="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'">';
1395 $morehtmlref .=
'<input type="hidden" name="action" value="classin">';
1396 $morehtmlref .=
'<input type="hidden" name="token" value="'.newToken().
'">';
1397 $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project,
'projectid', $maxlength, 0, 1, 0, 1, 0, 0,
'', 1);
1398 $morehtmlref .=
'<input type="submit" class="button button-edit" value="'.$langs->trans(
"Modify").
'">';
1399 $morehtmlref .=
'</form>';
1401 $morehtmlref .=
$form->form_project($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->socid, $object->fk_project,
'none', 0, 0, 0, 1);
1406 $morehtmlref .=
' : ';
1407 if (!empty($objectsrc->fk_project)) {
1409 $proj->fetch($objectsrc->fk_project);
1410 $morehtmlref .=
' : '.$proj->getNomUrl(1);
1412 $morehtmlref .=
' - '.$proj->title;
1419 $morehtmlref .=
'</div>';
1421 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
1424 print
'<div class="fichecenter">';
1425 print
'<div class="fichehalfleft">';
1426 print
'<div class="underbanner clearboth"></div>';
1428 print
'<table class="border centpercent tableforfield">';
1431 if ($typeobject ==
'commande' && $object->$typeobject->id && !empty($conf->commande->enabled)) {
1433 print $langs->trans(
"RefOrder").
'</td>';
1434 print
'<td colspan="3">';
1435 print $objectsrc->getNomUrl(1,
'commande');
1439 if ($typeobject ==
'propal' && $object->$typeobject->id && !empty($conf->propal->enabled)) {
1441 print $langs->trans(
"RefProposal").
'</td>';
1442 print
'<td colspan="3">';
1443 print $objectsrc->getNomUrl(1,
'reception');
1447 if ($typeobject ==
'CommandeFournisseur' && $object->$typeobject->id && !empty($conf->propal->enabled)) {
1449 print $langs->trans(
"SupplierOrder").
'</td>';
1450 print
'<td colspan="3">';
1451 print $objectsrc->getNomUrl(1,
'reception');
1457 print
'<tr><td class="titlefield">'.$langs->trans(
"DateCreation").
'</td>';
1458 print
'<td colspan="3">'.dol_print_date($object->date_creation,
"dayhour",
"tzuserrel").
"</td>\n";
1462 print
'<tr><td height="10">';
1463 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1464 print $langs->trans(
'DateDeliveryPlanned');
1467 if ($action !=
'editdate_livraison') {
1468 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>';
1470 print
'</tr></table>';
1471 print
'</td><td colspan="2">';
1472 if ($action ==
'editdate_livraison') {
1473 print
'<form name="setdate_livraison" action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'" method="post">';
1474 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1475 print
'<input type="hidden" name="action" value="setdate_livraison">';
1476 print
$form->selectDate($object->date_delivery ? $object->date_delivery : -1,
'liv_', 1, 1,
'',
"setdate_livraison", 1, 0);
1477 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
1480 print $object->date_delivery ?
dol_print_date($object->date_delivery,
'dayhour') :
' ';
1487 print
$form->editfieldkey(
"Weight",
'trueWeight', $object->trueWeight, $object, $user->rights->reception->creer);
1488 print
'</td><td colspan="3">';
1490 if ($action ==
'edittrueWeight') {
1491 print
'<form name="settrueweight" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1492 print
'<input name="action" value="settrueWeight" type="hidden">';
1493 print
'<input name="id" value="'.$object->id.
'" type="hidden">';
1494 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1495 print
'<input id="trueWeight" name="trueWeight" value="'.$object->trueWeight.
'" type="text">';
1496 print $formproduct->selectMeasuringUnits(
"weight_units",
"weight", $object->weight_units, 0, 2);
1497 print
' <input class="button" name="modify" value="'.$langs->trans(
"Modify").
'" type="submit">';
1498 print
' <input class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'" type="submit">';
1501 print $object->trueWeight;
1502 print ($object->trueWeight && $object->weight_units !=
'') ?
' '.measuringUnitString(0,
"weight", $object->weight_units) :
'';
1506 if ($totalWeight > 0) {
1507 if (!empty($object->trueWeight)) {
1508 print
' ('.$langs->trans(
"SumOfProductWeights").
': ';
1510 print
showDimensionInBestUnit($totalWeight, 0,
"weight", $langs, isset($conf->global->MAIN_WEIGHT_DEFAULT_ROUND) ? $conf->global->MAIN_WEIGHT_DEFAULT_ROUND : -1, isset($conf->global->MAIN_WEIGHT_DEFAULT_UNIT) ? $conf->global->MAIN_WEIGHT_DEFAULT_UNIT :
'no');
1511 if (!empty($object->trueWeight)) {
1518 print
'<tr><td>'.$form->editfieldkey(
"Width",
'trueWidth', $object->trueWidth, $object, $user->rights->reception->creer).
'</td><td colspan="3">';
1519 print
$form->editfieldval(
"Width",
'trueWidth', $object->trueWidth, $object, $user->rights->reception->creer);
1520 print ($object->trueWidth && $object->width_units !=
'') ?
' '.measuringUnitString(0,
"size", $object->width_units) :
'';
1524 print
'<tr><td>'.$form->editfieldkey(
"Height",
'trueHeight', $object->trueHeight, $object, $user->rights->reception->creer).
'</td><td colspan="3">';
1525 if ($action ==
'edittrueHeight') {
1526 print
'<form name="settrueHeight" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1527 print
'<input name="action" value="settrueHeight" type="hidden">';
1528 print
'<input name="id" value="'.$object->id.
'" type="hidden">';
1529 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1530 print
'<input id="trueHeight" name="trueHeight" value="'.$object->trueHeight.
'" type="text">';
1531 print $formproduct->selectMeasuringUnits(
"size_units",
"size", $object->size_units, 0, 2);
1532 print
' <input class="button" name="modify" value="'.$langs->trans(
"Modify").
'" type="submit">';
1533 print
' <input class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'" type="submit">';
1536 print $object->trueHeight;
1537 print ($object->trueHeight && $object->height_units !=
'') ?
' '.measuringUnitString(0,
"size", $object->height_units) :
'';
1543 print
'<tr><td>'.$form->editfieldkey(
"Depth",
'trueDepth', $object->trueDepth, $object, $user->rights->reception->creer).
'</td><td colspan="3">';
1544 print
$form->editfieldval(
"Depth",
'trueDepth', $object->trueDepth, $object, $user->rights->reception->creer);
1545 print ($object->trueDepth && $object->depth_units !=
'') ?
' '.measuringUnitString(0,
"size", $object->depth_units) :
'';
1550 print $langs->trans(
"Volume");
1552 print
'<td colspan="3">';
1553 $calculatedVolume = 0;
1555 if ($object->trueWidth && $object->trueHeight && $object->trueDepth) {
1556 $calculatedVolume = ($object->trueWidth * $object->trueHeight * $object->trueDepth);
1557 $volumeUnit = $object->size_units * 3;
1560 if ($calculatedVolume > 0) {
1561 if ($volumeUnit < 50) {
1562 print
showDimensionInBestUnit($calculatedVolume, $volumeUnit,
"volume", $langs, isset($conf->global->MAIN_VOLUME_DEFAULT_ROUND) ? $conf->global->MAIN_VOLUME_DEFAULT_ROUND : -1, isset($conf->global->MAIN_VOLUME_DEFAULT_UNIT) ? $conf->global->MAIN_VOLUME_DEFAULT_UNIT :
'no');
1567 if ($totalVolume > 0) {
1568 if ($calculatedVolume) {
1569 print
' ('.$langs->trans(
"SumOfProductVolumes").
': ';
1571 print
showDimensionInBestUnit($totalVolume, 0,
"volume", $langs, isset($conf->global->MAIN_VOLUME_DEFAULT_ROUND) ? $conf->global->MAIN_VOLUME_DEFAULT_ROUND : -1, isset($conf->global->MAIN_VOLUME_DEFAULT_UNIT) ? $conf->global->MAIN_VOLUME_DEFAULT_UNIT :
'no');
1573 if ($calculatedVolume) {
1583 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1588 print
'<div class="fichehalfright">';
1589 print
'<div class="underbanner clearboth"></div>';
1591 print
'<table class="border centpercent tableforfield">';
1594 print
'<tr><td height="10">';
1595 print
'<table class="nobordernopadding centpercent"><tr><td>';
1596 print $langs->trans(
'ReceptionMethod');
1599 if ($action !=
'editshipping_method_id') {
1600 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>';
1602 print
'</tr></table>';
1603 print
'</td><td colspan="2">';
1604 if ($action ==
'editshipping_method_id') {
1605 print
'<form name="setshipping_method_id" action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'" method="post">';
1606 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1607 print
'<input type="hidden" name="action" value="setshipping_method_id">';
1608 $object->fetch_delivery_methods();
1609 print
$form->selectarray(
"shipping_method_id", $object->meths, $object->shipping_method_id, 1, 0, 0,
"", 1);
1611 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
1613 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
1616 if ($object->shipping_method_id > 0) {
1618 $code = $langs->getLabelFromKey($db, $object->shipping_method_id,
'c_shipment_mode',
'rowid',
'code');
1619 print $langs->trans(
"SendingMethod".strtoupper($code));
1626 print
'<tr><td class="titlefield">'.$form->editfieldkey(
"TrackingNumber",
'tracking_number', $object->tracking_number, $object, $user->rights->reception->creer).
'</td><td colspan="3">';
1627 print
$form->editfieldval(
"TrackingNumber",
'tracking_number', $object->tracking_url, $object, $user->rights->reception->creer,
'safehtmlstring', $object->tracking_number);
1631 if (!empty($conf->incoterm->enabled)) {
1633 print
'<table width="100%" class="nobordernopadding"><tr><td>';
1634 print $langs->trans(
'IncotermLabel');
1635 print
'<td><td class="right">';
1636 if ($user->rights->reception->creer) {
1637 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/reception/card.php?id='.$object->id.
'&action=editincoterm&token='.
newToken().
'">'.
img_edit().
'</a>';
1641 print
'</td></tr></table>';
1643 print
'<td colspan="3">';
1644 if ($action !=
'editincoterm') {
1645 print
$form->textwithpicto($object->display_incoterms(), $object->label_incoterms, 1);
1647 print
$form->select_incoterms((!empty($object->fk_incoterms) ? $object->fk_incoterms :
''), (!empty($object->location_incoterms) ? $object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.$object->id);
1657 print
'<div class="clearboth"></div>';
1661 if ($action ==
'editline') {
1662 print
'<form name="updateline" id="updateline" action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&lineid='.$line_id.
'" method="POST">
1663 <input type="hidden" name="token" value="' .
newToken().
'">
1664 <input type="hidden" name="action" value="updateline">
1665 <input type="hidden" name="mode" value="">
1666 <input type="hidden" name="id" value="' . $object->id.
'">';
1670 print
'<div class="div-table-responsive-no-min">';
1671 print
'<table id="tablelines" class="noborder centpercent">';
1673 print
'<tr class="liste_titre">';
1675 if (!empty($conf->global->MAIN_VIEW_LINE_NUMBER)) {
1676 print
'<td width="5" class="center"> </td>';
1679 print
'<td>'.$langs->trans(
"Products").
'</td>';
1681 print
'<td>'.$langs->trans(
"Comment").
'</td>';
1683 print
'<td class="center">'.$langs->trans(
"QtyOrdered").
'</td>';
1684 if ($origin && $origin_id > 0) {
1685 print
'<td class="center">'.$langs->trans(
"QtyInOtherReceptions").
'</td>';
1687 if ($action ==
'editline') {
1689 if (empty($conf->stock->enabled)) {
1692 if (empty($conf->productbatch->enabled)) {
1695 print
'<td class="center" colspan="'.$editColspan.
'">';
1696 if ($object->statut <= 1) {
1697 print $langs->trans(
"QtyToReceive").
' - ';
1699 print $langs->trans(
"QtyReceived").
' - ';
1701 if (!empty($conf->stock->enabled)) {
1702 print $langs->trans(
"WarehouseSource").
' - ';
1704 if (!empty($conf->productbatch->enabled)) {
1705 print $langs->trans(
"Batch");
1709 $statusreceived = $object::STATUS_CLOSED;
1711 $statusreceived = $object::STATUS_VALIDATED;
1714 $statusreceived = $object::STATUS_CLOSED;
1716 if ($object->statut < $statusreceived) {
1717 print
'<td class="center">'.$langs->trans(
"QtyToReceive").
'</td>';
1719 print
'<td class="center">'.$langs->trans(
"QtyReceived").
'</td>';
1721 if (!empty($conf->stock->enabled)) {
1722 print
'<td class="left">'.$langs->trans(
"WarehouseSource").
'</td>';
1725 if (!empty($conf->productbatch->enabled)) {
1726 print
'<td class="left">'.$langs->trans(
"Batch").
'</td>';
1729 print
'<td class="center">'.$langs->trans(
"CalculatedWeight").
'</td>';
1730 print
'<td class="center">'.$langs->trans(
"CalculatedVolume").
'</td>';
1732 if ($object->statut == 0) {
1733 print
'<td class="linecoledit"></td>';
1734 print
'<td class="linecoldelete" width="10"></td>';
1741 if (!empty($conf->global->MAIN_MULTILANGS) && !empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE)) {
1742 $object->fetch_thirdparty();
1743 $outputlangs = $langs;
1745 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
1746 $newlang =
GETPOST(
'lang_id',
'aZ09');
1748 if (empty($newlang)) {
1749 $newlang = $object->thirdparty->default_lang;
1751 if (!empty($newlang)) {
1752 $outputlangs =
new Translate(
"", $conf);
1753 $outputlangs->setDefaultLang($newlang);
1758 $alreadysent = array();
1760 $origin =
'commande_fournisseur';
1762 if ($origin && $origin_id > 0) {
1763 $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";
1764 $sql .=
", ed.rowid as receptionline_id, ed.qty, ed.fk_reception as reception_id, ed.fk_entrepot";
1765 $sql .=
", e.rowid as reception_id, e.ref as reception_ref, e.date_creation, e.date_valid, e.date_delivery, e.date_reception";
1767 $sql .=
', p.label as product_label, p.ref, p.fk_product_type, p.rowid as prodid, p.tobatch as product_tobatch';
1768 $sql .=
', p.description as product_desc';
1769 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commande_fournisseur_dispatch as ed";
1770 $sql .=
", ".MAIN_DB_PREFIX.
"reception as e";
1771 $sql .=
", ".MAIN_DB_PREFIX.$origin.
"det as obj";
1773 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p ON obj.fk_product = p.rowid";
1774 $sql .=
" WHERE e.entity IN (".getEntity(
'reception').
")";
1775 $sql .=
" AND obj.fk_commande = ".((int) $origin_id);
1776 $sql .=
" AND obj.rowid = ed.fk_commandefourndet";
1777 $sql .=
" AND ed.fk_reception = e.rowid";
1778 $sql .=
" AND ed.fk_reception !=".((int) $object->id);
1780 $sql .=
" ORDER BY obj.fk_product";
1782 dol_syslog(
"get list of reception lines", LOG_DEBUG);
1783 $resql = $db->query($sql);
1785 $num = $db->num_rows(
$resql);
1789 $obj = $db->fetch_object(
$resql);
1792 $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);
1800 $arrayofpurchaselinealreadyoutput = array();
1804 for ($i = 0; $i < $num_prod; $i++) {
1805 print
'<!-- origin line id = '.(!empty($lines[$i]->origin_line_id) ? $lines[$i]->origin_line_id : 0).
' -->';
1806 print
'<tr class="oddeven" id="row-'.$lines[$i]->id.
'" data-id="'.$lines[$i]->id.
'" data-element="'.$lines[$i]->element.
'">';
1809 if (!empty($conf->global->MAIN_VIEW_LINE_NUMBER)) {
1810 print
'<td class="center">'.($i + 1).
'</td>';
1814 if ($lines[$i]->fk_product > 0) {
1816 if (!empty($conf->global->MAIN_MULTILANGS) && !empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE)) {
1818 $prod->fetch($lines[$i]->fk_product);
1819 $label = (!empty($prod->multilangs[$outputlangs->defaultlang][
"label"])) ? $prod->multilangs[$outputlangs->defaultlang][
"label"] : $lines[$i]->product->label;
1821 $label = (!empty($lines[$i]->product->label) ? $lines[$i]->product->label : $lines[$i]->product->product_label);
1824 print
'<td class="linecoldescription">';
1825 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
1826 $text = $lines[$i]->product->getNomUrl(1);
1827 $text .=
' - '.$label;
1828 $description = (!empty($conf->global->PRODUIT_DESC_IN_FORM) ?
'' :
dol_htmlentitiesbr($lines[$i]->product->description));
1829 print
$form->textwithtooltip($text, $description, 3,
'',
'', $i);
1830 print_date_range(!empty($lines[$i]->date_start) ? $lines[$i]->date_start : 0, !empty($lines[$i]->date_end) ? $lines[$i]->date_end : 0);
1831 if (!empty($conf->global->PRODUIT_DESC_IN_FORM)) {
1832 print (!empty($lines[$i]->product->description) && $lines[$i]->description != $lines[$i]->product->description) ?
'<br>'.dol_htmlentitiesbr($lines[$i]->
description) :
'';
1837 print
'<td class="linecoldescription">';
1838 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
1840 $text =
img_object($langs->trans(
'Service'),
'service');
1842 $text =
img_object($langs->trans(
'Product'),
'product');
1845 if (!empty($lines[$i]->label)) {
1846 $text .=
' <strong>'.$lines[$i]->label.
'</strong>';
1847 print
$form->textwithtooltip($text, $lines[$i]->
description, 3,
'',
'', $i);
1857 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
1858 print
'<td><input name="comment'.$line_id.
'" id="comment'.$line_id.
'" value="'.
dol_escape_htmltag($lines[$i]->comment).
'"></td>';
1860 print
'<td style="white-space: pre-wrap; max-width: 200px;">'.dol_escape_htmltag($lines[$i]->comment).
'</td>';
1865 print
'<td class="center linecolqty">';
1866 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
1867 print $lines[$i]->qty_asked;
1872 if ($origin && $origin_id > 0) {
1873 print
'<td class="center nowrap linecolqtyinotherreceptions">';
1874 if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
1875 foreach ($alreadysent as $key => $val) {
1876 if ($lines[$i]->fk_commandefourndet == $key) {
1878 foreach ($val as $receptionline_id => $receptionline_var) {
1879 if ($receptionline_var[
'reception_id'] == $lines[$i]->fk_reception) {
1887 $reception_static->fetch($receptionline_var[
'reception_id']);
1888 print $reception_static->getNomUrl(1);
1889 print
' - '.$receptionline_var[
'qty'];
1891 $htmltext = $langs->trans(
"DateValidation").
' : '.(empty($receptionline_var[
'date_valid']) ? $langs->trans(
"Draft") :
dol_print_date($receptionline_var[
'date_valid'],
'dayhour'));
1892 if (!empty($conf->stock->enabled) && $receptionline_var[
'warehouse'] > 0) {
1893 $warehousestatic->fetch($receptionline_var[
'warehouse']);
1894 $htmltext .=
'<br>'.$langs->trans(
"From").
' : '.$warehousestatic->getNomUrl(1,
'', 0, 1);
1896 print
' '.$form->textwithpicto(
'', $htmltext, 1);
1904 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
1906 print
'<td colspan="'.$editColspan.
'" class="center"><table class="nobordernopadding">';
1907 if (!empty($conf->stock->enabled)) {
1908 if ($lines[$i]->fk_product > 0) {
1909 print
'<!-- case edit 1 -->';
1912 print
'<td><input name="qtyl'.$line_id.
'" id="qtyl'.$line_id.
'" type="text" size="4" value="'.$lines[$i]->qty.
'"></td>';
1914 print
'<td>'.$formproduct->selectWarehouses($lines[$i]->fk_entrepot,
'entl'.$line_id,
'', 1, 0, $lines[$i]->fk_product,
'', 1).
'</td>';
1916 if ($conf->productbatch->enabled && !empty($lines[$i]->product->status_batch)) {
1917 print
'<td class="nowraponall"><input name="batch'.$line_id.
'" id="batch'.$line_id.
'" type="text" value="'.$lines[$i]->batch.
'"><br>';
1918 if (empty($conf->global->PRODUCT_DISABLE_SELLBY)) {
1919 print $langs->trans(
'SellByDate').
' : ';
1920 print
$form->selectDate($lines[$i]->sellby,
'dlc'.$line_id,
'',
'', 1,
"").
'</br>';
1922 if (empty($conf->global->PRODUCT_DISABLE_EATBY)) {
1923 print $langs->trans(
'EatByDate').
' : ';
1924 print
$form->selectDate($lines[$i]->eatby,
'dluo'.$line_id,
'',
'', 1,
"");
1930 print
'<!-- case edit 2 -->';
1933 print
'<td><input name="qtyl'.$line_id.
'" id="qtyl'.$line_id.
'" type="text" size="4" value="'.$lines[$i]->qty.
'"></td>';
1941 print
'</table></td>';
1944 print
'<td class="center linecolqtytoreceive">'.$lines[$i]->qty.
'</td>';
1947 if (!empty($conf->stock->enabled)) {
1948 if ($lines[$i]->fk_entrepot > 0) {
1950 $entrepot->fetch($lines[$i]->fk_entrepot);
1952 print
'<td class="left tdoverflowmax150" title="'.dol_escape_htmltag($entrepot->label).
'">';
1953 print $entrepot->getNomUrl(1);
1961 if (!empty($conf->productbatch->enabled)) {
1962 if (isset($lines[$i]->batch)) {
1963 print
'<!-- Detail of lot -->';
1964 print
'<td class="linecolbatch">';
1966 if ($lines[$i]->product->status_batch) {
1967 $detail .= $langs->trans(
"Batch").
': '.$lines[$i]->batch;
1968 if (empty($conf->global->PRODUCT_DISABLE_SELLBY)) {
1969 $detail .=
' - '.$langs->trans(
"SellByDate").
': '.
dol_print_date($lines[$i]->sellby,
"day");
1971 if (empty($conf->global->PRODUCT_DISABLE_EATBY)) {
1972 $detail .=
' - '.$langs->trans(
"EatByDate").
': '.
dol_print_date($lines[$i]->eatby,
"day");
1976 print
$form->textwithtooltip(
img_picto(
'',
'object_barcode').
' '.$langs->trans(
"DetailBatchNumber"), $detail);
1978 print $langs->trans(
"NA");
1988 print
'<td class="center linecolweight">';
1990 print $lines[$i]->product->weight * $lines[$i]->qty.
' '.
measuringUnitString(0,
"weight", $lines[$i]->product->weight_units);
1997 print
'<td class="center linecolvolume">';
1999 print $lines[$i]->product->volume * $lines[$i]->qty.
' '.
measuringUnitString(0,
"volume", $lines[$i]->product->volume_units);
2006 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
2007 print
'<td class="center" colspan="2" valign="middle">';
2008 print
'<input type="submit" class="button button-save" id="savelinebutton marginbottomonly" name="save" value="'.$langs->trans(
"Save").
'"><br>';
2009 print
'<input type="submit" class="button button-cancel" id="cancellinebutton" name="cancel" value="'.$langs->trans(
"Cancel").
'"><br>';
2010 } elseif ($object->statut == Reception::STATUS_DRAFT) {
2012 print
'<td class="linecoledit center">';
2013 print
'<a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=editline&token='.
newToken().
'&lineid='.$lines[$i]->id.
'">'.
img_edit().
'</a>';
2015 print
'<td class="linecoldelete" width="10">';
2016 print
'<a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=deleteline&token='.
newToken().
'&lineid='.$lines[$i]->id.
'">'.
img_delete().
'</a>';
2020 if (!empty($rowExtrafieldsStart)) {
2021 print $rowExtrafieldsStart;
2022 print $rowExtrafieldsView;
2028 $arrayofpurchaselinealreadyoutput[$lines[$i]->fk_commandefourndet] = $lines[$i]->fk_commandefourndet;
2031 $extralabelslines = $extrafields->attributes[$lines[$i]->table_element];
2032 if (!empty($extralabelslines) && is_array($extralabelslines) && count($extralabelslines) > 0) {
2033 $colspan = empty($conf->productbatch->enabled) ? 8 : 9;
2035 $line->id = $lines[$i]->id;
2036 $line->fetch_optionals();
2038 if ($action ==
'editline' && $lines[$i]->
id == $line_id) {
2039 print $line->showOptionals($extrafields,
'edit', array(
'colspan'=>$colspan), $indiceAsked);
2041 print $line->showOptionals($extrafields,
'view', array(
'colspan'=>$colspan), $indiceAsked);
2057 $object->fetchObjectLinked($object->id, $object->element);
2064 if (($user->socid == 0) && ($action !=
'presend')) {
2065 print
'<div class="tabsAction">';
2068 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons',
$parameters, $object, $action);
2069 if (empty($reshook)) {
2070 if ($object->statut == Reception::STATUS_DRAFT && $num_prod > 0) {
2071 if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->reception->creer))
2072 || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->reception->reception_advance->validate))) {
2073 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=valid&token='.
newToken().
'">'.$langs->trans(
"Validate").
'</a>';
2075 print
'<a class="butActionRefused" href="#" title="'.$langs->trans(
"NotAllowed").
'">'.$langs->trans(
"Validate").
'</a>';
2079 if ($object->statut == Reception::STATUS_VALIDATED && $user->rights->reception->creer) {
2080 print
'<div class="inline-block divButAction"><a class="butAction" href="card.php?id='.$object->id.
'&action=modif&token='.
newToken().
'">'.$langs->trans(
'SetToDraft').
'</a></div>';
2085 if ($object->statut == Reception::STATUS_CLOSED && $user->rights->reception->creer) {
2086 if (
isModEnabled(
'facture') && !empty($conf->global->WORKFLOW_BILL_ON_RECEPTION)) {
2087 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"ClassifyUnbilled").
'</a>';
2089 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"ReOpen").
'</a>';
2094 if (empty($user->socid)) {
2095 if ($object->statut > 0) {
2096 if (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->reception->reception_advance->send) {
2097 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=presend&mode=init#formmailbeforetitle">'.$langs->trans(
'SendByMail').
'</a>';
2099 print
'<a class="butActionRefused" href="#">'.$langs->trans(
'SendByMail').
'</a>';
2105 if (((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || !empty($conf->supplier_invoice->enabled)) && ($object->statut == Reception::STATUS_VALIDATED || $object->statut == Reception::STATUS_CLOSED)) {
2106 if ($user->rights->fournisseur->facture->creer || $user->rights->supplier_invoice->creer) {
2109 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>';
2115 if ($object->statut == Reception::STATUS_VALIDATED) {
2116 if ($user->rights->reception->creer && $object->statut > 0 && !$object->billed) {
2117 $label =
"Close"; $paramaction =
'classifyclosed';
2119 if (((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || !empty($conf->supplier_order->enabled)) && !empty($conf->global->WORKFLOW_BILL_ON_RECEPTION)) {
2120 $label =
"ClassifyBilled";
2121 $paramaction =
'classifybilled';
2123 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action='.$paramaction.
'&token='.
newToken().
'">'.$langs->trans($label).
'</a>';
2127 if ($user->rights->reception->supprimer) {
2128 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=delete&token='.
newToken().
'">'.$langs->trans(
"Delete").
'</a>';
2140 if ($action !=
'presend' && $action !=
'editline') {
2141 print
'<div class="fichecenter"><div class="fichehalfleft">';
2144 $filedir = $conf->reception->dir_output.
"/".$objectref;
2146 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".$object->id;
2148 $genallowed = $user->rights->reception->lire;
2149 $delallowed = $user->rights->reception->creer;
2151 print $formfile->showdocuments(
'reception', $objectref, $filedir, $urlsource, $genallowed, $delallowed, $object->model_pdf, 1, 0, 0, 28, 0,
'',
'',
'', $soc->default_lang);
2155 $somethingshown =
$form->showLinkedObjectBlock($object,
'');
2157 print
'</div><div class="fichehalfright">';
2159 print
'</div></div>';
2163 $modelmail =
'shipping_send';
2164 $defaulttopic =
'SendReceptionRef';
2165 $diroutput = $conf->reception->dir_output;
2166 $trackid =
'rec'.$object->id;
2168 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';