diff --git a/stock_release_channel/models/res_partner.py b/stock_release_channel/models/res_partner.py index 5c2cd579a9..cd3f114ed6 100644 --- a/stock_release_channel/models/res_partner.py +++ b/stock_release_channel/models/res_partner.py @@ -14,4 +14,5 @@ class ResPartner(models.Model): column1="partner_id", column2="channel_id", string="Release Channels", + domain="company_id and [('company_id', '=', company_id)] or []", ) diff --git a/stock_release_channel/models/stock_picking.py b/stock_release_channel/models/stock_picking.py index c3eb4390b5..516c99b954 100644 --- a/stock_release_channel/models/stock_picking.py +++ b/stock_release_channel/models/stock_picking.py @@ -115,6 +115,7 @@ def _get_release_channel_possible_candidate_domain_channel(self): def _get_release_channel_possible_candidate_domain_picking(self): return [ + ("company_id", "=", self.company_id.id), "|", ("picking_type_ids", "=", False), ("picking_type_ids", "in", self.picking_type_id.ids), diff --git a/stock_release_channel/models/stock_release_channel.py b/stock_release_channel/models/stock_release_channel.py index d5fa23c9ca..fd96c1e064 100644 --- a/stock_release_channel/models/stock_release_channel.py +++ b/stock_release_channel/models/stock_release_channel.py @@ -41,11 +41,19 @@ class StockReleaseChannel(models.Model): release_forbidden = fields.Boolean(string="Forbid to release this channel") sequence = fields.Integer(default=lambda self: self._default_sequence()) color = fields.Integer() + company_id = fields.Many2one( + string="Company", + comodel_name="res.company", + required=True, + default=lambda s: s.env.company.id, + index=True, + ) warehouse_id = fields.Many2one( "stock.warehouse", string="Warehouse", index=True, help="Warehouse for which this channel is relevant", + check_company=True, ) picking_type_ids = fields.Many2many( "stock.picking.type", @@ -54,8 +62,9 @@ class StockReleaseChannel(models.Model): "picking_type_id", string="Operation Types", domain="warehouse_id" - " and [('warehouse_id', '=', warehouse_id), ('code', '=', 'outgoing')]" - " or [('code', '=', 'outgoing')]", + " and [('warehouse_id', '=', warehouse_id), ('code', '=', 'outgoing'), " + "('company_id', 'in', (company_id, False))]" + " or [('code', '=', 'outgoing'), ('company_id', 'in', (company_id, False))]", ) rule_domain = fields.Char( string="Domain", @@ -91,6 +100,7 @@ class StockReleaseChannel(models.Model): string="Transfers", comodel_name="stock.picking", inverse_name="release_channel_id", + check_company=True, ) # beware not to store any value which can be changed by concurrent @@ -219,6 +229,7 @@ class StockReleaseChannel(models.Model): column2="partner_id", string="Partners", context={"active_test": False}, + check_company=True, ) show_last_picking_done = fields.Boolean( compute="_compute_show_last_picking_done", diff --git a/stock_release_channel/tests/common.py b/stock_release_channel/tests/common.py index 4561f3f3b2..3f74ad743e 100644 --- a/stock_release_channel/tests/common.py +++ b/stock_release_channel/tests/common.py @@ -16,6 +16,7 @@ class ReleaseChannelCase(common.TransactionCase): def setUpClass(cls): super().setUpClass() cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + cls.company2 = cls.env.ref("stock.res_company_1") cls.customer_location = cls.env.ref("stock.stock_location_customers") cls.default_channel = cls.env.ref( "stock_release_channel.stock_release_channel_default" diff --git a/stock_release_channel/tests/test_release_channel.py b/stock_release_channel/tests/test_release_channel.py index 9af57b47d4..50aa4a42c9 100644 --- a/stock_release_channel/tests/test_release_channel.py +++ b/stock_release_channel/tests/test_release_channel.py @@ -46,6 +46,18 @@ def test_assign_channel_domain_and_code(self): ) self._test_assign_channels(channel) + def test_assign_channel_invalid_company(self): + # Create a channel for high priority moves but for another company + self._create_channel( + name="Test Domain", + sequence=1, + rule_domain=[("priority", "=", "1")], + company_id=self.company2.id, + ) + # This move with high priority is then put in a transfer belonging to + # the default channel (default company) + self._test_assign_channels(self.default_channel) + def test_invalid_code(self): with self.assertRaises(exceptions.ValidationError): self._create_channel( diff --git a/stock_release_channel/views/stock_release_channel_views.xml b/stock_release_channel/views/stock_release_channel_views.xml index c081644d4a..9468e88e95 100644 --- a/stock_release_channel/views/stock_release_channel_views.xml +++ b/stock_release_channel/views/stock_release_channel_views.xml @@ -80,6 +80,14 @@