From 842efd828cea5844e51eaf71f311d54e1c4eb013 Mon Sep 17 00:00:00 2001 From: gsinghpal Date: Sun, 19 Apr 2026 21:12:34 -0400 Subject: [PATCH] =?UTF-8?q?feat(configurator):=20Phase=20D=20batch=202=20?= =?UTF-8?q?=E2=80=94=20active=20WOs=20stat=20button=20on=20SO=20form?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit D3 first half: x_fc_workorder_count computes live count of active MRP work orders linked to this SO (via mo.origin = so.name). Adds a 'Active WOs' smart button next to the existing PO / RFQ buttons on the sale.order form. Clicking opens a filtered mrp.workorder list grouped by MO. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../models/sale_order.py | 27 +++++++++++++++++++ .../views/sale_order_views.xml | 8 ++++++ 2 files changed, 35 insertions(+) diff --git a/fusion_plating/fusion_plating_configurator/models/sale_order.py b/fusion_plating/fusion_plating_configurator/models/sale_order.py index c1079122..988a54db 100644 --- a/fusion_plating/fusion_plating_configurator/models/sale_order.py +++ b/fusion_plating/fusion_plating_configurator/models/sale_order.py @@ -114,6 +114,33 @@ class SaleOrder(models.Model): compute='_compute_margin', ) + x_fc_workorder_count = fields.Integer( + string='Active WOs', + compute='_compute_workorder_count', + ) + + def _compute_workorder_count(self): + WO = self.env['mrp.workorder'].sudo() + for rec in self: + if not rec.name: + rec.x_fc_workorder_count = 0 + continue + rec.x_fc_workorder_count = WO.search_count([ + ('production_id.origin', '=', rec.name), + ('state', 'not in', ('done', 'cancel')), + ]) + + def action_view_workorders(self): + self.ensure_one() + return { + 'type': 'ir.actions.act_window', + 'name': 'Work Orders', + 'res_model': 'mrp.workorder', + 'view_mode': 'list,form', + 'domain': [('production_id.origin', '=', self.name)], + 'context': {'search_default_group_production_id': 1}, + } + @api.depends('commitment_date') def _compute_deadline_countdown(self): from datetime import datetime diff --git a/fusion_plating/fusion_plating_configurator/views/sale_order_views.xml b/fusion_plating/fusion_plating_configurator/views/sale_order_views.xml index 268bf5fd..271e5cde 100644 --- a/fusion_plating/fusion_plating_configurator/views/sale_order_views.xml +++ b/fusion_plating/fusion_plating_configurator/views/sale_order_views.xml @@ -33,6 +33,14 @@ PO +