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
8ee8712f
Commit
8ee8712f
authored
Jun 30, 2021
by
Damien Moulard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
AAC: fix fetch one product
parent
dd73be81
Pipeline
#1120
failed with stage
in 1 minute 22 seconds
Changes
6
Pipelines
2
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
58 additions
and
60 deletions
+58
-60
oders_helper_style.css
orders/static/css/oders_helper_style.css
+7
-0
orders_helper.js
orders/static/js/orders_helper.js
+9
-17
views.py
orders/views.py
+1
-1
models.py
products/models.py
+36
-37
urls.py
products/urls.py
+1
-1
views.py
products/views.py
+4
-4
No files found.
orders/static/css/oders_helper_style.css
View file @
8ee8712f
...
...
@@ -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
;
}
...
...
orders/static/js/orders_helper.js
View file @
8ee8712f
...
...
@@ -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="c
ustom_c
ell_content">X</div>`
;
}
else
{
let
content
=
`<div id="
${
base_id
}
_cell_content" class="cell_content">
let
content
=
`<div id="
${
base_id
}
_cell_content" class="c
ustom_c
ell_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%"
});
...
...
orders/views.py
View file @
8ee8712f
...
...
@@ -42,7 +42,7 @@ def get_supplier_products(request):
""" Get supplier products """
sid
=
request
.
GET
.
get
(
'sid'
,
''
)
res
=
CagetteProducts
.
get_products_
by_suppli
er
(
sid
)
res
=
CagetteProducts
.
get_products_
for_order_help
er
(
sid
)
if
'error'
in
res
:
return
JsonResponse
(
res
,
status
=
500
)
...
...
products/models.py
View file @
8ee8712f
...
...
@@ -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_suppli
er
%
s (
%
s)'
,
str
(
e
),
str
(
supplier_id
))
coop_logger
.
error
(
'get_products_
for_order_help
er
%
s (
%
s)'
,
str
(
e
),
str
(
supplier_id
))
res
[
"error"
]
=
str
(
e
)
return
res
...
...
products/urls.py
View file @
8ee8712f
...
...
@@ -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
),
...
...
products/views.py
View file @
8ee8712f
...
...
@@ -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
=
CagetteProduct
s
.
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
)
...
...
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