From 4e2f8f3e07b033fc792987e3ac6f7fe476536864 Mon Sep 17 00:00:00 2001 From: David Date: Tue, 19 Jun 2018 10:21:40 +0200 Subject: [PATCH] [ADD] stock_picking_procure_method: New module --- stock_picking_procure_method/README.rst | 142 +++++ stock_picking_procure_method/__init__.py | 1 + stock_picking_procure_method/__manifest__.py | 19 + .../i18n/stock_picking_procure_method.pot | 30 ++ .../models/__init__.py | 1 + .../models/stock_picking.py | 43 ++ .../readme/CONFIGURE.rst | 38 ++ .../readme/CONTRIBUTORS.rst | 4 + .../readme/DESCRIPTION.rst | 4 + .../readme/INSTALL.rst | 2 + stock_picking_procure_method/readme/USAGE.rst | 11 + .../static/description/index.html | 497 ++++++++++++++++++ .../tests/__init__.py | 1 + .../test_stock_picking_procure_method.py | 74 +++ .../views/stock_picking_views.xml | 16 + 15 files changed, 883 insertions(+) create mode 100644 stock_picking_procure_method/README.rst create mode 100644 stock_picking_procure_method/__init__.py create mode 100644 stock_picking_procure_method/__manifest__.py create mode 100644 stock_picking_procure_method/i18n/stock_picking_procure_method.pot create mode 100644 stock_picking_procure_method/models/__init__.py create mode 100644 stock_picking_procure_method/models/stock_picking.py create mode 100644 stock_picking_procure_method/readme/CONFIGURE.rst create mode 100644 stock_picking_procure_method/readme/CONTRIBUTORS.rst create mode 100644 stock_picking_procure_method/readme/DESCRIPTION.rst create mode 100644 stock_picking_procure_method/readme/INSTALL.rst create mode 100644 stock_picking_procure_method/readme/USAGE.rst create mode 100644 stock_picking_procure_method/static/description/index.html create mode 100644 stock_picking_procure_method/tests/__init__.py create mode 100644 stock_picking_procure_method/tests/test_stock_picking_procure_method.py create mode 100644 stock_picking_procure_method/views/stock_picking_views.xml diff --git a/stock_picking_procure_method/README.rst b/stock_picking_procure_method/README.rst new file mode 100644 index 000000000..32eb2588e --- /dev/null +++ b/stock_picking_procure_method/README.rst @@ -0,0 +1,142 @@ +============================ +Stock Picking Procure Method +============================ + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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%2Fstock--logistics--warehouse-lightgray.png?logo=github + :target: https://github.com/OCA/stock-logistics-warehouse/tree/11.0/stock_picking_procure_method + :alt: OCA/stock-logistics-warehouse +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/stock-logistics-warehouse-11-0/stock-logistics-warehouse-11-0-stock_picking_procure_method + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/153/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds the possibility to set the supply method to *Apply Procurement +Rules* in the pickings, which is normally set to *Take From Stock* by default. + +This way, you can configure MTO flows triggered from the picking itself. + +**Table of contents** + +.. contents:: + :local: + +Installation +============ + +This module is useless without either Odoo's `mrp` or `purchase` modules (or +both). Depending on your needs you should install them in advance. + +Configuration +============= + +This is an example scenario with two warehouses. WH2 will be allways supplied +through WH1. + +Common steps to `mrp` and `purchase` procurements: + +#. Go to *Inventory > Configuration > Settings > Warehouse* and set *Multi-Step + Routes* on. +#. Go to *Inventory > Configuration > Warehouse Management > Warehouses* +#. Create **WH1** with either *Manufacture in this Warehouse* or *Purchase to + resupply this warehouse* or both set. +#. Create **WH2** setting off *Manufacture in this Warehouse* and *Purchase to + resupply this warehouse*. Set **WH1** as the *Resupply Warehouse*. +#. Go to *Inventory > Configuration > Warehouse Management > Routes* and click + on the *Make To Order* one. +#. Add a new *Procurement Rule* with these settings and save: + + - Name: *WH1 -> WH2-MTO* + - Action: *Move From Another Location* + - Procurement Location: *WH2/Stock* + - Served Warehouse: *WH2* + - Source Location: *WH1/Stock* + - Move Supply Method: *Create Procurement* + - Operation Type: *WH1: Internal Transfers* + - Propagation of Procurement Group: *Propagate* + - Propagate cancel and split: `True` + - Warehouse to Propagate: *WH1* + +Now if you want to trigger a manufacture: + + - Create a stockable product product with a BoM list. + - In the product's *Inventory > Routes section* set *Make To Order* and + *Manufacture* on. + +Or if you want to trigger a purchase: + + - Create a stockable product product with a supplier. + - In the product's *Inventory > Routes section* set *Make To Order* and + *Purchase* on. + +Usage +===== + +After configuring you procurement rules and your product routes: + +#. Go to *Inventory > Dashboard* and click on the *more options* icon (☰). +#. Choose *New > Planned Transfer*. +#. Set an origin and destination that is considered in the routes procurement + rules. +#. Set *Supply Method* to *Apply Procurement Rules*. +#. Set the products and quantities you want to supply. +#. Save and click on *Mark as To Do*. +#. Depending on the product's supply type a new MO or a new PO should be + created. + +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 `_: + + * David Vidal + * Pedro M. Baeza + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/stock-logistics-warehouse `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/stock_picking_procure_method/__init__.py b/stock_picking_procure_method/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/stock_picking_procure_method/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/stock_picking_procure_method/__manifest__.py b/stock_picking_procure_method/__manifest__.py new file mode 100644 index 000000000..e1b2fa434 --- /dev/null +++ b/stock_picking_procure_method/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2018 Tecnativa - David Vidal +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + 'name': 'Stock Picking Procure Method', + 'summary': 'Allows to force the procurement method from the picking', + 'version': '11.0.1.0.0', + 'category': 'Warehouse', + 'author': 'Tecnativa,' + 'Odoo Community Association (OCA)', + 'website': 'https://github.com/OCA/stock-logistics-warehouse', + 'license': 'AGPL-3', + 'depends': [ + 'stock', + ], + 'data': [ + 'views/stock_picking_views.xml', + ], + 'installable': True, +} diff --git a/stock_picking_procure_method/i18n/stock_picking_procure_method.pot b/stock_picking_procure_method/i18n/stock_picking_procure_method.pot new file mode 100644 index 000000000..84e6c1e5c --- /dev/null +++ b/stock_picking_procure_method/i18n/stock_picking_procure_method.pot @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_picking_procure_method +# +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: stock_picking_procure_method +#: model:ir.model.fields,help:stock_picking_procure_method.field_stock_picking_procure_method +msgid "By default, the system will take from the stock in the source location and passively wait for availability. The other possibility allows you to directly create a procurement on the source location (and thus ignore its current stock) to gather products. If we want to chain moves and have this one to wait for the previous, this second option should be chosen." +msgstr "" + +#. module: stock_picking_procure_method +#: model:ir.model.fields,field_description:stock_picking_procure_method.field_stock_picking_procure_method +msgid "Supply Method" +msgstr "" + +#. module: stock_picking_procure_method +#: model:ir.model,name:stock_picking_procure_method.model_stock_picking +msgid "Transfer" +msgstr "" + diff --git a/stock_picking_procure_method/models/__init__.py b/stock_picking_procure_method/models/__init__.py new file mode 100644 index 000000000..ae4c27227 --- /dev/null +++ b/stock_picking_procure_method/models/__init__.py @@ -0,0 +1 @@ +from . import stock_picking diff --git a/stock_picking_procure_method/models/stock_picking.py b/stock_picking_procure_method/models/stock_picking.py new file mode 100644 index 000000000..fba52c82c --- /dev/null +++ b/stock_picking_procure_method/models/stock_picking.py @@ -0,0 +1,43 @@ +# Copyright 2018 Tecnativa - David Vidal +# Copyright 2018 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class StockPicking(models.Model): + _inherit = 'stock.picking' + + procure_method = fields.Selection( + selection='_selection_procure_method', + compute='_compute_procure_method', + inverse='_inverse_procure_method', + string='Supply Method', + help='By default, the system will take from the stock in the source ' + 'location and passively wait for availability. The other ' + 'possibility allows you to directly create a procurement on the ' + 'source location (and thus ignore its current stock) to gather ' + 'products. If we want to chain moves and have this one to wait ' + 'for the previous, this second option should be chosen.', + ) + + def _selection_procure_method(self): + return self.env['stock.move'].fields_get( + allfields=['procure_method'])['procure_method']['selection'] + + @api.depends('move_lines.procure_method') + def _compute_procure_method(self): + for picking in self: + procure_method = False + for move in picking.move_lines: + if not procure_method: + procure_method = move.procure_method + elif procure_method != move.procure_method: + procure_method = False + break + picking.procure_method = procure_method + + def _inverse_procure_method(self): + self.filtered('procure_method').mapped('move_lines').update({ + 'procure_method': self.procure_method, + }) diff --git a/stock_picking_procure_method/readme/CONFIGURE.rst b/stock_picking_procure_method/readme/CONFIGURE.rst new file mode 100644 index 000000000..49155ea64 --- /dev/null +++ b/stock_picking_procure_method/readme/CONFIGURE.rst @@ -0,0 +1,38 @@ +This is an example scenario with two warehouses. WH2 will be allways supplied +through WH1. + +Common steps to `mrp` and `purchase` procurements: + +#. Go to *Inventory > Configuration > Settings > Warehouse* and set *Multi-Step + Routes* on. +#. Go to *Inventory > Configuration > Warehouse Management > Warehouses* +#. Create **WH1** with either *Manufacture in this Warehouse* or *Purchase to + resupply this warehouse* or both set. +#. Create **WH2** setting off *Manufacture in this Warehouse* and *Purchase to + resupply this warehouse*. Set **WH1** as the *Resupply Warehouse*. +#. Go to *Inventory > Configuration > Warehouse Management > Routes* and click + on the *Make To Order* one. +#. Add a new *Procurement Rule* with these settings and save: + + - Name: *WH1 -> WH2-MTO* + - Action: *Move From Another Location* + - Procurement Location: *WH2/Stock* + - Served Warehouse: *WH2* + - Source Location: *WH1/Stock* + - Move Supply Method: *Create Procurement* + - Operation Type: *WH1: Internal Transfers* + - Propagation of Procurement Group: *Propagate* + - Propagate cancel and split: `True` + - Warehouse to Propagate: *WH1* + +Now if you want to trigger a manufacture: + + - Create a stockable product product with a BoM list. + - In the product's *Inventory > Routes section* set *Make To Order* and + *Manufacture* on. + +Or if you want to trigger a purchase: + + - Create a stockable product product with a supplier. + - In the product's *Inventory > Routes section* set *Make To Order* and + *Purchase* on. diff --git a/stock_picking_procure_method/readme/CONTRIBUTORS.rst b/stock_picking_procure_method/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..ec941801b --- /dev/null +++ b/stock_picking_procure_method/readme/CONTRIBUTORS.rst @@ -0,0 +1,4 @@ +* `Tecnativa `_: + + * David Vidal + * Pedro M. Baeza diff --git a/stock_picking_procure_method/readme/DESCRIPTION.rst b/stock_picking_procure_method/readme/DESCRIPTION.rst new file mode 100644 index 000000000..f942da3fa --- /dev/null +++ b/stock_picking_procure_method/readme/DESCRIPTION.rst @@ -0,0 +1,4 @@ +This module adds the possibility to set the supply method to *Apply Procurement +Rules* in the pickings, which is normally set to *Take From Stock* by default. + +This way, you can configure MTO flows triggered from the picking itself. diff --git a/stock_picking_procure_method/readme/INSTALL.rst b/stock_picking_procure_method/readme/INSTALL.rst new file mode 100644 index 000000000..e0f898ffa --- /dev/null +++ b/stock_picking_procure_method/readme/INSTALL.rst @@ -0,0 +1,2 @@ +This module is useless without either Odoo's `mrp` or `purchase` modules (or +both). Depending on your needs you should install them in advance. diff --git a/stock_picking_procure_method/readme/USAGE.rst b/stock_picking_procure_method/readme/USAGE.rst new file mode 100644 index 000000000..046740b8e --- /dev/null +++ b/stock_picking_procure_method/readme/USAGE.rst @@ -0,0 +1,11 @@ +After configuring you procurement rules and your product routes: + +#. Go to *Inventory > Dashboard* and click on the *more options* icon (☰). +#. Choose *New > Planned Transfer*. +#. Set an origin and destination that is considered in the routes procurement + rules. +#. Set *Supply Method* to *Apply Procurement Rules*. +#. Set the products and quantities you want to supply. +#. Save and click on *Mark as To Do*. +#. Depending on the product's supply type a new MO or a new PO should be + created. diff --git a/stock_picking_procure_method/static/description/index.html b/stock_picking_procure_method/static/description/index.html new file mode 100644 index 000000000..e779f208f --- /dev/null +++ b/stock_picking_procure_method/static/description/index.html @@ -0,0 +1,497 @@ + + + + + + +Stock Picking Procure Method + + + +
+

Stock Picking Procure Method

+ + +

Beta License: AGPL-3 OCA/stock-logistics-warehouse Translate me on Weblate Try me on Runbot

+

This module adds the possibility to set the supply method to Apply Procurement +Rules in the pickings, which is normally set to Take From Stock by default.

+

This way, you can configure MTO flows triggered from the picking itself.

+

Table of contents

+ +
+

Installation

+

This module is useless without either Odoo’s mrp or purchase modules (or +both). Depending on your needs you should install them in advance.

+
+
+

Configuration

+

This is an example scenario with two warehouses. WH2 will be allways supplied +through WH1.

+

Common steps to mrp and purchase procurements:

+
    +
  1. Go to Inventory > Configuration > Settings > Warehouse and set Multi-Step +Routes on.
  2. +
  3. Go to Inventory > Configuration > Warehouse Management > Warehouses
  4. +
  5. Create WH1 with either Manufacture in this Warehouse or Purchase to +resupply this warehouse or both set.
  6. +
  7. Create WH2 setting off Manufacture in this Warehouse and Purchase to +resupply this warehouse. Set WH1 as the Resupply Warehouse.
  8. +
  9. Go to Inventory > Configuration > Warehouse Management > Routes and click +on the Make To Order one.
  10. +
  11. Add a new Procurement Rule with these settings and save:
      +
    • Name: WH1 -> WH2-MTO
    • +
    • Action: Move From Another Location
    • +
    • Procurement Location: WH2/Stock
    • +
    • Served Warehouse: WH2
    • +
    • Source Location: WH1/Stock
    • +
    • Move Supply Method: Create Procurement
    • +
    • Operation Type: WH1: Internal Transfers
    • +
    • Propagation of Procurement Group: Propagate
    • +
    • Propagate cancel and split: True
    • +
    • Warehouse to Propagate: WH1
    • +
    +
  12. +
+

Now if you want to trigger a manufacture:

+
+
    +
  • Create a stockable product product with a BoM list.
  • +
  • In the product’s Inventory > Routes section set Make To Order and +Manufacture on.
  • +
+
+

Or if you want to trigger a purchase:

+
+
    +
  • Create a stockable product product with a supplier.
  • +
  • In the product’s Inventory > Routes section set Make To Order and +Purchase on.
  • +
+
+
+
+

Usage

+

After configuring you procurement rules and your product routes:

+
    +
  1. Go to Inventory > Dashboard and click on the more options icon (☰).
  2. +
  3. Choose New > Planned Transfer.
  4. +
  5. Set an origin and destination that is considered in the routes procurement +rules.
  6. +
  7. Set Supply Method to Apply Procurement Rules.
  8. +
  9. Set the products and quantities you want to supply.
  10. +
  11. Save and click on Mark as To Do.
  12. +
  13. Depending on the product’s supply type a new MO or a new PO should be +created.
  14. +
+
+
+

Bug Tracker

+

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

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+
    +
  • Tecnativa:

    +
    +
      +
    • David Vidal
    • +
    • Pedro M. Baeza
    • +
    +
    +
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

This module is part of the OCA/stock-logistics-warehouse project on GitHub.

+

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

+
+
+
+ + diff --git a/stock_picking_procure_method/tests/__init__.py b/stock_picking_procure_method/tests/__init__.py new file mode 100644 index 000000000..f134401c6 --- /dev/null +++ b/stock_picking_procure_method/tests/__init__.py @@ -0,0 +1 @@ +from . import test_stock_picking_procure_method diff --git a/stock_picking_procure_method/tests/test_stock_picking_procure_method.py b/stock_picking_procure_method/tests/test_stock_picking_procure_method.py new file mode 100644 index 000000000..8126e0f6f --- /dev/null +++ b/stock_picking_procure_method/tests/test_stock_picking_procure_method.py @@ -0,0 +1,74 @@ +# Copyright 2018 Tecnativa - David Vidal +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo.tests import common + + +class TestStockPickingMTO(common.SavepointCase): + @classmethod + def setUpClass(cls): + super(TestStockPickingMTO, cls).setUpClass() + cls.mto_route = cls.env.ref('stock.route_warehouse0_mto') + cls.product = cls.env['product.product'].create({ + 'name': 'Test MTO Product', + 'route_ids': [ + (6, 0, cls.mto_route.ids)], + 'type': 'product', + }) + cls.wh_obj = cls.env['stock.warehouse'] + cls.wh1 = cls.wh_obj.create({ + 'name': 'Test WH1', + 'code': 'TSWH1', + }) + cls.wh2 = cls.wh_obj.create({ + 'name': 'Test WH2', + 'code': 'TSWH2', + 'resupply_wh_ids': [(6, 0, cls.wh1.ids)], + }) + cls.procurement_rule = cls.env['procurement.rule'].create({ + 'name': 'TST-WH1 -> TST-WH2 MTO', + 'route_id': cls.mto_route.id, + 'action': 'move', + 'location_src_id': cls.wh1.lot_stock_id.id, + 'procure_method': 'make_to_stock', + 'picking_type_id': cls.wh1.int_type_id.id, + 'location_id': cls.wh2.lot_stock_id.id, + 'warehouse_id': cls.wh2.id, + 'group_propagation_option': 'propagate', + 'propagate': True, + 'propagate_warehouse_id': cls.wh1.id, + }) + cls.picking_obj = cls.env['stock.picking'].with_context( + planned_picking=True) + cls.picking = cls.picking_obj.create({ + 'picking_type_id': cls.wh1.int_type_id.id, + 'location_id': cls.wh1.lot_stock_id.id, + 'location_dest_id': cls.wh2.lot_stock_id.id, + }) + + def test_compute_procure_method(self): + # No moves + self.assertFalse(self.picking.procure_method) + # A new move defaults to MTS + move_line = self.env['stock.move'].create({ + 'name': 'TSTMOVE001', + 'picking_id': self.picking.id, + 'product_id': self.product.id, + 'product_uom': self.product.uom_id.id, + 'product_uom_qty': 100, + 'location_id': self.wh1.lot_stock_id.id, + 'location_dest_id': self.wh2.lot_stock_id.id, + }) + self.assertEqual(self.picking.procure_method, 'make_to_stock') + # Change move procure method to MTO + move_line.procure_method = 'make_to_order' + self.assertEqual(self.picking.procure_method, 'make_to_order') + # Add a new line with MTS rule + move_line.copy({ + 'procure_method': 'make_to_stock', + }) + self.assertFalse(self.picking.procure_method) + # We set the procure method in the picking + self.picking.procure_method = 'make_to_order' + self.assertEqual(self.picking.move_lines[1].procure_method, + 'make_to_order') diff --git a/stock_picking_procure_method/views/stock_picking_views.xml b/stock_picking_procure_method/views/stock_picking_views.xml new file mode 100644 index 000000000..332d4d332 --- /dev/null +++ b/stock_picking_procure_method/views/stock_picking_views.xml @@ -0,0 +1,16 @@ + + + + + stock.picking + + + + + + + + +