24if (!defined(
'NOREQUIRESOC')) {
25 define(
'NOREQUIRESOC',
'1');
27if (!defined(
'NOCSRFCHECK')) {
28 define(
'NOCSRFCHECK', 1);
30if (!defined(
'NOTOKENRENEWAL')) {
31 define(
'NOTOKENRENEWAL', 1);
33if (!defined(
'NOLOGIN')) {
36if (!defined(
'NOREQUIREMENU')) {
37 define(
'NOREQUIREMENU', 1);
39if (!defined(
'NOREQUIREHTML')) {
40 define(
'NOREQUIREHTML', 1);
42if (!defined(
'NOREQUIREAJAX')) {
43 define(
'NOREQUIREAJAX',
'1');
46session_cache_limiter(
'public');
48require_once
'../../main.inc.php';
53header(
'Cache-Control: max-age=10800, public, must-revalidate');
64function addDispatchLine(index,
type, mode) {
65 mode = mode ||
'qtymissing'
67 console.log(
"expedition/js/lib_dispatch.js.php addDispatchLine Split line type="+
type+
" index="+index+
" mode="+mode);
70 var typeArr =
type.split(
'-');
71 if (typeArr.length > 0) {
74 var $row0 = $(
"tr[name='"+
type+
'_0_'+index+
"']");
75 var $dpopt = $row0.find(
'.hasDatepicker').first().datepicker(
'option',
'all');
76 var $row = $row0.clone(
true);
77 var nbrTrs = $(
"tr[name^='"+
type+
"_'][name$='_"+index+
"']").length;
78 var qtyOrdered = parseFloat($(
"#qty_ordered_0_"+index).val());
80 var qty = parseFloat($(
"#qty"+lineId+
"_"+(nbrTrs - 1)+
"_"+index).val());
85 console.log(
"expedition/js/lib_dispatch.js.php addDispatchLine Split line="+lineId+
" nbrTrs="+nbrTrs+
" qtyOrdered="+qtyOrdered+
" qty="+qty);
89 if (mode ===
'lessone') {
90 qtyDispatched = parseFloat($(
"#qty_dispatched_0_" + index).val()) + 1;
93 qtyDispatched = parseFloat($(
"#qty_dispatched_0_" + index).val()) + qty;
95 if (qtyDispatched == qtyOrdered && qtyDispatched > 1) {
96 qtyDispatched = parseFloat($(
"#qty_dispatched_0_" + index).val()) + 1;
100 console.log(
"expedition/js/lib_dispatch.js.php qtyDispatched=" + qtyDispatched +
" qtyOrdered=" + qtyOrdered+
" qty=" + qty);
103 window.alert(
"Remain quantity to dispatch is too low to be split");
105 var oldlineqty = qtyDispatched;
106 var newlineqty = qtyOrdered - qtyDispatched;
107 if (newlineqty <= 0) {
108 newlineqty = qty - 1;
110 $(
"#qty"+lineId+
"_"+(nbrTrs - 1)+
"_"+index).val(oldlineqty);
114 $row.html($row.html().replace(/_0_/g,
"_" + nbrTrs +
"_"));
119 $row.find(
'.hasDatepicker').each((i, dp) => {
121 .removeClass(
'hasDatepicker');
122 $(dp).next(
'img.ui-datepicker-trigger').remove();
123 $(dp).datepicker($dpopt);
128 $row.find(
"select[name='"+
'entrepot'+lineId+
'_'+nbrTrs+
'_'+index+
"']").select2();
130 $row.find(
"select[name='"+
'lot_number'+lineId+
'_'+nbrTrs+
'_'+index+
"']").select2();
134 $row.find(
"input[name^='qty']").val(
'');
136 $row.attr(
'name',
type+
'_'+nbrTrs+
'_'+index);
138 $(
"tr[name^='"+
type+
"_'][name$='_"+index+
"']:last").after($row);
141 $(
"#s2id_entrepot"+lineId+
"_"+nbrTrs+
'_'+index).detach();
142 $(
".csswarehouse"+lineId+
"_"+nbrTrs+
"_"+index +
":first-child").parent(
"span.selection").parent(
".select2").detach();
145 $(
"#s2id_lot_number"+lineId+
"_"+nbrTrs+
'_'+index).detach();
146 $(
".csslotnumber"+lineId+
"_"+nbrTrs+
"_"+index +
":first-child").parent(
"span.selection").parent(
".select2").detach();
149 $(
"#qty"+lineId+
"_"+nbrTrs+
"_"+index).focus();
150 $(
"#qty_dispatched_0_"+index).val(oldlineqty);
153 $(
"tr[name^='"+
type+
"_'][name$='_"+index+
"'] .splitbutton").hide();
154 $(
"tr[name^='"+
type+
"_'][name$='_"+index+
"']:last .splitbutton").show();
156 $(
"#reset"+lineId+
"_"+(nbrTrs)+
"_"+index).click(
function (event) {
157 event.preventDefault();
158 id = $(
this).attr(
"id");
159 id =
id.split(
"reset"+lineId+
"_");
161 idlast = $(
"tr[name^='"+
type+
"_'][name$='_"+index+
"']:last .qtydispatchinput").attr(
"id");
162 if (idlast == $(
"#qty"+lineId+
"_"+idrow).attr(
"id")) {
163 console.log(
"expedition/js/lib_dispatch.js.php Remove trigger for tr name = "+
type+
"_"+idrow);
164 $(
'tr[name="'+
type+
'_'+idrow+
'"').remove();
165 $(
"tr[name^='"+
type+
"_'][name$='_"+index+
"']:last .splitbutton").show();
167 console.log(
"expedition/js/lib_dispatch.js.php Reset trigger for id = qty_"+idrow);
168 $(
"#qty"+lineId+
"_"+idrow).val(
"");
172 if (mode ===
'lessone')
175 $(
"#qty"+lineId+
"_"+(nbrTrs-1)+
"_"+index).val(qty);
177 $(
"#qty"+lineId+
"_"+nbrTrs+
"_"+index).val(newlineqty);
179 $(
"#qty"+lineId+
"_" + (nbrTrs - 1) +
"_" + index).data(
'qty', qty);
180 $(
"#qty"+lineId+
"_" + (nbrTrs - 1) +
"_" + index).data(
'type',
type);
181 $(
"#qty"+lineId+
"_" + (nbrTrs - 1) +
"_" + index).data(
'index', index);
185 $(
"#lot_number"+lineId+
"_"+(nbrTrs)+
"_"+index).focus();
187 $(
"tr[name^='"+
type+
"_'][name$='_"+index +
"']:last").data(
"remove",
"remove");
188 $(
"#lot_number_"+(nbrTrs) +
"_"+index).val(
"")
189 $(
"#idline"+lineId+
"_"+(nbrTrs)+
"_"+index).val(
"-1")
190 $(
"#qty"+lineId+
"_"+(nbrTrs)+
"_"+index).data(
'expected',
"0");
192 $(
"#lot_number"+lineId+
"_"+(nbrTrs)+
"_"+index).removeAttr(
"disabled");
205function onChangeDispatchLineQty(element) {
206 var
type = $(element).data(
'type'),
207 qty = parseFloat($(element).data(
'expected')),
208 changedQty, nbrTrs, dispatchingQty, qtyOrdered, qtyDispatched;
209 id = $(element).attr(
"id");
213 if (index >= 0 &&
type && qty >= 0) {
214 nbrTrs = $(
"tr[name^='"+
type+
"_'][name$='_"+index+
"']").length;
215 qtyChanged = parseFloat($(element).val()) - qty;
216 qtyDispatching = parseFloat($(element).val());
217 qtyOrdered = parseFloat($(
"#qty_ordered_0_"+index).val());
218 qtyDispatched = parseFloat($(
"#qty_dispatched_0_"+index).val());
220 console.log(
"onChangeDispatchLineQty qtyChanged: "+qtyChanged+
" qtyDispatching: "+qtyDispatching+
" qtyOrdered: "+qtyOrdered+
" qtyDispatched: "+qtyDispatched);
222 if ((qtyChanged) <= (qtyOrdered - (qtyDispatched + qtyDispatching))) {
223 $(
"#qty_dispatched_0_" + index).val(qtyDispatched + qtyChanged);
228 $(element).data(
'expected', $(element).val());
if(!defined( 'NOREQUIREMENU')) if(!empty(GETPOST('seteventmessages', 'alpha'))) if(!function_exists("llxHeader")) top_httphead($contenttype='text/html', $forcenocache=0)
Show HTTP header.
if(preg_match('/(crypted|dolcrypt):/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
'integer', 'integer:ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter[:Sortfield]]]',...