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:
@@ -805,7 +805,7 @@ class SaleOrderLine(models.Model):
|
|||||||
# Idempotency: clear prior masking/bake override rows on this job
|
# Idempotency: clear prior masking/bake override rows on this job
|
||||||
prior = Override.search([
|
prior = Override.search([
|
||||||
('job_id', '=', job.id),
|
('job_id', '=', job.id),
|
||||||
('node_id.default_kind', 'in', ('masking', 'de_masking', 'baking')),
|
('node_id.default_kind', 'in', ('mask', 'demask', 'bake')),
|
||||||
])
|
])
|
||||||
if prior:
|
if prior:
|
||||||
prior.unlink()
|
prior.unlink()
|
||||||
@@ -814,7 +814,7 @@ class SaleOrderLine(models.Model):
|
|||||||
|
|
||||||
# 1. Masking — opt out of masking + de_masking AS A PAIR
|
# 1. Masking — opt out of masking + de_masking AS A PAIR
|
||||||
if not self.x_fc_masking_enabled:
|
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:
|
for node in nodes:
|
||||||
Override.create({
|
Override.create({
|
||||||
'job_id': job.id,
|
'job_id': job.id,
|
||||||
@@ -826,7 +826,7 @@ class SaleOrderLine(models.Model):
|
|||||||
|
|
||||||
# 2. Bake — empty = opt out; non-empty = keep + write step.instructions
|
# 2. Bake — empty = opt out; non-empty = keep + write step.instructions
|
||||||
bake_text = (self.x_fc_bake_instructions or '').strip()
|
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:
|
if not bake_text:
|
||||||
for node in bake_nodes:
|
for node in bake_nodes:
|
||||||
Override.create({
|
Override.create({
|
||||||
@@ -841,7 +841,7 @@ class SaleOrderLine(models.Model):
|
|||||||
# helper is called twice — first call (before action_confirm)
|
# helper is called twice — first call (before action_confirm)
|
||||||
# finds no steps and skips; second call (after step gen) lands.
|
# finds no steps and skips; second call (after step gen) lands.
|
||||||
bake_steps = job.step_ids.filtered(
|
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:
|
if bake_steps:
|
||||||
bake_steps.sudo().write({'instructions': bake_text})
|
bake_steps.sudo().write({'instructions': bake_text})
|
||||||
|
|||||||
Reference in New Issue
Block a user