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>
174 lines
5.8 KiB
XML
174 lines
5.8 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.
|
|
|
|
Top-level menu structure for the Plating app. Order in this file
|
|
matters — Odoo's data loader is strictly sequential, so every
|
|
parent menu must be defined BEFORE any child that references it
|
|
by xmlid. Sections in declaration order:
|
|
1. Root (menu_fp_root) + landing-action wiring
|
|
2. Configuration parent (menu_fp_config) + the 7 Phase-2 buckets
|
|
3. Compliance hub
|
|
4. Operations parent
|
|
5. All children of all three roots above (in any order)
|
|
-->
|
|
<odoo>
|
|
|
|
<!-- ===== 1. ROOT APP MENU ===== -->
|
|
<menuitem id="menu_fp_root"
|
|
name="Plating"
|
|
sequence="46"
|
|
web_icon="fusion_plating,static/description/icon.png"
|
|
action="action_fp_resolve_plating_landing"
|
|
groups="fusion_plating.group_fp_technician,fusion_plating.group_fp_sales_rep"/>
|
|
|
|
<!-- ===== 2. CONFIGURATION + 7 Phase-2 buckets ===== -->
|
|
<menuitem id="menu_fp_config"
|
|
name="Configuration"
|
|
parent="menu_fp_root"
|
|
sequence="90"
|
|
groups="fusion_plating.group_fp_manager"/>
|
|
|
|
<menuitem id="menu_fp_config_shop_setup"
|
|
name="Shop Setup"
|
|
parent="menu_fp_config"
|
|
sequence="10"/>
|
|
|
|
<menuitem id="menu_fp_config_recipes_steps"
|
|
name="Recipes & Steps"
|
|
parent="menu_fp_config"
|
|
sequence="20"/>
|
|
|
|
<menuitem id="menu_fp_config_materials_tanks"
|
|
name="Materials & Tanks"
|
|
parent="menu_fp_config"
|
|
sequence="30"/>
|
|
|
|
<menuitem id="menu_fp_config_workforce"
|
|
name="Workforce"
|
|
parent="menu_fp_config"
|
|
sequence="40"/>
|
|
|
|
<menuitem id="menu_fp_config_quality_docs"
|
|
name="Quality & Documents"
|
|
parent="menu_fp_config"
|
|
sequence="50"/>
|
|
|
|
<menuitem id="menu_fp_config_pricing_billing"
|
|
name="Pricing & Billing"
|
|
parent="menu_fp_config"
|
|
sequence="60"/>
|
|
|
|
<menuitem id="menu_fp_config_reference_data"
|
|
name="Reference Data"
|
|
parent="menu_fp_config"
|
|
sequence="70"/>
|
|
|
|
<!-- ===== 3. COMPLIANCE HUB (Phase 1) ===== -->
|
|
<menuitem id="menu_fp_compliance_hub"
|
|
name="Compliance"
|
|
parent="menu_fp_root"
|
|
sequence="50"
|
|
groups="fusion_plating.group_fp_quality_manager"/>
|
|
|
|
<!-- ===== 4. OPERATIONS ===== -->
|
|
<menuitem id="menu_fp_operations"
|
|
name="Operations"
|
|
parent="menu_fp_root"
|
|
sequence="18"
|
|
groups="fusion_plating.group_fp_technician"/>
|
|
|
|
<!-- ===== 5. CHILD MENUS ===== -->
|
|
|
|
<!-- Operations children -->
|
|
<menuitem id="menu_fp_process_recipes"
|
|
name="Process Recipes"
|
|
parent="menu_fp_operations"
|
|
action="action_fp_process_recipe"
|
|
sequence="5"/>
|
|
|
|
<menuitem id="menu_fp_baths"
|
|
name="Baths"
|
|
parent="menu_fp_operations"
|
|
action="action_fp_bath"
|
|
sequence="10"/>
|
|
|
|
<menuitem id="menu_fp_bath_logs"
|
|
name="Chemistry Logs"
|
|
parent="menu_fp_operations"
|
|
action="action_fp_bath_log"
|
|
sequence="20"/>
|
|
|
|
<menuitem id="menu_fp_tanks"
|
|
name="Tanks"
|
|
parent="menu_fp_operations"
|
|
action="action_fp_tank"
|
|
sequence="30"/>
|
|
|
|
<menuitem id="menu_fp_racks"
|
|
name="Racks & Fixtures"
|
|
parent="menu_fp_operations"
|
|
action="action_fp_rack"
|
|
sequence="35"/>
|
|
|
|
<!-- Phase D (perms v2) — Manager+: replenishment is a purchasing decision. -->
|
|
<menuitem id="menu_fp_replenishment_suggestions"
|
|
name="Replenishment Suggestions"
|
|
parent="menu_fp_operations"
|
|
action="action_fp_replenishment_suggestion"
|
|
sequence="40"
|
|
groups="fusion_plating.group_fp_manager"/>
|
|
|
|
<!-- Configuration children (referencing the 7 buckets above) -->
|
|
<menuitem id="menu_fp_replenishment_rules"
|
|
name="Replenishment Rules"
|
|
parent="menu_fp_config_materials_tanks"
|
|
action="action_fp_replenishment_rule"
|
|
sequence="20"/>
|
|
|
|
<menuitem id="menu_fp_operator_certifications"
|
|
name="Operator Certifications"
|
|
parent="menu_fp_config_workforce"
|
|
action="action_fp_operator_cert"
|
|
sequence="20"/>
|
|
|
|
<menuitem id="menu_fp_facilities"
|
|
name="Facilities"
|
|
parent="menu_fp_config_shop_setup"
|
|
action="action_fp_facility"
|
|
sequence="10"/>
|
|
|
|
<menuitem id="menu_fp_work_centers"
|
|
name="Production Lines"
|
|
parent="menu_fp_config_shop_setup"
|
|
action="action_fp_work_center"
|
|
sequence="20"/>
|
|
|
|
<menuitem id="menu_fp_process_categories"
|
|
name="Process Categories"
|
|
parent="menu_fp_config_shop_setup"
|
|
action="action_fp_process_category"
|
|
sequence="30"/>
|
|
|
|
<menuitem id="menu_fp_process_types"
|
|
name="Process Types"
|
|
parent="menu_fp_config_shop_setup"
|
|
action="action_fp_process_type"
|
|
sequence="40"/>
|
|
|
|
<menuitem id="menu_fp_step_library"
|
|
name="Step Library"
|
|
parent="menu_fp_config_recipes_steps"
|
|
action="action_fp_step_template"
|
|
sequence="10"/>
|
|
|
|
<menuitem id="menu_fp_bath_parameters"
|
|
name="Bath Parameters"
|
|
parent="menu_fp_config_materials_tanks"
|
|
action="action_fp_bath_parameter"
|
|
sequence="10"/>
|
|
|
|
</odoo>
|