diff --git a/mrp_sale_info/models/__init__.py b/mrp_sale_info/models/__init__.py index deb13b1e9..4bf1afc2d 100644 --- a/mrp_sale_info/models/__init__.py +++ b/mrp_sale_info/models/__init__.py @@ -4,3 +4,4 @@ from . import mrp_production from . import mrp_workorder from . import stock_rule from . import sale_order +from . import sale_order_line diff --git a/mrp_sale_info/models/mrp_production.py b/mrp_sale_info/models/mrp_production.py index 57c0f7d1c..6d802d74c 100644 --- a/mrp_sale_info/models/mrp_production.py +++ b/mrp_sale_info/models/mrp_production.py @@ -12,6 +12,7 @@ class MrpProduction(models.Model): source_procurement_group_id = fields.Many2one( comodel_name="procurement.group", readonly=True, + index=True, ) sale_id = fields.Many2one( comodel_name="sale.order", @@ -19,6 +20,7 @@ class MrpProduction(models.Model): readonly=True, store=True, related="source_procurement_group_id.sale_id", + index=True, ) partner_id = fields.Many2one( comodel_name="res.partner", @@ -32,3 +34,10 @@ class MrpProduction(models.Model): client_order_ref = fields.Char( related="sale_id.client_order_ref", string="Customer Reference", store=True ) + sale_line_ids = fields.Many2many( + comodel_name="sale.order.line", + relation="sale_line_production_rel", + column1="production_id", + column2="line_id", + string="Sale order line", + ) diff --git a/mrp_sale_info/models/sale_order_line.py b/mrp_sale_info/models/sale_order_line.py new file mode 100644 index 000000000..24c43b393 --- /dev/null +++ b/mrp_sale_info/models/sale_order_line.py @@ -0,0 +1,17 @@ +# Copyright 2021 Akretion (http://www.akretion.com). +# @author BenoƮt GUILLOT +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class SaleOrderLine(models.Model): + _inherit = "sale.order.line" + + production_ids = fields.Many2many( + comodel_name="mrp.production", + relation="sale_line_production_rel", + column1="line_id", + column2="production_id", + string="Manufacturing orders", + ) diff --git a/mrp_sale_info/models/stock_rule.py b/mrp_sale_info/models/stock_rule.py index 207cd0ade..db95dc52c 100644 --- a/mrp_sale_info/models/stock_rule.py +++ b/mrp_sale_info/models/stock_rule.py @@ -34,4 +34,10 @@ class StockRule(models.Model): res["source_procurement_group_id"] = ( values.get("group_id").id if values.get("group_id", False) else False ) + moves = values.get("move_dest_ids") + line_ids = moves.sale_line_id + while moves.move_dest_ids: + moves = moves.move_dest_ids + line_ids |= moves.sale_line_id + res["sale_line_ids"] = line_ids and [(4, x.id) for x in line_ids] or False return res diff --git a/mrp_sale_info/tests/test_mrp_sale_info.py b/mrp_sale_info/tests/test_mrp_sale_info.py index 62ca10ab7..a1c431ecd 100644 --- a/mrp_sale_info/tests/test_mrp_sale_info.py +++ b/mrp_sale_info/tests/test_mrp_sale_info.py @@ -49,6 +49,7 @@ class TestMrpSaleInfo(common.SavepointCase): prev_productions = self.env["mrp.production"].search([]) self.sale_order.action_confirm() production = self.env["mrp.production"].search([]) - prev_productions + self.assertEqual(production.sale_line_ids, self.sale_order.order_line) self.assertEqual(production.sale_id, self.sale_order) self.assertEqual(production.partner_id, self.partner) self.assertEqual(production.client_order_ref, self.sale_order.client_order_ref)