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
83db0aad
Commit
83db0aad
authored
Feb 02, 2022
by
François C.
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev_cooperatic' into '#1925-ACL-multiple-down-key-cause-error'
# Conflicts: # orders/static/js/orders_helper.js
parents
6065759d
46d9ed42
Pipeline
#1745
passed with stage
in 1 minute 37 seconds
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
76 additions
and
59 deletions
+76
-59
orders_helper.js
orders/static/js/orders_helper.js
+20
-12
views.py
outils/views.py
+27
-10
models.py
sales/models.py
+19
-30
sales.js
sales/static/js/sales.js
+10
-7
No files found.
orders/static/js/orders_helper.js
View file @
83db0aad
...
@@ -705,6 +705,8 @@ function save_products_npa_minimal_stock(product, inputs) {
...
@@ -705,6 +705,8 @@ function save_products_npa_minimal_stock(product, inputs) {
actions
.
minimal_stock
=
input
.
val
()
actions
.
minimal_stock
=
input
.
val
()
}
}
});
});
openModal
();
$
.
ajax
({
$
.
ajax
({
type
:
"POST"
,
type
:
"POST"
,
url
:
"/products/update_npa_and_minimal_stock"
,
url
:
"/products/update_npa_and_minimal_stock"
,
...
@@ -715,17 +717,6 @@ function save_products_npa_minimal_stock(product, inputs) {
...
@@ -715,17 +717,6 @@ function save_products_npa_minimal_stock(product, inputs) {
success
:
()
=>
{
success
:
()
=>
{
const
index
=
products
.
findIndex
(
p
=>
p
.
id
==
product
.
id
);
const
index
=
products
.
findIndex
(
p
=>
p
.
id
==
product
.
id
);
// Give time for modal to fade
setTimeout
(
function
()
{
$
(
".actions_buttons_area .right_action_buttons"
).
notify
(
"Actions enregistrées !"
,
{
elementPosition
:
"bottom right"
,
className
:
"success"
,
arrowShow
:
false
}
);
},
500
);
products
[
index
].
minimal_stock
=
actions
.
minimal_stock
;
products
[
index
].
minimal_stock
=
actions
.
minimal_stock
;
if
(
actions
.
npa
.
length
>
0
)
{
if
(
actions
.
npa
.
length
>
0
)
{
// Remove NPA products
// Remove NPA products
...
@@ -734,7 +725,24 @@ function save_products_npa_minimal_stock(product, inputs) {
...
@@ -734,7 +725,24 @@ function save_products_npa_minimal_stock(product, inputs) {
debounceFunction
(
update_cdb_order
);
debounceFunction
(
update_cdb_order
);
}
}
closeModal
();
check_products_data
()
.
then
(()
=>
{
update_cdb_order
();
update_main_screen
();
closeModal
();
// Give time for modal to fade
setTimeout
(
function
()
{
$
(
".actions_buttons_area .right_action_buttons"
).
notify
(
"Actions enregistrées !"
,
{
elementPosition
:
"bottom right"
,
className
:
"success"
,
arrowShow
:
false
}
);
},
500
);
});
},
},
error
:
function
(
data
)
{
error
:
function
(
data
)
{
let
msg
=
"erreur serveur lors de la sauvegarde"
.
let
msg
=
"erreur serveur lors de la sauvegarde"
.
...
...
outils/views.py
View file @
83db0aad
...
@@ -189,34 +189,51 @@ class ExportPOS(View):
...
@@ -189,34 +189,51 @@ class ExportPOS(View):
kept_sessions_id
.
append
(
s
[
'id'
])
kept_sessions_id
.
append
(
s
[
'id'
])
key
=
y
+
'-'
+
m
+
'-'
+
d
key
=
y
+
'-'
+
m
+
'-'
+
d
if
not
(
key
in
totals
):
if
not
(
key
in
totals
):
totals
[
key
]
=
{
'CB'
:
0
,
'CSH'
:
0
,
'CHQ'
:
0
,
'TOTAL'
:
0
}
totals
[
key
]
=
{
'CB'
:
0
,
'CSH'
:
0
,
'CHQ'
:
0
,
'CB_DEJ'
:
0
,
'CHQ_DEJ'
:
0
,
'TOTAL'
:
0
}
sub_total
=
0
sub_total
=
0
cb
=
chq
=
csh
=
0
cb
=
chq
=
csh
=
cbd
=
chqd
=
0
for
p
in
s
[
'payments'
]:
for
p
in
s
[
'payments'
]:
# p['name'] is a sequence generated string
# Test order is important as CHEQDEJ contains CHEQ for ex.
# p['journal'] could be used but easier to change in Odoo interface
sub_amount
=
round
(
p
[
'total_amount'
],
2
)
if
'CSH'
in
p
[
'name'
]:
if
'CSH'
in
p
[
'name'
]:
csh
=
round
(
p
[
'total_amount'
],
2
)
csh
=
sub_amount
elif
'CHEQDEJ'
in
p
[
'name'
]:
chqd
=
sub_amount
elif
'CHEQ'
in
p
[
'name'
]:
elif
'CHEQ'
in
p
[
'name'
]:
chq
=
round
(
p
[
'total_amount'
],
2
)
chq
=
sub_amount
elif
'CBDEJ'
in
p
[
'name'
]:
cbd
=
sub_amount
elif
'CB'
in
p
[
'name'
]:
elif
'CB'
in
p
[
'name'
]:
cb
=
round
(
p
[
'total_amount'
],
2
)
cb
=
sub_amount
sub_total
+=
round
(
p
[
'total_amount'
],
2
)
sub_total
+=
sub_amount
totals
[
key
][
'CB'
]
+=
cb
totals
[
key
][
'CB'
]
+=
cb
totals
[
key
][
'CSH'
]
+=
csh
totals
[
key
][
'CSH'
]
+=
csh
totals
[
key
][
'CHQ'
]
+=
chq
totals
[
key
][
'CHQ'
]
+=
chq
totals
[
key
][
'CB_DEJ'
]
+=
cbd
totals
[
key
][
'CHQ_DEJ'
]
+=
chqd
totals
[
key
][
'TOTAL'
]
+=
round
(
sub_total
,
2
)
totals
[
key
][
'TOTAL'
]
+=
round
(
sub_total
,
2
)
details_lines
.
append
([
mois
,
s
[
'mm_dates'
][
'min'
],
s
[
'mm_dates'
][
'min'
],
s
[
'caisse'
],
s
[
'name'
],
details_lines
.
append
([
mois
,
s
[
'mm_dates'
][
'min'
],
s
[
'mm_dates'
][
'min'
],
s
[
'caisse'
],
s
[
'name'
],
cb
,
csh
,
chq
,
sub_total
])
cb
,
csh
,
chq
,
cbd
,
chqd
,
sub_total
])
wb
=
Workbook
()
wb
=
Workbook
()
ws1
=
wb
.
create_sheet
(
"Totaux "
+
mois
,
0
)
ws1
=
wb
.
create_sheet
(
"Totaux "
+
mois
,
0
)
ws2
=
wb
.
create_sheet
(
"Détails "
+
mois
,
1
)
ws2
=
wb
.
create_sheet
(
"Détails "
+
mois
,
1
)
ws1
.
append
([
'date'
,
'CB'
,
'CSH'
,
'CHQ'
,
'Total'
])
ws1
.
append
([
'date'
,
'CB'
,
'CSH'
,
'CHQ'
,
'
CB_DEJ'
,
'CHQ_DEJ'
,
'
Total'
])
for
day
in
sorted
(
totals
):
for
day
in
sorted
(
totals
):
cb
=
totals
[
day
][
'CB'
]
cb
=
totals
[
day
][
'CB'
]
csh
=
totals
[
day
][
'CSH'
]
csh
=
totals
[
day
][
'CSH'
]
chq
=
totals
[
day
][
'CHQ'
]
chq
=
totals
[
day
][
'CHQ'
]
cbd
=
totals
[
day
][
'CB_DEJ'
]
chqd
=
totals
[
day
][
'CHQ_DEJ'
]
total
=
totals
[
day
][
'TOTAL'
]
total
=
totals
[
day
][
'TOTAL'
]
ws1
.
append
([
day
,
cb
,
csh
,
chq
,
total
])
ws1
.
append
([
day
,
cb
,
csh
,
chq
,
cbd
,
chqd
,
total
])
ws2
.
append
([
'mois'
,
'min_date'
,
'max_date'
,
'Caisse'
,
'session'
,
'CB'
,
'CSH'
,
'CHQ'
,
'total'
])
ws2
.
append
([
'mois'
,
'min_date'
,
'max_date'
,
'Caisse'
,
'session'
,
'CB'
,
'CSH'
,
'CHQ'
,
'
CB_DEJ'
,
'CHQ_DEJ'
,
'
total'
])
for
row
in
details_lines
:
for
row
in
details_lines
:
ws2
.
append
(
row
)
ws2
.
append
(
row
)
wb_name
=
'export_sessions__'
+
mois
+
'.xlsx'
wb_name
=
'export_sessions__'
+
mois
+
'.xlsx'
...
...
sales/models.py
View file @
83db0aad
...
@@ -14,49 +14,38 @@ class CagetteSales(models.Model):
...
@@ -14,49 +14,38 @@ class CagetteSales(models.Model):
def
get_sales
(
self
,
date_from
,
date_to
):
def
get_sales
(
self
,
date_from
,
date_to
):
res
=
[]
res
=
[]
# Get pos sessions
# Get pos orders
cond
=
[[
'stop_at'
,
'>='
,
date_from
],
[
'stop_at'
,
'<='
,
date_to
],
[
'state'
,
'='
,
"closed"
]]
cond
=
[[
'date_order'
,
'>='
,
date_from
],
[
'date_order'
,
'<='
,
date_to
]]
fields
=
[]
fields
=
[
'partner_id'
,
'statement_ids'
,
'name'
]
sessions
=
self
.
o_api
.
search_read
(
'pos.session'
,
cond
,
fields
)
orders
=
self
.
o_api
.
search_read
(
'pos.order'
,
cond
,
fields
)
# Get bank statements of these sessions
# Get bank statements of these sessions
statements
=
[]
statements
=
[]
for
s
in
sessions
:
statements_partners
=
{}
statements
=
statements
+
s
[
"statement_ids"
]
statements_orders
=
{}
for
o
in
orders
:
statements
=
statements
+
o
[
"statement_ids"
]
for
s
in
o
[
"statement_ids"
]:
statements_partners
[
s
]
=
o
[
"partner_id"
][
1
]
statements_orders
[
s
]
=
o
[
"name"
]
# Get payment lines
# Get payment lines
cond
=
[[
'
statement_
id'
,
'in'
,
statements
]]
cond
=
[[
'id'
,
'in'
,
statements
]]
fields
=
[
"
partner_id"
,
"amount"
,
"journal_id"
,
"create_date"
,
"
date"
]
fields
=
[
"
amount"
,
"journal_id"
,
"create_
date"
]
payments
=
self
.
o_api
.
search_read
(
'account.bank.statement.line'
,
cond
,
fields
,
order
=
"create_date ASC"
,
limit
=
50000
)
payments
=
self
.
o_api
.
search_read
(
'account.bank.statement.line'
,
cond
,
fields
,
order
=
"create_date ASC"
,
limit
=
50000
)
item
=
None
try
:
try
:
for
payment
in
payments
:
for
payment
in
payments
:
# POS session can contain payments from another day (closing session on next morning, ...)
res
.
append
({
if
payment
[
"date"
]
>=
date_from
and
payment
[
"date"
]
<=
date_to
:
"partner"
:
statements_partners
[
payment
[
"id"
]],
# If the consecutive payment in the results is from the same partner on the same day, we consider it's the same basket
if
item
is
not
None
and
item
[
"partner_id"
][
0
]
==
payment
[
"partner_id"
][
0
]
and
item
[
"date"
]
==
payment
[
"date"
]:
res
[
len
(
res
)
-
1
][
"total_amount"
]
+=
round
(
float
(
payment
[
"amount"
]),
2
)
res
[
len
(
res
)
-
1
][
"payments"
]
.
append
({
"amount"
:
round
(
float
(
payment
[
"amount"
]),
2
),
"journal_id"
:
payment
[
"journal_id"
]
})
else
:
item
=
{
"partner_id"
:
payment
[
"partner_id"
],
"create_date"
:
payment
[
"create_date"
],
"create_date"
:
payment
[
"create_date"
],
"
date"
:
payment
[
"date"
],
"
pos_order_name"
:
statements_orders
[
payment
[
"id"
]
],
"total_amount"
:
round
(
float
(
payment
[
"amount"
]),
2
),
"total_amount"
:
round
(
float
(
payment
[
"amount"
]),
2
),
"payments"
:
[
"payments"
:
[
{
{
"amount"
:
round
(
float
(
payment
[
"amount"
]),
2
),
"amount"
:
round
(
float
(
payment
[
"amount"
]),
2
),
"journal_id"
:
payment
[
"journal_id"
]
"journal_id"
:
payment
[
"journal_id"
]
}
}
]
]
}
})
res
.
append
(
item
)
except
Exception
as
e
:
except
Exception
as
e
:
pass
coop_logger
.
error
(
"get_sales
%
s"
,
str
(
e
))
return
res
return
res
sales/static/js/sales.js
View file @
83db0aad
...
@@ -38,20 +38,23 @@ function display_orders(orders) {
...
@@ -38,20 +38,23 @@ function display_orders(orders) {
columns
:[
columns
:[
{
{
data
:
"create_date"
,
data
:
"create_date"
,
title
:
"Date
de vente
"
,
title
:
"Date
enregistrement
"
,
width
:
"10%"
width
:
"10%"
},
},
{
{
data
:
"partner_id"
,
data
:
"pos_order_name"
,
title
:
"Ref. Caisse"
,
width
:
"10%"
},
{
data
:
"partner"
,
title
:
"Membre"
,
title
:
"Membre"
,
width
:
"50%"
,
width
:
"40%"
render
:
function
(
data
)
{
return
data
[
1
];
}
},
},
{
{
data
:
"total_amount"
,
data
:
"total_amount"
,
title
:
"Montant d
u panier
"
,
title
:
"Montant d
û
"
,
className
:
"dt-body-center"
,
className
:
"dt-body-center"
,
render
:
function
(
data
)
{
render
:
function
(
data
)
{
return
parseFloat
(
data
).
toFixed
(
2
)
+
' €'
;
return
parseFloat
(
data
).
toFixed
(
2
)
+
' €'
;
...
...
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