Commit c85a1dcc by Damien Moulard Committed by Alexis Aoun

AAC: update order products data when accessing an order

parent 8e27f5d4
......@@ -66,10 +66,20 @@
position: absolute;
}
#actions_buttons_area {
#main_content .actions_buttons_area {
position: absolute;
width: 100%;
top: 0;
right: 0;
display: flex;
justify-content: space-between;
}
#orders_created .actions_buttons_area {
position: absolute;
width: 100%;
top: 0;
display: flex;
justify-content: flex-start;
}
/* -- Order data */
......@@ -193,7 +203,6 @@
/* - Orders created screen */
.order_created_header {
margin-top: 15px;
margin-bottom: 40px;
}
......
......@@ -27,6 +27,8 @@ var dbc = null,
},
fingerprint = null;
var clicked_order_pill = null;
/* - UTILS */
......@@ -53,6 +55,7 @@ function reset_data() {
package_qty: null,
price: null
};
clicked_order_pill = null;
}
/**
......@@ -99,17 +102,42 @@ function add_product() {
return -1;
}
const product_exists = products.findIndex(p => p.name === user_input);
if (product_exists !== -1) {
alert("Cet article est déjà dans le tableau.");
$("#product_input").val('');
return -1;
}
/*
onst product_ids = products.map(p => p.id);
if (product_ids.length > 0) {
clicked_order_pill.find('.pill_order_name').empty().append(`<i class="fas fa-spinner fa-spin"></i>`);
$.ajax({
type: 'POST',
url: '/products/get_product_for_order_helper',
data: JSON.stringify(product_ids),
dataType:"json",
*/
$.ajax({
type: 'GET',
url: '/products/get_product_for_order_helper/' + product.tpl_id,
type: 'POST',
url: '/products/get_product_for_order_helper',
data: JSON.stringify([product.tpl_id]),
dataType:"json",
traditional: true,
contentType: "application/json; charset=utf-8",
success: function(data) {
if (typeof data.id != "undefined") {
data.suppliers = [];
data.default_code = ' ';
products.unshift(data);
let res = data.products[0];
if (typeof res.id != "undefined") {
res.suppliersinfo = [];
res.default_code = ' ';
products.unshift(res);
update_main_screen({'sort_order_dir':'desc'});
} else {
alert("L'article n'a pas toutes les caractéristiques pour être ajouté.");
......@@ -163,6 +191,51 @@ function compute_products_coverage_qties() {
}
}
/**
* Update order products data in case they have changed.
*/
function check_products_data() {
return new Promise((resolve, reject) => {
const product_ids = products.map(p => p.id);
if (product_ids.length > 0) {
clicked_order_pill.find('.pill_order_name').empty().append(`<i class="fas fa-spinner fa-spin"></i>`);
$.ajax({
type: 'POST',
url: '/products/get_product_for_order_helper',
data: JSON.stringify(product_ids),
dataType:"json",
traditional: true,
contentType: "application/json; charset=utf-8",
success: function(data) {
for (let product of data.products) {
const p_index = products.findIndex(p => p.id == product.id);
// Override products data with new data
products[p_index] = { ...products[p_index], ...product };
}
resolve();
},
error: function(data) {
err = {msg: "erreur serveur lors de la vérification des données des articles", ctx: 'check_products_data'};
if (typeof data.responseJSON != 'undefined' && typeof data.responseJSON.error != 'undefined') {
err.msg += ' : ' + data.responseJSON.error;
}
report_JS_error(err, 'orders');
alert(`Erreur lors de la vérification des données des articles. Certaines données peuvent être erronées`);
// Don't block process if this call fails
resolve();
}
});
} else {
resolve();
}
});
}
/* - SUPPLIERS */
......@@ -522,7 +595,8 @@ function generate_inventory() {
* Event fct: on click on an order button
*/
function order_pill_on_click() {
let order_name_container = $(this).find('.pill_order_name');
clicked_order_pill = $(this);
let order_name_container = clicked_order_pill.find('.pill_order_name');
let doc_id = $(order_name_container).text();
dbc.get(doc_id).then((doc) => {
......@@ -773,11 +847,12 @@ function goto_main_screen(doc) {
products = order_doc.products;
selected_suppliers = order_doc.selected_suppliers;
// TODO update products moving data (stock, qté entrante, conso moy/jour)
update_cdb_order();
update_main_screen();
switch_screen();
check_products_data()
.then(() => {
update_cdb_order();
update_main_screen();
switch_screen();
})
}
function back() {
......@@ -1333,8 +1408,8 @@ function update_order_selection_screen() {
$(".order_pill").off();
let existing_orders_container = $("#existing_orders");
existing_orders_container.empty();
$('#new_order_name').val('');
dbc.allDocs({
include_docs: true
......
......@@ -482,7 +482,7 @@ class CagetteProducts(models.Model):
and (p["date_end"] is False or p["date_end"] is not False and p["date_end"] >= today)):
ptids.append(p["product_tmpl_id"][0])
else:
ptids = pids
ptids = [ int(x) for x in pids ]
# Get products templates
f = [
......@@ -507,8 +507,6 @@ class CagetteProducts(models.Model):
#'to': '2019-08-10',
}
sales = CagetteProducts.get_template_products_sales_average(sales_average_params)
print('---- ptids')
print(ptids)
if 'list' in sales and len(sales['list']) > 0:
sales = sales['list']
......
......@@ -5,7 +5,7 @@ from . import views
urlpatterns = [
url(r'^$', views.home),
url(r'^simple_list$', views.get_simple_list),
url(r'^get_product_for_order_helper/([0-9]+)$', views.get_product_for_order_helper),
url(r'^get_product_for_order_helper$', views.get_product_for_order_helper),
url(r'^get_product_data$', views.get_product_data),
url(r'^get_products_stdprices$', views.get_products_stdprices),
url(r'^update_product_stock$', views.update_product_stock),
......
......@@ -39,12 +39,11 @@ def get_simple_list(request):
return JsonResponse(res, safe=False)
def get_product_for_order_helper(request, tpl_id):
def get_product_for_order_helper(request):
res = {}
try:
result = CagetteProducts.get_products_for_order_helper(None, [int(tpl_id)])
if len(result["products"]) == 1:
res = result["products"][0]
pids = json.loads(request.body.decode())
res = CagetteProducts.get_products_for_order_helper(None, pids)
except Exception as e:
coop_logger.error("get_product_for_help_order_line : %s", str(e))
res['error'] = str(e)
......
......@@ -30,10 +30,10 @@
</div>
<div id="main_content" class="page_content" style="display:none;">
<div id="back_to_order_selection_from_main">
<button type="button" class="btn--danger"><i class="fas fa-arrow-left"></i>&nbsp; Retour</button>
</div>
<div id="actions_buttons_area">
<div class="actions_buttons_area">
<button type="button" class="btn--danger" id="back_to_order_selection_from_main">
<i class="fas fa-arrow-left"></i>&nbsp; Retour
</button>
<button type="button" class='btn--primary' id="do_inventory" style="display:none;">
Faire un inventaire
</button>
......@@ -80,8 +80,10 @@
</div>
<div id="orders_created" class="page_content" style="display:none;">
<div id="back_to_order_selection_from_orders_created">
<button type="button" class="btn--danger"><i class="fas fa-arrow-left"></i>&nbsp; Retour</button>
<div class="actions_buttons_area">
<button type="button" class="btn--danger" id="back_to_order_selection_from_orders_created">
<i class="fas fa-arrow-left"></i>&nbsp; Retour
</button>
</div>
<div class="order_created_header txtcenter">
<h2>Commandes créées !</h2>
......
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