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';
53if (empty($dolibarr_nocache)) {
54 header(
'Cache-Control: max-age=10800, public, must-revalidate');
56 header(
'Cache-Control: no-cache');
68function addDispatchLine(index,
type, mode) {
69 mode = mode ||
'qtymissing'
71 console.log(
"fourn/js/lib_dispatch.js.php addDispatchLine Split line type="+
type+
" index="+index+
" mode="+mode);
73 var $row0 = $(
"tr[name='"+
type+
'_0_'+index+
"']");
74 var $dpopt = $row0.find(
'.hasDatepicker').first().datepicker(
'option',
'all');
75 var $row = $row0.clone(
true);
76 var nbrTrs = $(
"tr[name^='"+
type+
"_'][name$='_"+index+
"']").length;
77 var qtyOrdered = parseFloat($(
"#qty_ordered_0_"+index).val());
79 var qty = parseFloat($(
"#qty_"+(nbrTrs - 1)+
"_"+index).val());
84 console.log(
"fourn/js/lib_dispatch.js.php addDispatchLine Split line nbrTrs="+nbrTrs+
" qtyOrdered="+qtyOrdered+
" qty="+qty);
88 if (mode ===
'lessone') {
89 qtyDispatched = parseFloat($(
"#qty_dispatched_0_" + index).val()) + 1;
92 qtyDispatched = parseFloat($(
"#qty_dispatched_0_" + index).val()) + qty;
94 if (qtyDispatched == qtyOrdered && qtyDispatched > 1) {
95 qtyDispatched = parseFloat($(
"#qty_dispatched_0_" + index).val()) + 1;
99 console.log(
"qtyDispatched=" + qtyDispatched +
" qtyOrdered=" + qtyOrdered+
" qty=" + qty);
102 window.alert(
"Remain quantity to dispatch is too low to be split");
104 var oldlineqty = qtyDispatched;
105 var newlineqty = qtyOrdered - qtyDispatched;
106 if (newlineqty <= 0) {
107 newlineqty = qty - 1;
109 $(
"#qty_"+(nbrTrs - 1)+
"_"+index).val(oldlineqty);
113 $row.html($row.html().replace(/_0_/g,
"_" + nbrTrs +
"_"));
118 $row.find(
'.hasDatepicker').each((i, dp) => {
120 .removeClass(
'hasDatepicker');
121 $(dp).next(
'img.ui-datepicker-trigger').remove();
122 $(dp).datepicker($dpopt);
127 $row.find(
"select[name='" +
'entrepot_' + nbrTrs +
'_' + index +
"']").select2();
129 let $prevRow = $(
"tr[name^='" +
type +
"_'][name$='_" + index +
"']:last")
130 let $prevEntr = Number($prevRow.find("select[
name='" + 'entrepot_' + (nbrTrs-1) + '_' + index + "']").val())
131 $row.find("select[
name='" + 'entrepot_' + nbrTrs + '_' + index + "']").val($prevEntr)
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_" + nbrTrs + '_' + index).detach(); // old way to find duplicated select2 component
142 $(".csswarehouse_" + nbrTrs + "_" + index + ":first-child").parent("span.selection").parent(".select2").detach();
144 /* Suffix of lines are: _ trs.length _ index */
145 $("#qty_"+nbrTrs+"_"+index).focus();
146 $("#qty_dispatched_0_"+index).val(oldlineqty);
148 //hide all buttons then show only the last one
149 $("tr[name^='" + type + "_'][name$='_" + index + "'] .splitbutton").hide();
150 $("tr[name^='" + type + "_'][name$='_" + index + "']:last .splitbutton").show();
152 $("#reset_" + (nbrTrs) + "_" + index).click(function (event) {
153 event.preventDefault();
154 id = $(this).attr("id");
155 id = id.split("reset_");
157 idlast = $("tr[name^='" + type + "_'][name$='_" + index + "']:last .qtydispatchinput").attr("id");
158 if (idlast == $("#qty_" + idrow).attr("id")) {
159 console.log("Remove trigger for tr name = " + type + "_" + idrow);
160 $('tr[name="' + type + '_' + idrow + '"').remove();
161 $("tr[name^='" + type + "_'][name$='_" + index + "']:last .splitbutton").show();
163 console.log("fourn/js/lib_dispatch.js.php Reset trigger for id = qty_" + idrow);
164 $("#qty_" + idrow).val("");
168 if (mode === 'lessone')
170 qty = 1; // keep 1 in old line
171 $("#qty_"+(nbrTrs-1)+"_"+index).val(qty);
173 $("#qty_"+nbrTrs+"_"+index).val(newlineqty);
174 // Store arbitrary data for dispatch qty input field change event
175 $("#qty_" + (nbrTrs - 1) + "_" + index).data('qty', qty);
176 $("#qty_" + (nbrTrs - 1) + "_" + index).data('type', type);
177 $("#qty_" + (nbrTrs - 1) + "_" + index).data('index', index);
178 // Update dispatched qty when value dispatch qty input field changed
179 //$("#qty_" + (nbrTrs - 1) + "_" + index).change(this.onChangeDispatchLineQty);
180 //set focus on lot of new line (if it exists)
181 $("#lot_number_" + (nbrTrs) + "_" + index).focus();
183 $("tr[name^='" + type + "_'][name$='_" + index + "']:last").data("remove", "remove");
184 $("#lot_number_" + (nbrTrs) + "_" + index).val("")
185 $("#idline_" + (nbrTrs) + "_" + index).val("-1")
186 $("#qty_" + (nbrTrs) + "_" + index).data('expected', "0");
187 $("#lot_number_" + (nbrTrs) + "_" + index).removeAttr("disabled");
200function onChangeDispatchLineQty(element) {
201 var type = $(element).data('type'),
202 qty = parseFloat($(element).data('expected')),
203 changedQty, nbrTrs, dispatchingQty, qtyOrdered, qtyDispatched;
204 id = $(element).attr("id");
208 if (index >= 0 && type && qty >= 0) {
209 nbrTrs = $("tr[name^='" + type + "_'][name$='_" + index + "']").length;
210 qtyChanged = parseFloat($(element).val()) - qty; // qty changed
211 qtyDispatching = parseFloat($(element).val()); // qty currently being dispatched
212 qtyOrdered = parseFloat($("#qty_ordered_0_" + index).val()); // qty ordered
213 qtyDispatched = parseFloat($("#qty_dispatched_0_" + index).val()); // qty already dispatched
215 console.log("onChangeDispatchLineQty qtyChanged: " + qtyChanged + " qtyDispatching: " + qtyDispatching + " qtyOrdered: " + qtyOrdered + " qtyDispatched: " + qtyDispatched);
217 if ((qtyChanged) <= (qtyOrdered - (qtyDispatched + qtyDispatching))) {
218 $("#qty_dispatched_0_" + index).val(qtyDispatched + qtyChanged);
220 /*console.log("eee");
221 $(element).val($(element).data('expected'));*/
223 $(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:/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
$conf db name
Only used if Module[ID]Name translation string is not found.