dolibarr
16.0.5
Main Page
Related Pages
Modules
Classes
Files
Examples
File List
File Members
dolibarr_16.0
htdocs
mrp
js
lib_dispatch.js.php
Go to the documentation of this file.
1
<?php
2
// Copyright (C) 2014 Cedric GROSS <c.gross@kreiz-it.fr>
3
// Copyright (C) 2017 Francis Appels <francis.appels@z-application.com>
4
//
5
// This program is free software; you can redistribute it and/or modify
6
// it under the terms of the GNU General Public License as published by
7
// the Free Software Foundation; either version 3 of the License, or
8
// (at your option) any later version.
9
//
10
// This program is distributed in the hope that it will be useful,
11
// but WITHOUT ANY WARRANTY; without even the implied warranty of
12
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
// GNU General Public License for more details.
14
//
15
// You should have received a copy of the GNU General Public License
16
// along with this program. If not, see <https://www.gnu.org/licenses/>.
17
// or see https://www.gnu.org/
18
24
if
(!defined(
'NOREQUIRESOC'
)) {
25
define(
'NOREQUIRESOC'
,
'1'
);
26
}
27
if
(!defined(
'NOCSRFCHECK'
)) {
28
define(
'NOCSRFCHECK'
, 1);
29
}
30
if
(!defined(
'NOTOKENRENEWAL'
)) {
31
define(
'NOTOKENRENEWAL'
, 1);
32
}
33
if
(!defined(
'NOLOGIN'
)) {
34
define(
'NOLOGIN'
, 1);
35
}
36
if
(!defined(
'NOREQUIREMENU'
)) {
37
define(
'NOREQUIREMENU'
, 1);
38
}
39
if
(!defined(
'NOREQUIREHTML'
)) {
40
define(
'NOREQUIREHTML'
, 1);
41
}
42
if
(!defined(
'NOREQUIREAJAX'
)) {
43
define(
'NOREQUIREAJAX'
,
'1'
);
44
}
45
46
session_cache_limiter(
'public'
);
47
48
require_once
'../../main.inc.php'
;
49
50
// Define javascript type
51
top_httphead
(
'text/javascript; charset=UTF-8'
);
52
// Important: Following code is to avoid page request by browser and PHP CPU at each Dolibarr page access.
53
if
(empty($dolibarr_nocache)) {
54
header(
'Cache-Control: max-age=10800, public, must-revalidate'
);
55
}
else
{
56
header(
'Cache-Control: no-cache'
);
57
}
58
59
?>
68
function
addDispatchLine(index,
type
, mode)
69
{
70
mode = mode ||
'qtymissing'
71
72
console.log(
"fourn/js/lib_dispatch.js.php Split line type="
+
type
+
" index="
+index+
" mode="
+mode);
73
if
(mode ==
'qtymissingconsume'
) {
74
var inputId =
'qtytoconsume'
;
75
var warehouseId =
'idwarehouse'
;
76
}
77
else
{
78
var inputId =
'qtytoproduce'
;
79
var warehouseId =
'idwarehousetoproduce'
;
80
}
81
var nbrTrs = $(
"tr[name^='"
+
type
+
"_"
+index+
"']"
).length;
// position of line for batch
82
var $row = $(
"tr[name='"
+
type
+
'_'
+index+
"_1']"
).clone(
true
);
// clone last batch line to jQuery object
83
var qtyOrdered = parseFloat($(
"#qty_ordered_"
+index).val());
// Qty ordered is same for all rows
84
var qty = parseFloat($(
"#"
+inputId+
"-"
+index+
"-"
+nbrTrs).val());
85
var qtyDispatched;
86
87
if
(mode ===
'lessone'
)
88
{
89
qtyDispatched = parseFloat($(
"#qty_dispatched_"
+index).val()) + 1;
90
}
91
else
92
{
93
qtyDispatched = parseFloat($(
"#qty_dispatched_"
+index).val()) + qty;
94
console.log($(
"#qty_dispatched_"
+index).val());
95
// If user did not reduced the qty to dispatch on old line, we keep only 1 on old line and the rest on new line
96
if
(qtyDispatched == qtyOrdered && qtyDispatched > 1) {
97
qtyDispatched = parseFloat($(
"#qty_dispatched_"
+index).val()) + 1;
98
mode =
'lessone'
;
99
}
100
}
101
console.log(
"qtyDispatched="
+qtyDispatched+
" qtyOrdered="
+qtyOrdered);
102
103
if
(qtyOrdered <= 1) {
104
window.alert(
"Quantity can't be split"
);
105
}
else
if
(qtyDispatched >= qtyOrdered) {
106
window.alert(
"No remain qty to dispatch"
);
107
}
else
if
(qtyDispatched < qtyOrdered) {
108
//replace tr suffix nbr
109
var re1 =
new
RegExp(
'_'
+index+
'_1'
,
'g'
);
110
var re2 =
new
RegExp(
'-'
+index+
'-1'
,
'g'
);
111
$row.html($row.html().replace(re1,
'_'
+index+
'_'
+(nbrTrs+1)));
112
$row.html($row.html().replace(re2,
'-'
+index+
'-'
+(nbrTrs+1)));
113
//create new select2 to avoid duplicate id of cloned one
114
$row.find(
"select[name='"
+warehouseId+
'-'
+index+
'-'
+(nbrTrs+1)+
"']"
).select2();
115
// TODO find solution to copy selected option to new select
116
// TODO find solution to keep new tr's after page refresh
117
//clear value
118
$row.find(
"input[id^='"
+inputId+
"']"
).val(
''
);
119
//change name of new row
120
$row.attr(
'name'
,
type
+
'_'
+index+
'_'
+(nbrTrs+1));
121
//insert new row before last row
122
$(
"tr[name^='"
+
type
+
"_"
+index+
"_"
+nbrTrs+
"']:last"
).after($row);
123
124
//remove cloned select2 with duplicate id.
125
$(
"#s2id_entrepot_"
+nbrTrs+
'_'
+index).detach();
// old way to find duplicated select2 component
126
$(
".csswarehouse_"
+index+
"_"
+(nbrTrs+1)+
":first-child"
).parent(
"span.selection"
).parent(
".select2"
).detach();
127
128
/* Suffix of lines are: index _ trs.length */
129
$(
"#"
+inputId+
"-"
+index+
"-"
+(nbrTrs+1)).focus();
130
if
($(
"#"
+inputId+
"-"
+index+
"-"
+(nbrTrs)).val() == 0) {
131
$(
"#"
+inputId+
"-"
+index+
"-"
+(nbrTrs)).val(1);
132
}
133
var totalonallines = 0;
134
for
(let i = 1; i <= nbrTrs; i++) {
135
console.log(i+
" = "
+parseFloat($(
"#"
+inputId+
"-"
+index+
"-"
+i).val()));
136
totalonallines = totalonallines + parseFloat($(
"#"
+inputId+
"-"
+index+
"-"
+i).val());
137
}
138
console.log(
"totalonallines="
+totalonallines);
139
if
(totalonallines == qtyOrdered && qtyOrdered > 1) {
140
var prevouslineqty = $(
"#"
+inputId+
"-"
+index+
"-"
+nbrTrs).val();
141
$(
"#"
+inputId+
"-"
+index+
"-"
+(nbrTrs)).val(1);
142
$(
"#"
+inputId+
"-"
+index+
"-"
+(nbrTrs+1)).val(prevouslineqty - 1);
143
}
144
$(
"#qty_dispatched_"
+index).val(qtyDispatched);
145
146
//hide all buttons then show only the last one
147
$(
"tr[name^='"
+
type
+
"_'][name$='_"
+index+
"'] .splitbutton"
).hide();
148
$(
"tr[name^='"
+
type
+
"_'][name$='_"
+index+
"']:last .splitbutton"
).show();
149
150
if
(mode ===
'lessone'
)
151
{
152
qty = 1;
// keep 1 in old line
153
$(
"#qty_"
+(nbrTrs-1)+
"_"
+index).val(qty);
154
}
155
// Store arbitrary data for dispatch qty input field change event
156
$(
"#"
+inputId+
"-"
+index+(nbrTrs)).data(
'qty'
, qty);
157
$(
"#"
+inputId+
"-"
+index+(nbrTrs)).data(
'type'
,
type
);
158
$(
"#"
+inputId+
"-"
+index+(nbrTrs)).data(
'index'
, index);
159
}
160
}
161
top_httphead
if(!defined('NOREQUIREMENU')) if(!function_exists("llxHeader")) top_httphead($contenttype='text/html', $forcenocache=0)
Show HTTP header.
Definition:
main.inc.php:1407
type
if(preg_match('/crypted:/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
Definition:
repair.php:119
Generated on Sun Feb 4 2024 01:01:22 for
dolibarr
by Doxygen 1.8.17