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 @@
+
+