32require
'../main.inc.php';
33require_once DOL_DOCUMENT_ROOT.
'/delivery/class/delivery.class.php';
34require_once DOL_DOCUMENT_ROOT.
'/core/modules/delivery/modules_delivery.php';
35require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
36require_once DOL_DOCUMENT_ROOT.
'/core/lib/sendings.lib.php';
37require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
38require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
39if (isModEnabled(
"product") || isModEnabled(
"service")) {
40 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
42if (isModEnabled(
'shipping')) {
43 require_once DOL_DOCUMENT_ROOT.
'/expedition/class/expedition.class.php';
45if (isModEnabled(
'stock')) {
46 require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
48if (isModEnabled(
'project')) {
49 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
50 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
62$langs->loadLangs(array(
'bills',
'deliveries',
'orders',
'sendings'));
64if (isModEnabled(
'incoterm')) {
65 $langs->load(
'incoterm');
68$action =
GETPOST(
'action',
'aZ09');
69$confirm =
GETPOST(
'confirm',
'alpha');
70$backtopage =
GETPOST(
'backtopage',
'alpha');
75$hookmanager->initHooks(array(
'deliverycard',
'globalcard'));
81$extrafields->fetch_name_optionals_label(
$object->table_element);
84$extrafields->fetch_name_optionals_label(
$object->table_element_line);
87include DOL_DOCUMENT_ROOT.
'/core/actions_fetchobject.inc.php';
93 $socid = $user->socid;
95$result =
restrictedArea($user,
'expedition', $id,
'delivery',
'delivery');
97$permissiontoread = $user->hasRight(
'expedition',
'delivery',
'read');
98$permissiontoadd = $user->hasRight(
'expedition',
'delivery',
'creer');
99$permissiontodelete = $user->hasRight(
'expedition',
'delivery',
'supprimer') || ($permissiontoadd && isset(
$object->status) &&
$object->status == $object::STATUS_DRAFT);
100$permissiontovalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'expedition',
'delivery',
'creer')) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'expedition',
'delivery_advance',
'validate')));
101$permissionnote = $user->hasRight(
'expedition',
'delivery',
'creer');
102$permissiondellink = $user->hasRight(
'expedition',
'delivery',
'creer');
109$parameters = array();
110$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
112$permissiondellink = $user->hasRight(
'expedition',
'delivery',
'supprimer');
113include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
115if ($action ==
'add' && $permissiontoadd) {
131 $commande->fetch(
$object->commande_id);
132 $commande->fetch_lines();
133 $num = count($commande->lines);
134 for ($i = 0; $i < $num; $i++) {
146 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
154} elseif ($action ==
'confirm_valid' && $confirm ==
'yes' && $permissiontovalidate) {
155 $result =
$object->valid($user);
159 $outputlangs = $langs;
162 $newlang =
GETPOST(
'lang_id',
'aZ09');
165 $newlang =
$object->thirdparty->default_lang;
167 if (!empty($newlang)) {
169 $outputlangs->setDefaultLang($newlang);
174 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
181if ($action ==
'confirm_delete' && $confirm ==
'yes' && $permissiontodelete) {
183 $result =
$object->delete($user);
187 if (!empty($backtopage)) {
188 header(
"Location: ".$backtopage);
190 header(
"Location: ".DOL_URL_ROOT.
'/expedition/list.php?restore_lastsearch_values=1');
198if ($action ==
'setdate_delivery' && $permissiontoadd) {
200 $result =
$object->setDeliveryDate($user, $datedelivery);
202 $mesg =
'<div class="error">'.$object->error.
'</div>';
204} elseif ($action ==
'set_incoterms' && isModEnabled(
'incoterm')) {
210if ($action ==
'update_extras' && $permissiontoadd) {
214 $ret = $extrafields->setOptionalsFromPost(
null,
$object,
GETPOST(
'attribute',
'restricthtml'));
221 $result =
$object->insertExtraFields(
'DELIVERY_MODIFY');
229 $action =
'edit_extras';
234if ($action ==
'update_extras_line' && $permissiontoadd) {
235 $array_options = array();
238 for ($i = 0; $i < $num; $i++) {
240 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
241 $array_options[$i] = $extrafields->getOptionalsFromPost($extralabelsline, $i);
243 if (is_array($extralabelsline)) {
245 foreach ($extralabelsline as $key => $value) {
246 unset($_POST[
"options_".$key]);
250 $ret =
$object->update_line(
$object->lines[$i]->id, $array_options[$i]);
252 $mesg =
'<div class="error">'.$object->error.
'</div>';
260$upload_dir =
$conf->expedition->dir_output.
'/receipt';
261include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
263include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
270$title = $langs->trans(
'Delivery');
272llxHeader(
'', $title,
'Livraison',
'', 0, 0,
'',
'',
'',
'mod-delivery page-card');
274$form =
new Form($db);
277if ($action ==
'create') {
285 $result = $expedition->fetch(
$object->origin_id);
286 $typeobject = $expedition->origin;
297 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
298 print
'<input type="hidden" name="token" value="'.newToken().
'">';
299 print
'<input type="hidden" name="action" value="update_extras_line">';
300 print
'<input type="hidden" name="origin" value="'.$object->origin.
'">';
301 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
302 print
'<input type="hidden" name="ref" value="'.$object->ref.
'">';
310 if ($action ==
'delete') {
311 $expedition_id =
GETPOST(
"expid");
312 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);
318 if ($action ==
'valid') {
319 print $form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $langs->trans(
"ValidateDeliveryReceipt"), $langs->trans(
"ValidateDeliveryReceiptConfirm",
$object->ref),
'confirm_valid',
'',
'', 1);
327 if ($typeobject ==
'commande' && $expedition->origin_id > 0 && isModEnabled(
'order')) {
329 $objectsrc->fetch($expedition->origin_id);
331 if ($typeobject ==
'propal' && $expedition->origin_id > 0 && isModEnabled(
"propal")) {
332 $objectsrc =
new Propal($db);
333 $objectsrc->fetch($expedition->origin_id);
337 $linkback =
'<a href="'.DOL_URL_ROOT.
'/expedition/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
339 $morehtmlref =
'<div class="refidno">';
341 $morehtmlref .= $form->editfieldkey(
"RefCustomer",
'', $expedition->ref_customer, $expedition, $user->hasRight(
'expedition',
'creer'),
'string',
'', 0, 1);
342 $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);
343 $morehtmlref .=
'<br>'.$langs->trans(
"RefDeliveryReceipt").
' : '.
$object->ref;
345 $morehtmlref .=
'<br>'.$expedition->thirdparty->getNomUrl(1);
347 if (isModEnabled(
'project')) {
348 $langs->load(
"projects");
349 $morehtmlref .=
'<br>';
351 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
352 if ($action !=
'classify') {
353 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
355 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $objectsrc->socid, $objectsrc->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
357 if (!empty($objectsrc->fk_project)) {
359 $proj->fetch($objectsrc->fk_project);
360 $morehtmlref .= $proj->getNomUrl(1);
362 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
367 $morehtmlref .=
'</div>';
369 $morehtmlstatus = $langs->trans(
"StatusReceipt").
' : '.
$object->getLibStatut(6).
'<br><br class="small">';
371 dol_banner_tab($expedition,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref,
'', 0,
'', $morehtmlstatus);
374 print
'<div class="fichecenter">';
375 print
'<div class="underbanner clearboth"></div>';
377 print
'<table class="border tableforfield" width="100%">';
407 if ($typeobject ==
'commande' && $expedition->origin_id && isModEnabled(
'order')) {
408 print
'<tr><td class="titlefield">'.$langs->trans(
"RefOrder").
'</td>';
410 $order->fetch($expedition->origin_id);
411 print
'<td colspan="3">';
412 print $order->getNomUrl(1,
'commande');
416 if ($typeobject ==
'propal' && $expedition->origin_id && isModEnabled(
"propal")) {
417 $propal =
new Propal($db);
418 $propal->fetch($expedition->origin_id);
419 print
'<tr><td class="titlefield">'.$langs->trans(
"RefProposal").
'</td>';
420 print
'<td colspan="3">';
421 print $propal->getNomUrl(1,
'expedition');
427 print
'<tr><td class="titlefield">'.$langs->trans(
"DateCreation").
'</td>';
428 print
'<td colspan="3">'.dol_print_date(
$object->date_creation,
'dayhour').
"</td>\n";
432 print
'<tr><td height="10">';
433 print
'<table class="nobordernopadding" width="100%"><tr><td>';
434 print $langs->trans(
'DateReceived');
437 if ($action !=
'editdate_delivery') {
438 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>';
440 print
'</tr></table>';
441 print
'</td><td colspan="2">';
442 if ($action ==
'editdate_delivery') {
443 print
'<form name="setdate_delivery" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
444 print
'<input type="hidden" name="token" value="'.newToken().
'">';
445 print
'<input type="hidden" name="action" value="setdate_delivery">';
446 print $form->selectDate(
$object->date_delivery ?
$object->date_delivery : -1,
'liv_', 1, 1, 0,
"setdate_delivery", 1, 1);
447 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
456 if (isModEnabled(
'incoterm')) {
458 print
'<table class="centpercent nobordernopadding"><tr><td>';
459 print $langs->trans(
'IncotermLabel');
460 print
'<td><td class="right">';
461 if ($user->hasRight(
'expedition',
'delivery',
'creer')) {
462 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/delivery/card.php?id='.
$object->id.
'&action=editincoterm&token='.
newToken().
'">'.
img_edit().
'</a>';
466 print
'</td></tr></table>';
468 print
'<td colspan="3">';
469 if ($action !=
'editincoterm') {
470 print $form->textwithpicto(
$object->display_incoterms(),
$object->label_incoterms, 1);
472 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
497 if (!
getDolGlobalInt(
'MAIN_SUBMODULE_EXPEDITION') && isModEnabled(
'stock')) {
500 $entrepot->fetch($expedition->entrepot_id);
501 print
'<tr><td width="20%">'.$langs->trans(
"Warehouse").
'</td>';
502 print
'<td colspan="3"><a href="'.DOL_URL_ROOT.
'/product/stock/card.php?id='.$entrepot->id.
'">'.$entrepot->label.
'</a></td>';
507 if ($action ==
'create_delivery') {
509 $extrafields->fetch_name_optionals_label($expedition->table_element);
510 if ($expedition->fetch_optionals() > 0) {
511 $object->array_options = array_merge(
$object->array_options, $expedition->array_options);
515 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
517 print
"</table><br>\n";
525 $num_prod = count(
$object->lines);
529 print
'<table class="noborder centpercent">';
534 print
'<tr class="liste_titre">';
535 print
'<td>'.$langs->trans(
"Products").
'</td>';
536 print
'<td class="center">'.$langs->trans(
"QtyOrdered").
'</td>';
537 print
'<td class="center">'.$langs->trans(
"QtyReceived").
'</td>';
540 while ($i < $num_prod) {
541 $parameters = array(
'i' => $i,
'line' =>
$object->lines[$i],
'num' => $num_prod);
542 $reshook = $hookmanager->executeHooks(
'printObjectLine', $parameters,
$object, $action);
547 if (empty($reshook)) {
548 print
'<tr class="oddeven">';
549 if (
$object->lines[$i]->fk_product > 0) {
551 $product->fetch(
$object->lines[$i]->fk_product);
555 $outputlangs = $langs;
557 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
558 $newlang =
GETPOST(
'lang_id',
'aZ09');
560 if (empty($newlang)) {
561 $newlang =
$object->thirdparty->default_lang;
563 if (!empty($newlang)) {
565 $outputlangs->setDefaultLang($newlang);
568 $label = (!empty($product->multilangs[$outputlangs->defaultlang][
"label"])) ? $product->multilangs[$outputlangs->defaultlang][
"label"] :
$object->lines[$i]->product_label;
570 $label = (!empty(
$object->lines[$i]->label) ?
$object->lines[$i]->label :
$object->lines[$i]->product_label);
576 $text =
'<a href="'.DOL_URL_ROOT.
'/product/card.php?id='.
$object->lines[$i]->fk_product.
'">';
577 if (
$object->lines[$i]->fk_product_type == 1) {
578 $text .=
img_object($langs->trans(
'ShowService'),
'service');
580 $text .=
img_object($langs->trans(
'ShowProduct'),
'product');
582 $text .=
' '.$object->lines[$i]->product_ref.
'</a>';
583 $text .=
' - '.$label;
586 print $form->textwithtooltip($text, $description, 3,
'',
'', $i);
589 print (!empty(
$object->lines[$i]->description) &&
$object->lines[$i]->description !=
$object->lines[$i]->product_label) ?
'<br>'.dol_htmlentitiesbr(
$object->lines[$i]->description) :
'';
593 if (
$object->lines[$i]->fk_product_type == 1) {
594 $text =
img_object($langs->trans(
'Service'),
'service');
596 $text =
img_object($langs->trans(
'Product'),
'product');
599 if (!empty(
$object->lines[$i]->label)) {
600 $text .=
' <strong>'.$object->lines[$i]->label.
'</strong>';
601 print $form->textwithtooltip($text,
$object->lines[$i]->description, 3,
'',
'', $i);
603 print $text.
' '.nl2br(
$object->lines[$i]->description);
610 print
'<td class="center">'.$object->lines[$i]->qty_asked.
'</td>';
611 print
'<td class="center">'.$object->lines[$i]->qty_shipped.
'</td>';
618 $mode = (
$object->statut == 0) ?
'edit' :
'view';
620 $object->lines[$i]->fetch_optionals();
622 if ($action ==
'create_delivery') {
625 $extrafields->fetch_name_optionals_label($srcLine->table_element);
626 $srcLine->id = $expedition->lines[$i]->id;
627 $srcLine->fetch_optionals();
629 $object->lines[$i]->array_options = array_merge(
$object->lines[$i]->array_options, $srcLine->array_options);
632 $extrafields->fetch_name_optionals_label($srcLine->table_element);
634 print
$object->lines[$i]->showOptionals($extrafields, $mode, array(
'style' =>
'class="oddeven"',
'colspan' => $colspan),
'');
655 if ($user->socid == 0) {
656 print
'<div class="tabsAction">';
658 if (
$object->statut == 0 && $num_prod > 0) {
659 if ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'expedition',
'delivery',
'creer'))
660 || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'expedition',
'delivery_advance',
'validate'))) {
665 if ($user->hasRight(
'expedition',
'delivery',
'supprimer')) {
667 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),
'');
677 print
'<div class="fichecenter"><div class="fichehalfleft">';
684 $filedir =
$conf->expedition->dir_output.
"/receipt/".$objectref;
685 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
687 $genallowed = $user->hasRight(
'expedition',
'delivery',
'lire');
688 $delallowed = $user->hasRight(
'expedition',
'delivery',
'creer');
690 print $formfile->showdocuments(
'delivery', $objectref, $filedir, $urlsource, $genallowed, $delallowed,
$object->model_pdf, 1, 0, 0, 28, 0,
'',
'',
'', $soc->default_lang);
695 if (
$object->origin ==
'expedition') {
697 $shipment->fetch(
$object->origin_id);
701 $somethingshown = $form->showLinkedObjectBlock(
$object,
'');
705 print
'</div><div class="fichehalfright">';
709 print
'</div></div>';
712 print
"Expedition inexistante ou access refuse";
716 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 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)
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
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'.
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.
dol_clone($object, $native=2)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_htmlentitiesbr($stringtoencode, $nl2brmode=0, $pagecodefrom='UTF-8', $removelasteolbr=1)
This function is called to encode a string into a HTML string but differs from htmlentities because a...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
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.