26if (!defined(
'NOREQUIRESOC')) {
27 define(
'NOREQUIRESOC',
'1');
29if (!defined(
'NOCSRFCHECK')) {
30 define(
'NOCSRFCHECK', 1);
32if (!defined(
'NOTOKENRENEWAL')) {
33 define(
'NOTOKENRENEWAL', 1);
35if (!defined(
'NOLOGIN')) {
38if (!defined(
'NOREQUIREMENU')) {
39 define(
'NOREQUIREMENU', 1);
41if (!defined(
'NOREQUIREHTML')) {
42 define(
'NOREQUIREHTML', 1);
44if (!defined(
'NOREQUIREAJAX')) {
45 define(
'NOREQUIREAJAX',
'1');
48session_cache_limiter(
'public');
50require_once
'../../main.inc.php';
61$langs->loadLangs(array(
"mrp"));
66header(
'Cache-Control: max-age=10800, public, must-revalidate');
77function addDispatchLine(index,
type, mode)
79 mode = mode ||
'qtymissing'
81 console.log(
"mrp/js/lib_dispatch.js.php Split line type="+
type+
" index="+index+
" mode="+mode);
82 if (mode ==
'qtymissingconsume' || mode ==
'allmissingconsume') {
83 var inputId =
'qtytoconsume';
84 var warehouseId =
'idwarehouse';
87 var inputId =
'qtytoproduce';
88 var warehouseId =
'idwarehousetoproduce';
90 var nbrTrs = $(
"tr[name^='"+
type+
"_"+index+
"']").length;
91 var $row = $(
"tr[name='"+
type+
'_'+index+
"_1']").clone(
true);
92 var qtyOrdered = parseFloat($(
"#qty_ordered_"+index).val());
93 var qty = parseFloat($(
"#"+inputId+
"-"+index+
"-"+nbrTrs).val());
95 console.log(
"#"+inputId+
"-"+index+
"-"+nbrTrs+
" => "+qty);
99 if (mode ===
'lessone')
101 qtyDispatched = parseFloat($(
"#qty_dispatched_"+index).val()) + 1;
105 console.log($(
"#qty_dispatched_"+index).val());
106 qtyDispatched = parseFloat($(
"#qty_dispatched_"+index).val()) + qty;
108 if (qtyDispatched == qtyOrdered && qtyDispatched > 1) {
109 qtyDispatched = parseFloat($(
"#qty_dispatched_" + index).val()) + 1;
111 if (mode ==
'allmissingconsume' || mode ==
'alltoproduce') {
112 var qtymax = parseFloat($($row).data(
'max-qty'));
113 if (qtymax ===
'undefined') {
120 if (mode ==
'allmissingconsume' || mode ==
'alltoproduce') {
122 var qtyalreadyused = 0;
125 while (qtyalreadyused < qty) {
127 if ((qtyalreadyused + qtymax) > qty) qtymax = qty - qtyalreadyused;
130 $(
"#"+inputId+
"-"+index+
"-"+nbrTrs).val(qtymax);
132 var res = addDispatchTR(qtyOrdered, qtyDispatched, index, nbrTrs, warehouseId, inputId,
type, qtymax, mode, $row);
139 qtyalreadyused = qtyalreadyused + qtymax;
141 $row = $(
"tr[name='" +
type +
'_' + index +
"_1']").clone(
true);
145 addDispatchTR(qtyOrdered, qtyDispatched, index, nbrTrs, warehouseId, inputId,
type,
'', mode, $row);
148 addDispatchTR(qtyOrdered, qtyDispatched, index, nbrTrs, warehouseId, inputId,
type, qty, mode, $row);
168function addDispatchTR(qtyOrdered, qtyDispatched, index, nbrTrs, warehouseId, inputId,
type, qty, mode, $row) {
169 if (qtyOrdered <= 1) {
170 let errormsg =
'<?php echo dol_escape_js($langs->trans('QtyCantBeSplit
')); ?>';
171 $.jnotify(errormsg,
'error',
true);
173 }
else if (qtyDispatched >= qtyOrdered) {
174 let errormsg =
'<?php echo dol_escape_js($langs->trans('NoRemainQtyToDispatch
')); ?>';
175 $.jnotify(errormsg,
'error',
true);
177 }
else if (qtyDispatched < qtyOrdered) {
179 var re1 =
new RegExp(
'_'+index+
'_1',
'g');
180 var re2 =
new RegExp(
'-'+index+
'-1',
'g');
181 $row.html($row.html().replace(re1,
'_'+index+
'_'+(nbrTrs+1)));
182 $row.html($row.html().replace(re2,
'-'+index+
'-'+(nbrTrs+1)));
184 $row.find(
"select[name='"+warehouseId+
'-'+index+
'-'+(nbrTrs+1)+
"']").select2();
188 $row.find(
"input[id^='"+inputId+
"']").val(
'');
190 $row.attr(
'name',
type+
'_'+index+
'_'+(nbrTrs+1));
192 $(
"tr[name^='"+
type+
"_"+index+
"_"+nbrTrs+
"']:last").after($row);
195 $(
"#s2id_entrepot_"+nbrTrs+
'_'+index).detach();
196 $(
".csswarehouse_"+index+
"_"+(nbrTrs+1)+
":first-child").parent(
"span.selection").parent(
".select2").detach();
199 $(
"#"+inputId+
"-"+index+
"-"+(nbrTrs+1)).focus();
200 if ($(
"#"+inputId+
"-"+index+
"-"+(nbrTrs)).val() == 0) {
201 if(mode ==
'allmissingconsume' || mode ==
'alltoproduce') $(
"#"+inputId+
"-"+index+
"-"+(nbrTrs)).val(qty);
202 else $(
"#"+inputId+
"-"+index+
"-"+(nbrTrs)).val(1);
204 var totalonallines = 0;
205 for (let i = 1; i <= nbrTrs; i++) {
206 console.log(i+
" = "+parseFloat($(
"#"+inputId+
"-"+index+
"-"+i).val()));
207 totalonallines = totalonallines + parseFloat($(
"#"+inputId+
"-"+index+
"-"+i).val());
210 if(mode !=
'allmissingconsume' && mode !=
'alltoproduce') {
211 if (totalonallines == qtyOrdered && qtyOrdered > 1) {
212 var prevouslineqty = $(
"#" + inputId +
"-" + index +
"-" + nbrTrs).val();
213 $(
"#" + inputId +
"-" + index +
"-" + (nbrTrs)).val(1);
214 $(
"#" + inputId +
"-" + index +
"-" + (nbrTrs + 1)).val(prevouslineqty - 1);
217 $(
"#qty_dispatched_"+index).val(qtyDispatched);
220 $(
"tr[name^='"+
type+
"_"+index+
"_'] .splitbutton").hide();
221 $(
"tr[name^='"+
type+
"_"+index+
"_']:last .splitbutton").show();
223 if (mode ===
'lessone')
226 $(
"#qty_"+(nbrTrs-1)+
"_"+index).val(qty);
229 $(
"#"+inputId+
"-"+index+(nbrTrs)).data(
'qty', qty);
230 $(
"#"+inputId+
"-"+index+(nbrTrs)).data(
'type',
type);
231 $(
"#"+inputId+
"-"+index+(nbrTrs)).data(
'index', index);
232 if(mode ==
'allmissingconsume' || mode ==
'alltoproduce') {
233 let currentQtyDispatched = qtyDispatched+qty;
234 $row.find(
"input[id^='"+inputId+
"']").val(qty);
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]]]',...