dolibarr 20.0.0
card.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2005-2010 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2005 Simon TOSSER <simon@kornog-computing.com>
5 * Copyright (C) 2005-2014 Regis Houssin <regis.houssin@inodbox.com>
6 * Copyright (C) 2007 Franky Van Liedekerke <franky.van.liedekerke@telenet.be>
7 * Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
8 * Copyright (C) 2015 Claudio Aschieri <c.aschieri@19.coop>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 3 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22 */
23
30// Load Dolibarr environment
31require '../main.inc.php';
32require_once DOL_DOCUMENT_ROOT.'/delivery/class/delivery.class.php';
33require_once DOL_DOCUMENT_ROOT.'/core/modules/delivery/modules_delivery.php';
34require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
35require_once DOL_DOCUMENT_ROOT.'/core/lib/sendings.lib.php';
36require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
37require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
38if (isModEnabled("product") || isModEnabled("service")) {
39 require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
40}
41if (isModEnabled('shipping')) {
42 require_once DOL_DOCUMENT_ROOT.'/expedition/class/expedition.class.php';
43}
44if (isModEnabled('stock')) {
45 require_once DOL_DOCUMENT_ROOT.'/product/stock/class/entrepot.class.php';
46}
47if (isModEnabled('project')) {
48 require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
49 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
50}
51
52// Load translation files required by the page
53$langs->loadLangs(array('bills', 'deliveries', 'orders', 'sendings'));
54
55if (isModEnabled('incoterm')) {
56 $langs->load('incoterm');
57}
58
59$action = GETPOST('action', 'aZ09');
60$confirm = GETPOST('confirm', 'alpha');
61$backtopage = GETPOST('backtopage', 'alpha');
62
63$object = new Delivery($db);
64$extrafields = new ExtraFields($db);
65
66// fetch optionals attributes and labels
67$extrafields->fetch_name_optionals_label($object->table_element);
68
69// fetch optionals attributes lines and labels
70$extrafields->fetch_name_optionals_label($object->table_element_line);
71
72// Load object. Make an object->fetch
73include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once
74
75// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
76$hookmanager->initHooks(array('deliverycard', 'globalcard'));
77
78$error = 0;
79
80// Security check
81$id = GETPOSTINT('id');
82if ($user->socid) {
83 $socid = $user->socid;
84}
85$result = restrictedArea($user, 'expedition', $id, 'delivery', 'delivery');
86
87$permissiontoread = $user->hasRight('expedition', 'delivery', 'read');
88$permissiontoadd = $user->hasRight('expedition', 'delivery', 'creer'); // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php
89$permissiontodelete = $user->hasRight('expedition', 'delivery', 'supprimer') || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_DRAFT);
90$permissiontovalidate = ((!getDolGlobalString('MAIN_USE_ADVANCED_PERMS') && $user->hasRight('expedition', 'delivery', 'creer')) || (getDolGlobalString('MAIN_USE_ADVANCED_PERMS') && $user->hasRight('expedition', 'delivery_advance', 'validate')));
91$permissionnote = $user->hasRight('expedition', 'delivery', 'creer'); // Used by the include of actions_setnotes.inc.php
92$permissiondellink = $user->hasRight('expedition', 'delivery', 'creer'); // Used by the include of actions_dellink.inc.php
93
94
95/*
96 * Actions
97 */
98
99$parameters = array();
100$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
101// Delete Link
102$permissiondellink = $user->hasRight('expedition', 'delivery', 'supprimer'); // Used by the include of actions_dellink.inc.php
103include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php'; // Must be include, not include_once
104
105if ($action == 'add' && $permissiontoadd) {
106 $db->begin();
107
108 $object->date_delivery = dol_now();
109 $object->note = GETPOST("note", 'restricthtml');
110 $object->note_private = GETPOST("note", 'restricthtml');
111 $object->commande_id = GETPOSTINT("commande_id");
112 $object->fk_incoterms = GETPOSTINT('incoterm_id');
113
114 /* ->entrepot_id seems to not exists
115 if (!getDolGlobalInt('MAIN_SUBMODULE_EXPEDITION') && isModEnabled('stock')) {
116 $object->entrepot_id = GETPOST('entrepot_id', 'int');
117 }*/
118
119 // We loop on each line of order to complete object delivery with qty to delivery
120 $commande = new Commande($db);
121 $commande->fetch($object->commande_id);
122 $commande->fetch_lines();
123 $num = count($commande->lines);
124 for ($i = 0; $i < $num; $i++) {
125 $qty = "qtyl".$i;
126 $idl = "idl".$i;
127 $qtytouse = price2num(GETPOST($qty));
128 if ($qtytouse > 0) {
129 $object->addline(GETPOST($idl), price2num($qtytouse), $arrayoptions);
130 }
131 }
132
133 $ret = $object->create($user);
134 if ($ret > 0) {
135 $db->commit();
136 header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
137 exit;
138 } else {
139 setEventMessages($object->error, $object->errors, 'errors');
140 $db->rollback();
141
142 $action = 'create';
143 }
144} elseif ($action == 'confirm_valid' && $confirm == 'yes' && $permissiontovalidate) {
145 $result = $object->valid($user);
146
147 // Define output language
148 if (!getDolGlobalString('MAIN_DISABLE_PDF_AUTOUPDATE')) {
149 $outputlangs = $langs;
150 $newlang = '';
151 if (getDolGlobalInt('MAIN_MULTILANGS') && empty($newlang) && GETPOST('lang_id', 'aZ09')) {
152 $newlang = GETPOST('lang_id', 'aZ09');
153 }
154 if (getDolGlobalInt('MAIN_MULTILANGS') && empty($newlang)) {
155 $newlang = $object->thirdparty->default_lang;
156 }
157 if (!empty($newlang)) {
158 $outputlangs = new Translate("", $conf);
159 $outputlangs->setDefaultLang($newlang);
160 }
161 $model = $object->model_pdf;
162 $ret = $object->fetch($id); // Reload to get new records
163
164 $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
165 if ($result < 0) {
166 dol_print_error($db, $result);
167 }
168 }
169}
170
171if ($action == 'confirm_delete' && $confirm == 'yes' && $permissiontodelete) {
172 $db->begin();
173 $result = $object->delete($user);
174
175 if ($result > 0) {
176 $db->commit();
177 if (!empty($backtopage)) {
178 header("Location: ".$backtopage);
179 } else {
180 header("Location: ".DOL_URL_ROOT.'/expedition/list.php?restore_lastsearch_values=1');
181 }
182 exit;
183 } else {
184 $db->rollback();
185 }
186}
187
188if ($action == 'setdate_delivery' && $permissiontoadd) {
189 $datedelivery = dol_mktime(GETPOSTINT('liv_hour'), GETPOSTINT('liv_min'), 0, GETPOSTINT('liv_month'), GETPOSTINT('liv_day'), GETPOSTINT('liv_year'));
190 $result = $object->setDeliveryDate($user, $datedelivery);
191 if ($result < 0) {
192 $mesg = '<div class="error">'.$object->error.'</div>';
193 }
194} elseif ($action == 'set_incoterms' && isModEnabled('incoterm')) {
195 // Set incoterm
196 $result = $object->setIncoterms(GETPOSTINT('incoterm_id'), GETPOSTINT('location_incoterms'));
197}
198
199// Update extrafields
200if ($action == 'update_extras' && $permissiontoadd) {
201 $object->oldcopy = dol_clone($object, 2);
202
203 // Fill array 'array_options' with data from update form
204 $ret = $extrafields->setOptionalsFromPost(null, $object, GETPOST('attribute', 'restricthtml'));
205 if ($ret < 0) {
206 $error++;
207 }
208
209 if (!$error) {
210 // Actions on extra fields
211 $result = $object->insertExtraFields('DELIVERY_MODIFY');
212 if ($result < 0) {
213 setEventMessages($object->error, $object->errors, 'errors');
214 $error++;
215 }
216 }
217
218 if ($error) {
219 $action = 'edit_extras';
220 }
221}
222
223// Extrafields line
224if ($action == 'update_extras_line' && $permissiontoadd) {
225 $array_options = array();
226 $num = count($object->lines);
227
228 for ($i = 0; $i < $num; $i++) {
229 // Extrafields
230 $extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
231 $array_options[$i] = $extrafields->getOptionalsFromPost($extralabelsline, $i);
232 // Unset extrafield
233 if (is_array($extralabelsline)) {
234 // Get extra fields
235 foreach ($extralabelsline as $key => $value) {
236 unset($_POST["options_".$key]);
237 }
238 }
239
240 $ret = $object->update_line($object->lines[$i]->id, $array_options[$i]); // extrafields update
241 if ($ret < 0) {
242 $mesg = '<div class="error">'.$object->error.'</div>';
243 $error++;
244 }
245 }
246}
247
248
249// Actions to build doc
250$upload_dir = $conf->expedition->dir_output.'/receipt';
251include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
252
253include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php';
254
255
256/*
257 * View
258 */
259
260$title = $langs->trans('Delivery');
261
262llxHeader('', $title, 'Livraison', '', 0, 0, '', '', '', 'mod-delivery page-card');
263
264$form = new Form($db);
265$formfile = new FormFile($db);
266
267if ($action == 'create') {
268 // Create. Seems to no be used
269} else {
270 // View
271 if ($object->id > 0) {
272 // Origin of a 'livraison' (delivery receipt) is ALWAYS 'expedition' (shipment).
273 // However, origin of shipment in future may differs (commande, proposal, ...)
274 $expedition = new Expedition($db);
275 $result = $expedition->fetch($object->origin_id);
276 $typeobject = $expedition->origin; // example: commande
277 if ($object->origin_id > 0) {
278 $object->fetch_origin();
279 }
280
281 if ($object->id > 0) {
282 $soc = new Societe($db);
283 $soc->fetch($object->socid);
284
286
287 print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
288 print '<input type="hidden" name="token" value="'.newToken().'">';
289 print '<input type="hidden" name="action" value="update_extras_line">';
290 print '<input type="hidden" name="origin" value="'.$object->origin.'">';
291 print '<input type="hidden" name="id" value="'.$object->id.'">';
292 print '<input type="hidden" name="ref" value="'.$object->ref.'">';
293
294 print dol_get_fiche_head($head, 'delivery', $langs->trans("Shipment"), -1, 'dolly');
295
296 /*
297 * Confirmation de la suppression
298 *
299 */
300 if ($action == 'delete') {
301 $expedition_id = GETPOST("expid");
302 print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id.'&expid='.$expedition_id.'&backtopage='.urlencode($backtopage), $langs->trans("DeleteDeliveryReceipt"), $langs->trans("DeleteDeliveryReceiptConfirm", $object->ref), 'confirm_delete', '', '', 1);
303 }
304
305 /*
306 * Confirmation de la validation
307 */
308 if ($action == 'valid') {
309 print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id, $langs->trans("ValidateDeliveryReceipt"), $langs->trans("ValidateDeliveryReceiptConfirm", $object->ref), 'confirm_valid', '', '', 1);
310 }
311
312
313 /*
314 * Delivery
315 */
316
317 if ($typeobject == 'commande' && $expedition->origin_id > 0 && isModEnabled('order')) {
318 $objectsrc = new Commande($db);
319 $objectsrc->fetch($expedition->origin_id);
320 }
321 if ($typeobject == 'propal' && $expedition->origin_id > 0 && isModEnabled("propal")) {
322 $objectsrc = new Propal($db);
323 $objectsrc->fetch($expedition->origin_id);
324 }
325
326 // Shipment card
327 $linkback = '<a href="'.DOL_URL_ROOT.'/expedition/list.php?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
328
329 $morehtmlref = '<div class="refidno">';
330 // Ref customer shipment
331 $morehtmlref .= $form->editfieldkey("RefCustomer", '', $expedition->ref_customer, $expedition, $user->hasRight('expedition', 'creer'), 'string', '', 0, 1);
332 $morehtmlref .= $form->editfieldval("RefCustomer", '', $expedition->ref_customer, $expedition, $user->hasRight('expedition', 'creer'), 'string'.(getDolGlobalString('THIRDPARTY_REF_INPUT_SIZE') ? ':' . getDolGlobalString('THIRDPARTY_REF_INPUT_SIZE') : ''), '', null, null, '', 1);
333 $morehtmlref .= '<br>'.$langs->trans("RefDeliveryReceipt").' : '.$object->ref;
334 // Thirdparty
335 $morehtmlref .= '<br>'.$expedition->thirdparty->getNomUrl(1);
336 // Project
337 if (isModEnabled('project')) {
338 $langs->load("projects");
339 $morehtmlref .= '<br>';
340 if (0) { // Do not change on shipment
341 $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"');
342 if ($action != 'classify') {
343 $morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> ';
344 }
345 $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $objectsrc->socid, $objectsrc->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, 0, 0, 1, '', 'maxwidth300');
346 } else {
347 if (!empty($objectsrc->fk_project)) {
348 $proj = new Project($db);
349 $proj->fetch($objectsrc->fk_project);
350 $morehtmlref .= $proj->getNomUrl(1);
351 if ($proj->title) {
352 $morehtmlref .= '<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).'</span>';
353 }
354 }
355 }
356 }
357 $morehtmlref .= '</div>';
358
359 $morehtmlstatus = $langs->trans("StatusReceipt").' : '.$object->getLibStatut(6).'<br><br class="small">';
360
361 dol_banner_tab($expedition, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref, '', 0, '', $morehtmlstatus);
362
363
364 print '<div class="fichecenter">';
365 print '<div class="underbanner clearboth"></div>';
366
367 print '<table class="border tableforfield" width="100%">';
368
369 // Shipment
370 /*
371 if (($object->origin == 'shipment' || $object->origin == 'expedition') && $object->origin_id > 0)
372 {
373 $linkback = '<a href="'.DOL_URL_ROOT.'/expedition/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
374
375 // Ref
376 print '<tr><td width="20%">'.$langs->trans("RefSending").'</td>';
377 print '<td colspan="3">';
378 // Nav is hidden because on a delivery receipt of a shipment, if we go on next shipment, we may find no tab (a shipment may not have delivery receipt yet)
379 //print $form->showrefnav($expedition, 'refshipment', $linkback, 1, 'ref', 'ref');
380 print $form->showrefnav($expedition, 'refshipment', $linkback, 0, 'ref', 'ref');
381 print '</td></tr>';
382 }
383
384 // Ref
385 print '<tr><td width="20%">'.$langs->trans("Ref").'</td>';
386 print '<td colspan="3">';
387 print $object->ref;
388 print '</td></tr>';
389
390 // Client
391 print '<tr><td width="20%">'.$langs->trans("Customer").'</td>';
392 print '<td colspan="3">'.$soc->getNomUrl(1).'</td>';
393 print "</tr>";
394 */
395
396 // Document origine
397 if ($typeobject == 'commande' && $expedition->origin_id && isModEnabled('order')) {
398 print '<tr><td class="titlefield">'.$langs->trans("RefOrder").'</td>';
399 $order = new Commande($db);
400 $order->fetch($expedition->origin_id);
401 print '<td colspan="3">';
402 print $order->getNomUrl(1, 'commande');
403 print "</td>\n";
404 print '</tr>';
405 }
406 if ($typeobject == 'propal' && $expedition->origin_id && isModEnabled("propal")) {
407 $propal = new Propal($db);
408 $propal->fetch($expedition->origin_id);
409 print '<tr><td class="titlefield">'.$langs->trans("RefProposal").'</td>';
410 print '<td colspan="3">';
411 print $propal->getNomUrl(1, 'expedition');
412 print "</td>\n";
413 print '</tr>';
414 }
415
416 // Date
417 print '<tr><td class="titlefield">'.$langs->trans("DateCreation").'</td>';
418 print '<td colspan="3">'.dol_print_date($object->date_creation, 'dayhour')."</td>\n";
419 print '</tr>';
420
421 // Date delivery real / Received
422 print '<tr><td height="10">';
423 print '<table class="nobordernopadding" width="100%"><tr><td>';
424 print $langs->trans('DateReceived');
425 print '</td>';
426
427 if ($action != 'editdate_delivery') {
428 print '<td class="right"><a class="editfielda" href="'.$_SERVER["PHP_SELF"].'?action=editdate_delivery&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->trans('SetDeliveryDate'), 1).'</a></td>';
429 }
430 print '</tr></table>';
431 print '</td><td colspan="2">';
432 if ($action == 'editdate_delivery') {
433 print '<form name="setdate_delivery" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'" method="post">';
434 print '<input type="hidden" name="token" value="'.newToken().'">';
435 print '<input type="hidden" name="action" value="setdate_delivery">';
436 print $form->selectDate($object->date_delivery ? $object->date_delivery : -1, 'liv_', 1, 1, 0, "setdate_delivery", 1, 1);
437 print '<input type="submit" class="button button-edit" value="'.$langs->trans('Modify').'">';
438 print '</form>';
439 } else {
440 print $object->date_delivery ? dol_print_date($object->date_delivery, 'dayhour') : '&nbsp;';
441 }
442 print '</td>';
443 print '</tr>';
444
445 // Incoterms
446 if (isModEnabled('incoterm')) {
447 print '<tr><td>';
448 print '<table class="centpercent nobordernopadding"><tr><td>';
449 print $langs->trans('IncotermLabel');
450 print '<td><td class="right">';
451 if ($user->hasRight('expedition', 'delivery', 'creer')) {
452 print '<a class="editfielda" href="'.DOL_URL_ROOT.'/delivery/card.php?id='.$object->id.'&action=editincoterm&token='.newToken().'">'.img_edit().'</a>';
453 } else {
454 print '&nbsp;';
455 }
456 print '</td></tr></table>';
457 print '</td>';
458 print '<td colspan="3">';
459 if ($action != 'editincoterm') {
460 print $form->textwithpicto($object->display_incoterms(), $object->label_incoterms, 1);
461 } else {
462 print $form->select_incoterms((!empty($object->fk_incoterms) ? $object->fk_incoterms : ''), (!empty($object->location_incoterms) ? $object->location_incoterms : ''), $_SERVER['PHP_SELF'].'?id='.$object->id);
463 }
464 print '</td></tr>';
465 }
466
467 /* A delivery note should be just more properties of a shipment, so notes are on shipment
468 // Note Public
469 print '<tr><td>'.$langs->trans("NotePublic").'</td>';
470 print '<td colspan="3">';
471 print dol_string_onlythesehtmltags(dol_htmlcleanlastbr($object->note_public));
472 print "</td></tr>";
473
474 // Note Private
475 print '<tr><td>'.$langs->trans("NotePrivate").'</td>';
476 print '<td colspan="3">';
477 print dol_string_onlythesehtmltags(dol_htmlcleanlastbr($object->note_private));
478 print "</td></tr>";
479 */
480
481 // Statut
482 /*print '<tr><td>'.$langs->trans("Status").'</td>';
483 print '<td colspan="3">'.$object->getLibStatut(4)."</td>\n";
484 print '</tr>';*/
485
486
487 if (!getDolGlobalInt('MAIN_SUBMODULE_EXPEDITION') && isModEnabled('stock')) {
488 // Entrepot
489 $entrepot = new Entrepot($db);
490 $entrepot->fetch($expedition->entrepot_id);
491 print '<tr><td width="20%">'.$langs->trans("Warehouse").'</td>';
492 print '<td colspan="3"><a href="'.DOL_URL_ROOT.'/product/stock/card.php?id='.$entrepot->id.'">'.$entrepot->label.'</a></td>';
493 print '</tr>';
494 }
495
496 // Other attributes
497 if ($action == 'create_delivery') {
498 // copy from expedition
499 $extrafields->fetch_name_optionals_label($expedition->table_element);
500 if ($expedition->fetch_optionals() > 0) {
501 $object->array_options = array_merge($object->array_options, $expedition->array_options);
502 }
503 }
504 $cols = 2;
505 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';
506
507 print "</table><br>\n";
508
509 print '</div>';
510
511 /*
512 * Products lines
513 */
514
515 $num_prod = count($object->lines);
516 $i = 0;
517 $total = 0;
518
519 print '<table class="noborder centpercent">';
520
521 if ($num_prod) {
522 $i = 0;
523
524 print '<tr class="liste_titre">';
525 print '<td>'.$langs->trans("Products").'</td>';
526 print '<td class="center">'.$langs->trans("QtyOrdered").'</td>';
527 print '<td class="center">'.$langs->trans("QtyReceived").'</td>';
528 print "</tr>\n";
529 }
530 while ($i < $num_prod) {
531 $parameters = array('i' => $i, 'line' => $object->lines[$i], 'num' => $num_prod);
532 $reshook = $hookmanager->executeHooks('printObjectLine', $parameters, $object, $action);
533 if ($reshook < 0) {
534 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
535 }
536
537 if (empty($reshook)) {
538 print '<tr class="oddeven">';
539 if ($object->lines[$i]->fk_product > 0) {
540 $product = new Product($db);
541 $product->fetch($object->lines[$i]->fk_product);
542
543 // Define output language
544 if (getDolGlobalInt('MAIN_MULTILANGS') && getDolGlobalString('PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE')) {
545 $outputlangs = $langs;
546 $newlang = '';
547 if (empty($newlang) && GETPOST('lang_id', 'aZ09')) {
548 $newlang = GETPOST('lang_id', 'aZ09');
549 }
550 if (empty($newlang)) {
551 $newlang = $object->thirdparty->default_lang;
552 }
553 if (!empty($newlang)) {
554 $outputlangs = new Translate("", $conf);
555 $outputlangs->setDefaultLang($newlang);
556 }
557
558 $label = (!empty($product->multilangs[$outputlangs->defaultlang]["label"])) ? $product->multilangs[$outputlangs->defaultlang]["label"] : $object->lines[$i]->product_label;
559 } else {
560 $label = (!empty($object->lines[$i]->label) ? $object->lines[$i]->label : $object->lines[$i]->product_label);
561 }
562
563 print '<td>';
564
565 // Affiche ligne produit
566 $text = '<a href="'.DOL_URL_ROOT.'/product/card.php?id='.$object->lines[$i]->fk_product.'">';
567 if ($object->lines[$i]->fk_product_type == 1) {
568 $text .= img_object($langs->trans('ShowService'), 'service');
569 } else {
570 $text .= img_object($langs->trans('ShowProduct'), 'product');
571 }
572 $text .= ' '.$object->lines[$i]->product_ref.'</a>';
573 $text .= ' - '.$label;
574 $description = (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE') ? '' : dol_htmlentitiesbr($object->lines[$i]->description));
575 //print $description;
576 print $form->textwithtooltip($text, $description, 3, '', '', $i);
577 //print_date_range($object->lines[$i]->date_start, $object->lines[$i]->date_end);
578 if (getDolGlobalInt('PRODUIT_DESC_IN_FORM_ACCORDING_TO_DEVICE')) {
579 print (!empty($object->lines[$i]->description) && $object->lines[$i]->description != $object->lines[$i]->product_label) ? '<br>'.dol_htmlentitiesbr($object->lines[$i]->description) : '';
580 }
581 } else {
582 print "<td>";
583 if ($object->lines[$i]->fk_product_type == 1) {
584 $text = img_object($langs->trans('Service'), 'service');
585 } else {
586 $text = img_object($langs->trans('Product'), 'product');
587 }
588
589 if (!empty($object->lines[$i]->label)) {
590 $text .= ' <strong>'.$object->lines[$i]->label.'</strong>';
591 print $form->textwithtooltip($text, $object->lines[$i]->description, 3, '', '', $i);
592 } else {
593 print $text.' '.nl2br($object->lines[$i]->description);
594 }
595
596 //print_date_range($objp->date_start, $objp->date_end);
597 print "</td>\n";
598 }
599
600 print '<td class="center">'.$object->lines[$i]->qty_asked.'</td>';
601 print '<td class="center">'.$object->lines[$i]->qty_shipped.'</td>';
602
603 print "</tr>";
604
605 // Display lines extrafields
606 //if (!empty($extrafields)) {
607 $colspan = 2;
608 $mode = ($object->statut == 0) ? 'edit' : 'view';
609
610 $object->lines[$i]->fetch_optionals();
611
612 if ($action == 'create_delivery') {
613 $srcLine = new ExpeditionLigne($db);
614
615 $extrafields->fetch_name_optionals_label($srcLine->table_element);
616 $srcLine->id = $expedition->lines[$i]->id;
617 $srcLine->fetch_optionals();
618
619 $object->lines[$i]->array_options = array_merge($object->lines[$i]->array_options, $srcLine->array_options);
620 } else {
621 $srcLine = new DeliveryLine($db);
622 $extrafields->fetch_name_optionals_label($srcLine->table_element);
623 }
624 print $object->lines[$i]->showOptionals($extrafields, $mode, array('style' => 'class="oddeven"', 'colspan' => $colspan), '');
625 //}
626 }
627
628 $i++;
629 }
630
631 print "</table>\n";
632
633 print dol_get_fiche_end();
634
635 //if ($object->statut == 0) // only if draft
636 // print $form->buttonsSaveCancel("Save", '');
637
638 print '</form>';
639
640
641 /*
642 * Boutons actions
643 */
644
645 if ($user->socid == 0) {
646 print '<div class="tabsAction">';
647
648 if ($object->statut == 0 && $num_prod > 0) {
649 if ((!getDolGlobalString('MAIN_USE_ADVANCED_PERMS') && $user->hasRight('expedition', 'delivery', 'creer'))
650 || (getDolGlobalString('MAIN_USE_ADVANCED_PERMS') && $user->hasRight('expedition', 'delivery_advance', 'validate'))) {
651 print dolGetButtonAction('', $langs->trans('Validate'), 'default', $_SERVER["PHP_SELF"].'?action=valid&amp;token='.newToken().'&amp;id='.$object->id, '');
652 }
653 }
654
655 if ($user->hasRight('expedition', 'delivery', 'supprimer')) {
656 if (getDolGlobalInt('MAIN_SUBMODULE_EXPEDITION')) {
657 print dolGetButtonAction('', $langs->trans('Delete'), 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;expid='.$object->origin_id.'&amp;action=delete&amp;token='.newToken().'&amp;backtopage='.urlencode(DOL_URL_ROOT.'/expedition/card.php?id='.$object->origin_id), '');
658 } else {
659 print dolGetButtonAction('', $langs->trans('Delete'), 'delete', $_SERVER["PHP_SELF"].'?action=delete&amp;token='.newToken().'&amp;id='.$object->id, '');
660 }
661 }
662
663 print '</div>';
664 }
665 print "\n";
666
667 print '<div class="fichecenter"><div class="fichehalfleft">';
668
669 /*
670 * Documents generated
671 */
672
673 $objectref = dol_sanitizeFileName($object->ref);
674 $filedir = $conf->expedition->dir_output."/receipt/".$objectref;
675 $urlsource = $_SERVER["PHP_SELF"]."?id=".$object->id;
676
677 $genallowed = $user->hasRight('expedition', 'delivery', 'lire');
678 $delallowed = $user->hasRight('expedition', 'delivery', 'creer');
679
680 print $formfile->showdocuments('delivery', $objectref, $filedir, $urlsource, $genallowed, $delallowed, $object->model_pdf, 1, 0, 0, 28, 0, '', '', '', $soc->default_lang);
681
682 /*
683 * Linked object block (of linked shipment)
684 */
685 if ($object->origin == 'expedition') {
686 $shipment = new Expedition($db);
687 $shipment->fetch($object->origin_id);
688
689 // Show links to link elements
690 //$linktoelem = $form->showLinkToObjectBlock($object, null, array('order'));
691 $somethingshown = $form->showLinkedObjectBlock($object, '');
692 }
693
694
695 print '</div><div class="fichehalfright">';
696
697 // Nothing on right
698
699 print '</div></div>';
700 } else {
701 /* Expedition non trouvee */
702 print "Expedition inexistante ou access refuse";
703 }
704 } else {
705 /* Expedition non trouvee */
706 print "Expedition inexistante ou access refuse";
707 }
708}
709
710// End of page
711llxFooter();
712$db->close();
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:58
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
Definition wrapper.php:55
llxFooter()
Empty footer.
Definition wrapper.php:69
Class to manage customers orders.
Class to manage receptions.
Management class of delivery note lines.
Class to manage warehouses.
Class to manage shipments.
Class to manage lines of shipment.
Class to manage standard extra fields.
Class to offer components to list and upload files.
Class to manage generation of HTML components Only common components must be here.
Class to manage products or services.
Class to manage projects.
Class to manage proposals.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
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...
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
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.
dol_now($mode='auto')
Return date for now.
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).
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dol_clone($object, $native=0)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
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 dolibarr global constant string value.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
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.
delivery_prepare_head($object)
Prepare array with list of tabs.