Commit bc6ab168 by François C.

Merge branch '3017-reception-display-step1-qties-in-step2' into 'dev_cooperatic'

REC: display received qty in prices step

See merge request !174
parents 2384a390 2f994b0d
Pipeline #2191 passed with stage
in 1 minute 31 seconds
......@@ -58,6 +58,8 @@ RECEPTION_MERGE_ORDERS_PSWD = 'jpsrcp'
RECEPTION_PB = "Ici, vous pouvez signaler toute anomalie lors d'une réception, les produits non commandés, cassés ou pourris. \
Merci d'indiquer un maximum d'informations, le nom du produit et son code barre."
DISPLAY_COL_AUTRES = False
RECEPTION_ADD_ALL_LEFT_IS_GOOD_QTIES = False
RECEPTION_ADD_ALL_LEFT_IS_GOOD_PRICES = True
DAV_PATH = '/shared_dir/dav/'
......
......@@ -61,7 +61,8 @@ RECEPTION_PDT_LABELS_BTN_TEXT = 'Lancer l\'impression'
RECEPTION_SHELF_LABEL_PRINT = True
FIXED_BARCODE_PREFIX = '0499'
RECEPTION_ADD_ADMIN_MODE = True
RECEPTION_ADD_ALL_LEFT_IS_GOOD = True
RECEPTION_ADD_ALL_LEFT_IS_GOOD_QTIES = True
RECEPTION_ADD_ALL_LEFT_IS_GOOD_PRICES = True
SUBSCRIPTION_PAYMENT_MEANINGS = [
{'code': 'cash', 'title': 'Espèces', 'journal_id': CASH_PAYMENT_ID},
......
......@@ -337,9 +337,14 @@
- RECEPTION_ADD_ADMIN_MODE = True
- RECEPTION_ADD_ALL_LEFT_IS_GOOD = True
- RECEPTION_ADD_ALL_LEFT_IS_GOOD_QTIES = False
A second button appears to make all pending products (left list) to be considered as "good"
During qties step, a second button appears to make all pending products (left list) to be considered as "good"
(RECEPTION_ADD_ADMIN_MODE needs to be set at True)
- RECEPTION_ADD_ALL_LEFT_IS_GOOD_PRICES = False
During prices step, a second button appears to make all pending products (left list) to be considered as "good"
(RECEPTION_ADD_ADMIN_MODE needs to be set at True)
- RECEPTION_MERGE_ORDERS_PSWD = 'pass2makeApause'
......
......@@ -147,7 +147,11 @@ table.dataTable {
border-radius: 3px;
}
#connected_actions .full_width_button, .half_width_button {
#all_left_is_good {
display: none;
}
.connected_actions .full_width_button, .half_width_button {
height: 45px;
width: 40%;
border-radius: 3px;
......@@ -193,6 +197,14 @@ div#container_edition {
font-size: 2rem;
}
tr.even td.row_product_no_qty {
background-color: #f0ad4e; /*#ec971f*/
}
tr.odd td.row_product_no_qty {
background-color: rgb(236, 182, 106); /*#ec971f*/
}
/* Accordion style */
/* Style the buttons that are used to open and close the accordion panel */
......
......@@ -251,6 +251,23 @@ function fetch_data() {
for (order_data of data.orders) {
// for each product in order
for (i in order_data.po) {
// If in step 2, find old qty in previous step data
if (
reception_status == 'qty_valid'
&& "previous_steps_data" in orders[order_data.id_po]
&& "False" in orders[order_data.id_po]["previous_steps_data"]
&& "updated_products" in orders[order_data.id_po]["previous_steps_data"]["False"] // extra + secturity
) {
// For each updated product in step 1
for (let step1_updated_product of orders[order_data.id_po]["previous_steps_data"]["False"]["updated_products"]) {
// If product found
if (step1_updated_product["product_id"][0] === order_data.po[i]["product_id"][0]) {
// Add old qty
order_data.po[i].old_qty = step1_updated_product.old_qty;
}
}
}
// Does product already exists in list_to_process?
var existing_index = null;
......@@ -315,7 +332,17 @@ function fetch_data() {
// Init Data & listeners
function initLists() {
try {
// Enable validation buttons now the data's here
// Set action buttons for remaining items
if (
add_all_left_is_good_qties === "True" && reception_status == "False"
||
add_all_left_is_good_prices === "True" && reception_status == "qty_valid"
) {
$("#remaining_lines_actions_area").addClass("connected_actions");
$("#all_left_is_good").show();
}
// Enable validation buttons now the data's here
if (reception_status == "False") {
document.getElementById("valid_qty").disabled = false;
document.getElementById("valid_all_qties").disabled = false;
......@@ -380,12 +407,31 @@ function initLists() {
+ display_barcode + '</span> </div>';
}
},
{data:"product_uom.1", title: "Unité vente", className:"dt-body-center", orderable: false},
{ data:"product_uom.1",
title: "Unité vente",
className:"dt-body-center",
orderable: false,
render: function (data) {
if (data.toLowerCase().indexOf('unit') === 0) {
return "U";
} else {
return data;
}
}
},
{
data:"product_qty",
title: "Qté",
className:"dt-body-center",
visible: (reception_status == "False")
render: function (data, type, full) {
if (reception_status == "False") {
return data;
} else if ("old_qty" in full) {
return `${data}/${full.old_qty}`;
} else {
return `${data}/${data}`;
}
}
},
{
data:"price_unit",
......@@ -447,14 +493,13 @@ function initLists() {
data:"product_qty",
title:"Qté",
className:"dt-head-center dt-body-center",
visible: (reception_status == "False"),
// visible: (reception_status == "False"),
render: function (data, type, full) {
let disp = [
full.product_qty,
(full.old_qty !== undefined)?full.old_qty:full.product_qty
data,
(full.old_qty !== undefined) ? full.old_qty : data
].join("/");
return disp;
},
orderable: false
......@@ -487,9 +532,6 @@ function initLists() {
}
];
console.log(columns_to_process);
// Init table for to_process content
table_to_process = $('#table_to_process').DataTable({
data: list_to_process,
......@@ -505,7 +547,21 @@ function initLists() {
scrollCollapse: true,
paging: false,
dom: 'lrtip', // Remove the search input from that table
language: {url : '/static/js/datatables/french.json'}
language: {url : '/static/js/datatables/french.json'},
createdRow: function(row) {
// Add class to rows with product with qty at 0
var row_data = $('#table_to_process').DataTable()
.row(row)
.data();
if (row_data !== undefined && row_data.product_qty === 0) {
for (var i = 0; i < row.cells.length; i++) {
const cell_node = row.cells[i];
$(cell_node).addClass('row_product_no_qty');
}
}
}
});
// Init table for processed content
......@@ -523,7 +579,20 @@ function initLists() {
scrollCollapse: true,
paging: false,
dom: 'lrtip', // Remove the search input from that table
language: {url : '/static/js/datatables/french.json'}
language: {url : '/static/js/datatables/french.json'},
createdRow: function(row) {
var row_data = $('#table_processed').DataTable()
.row(row)
.data();
if (row_data !== undefined && row_data.product_qty === 0) {
for (var i = 0; i < row.cells.length; i++) {
const cell_node = row.cells[i];
$(cell_node).addClass('row_product_no_qty');
}
}
}
});
} catch (e) {
err = {msg: e.name + ' : ' + e.message, ctx: 'initLists: init tables'};
......@@ -966,7 +1035,7 @@ function editProductInfo (productToEdit, value = null, batch = false) {
// If 'value' parameter not set, get value from edition input
if (value == null) {
newValue = parseFloat(document.getElementById('edition_input').value.replace(',', '.'));
newValue = newValue.isFinite() ? newValue : 0;
newValue = isFinite(newValue) ? newValue : 0;
}
$.each(list_processed, function(i, e) {
......@@ -1058,7 +1127,6 @@ function editProductInfo (productToEdit, value = null, batch = false) {
}
}
} else {
if (isValid) {
//if product is valid -> remove from updated_products list and add to valid_products list
//removing from updated_products
......@@ -1977,7 +2045,7 @@ $(document).ready(function() {
}
}
// if not in group, add current order to group
// if not in group, add current order to group (1 order = group of 1)
if (group_ids.length == 0) {
group_ids.push(id);
}
......
......@@ -79,6 +79,8 @@ def produits(request, id):
'db': settings.COUCHDB['dbs']['reception'],
'POUCHDB_VERSION': getattr(settings, 'POUCHDB_VERSION', ''),
"DISPLAY_AUTRES": getattr(settings, 'DISPLAY_COL_AUTRES', True),
"ADD_ALL_LEFT_IS_GOOD_QTIES": False,
"ADD_ALL_LEFT_IS_GOOD_PRICES": False,
}
fixed_barcode_prefix = '0490'
......@@ -91,10 +93,14 @@ def produits(request, id):
fixed_barcode_prefix = settings.FIXED_BARCODE_PREFIX
if hasattr(settings, 'RECEPTION_ADD_ADMIN_MODE'):
context['add_admin_mode'] = settings.RECEPTION_ADD_ADMIN_MODE
if hasattr(settings, 'RECEPTION_ADD_ALL_LEFT_IS_GOOD'):
if hasattr(settings, 'RECEPTION_ADD_ALL_LEFT_IS_GOOD_QTIES'):
is_connected_user = CagetteUser.are_credentials_ok(request)
if is_connected_user is True:
context['add_all_left_is_good'] = settings.RECEPTION_ADD_ALL_LEFT_IS_GOOD
context['ADD_ALL_LEFT_IS_GOOD_QTIES'] = settings.RECEPTION_ADD_ALL_LEFT_IS_GOOD_QTIES
if hasattr(settings, 'RECEPTION_ADD_ALL_LEFT_IS_GOOD_PRICES'):
is_connected_user = CagetteUser.are_credentials_ok(request)
if is_connected_user is True:
context['ADD_ALL_LEFT_IS_GOOD_PRICES'] = settings.RECEPTION_ADD_ALL_LEFT_IS_GOOD_PRICES
context['FIXED_BARCODE_PREFIX'] = fixed_barcode_prefix
template = loader.get_template('reception/reception_produits.html')
......@@ -113,7 +119,7 @@ def get_orders_lines(request):
data = json.loads(request.body.decode())
orders = []
for id_po in data['po_ids']:
order_lines = CagetteReception.get_order_lines_by_po(int(id_po))
order_lines = CagetteReception.get_order_lines_by_po(int(id_po), nullQty = True)
orders.append({'id_po': id_po, 'po': order_lines})
return JsonResponse({'orders': orders})
......
......@@ -88,16 +88,18 @@
<button class="btn--warning full_width_button" name="faq" onclick="openFAQ()">FAQ - En cas de soucis avec la marche à suivre...</button>
</div>
<div class="page_element txtcenter">
{% if add_all_left_is_good %}
<div id="connected_actions">
<div id="remaining_lines_actions_area">
<span id="valid_all"></span>
<span id="all_left_is_good">
<button class='btn--danger half_width_button' onclick="openModal($('#templates #modal_all_left_is_good').html(), confirm_all_left_is_good, 'Confirmer', false);">Tout le reste est bon</button>
<button
class='btn--danger half_width_button'
id="all_left_is_good_button"
onclick="openModal($('#templates #modal_all_left_is_good').html(), confirm_all_left_is_good, 'Confirmer', false);"
>
Tout le reste est bon
</button>
</span>
</div>
{% else %}
<span id="valid_all"></span>
{% endif %}
</div>
</div>
......@@ -194,6 +196,8 @@
var couchdb_dbname = '{{db}}';
var couchdb_server = '{{couchdb_server}}' + couchdb_dbname;
var display_autres = "{{DISPLAY_AUTRES}}";
var add_all_left_is_good_qties = "{{ADD_ALL_LEFT_IS_GOOD_QTIES}}"
var add_all_left_is_good_prices = "{{ADD_ALL_LEFT_IS_GOOD_PRICES}}"
</script>
<script src="{% static "js/all_common.js" %}?v="></script>
<script src='{% static "js/barcodes.js" %}?v='></script>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment