refactor(shopfloor,jobs): consolidate operator UI into shopfloor

Removes the parallel OWL/controller stack I built in
fusion_plating_jobs (job_process_tree, job_plant_overview,
job_manager_dashboard, job_tablet, job_*.scss, plus parallel
controllers and action XML files). Refactors the existing
fusion_plating_shopfloor components in place to bind to
fp.job / fp.job.step instead of mrp.production / mrp.workorder.

End state:
- ONE operator UI module (shopfloor) instead of two parallel ones
- Existing token system (_fp_shopfloor_tokens.scss) reused as
  designed - no duplicate jobs tokens
- Existing /fp/shopfloor/* RPC URLs preserved (no integration
  breakage); workorder_id kwargs accepted as legacy aliases for
  step_id / job_id so older tablet clients keep working
- Existing visual designs preserved - only the data layer
  underneath changed
- Process Tree button on fp.job form now points at
  fusion_plating_shopfloor's fp_process_tree client action
- Bake Windows / First-Piece Gates / Bake Oven / Operator Queue
  models stay where they were
- legacy_menu_hide.xml trimmed: only the bridge_mrp Production
  Priorities entry remains; the 3 shopfloor menus (Manager Desk,
  Plant Overview, Tablet Station) are now visible (the canonical
  native consoles)

Manifests:
- fusion_plating_jobs 19.0.3.1.0 -> 19.0.4.0.0 (consolidation bump,
  no more bundled JS/SCSS, only job_scan controller retained)
- fusion_plating_shopfloor 19.0.14.4.0 -> 19.0.15.0.0 (asset bundle
  cache-bust + significant controller refactor)

Tests pass on entech: 0 failed, 0 errors of 41 tests.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsinghpal
2026-04-25 06:45:15 -04:00
parent 667654bd4e
commit 5df7d5e6cf
36 changed files with 891 additions and 5128 deletions

View File

@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!--
Adds a "Process Tree" button to the fp.job form header, launching
the fp_job_process_tree client action with job_id in context.
Adds a "Process Tree" button to the fp.job form header, calling
fp.job.action_open_process_tree (which launches the canonical
fp_process_tree shopfloor client action with job_id in context).
Hidden while the job is in draft (no recipe-derived steps yet).
-->

View File

@@ -1,36 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!--
Phase 6 — operator-facing client actions for the native job model.
Plant Overview kanban: columns = fp.work.centre, cards = fp.job.step
Manager Dashboard: list of in-flight fp.job rows, by state
Menu items live here (not in fusion_plating core's fp_jobs_menu.xml)
because the action records they reference are defined in this
module — and fusion_plating_jobs is loaded AFTER core, so the
XML ids don't exist yet at the time core's menu file is parsed.
-->
<record id="action_job_plant_overview" model="ir.actions.client">
<field name="name">Plant Overview</field>
<field name="tag">fp_job_plant_overview</field>
</record>
<record id="action_job_manager_dashboard" model="ir.actions.client">
<field name="name">Manager Dashboard</field>
<field name="tag">fp_job_manager_dashboard</field>
</record>
<menuitem id="menu_fp_jobs_plant_overview"
name="Plant Overview"
parent="fusion_plating.menu_fp_jobs_native_root"
action="action_job_plant_overview"
sequence="10"/>
<menuitem id="menu_fp_jobs_manager_dashboard"
name="Manager Dashboard"
parent="fusion_plating.menu_fp_jobs_native_root"
action="action_job_manager_dashboard"
sequence="15"
groups="fusion_plating.group_fusion_plating_supervisor"/>
</odoo>

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!--
fp_job_process_tree client action — opened from the "Process Tree"
button on the fp.job form (action_open_process_tree on fp.job)
with {'job_id': self.id} in context.
-->
<record id="action_job_process_tree" model="ir.actions.client">
<field name="name">Job Process Tree</field>
<field name="tag">fp_job_process_tree</field>
</record>
</odoo>

View File

@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!--
Tablet Station — touchscreen-friendly OWL client. Sequence 5
puts it at the top of the Jobs submenu (just below All Jobs at 20).
-->
<record id="action_job_tablet" model="ir.actions.client">
<field name="name">Tablet Station</field>
<field name="tag">fp_job_tablet</field>
</record>
<menuitem id="menu_fp_jobs_tablet"
name="Tablet Station"
parent="fusion_plating.menu_fp_jobs_native_root"
action="action_job_tablet"
sequence="5"/>
</odoo>

View File

@@ -1,26 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo noupdate="0">
<!-- Restrict legacy MO/WO-bound menus to the hidden 'Plating Legacy
Menus' group. The native fp.job menus (under Plating Jobs
(Native)) replace these. Original operations menus that don't
have a native equivalent yet are left alone.
<!-- After the shopfloor consolidation (2026-04-24) the shopfloor
operator UIs are the canonical native fp.job / fp.job.step
consoles. Only bridge_mrp's Production Priorities menu (still
bound to mrp.workorder) remains legacy.
List intentionally narrow: only menus that have a CLEAR fp.job
replacement get hidden. Operations like Recipes, Baths, Tanks,
etc. stay visible because there's no native replacement yet. -->
The group_fusion_plating_legacy_menus group is preserved so a
site that needs to bring legacy menus back can simply add a
user to the group. -->
<!-- fusion_plating_shopfloor: legacy Manager Desk, Plant Overview,
Tablet Station — replaced by Manager Dashboard (Native), Plant
Overview (Native), Tablet Station (Native) under
Plating Jobs (Native). -->
<!-- Reset group_ids on the 3 shopfloor menus that used to be
hidden — they are now the canonical UIs and should be visible
to all users (subject to the original groups= attribute on
each menuitem in fusion_plating_shopfloor/views/fp_menu.xml). -->
<record id="fusion_plating_shopfloor.menu_fp_shopfloor_manager" model="ir.ui.menu">
<field name="group_ids" eval="[(6, 0, [ref('fusion_plating_jobs.group_fusion_plating_legacy_menus')])]"/>
<field name="group_ids" eval="[(6, 0, [ref('fusion_plating.group_fusion_plating_manager')])]"/>
</record>
<record id="fusion_plating_shopfloor.menu_fp_shopfloor_plant_overview" model="ir.ui.menu">
<field name="group_ids" eval="[(6, 0, [ref('fusion_plating_jobs.group_fusion_plating_legacy_menus')])]"/>
<field name="group_ids" eval="[(6, 0, [])]"/>
</record>
<record id="fusion_plating_shopfloor.menu_fp_shopfloor_tablet" model="ir.ui.menu">
<field name="group_ids" eval="[(6, 0, [ref('fusion_plating_jobs.group_fusion_plating_legacy_menus')])]"/>
<field name="group_ids" eval="[(6, 0, [])]"/>
</record>
<!-- bridge_mrp: Production Priorities is mrp.workorder ordering UI;