From f5cee252997b1d8691808f978738a7893a45d493 Mon Sep 17 00:00:00 2001 From: gsinghpal Date: Tue, 26 May 2026 23:58:09 -0400 Subject: [PATCH] =?UTF-8?q?fix(configurator):=20override=20helper=20kind?= =?UTF-8?q?=20names=20=E2=80=94=20mask/demask/bake=20(not=20masking/de=5Fm?= =?UTF-8?q?asking/baking)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Root cause: spec + plan assumed fusion.plating.process.node.default_kind values for masking/baking nodes were 'masking', 'de_masking', 'baking'. Actual values per inspection of WO-30060 / recipe ENP-ALUM-BASIC: - 'mask' (Masking step) - 'demask' (De-Masking step) - 'bake' (Oven baking / Oven bake post de-rack) So _fp_apply_express_overrides_to_job was searching for nodes that don't exist → no override rows created → step generation included masking + bake even when the SO line had x_fc_masking_enabled=False and x_fc_bake_instructions=empty. Fixed all 4 occurrences in _fp_apply_express_overrides_to_job: - pre-deletion search uses ('mask','demask','bake') - masking opt-out walker calls ('mask','demask') - bake opt-out walker calls ('bake',) - bake step instructions filter uses default_kind == 'bake' Manually cleaned up DOD-00150 / WO-30060: - Deleted the 4 masking/bake steps that were wrongly created - Created 4 override rows so any re-generation respects the opt-outs Future orders with masking off / bake empty will correctly skip these recipe nodes at step-generation time. --- .../fusion_plating_configurator/models/sale_order_line.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fusion_plating/fusion_plating_configurator/models/sale_order_line.py b/fusion_plating/fusion_plating_configurator/models/sale_order_line.py index dc775386..76362d89 100644 --- a/fusion_plating/fusion_plating_configurator/models/sale_order_line.py +++ b/fusion_plating/fusion_plating_configurator/models/sale_order_line.py @@ -805,7 +805,7 @@ class SaleOrderLine(models.Model): # Idempotency: clear prior masking/bake override rows on this job prior = Override.search([ ('job_id', '=', job.id), - ('node_id.default_kind', 'in', ('masking', 'de_masking', 'baking')), + ('node_id.default_kind', 'in', ('mask', 'demask', 'bake')), ]) if prior: prior.unlink() @@ -814,7 +814,7 @@ class SaleOrderLine(models.Model): # 1. Masking — opt out of masking + de_masking AS A PAIR if not self.x_fc_masking_enabled: - nodes = recipe._fp_all_nodes_with_kind(('masking', 'de_masking')) + nodes = recipe._fp_all_nodes_with_kind(('mask', 'demask')) for node in nodes: Override.create({ 'job_id': job.id, @@ -826,7 +826,7 @@ class SaleOrderLine(models.Model): # 2. Bake — empty = opt out; non-empty = keep + write step.instructions bake_text = (self.x_fc_bake_instructions or '').strip() - bake_nodes = recipe._fp_all_nodes_with_kind(('baking',)) + bake_nodes = recipe._fp_all_nodes_with_kind(('bake',)) if not bake_text: for node in bake_nodes: Override.create({ @@ -841,7 +841,7 @@ class SaleOrderLine(models.Model): # helper is called twice — first call (before action_confirm) # finds no steps and skips; second call (after step gen) lands. bake_steps = job.step_ids.filtered( - lambda s: s.recipe_node_id.default_kind == 'baking' + lambda s: s.recipe_node_id.default_kind == 'bake' ) if bake_steps: bake_steps.sudo().write({'instructions': bake_text})