diff --git a/addons/sale/controllers/portal.py b/addons/sale/controllers/portal.py index 6b2639e38a2..acedaadf124 100644 --- a/addons/sale/controllers/portal.py +++ b/addons/sale/controllers/portal.py @@ -177,6 +177,7 @@ class CustomerPortal(portal.CustomerPortal): 'partner_id': order_sudo.partner_id.id, 'report_type': 'html', 'action': order_sudo._get_portal_return_action(), + **order_sudo._get_additional_order_page_values(), } if order_sudo.company_id: values['res_company'] = order_sudo.company_id diff --git a/addons/sale/models/sale_order.py b/addons/sale/models/sale_order.py index c6c73474632..e2a146fdc7a 100644 --- a/addons/sale/models/sale_order.py +++ b/addons/sale/models/sale_order.py @@ -1103,6 +1103,10 @@ class SaleOrder(models.Model): self.ensure_one() return self.env.ref('sale.action_quotations_with_onboarding') + def _get_additional_order_page_values(self): + """ Return a dict of additional order page values for a sale.order.""" + return {} + @api.model def _prepare_down_payment_section_line(self, **optional_values): """ diff --git a/addons/sale_mrp/__manifest__.py b/addons/sale_mrp/__manifest__.py index 97010c28ab2..cca88c2c730 100644 --- a/addons/sale_mrp/__manifest__.py +++ b/addons/sale_mrp/__manifest__.py @@ -17,7 +17,8 @@ from sales order. It adds sales name and sales Reference on production order. 'data': [ 'security/ir.model.access.csv', 'views/mrp_production_views.xml', - 'views/sale_order_views.xml' + 'views/sale_order_views.xml', + 'views/sale_portal_templates.xml' ], 'demo': [], 'installable': True, diff --git a/addons/sale_mrp/models/sale.py b/addons/sale_mrp/models/sale.py index f277c99e7cd..18f1cdd9c9d 100644 --- a/addons/sale_mrp/models/sale.py +++ b/addons/sale_mrp/models/sale.py @@ -9,43 +9,49 @@ class SaleOrder(models.Model): mrp_production_count = fields.Integer( "Count of MO generated", - compute='_compute_mrp_production_count', + compute='_compute_mrp_production_ids', + groups='mrp.group_mrp_user') + mrp_production_ids = fields.Many2many( + 'mrp.production', + compute='_compute_mrp_production_ids', + string='Manufacturing orders associated with this sales order.', groups='mrp.group_mrp_user') @api.depends('procurement_group_id.stock_move_ids.created_production_id.procurement_group_id.mrp_production_ids') - def _compute_mrp_production_count(self): + def _compute_mrp_production_ids(self): data = self.env['procurement.group'].read_group([('sale_id', 'in', self.ids)], ['ids:array_agg(id)'], ['sale_id']) - mrp_count = dict() + mrp_productions = dict() for item in data: procurement_groups = self.env['procurement.group'].browse(item['ids']) - mrp_count[item['sale_id'][0]] = len( - set(procurement_groups.stock_move_ids.created_production_id.procurement_group_id.mrp_production_ids.ids) | - set(procurement_groups.mrp_production_ids.ids)) + mrp_productions[item['sale_id'][0]] = procurement_groups.stock_move_ids.created_production_id.procurement_group_id.mrp_production_ids | procurement_groups.mrp_production_ids for sale in self: - sale.mrp_production_count = mrp_count.get(sale.id) + mrp_production_ids = mrp_productions.get(sale.id, self.env['mrp.production']) + sale.mrp_production_count = len(mrp_production_ids) + sale.mrp_production_ids = mrp_production_ids def action_view_mrp_production(self): self.ensure_one() - procurement_groups = self.env['procurement.group'].search([('sale_id', 'in', self.ids)]) - mrp_production_ids = set(procurement_groups.stock_move_ids.created_production_id.procurement_group_id.mrp_production_ids.ids) |\ - set(procurement_groups.mrp_production_ids.ids) action = { 'res_model': 'mrp.production', 'type': 'ir.actions.act_window', } - if len(mrp_production_ids) == 1: + if len(self.mrp_production_ids) == 1: action.update({ 'view_mode': 'form', - 'res_id': mrp_production_ids.pop(), + 'res_id': self.mrp_production_ids.id, }) else: action.update({ 'name': _("Manufacturing Orders Generated by %s", self.name), - 'domain': [('id', 'in', list(mrp_production_ids))], + 'domain': [('id', 'in', self.mrp_production_ids.ids)], 'view_mode': 'tree,form', }) return action + def _get_additional_order_page_values(self): + rendering_context_values = super()._get_additional_order_page_values() + rendering_context_values['mrp_production_ids'] = self.mrp_production_ids + return rendering_context_values class SaleOrderLine(models.Model): _inherit = 'sale.order.line' diff --git a/addons/sale_mrp/views/sale_portal_templates.xml b/addons/sale_mrp/views/sale_portal_templates.xml new file mode 100644 index 00000000000..c860b87a589 --- /dev/null +++ b/addons/sale_mrp/views/sale_portal_templates.xml @@ -0,0 +1,29 @@ + + + +