From 59a5f951b17bf29034e81de325acc185d516b283 Mon Sep 17 00:00:00 2001 From: Guewen Baconnier Date: Mon, 16 Nov 2020 10:50:26 +0100 Subject: [PATCH] Change picking type to many2many in reserve rules --- stock_reserve_rule/__manifest__.py | 2 +- stock_reserve_rule/i18n/stock_reserve_rule.pot | 6 +++--- .../migrations/13.0.1.1.0/post-migration.py | 18 ++++++++++++++++++ stock_reserve_rule/models/__init__.py | 1 + .../models/stock_picking_type.py | 12 ++++++++++++ .../models/stock_reserve_rule.py | 8 ++++---- stock_reserve_rule/tests/test_reserve_rule.py | 4 ++-- .../views/stock_reserve_rule_views.xml | 12 +++++++++++- 8 files changed, 52 insertions(+), 11 deletions(-) create mode 100644 stock_reserve_rule/migrations/13.0.1.1.0/post-migration.py create mode 100644 stock_reserve_rule/models/stock_picking_type.py diff --git a/stock_reserve_rule/__manifest__.py b/stock_reserve_rule/__manifest__.py index 80d6f7033..a1d89b158 100644 --- a/stock_reserve_rule/__manifest__.py +++ b/stock_reserve_rule/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Stock Reservation Rules", "summary": "Configure reservation rules by location", - "version": "13.0.1.0.0", + "version": "13.0.1.1.0", "author": "Camptocamp, Odoo Community Association (OCA)", "website": "https://github.com/OCA/stock-logistics-warehouse", "category": "Stock Management", diff --git a/stock_reserve_rule/i18n/stock_reserve_rule.pot b/stock_reserve_rule/i18n/stock_reserve_rule.pot index f9e8e8a06..0359615d2 100644 --- a/stock_reserve_rule/i18n/stock_reserve_rule.pot +++ b/stock_reserve_rule/i18n/stock_reserve_rule.pot @@ -29,7 +29,7 @@ msgid "Advanced Removal Strategy" msgstr "" #. module: stock_reserve_rule -#: model:ir.model.fields,help:stock_reserve_rule.field_stock_reserve_rule__picking_type_id +#: model:ir.model.fields,help:stock_reserve_rule.field_stock_reserve_rule__picking_type_ids msgid "Apply this rule only if the operation type of the move is the same." msgstr "" @@ -145,8 +145,8 @@ msgid "Location" msgstr "" #. module: stock_reserve_rule -#: model:ir.model.fields,field_description:stock_reserve_rule.field_stock_reserve_rule__picking_type_id -msgid "Operation Type" +#: model:ir.model.fields,field_description:stock_reserve_rule.field_stock_reserve_rule__picking_type_ids +msgid "Operation Types" msgstr "" #. module: stock_reserve_rule diff --git a/stock_reserve_rule/migrations/13.0.1.1.0/post-migration.py b/stock_reserve_rule/migrations/13.0.1.1.0/post-migration.py new file mode 100644 index 000000000..359decddf --- /dev/null +++ b/stock_reserve_rule/migrations/13.0.1.1.0/post-migration.py @@ -0,0 +1,18 @@ +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html) + +import logging + +_logger = logging.getLogger(__name__) + + +def migrate(cr, version): + cr.execute( + """ + INSERT INTO stock_picking_type_stock_reserve_rule_rel + (stock_reserve_rule_id, stock_picking_type_id) + SELECT id, picking_type_id + FROM stock_reserve_rule + WHERE picking_type_id IS NOT NULL + ON CONFLICT DO NOTHING; + """ + ) diff --git a/stock_reserve_rule/models/__init__.py b/stock_reserve_rule/models/__init__.py index b7b0c5f76..47796b0c2 100644 --- a/stock_reserve_rule/models/__init__.py +++ b/stock_reserve_rule/models/__init__.py @@ -1,4 +1,5 @@ from . import stock_move from . import stock_location from . import stock_quant +from . import stock_picking_type from . import stock_reserve_rule diff --git a/stock_reserve_rule/models/stock_picking_type.py b/stock_reserve_rule/models/stock_picking_type.py new file mode 100644 index 000000000..3ed437797 --- /dev/null +++ b/stock_reserve_rule/models/stock_picking_type.py @@ -0,0 +1,12 @@ +# Copyright 2020 Camptocamp (https://www.camptocamp.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl) + +from odoo import fields, models + + +class StockPickingType(models.Model): + _inherit = "stock.picking.type" + + reserve_rule_ids = fields.Many2many( + comodel_name="stock.reserve.rule", inverse_name="picking_type_ids", + ) diff --git a/stock_reserve_rule/models/stock_reserve_rule.py b/stock_reserve_rule/models/stock_reserve_rule.py index 0015eb5ee..fc781d0e7 100644 --- a/stock_reserve_rule/models/stock_reserve_rule.py +++ b/stock_reserve_rule/models/stock_reserve_rule.py @@ -46,9 +46,9 @@ class StockReserveRule(models.Model): required=True, help="Rule applied only in this location and sub-locations.", ) - picking_type_id = fields.Many2one( + picking_type_ids = fields.Many2many( comodel_name="stock.picking.type", - string="Operation Type", + string="Operation Types", help="Apply this rule only if the operation type of the move is the same.", ) @@ -82,9 +82,9 @@ class StockReserveRule(models.Model): ) def _is_rule_applicable(self, move): - if self.picking_type_id: + if self.picking_type_ids: picking_type = move.picking_type_id or move.picking_id.picking_type_id - if picking_type != self.picking_type_id: + if picking_type not in self.picking_type_ids: return False domain = safe_eval(self.rule_domain) or [] if domain: diff --git a/stock_reserve_rule/tests/test_reserve_rule.py b/stock_reserve_rule/tests/test_reserve_rule.py index aefdc4ae1..51d5c5395 100644 --- a/stock_reserve_rule/tests/test_reserve_rule.py +++ b/stock_reserve_rule/tests/test_reserve_rule.py @@ -274,12 +274,12 @@ class TestReserveRule(common.SavepointCase): self._create_rule( # different picking, should be excluded - {"picking_type_id": self.wh.int_type_id.id, "sequence": 1}, + {"picking_type_ids": [(6, 0, self.wh.int_type_id.ids)], "sequence": 1}, [{"location_id": self.loc_zone1.id, "sequence": 1}], ) self._create_rule( # same picking type as the move - {"picking_type_id": self.wh.pick_type_id.id, "sequence": 2}, + {"picking_type_ids": [(6, 0, self.wh.pick_type_id.ids)], "sequence": 2}, [ {"location_id": self.loc_zone2.id, "sequence": 1}, {"location_id": self.loc_zone3.id, "sequence": 2}, diff --git a/stock_reserve_rule/views/stock_reserve_rule_views.xml b/stock_reserve_rule/views/stock_reserve_rule_views.xml index 189771820..5f3b45fea 100644 --- a/stock_reserve_rule/views/stock_reserve_rule_views.xml +++ b/stock_reserve_rule/views/stock_reserve_rule_views.xml @@ -22,7 +22,11 @@ - + @@ -78,6 +82,7 @@ + +