From 61ffe5ca21528ff9e8c2db425c782bb0e44b64c8 Mon Sep 17 00:00:00 2001 From: Carlos Dauden Date: Fri, 13 Sep 2024 10:36:20 +0200 Subject: [PATCH 1/4] [ADD] stock_move_purchase_price_update: New module TT50828 --- stock_move_purchase_price_update/README.rst | 119 +++++ stock_move_purchase_price_update/__init__.py | 3 + .../__manifest__.py | 22 + stock_move_purchase_price_update/i18n/es.po | 45 ++ .../i18n/stock_move_purchase_price_update.pot | 43 ++ .../models/__init__.py | 4 + .../models/stock_move.py | 29 ++ .../models/stock_move_line.py | 36 ++ .../readme/CONFIGURE.md | 7 + .../readme/CONTRIBUTORS.md | 2 + .../readme/DESCRIPTION.md | 2 + .../readme/USAGE.md | 12 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 465 ++++++++++++++++++ .../tests/__init__.py | 3 + .../test_stock_move_purchase_price_update.py | 57 +++ .../views/stock_move_views.xml | 114 +++++ 17 files changed, 963 insertions(+) create mode 100644 stock_move_purchase_price_update/README.rst create mode 100644 stock_move_purchase_price_update/__init__.py create mode 100644 stock_move_purchase_price_update/__manifest__.py create mode 100644 stock_move_purchase_price_update/i18n/es.po create mode 100644 stock_move_purchase_price_update/i18n/stock_move_purchase_price_update.pot create mode 100644 stock_move_purchase_price_update/models/__init__.py create mode 100644 stock_move_purchase_price_update/models/stock_move.py create mode 100644 stock_move_purchase_price_update/models/stock_move_line.py create mode 100644 stock_move_purchase_price_update/readme/CONFIGURE.md create mode 100644 stock_move_purchase_price_update/readme/CONTRIBUTORS.md create mode 100644 stock_move_purchase_price_update/readme/DESCRIPTION.md create mode 100644 stock_move_purchase_price_update/readme/USAGE.md create mode 100644 stock_move_purchase_price_update/static/description/icon.png create mode 100644 stock_move_purchase_price_update/static/description/index.html create mode 100644 stock_move_purchase_price_update/tests/__init__.py create mode 100644 stock_move_purchase_price_update/tests/test_stock_move_purchase_price_update.py create mode 100644 stock_move_purchase_price_update/views/stock_move_views.xml diff --git a/stock_move_purchase_price_update/README.rst b/stock_move_purchase_price_update/README.rst new file mode 100644 index 00000000000..d97e22f3306 --- /dev/null +++ b/stock_move_purchase_price_update/README.rst @@ -0,0 +1,119 @@ +================================ +Stock Move Purchase Price Update +================================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:2a35076101e2ac50daf15850e393f7ef280836339be32f65c6ce188bf0c98280 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fpurchase--workflow-lightgray.png?logo=github + :target: https://github.com/OCA/purchase-workflow/tree/15.0/stock_move_purchase_price_update + :alt: OCA/purchase-workflow +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/purchase-workflow-15-0/purchase-workflow-15-0-stock_move_purchase_price_update + :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/purchase-workflow&target_branch=15.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Allow update purchase price from incoming picking operations, picking +detailed operations and picking batch detailed operations if the +purchase order is not invoiced. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +- Go to 'Inventory > Configuration > Operations' Types +- Select Reception operation +- Enable 'Show Detailed Operations' option. +- Go to Reception picking +- Add optional column 'Purchase price' in operations and/or detailed + operations +- Go to picking batch with picking type Reception +- Add optional column 'Purchase price' in operations and/or detailed + operations + +Usage +===== + +1. Go to Sales > Product > Products and edit/create one +2. Set Product Type as Storable Product +3. Set a 'Sales Price' +4. Go to Purchase > Orders > Requests for Quotation +5. Create new RQ with the previous product in the order lines +6. Confirm the Purchase Order +7. Now you have a new button called 'Receive Products' > Press it +8. Add optional column 'Purchase Price' in operations and or detailed + operations +9. You can change the price of the purchase order line from here +10. Go to Inventory > Operations > Batch Transfers +11. Select or create a batch transfer with picking type Receptions +12. Add optional column 'Purchase Price' in operations and or detailed + operations + +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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Tecnativa + +Contributors +------------ + +- `Tecnativa `__: + + - Carlos Dauden + +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. + +.. |maintainer-carlosdauden| image:: https://github.com/carlosdauden.png?size=40px + :target: https://github.com/carlosdauden + :alt: carlosdauden + +Current `maintainer `__: + +|maintainer-carlosdauden| + +This module is part of the `OCA/purchase-workflow `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/stock_move_purchase_price_update/__init__.py b/stock_move_purchase_price_update/__init__.py new file mode 100644 index 00000000000..31660d6a965 --- /dev/null +++ b/stock_move_purchase_price_update/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import models diff --git a/stock_move_purchase_price_update/__manifest__.py b/stock_move_purchase_price_update/__manifest__.py new file mode 100644 index 00000000000..92d1b536c72 --- /dev/null +++ b/stock_move_purchase_price_update/__manifest__.py @@ -0,0 +1,22 @@ +# Copyright 2024 Tecnativa - Carlos Dauden +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Stock Move Purchase Price Update", + "summary": "Allow update purchase price from incoming picking operations", + "version": "15.0.1.0.0", + "development_status": "Beta", + "category": "stock", + "website": "https://github.com/OCA/purchase-workflow", + "author": "Tecnativa, Odoo Community Association (OCA)", + "maintainers": ["carlosdauden"], + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": [ + "purchase_stock", + "stock_picking_batch", + ], + "data": [ + "views/stock_move_views.xml", + ], +} diff --git a/stock_move_purchase_price_update/i18n/es.po b/stock_move_purchase_price_update/i18n/es.po new file mode 100644 index 00000000000..75fe8bd16fc --- /dev/null +++ b/stock_move_purchase_price_update/i18n/es.po @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_move_purchase_price_update +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-09-13 08:27+0000\n" +"PO-Revision-Date: 2024-09-13 10:30+0200\n" +"Last-Translator: Carlos Dauden \n" +"Language-Team: none\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 3.0.1\n" + +#. module: stock_move_purchase_price_update +#: model:ir.model.fields,field_description:stock_move_purchase_price_update.field_stock_move__is_purchase_price_editable +#: model:ir.model.fields,field_description:stock_move_purchase_price_update.field_stock_move_line__is_purchase_price_editable +msgid "Is Purchase Price Editable" +msgstr "Precio de compra es editable" + +#. module: stock_move_purchase_price_update +#: model:ir.model,name:stock_move_purchase_price_update.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Movimientos de Producto (Stock Move Line)" + +#. module: stock_move_purchase_price_update +#: model:ir.model.fields,field_description:stock_move_purchase_price_update.field_stock_move_line__purchase_line_id +msgid "Purchase Line" +msgstr "Línea de compra" + +#. module: stock_move_purchase_price_update +#: model:ir.model.fields,field_description:stock_move_purchase_price_update.field_stock_move__purchase_price_unit +#: model:ir.model.fields,field_description:stock_move_purchase_price_update.field_stock_move_line__purchase_price_unit +msgid "Purchase price" +msgstr "Precio compra" + +#. module: stock_move_purchase_price_update +#: model:ir.model,name:stock_move_purchase_price_update.model_stock_move +msgid "Stock Move" +msgstr "Movimiento de existencias" diff --git a/stock_move_purchase_price_update/i18n/stock_move_purchase_price_update.pot b/stock_move_purchase_price_update/i18n/stock_move_purchase_price_update.pot new file mode 100644 index 00000000000..579660bdbae --- /dev/null +++ b/stock_move_purchase_price_update/i18n/stock_move_purchase_price_update.pot @@ -0,0 +1,43 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_move_purchase_price_update +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-09-13 08:27+0000\n" +"PO-Revision-Date: 2024-09-13 08:27+0000\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: stock_move_purchase_price_update +#: model:ir.model.fields,field_description:stock_move_purchase_price_update.field_stock_move__is_purchase_price_editable +#: model:ir.model.fields,field_description:stock_move_purchase_price_update.field_stock_move_line__is_purchase_price_editable +msgid "Is Purchase Price Editable" +msgstr "" + +#. module: stock_move_purchase_price_update +#: model:ir.model,name:stock_move_purchase_price_update.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_move_purchase_price_update +#: model:ir.model.fields,field_description:stock_move_purchase_price_update.field_stock_move_line__purchase_line_id +msgid "Purchase Line" +msgstr "" + +#. module: stock_move_purchase_price_update +#: model:ir.model.fields,field_description:stock_move_purchase_price_update.field_stock_move__purchase_price_unit +#: model:ir.model.fields,field_description:stock_move_purchase_price_update.field_stock_move_line__purchase_price_unit +msgid "Purchase price" +msgstr "" + +#. module: stock_move_purchase_price_update +#: model:ir.model,name:stock_move_purchase_price_update.model_stock_move +msgid "Stock Move" +msgstr "" diff --git a/stock_move_purchase_price_update/models/__init__.py b/stock_move_purchase_price_update/models/__init__.py new file mode 100644 index 00000000000..72a7221c09f --- /dev/null +++ b/stock_move_purchase_price_update/models/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import stock_move +from . import stock_move_line diff --git a/stock_move_purchase_price_update/models/stock_move.py b/stock_move_purchase_price_update/models/stock_move.py new file mode 100644 index 00000000000..7bfe56a12f4 --- /dev/null +++ b/stock_move_purchase_price_update/models/stock_move.py @@ -0,0 +1,29 @@ +# Copyright 2024 Tecnativa - Carlos Dauden +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class StockMove(models.Model): + _inherit = "stock.move" + + purchase_price_unit = fields.Float( + string="Purchase price", + compute="_compute_purchase_fields", + inverse="_inverse_purchase_price_unit", + digits="Product Price", + ) + is_purchase_price_editable = fields.Boolean( + compute="_compute_purchase_fields", + ) + + @api.depends("purchase_line_id.price_unit", "purchase_line_id.qty_invoiced") + def _compute_purchase_fields(self): + for line in self: + line.purchase_price_unit = line.purchase_line_id.price_unit + line.is_purchase_price_editable = line.purchase_line_id.qty_invoiced == 0.0 + + # Use compute with inverse because related field don't save the value + def _inverse_purchase_price_unit(self): + for line in self: + line.purchase_line_id.price_unit = line.purchase_price_unit diff --git a/stock_move_purchase_price_update/models/stock_move_line.py b/stock_move_purchase_price_update/models/stock_move_line.py new file mode 100644 index 00000000000..5bf27ab297d --- /dev/null +++ b/stock_move_purchase_price_update/models/stock_move_line.py @@ -0,0 +1,36 @@ +# Copyright 2024 Tecnativa - Carlos Dauden +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class StockMoveLine(models.Model): + _inherit = "stock.move.line" + + purchase_line_id = fields.Many2one( + comodel_name="purchase.order.line", + compute="_compute_purchase_fields", + ) + purchase_price_unit = fields.Float( + string="Purchase price", + compute="_compute_purchase_fields", + inverse="_inverse_purchase_price_unit", + digits="Product Price", + ) + is_purchase_price_editable = fields.Boolean( + compute="_compute_purchase_fields", + ) + + @api.depends( + "move_id.purchase_line_id.price_unit", "move_id.purchase_line_id.qty_invoiced" + ) + def _compute_purchase_fields(self): + for line in self: + line.purchase_line_id = line.move_id.purchase_line_id + line.purchase_price_unit = line.purchase_line_id.price_unit + line.is_purchase_price_editable = line.purchase_line_id.qty_invoiced == 0.0 + + # Use compute with inverse because related field don't save the value + def _inverse_purchase_price_unit(self): + for line in self: + line.move_id.purchase_line_id.price_unit = line.purchase_price_unit diff --git a/stock_move_purchase_price_update/readme/CONFIGURE.md b/stock_move_purchase_price_update/readme/CONFIGURE.md new file mode 100644 index 00000000000..fb16bb3a9f1 --- /dev/null +++ b/stock_move_purchase_price_update/readme/CONFIGURE.md @@ -0,0 +1,7 @@ +- Go to 'Inventory \> Configuration \> Operations' Types +- Select Reception operation +- Enable 'Show Detailed Operations' option. +- Go to Reception picking +- Add optional column 'Purchase price' in operations and/or detailed operations +- Go to picking batch with picking type Reception +- Add optional column 'Purchase price' in operations and/or detailed operations diff --git a/stock_move_purchase_price_update/readme/CONTRIBUTORS.md b/stock_move_purchase_price_update/readme/CONTRIBUTORS.md new file mode 100644 index 00000000000..37d0fcf44b6 --- /dev/null +++ b/stock_move_purchase_price_update/readme/CONTRIBUTORS.md @@ -0,0 +1,2 @@ +- [Tecnativa](https://www.tecnativa.com): + - Carlos Dauden diff --git a/stock_move_purchase_price_update/readme/DESCRIPTION.md b/stock_move_purchase_price_update/readme/DESCRIPTION.md new file mode 100644 index 00000000000..a3253796b8e --- /dev/null +++ b/stock_move_purchase_price_update/readme/DESCRIPTION.md @@ -0,0 +1,2 @@ +Allow update purchase price from incoming picking operations, picking detailed +operations and picking batch detailed operations if the purchase order is not invoiced. diff --git a/stock_move_purchase_price_update/readme/USAGE.md b/stock_move_purchase_price_update/readme/USAGE.md new file mode 100644 index 00000000000..15422648c0d --- /dev/null +++ b/stock_move_purchase_price_update/readme/USAGE.md @@ -0,0 +1,12 @@ +1. Go to Sales \> Product \> Products and edit/create one +2. Set Product Type as Storable Product +3. Set a 'Sales Price' +4. Go to Purchase \> Orders \> Requests for Quotation +5. Create new RQ with the previous product in the order lines +6. Confirm the Purchase Order +7. Now you have a new button called 'Receive Products' \> Press it +8. Add optional column 'Purchase Price' in operations and or detailed operations +9. You can change the price of the purchase order line from here +10. Go to Inventory \> Operations \> Batch Transfers +11. Select or create a batch transfer with picking type Receptions +12. Add optional column 'Purchase Price' in operations and or detailed operations diff --git a/stock_move_purchase_price_update/static/description/icon.png b/stock_move_purchase_price_update/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/stock_move_purchase_price_update/static/description/index.html b/stock_move_purchase_price_update/static/description/index.html new file mode 100644 index 00000000000..3b4885df2af --- /dev/null +++ b/stock_move_purchase_price_update/static/description/index.html @@ -0,0 +1,465 @@ + + + + + +Stock Move Purchase Price Update + + + +
+

Stock Move Purchase Price Update

+ + +

Beta License: AGPL-3 OCA/purchase-workflow Translate me on Weblate Try me on Runboat

+

Allow update purchase price from incoming picking operations, picking +detailed operations and picking batch detailed operations if the +purchase order is not invoiced.

+

Table of contents

+ +
+

Configuration

+
    +
  • Go to ‘Inventory > Configuration > Operations’ Types
  • +
  • Select Reception operation
  • +
  • Enable ‘Show Detailed Operations’ option.
  • +
  • Go to Reception picking
  • +
  • Add optional column ‘Purchase price’ in operations and/or detailed +operations
  • +
  • Go to picking batch with picking type Reception
  • +
  • Add optional column ‘Purchase price’ in operations and/or detailed +operations
  • +
+
+
+

Usage

+
    +
  1. Go to Sales > Product > Products and edit/create one
  2. +
  3. Set Product Type as Storable Product
  4. +
  5. Set a ‘Sales Price’
  6. +
  7. Go to Purchase > Orders > Requests for Quotation
  8. +
  9. Create new RQ with the previous product in the order lines
  10. +
  11. Confirm the Purchase Order
  12. +
  13. Now you have a new button called ‘Receive Products’ > Press it
  14. +
  15. Add optional column ‘Purchase Price’ in operations and or detailed +operations
  16. +
  17. You can change the price of the purchase order line from here
  18. +
  19. Go to Inventory > Operations > Batch Transfers
  20. +
  21. Select or create a batch transfer with picking type Receptions
  22. +
  23. Add optional column ‘Purchase Price’ in operations and or detailed +operations
  24. +
+
+
+

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.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+ +
+
+

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.

+

Current maintainer:

+

carlosdauden

+

This module is part of the OCA/purchase-workflow project on GitHub.

+

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

+
+
+
+ + diff --git a/stock_move_purchase_price_update/tests/__init__.py b/stock_move_purchase_price_update/tests/__init__.py new file mode 100644 index 00000000000..11b1fd472c3 --- /dev/null +++ b/stock_move_purchase_price_update/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import test_stock_move_purchase_price_update diff --git a/stock_move_purchase_price_update/tests/test_stock_move_purchase_price_update.py b/stock_move_purchase_price_update/tests/test_stock_move_purchase_price_update.py new file mode 100644 index 00000000000..80edbc32f9d --- /dev/null +++ b/stock_move_purchase_price_update/tests/test_stock_move_purchase_price_update.py @@ -0,0 +1,57 @@ +# Copyright 2024 Tecnativa - Carlos Dauden +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.tests import common + + +class TestStockMovePurchasePriceUpdate(common.TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.company = cls.env.ref("base.main_company") + cls.warehouse = cls.env.ref("stock.warehouse0") + cls.product = cls.env["product.product"].create( + { + "name": "Product Test", + "type": "product", + } + ) + cls.vendor = cls.env["res.partner"].create( + { + "name": "Partner Test", + } + ) + cls.purchase_order = cls.env["purchase.order"].create( + { + "partner_id": cls.vendor.id, + "order_line": [ + ( + 0, + 0, + { + "name": cls.product.name, + "product_id": cls.product.id, + "product_uom_qty": 3, + "product_uom": cls.product.uom_id.id, + "price_unit": 100.00, + }, + ), + ], + } + ) + cls.purchase_order.onchange_partner_id() + cls.purchase_order_line = cls.purchase_order.order_line[0] + cls.purchase_order.button_confirm() + cls.picking = cls.purchase_order.picking_ids + + def test_stock_move_purchase_price(self): + moves = self.picking.move_lines + self.assertEqual(moves[0].purchase_price_unit, 100.0) + moves[0].write({"purchase_price_unit": 123.0}) + self.assertEqual(self.purchase_order_line.price_unit, 123.0) + + def test_stock_move_line_purchase_price(self): + move_lines = self.picking.move_line_ids + self.assertEqual(move_lines[0].purchase_price_unit, 100.0) + move_lines[0].write({"purchase_price_unit": 123.0}) + self.assertEqual(self.purchase_order_line.price_unit, 123.0) diff --git a/stock_move_purchase_price_update/views/stock_move_views.xml b/stock_move_purchase_price_update/views/stock_move_views.xml new file mode 100644 index 00000000000..f9d97b501ce --- /dev/null +++ b/stock_move_purchase_price_update/views/stock_move_views.xml @@ -0,0 +1,114 @@ + + + + + + stock.picking + + + + + + + + + + + + + stock.move.line + + + + + + + + + + + + + stock.move + + + + + + + + + + + + + stock.move.line + + + + + + + + + + + From ce6907411c660c276ac43941e01bfac3d37be022 Mon Sep 17 00:00:00 2001 From: Carlos Dauden Date: Fri, 13 Sep 2024 11:53:17 +0200 Subject: [PATCH 2/4] [IMP] stock_move_purchase_price_update: Split in two modules to avoid dependency --- stock_move_purchase_price_update/README.rst | 28 ++++------ .../__manifest__.py | 1 - .../i18n/stock_move_purchase_price_update.pot | 2 - .../readme/CONFIGURE.md | 2 - .../readme/USAGE.md | 20 +++---- .../static/description/index.html | 16 ++---- .../views/stock_move_views.xml | 52 ------------------- 7 files changed, 22 insertions(+), 99 deletions(-) diff --git a/stock_move_purchase_price_update/README.rst b/stock_move_purchase_price_update/README.rst index d97e22f3306..36b527a5731 100644 --- a/stock_move_purchase_price_update/README.rst +++ b/stock_move_purchase_price_update/README.rst @@ -7,7 +7,7 @@ Stock Move Purchase Price Update !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:2a35076101e2ac50daf15850e393f7ef280836339be32f65c6ce188bf0c98280 + !! source digest: sha256:497c30681d23cee221c7d086b326b8170b871e7021c9f282e679f26b1dd12912 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -44,29 +44,21 @@ Configuration - Select Reception operation - Enable 'Show Detailed Operations' option. - Go to Reception picking -- Add optional column 'Purchase price' in operations and/or detailed - operations -- Go to picking batch with picking type Reception - Add optional column 'Purchase price' in operations and/or detailed operations Usage ===== -1. Go to Sales > Product > Products and edit/create one -2. Set Product Type as Storable Product -3. Set a 'Sales Price' -4. Go to Purchase > Orders > Requests for Quotation -5. Create new RQ with the previous product in the order lines -6. Confirm the Purchase Order -7. Now you have a new button called 'Receive Products' > Press it -8. Add optional column 'Purchase Price' in operations and or detailed - operations -9. You can change the price of the purchase order line from here -10. Go to Inventory > Operations > Batch Transfers -11. Select or create a batch transfer with picking type Receptions -12. Add optional column 'Purchase Price' in operations and or detailed - operations +- Go to Purchase > Products > Products and edit/create one +- Set Product Type as Storable Product +- Go to Purchase > Orders > Requests for Quotation +- Create new RQ with the previous product in the order lines +- Confirm the Purchase Order +- Now you have a new button called 'Receive Products' > Press it +- Add optional column 'Purchase Price' in operations and or detailed + operations +- You can change the price of the purchase order line from here Bug Tracker =========== diff --git a/stock_move_purchase_price_update/__manifest__.py b/stock_move_purchase_price_update/__manifest__.py index 92d1b536c72..3f779192bba 100644 --- a/stock_move_purchase_price_update/__manifest__.py +++ b/stock_move_purchase_price_update/__manifest__.py @@ -14,7 +14,6 @@ "installable": True, "depends": [ "purchase_stock", - "stock_picking_batch", ], "data": [ "views/stock_move_views.xml", diff --git a/stock_move_purchase_price_update/i18n/stock_move_purchase_price_update.pot b/stock_move_purchase_price_update/i18n/stock_move_purchase_price_update.pot index 579660bdbae..f0f75b20991 100644 --- a/stock_move_purchase_price_update/i18n/stock_move_purchase_price_update.pot +++ b/stock_move_purchase_price_update/i18n/stock_move_purchase_price_update.pot @@ -6,8 +6,6 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-13 08:27+0000\n" -"PO-Revision-Date: 2024-09-13 08:27+0000\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" diff --git a/stock_move_purchase_price_update/readme/CONFIGURE.md b/stock_move_purchase_price_update/readme/CONFIGURE.md index fb16bb3a9f1..9f21fdb04fa 100644 --- a/stock_move_purchase_price_update/readme/CONFIGURE.md +++ b/stock_move_purchase_price_update/readme/CONFIGURE.md @@ -3,5 +3,3 @@ - Enable 'Show Detailed Operations' option. - Go to Reception picking - Add optional column 'Purchase price' in operations and/or detailed operations -- Go to picking batch with picking type Reception -- Add optional column 'Purchase price' in operations and/or detailed operations diff --git a/stock_move_purchase_price_update/readme/USAGE.md b/stock_move_purchase_price_update/readme/USAGE.md index 15422648c0d..ba66e30feac 100644 --- a/stock_move_purchase_price_update/readme/USAGE.md +++ b/stock_move_purchase_price_update/readme/USAGE.md @@ -1,12 +1,8 @@ -1. Go to Sales \> Product \> Products and edit/create one -2. Set Product Type as Storable Product -3. Set a 'Sales Price' -4. Go to Purchase \> Orders \> Requests for Quotation -5. Create new RQ with the previous product in the order lines -6. Confirm the Purchase Order -7. Now you have a new button called 'Receive Products' \> Press it -8. Add optional column 'Purchase Price' in operations and or detailed operations -9. You can change the price of the purchase order line from here -10. Go to Inventory \> Operations \> Batch Transfers -11. Select or create a batch transfer with picking type Receptions -12. Add optional column 'Purchase Price' in operations and or detailed operations +- Go to Purchase \> Products \> Products and edit/create one +- Set Product Type as Storable Product +- Go to Purchase \> Orders \> Requests for Quotation +- Create new RQ with the previous product in the order lines +- Confirm the Purchase Order +- Now you have a new button called 'Receive Products' \> Press it +- Add optional column 'Purchase Price' in operations and or detailed operations +- You can change the price of the purchase order line from here diff --git a/stock_move_purchase_price_update/static/description/index.html b/stock_move_purchase_price_update/static/description/index.html index 3b4885df2af..c9a1b7f6032 100644 --- a/stock_move_purchase_price_update/static/description/index.html +++ b/stock_move_purchase_price_update/static/description/index.html @@ -367,7 +367,7 @@

Stock Move Purchase Price Update

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:2a35076101e2ac50daf15850e393f7ef280836339be32f65c6ce188bf0c98280 +!! source digest: sha256:497c30681d23cee221c7d086b326b8170b871e7021c9f282e679f26b1dd12912 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/purchase-workflow Translate me on Weblate Try me on Runboat

Allow update purchase price from incoming picking operations, picking @@ -396,17 +396,13 @@

Configuration

  • Go to Reception picking
  • Add optional column ‘Purchase price’ in operations and/or detailed operations
  • -
  • Go to picking batch with picking type Reception
  • -
  • Add optional column ‘Purchase price’ in operations and/or detailed -operations
  • Usage

    -
      -
    1. Go to Sales > Product > Products and edit/create one
    2. +
        +
      • Go to Purchase > Products > Products and edit/create one
      • Set Product Type as Storable Product
      • -
      • Set a ‘Sales Price’
      • Go to Purchase > Orders > Requests for Quotation
      • Create new RQ with the previous product in the order lines
      • Confirm the Purchase Order
      • @@ -414,11 +410,7 @@

        Usage

      • Add optional column ‘Purchase Price’ in operations and or detailed operations
      • You can change the price of the purchase order line from here
      • -
      • Go to Inventory > Operations > Batch Transfers
      • -
      • Select or create a batch transfer with picking type Receptions
      • -
      • Add optional column ‘Purchase Price’ in operations and or detailed -operations
      • -
    +

    Bug Tracker

    diff --git a/stock_move_purchase_price_update/views/stock_move_views.xml b/stock_move_purchase_price_update/views/stock_move_views.xml index f9d97b501ce..6e4c042006d 100644 --- a/stock_move_purchase_price_update/views/stock_move_views.xml +++ b/stock_move_purchase_price_update/views/stock_move_views.xml @@ -59,56 +59,4 @@ - - - stock.move - - - - - - - - - - - - - stock.move.line - - - - - - - - - - From f75962151bcc3d7bd9ed998601078ebe73a893a8 Mon Sep 17 00:00:00 2001 From: eduardo Date: Thu, 11 Sep 2025 07:37:39 +0000 Subject: [PATCH 3/4] [IMP] stock_move_purchase_price_update: pre-commit auto fixes --- stock_move_purchase_price_update/pyproject.toml | 3 +++ stock_move_purchase_price_update/views/stock_move_views.xml | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 stock_move_purchase_price_update/pyproject.toml diff --git a/stock_move_purchase_price_update/pyproject.toml b/stock_move_purchase_price_update/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/stock_move_purchase_price_update/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/stock_move_purchase_price_update/views/stock_move_views.xml b/stock_move_purchase_price_update/views/stock_move_views.xml index 6e4c042006d..7c84068cec1 100644 --- a/stock_move_purchase_price_update/views/stock_move_views.xml +++ b/stock_move_purchase_price_update/views/stock_move_views.xml @@ -1,6 +1,5 @@ - stock.picking @@ -58,5 +57,4 @@ - From 8cbddfd70c317c6946cf4db29975cfb4a72de6cb Mon Sep 17 00:00:00 2001 From: eduardo Date: Thu, 11 Sep 2025 08:26:44 +0000 Subject: [PATCH 4/4] [MIG] stock_move_purchase_price_update: Migration to 18.0 --- stock_move_purchase_price_update/README.rst | 44 +++++++++---------- .../__manifest__.py | 2 +- .../static/description/index.html | 6 +-- .../test_stock_move_purchase_price_update.py | 11 ++--- .../views/stock_move_views.xml | 16 ++++--- 5 files changed, 40 insertions(+), 39 deletions(-) diff --git a/stock_move_purchase_price_update/README.rst b/stock_move_purchase_price_update/README.rst index 36b527a5731..f13e74920c9 100644 --- a/stock_move_purchase_price_update/README.rst +++ b/stock_move_purchase_price_update/README.rst @@ -17,13 +17,13 @@ Stock Move Purchase Price Update :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpurchase--workflow-lightgray.png?logo=github - :target: https://github.com/OCA/purchase-workflow/tree/15.0/stock_move_purchase_price_update + :target: https://github.com/OCA/purchase-workflow/tree/18.0/stock_move_purchase_price_update :alt: OCA/purchase-workflow .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/purchase-workflow-15-0/purchase-workflow-15-0-stock_move_purchase_price_update + :target: https://translation.odoo-community.org/projects/purchase-workflow-18-0/purchase-workflow-18-0-stock_move_purchase_price_update :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/purchase-workflow&target_branch=15.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/purchase-workflow&target_branch=18.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -40,25 +40,25 @@ purchase order is not invoiced. Configuration ============= -- Go to 'Inventory > Configuration > Operations' Types -- Select Reception operation -- Enable 'Show Detailed Operations' option. -- Go to Reception picking -- Add optional column 'Purchase price' in operations and/or detailed - operations +- Go to 'Inventory > Configuration > Operations' Types +- Select Reception operation +- Enable 'Show Detailed Operations' option. +- Go to Reception picking +- Add optional column 'Purchase price' in operations and/or detailed + operations Usage ===== -- Go to Purchase > Products > Products and edit/create one -- Set Product Type as Storable Product -- Go to Purchase > Orders > Requests for Quotation -- Create new RQ with the previous product in the order lines -- Confirm the Purchase Order -- Now you have a new button called 'Receive Products' > Press it -- Add optional column 'Purchase Price' in operations and or detailed - operations -- You can change the price of the purchase order line from here +- Go to Purchase > Products > Products and edit/create one +- Set Product Type as Storable Product +- Go to Purchase > Orders > Requests for Quotation +- Create new RQ with the previous product in the order lines +- Confirm the Purchase Order +- Now you have a new button called 'Receive Products' > Press it +- Add optional column 'Purchase Price' in operations and or detailed + operations +- You can change the price of the purchase order line from here Bug Tracker =========== @@ -66,7 +66,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. @@ -81,9 +81,9 @@ Authors Contributors ------------ -- `Tecnativa `__: +- `Tecnativa `__: - - Carlos Dauden + - Carlos Dauden Maintainers ----------- @@ -106,6 +106,6 @@ Current `maintainer `__: |maintainer-carlosdauden| -This module is part of the `OCA/purchase-workflow `_ project on GitHub. +This module is part of the `OCA/purchase-workflow `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/stock_move_purchase_price_update/__manifest__.py b/stock_move_purchase_price_update/__manifest__.py index 3f779192bba..314a4400690 100644 --- a/stock_move_purchase_price_update/__manifest__.py +++ b/stock_move_purchase_price_update/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Stock Move Purchase Price Update", "summary": "Allow update purchase price from incoming picking operations", - "version": "15.0.1.0.0", + "version": "18.0.1.0.0", "development_status": "Beta", "category": "stock", "website": "https://github.com/OCA/purchase-workflow", diff --git a/stock_move_purchase_price_update/static/description/index.html b/stock_move_purchase_price_update/static/description/index.html index c9a1b7f6032..eea7333e246 100644 --- a/stock_move_purchase_price_update/static/description/index.html +++ b/stock_move_purchase_price_update/static/description/index.html @@ -369,7 +369,7 @@

    Stock Move Purchase Price Update

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:497c30681d23cee221c7d086b326b8170b871e7021c9f282e679f26b1dd12912 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

    Beta License: AGPL-3 OCA/purchase-workflow Translate me on Weblate Try me on Runboat

    +

    Beta License: AGPL-3 OCA/purchase-workflow Translate me on Weblate Try me on Runboat

    Allow update purchase price from incoming picking operations, picking detailed operations and picking batch detailed operations if the purchase order is not invoiced.

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

    @@ -448,7 +448,7 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    carlosdauden

    -

    This module is part of the OCA/purchase-workflow project on GitHub.

    +

    This module is part of the OCA/purchase-workflow project on GitHub.

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

    diff --git a/stock_move_purchase_price_update/tests/test_stock_move_purchase_price_update.py b/stock_move_purchase_price_update/tests/test_stock_move_purchase_price_update.py index 80edbc32f9d..e7eef7d4991 100644 --- a/stock_move_purchase_price_update/tests/test_stock_move_purchase_price_update.py +++ b/stock_move_purchase_price_update/tests/test_stock_move_purchase_price_update.py @@ -1,20 +1,17 @@ # Copyright 2024 Tecnativa - Carlos Dauden # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo.tests import common +from odoo.addons.base.tests.common import BaseCommon -class TestStockMovePurchasePriceUpdate(common.TransactionCase): +class TestStockMovePurchasePriceUpdate(BaseCommon): @classmethod def setUpClass(cls): super().setUpClass() cls.company = cls.env.ref("base.main_company") cls.warehouse = cls.env.ref("stock.warehouse0") cls.product = cls.env["product.product"].create( - { - "name": "Product Test", - "type": "product", - } + {"name": "Product Test", "type": "consu", "is_storable": True} ) cls.vendor = cls.env["res.partner"].create( { @@ -45,7 +42,7 @@ def setUpClass(cls): cls.picking = cls.purchase_order.picking_ids def test_stock_move_purchase_price(self): - moves = self.picking.move_lines + moves = self.picking.move_ids self.assertEqual(moves[0].purchase_price_unit, 100.0) moves[0].write({"purchase_price_unit": 123.0}) self.assertEqual(self.purchase_order_line.price_unit, 123.0) diff --git a/stock_move_purchase_price_update/views/stock_move_views.xml b/stock_move_purchase_price_update/views/stock_move_views.xml index 7c84068cec1..ad2405f3cac 100644 --- a/stock_move_purchase_price_update/views/stock_move_views.xml +++ b/stock_move_purchase_price_update/views/stock_move_views.xml @@ -6,7 +6,7 @@ @@ -40,18 +42,20 @@