From 70e67dea5c6ca8a9400ac03671a46277844dccff Mon Sep 17 00:00:00 2001 From: sergio-teruel Date: Wed, 20 Oct 2021 11:35:43 +0200 Subject: [PATCH 01/10] [ADD] sale_elaboration_margin: New module --- sale_elaboration_margin/README.rst | 89 ++++ sale_elaboration_margin/__init__.py | 2 + sale_elaboration_margin/__manifest__.py | 16 + sale_elaboration_margin/i18n/es.po | 38 ++ .../i18n/sale_elaboration_margin.pot | 34 ++ sale_elaboration_margin/models/__init__.py | 2 + sale_elaboration_margin/models/sale_order.py | 65 +++ .../readme/CONTRIBUTORS.rst | 4 + .../readme/DESCRIPTION.rst | 2 + sale_elaboration_margin/readme/USAGE.rst | 8 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 438 ++++++++++++++++++ .../views/sale_order_views.xml | 25 + 13 files changed, 723 insertions(+) create mode 100644 sale_elaboration_margin/README.rst create mode 100644 sale_elaboration_margin/__init__.py create mode 100644 sale_elaboration_margin/__manifest__.py create mode 100644 sale_elaboration_margin/i18n/es.po create mode 100644 sale_elaboration_margin/i18n/sale_elaboration_margin.pot create mode 100644 sale_elaboration_margin/models/__init__.py create mode 100644 sale_elaboration_margin/models/sale_order.py create mode 100644 sale_elaboration_margin/readme/CONTRIBUTORS.rst create mode 100644 sale_elaboration_margin/readme/DESCRIPTION.rst create mode 100644 sale_elaboration_margin/readme/USAGE.rst create mode 100644 sale_elaboration_margin/static/description/icon.png create mode 100644 sale_elaboration_margin/static/description/index.html create mode 100644 sale_elaboration_margin/views/sale_order_views.xml diff --git a/sale_elaboration_margin/README.rst b/sale_elaboration_margin/README.rst new file mode 100644 index 000000000..712dd8e49 --- /dev/null +++ b/sale_elaboration_margin/README.rst @@ -0,0 +1,89 @@ +======================= +Sale Elaboration Margin +======================= + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmargin--analysis-lightgray.png?logo=github + :target: https://github.com/OCA/margin-analysis/tree/13.0/sale_elaboration_margin + :alt: OCA/margin-analysis +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/margin-analysis-13-0/margin-analysis-13-0-sale_elaboration_margin + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/132/13.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of sale_elaboration module to allow to +display margin data from elaboration costs. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +#. Go to *Sale > Quotations*. +#. Create a sales order. +#. Add a new line. +#. Select an elaboration in the line. +#. Confirm the sales order. +#. Go to the picking created by this sales order and validate it. +#. Go back to the sales order. A new line is created with the product linked to + the elaboration. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* `Tecnativa `_: + + * Sergio Teruel + * Pedro M. Baeza + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/margin-analysis `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/sale_elaboration_margin/__init__.py b/sale_elaboration_margin/__init__.py new file mode 100644 index 000000000..3275ac2ad --- /dev/null +++ b/sale_elaboration_margin/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import models diff --git a/sale_elaboration_margin/__manifest__.py b/sale_elaboration_margin/__manifest__.py new file mode 100644 index 000000000..9a3dfca72 --- /dev/null +++ b/sale_elaboration_margin/__manifest__.py @@ -0,0 +1,16 @@ +# Copyright 2021 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Sale Elaboration Margin", + "summary": "Compute elaboration margins in sale orders lines", + "version": "13.0.1.0.0", + "development_status": "Beta", + "category": "Sale", + "website": "https://github.com/OCA/sale-workflow", + "author": "Tecnativa, Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": ["sale_elaboration"], + "data": ["views/sale_order_views.xml"], +} diff --git a/sale_elaboration_margin/i18n/es.po b/sale_elaboration_margin/i18n/es.po new file mode 100644 index 000000000..491cb3e28 --- /dev/null +++ b/sale_elaboration_margin/i18n/es.po @@ -0,0 +1,38 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_elaboration_margin +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-20 09:22+0000\n" +"PO-Revision-Date: 2019-12-20 10:23+0100\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.0.6\n" + +#. module: sale_elaboration_margin +#: model:ir.model.fields,field_description:sale_elaboration_margin.field_sale_order_line__elaboration_cost_price +msgid "Elaboration Cost" +msgstr "Coste elaboración" + +#. module: sale_elaboration_margin +#: model:ir.model.fields,field_description:sale_elaboration_margin.field_sale_order_line__elaboration_margin +msgid "Elaboration Margin" +msgstr "Margen elaboración" + +#. module: sale_elaboration_margin +#: model:ir.model.fields,field_description:sale_elaboration_margin.field_sale_order_line__elaboration_price +msgid "Elaboration Price" +msgstr "Precio elaboración" + +#. module: sale_elaboration_margin +#: model:ir.model,name:sale_elaboration_margin.model_sale_order_line +msgid "Sales Order Line" +msgstr "Líneas de pedido" diff --git a/sale_elaboration_margin/i18n/sale_elaboration_margin.pot b/sale_elaboration_margin/i18n/sale_elaboration_margin.pot new file mode 100644 index 000000000..cf3a01c75 --- /dev/null +++ b/sale_elaboration_margin/i18n/sale_elaboration_margin.pot @@ -0,0 +1,34 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_elaboration_margin +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: sale_elaboration_margin +#: model:ir.model.fields,field_description:sale_elaboration_margin.field_sale_order_line__elaboration_cost_price +msgid "Elaboration Cost" +msgstr "" + +#. module: sale_elaboration_margin +#: model:ir.model.fields,field_description:sale_elaboration_margin.field_sale_order_line__elaboration_margin +msgid "Elaboration Margin" +msgstr "" + +#. module: sale_elaboration_margin +#: model:ir.model.fields,field_description:sale_elaboration_margin.field_sale_order_line__elaboration_price +msgid "Elaboration Price" +msgstr "" + +#. module: sale_elaboration_margin +#: model:ir.model,name:sale_elaboration_margin.model_sale_order_line +msgid "Sales Order Line" +msgstr "" diff --git a/sale_elaboration_margin/models/__init__.py b/sale_elaboration_margin/models/__init__.py new file mode 100644 index 000000000..49fac809e --- /dev/null +++ b/sale_elaboration_margin/models/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import sale_order diff --git a/sale_elaboration_margin/models/sale_order.py b/sale_elaboration_margin/models/sale_order.py new file mode 100644 index 000000000..fd71c9134 --- /dev/null +++ b/sale_elaboration_margin/models/sale_order.py @@ -0,0 +1,65 @@ +# Copyright 2021 Tecnativa - Sergio Teruel +# Copyright 2021 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import api, fields, models + + +class SaleOrderLine(models.Model): + _inherit = "sale.order.line" + + elaboration_cost_price = fields.Float( + compute="_compute_elaboration_price", + store=True, + readonly=False, + string="Elaboration Cost", + digits="Product Price", + group_operator="avg", + ) + elaboration_price = fields.Float( + compute="_compute_elaboration_price", + store=True, + readonly=False, + string="Elaboration Price", + digits="Product Price", + group_operator="avg", + ) + elaboration_margin = fields.Monetary( + compute="_compute_elaboration_margin", + string="Elaboration Margin", + currency_field="currency_id", + default=0.0, + ) + + @api.depends("elaboration_id") + def _compute_elaboration_price(self): + for line in self: + if not line.elaboration_id: + line.elaboration_cost_price = 0.0 + line.elaboration_price = 0.0 + elif line.order_id.pricelist_id and line.order_id.partner_id: + product = line.elaboration_id.product_id.with_context( + lang=line.order_id.partner_id.lang, + partner=line.order_id.partner_id.id, + quantity=line.product_uom_qty, + date=line.order_id.date_order, + pricelist=line.order_id.pricelist_id.id, + uom=line.product_uom.id, + fiscal_position=self.env.context.get("fiscal_position"), + ) + line.elaboration_price = self.env[ + "account.tax" + ]._fix_tax_included_price_company( + line._get_display_price(product), + product.taxes_id, + line.tax_id, + line.company_id, + ) + line.elaboration_cost_price = ( + line.elaboration_id.product_id.standard_price + ) + + def _compute_elaboration_margin(self): + for line in self: + line.elaboration_margin = (line.qty_delivered or line.product_uom_qty) * ( + line.elaboration_price - line.elaboration_cost_price + ) diff --git a/sale_elaboration_margin/readme/CONTRIBUTORS.rst b/sale_elaboration_margin/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..e0ec07be3 --- /dev/null +++ b/sale_elaboration_margin/readme/CONTRIBUTORS.rst @@ -0,0 +1,4 @@ +* `Tecnativa `_: + + * Sergio Teruel + * Pedro M. Baeza diff --git a/sale_elaboration_margin/readme/DESCRIPTION.rst b/sale_elaboration_margin/readme/DESCRIPTION.rst new file mode 100644 index 000000000..e11823b83 --- /dev/null +++ b/sale_elaboration_margin/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module extends the functionality of sale_elaboration module to allow to +display margin data from elaboration costs. diff --git a/sale_elaboration_margin/readme/USAGE.rst b/sale_elaboration_margin/readme/USAGE.rst new file mode 100644 index 000000000..1dc2e2ccb --- /dev/null +++ b/sale_elaboration_margin/readme/USAGE.rst @@ -0,0 +1,8 @@ +#. Go to *Sale > Quotations*. +#. Create a sales order. +#. Add a new line. +#. Select an elaboration in the line. +#. Confirm the sales order. +#. Go to the picking created by this sales order and validate it. +#. Go back to the sales order. A new line is created with the product linked to + the elaboration. diff --git a/sale_elaboration_margin/static/description/icon.png b/sale_elaboration_margin/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/sale_elaboration_margin/static/description/index.html b/sale_elaboration_margin/static/description/index.html new file mode 100644 index 000000000..a85f323e0 --- /dev/null +++ b/sale_elaboration_margin/static/description/index.html @@ -0,0 +1,438 @@ + + + + + + +Sale Elaboration Margin + + + +
+

Sale Elaboration Margin

+ + +

Beta License: AGPL-3 OCA/margin-analysis Translate me on Weblate Try me on Runbot

+

This module extends the functionality of sale_elaboration module to allow to +display margin data from elaboration costs.

+

Table of contents

+ +
+

Usage

+
    +
  1. Go to Sale > Quotations.
  2. +
  3. Create a sales order.
  4. +
  5. Add a new line.
  6. +
  7. Select an elaboration in the line.
  8. +
  9. Confirm the sales order.
  10. +
  11. Go to the picking created by this sales order and validate it.
  12. +
  13. Go back to the sales order. A new line is created with the product linked to +the elaboration.
  14. +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+
    +
  • Tecnativa:
      +
    • Sergio Teruel
    • +
    • Pedro M. Baeza
    • +
    +
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/margin-analysis project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/sale_elaboration_margin/views/sale_order_views.xml b/sale_elaboration_margin/views/sale_order_views.xml new file mode 100644 index 000000000..2c84b1539 --- /dev/null +++ b/sale_elaboration_margin/views/sale_order_views.xml @@ -0,0 +1,25 @@ + + + + + sale.order + + + + + + + + + + + + + From 6e9981ab0ed99f8eeca8b82933a1af7b7d7dea8f Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Tue, 5 Jul 2022 00:14:58 +0200 Subject: [PATCH 02/10] Update dotfiles + switch to GH actions --- sale_elaboration_margin/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sale_elaboration_margin/__manifest__.py b/sale_elaboration_margin/__manifest__.py index 9a3dfca72..6e0ddcd95 100644 --- a/sale_elaboration_margin/__manifest__.py +++ b/sale_elaboration_margin/__manifest__.py @@ -6,7 +6,7 @@ "version": "13.0.1.0.0", "development_status": "Beta", "category": "Sale", - "website": "https://github.com/OCA/sale-workflow", + "website": "https://github.com/OCA/margin-analysis", "author": "Tecnativa, Odoo Community Association (OCA)", "license": "AGPL-3", "application": False, From b1d4515d187268395537d17d0cc7dc86b15cf8f9 Mon Sep 17 00:00:00 2001 From: Carlos Roca Date: Wed, 21 Dec 2022 09:15:50 +0100 Subject: [PATCH 03/10] [MIG] sale_elaboration_margin: MIgration to 15.0 --- sale_elaboration_margin/README.rst | 15 ++++++++------- sale_elaboration_margin/__manifest__.py | 4 ++-- .../i18n/sale_elaboration_margin.pot | 2 +- sale_elaboration_margin/models/sale_order.py | 2 -- sale_elaboration_margin/readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 7 ++++--- 6 files changed, 16 insertions(+), 15 deletions(-) diff --git a/sale_elaboration_margin/README.rst b/sale_elaboration_margin/README.rst index 712dd8e49..bb0adbf8d 100644 --- a/sale_elaboration_margin/README.rst +++ b/sale_elaboration_margin/README.rst @@ -7,20 +7,20 @@ Sale Elaboration Margin !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png +.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png :target: https://odoo-community.org/page/development-status - :alt: Beta + :alt: Production/Stable .. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmargin--analysis-lightgray.png?logo=github - :target: https://github.com/OCA/margin-analysis/tree/13.0/sale_elaboration_margin + :target: https://github.com/OCA/margin-analysis/tree/15.0/sale_elaboration_margin :alt: OCA/margin-analysis .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/margin-analysis-13-0/margin-analysis-13-0-sale_elaboration_margin + :target: https://translation.odoo-community.org/projects/margin-analysis-15-0/margin-analysis-15-0-sale_elaboration_margin :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/132/13.0 + :target: https://runbot.odoo-community.org/runbot/132/15.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -51,7 +51,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -70,6 +70,7 @@ Contributors * Sergio Teruel * Pedro M. Baeza + * Carlos Roca Maintainers ~~~~~~~~~~~ @@ -84,6 +85,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/margin-analysis `_ project on GitHub. +This module is part of the `OCA/margin-analysis `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/sale_elaboration_margin/__manifest__.py b/sale_elaboration_margin/__manifest__.py index 6e0ddcd95..508297dfa 100644 --- a/sale_elaboration_margin/__manifest__.py +++ b/sale_elaboration_margin/__manifest__.py @@ -3,8 +3,8 @@ { "name": "Sale Elaboration Margin", "summary": "Compute elaboration margins in sale orders lines", - "version": "13.0.1.0.0", - "development_status": "Beta", + "version": "15.0.1.0.0", + "development_status": "Production/Stable", "category": "Sale", "website": "https://github.com/OCA/margin-analysis", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/sale_elaboration_margin/i18n/sale_elaboration_margin.pot b/sale_elaboration_margin/i18n/sale_elaboration_margin.pot index cf3a01c75..8fc61e7bd 100644 --- a/sale_elaboration_margin/i18n/sale_elaboration_margin.pot +++ b/sale_elaboration_margin/i18n/sale_elaboration_margin.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 13.0\n" +"Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" diff --git a/sale_elaboration_margin/models/sale_order.py b/sale_elaboration_margin/models/sale_order.py index fd71c9134..21c67b249 100644 --- a/sale_elaboration_margin/models/sale_order.py +++ b/sale_elaboration_margin/models/sale_order.py @@ -19,13 +19,11 @@ class SaleOrderLine(models.Model): compute="_compute_elaboration_price", store=True, readonly=False, - string="Elaboration Price", digits="Product Price", group_operator="avg", ) elaboration_margin = fields.Monetary( compute="_compute_elaboration_margin", - string="Elaboration Margin", currency_field="currency_id", default=0.0, ) diff --git a/sale_elaboration_margin/readme/CONTRIBUTORS.rst b/sale_elaboration_margin/readme/CONTRIBUTORS.rst index e0ec07be3..252aa6585 100644 --- a/sale_elaboration_margin/readme/CONTRIBUTORS.rst +++ b/sale_elaboration_margin/readme/CONTRIBUTORS.rst @@ -2,3 +2,4 @@ * Sergio Teruel * Pedro M. Baeza + * Carlos Roca diff --git a/sale_elaboration_margin/static/description/index.html b/sale_elaboration_margin/static/description/index.html index a85f323e0..3c7b63490 100644 --- a/sale_elaboration_margin/static/description/index.html +++ b/sale_elaboration_margin/static/description/index.html @@ -367,7 +367,7 @@

Sale Elaboration Margin

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/margin-analysis Translate me on Weblate Try me on Runbot

+

Production/Stable License: AGPL-3 OCA/margin-analysis Translate me on Weblate Try me on Runbot

This module extends the functionality of sale_elaboration module to allow to display margin data from elaboration costs.

Table of contents

@@ -401,7 +401,7 @@

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -418,6 +418,7 @@

Contributors

  • Tecnativa:
    • Sergio Teruel
    • Pedro M. Baeza
    • +
    • Carlos Roca
  • @@ -429,7 +430,7 @@

    Maintainers

    OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

    -

    This module is part of the OCA/margin-analysis project on GitHub.

    +

    This module is part of the OCA/margin-analysis project on GitHub.

    You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

    From 32f28ef2d3906d14e158239909ba8c95e2afe134 Mon Sep 17 00:00:00 2001 From: Ernesto Tejeda Date: Fri, 3 Feb 2023 10:08:25 +0100 Subject: [PATCH 04/10] [IMP] sale_elaboration_margin: Base computationon multiple elaborations --- sale_elaboration_margin/README.rst | 15 +++--- sale_elaboration_margin/__manifest__.py | 2 +- sale_elaboration_margin/models/sale_order.py | 47 ++++++++++--------- .../static/description/index.html | 38 ++++++++------- 4 files changed, 55 insertions(+), 47 deletions(-) diff --git a/sale_elaboration_margin/README.rst b/sale_elaboration_margin/README.rst index bb0adbf8d..1a72fd6a2 100644 --- a/sale_elaboration_margin/README.rst +++ b/sale_elaboration_margin/README.rst @@ -2,10 +2,13 @@ Sale Elaboration Margin ======================= -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:d1ccb85319b0169184f5f38af878b21ccbd51523fcb38a3bf2a7a068bc26dc80 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png :target: https://odoo-community.org/page/development-status @@ -19,11 +22,11 @@ Sale Elaboration Margin .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :target: https://translation.odoo-community.org/projects/margin-analysis-15-0/margin-analysis-15-0-sale_elaboration_margin :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/132/15.0 - :alt: Try me on Runbot +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/margin-analysis&target_branch=15.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| This module extends the functionality of sale_elaboration module to allow to display margin data from elaboration costs. @@ -50,7 +53,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us smashing it by providing a detailed and welcomed +If you spotted it first, help us to smash it by providing a detailed and welcomed `feedback `_. Do not contact contributors directly about support or help with technical issues. diff --git a/sale_elaboration_margin/__manifest__.py b/sale_elaboration_margin/__manifest__.py index 508297dfa..1729df5fb 100644 --- a/sale_elaboration_margin/__manifest__.py +++ b/sale_elaboration_margin/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Sale Elaboration Margin", "summary": "Compute elaboration margins in sale orders lines", - "version": "15.0.1.0.0", + "version": "15.0.2.0.0", "development_status": "Production/Stable", "category": "Sale", "website": "https://github.com/OCA/margin-analysis", diff --git a/sale_elaboration_margin/models/sale_order.py b/sale_elaboration_margin/models/sale_order.py index 21c67b249..136c52f5b 100644 --- a/sale_elaboration_margin/models/sale_order.py +++ b/sale_elaboration_margin/models/sale_order.py @@ -28,33 +28,36 @@ class SaleOrderLine(models.Model): default=0.0, ) - @api.depends("elaboration_id") + @api.depends("elaboration_ids") def _compute_elaboration_price(self): for line in self: - if not line.elaboration_id: + if not line.elaboration_ids: line.elaboration_cost_price = 0.0 line.elaboration_price = 0.0 elif line.order_id.pricelist_id and line.order_id.partner_id: - product = line.elaboration_id.product_id.with_context( - lang=line.order_id.partner_id.lang, - partner=line.order_id.partner_id.id, - quantity=line.product_uom_qty, - date=line.order_id.date_order, - pricelist=line.order_id.pricelist_id.id, - uom=line.product_uom.id, - fiscal_position=self.env.context.get("fiscal_position"), - ) - line.elaboration_price = self.env[ - "account.tax" - ]._fix_tax_included_price_company( - line._get_display_price(product), - product.taxes_id, - line.tax_id, - line.company_id, - ) - line.elaboration_cost_price = ( - line.elaboration_id.product_id.standard_price - ) + elaboration_price = 0 + elaboration_cost_price = 0 + for elaboration_product in line.elaboration_ids.product_id: + product = elaboration_product.with_context( + lang=line.order_id.partner_id.lang, + partner=line.order_id.partner_id.id, + quantity=line.product_uom_qty, + date=line.order_id.date_order, + pricelist=line.order_id.pricelist_id.id, + uom=line.product_uom.id, + fiscal_position=self.env.context.get("fiscal_position"), + ) + elaboration_price += self.env[ + "account.tax" + ]._fix_tax_included_price_company( + line._get_display_price(product), + product.taxes_id, + line.tax_id, + line.company_id, + ) + elaboration_cost_price += elaboration_product.standard_price + line.elaboration_price = elaboration_price + line.elaboration_cost_price = elaboration_cost_price def _compute_elaboration_margin(self): for line in self: diff --git a/sale_elaboration_margin/static/description/index.html b/sale_elaboration_margin/static/description/index.html index 3c7b63490..fcafd6771 100644 --- a/sale_elaboration_margin/static/description/index.html +++ b/sale_elaboration_margin/static/description/index.html @@ -1,20 +1,20 @@ - + - + Sale Elaboration Margin -
    -

    Sale Elaboration Margin

    +
    + + +Odoo Community Association + +
    +

    Sale Elaboration Margin

    -

    Production/Stable License: AGPL-3 OCA/margin-analysis Translate me on Weblate Try me on Runboat

    +

    Production/Stable License: AGPL-3 OCA/margin-analysis Translate me on Weblate Try me on Runboat

    This module extends the functionality of sale_elaboration module to allow to display margin data from elaboration costs.

    Table of contents

    @@ -386,7 +391,7 @@

    Sale Elaboration Margin

    -

    Usage

    +

    Usage

    1. Go to Sale > Orders > Quotations.
    2. Create a sales order.
    3. @@ -399,7 +404,7 @@

      Usage

    -

    Bug Tracker

    +

    Bug Tracker

    Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -407,15 +412,15 @@

    Bug Tracker

    Do not contact contributors directly about support or help with technical issues.

    -

    Credits

    +

    Credits

    -

    Authors

    +

    Authors

    • Tecnativa
    -

    Contributors

    +

    Contributors

    -

    Maintainers

    +

    Maintainers

    This module is maintained by the OCA.

    Odoo Community Association @@ -439,5 +444,6 @@

    Maintainers

    +
    From c44087e993d92978578c3f75f0388a110a683b61 Mon Sep 17 00:00:00 2001 From: mymage Date: Mon, 13 Apr 2026 09:00:45 +0000 Subject: [PATCH 08/10] Added translation using Weblate (Italian) --- sale_elaboration_margin/i18n/it.po | 35 ++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 sale_elaboration_margin/i18n/it.po diff --git a/sale_elaboration_margin/i18n/it.po b/sale_elaboration_margin/i18n/it.po new file mode 100644 index 000000000..06cbb36d6 --- /dev/null +++ b/sale_elaboration_margin/i18n/it.po @@ -0,0 +1,35 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_elaboration_margin +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: sale_elaboration_margin +#: model:ir.model.fields,field_description:sale_elaboration_margin.field_sale_order_line__elaboration_cost_price +msgid "Elaboration Cost" +msgstr "" + +#. module: sale_elaboration_margin +#: model:ir.model.fields,field_description:sale_elaboration_margin.field_sale_order_line__elaboration_margin +msgid "Elaboration Margin" +msgstr "" + +#. module: sale_elaboration_margin +#: model:ir.model.fields,field_description:sale_elaboration_margin.field_sale_order_line__elaboration_price +msgid "Elaboration Price" +msgstr "" + +#. module: sale_elaboration_margin +#: model:ir.model,name:sale_elaboration_margin.model_sale_order_line +msgid "Sales Order Line" +msgstr "" From 0e4e5a6efe807f469441bb2e45cb731ba22a3190 Mon Sep 17 00:00:00 2001 From: mymage Date: Mon, 13 Apr 2026 10:18:35 +0000 Subject: [PATCH 09/10] Translated using Weblate (Italian) Currently translated at 100.0% (4 of 4 strings) Translation: margin-analysis-18.0/margin-analysis-18.0-sale_elaboration_margin Translate-URL: https://translation.odoo-community.org/projects/margin-analysis-18-0/margin-analysis-18-0-sale_elaboration_margin/it/ --- sale_elaboration_margin/i18n/it.po | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/sale_elaboration_margin/i18n/it.po b/sale_elaboration_margin/i18n/it.po index 06cbb36d6..841d6dfce 100644 --- a/sale_elaboration_margin/i18n/it.po +++ b/sale_elaboration_margin/i18n/it.po @@ -6,30 +6,32 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2026-04-13 10:35+0000\n" +"Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.15.2\n" #. module: sale_elaboration_margin #: model:ir.model.fields,field_description:sale_elaboration_margin.field_sale_order_line__elaboration_cost_price msgid "Elaboration Cost" -msgstr "" +msgstr "Costo elaborazione" #. module: sale_elaboration_margin #: model:ir.model.fields,field_description:sale_elaboration_margin.field_sale_order_line__elaboration_margin msgid "Elaboration Margin" -msgstr "" +msgstr "Margine elaborazione" #. module: sale_elaboration_margin #: model:ir.model.fields,field_description:sale_elaboration_margin.field_sale_order_line__elaboration_price msgid "Elaboration Price" -msgstr "" +msgstr "Prezzo elaborazione" #. module: sale_elaboration_margin #: model:ir.model,name:sale_elaboration_margin.model_sale_order_line msgid "Sales Order Line" -msgstr "" +msgstr "Riga ordine di vendita" From a5af3977f3d6577c55cad73476b5fa51da55df68 Mon Sep 17 00:00:00 2001 From: kalpeshgajera-uncannycs Date: Thu, 9 Jul 2026 18:09:19 +0530 Subject: [PATCH 10/10] [19.0][MIG] sale_elaboration_margin : Migration to 19.0. --- sale_elaboration_margin/README.rst | 10 +- sale_elaboration_margin/__manifest__.py | 2 +- .../i18n/sale_elaboration_margin.pot | 2 +- sale_elaboration_margin/models/sale_order.py | 4 +- .../static/description/index.html | 6 +- sale_elaboration_margin/tests/__init__.py | 1 + .../tests/test_sale_elaboration_margin.py | 108 ++++++++++++++++++ .../views/sale_order_views.xml | 4 +- 8 files changed, 123 insertions(+), 14 deletions(-) create mode 100644 sale_elaboration_margin/tests/__init__.py create mode 100644 sale_elaboration_margin/tests/test_sale_elaboration_margin.py diff --git a/sale_elaboration_margin/README.rst b/sale_elaboration_margin/README.rst index c92966f24..71e82877e 100644 --- a/sale_elaboration_margin/README.rst +++ b/sale_elaboration_margin/README.rst @@ -21,13 +21,13 @@ Sale Elaboration Margin :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmargin--analysis-lightgray.png?logo=github - :target: https://github.com/OCA/margin-analysis/tree/18.0/sale_elaboration_margin + :target: https://github.com/OCA/margin-analysis/tree/19.0/sale_elaboration_margin :alt: OCA/margin-analysis .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/margin-analysis-18-0/margin-analysis-18-0-sale_elaboration_margin + :target: https://translation.odoo-community.org/projects/margin-analysis-19-0/margin-analysis-19-0-sale_elaboration_margin :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/margin-analysis&target_branch=18.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/margin-analysis&target_branch=19.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -58,7 +58,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -92,6 +92,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/margin-analysis `_ project on GitHub. +This module is part of the `OCA/margin-analysis `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/sale_elaboration_margin/__manifest__.py b/sale_elaboration_margin/__manifest__.py index d5935d1d5..f9510b02f 100644 --- a/sale_elaboration_margin/__manifest__.py +++ b/sale_elaboration_margin/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Sale Elaboration Margin", "summary": "Compute elaboration margins in sale orders lines", - "version": "18.0.1.0.0", + "version": "19.0.1.0.0", "development_status": "Production/Stable", "category": "Sale", "website": "https://github.com/OCA/margin-analysis", diff --git a/sale_elaboration_margin/i18n/sale_elaboration_margin.pot b/sale_elaboration_margin/i18n/sale_elaboration_margin.pot index 49219fc05..07faca324 100644 --- a/sale_elaboration_margin/i18n/sale_elaboration_margin.pot +++ b/sale_elaboration_margin/i18n/sale_elaboration_margin.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 18.0\n" +"Project-Id-Version: Odoo Server 19.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" diff --git a/sale_elaboration_margin/models/sale_order.py b/sale_elaboration_margin/models/sale_order.py index 052ab057f..0eb31de69 100644 --- a/sale_elaboration_margin/models/sale_order.py +++ b/sale_elaboration_margin/models/sale_order.py @@ -43,7 +43,7 @@ def _compute_elaboration_price(self): "order_id": line.order_id.id, "product_id": elaboration_product.id, "product_uom_qty": line.product_uom_qty, - "product_uom": line.product_uom.id, + "product_uom_id": line.product_uom_id.id, "sequence": max( line.order_id.order_line.mapped("sequence"), default=0 ) @@ -56,7 +56,7 @@ def _compute_elaboration_price(self): ]._fix_tax_included_price_company( new_sol.price_unit, elaboration_product.taxes_id, - line.tax_id, + line.tax_ids, line.company_id, ) new_sol.order_id = False diff --git a/sale_elaboration_margin/static/description/index.html b/sale_elaboration_margin/static/description/index.html index d73522bca..a4132701c 100644 --- a/sale_elaboration_margin/static/description/index.html +++ b/sale_elaboration_margin/static/description/index.html @@ -374,7 +374,7 @@

    Sale Elaboration Margin

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:485c92d8fb4cce354e556411e031f431d9c1589f6dfb17229f8a40d3fe14d835 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

    Production/Stable License: AGPL-3 OCA/margin-analysis Translate me on Weblate Try me on Runboat

    +

    Production/Stable License: AGPL-3 OCA/margin-analysis Translate me on Weblate Try me on Runboat

    This module extends the functionality of sale_elaboration module to allow to display margin data from elaboration costs.

    Table of contents

    @@ -408,7 +408,7 @@

    Bug Tracker

    Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

    +feedback.

    Do not contact contributors directly about support or help with technical issues.

    @@ -439,7 +439,7 @@

    Maintainers

    OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

    -

    This module is part of the OCA/margin-analysis project on GitHub.

    +

    This module is part of the OCA/margin-analysis project on GitHub.

    You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

    diff --git a/sale_elaboration_margin/tests/__init__.py b/sale_elaboration_margin/tests/__init__.py new file mode 100644 index 000000000..339476610 --- /dev/null +++ b/sale_elaboration_margin/tests/__init__.py @@ -0,0 +1 @@ +from . import test_sale_elaboration_margin diff --git a/sale_elaboration_margin/tests/test_sale_elaboration_margin.py b/sale_elaboration_margin/tests/test_sale_elaboration_margin.py new file mode 100644 index 000000000..646e8b7a1 --- /dev/null +++ b/sale_elaboration_margin/tests/test_sale_elaboration_margin.py @@ -0,0 +1,108 @@ +from odoo.tests.common import TransactionCase + + +class TestSaleElaborationMargin(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + cls.company = cls.env.company + + # Setup Pricelist + cls.pricelist = cls.env["product.pricelist"].create( + { + "name": "Test Pricelist", + "currency_id": cls.company.currency_id.id, + } + ) + + # Setup Partner + cls.partner = cls.env["res.partner"].create( + { + "name": "Test Partner", + "property_product_pricelist": cls.pricelist.id, + } + ) + + # Setup Product + cls.product = cls.env["product.product"].create( + { + "name": "Test Product", + "type": "consu", + "list_price": 100.0, + } + ) + + # Setup Elaboration Product + cls.elaboration_product = cls.env["product.product"].create( + { + "name": "Test Elaboration", + "type": "service", + "list_price": 20.0, + "standard_price": 15.0, + } + ) + + # Add taxes to the elaboration product to cover tax compute block + cls.tax = cls.env["account.tax"].create( + { + "name": "Test Tax 10%", + "amount_type": "percent", + "amount": 10.0, + "price_include_override": "tax_included", + } + ) + cls.elaboration_product.taxes_id = [(6, 0, cls.tax.ids)] + + # Setup Sale Order + cls.sale_order = cls.env["sale.order"].create( + { + "partner_id": cls.partner.id, + "pricelist_id": cls.pricelist.id, + } + ) + + # Setup Sale Order Line + cls.sale_line = cls.env["sale.order.line"].create( + { + "order_id": cls.sale_order.id, + "product_id": cls.product.id, + "product_uom_qty": 2.0, + "price_unit": 100.0, + } + ) + + def test_sale_elaboration_margin(self): + # Initial check with no elaboration + self.sale_line._compute_elaboration_price() + self.assertEqual(self.sale_line.elaboration_price, 0.0) + self.assertEqual(self.sale_line.elaboration_cost_price, 0.0) + + elaboration = self.env["product.elaboration"].create( + { + "name": "Test Elaboration Profile", + "product_id": self.elaboration_product.id, + } + ) + self.sale_line.write({"elaboration_ids": [(4, elaboration.id)]}) + + self.sale_line._compute_elaboration_price() + + # Elaboration price should be the price of the elaboration + # product from the pricelist, minus included taxes. + + self.assertTrue(self.sale_line.elaboration_price > 0.0) + + # Elaboration cost price should be standard_price * 1 + # (because the compute loop adds it directly per elaboration product) + + self.assertEqual(self.sale_line.elaboration_cost_price, 15.0) + + # Test margin computation + self.sale_line._compute_elaboration_margin() + + # Qty is 2.0 + expected_margin = 2.0 * ( + self.sale_line.elaboration_price - self.sale_line.elaboration_cost_price + ) + self.assertAlmostEqual(self.sale_line.elaboration_margin, expected_margin) diff --git a/sale_elaboration_margin/views/sale_order_views.xml b/sale_elaboration_margin/views/sale_order_views.xml index 7144c6a86..4ee100323 100644 --- a/sale_elaboration_margin/views/sale_order_views.xml +++ b/sale_elaboration_margin/views/sale_order_views.xml @@ -7,14 +7,14 @@