Files
Odoo-Modules/fusion_plating/fusion_plating_safety/views/fp_menu.xml
gsinghpal 36cd4341a7 feat(plating-menu): Layer 1+2 — explicit groups on top-level menus + submenus
Phase D Tasks D1-D4 of permissions overhaul. Adds explicit groups=
attributes to:
- 9 top-level Plating menus (matrix per spec Section 2.E)
- Quality submenus: Audits, Customer Specs, AVL → QM-only
- Compliance hub child submenus (CGP, General, Safety, Aerospace,
  Nuclear) → QM-only
- Operations submenus: Maintenance, Move Log, Labor History → Shop
  Manager+; Replenishment Suggestions → Manager+

Replaces fragile inheritance + action-ACL-based visibility with
explicit per-menu gates. Now every role's menu tree is deterministic.

Also adds fusion_plating/tests/test_menu_visibility.py — per-role
matrix tests using ir.ui.menu.search_count with the test user.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 01:35:11 -04:00

73 lines
2.4 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2026 Nexa Systems Inc.
License OPL-1 (Odoo Proprietary License v1.0)
Part of the Fusion Plating product family.
-->
<odoo>
<!-- Phase 1 — re-parented under Plating → Compliance hub. -->
<!-- Phase D (perms v2) — QM-only under compliance hub. -->
<menuitem id="menu_fp_safety_root"
name="Safety / WHMIS"
parent="fusion_plating.menu_fp_compliance_hub"
sequence="20"
groups="fusion_plating.group_fp_quality_manager"/>
<menuitem id="menu_fp_safety_sds"
name="SDS Library"
parent="menu_fp_safety_root"
action="action_fp_sds"
sequence="10"/>
<menuitem id="menu_fp_safety_training"
name="Training Records"
parent="menu_fp_safety_root"
action="action_fp_training_record"
sequence="20"/>
<menuitem id="menu_fp_safety_exposure"
name="Exposure Monitoring"
parent="menu_fp_safety_root"
action="action_fp_exposure_monitoring"
sequence="30"/>
<menuitem id="menu_fp_safety_jhsc"
name="H&amp;S Committee (JHSC)"
parent="menu_fp_safety_root"
action="action_fp_jhsc"
sequence="40"/>
<menuitem id="menu_fp_safety_jhsc_meetings"
name="H&amp;S Committee Meetings"
parent="menu_fp_safety_root"
action="action_fp_jhsc_meeting"
sequence="45"/>
<menuitem id="menu_fp_safety_incidents"
name="Incident Register"
parent="menu_fp_safety_root"
action="action_fp_incident"
sequence="50"/>
<menuitem id="menu_fp_safety_ppe"
name="PPE Issuance"
parent="menu_fp_safety_root"
action="action_fp_ppe_issuance"
sequence="60"/>
<!-- Phase 2 — Training Types → Workforce; Chemicals → Materials & Tanks -->
<menuitem id="menu_fp_safety_training_types"
name="Training Types"
parent="fusion_plating.menu_fp_config_workforce"
action="action_fp_training_type"
sequence="30"/>
<menuitem id="menu_fp_safety_chemicals"
name="Chemicals"
parent="fusion_plating.menu_fp_config_materials_tanks"
action="action_fp_chemical"
sequence="40"/>
</odoo>