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';
41if (isModEnabled(
'shipping')) {
42 require_once DOL_DOCUMENT_ROOT.
'/expedition/class/expedition.class.php';
44if (isModEnabled(
'stock')) {
45 require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
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';
53$langs->loadLangs(array(
'bills',
'deliveries',
'orders',
'sendings'));
55if (isModEnabled(
'incoterm')) {
56 $langs->load(
'incoterm');
59$action =
GETPOST(
'action',
'aZ09');
60$confirm =
GETPOST(
'confirm',
'alpha');
61$backtopage =
GETPOST(
'backtopage',
'alpha');
65$hookmanager->initHooks(array(
'deliverycard',
'globalcard'));
72$extrafields->fetch_name_optionals_label(
$object->table_element);
75$extrafields->fetch_name_optionals_label(
$object->table_element_line);
78include DOL_DOCUMENT_ROOT.
'/core/actions_fetchobject.inc.php';
85 $socid = $user->socid;
87$result =
restrictedArea($user,
'expedition', $id,
'delivery',
'delivery');
89$permissiontoread = $user->hasRight(
'expedition',
'delivery',
'read');
90$permissiontoadd = $user->hasRight(
'expedition',
'delivery',
'creer');
91$permissiontodelete = $user->hasRight(
'expedition',
'delivery',
'supprimer') || ($permissiontoadd && isset(
$object->status) &&
$object->status == $object::STATUS_DRAFT);
92$permissiontovalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'expedition',
'delivery',
'creer')) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'expedition',
'delivery_advance',
'validate')));
93$permissionnote = $user->hasRight(
'expedition',
'delivery',
'creer');
94$permissiondellink = $user->hasRight(
'expedition',
'delivery',
'creer');
101$parameters = array();
102$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
104$permissiondellink = $user->hasRight(
'expedition',
'delivery',
'supprimer');
105include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
107if ($action ==
'add' && $permissiontoadd) {
123 $commande->fetch(
$object->commande_id);
124 $commande->fetch_lines();
125 $num = count($commande->lines);
126 for ($i = 0; $i < $num; $i++) {
138 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
146} elseif ($action ==
'confirm_valid' && $confirm ==
'yes' && $permissiontovalidate) {
147 $result =
$object->valid($user);
151 $outputlangs = $langs;
154 $newlang =
GETPOST(
'lang_id',
'aZ09');
157 $newlang =
$object->thirdparty->default_lang;
159 if (!empty($newlang)) {
161 $outputlangs->setDefaultLang($newlang);
166 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
173if ($action ==
'confirm_delete' && $confirm ==
'yes' && $permissiontodelete) {
175 $result =
$object->delete($user);
179 if (!empty($backtopage)) {
180 header(
"Location: ".$backtopage);
182 header(
"Location: ".DOL_URL_ROOT.
'/expedition/list.php?restore_lastsearch_values=1');
190if ($action ==
'setdate_delivery' && $permissiontoadd) {
192 $result =
$object->setDeliveryDate($user, $datedelivery);
194 $mesg =
'<div class="error">'.$object->error.
'</div>';
196} elseif ($action ==
'set_incoterms' && isModEnabled(
'incoterm')) {
202if ($action ==
'update_extras' && $permissiontoadd) {
206 $ret = $extrafields->setOptionalsFromPost(
null,
$object,
GETPOST(
'attribute',
'restricthtml'));
213 $result =
$object->insertExtraFields(
'DELIVERY_MODIFY');
221 $action =
'edit_extras';
226if ($action ==
'update_extras_line' && $permissiontoadd) {
227 $array_options = array();
230 for ($i = 0; $i < $num; $i++) {
232 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
233 $array_options[$i] = $extrafields->getOptionalsFromPost($extralabelsline, $i);
235 if (is_array($extralabelsline)) {
237 foreach ($extralabelsline as $key => $value) {
238 unset($_POST[
"options_".$key]);
242 $ret =
$object->update_line(
$object->lines[$i]->id, $array_options[$i]);
244 $mesg =
'<div class="error">'.$object->error.
'</div>';
252$upload_dir = $conf->expedition->dir_output.
'/receipt';
253include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
255include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
262$title = $langs->trans(
'Delivery');
264llxHeader(
'', $title,
'Livraison',
'', 0, 0,
'',
'',
'',
'mod-delivery page-card');
266$form =
new Form($db);
269if ($action ==
'create') {
277 $result = $expedition->fetch(
$object->origin_id);
278 $typeobject = $expedition->origin;
289 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
290 print
'<input type="hidden" name="token" value="'.newToken().
'">';
291 print
'<input type="hidden" name="action" value="update_extras_line">';
292 print
'<input type="hidden" name="origin" value="'.$object->origin.
'">';
293 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
294 print
'<input type="hidden" name="ref" value="'.$object->ref.
'">';
302 if ($action ==
'delete') {
303 $expedition_id =
GETPOST(
"expid");
304 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);
310 if ($action ==
'valid') {
311 print $form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $langs->trans(
"ValidateDeliveryReceipt"), $langs->trans(
"ValidateDeliveryReceiptConfirm",
$object->ref),
'confirm_valid',
'',
'', 1);
319 if ($typeobject ==
'commande' && $expedition->origin_id > 0 && isModEnabled(
'order')) {
321 $objectsrc->fetch($expedition->origin_id);
323 if ($typeobject ==
'propal' && $expedition->origin_id > 0 && isModEnabled(
"propal")) {
324 $objectsrc =
new Propal($db);
325 $objectsrc->fetch($expedition->origin_id);
329 $linkback =
'<a href="'.DOL_URL_ROOT.
'/expedition/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
331 $morehtmlref =
'<div class="refidno">';
333 $morehtmlref .= $form->editfieldkey(
"RefCustomer",
'', $expedition->ref_customer, $expedition, $user->hasRight(
'expedition',
'creer'),
'string',
'', 0, 1);
334 $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);
335 $morehtmlref .=
'<br>'.$langs->trans(
"RefDeliveryReceipt").
' : '.
$object->ref;
337 $morehtmlref .=
'<br>'.$expedition->thirdparty->getNomUrl(1);
339 if (isModEnabled(
'project')) {
340 $langs->load(
"projects");
341 $morehtmlref .=
'<br>';
343 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
344 if ($action !=
'classify') {
345 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
347 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $objectsrc->socid, $objectsrc->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
349 if (!empty($objectsrc->fk_project)) {
351 $proj->fetch($objectsrc->fk_project);
352 $morehtmlref .= $proj->getNomUrl(1);
354 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
359 $morehtmlref .=
'</div>';
361 $morehtmlstatus = $langs->trans(
"StatusReceipt").
' : '.
$object->getLibStatut(6).
'<br><br class="small">';
363 dol_banner_tab($expedition,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref,
'', 0,
'', $morehtmlstatus);
366 print
'<div class="fichecenter">';
367 print
'<div class="underbanner clearboth"></div>';
369 print
'<table class="border tableforfield" width="100%">';
399 if ($typeobject ==
'commande' && $expedition->origin_id && isModEnabled(
'order')) {
400 print
'<tr><td class="titlefield">'.$langs->trans(
"RefOrder").
'</td>';
402 $order->fetch($expedition->origin_id);
403 print
'<td colspan="3">';
404 print $order->getNomUrl(1,
'commande');
408 if ($typeobject ==
'propal' && $expedition->origin_id && isModEnabled(
"propal")) {
409 $propal =
new Propal($db);
410 $propal->fetch($expedition->origin_id);
411 print
'<tr><td class="titlefield">'.$langs->trans(
"RefProposal").
'</td>';
412 print
'<td colspan="3">';
413 print $propal->getNomUrl(1,
'expedition');
419 print
'<tr><td class="titlefield">'.$langs->trans(
"DateCreation").
'</td>';
420 print
'<td colspan="3">'.dol_print_date(
$object->date_creation,
'dayhour').
"</td>\n";
424 print
'<tr><td height="10">';
425 print
'<table class="nobordernopadding" width="100%"><tr><td>';
426 print $langs->trans(
'DateReceived');
429 if ($action !=
'editdate_delivery') {
430 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>';
432 print
'</tr></table>';
433 print
'</td><td colspan="2">';
434 if ($action ==
'editdate_delivery') {
435 print
'<form name="setdate_delivery" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
436 print
'<input type="hidden" name="token" value="'.newToken().
'">';
437 print
'<input type="hidden" name="action" value="setdate_delivery">';
438 print $form->selectDate(
$object->date_delivery ?
$object->date_delivery : -1,
'liv_', 1, 1, 0,
"setdate_delivery", 1, 1);
439 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
448 if (isModEnabled(
'incoterm')) {
450 print
'<table class="centpercent nobordernopadding"><tr><td>';
451 print $langs->trans(
'IncotermLabel');
452 print
'<td><td class="right">';
453 if ($user->hasRight(
'expedition',
'delivery',
'creer')) {
454 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/delivery/card.php?id='.
$object->id.
'&action=editincoterm&token='.
newToken().
'">'.
img_edit().
'</a>';
458 print
'</td></tr></table>';
460 print
'<td colspan="3">';
461 if ($action !=
'editincoterm') {
462 print $form->textwithpicto(
$object->display_incoterms(),
$object->label_incoterms, 1);
464 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
489 if (!
getDolGlobalInt(
'MAIN_SUBMODULE_EXPEDITION') && isModEnabled(
'stock')) {
492 $entrepot->fetch($expedition->entrepot_id);
493 print
'<tr><td width="20%">'.$langs->trans(
"Warehouse").
'</td>';
494 print
'<td colspan="3"><a href="'.DOL_URL_ROOT.
'/product/stock/card.php?id='.$entrepot->id.
'">'.$entrepot->label.
'</a></td>';
499 if ($action ==
'create_delivery') {
501 $extrafields->fetch_name_optionals_label($expedition->table_element);
502 if ($expedition->fetch_optionals() > 0) {
503 $object->array_options = array_merge(
$object->array_options, $expedition->array_options);
507 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
509 print
"</table><br>\n";
517 $num_prod = count(
$object->lines);
521 print
'<table class="noborder centpercent">';
526 print
'<tr class="liste_titre">';
527 print
'<td>'.$langs->trans(
"Products").
'</td>';
528 print
'<td class="center">'.$langs->trans(
"QtyOrdered").
'</td>';
529 print
'<td class="center">'.$langs->trans(
"QtyReceived").
'</td>';
532 while ($i < $num_prod) {
533 $parameters = array(
'i' => $i,
'line' =>
$object->lines[$i],
'num' => $num_prod);
534 $reshook = $hookmanager->executeHooks(
'printObjectLine', $parameters,
$object, $action);
539 if (empty($reshook)) {
540 print
'<tr class="oddeven">';
541 if (
$object->lines[$i]->fk_product > 0) {
543 $product->fetch(
$object->lines[$i]->fk_product);
547 $outputlangs = $langs;
549 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
550 $newlang =
GETPOST(
'lang_id',
'aZ09');
552 if (empty($newlang)) {
553 $newlang =
$object->thirdparty->default_lang;
555 if (!empty($newlang)) {
557 $outputlangs->setDefaultLang($newlang);
560 $label = (!empty($product->multilangs[$outputlangs->defaultlang][
"label"])) ? $product->multilangs[$outputlangs->defaultlang][
"label"] :
$object->lines[$i]->product_label;
562 $label = (!empty(
$object->lines[$i]->label) ?
$object->lines[$i]->label :
$object->lines[$i]->product_label);
568 $text =
'<a href="'.DOL_URL_ROOT.
'/product/card.php?id='.
$object->lines[$i]->fk_product.
'">';
569 if (
$object->lines[$i]->fk_product_type == 1) {
570 $text .=
img_object($langs->trans(
'ShowService'),
'service');
572 $text .=
img_object($langs->trans(
'ShowProduct'),
'product');
574 $text .=
' '.$object->lines[$i]->product_ref.
'</a>';
575 $text .=
' - '.$label;
578 print $form->textwithtooltip($text, $description, 3,
'',
'', $i);
581 print (!empty(
$object->lines[$i]->description) &&
$object->lines[$i]->description !=
$object->lines[$i]->product_label) ?
'<br>'.dol_htmlentitiesbr(
$object->lines[$i]->description) :
'';
585 if (
$object->lines[$i]->fk_product_type == 1) {
586 $text =
img_object($langs->trans(
'Service'),
'service');
588 $text =
img_object($langs->trans(
'Product'),
'product');
591 if (!empty(
$object->lines[$i]->label)) {
592 $text .=
' <strong>'.$object->lines[$i]->label.
'</strong>';
593 print $form->textwithtooltip($text,
$object->lines[$i]->description, 3,
'',
'', $i);
595 print $text.
' '.nl2br(
$object->lines[$i]->description);
602 print
'<td class="center">'.$object->lines[$i]->qty_asked.
'</td>';
603 print
'<td class="center">'.$object->lines[$i]->qty_shipped.
'</td>';
610 $mode = (
$object->statut == 0) ?
'edit' :
'view';
612 $object->lines[$i]->fetch_optionals();
614 if ($action ==
'create_delivery') {
617 $extrafields->fetch_name_optionals_label($srcLine->table_element);
618 $srcLine->id = $expedition->lines[$i]->id;
619 $srcLine->fetch_optionals();
621 $object->lines[$i]->array_options = array_merge(
$object->lines[$i]->array_options, $srcLine->array_options);
624 $extrafields->fetch_name_optionals_label($srcLine->table_element);
626 print
$object->lines[$i]->showOptionals($extrafields, $mode, array(
'style' =>
'class="oddeven"',
'colspan' => $colspan),
'');
647 if ($user->socid == 0) {
648 print
'<div class="tabsAction">';
650 if (
$object->statut == 0 && $num_prod > 0) {
651 if ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'expedition',
'delivery',
'creer'))
652 || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'expedition',
'delivery_advance',
'validate'))) {
657 if ($user->hasRight(
'expedition',
'delivery',
'supprimer')) {
659 print
dolGetButtonAction(
'', $langs->trans(
'Delete'),
'delete', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&expid='.
$object->origin_id.
'&action=delete&token='.
newToken().
'&backtopage='.urlencode(DOL_URL_ROOT.
'/expedition/card.php?id='.
$object->origin_id),
'');
669 print
'<div class="fichecenter"><div class="fichehalfleft">';
676 $filedir = $conf->expedition->dir_output.
"/receipt/".$objectref;
677 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
679 $genallowed = $user->hasRight(
'expedition',
'delivery',
'lire');
680 $delallowed = $user->hasRight(
'expedition',
'delivery',
'creer');
682 print $formfile->showdocuments(
'delivery', $objectref, $filedir, $urlsource, $genallowed, $delallowed,
$object->model_pdf, 1, 0, 0, 28, 0,
'',
'',
'', $soc->default_lang);
687 if (
$object->origin ==
'expedition') {
689 $shipment->fetch(
$object->origin_id);
693 $somethingshown = $form->showLinkedObjectBlock(
$object,
'');
697 print
'</div><div class="fichehalfright">';
701 print
'</div></div>';
704 print
"Expedition inexistante ou access refuse";
708 print
"Expedition inexistante ou access refuse";
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage 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 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 a 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.