Commit 8ee8712f by Damien Moulard

AAC: fix fetch one product

parent dd73be81
Pipeline #1120 failed with stage
in 1 minute 22 seconds
......@@ -115,6 +115,13 @@
margin-left: 5px;
}
.custom_cell_content {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.product_qty_input {
width: 100px;
}
......
......@@ -111,7 +111,7 @@ function add_product() {
$.ajax({
type: 'GET',
url: '/products/get_product_for_help_order_line/' + product.tpl_id,
url: '/products/get_product_for_order_helper/' + product.tpl_id,
dataType:"json",
traditional: true,
contentType: "application/json; charset=utf-8",
......@@ -567,7 +567,7 @@ function order_pill_on_click() {
className: "error"
}
);
update_order_selection_screen()
update_order_selection_screen();
} else {
alert('Erreur lors de la récupération de la commande. Si l\'erreur persiste, contactez un administrateur svp.');
}
......@@ -859,13 +859,13 @@ function _compute_product_data(product) {
}
}
if (p_package_qties.every( (val, i, arr) => val === arr[0] )) {
if (p_package_qties.length == 0 || !p_package_qties.every( (val, i, arr) => val === arr[0] )) {
// Don't display package qty if no supplierinf or if not all package qties are equals,
item.package_qty = 'X';
} else {
// If all package qties are equals, display it
item.package_qty = p_package_qties[0];
} else {
// Else display an X
item.package_qty = 'X';
}
}
/* Coverage related data */
if (order_doc.coverage_days !== null) {
......@@ -988,9 +988,9 @@ function prepare_datatable_columns() {
const base_id = `product_${full.id}_supplier_${supplier.id}`;
if (data === false) {
return `<div id="${base_id}_cell_content" class="cell_content">X</div>`;
return `<div id="${base_id}_cell_content" class="custom_cell_content">X</div>`;
} else {
let content = `<div id="${base_id}_cell_content" class="cell_content">
let content = `<div id="${base_id}_cell_content" class="custom_cell_content">
<input type="number" class="product_qty_input" id="${base_id}_qty_input" min="0" value=${data}>`;
if (full.package_qty === 'X') {
......@@ -1012,14 +1012,6 @@ function prepare_datatable_columns() {
data: "package_qty",
title: "Colisage",
className: "dt-body-center",
render: (data, type, full) => {
if (full.package_qty === 'X') {
return '<div class="tooltip">' + data + ' <span class="tooltiptext tt_twolines">Colisages différents !</span></div>'
} else {
return data;
}
},
width: "4%"
});
......
......@@ -42,7 +42,7 @@ def get_supplier_products(request):
""" Get supplier products """
sid = request.GET.get('sid', '')
res = CagetteProducts.get_products_by_supplier(sid)
res = CagetteProducts.get_products_for_order_helper(sid)
if 'error' in res:
return JsonResponse(res, status=500)
......
......@@ -171,19 +171,6 @@ class CagetteProduct(models.Model):
return res
@staticmethod
def get_product_for_help_order_line(product_tmpl_id):
api = OdooAPI()
res = []
try:
f = ["id", "state", "name", "default_code", "qty_available", "incoming_qty", "uom_id", "purchase_ok"]
# TODO fetch only 'purchase_ok' products ?
c = [['id', '=', product_tmpl_id], ['purchase_ok', '=', True]]
products_t = api.search_read('product.template', c, f)
res = [p for p in products_t if p["state"] != "end" and p["state"] != "obsolete"]
except Exception as e:
coop_logger.error("Odoo API get_product_for_help_order_line (tpl_id = %s) : %s", str(product_tmpl_id), str(e))
return res
class CagetteProducts(models.Model):
"""Initially used to make massive barcode update."""
......@@ -468,7 +455,12 @@ class CagetteProducts(models.Model):
return res
@staticmethod
def get_products_by_supplier(supplier_id):
def get_products_for_order_helper(supplier_id, pids = []):
"""
One of the two parameters must be set.
Get products by supplier if a supplier_id is set.
If supplier_id is None, get products specified in pids.
"""
api = OdooAPI()
res = {}
......@@ -476,18 +468,21 @@ class CagetteProducts(models.Model):
try:
today = datetime.date.today().strftime("%Y-%m-%d")
# Get products/supplier relation
f = ["product_tmpl_id", 'date_start', 'date_end', 'package_qty', 'price']
c = [['name', '=', int(supplier_id)]]
psi = api.search_read('product.supplierinfo', c, f)
# Filter valid data
ptids = []
for p in psi:
if (p["product_tmpl_id"] is not False
and (p["date_start"] is False or p["date_end"] is not False and p["date_start"] <= today)
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])
if supplier_id is not None:
# Get products/supplier relation
f = ["product_tmpl_id", 'date_start', 'date_end', 'package_qty', 'price']
c = [['name', '=', int(supplier_id)]]
psi = api.search_read('product.supplierinfo', c, f)
# Filter valid data
ptids = []
for p in psi:
if (p["product_tmpl_id"] is not False
and (p["date_start"] is False or p["date_end"] is not False and p["date_start"] <= today)
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
# Get products templates
f = [
......@@ -506,11 +501,14 @@ class CagetteProducts(models.Model):
products_t = api.search_read('product.template', c, f)
filtered_products_t = [p for p in products_t if p["state"] != "end" and p["state"] != "obsolete"]
sales_average_params = {'ids': ptids,
#'from': '2019-06-10',
#'to': '2019-08-10',
}
sales_average_params = {
'ids': ptids,
#'from': '2019-06-10',
#'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']
......@@ -519,12 +517,13 @@ class CagetteProducts(models.Model):
# Add supplier data to product data
for i, fp in enumerate(filtered_products_t):
psi_item = next(item for item in psi if item["product_tmpl_id"] is not False and item["product_tmpl_id"][0] == fp["id"])
filtered_products_t[i]['suppliersinfo'] = [{
'supplier_id': int(supplier_id),
'package_qty': psi_item["package_qty"],
'price': psi_item["price"]
}]
if supplier_id is not None:
psi_item = next(item for item in psi if item["product_tmpl_id"] is not False and item["product_tmpl_id"][0] == fp["id"])
filtered_products_t[i]['suppliersinfo'] = [{
'supplier_id': int(supplier_id),
'package_qty': psi_item["package_qty"],
'price': psi_item["price"]
}]
for s in sales:
if s["id"] == fp["id"]:
......@@ -534,7 +533,7 @@ class CagetteProducts(models.Model):
res["products"] = filtered_products_t
except Exception as e:
coop_logger.error('get_products_by_supplier %s (%s)', str(e), str(supplier_id))
coop_logger.error('get_products_for_order_helper %s (%s)', str(e), str(supplier_id))
res["error"] = str(e)
return res
......
......@@ -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_help_order_line/([0-9]+)$', views.get_product_for_help_order_line),
url(r'^get_product_for_order_helper/([0-9]+)$', 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,12 @@ def get_simple_list(request):
return JsonResponse(res, safe=False)
def get_product_for_help_order_line(request, tpl_id):
def get_product_for_order_helper(request, tpl_id):
res = {}
try:
result = CagetteProduct.get_product_for_help_order_line(tpl_id)
if len(result) == 1:
res = result[0]
result = CagetteProducts.get_products_for_order_helper(None, [int(tpl_id)])
if len(result["products"]) == 1:
res = result["products"][0]
except Exception as e:
coop_logger.error("get_product_for_help_order_line : %s", str(e))
res['error'] = str(e)
......
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