From 0f72644fe72aff47d7e4365e32cbc7016fc8c8b4 Mon Sep 17 00:00:00 2001 From: Carlos Dauden Date: Tue, 29 Oct 2019 12:18:57 +0100 Subject: [PATCH 01/20] [11.0][ADD] sale_margin_sync: Recompute sale margin when related stock move cost price is changed --- sale_margin_sync/README.rst | 76 ++++ sale_margin_sync/__init__.py | 3 + sale_margin_sync/__manifest__.py | 16 + sale_margin_sync/i18n/sale_margin_sync.pot | 20 + sale_margin_sync/models/__init__.py | 3 + sale_margin_sync/models/stock_move.py | 22 + sale_margin_sync/readme/CONTRIBUTORS.rst | 4 + sale_margin_sync/readme/DESCRIPTION.rst | 1 + sale_margin_sync/static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 426 ++++++++++++++++++ sale_margin_sync/tests/__init__.py | 3 + .../tests/test_sale_margin_sync.py | 41 ++ 12 files changed, 615 insertions(+) create mode 100644 sale_margin_sync/README.rst create mode 100644 sale_margin_sync/__init__.py create mode 100644 sale_margin_sync/__manifest__.py create mode 100644 sale_margin_sync/i18n/sale_margin_sync.pot create mode 100644 sale_margin_sync/models/__init__.py create mode 100644 sale_margin_sync/models/stock_move.py create mode 100644 sale_margin_sync/readme/CONTRIBUTORS.rst create mode 100644 sale_margin_sync/readme/DESCRIPTION.rst create mode 100644 sale_margin_sync/static/description/icon.png create mode 100644 sale_margin_sync/static/description/index.html create mode 100644 sale_margin_sync/tests/__init__.py create mode 100644 sale_margin_sync/tests/test_sale_margin_sync.py diff --git a/sale_margin_sync/README.rst b/sale_margin_sync/README.rst new file mode 100644 index 000000000..cf711d15e --- /dev/null +++ b/sale_margin_sync/README.rst @@ -0,0 +1,76 @@ +================ +Sale margin sync +================ + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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/11.0/sale_margin_sync + :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-11-0/margin-analysis-11-0-sale_margin_sync + :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/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Recompute sale margin when related stock move cost price is changed. + +**Table of contents** + +.. contents:: + :local: + +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 `_: + + * Carlos Dauden + * Sergio Teruel + +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_margin_sync/__init__.py b/sale_margin_sync/__init__.py new file mode 100644 index 000000000..31660d6a9 --- /dev/null +++ b/sale_margin_sync/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import models diff --git a/sale_margin_sync/__manifest__.py b/sale_margin_sync/__manifest__.py new file mode 100644 index 000000000..09fd26418 --- /dev/null +++ b/sale_margin_sync/__manifest__.py @@ -0,0 +1,16 @@ +# Copyright 2019 Tecnativa - Carlos Dauden +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + 'name': 'Sale margin sync', + 'summary': 'Recompute sale margin when stock move cost price is changed', + 'version': '11.0.1.0.0', + 'category': 'Sales', + 'website': 'https://github.com/OCA/margin-analysis', + 'author': 'Tecnativa, Odoo Community Association (OCA)', + 'license': 'AGPL-3', + 'installable': True, + 'depends': [ + 'sale_margin', + 'sale_stock', + ], +} diff --git a/sale_margin_sync/i18n/sale_margin_sync.pot b/sale_margin_sync/i18n/sale_margin_sync.pot new file mode 100644 index 000000000..6ba81dc3f --- /dev/null +++ b/sale_margin_sync/i18n/sale_margin_sync.pot @@ -0,0 +1,20 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_margin_sync +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.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_margin_sync +#: model:ir.model,name:sale_margin_sync.model_stock_move +msgid "Stock Move" +msgstr "" + diff --git a/sale_margin_sync/models/__init__.py b/sale_margin_sync/models/__init__.py new file mode 100644 index 000000000..1fec16564 --- /dev/null +++ b/sale_margin_sync/models/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import stock_move diff --git a/sale_margin_sync/models/stock_move.py b/sale_margin_sync/models/stock_move.py new file mode 100644 index 000000000..f1da4d2a2 --- /dev/null +++ b/sale_margin_sync/models/stock_move.py @@ -0,0 +1,22 @@ +# Copyright 2019 Tecnativa - Carlos Dauden +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models + + +class StockMove(models.Model): + _inherit = 'stock.move' + + def write(self, vals): + res = super(StockMove, self).write(vals) + if 'price_unit' in vals and not self.env.context.get( + 'skip_sale_margin_sync', False): + self.sale_margin_sync() + return res + + def sale_margin_sync(self): + for move in self: + if (move.state != 'done' or not move.sale_line_id or + not move._is_out()): + continue + move.sale_line_id.purchase_price = -move.price_unit diff --git a/sale_margin_sync/readme/CONTRIBUTORS.rst b/sale_margin_sync/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..66d11c825 --- /dev/null +++ b/sale_margin_sync/readme/CONTRIBUTORS.rst @@ -0,0 +1,4 @@ +* `Tecnativa `_: + + * Carlos Dauden + * Sergio Teruel diff --git a/sale_margin_sync/readme/DESCRIPTION.rst b/sale_margin_sync/readme/DESCRIPTION.rst new file mode 100644 index 000000000..03ba88c69 --- /dev/null +++ b/sale_margin_sync/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Recompute sale margin when related stock move cost price is changed. diff --git a/sale_margin_sync/static/description/icon.png b/sale_margin_sync/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_margin_sync/static/description/index.html b/sale_margin_sync/static/description/index.html new file mode 100644 index 000000000..346557d62 --- /dev/null +++ b/sale_margin_sync/static/description/index.html @@ -0,0 +1,426 @@ + + + + + + +Sale margin sync + + + +
+

Sale margin sync

+ + +

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

+

Recompute sale margin when related stock move cost price is changed.

+

Table of contents

+ +
+

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:

    +
    +
      +
    • Carlos Dauden
    • +
    • Sergio Teruel
    • +
    +
    +
  • +
+
+
+

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_margin_sync/tests/__init__.py b/sale_margin_sync/tests/__init__.py new file mode 100644 index 000000000..8df8dcdcb --- /dev/null +++ b/sale_margin_sync/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import test_sale_margin_sync diff --git a/sale_margin_sync/tests/test_sale_margin_sync.py b/sale_margin_sync/tests/test_sale_margin_sync.py new file mode 100644 index 000000000..935045fdb --- /dev/null +++ b/sale_margin_sync/tests/test_sale_margin_sync.py @@ -0,0 +1,41 @@ +# Copyright 2019 Tecnativa - Carlos Dauden +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo.tests.common import SavepointCase + + +class TestSaleMarginSync(SavepointCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.partner = cls.env['res.partner'].create({ + 'name': 'Test', + }) + cls.product = cls.env['product.product'].create({ + 'name': 'test_product', + 'type': 'product', + }) + cls.env['stock.quant'].create({ + 'product_id': cls.product.id, + 'location_id': cls.env.ref('stock.stock_location_stock').id, + 'quantity': 30.0}) + cls.order = cls.env['sale.order'].create({ + 'partner_id': cls.partner.id, + 'order_line': [(0, 0, { + 'name': cls.product.name, + 'product_id': cls.product.id, + 'product_uom_qty': 10, + 'product_uom': cls.product.uom_id.id, + 'price_unit': 100.00, + })], + 'pricelist_id': cls.env.ref('product.list0').id, + }) + + def test_sale_margin_sync(self): + self.order.action_confirm() + so_line = self.order.order_line[:1] + move = so_line.move_ids[:1] + move.quantity_done = 10 + move.picking_id.action_done() + move.price_unit = -80.0 + self.assertEqual(so_line.purchase_price, 80.0) + self.assertEqual(so_line.margin, 200.0) From f611d6afe74916c7a6aef4d42102bd93fe2b8fda Mon Sep 17 00:00:00 2001 From: Carlos Dauden Date: Thu, 31 Oct 2019 00:20:17 +0100 Subject: [PATCH 02/20] [MIG] sale_margin_sync: Migration to 12.0 --- sale_margin_sync/README.rst | 10 +++++----- sale_margin_sync/__manifest__.py | 2 +- sale_margin_sync/i18n/sale_margin_sync.pot | 2 +- sale_margin_sync/models/stock_move.py | 6 ++---- sale_margin_sync/static/description/index.html | 6 +++--- sale_margin_sync/tests/test_sale_margin_sync.py | 10 ++++++++++ 6 files changed, 22 insertions(+), 14 deletions(-) diff --git a/sale_margin_sync/README.rst b/sale_margin_sync/README.rst index cf711d15e..56fb41680 100644 --- a/sale_margin_sync/README.rst +++ b/sale_margin_sync/README.rst @@ -14,13 +14,13 @@ Sale margin sync :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/11.0/sale_margin_sync + :target: https://github.com/OCA/margin-analysis/tree/12.0/sale_margin_sync :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-11-0/margin-analysis-11-0-sale_margin_sync + :target: https://translation.odoo-community.org/projects/margin-analysis-12-0/margin-analysis-12-0-sale_margin_sync :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/11.0 + :target: https://runbot.odoo-community.org/runbot/132/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -38,7 +38,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. @@ -71,6 +71,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_margin_sync/__manifest__.py b/sale_margin_sync/__manifest__.py index 09fd26418..3d5447973 100644 --- a/sale_margin_sync/__manifest__.py +++ b/sale_margin_sync/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Sale margin sync', 'summary': 'Recompute sale margin when stock move cost price is changed', - 'version': '11.0.1.0.0', + 'version': '12.0.1.0.0', 'category': 'Sales', 'website': 'https://github.com/OCA/margin-analysis', 'author': 'Tecnativa, Odoo Community Association (OCA)', diff --git a/sale_margin_sync/i18n/sale_margin_sync.pot b/sale_margin_sync/i18n/sale_margin_sync.pot index 6ba81dc3f..aa948acee 100644 --- a/sale_margin_sync/i18n/sale_margin_sync.pot +++ b/sale_margin_sync/i18n/sale_margin_sync.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 11.0\n" +"Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: <>\n" "Language-Team: \n" diff --git a/sale_margin_sync/models/stock_move.py b/sale_margin_sync/models/stock_move.py index f1da4d2a2..d76205c51 100644 --- a/sale_margin_sync/models/stock_move.py +++ b/sale_margin_sync/models/stock_move.py @@ -15,8 +15,6 @@ def write(self, vals): return res def sale_margin_sync(self): - for move in self: - if (move.state != 'done' or not move.sale_line_id or - not move._is_out()): - continue + for move in self.filtered(lambda m: ( + m.state == 'done' and m.sale_line_id and m._is_out())): move.sale_line_id.purchase_price = -move.price_unit diff --git a/sale_margin_sync/static/description/index.html b/sale_margin_sync/static/description/index.html index 346557d62..93578de7f 100644 --- a/sale_margin_sync/static/description/index.html +++ b/sale_margin_sync/static/description/index.html @@ -367,7 +367,7 @@

Sale margin sync

!! 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

+

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

Recompute sale margin when related stock move cost price is changed.

Table of contents

@@ -386,7 +386,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.

@@ -417,7 +417,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_margin_sync/tests/test_sale_margin_sync.py b/sale_margin_sync/tests/test_sale_margin_sync.py index 935045fdb..db5c61285 100644 --- a/sale_margin_sync/tests/test_sale_margin_sync.py +++ b/sale_margin_sync/tests/test_sale_margin_sync.py @@ -13,6 +13,7 @@ def setUpClass(cls): cls.product = cls.env['product.product'].create({ 'name': 'test_product', 'type': 'product', + 'standard_price': 70, }) cls.env['stock.quant'].create({ 'product_id': cls.product.id, @@ -39,3 +40,12 @@ def test_sale_margin_sync(self): move.price_unit = -80.0 self.assertEqual(so_line.purchase_price, 80.0) self.assertEqual(so_line.margin, 200.0) + + def test_sale_margin_sync_unvalidated_move(self): + self.order.action_confirm() + so_line = self.order.order_line[:1] + move = so_line.move_ids[:1] + move.quantity_done = 10 + move.price_unit = -80.0 + self.assertEqual(so_line.purchase_price, 70.0) + self.assertEqual(so_line.margin, 300.0) From 537c085417a4b73975da2f97d009fc6146fe2280 Mon Sep 17 00:00:00 2001 From: Sergio Teruel Date: Thu, 21 Nov 2019 21:31:45 +0100 Subject: [PATCH 03/20] [IMP] sale_margin_sync: Create a pricelist for testing to avoid crash test with other modules --- sale_margin_sync/__manifest__.py | 2 +- sale_margin_sync/tests/test_sale_margin_sync.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/sale_margin_sync/__manifest__.py b/sale_margin_sync/__manifest__.py index 3d5447973..e7400dc63 100644 --- a/sale_margin_sync/__manifest__.py +++ b/sale_margin_sync/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Sale margin sync', 'summary': 'Recompute sale margin when stock move cost price is changed', - 'version': '12.0.1.0.0', + 'version': '12.0.1.0.1', 'category': 'Sales', 'website': 'https://github.com/OCA/margin-analysis', 'author': 'Tecnativa, Odoo Community Association (OCA)', diff --git a/sale_margin_sync/tests/test_sale_margin_sync.py b/sale_margin_sync/tests/test_sale_margin_sync.py index db5c61285..1cbe3e72c 100644 --- a/sale_margin_sync/tests/test_sale_margin_sync.py +++ b/sale_margin_sync/tests/test_sale_margin_sync.py @@ -7,6 +7,9 @@ class TestSaleMarginSync(SavepointCase): @classmethod def setUpClass(cls): super().setUpClass() + cls.pricelist = cls.env['product.pricelist'].create({ + 'name': 'Pricelist for testing sale_margin_sync', + }) cls.partner = cls.env['res.partner'].create({ 'name': 'Test', }) @@ -28,7 +31,7 @@ def setUpClass(cls): 'product_uom': cls.product.uom_id.id, 'price_unit': 100.00, })], - 'pricelist_id': cls.env.ref('product.list0').id, + 'pricelist_id': cls.pricelist.id, }) def test_sale_margin_sync(self): From 86d8d588609bff19ccdbe65f954bca102372f814 Mon Sep 17 00:00:00 2001 From: sergio-teruel Date: Thu, 17 Sep 2020 16:38:33 +0200 Subject: [PATCH 04/20] [IMP] sale_margin_sync: black, isort --- sale_margin_sync/__manifest__.py | 21 +++---- sale_margin_sync/models/stock_move.py | 12 ++-- .../tests/test_sale_margin_sync.py | 59 +++++++++++-------- 3 files changed, 49 insertions(+), 43 deletions(-) diff --git a/sale_margin_sync/__manifest__.py b/sale_margin_sync/__manifest__.py index e7400dc63..ff5275277 100644 --- a/sale_margin_sync/__manifest__.py +++ b/sale_margin_sync/__manifest__.py @@ -1,16 +1,13 @@ # Copyright 2019 Tecnativa - Carlos Dauden # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). { - 'name': 'Sale margin sync', - 'summary': 'Recompute sale margin when stock move cost price is changed', - 'version': '12.0.1.0.1', - 'category': 'Sales', - 'website': 'https://github.com/OCA/margin-analysis', - 'author': 'Tecnativa, Odoo Community Association (OCA)', - 'license': 'AGPL-3', - 'installable': True, - 'depends': [ - 'sale_margin', - 'sale_stock', - ], + "name": "Sale margin sync", + "summary": "Recompute sale margin when stock move cost price is changed", + "version": "12.0.1.0.1", + "category": "Sales", + "website": "https://github.com/OCA/margin-analysis", + "author": "Tecnativa, Odoo Community Association (OCA)", + "license": "AGPL-3", + "installable": True, + "depends": ["sale_margin", "sale_stock",], } diff --git a/sale_margin_sync/models/stock_move.py b/sale_margin_sync/models/stock_move.py index d76205c51..74ea11ec1 100644 --- a/sale_margin_sync/models/stock_move.py +++ b/sale_margin_sync/models/stock_move.py @@ -5,16 +5,18 @@ class StockMove(models.Model): - _inherit = 'stock.move' + _inherit = "stock.move" def write(self, vals): res = super(StockMove, self).write(vals) - if 'price_unit' in vals and not self.env.context.get( - 'skip_sale_margin_sync', False): + if "price_unit" in vals and not self.env.context.get( + "skip_sale_margin_sync", False + ): self.sale_margin_sync() return res def sale_margin_sync(self): - for move in self.filtered(lambda m: ( - m.state == 'done' and m.sale_line_id and m._is_out())): + for move in self.filtered( + lambda m: (m.state == "done" and m.sale_line_id and m._is_out()) + ): move.sale_line_id.purchase_price = -move.price_unit diff --git a/sale_margin_sync/tests/test_sale_margin_sync.py b/sale_margin_sync/tests/test_sale_margin_sync.py index 1cbe3e72c..6ece0f60b 100644 --- a/sale_margin_sync/tests/test_sale_margin_sync.py +++ b/sale_margin_sync/tests/test_sale_margin_sync.py @@ -7,32 +7,39 @@ class TestSaleMarginSync(SavepointCase): @classmethod def setUpClass(cls): super().setUpClass() - cls.pricelist = cls.env['product.pricelist'].create({ - 'name': 'Pricelist for testing sale_margin_sync', - }) - cls.partner = cls.env['res.partner'].create({ - 'name': 'Test', - }) - cls.product = cls.env['product.product'].create({ - 'name': 'test_product', - 'type': 'product', - 'standard_price': 70, - }) - cls.env['stock.quant'].create({ - 'product_id': cls.product.id, - 'location_id': cls.env.ref('stock.stock_location_stock').id, - 'quantity': 30.0}) - cls.order = cls.env['sale.order'].create({ - 'partner_id': cls.partner.id, - 'order_line': [(0, 0, { - 'name': cls.product.name, - 'product_id': cls.product.id, - 'product_uom_qty': 10, - 'product_uom': cls.product.uom_id.id, - 'price_unit': 100.00, - })], - 'pricelist_id': cls.pricelist.id, - }) + cls.pricelist = cls.env["product.pricelist"].create( + {"name": "Pricelist for testing sale_margin_sync",} + ) + cls.partner = cls.env["res.partner"].create({"name": "Test",}) + cls.product = cls.env["product.product"].create( + {"name": "test_product", "type": "product", "standard_price": 70,} + ) + cls.env["stock.quant"].create( + { + "product_id": cls.product.id, + "location_id": cls.env.ref("stock.stock_location_stock").id, + "quantity": 30.0, + } + ) + cls.order = cls.env["sale.order"].create( + { + "partner_id": cls.partner.id, + "order_line": [ + ( + 0, + 0, + { + "name": cls.product.name, + "product_id": cls.product.id, + "product_uom_qty": 10, + "product_uom": cls.product.uom_id.id, + "price_unit": 100.00, + }, + ) + ], + "pricelist_id": cls.pricelist.id, + } + ) def test_sale_margin_sync(self): self.order.action_confirm() From dc8338b5dea7be4c5146f9a69aa2c27342f8a0d1 Mon Sep 17 00:00:00 2001 From: sergio-teruel Date: Thu, 17 Sep 2020 16:38:33 +0200 Subject: [PATCH 05/20] [MIG] sale_margin_sync: Migration to v13.0 --- sale_margin_sync/README.rst | 10 ++++----- sale_margin_sync/__manifest__.py | 4 ++-- sale_margin_sync/i18n/sale_margin_sync.pot | 11 +++++----- sale_margin_sync/models/__init__.py | 2 +- sale_margin_sync/models/stock_move.py | 22 ------------------- .../models/stock_valuation_layer.py | 20 +++++++++++++++++ .../static/description/index.html | 6 ++--- .../tests/test_sale_margin_sync.py | 10 ++++----- 8 files changed, 41 insertions(+), 44 deletions(-) delete mode 100644 sale_margin_sync/models/stock_move.py create mode 100644 sale_margin_sync/models/stock_valuation_layer.py diff --git a/sale_margin_sync/README.rst b/sale_margin_sync/README.rst index 56fb41680..5c83bba51 100644 --- a/sale_margin_sync/README.rst +++ b/sale_margin_sync/README.rst @@ -14,13 +14,13 @@ Sale margin sync :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/12.0/sale_margin_sync + :target: https://github.com/OCA/margin-analysis/tree/13.0/sale_margin_sync :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-12-0/margin-analysis-12-0-sale_margin_sync + :target: https://translation.odoo-community.org/projects/margin-analysis-13-0/margin-analysis-13-0-sale_margin_sync :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/12.0 + :target: https://runbot.odoo-community.org/runbot/132/13.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -38,7 +38,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. @@ -71,6 +71,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_margin_sync/__manifest__.py b/sale_margin_sync/__manifest__.py index ff5275277..9ef6f6c4e 100644 --- a/sale_margin_sync/__manifest__.py +++ b/sale_margin_sync/__manifest__.py @@ -3,11 +3,11 @@ { "name": "Sale margin sync", "summary": "Recompute sale margin when stock move cost price is changed", - "version": "12.0.1.0.1", + "version": "13.0.1.0.0", "category": "Sales", "website": "https://github.com/OCA/margin-analysis", "author": "Tecnativa, Odoo Community Association (OCA)", "license": "AGPL-3", "installable": True, - "depends": ["sale_margin", "sale_stock",], + "depends": ["sale_margin", "sale_stock"], } diff --git a/sale_margin_sync/i18n/sale_margin_sync.pot b/sale_margin_sync/i18n/sale_margin_sync.pot index aa948acee..28dd313aa 100644 --- a/sale_margin_sync/i18n/sale_margin_sync.pot +++ b/sale_margin_sync/i18n/sale_margin_sync.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * sale_margin_sync +# * sale_margin_sync # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -14,7 +14,6 @@ msgstr "" "Plural-Forms: \n" #. module: sale_margin_sync -#: model:ir.model,name:sale_margin_sync.model_stock_move -msgid "Stock Move" +#: model:ir.model,name:sale_margin_sync.model_stock_valuation_layer +msgid "Stock Valuation Layer" msgstr "" - diff --git a/sale_margin_sync/models/__init__.py b/sale_margin_sync/models/__init__.py index 1fec16564..276dabe9e 100644 --- a/sale_margin_sync/models/__init__.py +++ b/sale_margin_sync/models/__init__.py @@ -1,3 +1,3 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from . import stock_move +from . import stock_valuation_layer diff --git a/sale_margin_sync/models/stock_move.py b/sale_margin_sync/models/stock_move.py deleted file mode 100644 index 74ea11ec1..000000000 --- a/sale_margin_sync/models/stock_move.py +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright 2019 Tecnativa - Carlos Dauden -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). - -from odoo import models - - -class StockMove(models.Model): - _inherit = "stock.move" - - def write(self, vals): - res = super(StockMove, self).write(vals) - if "price_unit" in vals and not self.env.context.get( - "skip_sale_margin_sync", False - ): - self.sale_margin_sync() - return res - - def sale_margin_sync(self): - for move in self.filtered( - lambda m: (m.state == "done" and m.sale_line_id and m._is_out()) - ): - move.sale_line_id.purchase_price = -move.price_unit diff --git a/sale_margin_sync/models/stock_valuation_layer.py b/sale_margin_sync/models/stock_valuation_layer.py new file mode 100644 index 000000000..7214b3cdf --- /dev/null +++ b/sale_margin_sync/models/stock_valuation_layer.py @@ -0,0 +1,20 @@ +# Copyright 2019 Tecnativa - Carlos Dauden +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models + + +class StockValuationLayer(models.Model): + _inherit = "stock.valuation.layer" + + def write(self, vals): + res = super().write(vals) + if "unit_cost" in vals and not self.env.context.get( + "skip_sale_margin_sync", False + ): + self.sale_margin_sync() + return res + + def sale_margin_sync(self): + for svl in self.filtered(lambda l: (l.quantity < 0.0)): + svl.stock_move_id.sale_line_id.purchase_price = svl.unit_cost diff --git a/sale_margin_sync/static/description/index.html b/sale_margin_sync/static/description/index.html index 93578de7f..fde491d55 100644 --- a/sale_margin_sync/static/description/index.html +++ b/sale_margin_sync/static/description/index.html @@ -367,7 +367,7 @@

Sale margin sync

!! 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

+

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

Recompute sale margin when related stock move cost price is changed.

Table of contents

@@ -386,7 +386,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.

@@ -417,7 +417,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_margin_sync/tests/test_sale_margin_sync.py b/sale_margin_sync/tests/test_sale_margin_sync.py index 6ece0f60b..82f2530f3 100644 --- a/sale_margin_sync/tests/test_sale_margin_sync.py +++ b/sale_margin_sync/tests/test_sale_margin_sync.py @@ -8,11 +8,11 @@ class TestSaleMarginSync(SavepointCase): def setUpClass(cls): super().setUpClass() cls.pricelist = cls.env["product.pricelist"].create( - {"name": "Pricelist for testing sale_margin_sync",} + {"name": "Pricelist for testing sale_margin_sync"} ) - cls.partner = cls.env["res.partner"].create({"name": "Test",}) + cls.partner = cls.env["res.partner"].create({"name": "Test"}) cls.product = cls.env["product.product"].create( - {"name": "test_product", "type": "product", "standard_price": 70,} + {"name": "test_product", "type": "product", "standard_price": 70} ) cls.env["stock.quant"].create( { @@ -47,7 +47,7 @@ def test_sale_margin_sync(self): move = so_line.move_ids[:1] move.quantity_done = 10 move.picking_id.action_done() - move.price_unit = -80.0 + move.stock_valuation_layer_ids[:1].unit_cost = 80.0 self.assertEqual(so_line.purchase_price, 80.0) self.assertEqual(so_line.margin, 200.0) @@ -56,6 +56,6 @@ def test_sale_margin_sync_unvalidated_move(self): so_line = self.order.order_line[:1] move = so_line.move_ids[:1] move.quantity_done = 10 - move.price_unit = -80.0 + move.stock_valuation_layer_ids[:1].unit_cost = 80.0 self.assertEqual(so_line.purchase_price, 70.0) self.assertEqual(so_line.margin, 300.0) From 291ccdab7d4b8dcfa643e17c702b61441c04b35a Mon Sep 17 00:00:00 2001 From: sergio-teruel Date: Mon, 30 Aug 2021 17:52:47 +0200 Subject: [PATCH 06/20] [IMP] sale_margin_sync: Sync sale line purchase price from stock valuation layer unit cost TT31421 --- sale_margin_sync/__manifest__.py | 2 +- sale_margin_sync/models/stock_valuation_layer.py | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/sale_margin_sync/__manifest__.py b/sale_margin_sync/__manifest__.py index 9ef6f6c4e..8ade68edc 100644 --- a/sale_margin_sync/__manifest__.py +++ b/sale_margin_sync/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Sale margin sync", "summary": "Recompute sale margin when stock move cost price is changed", - "version": "13.0.1.0.0", + "version": "13.0.1.0.1", "category": "Sales", "website": "https://github.com/OCA/margin-analysis", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/sale_margin_sync/models/stock_valuation_layer.py b/sale_margin_sync/models/stock_valuation_layer.py index 7214b3cdf..e7b88f338 100644 --- a/sale_margin_sync/models/stock_valuation_layer.py +++ b/sale_margin_sync/models/stock_valuation_layer.py @@ -1,12 +1,21 @@ # Copyright 2019 Tecnativa - Carlos Dauden # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import models +from odoo import api, models class StockValuationLayer(models.Model): _inherit = "stock.valuation.layer" + @api.model_create_multi + def create(self, vals_list): + """Update purchase price from sale line linked to svl record + """ + svls = super().create(vals_list) + if not self.env.context.get("skip_sale_margin_sync", False): + svls.filtered("stock_move_id.sale_line_id").sale_margin_sync() + return svls + def write(self, vals): res = super().write(vals) if "unit_cost" in vals and not self.env.context.get( @@ -16,5 +25,7 @@ def write(self, vals): return res def sale_margin_sync(self): + """Only synchronize outgoing moves + """ for svl in self.filtered(lambda l: (l.quantity < 0.0)): svl.stock_move_id.sale_line_id.purchase_price = svl.unit_cost From d43292fcda09009ef4b4413bc9f55cac8c6ba65b Mon Sep 17 00:00:00 2001 From: rafamar Date: Sat, 15 Oct 2022 23:00:51 +0200 Subject: [PATCH 07/20] [IMP] sale_margin_sync: black, isort, prettier --- sale_margin_sync/models/stock_valuation_layer.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sale_margin_sync/models/stock_valuation_layer.py b/sale_margin_sync/models/stock_valuation_layer.py index e7b88f338..51b75108a 100644 --- a/sale_margin_sync/models/stock_valuation_layer.py +++ b/sale_margin_sync/models/stock_valuation_layer.py @@ -9,8 +9,7 @@ class StockValuationLayer(models.Model): @api.model_create_multi def create(self, vals_list): - """Update purchase price from sale line linked to svl record - """ + """Update purchase price from sale line linked to svl record""" svls = super().create(vals_list) if not self.env.context.get("skip_sale_margin_sync", False): svls.filtered("stock_move_id.sale_line_id").sale_margin_sync() @@ -25,7 +24,6 @@ def write(self, vals): return res def sale_margin_sync(self): - """Only synchronize outgoing moves - """ + """Only synchronize outgoing moves""" for svl in self.filtered(lambda l: (l.quantity < 0.0)): svl.stock_move_id.sale_line_id.purchase_price = svl.unit_cost From 2c5ccb7411881fcb52c62c6e5ebc11d786740713 Mon Sep 17 00:00:00 2001 From: rafamar Date: Sat, 15 Oct 2022 23:48:12 +0200 Subject: [PATCH 08/20] [MIG] sale_margin_sync: Migration to 14.0 --- sale_margin_sync/README.rst | 10 ++-- sale_margin_sync/__manifest__.py | 2 +- sale_margin_sync/i18n/sale_margin_sync.pot | 17 ++++++- .../models/stock_valuation_layer.py | 9 +++- .../static/description/index.html | 6 +-- .../tests/test_sale_margin_sync.py | 51 ++++++++++++++----- 6 files changed, 70 insertions(+), 25 deletions(-) diff --git a/sale_margin_sync/README.rst b/sale_margin_sync/README.rst index 5c83bba51..ffb3f7a40 100644 --- a/sale_margin_sync/README.rst +++ b/sale_margin_sync/README.rst @@ -14,13 +14,13 @@ Sale margin sync :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_margin_sync + :target: https://github.com/OCA/margin-analysis/tree/14.0/sale_margin_sync :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_margin_sync + :target: https://translation.odoo-community.org/projects/margin-analysis-14-0/margin-analysis-14-0-sale_margin_sync :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/14.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -38,7 +38,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. @@ -71,6 +71,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_margin_sync/__manifest__.py b/sale_margin_sync/__manifest__.py index 8ade68edc..8ef95ccdb 100644 --- a/sale_margin_sync/__manifest__.py +++ b/sale_margin_sync/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Sale margin sync", "summary": "Recompute sale margin when stock move cost price is changed", - "version": "13.0.1.0.1", + "version": "14.0.1.0.0", "category": "Sales", "website": "https://github.com/OCA/margin-analysis", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/sale_margin_sync/i18n/sale_margin_sync.pot b/sale_margin_sync/i18n/sale_margin_sync.pot index 28dd313aa..32810ace5 100644 --- a/sale_margin_sync/i18n/sale_margin_sync.pot +++ b/sale_margin_sync/i18n/sale_margin_sync.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 13.0\n" +"Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -13,6 +13,21 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: sale_margin_sync +#: model:ir.model.fields,field_description:sale_margin_sync.field_stock_valuation_layer__display_name +msgid "Display Name" +msgstr "" + +#. module: sale_margin_sync +#: model:ir.model.fields,field_description:sale_margin_sync.field_stock_valuation_layer__id +msgid "ID" +msgstr "" + +#. module: sale_margin_sync +#: model:ir.model.fields,field_description:sale_margin_sync.field_stock_valuation_layer____last_update +msgid "Last Modified on" +msgstr "" + #. module: sale_margin_sync #: model:ir.model,name:sale_margin_sync.model_stock_valuation_layer msgid "Stock Valuation Layer" diff --git a/sale_margin_sync/models/stock_valuation_layer.py b/sale_margin_sync/models/stock_valuation_layer.py index 51b75108a..1d504d51d 100644 --- a/sale_margin_sync/models/stock_valuation_layer.py +++ b/sale_margin_sync/models/stock_valuation_layer.py @@ -26,4 +26,11 @@ def write(self, vals): def sale_margin_sync(self): """Only synchronize outgoing moves""" for svl in self.filtered(lambda l: (l.quantity < 0.0)): - svl.stock_move_id.sale_line_id.purchase_price = svl.unit_cost + sale_line_id = svl.stock_move_id.sale_line_id + product_cost = svl.unit_cost + if sale_line_id.product_uom and sale_line_id.product_uom != svl.uom_id: + product_cost = svl.uom_id._compute_price( + product_cost, + sale_line_id.product_uom, + ) + sale_line_id.purchase_price = product_cost diff --git a/sale_margin_sync/static/description/index.html b/sale_margin_sync/static/description/index.html index fde491d55..f9a9c9bfc 100644 --- a/sale_margin_sync/static/description/index.html +++ b/sale_margin_sync/static/description/index.html @@ -367,7 +367,7 @@

Sale margin sync

!! 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

+

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

Recompute sale margin when related stock move cost price is changed.

Table of contents

@@ -386,7 +386,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.

@@ -417,7 +417,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_margin_sync/tests/test_sale_margin_sync.py b/sale_margin_sync/tests/test_sale_margin_sync.py index 82f2530f3..14ca58278 100644 --- a/sale_margin_sync/tests/test_sale_margin_sync.py +++ b/sale_margin_sync/tests/test_sale_margin_sync.py @@ -35,7 +35,18 @@ def setUpClass(cls): "product_uom": cls.product.uom_id.id, "price_unit": 100.00, }, - ) + ), + ( + 0, + 0, + { + "name": cls.product.name, + "product_id": cls.product.id, + "product_uom_qty": 2, + "product_uom": cls.env.ref("uom.product_uom_dozen").id, + "price_unit": 1200.00, + }, + ), ], "pricelist_id": cls.pricelist.id, } @@ -43,19 +54,31 @@ def setUpClass(cls): def test_sale_margin_sync(self): self.order.action_confirm() - so_line = self.order.order_line[:1] - move = so_line.move_ids[:1] - move.quantity_done = 10 - move.picking_id.action_done() - move.stock_valuation_layer_ids[:1].unit_cost = 80.0 - self.assertEqual(so_line.purchase_price, 80.0) - self.assertEqual(so_line.margin, 200.0) + so_line1 = self.order.order_line[:1] + move1 = so_line1.move_ids[:1] + move1.quantity_done = 10 + so_line2 = self.order.order_line[1:2] + move2 = so_line2.move_ids[:1] + move2.quantity_done = 2 + self.order.picking_ids[:1]._action_done() + move1.stock_valuation_layer_ids[:1].unit_cost = 80.0 + move2.stock_valuation_layer_ids[:1].unit_cost = 80.0 + self.assertEqual(so_line1.purchase_price, 80.0) + self.assertEqual(so_line1.margin, 200.0) + self.assertEqual(so_line2.purchase_price, 960.0) + self.assertEqual(so_line2.margin, 480) def test_sale_margin_sync_unvalidated_move(self): self.order.action_confirm() - so_line = self.order.order_line[:1] - move = so_line.move_ids[:1] - move.quantity_done = 10 - move.stock_valuation_layer_ids[:1].unit_cost = 80.0 - self.assertEqual(so_line.purchase_price, 70.0) - self.assertEqual(so_line.margin, 300.0) + so_line1 = self.order.order_line[:1] + move1 = so_line1.move_ids[:1] + move1.quantity_done = 10 + move1.stock_valuation_layer_ids[:1].unit_cost = 80.0 + so_line2 = self.order.order_line[1:2] + move2 = so_line2.move_ids[:1] + move2.quantity_done = 2 + move2.stock_valuation_layer_ids[:1].unit_cost = 80.0 + self.assertEqual(so_line1.purchase_price, 70.0) + self.assertEqual(so_line1.margin, 300.0) + self.assertEqual(so_line2.purchase_price, 840.0) + self.assertEqual(so_line2.margin, 720) From 48f1a7adb4c5b234faebde6eb88373c220a42a6c Mon Sep 17 00:00:00 2001 From: CarlosRoca13 Date: Wed, 23 Nov 2022 11:37:20 +0100 Subject: [PATCH 09/20] [MIG] sale_margin_sync: Migration to 15.0 --- sale_margin_sync/README.rst | 11 ++++++----- sale_margin_sync/__manifest__.py | 2 +- sale_margin_sync/i18n/sale_margin_sync.pot | 17 +---------------- sale_margin_sync/readme/CONTRIBUTORS.rst | 1 + sale_margin_sync/static/description/index.html | 7 ++++--- sale_margin_sync/tests/test_sale_margin_sync.py | 4 ++-- 6 files changed, 15 insertions(+), 27 deletions(-) diff --git a/sale_margin_sync/README.rst b/sale_margin_sync/README.rst index ffb3f7a40..eee1b90f9 100644 --- a/sale_margin_sync/README.rst +++ b/sale_margin_sync/README.rst @@ -14,13 +14,13 @@ Sale margin sync :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/14.0/sale_margin_sync + :target: https://github.com/OCA/margin-analysis/tree/15.0/sale_margin_sync :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-14-0/margin-analysis-14-0-sale_margin_sync + :target: https://translation.odoo-community.org/projects/margin-analysis-15-0/margin-analysis-15-0-sale_margin_sync :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/14.0 + :target: https://runbot.odoo-community.org/runbot/132/15.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -38,7 +38,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. @@ -57,6 +57,7 @@ Contributors * Carlos Dauden * Sergio Teruel + * Carlos Roca Maintainers ~~~~~~~~~~~ @@ -71,6 +72,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_margin_sync/__manifest__.py b/sale_margin_sync/__manifest__.py index 8ef95ccdb..694075c05 100644 --- a/sale_margin_sync/__manifest__.py +++ b/sale_margin_sync/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Sale margin sync", "summary": "Recompute sale margin when stock move cost price is changed", - "version": "14.0.1.0.0", + "version": "15.0.1.0.1", "category": "Sales", "website": "https://github.com/OCA/margin-analysis", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/sale_margin_sync/i18n/sale_margin_sync.pot b/sale_margin_sync/i18n/sale_margin_sync.pot index 32810ace5..a815f629c 100644 --- a/sale_margin_sync/i18n/sale_margin_sync.pot +++ b/sale_margin_sync/i18n/sale_margin_sync.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -13,21 +13,6 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" -#. module: sale_margin_sync -#: model:ir.model.fields,field_description:sale_margin_sync.field_stock_valuation_layer__display_name -msgid "Display Name" -msgstr "" - -#. module: sale_margin_sync -#: model:ir.model.fields,field_description:sale_margin_sync.field_stock_valuation_layer__id -msgid "ID" -msgstr "" - -#. module: sale_margin_sync -#: model:ir.model.fields,field_description:sale_margin_sync.field_stock_valuation_layer____last_update -msgid "Last Modified on" -msgstr "" - #. module: sale_margin_sync #: model:ir.model,name:sale_margin_sync.model_stock_valuation_layer msgid "Stock Valuation Layer" diff --git a/sale_margin_sync/readme/CONTRIBUTORS.rst b/sale_margin_sync/readme/CONTRIBUTORS.rst index 66d11c825..51818bd0f 100644 --- a/sale_margin_sync/readme/CONTRIBUTORS.rst +++ b/sale_margin_sync/readme/CONTRIBUTORS.rst @@ -2,3 +2,4 @@ * Carlos Dauden * Sergio Teruel + * Carlos Roca diff --git a/sale_margin_sync/static/description/index.html b/sale_margin_sync/static/description/index.html index f9a9c9bfc..f0197a2d6 100644 --- a/sale_margin_sync/static/description/index.html +++ b/sale_margin_sync/static/description/index.html @@ -367,7 +367,7 @@

Sale margin sync

!! 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

+

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

Recompute sale margin when related stock move cost price is changed.

Table of contents

@@ -386,7 +386,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.

@@ -405,6 +405,7 @@

Contributors

  • Carlos Dauden
  • Sergio Teruel
  • +
  • Carlos Roca
@@ -417,7 +418,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_margin_sync/tests/test_sale_margin_sync.py b/sale_margin_sync/tests/test_sale_margin_sync.py index 14ca58278..a29da65c8 100644 --- a/sale_margin_sync/tests/test_sale_margin_sync.py +++ b/sale_margin_sync/tests/test_sale_margin_sync.py @@ -1,9 +1,9 @@ # Copyright 2019 Tecnativa - Carlos Dauden # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo.tests.common import SavepointCase +from odoo.tests.common import TransactionCase -class TestSaleMarginSync(SavepointCase): +class TestSaleMarginSync(TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() From 6227229f943eab03d300fbf12ab20503c27adf39 Mon Sep 17 00:00:00 2001 From: "Yadier A. De Quesada" Date: Mon, 17 Apr 2023 15:48:46 -0400 Subject: [PATCH 10/20] [MIG] sale_margin_sync: Migration to 16.0 [MIG] sale_margin_sync: Migration to 16.0 --- sale_margin_sync/README.rst | 10 +++++----- sale_margin_sync/__manifest__.py | 2 +- sale_margin_sync/i18n/sale_margin_sync.pot | 2 +- sale_margin_sync/static/description/index.html | 6 +++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/sale_margin_sync/README.rst b/sale_margin_sync/README.rst index eee1b90f9..1489d0cac 100644 --- a/sale_margin_sync/README.rst +++ b/sale_margin_sync/README.rst @@ -14,13 +14,13 @@ Sale margin sync :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/15.0/sale_margin_sync + :target: https://github.com/OCA/margin-analysis/tree/16.0/sale_margin_sync :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-15-0/margin-analysis-15-0-sale_margin_sync + :target: https://translation.odoo-community.org/projects/margin-analysis-16-0/margin-analysis-16-0-sale_margin_sync :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 + :target: https://runbot.odoo-community.org/runbot/132/16.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -38,7 +38,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. @@ -72,6 +72,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_margin_sync/__manifest__.py b/sale_margin_sync/__manifest__.py index 694075c05..ceffcb438 100644 --- a/sale_margin_sync/__manifest__.py +++ b/sale_margin_sync/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Sale margin sync", "summary": "Recompute sale margin when stock move cost price is changed", - "version": "15.0.1.0.1", + "version": "16.0.1.0.0", "category": "Sales", "website": "https://github.com/OCA/margin-analysis", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/sale_margin_sync/i18n/sale_margin_sync.pot b/sale_margin_sync/i18n/sale_margin_sync.pot index a815f629c..6990ede21 100644 --- a/sale_margin_sync/i18n/sale_margin_sync.pot +++ b/sale_margin_sync/i18n/sale_margin_sync.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 15.0\n" +"Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" diff --git a/sale_margin_sync/static/description/index.html b/sale_margin_sync/static/description/index.html index f0197a2d6..7be2faf05 100644 --- a/sale_margin_sync/static/description/index.html +++ b/sale_margin_sync/static/description/index.html @@ -367,7 +367,7 @@

Sale margin sync

!! 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

+

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

Recompute sale margin when related stock move cost price is changed.

Table of contents

@@ -386,7 +386,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,7 +418,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 92399c7004c0c6cecc76374b81cfe868bdbb7e85 Mon Sep 17 00:00:00 2001 From: Ivorra78 Date: Mon, 21 Aug 2023 15:22:23 +0000 Subject: [PATCH 11/20] Added translation using Weblate (Spanish) --- sale_margin_sync/README.rst | 15 ++++---- sale_margin_sync/i18n/es.po | 22 ++++++++++++ .../static/description/index.html | 34 ++++++++++--------- 3 files changed, 49 insertions(+), 22 deletions(-) create mode 100644 sale_margin_sync/i18n/es.po diff --git a/sale_margin_sync/README.rst b/sale_margin_sync/README.rst index 1489d0cac..75736c849 100644 --- a/sale_margin_sync/README.rst +++ b/sale_margin_sync/README.rst @@ -2,10 +2,13 @@ Sale margin sync ================ -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:79af34278f79f246a4c9bd3e053cdcc916a70cd75850df7c5da19b9103ec1bd9 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status @@ -19,11 +22,11 @@ Sale margin sync .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :target: https://translation.odoo-community.org/projects/margin-analysis-16-0/margin-analysis-16-0-sale_margin_sync :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/16.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=16.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| Recompute sale margin when related stock move cost price is changed. @@ -37,7 +40,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_margin_sync/i18n/es.po b/sale_margin_sync/i18n/es.po new file mode 100644 index 000000000..237a1cfdd --- /dev/null +++ b/sale_margin_sync/i18n/es.po @@ -0,0 +1,22 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_margin_sync +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-09-02 18:17+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\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 4.17\n" + +#. module: sale_margin_sync +#: model:ir.model,name:sale_margin_sync.model_stock_valuation_layer +msgid "Stock Valuation Layer" +msgstr "Nivel de valoración de existencias" diff --git a/sale_margin_sync/static/description/index.html b/sale_margin_sync/static/description/index.html index 7be2faf05..879ca3352 100644 --- a/sale_margin_sync/static/description/index.html +++ b/sale_margin_sync/static/description/index.html @@ -1,20 +1,20 @@ - + - + Sale margin sync -
-

Sale margin sync

+
+ + +Odoo Community Association + +
+

Sale margin sync

-

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

+

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

Recompute sale margin when related stock move cost price is changed.

Table of contents

@@ -384,23 +389,23 @@

Sale margin sync

-

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 -feedback.

+feedback.

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

-

Credits

+

Credits

-

Authors

+

Authors

  • Tecnativa
-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -423,10 +428,11 @@

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_margin_sync/tests/test_sale_margin_sync.py b/sale_margin_sync/tests/test_sale_margin_sync.py index b0b786eef..38712d1ca 100644 --- a/sale_margin_sync/tests/test_sale_margin_sync.py +++ b/sale_margin_sync/tests/test_sale_margin_sync.py @@ -37,7 +37,7 @@ def setUpClass(cls): "name": cls.product.name, "product_id": cls.product.id, "product_uom_qty": 10, - "product_uom": cls.product.uom_id.id, + "product_uom_id": cls.product.uom_id.id, "price_unit": 100.00, }, ), @@ -48,7 +48,7 @@ def setUpClass(cls): "name": cls.product.name, "product_id": cls.product.id, "product_uom_qty": 2, - "product_uom": cls.env.ref("uom.product_uom_dozen").id, + "product_uom_id": cls.env.ref("uom.product_uom_dozen").id, "price_unit": 1200.00, }, ), @@ -66,8 +66,9 @@ def test_sale_margin_sync(self): move2 = so_line2.move_ids[:1] move2.write({"quantity": 2, "picked": True}) self.order.picking_ids[:1]._action_done() - move1.stock_valuation_layer_ids[:1].unit_cost = 80.0 - move2.stock_valuation_layer_ids[:1].unit_cost = 80.0 + # Simulate a unit cost of 80 in the product UOM + move1.value = 80.0 * move1._get_valued_qty() + move2.value = 80.0 * move2._get_valued_qty() self.assertEqual(so_line1.purchase_price, 80.0) self.assertEqual(so_line1.margin, 200.0) self.assertEqual(so_line2.purchase_price, 960.0) @@ -78,11 +79,9 @@ def test_sale_margin_sync_unvalidated_move(self): so_line1 = self.order.order_line[:1] move1 = so_line1.move_ids[:1] move1.write({"quantity": 10, "picked": True}) - move1.stock_valuation_layer_ids[:1].unit_cost = 80.0 so_line2 = self.order.order_line[1:2] move2 = so_line2.move_ids[:1] move2.write({"quantity": 2, "picked": True}) - move2.stock_valuation_layer_ids[:1].unit_cost = 80.0 self.assertEqual(so_line1.purchase_price, 70.0) self.assertEqual(so_line1.margin, 300.0) self.assertEqual(so_line2.purchase_price, 840.0) diff --git a/setup/_metapackage/pyproject.toml b/setup/_metapackage/pyproject.toml index d628462e9..999df8395 100644 --- a/setup/_metapackage/pyproject.toml +++ b/setup/_metapackage/pyproject.toml @@ -7,6 +7,7 @@ dependencies = [ "odoo-addon-product_standard_margin==19.0.*", "odoo-addon-sale_margin_security==19.0.*", "odoo-addon-sale_report_margin==19.0.*", + "odoo-addon-sale_margin_sync==19.0.*", ] classifiers=[ "Programming Language :: Python",