ui+fix(jobs): compact row buttons + remove racking inspection gate
UI: secondary row buttons in the embedded step list are now icon-only with tooltips (Pause / Complete 1 → Next / Record / Skip / Move…). Saves ~70% horizontal space. "Finish & Next" stays text+icon as the primary action. Fix: removed the racking-inspection gate from button_finish. Racking is now a recipe step (not a separate inspection workflow), so the "Racking inspection for ... is Inspecting — must be Done" error no longer fires. _fp_check_racking_inspection_complete() helper is preserved for diagnostics but no longer called from the finish path. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
# License OPL-1 (Odoo Proprietary License v1.0)
|
# License OPL-1 (Odoo Proprietary License v1.0)
|
||||||
{
|
{
|
||||||
'name': 'Fusion Plating — Native Jobs',
|
'name': 'Fusion Plating — Native Jobs',
|
||||||
'version': '19.0.8.20.7',
|
'version': '19.0.8.20.8',
|
||||||
'category': 'Manufacturing/Plating',
|
'category': 'Manufacturing/Plating',
|
||||||
'summary': 'Native plating job model — replaces mrp.production / mrp.workorder bridge.',
|
'summary': 'Native plating job model — replaces mrp.production / mrp.workorder bridge.',
|
||||||
'author': 'Nexa Systems Inc.',
|
'author': 'Nexa Systems Inc.',
|
||||||
|
|||||||
@@ -910,8 +910,10 @@ class FpJobStep(models.Model):
|
|||||||
def button_finish(self):
|
def button_finish(self):
|
||||||
# Policy B — block until QA-005 complete (when customer requires it).
|
# Policy B — block until QA-005 complete (when customer requires it).
|
||||||
self._fp_check_contract_review_complete()
|
self._fp_check_contract_review_complete()
|
||||||
# Sub 8 — block until racking inspection is Done / Flagged.
|
# NOTE: racking inspection gate removed — racking is now a recipe
|
||||||
self._fp_check_racking_inspection_complete()
|
# step, not a separate inspection workflow. _fp_check_racking_
|
||||||
|
# inspection_complete() is kept as a helper for diagnostics but
|
||||||
|
# no longer enforced from button_finish.
|
||||||
result = super().button_finish()
|
result = super().button_finish()
|
||||||
for step in self:
|
for step in self:
|
||||||
if step.state == 'done':
|
if step.state == 'done':
|
||||||
|
|||||||
@@ -150,7 +150,7 @@
|
|||||||
class="btn-link text-success"
|
class="btn-link text-success"
|
||||||
invisible="state not in ('ready', 'pending')"/>
|
invisible="state not in ('ready', 'pending')"/>
|
||||||
<button name="button_resume" type="object"
|
<button name="button_resume" type="object"
|
||||||
string="Resume" icon="fa-play-circle"
|
title="Resume" icon="fa-play-circle"
|
||||||
class="btn-link text-success"
|
class="btn-link text-success"
|
||||||
invisible="state != 'paused'"/>
|
invisible="state != 'paused'"/>
|
||||||
<button name="action_finish_and_advance" type="object"
|
<button name="action_finish_and_advance" type="object"
|
||||||
@@ -164,7 +164,7 @@
|
|||||||
measurements without finishing the step;
|
measurements without finishing the step;
|
||||||
Skip + Move (cross-station) tucked together. -->
|
Skip + Move (cross-station) tucked together. -->
|
||||||
<button name="button_pause" type="object"
|
<button name="button_pause" type="object"
|
||||||
string="Pause" icon="fa-pause"
|
title="Pause" icon="fa-pause"
|
||||||
class="btn-link text-warning"
|
class="btn-link text-warning"
|
||||||
invisible="state != 'in_progress'"/>
|
invisible="state != 'in_progress'"/>
|
||||||
<!-- Streaming flow: complete 1 part at a time,
|
<!-- Streaming flow: complete 1 part at a time,
|
||||||
@@ -172,19 +172,19 @@
|
|||||||
parked or the step isn't actively running.
|
parked or the step isn't actively running.
|
||||||
Auto-finishes when qty_at_step drains to 0. -->
|
Auto-finishes when qty_at_step drains to 0. -->
|
||||||
<button name="action_complete_one_to_next" type="object"
|
<button name="action_complete_one_to_next" type="object"
|
||||||
string="Complete 1 → Next" icon="fa-forward"
|
title="Complete 1 → Next (streaming flow)" icon="fa-forward"
|
||||||
class="btn-link text-success"
|
class="btn-link text-success"
|
||||||
invisible="state != 'in_progress' or qty_at_step < 1"/>
|
invisible="state != 'in_progress' or qty_at_step < 1"/>
|
||||||
<button name="action_open_input_wizard" type="object"
|
<button name="action_open_input_wizard" type="object"
|
||||||
string="Record" icon="fa-pencil-square-o"
|
title="Record Inputs" icon="fa-pencil-square-o"
|
||||||
class="btn-link"
|
class="btn-link"
|
||||||
invisible="state in ('cancelled', 'skipped')"/>
|
invisible="state in ('cancelled', 'skipped')"/>
|
||||||
<button name="button_skip" type="object"
|
<button name="button_skip" type="object"
|
||||||
string="Skip" icon="fa-step-forward"
|
title="Skip step" icon="fa-step-forward"
|
||||||
class="btn-link text-muted"
|
class="btn-link text-muted"
|
||||||
invisible="state not in ('pending', 'ready')"/>
|
invisible="state not in ('pending', 'ready')"/>
|
||||||
<button name="action_open_move_wizard" type="object"
|
<button name="action_open_move_wizard" type="object"
|
||||||
string="Move…" icon="fa-exchange"
|
title="Move… (custom qty / destination)" icon="fa-exchange"
|
||||||
class="btn-link text-muted"
|
class="btn-link text-muted"
|
||||||
invisible="state in ('done', 'cancelled', 'skipped', 'pending')"/>
|
invisible="state in ('done', 'cancelled', 'skipped', 'pending')"/>
|
||||||
</list>
|
</list>
|
||||||
|
|||||||
Reference in New Issue
Block a user