fix(configurator): override helper kind names — mask/demask/bake (not masking/de_masking/baking)

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.
This commit is contained in:
gsinghpal
2026-05-26 23:58:09 -04:00
parent 6351aa6054
commit f5cee25299

View File

@@ -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})