Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
T
third-party
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
2
Merge Requests
2
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cooperatic-foodcoops
third-party
Commits
6dd3b288
Commit
6dd3b288
authored
Jul 04, 2022
by
Damien Moulard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
REC: update qty during price update, with password
parent
129d2267
Pipeline
#2291
passed with stage
in 1 minute 25 seconds
Changes
2
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
179 additions
and
33 deletions
+179
-33
reception_style.css
reception/static/css/reception_style.css
+3
-0
reception_produits.js
reception/static/js/reception_produits.js
+176
-33
No files found.
reception/static/css/reception_style.css
View file @
6dd3b288
...
@@ -305,6 +305,9 @@ tr.odd td.row_product_no_qty {
...
@@ -305,6 +305,9 @@ tr.odd td.row_product_no_qty {
.product_qty_cell
:hover
{
.product_qty_cell
:hover
{
background-color
:
#e7e9ed
;
background-color
:
#e7e9ed
;
}
}
td
.row_product_no_qty.product_qty_cell
:hover
{
background-color
:
#db9129
;
}
/* Accordion style */
/* Accordion style */
...
...
reception/static/js/reception_produits.js
View file @
6dd3b288
...
@@ -32,7 +32,8 @@ var reception_status = null,
...
@@ -32,7 +32,8 @@ var reception_status = null,
barcodes
=
null
,
// Barcodes stored locally
barcodes
=
null
,
// Barcodes stored locally
priceToWeightIsCorrect
=
true
,
priceToWeightIsCorrect
=
true
,
suppliers_products
=
[],
// All products of current order(s) supplier(s)
suppliers_products
=
[],
// All products of current order(s) supplier(s)
products_to_add
=
[];
// Products to add to order
products_to_add
=
[],
// Products to add to order
re_editing_qty
=
false
;
// During prices edition, edit qty mode enabled
var
dbc
=
null
,
var
dbc
=
null
,
sync
=
null
,
sync
=
null
,
...
@@ -612,7 +613,7 @@ function initLists() {
...
@@ -612,7 +613,7 @@ function initLists() {
{
{
data
:
"product_qty"
,
data
:
"product_qty"
,
title
:
qty_title_tooltip
,
title
:
qty_title_tooltip
,
className
:
"dt-head-center dt-body-center"
,
className
:
(
reception_status
==
"qty_valid"
)
?
"dt-head-center dt-body-center product_qty_cell"
:
"dt-head-center dt-body-center"
,
width
:
"5%"
,
width
:
"5%"
,
// visible: (reception_status == "False"),
// visible: (reception_status == "False"),
render
:
function
(
data
,
type
,
full
)
{
render
:
function
(
data
,
type
,
full
)
{
...
@@ -655,17 +656,30 @@ function initLists() {
...
@@ -655,17 +656,30 @@ function initLists() {
}
}
];
];
table_to_process_ordering
=
[
[
0
,
"asc"
]
];
// For grouped orders, order first by number of order, then by product id
if
(
is_grouped_order
())
{
table_to_process_ordering
.
push
(
[
1
,
"asc"
]
)
}
// Init table for to_process content
// Init table for to_process content
table_to_process
=
$
(
'#table_to_process'
).
DataTable
({
table_to_process
=
$
(
'#table_to_process'
).
DataTable
({
data
:
list_to_process
,
data
:
list_to_process
,
columns
:
columns_to_process
,
columns
:
columns_to_process
,
rowId
:
"product_id.0"
,
rowId
:
"product_id.0"
,
order
:
[
order
:
table_to_process_ordering
,
[
0
,
"asc"
]
],
scrollY
:
"33vh"
,
scrollY
:
"33vh"
,
scrollCollapse
:
true
,
scrollCollapse
:
true
,
paging
:
false
,
paging
:
false
,
...
@@ -904,15 +918,65 @@ function initLists() {
...
@@ -904,15 +918,65 @@ function initLists() {
});
});
$
(
'#table_to_process tbody'
).
on
(
'click'
,
'.product_qty_cell'
,
function
()
{
$
(
'#table_to_process tbody'
).
on
(
'click'
,
'.product_qty_cell'
,
function
()
{
// Prevent editing mutiple lines at a time
if
(
editing_product
==
null
)
{
let
pswd
=
prompt
(
'Mot de passe requis pour éditer la quantité de ce produit'
);
let
pswd
=
prompt
(
'Mot de passe requis pour éditer la quantité de ce produit'
);
if
(
pswd
==
update_qty_pswd
)
{
if
(
pswd
==
update_qty_pswd
)
{
// Password ok, edit product qty
let
row
=
table_to_process
.
row
(
$
(
this
).
parents
(
'tr'
));
let
data
=
row
.
data
();
// Product goes to editing
editing_origin
=
"to_process"
;
re_editing_qty
=
true
;
setLineEdition
(
data
);
remove_from_toProcess
(
row
,
data
);
document
.
getElementById
(
'search_input'
).
value
=
''
;
$
(
'table.dataTable'
).
DataTable
()
.
search
(
''
)
.
draw
();
}
else
if
(
pswd
==
null
)
{
return
;
}
else
{
alert
(
'Mauvais mot de passe !'
);
}
}
else
{
alert
(
"Il y a déjà un produit dans la zone d'édition. Terminez d'abord d'éditer ce produit."
)
}
});
$
(
'#table_processed tbody'
).
on
(
'click'
,
'.product_qty_cell'
,
function
()
{
// Prevent editing mutiple lines at a time
if
(
editing_product
==
null
)
{
let
pswd
=
prompt
(
'Mot de passe requis pour éditer la quantité de ce produit'
);
if
(
pswd
==
update_qty_pswd
)
{
// Password ok, edit product qty
let
row
=
table_processed
.
row
(
$
(
this
).
parents
(
'tr'
));
let
data
=
row
.
data
();
// Product goes to editing
editing_origin
=
"processed"
;
re_editing_qty
=
true
;
setLineEdition
(
data
);
remove_from_processed
(
row
,
data
);
console
.
log
(
'clicked'
);
//
document
.
getElementById
(
'search_input'
).
value
=
''
;
$
(
'table.dataTable'
).
DataTable
()
.
search
(
''
)
.
draw
();
}
else
if
(
pswd
==
null
)
{
}
else
if
(
pswd
==
null
)
{
return
;
return
;
}
else
{
}
else
{
alert
(
'Mauvais mot de passe !'
);
alert
(
'Mauvais mot de passe !'
);
}
}
}
else
{
alert
(
"Il y a déjà un produit dans la zone d'édition. Terminez d'abord d'éditer ce produit."
)
}
});
});
}
}
...
@@ -1095,23 +1159,23 @@ function set_supplier_shortage(row, product, from_processed = false) {
...
@@ -1095,23 +1159,23 @@ function set_supplier_shortage(row, product, from_processed = false) {
/* EDITION */
/* EDITION */
// Set edition
// Set edition
area
function
setLineEdition
(
product
)
{
function
setLineEdition
(
product
)
{
editing_product
=
product
;
editing_product
=
product
;
// name
// name
document
.
getElementById
(
'product_name'
).
innerHTML
=
editing_product
.
product_id
[
1
];
document
.
getElementById
(
'product_name'
).
innerHTML
=
editing_product
.
product_id
[
1
];
// intput
// intput
if
(
reception_status
==
"qty_valid"
)
if
(
reception_status
==
'False'
||
re_editing_qty
===
true
)
document
.
getElementById
(
'edition_input'
).
value
=
editing_product
.
price_unit
;
else
document
.
getElementById
(
'edition_input'
).
value
=
editing_product
.
product_qty
;
document
.
getElementById
(
'edition_input'
).
value
=
editing_product
.
product_qty
;
else
document
.
getElementById
(
'edition_input'
).
value
=
editing_product
.
price_unit
;
document
.
getElementById
(
"edition_input"
).
focus
();
document
.
getElementById
(
"edition_input"
).
focus
();
// uom
// uom
if
(
editing_product
.
product_uom
[
0
]
==
1
)
{
// Unit
if
(
editing_product
.
product_uom
[
0
]
==
1
)
{
// Unit
if
(
reception_status
==
'False'
)
{
if
(
reception_status
==
'False'
||
re_editing_qty
===
true
)
{
document
.
getElementById
(
'product_uom'
).
innerHTML
=
' unité(s)'
;
document
.
getElementById
(
'product_uom'
).
innerHTML
=
' unité(s)'
;
$
(
'#edition_input'
).
attr
(
'type'
,
'number'
)
$
(
'#edition_input'
).
attr
(
'type'
,
'number'
)
.
attr
(
'step'
,
1
)
.
attr
(
'step'
,
1
)
...
@@ -1123,7 +1187,7 @@ function setLineEdition(product) {
...
@@ -1123,7 +1187,7 @@ function setLineEdition(product) {
.
attr
(
'max'
,
9999
);
.
attr
(
'max'
,
9999
);
}
}
}
else
if
(
editing_product
.
product_uom
[
0
]
==
21
)
{
// kg
}
else
if
(
editing_product
.
product_uom
[
0
]
==
21
)
{
// kg
if
(
reception_status
==
'False'
)
{
if
(
reception_status
==
'False'
||
re_editing_qty
===
true
)
{
document
.
getElementById
(
'product_uom'
).
innerHTML
=
' kg'
;
document
.
getElementById
(
'product_uom'
).
innerHTML
=
' kg'
;
$
(
'#edition_input'
).
attr
(
'type'
,
'number'
)
$
(
'#edition_input'
).
attr
(
'type'
,
'number'
)
.
attr
(
'step'
,
0.001
)
.
attr
(
'step'
,
0.001
)
...
@@ -1136,6 +1200,12 @@ function setLineEdition(product) {
...
@@ -1136,6 +1200,12 @@ function setLineEdition(product) {
}
}
}
}
// If editing qty during prices edition
if
(
re_editing_qty
===
true
)
{
document
.
getElementById
(
'edition_header'
).
innerHTML
=
"Ré-éditer la quantité"
;
document
.
getElementById
(
'edition_input_label'
).
innerHTML
=
"Qté"
;
}
// Make edition area blink when edition button clicked
// Make edition area blink when edition button clicked
container_edition
.
classList
.
add
(
'blink_me'
);
container_edition
.
classList
.
add
(
'blink_me'
);
}
}
...
@@ -1149,6 +1219,13 @@ function clearLineEdition() {
...
@@ -1149,6 +1219,13 @@ function clearLineEdition() {
document
.
getElementById
(
'edition_input'
).
value
=
null
;
document
.
getElementById
(
'edition_input'
).
value
=
null
;
document
.
getElementById
(
'search_input'
).
focus
();
document
.
getElementById
(
'search_input'
).
focus
();
document
.
getElementById
(
'product_uom'
).
innerHTML
=
''
;
document
.
getElementById
(
'product_uom'
).
innerHTML
=
''
;
if
(
re_editing_qty
===
true
)
{
document
.
getElementById
(
'edition_header'
).
innerHTML
=
"Editer les prix"
;
document
.
getElementById
(
'edition_input_label'
).
innerHTML
=
"Prix unit."
;
re_editing_qty
=
false
;
}
}
}
/**
/**
...
@@ -1173,6 +1250,57 @@ function editProductInfo (productToEdit, value = null, batch = false) {
...
@@ -1173,6 +1250,57 @@ function editProductInfo (productToEdit, value = null, batch = false) {
newValue
=
isFinite
(
newValue
)
?
newValue
:
0
;
newValue
=
isFinite
(
newValue
)
?
newValue
:
0
;
}
}
// Particular process in case of qty reedition during prices update
if
(
re_editing_qty
===
true
)
{
// Look for product in product's order first step data
let
previous_step_index
=
-
1
;
for
(
let
i
=
0
;
i
<
orders
[
productToEdit
.
id_po
][
"previous_steps_data"
][
"False"
][
"updated_products"
].
length
;
i
++
)
{
if
(
orders
[
productToEdit
.
id_po
][
"previous_steps_data"
][
"False"
][
"updated_products"
][
i
].
id
===
productToEdit
.
id
)
{
previous_step_index
=
i
;
break
;
}
}
if
(
previous_step_index
===
-
1
)
{
// Product qty hasn't been updated yet: add to first step data
productToEdit
.
old_qty
=
productToEdit
.
product_qty
;
productToEdit
.
product_qty
=
newValue
;
productToEdit
.
product_qty_package
=
1
;
productToEdit
.
package_qty
=
productToEdit
.
product_qty
;
orders
[
productToEdit
.
id_po
][
"previous_steps_data"
][
"False"
][
"updated_products"
].
push
(
productToEdit
)
}
else
{
productToEdit
.
product_qty
=
newValue
;
productToEdit
.
package_qty
=
productToEdit
.
product_qty
;
// Product qty has been updated before, update first step data
orders
[
productToEdit
.
id_po
][
"previous_steps_data"
][
"False"
][
"updated_products"
][
previous_step_index
].
product_qty
=
newValue
;
orders
[
productToEdit
.
id_po
][
"previous_steps_data"
][
"False"
][
"updated_products"
][
previous_step_index
].
package_qty
=
newValue
;
}
/* Send request to server to update a single product */
updateType
=
"qty_valid"
;
send
([
productToEdit
]);
// Update temp couchdb order
update_distant_order
(
productToEdit
.
id_po
);
// Put back product in its original list
if
(
editing_origin
===
"to_process"
)
{
add_to_toProcess
(
productToEdit
);
}
else
if
(
editing_origin
===
"processed"
)
{
add_to_processed
(
productToEdit
);
}
return
true
;
}
// addition mode = weight is directly added from scanned product
// addition mode = weight is directly added from scanned product
$
.
each
(
list_processed
,
function
(
i
,
e
)
{
$
.
each
(
list_processed
,
function
(
i
,
e
)
{
if
(
if
(
...
@@ -1452,8 +1580,14 @@ function data_validation() {
...
@@ -1452,8 +1580,14 @@ function data_validation() {
});
});
}
}
// Send the request to the server
/**
function
send
()
{
* Send the request to update order(s) data
*
* @param {Array} given_products If set, only update these products.
* If no given products, we're in the regular process, ie the end of a reception.
* Else, we're in the middle of a reception, so we'll skip some parts.
*/
function
send
(
given_products
=
[])
{
try
{
try
{
// Loading on
// Loading on
openModal
();
openModal
();
...
@@ -1470,15 +1604,19 @@ function send() {
...
@@ -1470,15 +1604,19 @@ function send() {
update_data
.
orders
[
order_id
]
=
{
'po'
:
[]};
update_data
.
orders
[
order_id
]
=
{
'po'
:
[]};
}
}
has_given_products
=
given_products
.
length
>
0
;
// If given products, update these only, else update global updatedProducts list
products_to_update
=
has_given_products
===
true
?
given_products
:
updatedProducts
;
// for each updated product, add it to its order list
// for each updated product, add it to its order list
for
(
i
in
updatedProducts
)
{
for
(
i
in
products_to_update
)
{
/* ---> The following part concerns products found in different orders */
/* ---> The following part concerns products found in different orders */
if
(
'other_orders_data'
in
updatedProducts
[
i
])
{
if
(
'other_orders_data'
in
products_to_update
[
i
])
{
// for each other order of product
// for each other order of product
for
(
other_order_data
of
updatedProducts
[
i
].
other_orders_data
)
{
for
(
other_order_data
of
products_to_update
[
i
].
other_orders_data
)
{
// Make a clone (deep copy) of the product object
// Make a clone (deep copy) of the product object
let
product_copy
=
$
.
extend
(
true
,
{},
updatedProducts
[
i
]);
let
product_copy
=
$
.
extend
(
true
,
{},
products_to_update
[
i
]);
// Set correct order line id for this product
// Set correct order line id for this product
product_copy
.
id
=
other_order_data
.
id_product
;
product_copy
.
id
=
other_order_data
.
id_product
;
...
@@ -1487,30 +1625,30 @@ function send() {
...
@@ -1487,30 +1625,30 @@ function send() {
if
(
reception_status
==
'False'
)
{
if
(
reception_status
==
'False'
)
{
// Reset initial qties in respective orders
// Reset initial qties in respective orders
product_copy
.
old_qty
=
other_order_data
.
initial_qty
;
product_copy
.
old_qty
=
other_order_data
.
initial_qty
;
for
(
j
in
orders
[
updatedProducts
[
i
].
id_po
][
'updated_products'
])
{
for
(
j
in
orders
[
products_to_update
[
i
].
id_po
][
'updated_products'
])
{
if
(
orders
[
updatedProducts
[
i
].
id_po
][
'updated_products'
][
j
].
product_id
[
0
]
if
(
orders
[
products_to_update
[
i
].
id_po
][
'updated_products'
][
j
].
product_id
[
0
]
==
product_copy
.
product_id
[
0
])
{
==
product_copy
.
product_id
[
0
])
{
orders
[
updatedProducts
[
i
].
id_po
][
'updated_products'
][
j
].
old_qty
-=
other_order_data
.
initial_qty
;
orders
[
products_to_update
[
i
].
id_po
][
'updated_products'
][
j
].
old_qty
-=
other_order_data
.
initial_qty
;
break
;
break
;
}
}
}
}
if
(
product_copy
.
product_uom
[
0
]
==
21
&&
updatedProducts
[
i
].
product_qty
>
0.1
)
{
// kg
if
(
product_copy
.
product_uom
[
0
]
==
21
&&
products_to_update
[
i
].
product_qty
>
0.1
)
{
// kg
// Add minimum qty in other orders
// Add minimum qty in other orders
product_copy
.
product_qty_package
=
1
;
product_copy
.
product_qty_package
=
1
;
product_copy
.
package_qty
=
0.1
;
product_copy
.
package_qty
=
0.1
;
product_copy
.
product_qty
=
0.1
;
product_copy
.
product_qty
=
0.1
;
// Remove this qty from first order
// Remove this qty from first order
updatedProducts
[
i
].
package_qty
-=
0.1
;
products_to_update
[
i
].
package_qty
-=
0.1
;
updatedProducts
[
i
].
product_qty
-=
0.1
;
products_to_update
[
i
].
product_qty
-=
0.1
;
}
else
if
(
product_copy
.
product_uom
[
0
]
==
1
&&
updatedProducts
[
i
].
product_qty
>
1
)
{
// Unit
}
else
if
(
product_copy
.
product_uom
[
0
]
==
1
&&
products_to_update
[
i
].
product_qty
>
1
)
{
// Unit
product_copy
.
product_qty_package
=
1
;
product_copy
.
product_qty_package
=
1
;
product_copy
.
package_qty
=
1
;
product_copy
.
package_qty
=
1
;
product_copy
.
product_qty
=
1
;
product_copy
.
product_qty
=
1
;
updatedProducts
[
i
].
package_qty
-=
1
;
products_to_update
[
i
].
package_qty
-=
1
;
updatedProducts
[
i
].
product_qty
-=
1
;
products_to_update
[
i
].
product_qty
-=
1
;
}
else
{
// Not handled, all qty in one order
}
else
{
// Not handled, all qty in one order
product_copy
.
product_qty_package
=
0
;
product_copy
.
product_qty_package
=
0
;
product_copy
.
package_qty
=
0
;
product_copy
.
package_qty
=
0
;
...
@@ -1533,16 +1671,18 @@ function send() {
...
@@ -1533,16 +1671,18 @@ function send() {
/* <--- */
/* <--- */
// Add product to order's prod list
// Add product to order's prod list
prod_order_id
=
updatedProducts
[
i
].
id_po
;
prod_order_id
=
products_to_update
[
i
].
id_po
;
update_data
.
orders
[
prod_order_id
][
'po'
].
push
(
updatedProducts
[
i
]);
update_data
.
orders
[
prod_order_id
][
'po'
].
push
(
products_to_update
[
i
]);
}
}
// Only send error report & no barcode list when no given products (ie normal process, end of reception)
if
(
has_given_products
===
false
)
{
/* Create the error report */
/* Create the error report */
// Send changes between items to process and processed items
// Send changes between items to process and processed items
var
error_report_data
=
{
var
error_report_data
=
{
'group_amount_total'
:
0
,
'group_amount_total'
:
0
,
'update_type'
:
updateType
,
'update_type'
:
updateType
,
'updated_products'
:
updatedProducts
,
'updated_products'
:
products_to_update
,
'user_comments'
:
user_comments
,
'user_comments'
:
user_comments
,
'orders'
:
[]
'orders'
:
[]
};
};
...
@@ -1599,6 +1739,7 @@ function send() {
...
@@ -1599,6 +1739,7 @@ function send() {
alert
(
'Erreur dans l
\'
envoi du rapport.'
);
alert
(
'Erreur dans l
\'
envoi du rapport.'
);
}
}
});
});
}
/* Update orders */
/* Update orders */
$
.
ajax
({
$
.
ajax
({
...
@@ -1611,6 +1752,7 @@ function send() {
...
@@ -1611,6 +1752,7 @@ function send() {
success
:
function
()
{
success
:
function
()
{
closeModal
();
closeModal
();
if
(
has_given_products
===
false
)
{
try
{
try
{
// If step 1 (counting)
// If step 1 (counting)
if
(
reception_status
==
"False"
)
{
if
(
reception_status
==
"False"
)
{
...
@@ -1769,6 +1911,7 @@ function send() {
...
@@ -1769,6 +1911,7 @@ function send() {
console
.
error
(
err
);
console
.
error
(
err
);
report_JS_error
(
err
,
'reception'
);
report_JS_error
(
err
,
'reception'
);
}
}
}
},
},
error
:
function
()
{
error
:
function
()
{
closeModal
();
closeModal
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment