This commit is contained in:
gsinghpal
2026-04-27 00:11:18 -04:00
parent d9f58b9851
commit f08f328688
116 changed files with 9891 additions and 359 deletions

View File

@@ -248,6 +248,9 @@ class FpJob(models.Model):
"Job %s is in state '%s' - only draft jobs can be confirmed."
) % (job.name, job.state))
job.state = 'confirmed'
# Step auto-promote happens in the fusion_plating_jobs override
# AFTER _generate_steps_from_recipe runs — at this point step_ids
# is empty for any newly-confirmed job.
return True
def action_cancel(self):

View File

@@ -132,6 +132,12 @@ class FpJobStep(models.Model):
related='recipe_node_id.customer_visible',
store=True,
)
requires_predecessor_done = fields.Boolean(
related='recipe_node_id.requires_predecessor_done',
store=True,
help='If True, button_start blocks until every earlier-sequence '
'step in this job is done/skipped/cancelled.',
)
# ------------------------------------------------------------------
# Cost rollup (Task 1.6)

View File

@@ -170,6 +170,16 @@ class FpProcessNode(models.Model):
default=False,
help='Quality hold point — requires operator sign-off.',
)
requires_predecessor_done = fields.Boolean(
string='Requires Predecessor Done',
default=False,
help='If checked, this step cannot start until ALL earlier-'
'sequence steps in the job are done / skipped / cancelled. '
'Use for serial-required operations (e.g. Plating must '
'follow Acid Etch with no time gap — passivation layer '
'forms in seconds). Leaving unchecked allows parallel '
'work across tanks (the default).',
)
opt_in_out = fields.Selection(
[
('disabled', 'Required'),