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(
"fourn/js/lib_dispatch.js.php addDispatchLine Split line type="+
type+
" index="+index+
" mode="+mode);
69 var $row0 = $(
"tr[name='"+
type+
'_0_'+index+
"']");
70 var $dpopt = $row0.find(
'.hasDatepicker').first().datepicker(
'option',
'all');
71 var $row = $row0.clone(
true);
72 var nbrTrs = $(
"tr[name^='"+
type+
"_'][name$='_"+index+
"']").length;
73 var qtyOrdered = parseFloat($(
"#qty_ordered_0_"+index).val());
75 var qty = parseFloat($(
"#qty_"+(nbrTrs - 1)+
"_"+index).val());
80 console.log(
"fourn/js/lib_dispatch.js.php addDispatchLine Split line nbrTrs="+nbrTrs+
" qtyOrdered="+qtyOrdered+
" qty="+qty);
84 if (mode ===
'lessone') {
85 qtyDispatched = parseFloat($(
"#qty_dispatched_0_" + index).val()) + 1;
88 qtyDispatched = parseFloat($(
"#qty_dispatched_0_" + index).val()) + qty;
90 if (qtyDispatched == qtyOrdered && qtyDispatched > 1) {
91 qtyDispatched = parseFloat($(
"#qty_dispatched_0_" + index).val()) + 1;
95 console.log(
"qtyDispatched=" + qtyDispatched +
" qtyOrdered=" + qtyOrdered+
" qty=" + qty);
98 window.alert(
"Remain quantity to dispatch is too low to be split");
100 var oldlineqty = qtyDispatched;
101 var newlineqty = qtyOrdered - qtyDispatched;
102 if (newlineqty <= 0) {
103 newlineqty = qty - 1;
105 $(
"#qty_"+(nbrTrs - 1)+
"_"+index).val(oldlineqty);
109 $row.html($row.html().replace(/_0_/g,
"_" + nbrTrs +
"_"));
114 $row.find(
'.hasDatepicker').each((i, dp) => {
116 .removeClass(
'hasDatepicker');
117 $(dp).next(
'img.ui-datepicker-trigger').remove();
118 $(dp).datepicker($dpopt);
123 $row.find(
"select[name='" +
'entrepot_' + nbrTrs +
'_' + index +
"']").select2();
125 let $prevRow = $(
"tr[name^='" +
type +
"_'][name$='_" + index +
"']:last")
126 let $prevEntr = Number($prevRow.find("select[
name='" + 'entrepot_' + (nbrTrs-1) + '_' + index + "']").val())
127 $row.find("select[
name='" + 'entrepot_' + nbrTrs + '_' + index + "']").val($prevEntr)
130 $row.find("input[
name^='qty']").val('');
132 $row.attr('
name',
type + '_' + nbrTrs + '_' + index);
134 $("tr[
name^='" +
type + "_'][name$='_" + index + "']:last").after($row);
137 $("
#s2id_entrepot_" + nbrTrs + '_' + index).detach(); // old way to find duplicated select2 component
138 $(".csswarehouse_" + nbrTrs + "_" + index + ":first-child").parent("span.selection").parent(".select2").detach();
140 /* Suffix of lines are: _ trs.length _ index */
141 $("#qty_"+nbrTrs+"_"+index).focus();
142 $("#qty_dispatched_0_"+index).val(oldlineqty);
144 //hide all buttons then show only the last one
145 $("tr[name^='" + type + "_'][name$='_" + index + "'] .splitbutton").hide();
146 $("tr[name^='" + type + "_'][name$='_" + index + "']:last .splitbutton").show();
148 $("#reset_" + (nbrTrs) + "_" + index).click(function (event) {
149 event.preventDefault();
150 id = $(this).attr("id");
151 id = id.split("reset_");
153 idlast = $("tr[name^='" + type + "_'][name$='_" + index + "']:last .qtydispatchinput").attr("id");
154 if (idlast == $("#qty_" + idrow).attr("id")) {
155 console.log("Remove trigger for tr name = " + type + "_" + idrow);
156 $('tr[name="' + type + '_' + idrow + '"').remove();
157 $("tr[name^='" + type + "_'][name$='_" + index + "']:last .splitbutton").show();
159 console.log("fourn/js/lib_dispatch.js.php Reset trigger for id = qty_" + idrow);
160 $("#qty_" + idrow).val("");
164 if (mode === 'lessone')
166 qty = 1; // keep 1 in old line
167 $("#qty_"+(nbrTrs-1)+"_"+index).val(qty);
169 $("#qty_"+nbrTrs+"_"+index).val(newlineqty);
170 // Store arbitrary data for dispatch qty input field change event
171 $("#qty_" + (nbrTrs - 1) + "_" + index).data('qty', qty);
172 $("#qty_" + (nbrTrs - 1) + "_" + index).data('type', type);
173 $("#qty_" + (nbrTrs - 1) + "_" + index).data('index', index);
174 // Update dispatched qty when value dispatch qty input field changed
175 //$("#qty_" + (nbrTrs - 1) + "_" + index).change(this.onChangeDispatchLineQty);
176 //set focus on lot of new line (if it exists)
177 $("#lot_number_" + (nbrTrs) + "_" + index).focus();
179 $("tr[name^='" + type + "_'][name$='_" + index + "']:last").data("remove", "remove");
180 $("#lot_number_" + (nbrTrs) + "_" + index).val("")
181 $("#idline_" + (nbrTrs) + "_" + index).val("-1")
182 $("#qty_" + (nbrTrs) + "_" + index).data('expected', "0");
183 $("#lot_number_" + (nbrTrs) + "_" + index).removeAttr("disabled");
196function onChangeDispatchLineQty(element) {
197 var type = $(element).data('type'),
198 qty = parseFloat($(element).data('expected')),
199 changedQty, nbrTrs, dispatchingQty, qtyOrdered, qtyDispatched;
200 id = $(element).attr("id");
204 if (index >= 0 && type && qty >= 0) {
205 nbrTrs = $("tr[name^='" + type + "_'][name$='_" + index + "']").length;
206 qtyChanged = parseFloat($(element).val()) - qty; // qty changed
207 qtyDispatching = parseFloat($(element).val()); // qty currently being dispatched
208 qtyOrdered = parseFloat($("#qty_ordered_0_" + index).val()); // qty ordered
209 qtyDispatched = parseFloat($("#qty_dispatched_0_" + index).val()); // qty already dispatched
211 console.log("onChangeDispatchLineQty qtyChanged: " + qtyChanged + " qtyDispatching: " + qtyDispatching + " qtyOrdered: " + qtyOrdered + " qtyDispatched: " + qtyDispatched);
213 if ((qtyChanged) <= (qtyOrdered - (qtyDispatched + qtyDispatching))) {
214 $("#qty_dispatched_0_" + index).val(qtyDispatched + qtyChanged);
216 /*console.log("eee");
217 $(element).val($(element).data('expected'));*/
219 $(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]]]',...
$conf db name
Only used if Module[ID]Name translation string is not found.