Skip to content

Commit b621ed2

Browse files
committed
[FIX] add weighted margin percent
1 parent 2b933c6 commit b621ed2

File tree

5 files changed

+60
-27
lines changed

5 files changed

+60
-27
lines changed

Diff for: sale_report_margin_percent/__manifest__.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
# Copyright 2024 Sergio Corato <https://github.com/sergiocorato>
22
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
33
{
4-
"name": "Sale Report Margin Percent",
4+
"name": "Sale Report Weighted Margin Percent",
55
"version": "14.0.1.0.1",
66
"category": "Sales",
77
"author": "Sergio Corato",
8-
"summary": "Adds the margin percent to sale analysis report",
8+
"summary": "Adds the weighted margin percent to sale analysis report",
99
"website": "https://github.com/sergiocorato/e-account",
1010
"license": "AGPL-3",
1111
"depends": ["sale_margin"],

Diff for: sale_report_margin_percent/i18n/it.po

+14-10
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ msgid ""
66
msgstr ""
77
"Project-Id-Version: Odoo Server 14.0\n"
88
"Report-Msgid-Bugs-To: \n"
9-
"POT-Creation-Date: 2024-11-27 18:09+0000\n"
10-
"PO-Revision-Date: 2024-11-27 18:09+0000\n"
9+
"POT-Creation-Date: 2024-12-02 11:01+0000\n"
10+
"PO-Revision-Date: 2024-12-02 11:01+0000\n"
1111
"Last-Translator: \n"
1212
"Language-Team: \n"
1313
"MIME-Version: 1.0\n"
@@ -16,36 +16,40 @@ msgstr ""
1616
"Plural-Forms: \n"
1717

1818
#. module: sale_report_margin_percent
19+
#: model:ir.model.fields,field_description:sale_report_margin_percent.field_sale_order__assigned_attachment_ids
1920
#: model:ir.model.fields,field_description:sale_report_margin_percent.field_sale_report__assigned_attachment_ids
2021
msgid "Assigned Attachments"
2122
msgstr "Allegati assegnati"
2223

2324
#. module: sale_report_margin_percent
25+
#: model:ir.model.fields,field_description:sale_report_margin_percent.field_sale_order__display_name
2426
#: model:ir.model.fields,field_description:sale_report_margin_percent.field_sale_report__display_name
2527
msgid "Display Name"
2628
msgstr "Nome visualizzato"
2729

2830
#. module: sale_report_margin_percent
31+
#: model:ir.model.fields,field_description:sale_report_margin_percent.field_sale_order__id
2932
#: model:ir.model.fields,field_description:sale_report_margin_percent.field_sale_report__id
3033
msgid "ID"
3134
msgstr ""
3235

3336
#. module: sale_report_margin_percent
37+
#: model:ir.model.fields,field_description:sale_report_margin_percent.field_sale_order____last_update
3438
#: model:ir.model.fields,field_description:sale_report_margin_percent.field_sale_report____last_update
3539
msgid "Last Modified on"
3640
msgstr "Ultima modifica il"
3741

3842
#. module: sale_report_margin_percent
39-
#: model:ir.model.fields,field_description:sale_report_margin_percent.field_sale_report__margin_percent_line
40-
msgid "Margin Line (%)"
41-
msgstr "Margine riga (%)"
42-
43-
#. module: sale_report_margin_percent
44-
#: model:ir.model.fields,field_description:sale_report_margin_percent.field_sale_report__margin_percent_order
45-
msgid "Margin Order (%)"
46-
msgstr "Margine ordine (%)"
43+
#: model:ir.model.fields,field_description:sale_report_margin_percent.field_sale_report__margin_percent_weighted
44+
msgid "Margin Weighted (%)"
45+
msgstr "Margine pesato (%)"
4746

4847
#. module: sale_report_margin_percent
4948
#: model:ir.model,name:sale_report_margin_percent.model_sale_report
5049
msgid "Sales Analysis Report"
5150
msgstr "Resoconto di analisi vendite"
51+
52+
#. module: sale_report_margin_percent
53+
#: model:ir.model,name:sale_report_margin_percent.model_sale_order
54+
msgid "Sales Order"
55+
msgstr "Ordine di vendita"

Diff for: sale_report_margin_percent/models/sale_order.py

+6-3
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,11 @@ def read_group(
2626
)
2727
for order in res:
2828
if "__domain" in order and "margin_percent:avg" in fields:
29-
orders = self.search(order["__domain"])
30-
order["margin_percent"] = sum(orders.mapped("margin")) / (
31-
sum(orders.mapped("amount_untaxed")) or 1
29+
orders = self.search_read(
30+
order["__domain"],
31+
["margin", "amount_untaxed"]
3232
)
33+
order["margin_percent"] = sum([x["margin"] for x in orders]) / (
34+
sum([x["amount_untaxed"] for x in orders]) or 1
35+
) * 100.0
3336
return res

Diff for: sale_report_margin_percent/readme/DESCRIPTION.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Adds margin percent of the whole sale order and of the single lines fields to sale report.
1+
Adds weighted margin percent to sale report.

Diff for: sale_report_margin_percent/reports/sale_report.py

+37-11
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,47 @@
1-
from odoo import fields, models
1+
from odoo import api, fields, models
22

33

44
class SaleReport(models.Model):
55
_inherit = "sale.report"
66

7-
margin_percent_order = fields.Float(
8-
string="Margin Order (%)", readonly=True, group_operator="avg"
9-
)
10-
margin_percent_line = fields.Float(
11-
string="Margin Line (%)", readonly=True, group_operator="avg"
7+
margin_percent_weighted = fields.Float(
8+
string="Margin Weighted (%)", readonly=True, group_operator="avg"
129
)
1310

1411
def _select_additional_fields(self, fields):
1512
fields[
16-
"margin_percent_order"
17-
] = ", MAX(s.margin_percent * 100.0) AS margin_percent_order"
18-
fields[
19-
"margin_percent_line"
20-
] = ", MAX(l.margin_percent * 100.0) AS margin_percent_line"
13+
"margin_percent_weighted"
14+
] = ", MAX(s.margin_percent * 100.0) AS margin_percent_weighted"
2115
return super()._select_additional_fields(fields)
16+
17+
@api.model
18+
def read_group(
19+
self,
20+
domain,
21+
fields,
22+
groupby,
23+
offset=0,
24+
limit=None,
25+
orderby=False,
26+
lazy=True,
27+
):
28+
res = super().read_group(
29+
domain,
30+
fields,
31+
groupby,
32+
offset=offset,
33+
limit=limit,
34+
orderby=orderby,
35+
lazy=lazy,
36+
)
37+
for order_line in res:
38+
if "__domain" in order_line and "margin_percent_weighted:avg" in fields:
39+
order_lines = self.search_read(
40+
order_line["__domain"],
41+
["margin", "price_subtotal"]
42+
)
43+
margin_percent = sum([x["margin"] for x in order_lines]) / (
44+
sum([x["price_subtotal"] for x in order_lines]) or 1
45+
) * 100.0
46+
order_line["margin_percent_weighted"] = margin_percent
47+
return res

0 commit comments

Comments
 (0)