feat(phase1): top-level menu consolidation + landing-page resolver
Phase 1 collapses the Plating app's 17 top-level menus down to 6
domains (Sales, Operations, Receiving & Shipping, Quality,
Compliance, Configuration) so users no longer scroll a 17-item
sidebar to find one thing.
Re-parented (no XML id changes — bookmarks still work):
- fusion_plating_compliance.menu_fp_compliance_root
→ menu_fp_compliance_hub (renamed 'General')
- fusion_plating_safety.menu_fp_safety_root
→ menu_fp_compliance_hub (renamed 'Safety / WHMIS')
- fusion_plating_aerospace.menu_fp_aerospace
→ menu_fp_compliance_hub (renamed 'Aerospace (AS9100 / Nadcap)')
- fusion_plating_nuclear.menu_fp_nuclear
→ menu_fp_compliance_hub (renamed 'Nuclear (CSA N299 / CNSC)')
- fusion_plating_cgp.menu_fp_cgp
→ menu_fp_compliance_hub (renamed 'Controlled Goods (CGP)')
- fusion_plating_certificates.menu_fp_certificates
→ menu_fp_quality (Certs are a Quality output, not a separate
top-level concern)
- fusion_plating_bridge_maintenance.menu_fp_maintenance
→ menu_fp_operations
- fusion_plating.menu_fp_job_step_move (Move Log)
→ menu_fp_operations
- fusion_plating.menu_fp_job_step_timelog (Labor History)
→ menu_fp_operations
The new menu_fp_compliance_hub is supervisor-gated; underlying
verticals retain their own group locks (CGP officer, etc.).
Settings menu remains manager-gated through inheritance from
menu_fp_config (already in place).
NEW — Plating landing-page resolver:
- ir.actions.act_window.x_fc_pickable_landing (Boolean tag for
curated picklist; flagged on Sale Orders, Quotations, Process
Recipes for Phase 1; more in Phase 2)
- res.company.x_fc_default_landing_action_id (admin sets fallback)
- res.users.x_fc_plating_landing_action_id (per-user override)
- ir.actions.server action_fp_resolve_plating_landing — picks
user → company → Sale Orders fallback at click time
- menu_fp_root rewired to call the resolver
- User profile + Settings tabs surface the dropdowns
Configurator's earlier menu_fp_root override (action_fp_sale_orders
direct) removed — core's resolver now owns the routing.
Versions bumped: fusion_plating 19.0.11.0.0, configurator
19.0.17.16.0, plus 7 dependent modules patched.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
'name': 'Fusion Plating',
|
'name': 'Fusion Plating',
|
||||||
'version': '19.0.10.4.0',
|
'version': '19.0.11.0.0',
|
||||||
'category': 'Manufacturing/Plating',
|
'category': 'Manufacturing/Plating',
|
||||||
'summary': 'Core plating / metal finishing ERP: facilities, processes, tanks, baths, jobs, operators.',
|
'summary': 'Core plating / metal finishing ERP: facilities, processes, tanks, baths, jobs, operators.',
|
||||||
'description': """
|
'description': """
|
||||||
@@ -81,6 +81,7 @@ Copyright (c) 2026 Nexa Systems Inc. All rights reserved.
|
|||||||
'data': [
|
'data': [
|
||||||
'security/fp_security.xml',
|
'security/fp_security.xml',
|
||||||
'security/ir.model.access.csv',
|
'security/ir.model.access.csv',
|
||||||
|
'data/fp_landing_data.xml',
|
||||||
'data/fp_sequence_data.xml',
|
'data/fp_sequence_data.xml',
|
||||||
'data/fp_job_sequences.xml',
|
'data/fp_job_sequences.xml',
|
||||||
'data/fp_process_category_data.xml',
|
'data/fp_process_category_data.xml',
|
||||||
@@ -99,6 +100,7 @@ Copyright (c) 2026 Nexa Systems Inc. All rights reserved.
|
|||||||
'views/fp_bath_replenishment_views.xml',
|
'views/fp_bath_replenishment_views.xml',
|
||||||
'views/fp_operator_certification_views.xml',
|
'views/fp_operator_certification_views.xml',
|
||||||
'views/res_config_settings_views.xml',
|
'views/res_config_settings_views.xml',
|
||||||
|
'views/fp_landing_views.xml',
|
||||||
'views/fp_menu.xml',
|
'views/fp_menu.xml',
|
||||||
'views/fp_work_centre_views.xml',
|
'views/fp_work_centre_views.xml',
|
||||||
'views/fp_job_views.xml',
|
'views/fp_job_views.xml',
|
||||||
|
|||||||
49
fusion_plating/fusion_plating/data/fp_landing_data.xml
Normal file
49
fusion_plating/fusion_plating/data/fp_landing_data.xml
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
<?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.
|
||||||
|
|
||||||
|
Phase 1 — Plating landing-page resolver.
|
||||||
|
|
||||||
|
The Plating app's root menu (menu_fp_root) calls this server action
|
||||||
|
on click. It resolves which window action to open in this priority
|
||||||
|
order:
|
||||||
|
1. user.x_fc_plating_landing_action_id (per-user override)
|
||||||
|
2. company.x_fc_default_landing_action_id (company default)
|
||||||
|
3. action_fp_sale_orders (hardcoded fallback)
|
||||||
|
|
||||||
|
Falls back to Sale Orders so that pre-Sub-12d users who haven't
|
||||||
|
set a preference still land on the Sale-Orders default we shipped
|
||||||
|
earlier in the session.
|
||||||
|
-->
|
||||||
|
<odoo noupdate="0">
|
||||||
|
|
||||||
|
<record id="action_fp_resolve_plating_landing" model="ir.actions.server">
|
||||||
|
<field name="name">Plating — Open Landing Page</field>
|
||||||
|
<field name="model_id" ref="base.model_res_users"/>
|
||||||
|
<field name="state">code</field>
|
||||||
|
<field name="code"><![CDATA[
|
||||||
|
# Resolve in priority order: user pref → company default → Sale Orders fallback.
|
||||||
|
user = env.user
|
||||||
|
target = False
|
||||||
|
if 'x_fc_plating_landing_action_id' in user._fields and user.x_fc_plating_landing_action_id:
|
||||||
|
target = user.x_fc_plating_landing_action_id.sudo()
|
||||||
|
elif 'x_fc_default_landing_action_id' in env.company._fields and env.company.x_fc_default_landing_action_id:
|
||||||
|
target = env.company.x_fc_default_landing_action_id.sudo()
|
||||||
|
if not target:
|
||||||
|
target = env.ref('fusion_plating_configurator.action_fp_sale_orders', raise_if_not_found=False)
|
||||||
|
|
||||||
|
if target:
|
||||||
|
action = target.sudo().read()[0]
|
||||||
|
# Strip ids that confuse the act_window dispatcher.
|
||||||
|
action.pop('id', None)
|
||||||
|
else:
|
||||||
|
# Last-ditch — open the Plating app's process recipes if even
|
||||||
|
# the Sale Orders action is missing (e.g. configurator not installed).
|
||||||
|
action = env.ref('fusion_plating.action_fp_process_recipe').sudo().read()[0]
|
||||||
|
action.pop('id', None)
|
||||||
|
]]></field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
@@ -41,3 +41,6 @@ from . import fp_step_template_transition_input
|
|||||||
# Sub 12b — Rack-aware moves + persistent labor reconciliation
|
# Sub 12b — Rack-aware moves + persistent labor reconciliation
|
||||||
from . import fp_rack_tag
|
from . import fp_rack_tag
|
||||||
from . import fp_job_step_move
|
from . import fp_job_step_move
|
||||||
|
|
||||||
|
# Phase 1 — Plating landing-page resolver
|
||||||
|
from . import fp_landing
|
||||||
|
|||||||
61
fusion_plating/fusion_plating/models/fp_landing.py
Normal file
61
fusion_plating/fusion_plating/models/fp_landing.py
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright 2026 Nexa Systems Inc.
|
||||||
|
# License OPL-1 (Odoo Proprietary License v1.0)
|
||||||
|
# Part of the Fusion Plating product family.
|
||||||
|
"""Phase 1 — Plating landing-page resolver fields.
|
||||||
|
|
||||||
|
Three pieces:
|
||||||
|
1. `ir.actions.act_window.x_fc_pickable_landing` — Boolean tag. Mark a
|
||||||
|
curated set of plating actions (Sale Orders, Plant Overview,
|
||||||
|
Quotations, Quality Dashboard, Manager Dashboard, Tablet Station,
|
||||||
|
Labor History) so the landing-page dropdown only offers sensible
|
||||||
|
options, not all 200 act_window records in the DB.
|
||||||
|
|
||||||
|
2. `res.company.x_fc_default_landing_action_id` — admin sets the
|
||||||
|
fallback for users who don't pick a preference.
|
||||||
|
|
||||||
|
3. `res.users.x_fc_plating_landing_action_id` — each user's own
|
||||||
|
override.
|
||||||
|
|
||||||
|
The resolver server action (data/fp_landing_data.xml) reads these.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from odoo import fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class IrActionsActWindow(models.Model):
|
||||||
|
_inherit = 'ir.actions.act_window'
|
||||||
|
|
||||||
|
x_fc_pickable_landing = fields.Boolean(
|
||||||
|
string='Pickable as Plating Landing',
|
||||||
|
default=False,
|
||||||
|
help='When True, this action appears in the Plating landing-'
|
||||||
|
'page dropdown on res.users and res.company. Tag a small '
|
||||||
|
'curated list (Sale Orders, Plant Overview, etc.) to keep '
|
||||||
|
'the picker manageable.',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class ResCompany(models.Model):
|
||||||
|
_inherit = 'res.company'
|
||||||
|
|
||||||
|
x_fc_default_landing_action_id = fields.Many2one(
|
||||||
|
'ir.actions.act_window',
|
||||||
|
string='Default Plating Landing Page',
|
||||||
|
domain=[('x_fc_pickable_landing', '=', True)],
|
||||||
|
help='Page that opens when a user clicks the Plating app, '
|
||||||
|
'unless the user has chosen their own override on their '
|
||||||
|
'preferences. Falls back to Sale Orders when blank.',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class ResUsers(models.Model):
|
||||||
|
_inherit = 'res.users'
|
||||||
|
|
||||||
|
x_fc_plating_landing_action_id = fields.Many2one(
|
||||||
|
'ir.actions.act_window',
|
||||||
|
string='My Plating Landing Page',
|
||||||
|
domain=[('x_fc_pickable_landing', '=', True)],
|
||||||
|
help='Personal override for the page that opens when you click '
|
||||||
|
'the Plating app. When blank, follows the company default.',
|
||||||
|
)
|
||||||
@@ -62,3 +62,11 @@ class ResConfigSettings(models.TransientModel):
|
|||||||
readonly=False,
|
readonly=False,
|
||||||
string='Default Recipe Editor',
|
string='Default Recipe Editor',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# ----- Phase 1 — Plating landing page default -----------------------
|
||||||
|
x_fc_default_landing_action_id = fields.Many2one(
|
||||||
|
'ir.actions.act_window',
|
||||||
|
related='company_id.x_fc_default_landing_action_id',
|
||||||
|
readonly=False,
|
||||||
|
string='Default Plating Landing Page',
|
||||||
|
)
|
||||||
|
|||||||
@@ -115,10 +115,11 @@
|
|||||||
<field name="search_view_id" ref="view_fp_job_step_move_search"/>
|
<field name="search_view_id" ref="view_fp_job_step_move_search"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
<!-- Phase 1 — re-parented under Operations. -->
|
||||||
<menuitem id="menu_fp_job_step_move"
|
<menuitem id="menu_fp_job_step_move"
|
||||||
name="Move Log"
|
name="Move Log"
|
||||||
parent="menu_fp_root"
|
parent="menu_fp_operations"
|
||||||
action="action_fp_job_step_move"
|
action="action_fp_job_step_move"
|
||||||
sequence="62"/>
|
sequence="90"/>
|
||||||
|
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|||||||
@@ -133,10 +133,11 @@
|
|||||||
<field name="context">{'search_default_my_timers': 1}</field>
|
<field name="context">{'search_default_my_timers': 1}</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
<!-- Phase 1 — re-parented under Operations. -->
|
||||||
<menuitem id="menu_fp_labor_history"
|
<menuitem id="menu_fp_labor_history"
|
||||||
name="Labor History"
|
name="Labor History"
|
||||||
parent="menu_fp_root"
|
parent="menu_fp_operations"
|
||||||
action="action_fp_labor_history"
|
action="action_fp_labor_history"
|
||||||
sequence="64"/>
|
sequence="95"/>
|
||||||
|
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|||||||
82
fusion_plating/fusion_plating/views/fp_landing_views.xml
Normal file
82
fusion_plating/fusion_plating/views/fp_landing_views.xml
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
<?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.
|
||||||
|
|
||||||
|
Phase 1 — Plating landing-page resolver UI.
|
||||||
|
|
||||||
|
Two surfaces:
|
||||||
|
1. Settings → Fusion Plating → Recipe Editor block (extended into
|
||||||
|
a Landing Page block for the company-level default).
|
||||||
|
2. User profile / preferences form — adds a Fusion Plating tab
|
||||||
|
with the per-user override dropdown.
|
||||||
|
-->
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<!-- ====== User profile (Preferences > Fusion Plating tab) ====== -->
|
||||||
|
<record id="view_users_form_fp_landing" model="ir.ui.view">
|
||||||
|
<field name="name">res.users.form.fp.landing</field>
|
||||||
|
<field name="model">res.users</field>
|
||||||
|
<field name="inherit_id" ref="base.view_users_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//notebook" position="inside">
|
||||||
|
<page string="Fusion Plating" name="fp_landing">
|
||||||
|
<p class="text-muted">
|
||||||
|
Choose which page opens when you click the Plating
|
||||||
|
app. When blank, you see the company default
|
||||||
|
(Sale Orders unless an admin has changed it).
|
||||||
|
</p>
|
||||||
|
<group>
|
||||||
|
<field name="x_fc_plating_landing_action_id"
|
||||||
|
options="{'no_create': True, 'no_open': True}"/>
|
||||||
|
</group>
|
||||||
|
</page>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Same field surfaced on the simplified preferences form (the one
|
||||||
|
users open from the avatar menu — uses a different XML id). -->
|
||||||
|
<record id="view_users_form_simple_fp_landing" model="ir.ui.view">
|
||||||
|
<field name="name">res.users.form.simple.fp.landing</field>
|
||||||
|
<field name="model">res.users</field>
|
||||||
|
<field name="inherit_id" ref="base.view_users_form_simple_modif"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//notebook" position="inside">
|
||||||
|
<page string="Fusion Plating" name="fp_landing_simple">
|
||||||
|
<p class="text-muted">
|
||||||
|
Page that opens when you click the Plating app.
|
||||||
|
</p>
|
||||||
|
<group>
|
||||||
|
<field name="x_fc_plating_landing_action_id"
|
||||||
|
options="{'no_create': True, 'no_open': True}"/>
|
||||||
|
</group>
|
||||||
|
</page>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- ====== Settings → Fusion Plating → Landing Page block ====== -->
|
||||||
|
<record id="res_config_settings_view_form_fp_landing" model="ir.ui.view">
|
||||||
|
<field name="name">res.config.settings.form.fp.landing</field>
|
||||||
|
<field name="model">res.config.settings</field>
|
||||||
|
<field name="inherit_id" ref="fusion_plating.res_config_settings_view_form_fp_core"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//block[@name='fp_recipe_editor_settings']"
|
||||||
|
position="after">
|
||||||
|
<block title="Plating Landing Page"
|
||||||
|
name="fp_landing_settings"
|
||||||
|
help="Page that opens when a user clicks the Plating app.">
|
||||||
|
<setting id="fp_default_landing_action"
|
||||||
|
string="Default Landing Page"
|
||||||
|
help="Users without a personal preference see this page. Each user can override it under their Profile > Preferences > Fusion Plating tab.">
|
||||||
|
<field name="x_fc_default_landing_action_id"
|
||||||
|
options="{'no_create': True, 'no_open': True}"/>
|
||||||
|
</setting>
|
||||||
|
</block>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
@@ -6,13 +6,26 @@
|
|||||||
-->
|
-->
|
||||||
<odoo>
|
<odoo>
|
||||||
|
|
||||||
<!-- ===== ROOT APP MENU ===== -->
|
<!-- ===== ROOT APP MENU =====
|
||||||
|
Landing action wired via the resolver server action below.
|
||||||
|
Per-user override > company default > Sale Orders fallback. -->
|
||||||
<menuitem id="menu_fp_root"
|
<menuitem id="menu_fp_root"
|
||||||
name="Plating"
|
name="Plating"
|
||||||
sequence="46"
|
sequence="46"
|
||||||
web_icon="fusion_plating,static/description/icon.png"
|
web_icon="fusion_plating,static/description/icon.png"
|
||||||
|
action="action_fp_resolve_plating_landing"
|
||||||
groups="group_fusion_plating_operator"/>
|
groups="group_fusion_plating_operator"/>
|
||||||
|
|
||||||
|
<!-- ===== Compliance hub (Phase 1) =====
|
||||||
|
Bundles General Compliance + Safety + Aerospace + Nuclear + CGP
|
||||||
|
under one top-level. Each vertical's existing root menu is
|
||||||
|
re-parented here in its own module. -->
|
||||||
|
<menuitem id="menu_fp_compliance_hub"
|
||||||
|
name="Compliance"
|
||||||
|
parent="menu_fp_root"
|
||||||
|
sequence="50"
|
||||||
|
groups="group_fusion_plating_supervisor"/>
|
||||||
|
|
||||||
<!-- ===== OPERATIONS ===== -->
|
<!-- ===== OPERATIONS ===== -->
|
||||||
<menuitem id="menu_fp_operations"
|
<menuitem id="menu_fp_operations"
|
||||||
name="Operations"
|
name="Operations"
|
||||||
|
|||||||
@@ -227,6 +227,7 @@
|
|||||||
<field name="domain">[('node_type', '=', 'recipe')]</field>
|
<field name="domain">[('node_type', '=', 'recipe')]</field>
|
||||||
<field name="context">{'default_node_type': 'recipe', 'search_default_recipes_only': 1}</field>
|
<field name="context">{'default_node_type': 'recipe', 'search_default_recipes_only': 1}</field>
|
||||||
<field name="search_view_id" ref="view_fp_process_node_search"/>
|
<field name="search_view_id" ref="view_fp_process_node_search"/>
|
||||||
|
<field name="x_fc_pickable_landing" eval="True"/>
|
||||||
<field name="help" type="html">
|
<field name="help" type="html">
|
||||||
<p class="o_view_nocontent_smiling_face">
|
<p class="o_view_nocontent_smiling_face">
|
||||||
Create your first process recipe
|
Create your first process recipe
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
'name': 'Fusion Plating — Aerospace (AS9100 + Nadcap)',
|
'name': 'Fusion Plating — Aerospace (AS9100 + Nadcap)',
|
||||||
'version': '19.0.1.0.0',
|
'version': '19.0.1.1.0',
|
||||||
'category': 'Manufacturing/Plating',
|
'category': 'Manufacturing/Plating',
|
||||||
'summary': 'Aerospace industry pack: AS9100 Rev D clause library, Nadcap AC7108 '
|
'summary': 'Aerospace industry pack: AS9100 Rev D clause library, Nadcap AC7108 '
|
||||||
'audits, counterfeit parts prevention, config management, risk register, '
|
'audits, counterfeit parts prevention, config management, risk register, '
|
||||||
|
|||||||
@@ -6,11 +6,11 @@
|
|||||||
-->
|
-->
|
||||||
<odoo>
|
<odoo>
|
||||||
|
|
||||||
<!-- ===== AEROSPACE (parent submenu under the Plating app) ===== -->
|
<!-- Phase 1 — re-parented under Plating → Compliance hub. -->
|
||||||
<menuitem id="menu_fp_aerospace"
|
<menuitem id="menu_fp_aerospace"
|
||||||
name="Aerospace"
|
name="Aerospace (AS9100 / Nadcap)"
|
||||||
parent="fusion_plating.menu_fp_root"
|
parent="fusion_plating.menu_fp_compliance_hub"
|
||||||
sequence="60"
|
sequence="30"
|
||||||
groups="fusion_plating.group_fusion_plating_operator"/>
|
groups="fusion_plating.group_fusion_plating_operator"/>
|
||||||
|
|
||||||
<menuitem id="menu_fp_aerospace_as9100"
|
<menuitem id="menu_fp_aerospace_as9100"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
'name': 'Fusion Plating — Maintenance Bridge',
|
'name': 'Fusion Plating — Maintenance Bridge',
|
||||||
'version': '19.0.1.0.0',
|
'version': '19.0.1.1.0',
|
||||||
'category': 'Manufacturing/Plating',
|
'category': 'Manufacturing/Plating',
|
||||||
'summary': 'Bridge standard Odoo Maintenance with Fusion Plating equipment, '
|
'summary': 'Bridge standard Odoo Maintenance with Fusion Plating equipment, '
|
||||||
'plans, checklists, and sensor integration.',
|
'plans, checklists, and sensor integration.',
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<odoo>
|
<odoo>
|
||||||
|
|
||||||
<!-- ===== Maintenance parent menu under Plating root ===== -->
|
<!-- Phase 1 — re-parented under Plating → Operations. Maintenance
|
||||||
|
is an Operations concern, not a separate top-level. -->
|
||||||
<menuitem id="menu_fp_maintenance"
|
<menuitem id="menu_fp_maintenance"
|
||||||
name="Maintenance"
|
name="Maintenance"
|
||||||
parent="fusion_plating.menu_fp_root"
|
parent="fusion_plating.menu_fp_operations"
|
||||||
sequence="22"
|
sequence="80"
|
||||||
groups="fusion_plating.group_fusion_plating_operator"/>
|
groups="fusion_plating.group_fusion_plating_operator"/>
|
||||||
|
|
||||||
<menuitem id="menu_fp_maintenance_active"
|
<menuitem id="menu_fp_maintenance_active"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
'name': 'Fusion Plating — Certificates',
|
'name': 'Fusion Plating — Certificates',
|
||||||
'version': '19.0.5.3.0',
|
'version': '19.0.5.4.0',
|
||||||
'category': 'Manufacturing/Plating',
|
'category': 'Manufacturing/Plating',
|
||||||
'summary': 'Certificate registry for CoC, thickness reports, and quality documents.',
|
'summary': 'Certificate registry for CoC, thickness reports, and quality documents.',
|
||||||
'description': """
|
'description': """
|
||||||
|
|||||||
@@ -16,11 +16,12 @@
|
|||||||
<field name="domain">[('certificate_type', '=', 'thickness_report')]</field>
|
<field name="domain">[('certificate_type', '=', 'thickness_report')]</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!-- Menu under Fusion Plating root -->
|
<!-- Phase 1 — re-parented under Plating → Quality. Certificates are
|
||||||
|
a quality output, not a separate top-level concern. -->
|
||||||
<menuitem id="menu_fp_certificates"
|
<menuitem id="menu_fp_certificates"
|
||||||
name="Certificates"
|
name="Certificates"
|
||||||
parent="fusion_plating.menu_fp_root"
|
parent="fusion_plating_quality.menu_fp_quality"
|
||||||
sequence="25"
|
sequence="80"
|
||||||
groups="fusion_plating.group_fusion_plating_supervisor"/>
|
groups="fusion_plating.group_fusion_plating_supervisor"/>
|
||||||
|
|
||||||
<menuitem id="menu_fp_certificates_all"
|
<menuitem id="menu_fp_certificates_all"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
'name': 'Fusion Plating — Controlled Goods Program',
|
'name': 'Fusion Plating — Controlled Goods Program',
|
||||||
'version': '19.0.1.0.0',
|
'version': '19.0.1.1.0',
|
||||||
'category': 'Manufacturing/Plating',
|
'category': 'Manufacturing/Plating',
|
||||||
'summary': 'Canadian Controlled Goods Program (CGP) compliance for plating '
|
'summary': 'Canadian Controlled Goods Program (CGP) compliance for plating '
|
||||||
'shops handling defence work: registration, authorized individuals, '
|
'shops handling defence work: registration, authorized individuals, '
|
||||||
|
|||||||
@@ -6,11 +6,11 @@
|
|||||||
-->
|
-->
|
||||||
<odoo>
|
<odoo>
|
||||||
|
|
||||||
<!-- ===== CGP (parent submenu under the Plating app) ===== -->
|
<!-- Phase 1 — re-parented under Plating → Compliance hub. -->
|
||||||
<menuitem id="menu_fp_cgp"
|
<menuitem id="menu_fp_cgp"
|
||||||
name="CGP"
|
name="Controlled Goods (CGP)"
|
||||||
parent="fusion_plating.menu_fp_root"
|
parent="fusion_plating.menu_fp_compliance_hub"
|
||||||
sequence="70"
|
sequence="50"
|
||||||
groups="group_fusion_plating_cgp_officer"/>
|
groups="group_fusion_plating_cgp_officer"/>
|
||||||
|
|
||||||
<menuitem id="menu_fp_cgp_registration"
|
<menuitem id="menu_fp_cgp_registration"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
# License OPL-1 (Odoo Proprietary License v1.0)
|
# License OPL-1 (Odoo Proprietary License v1.0)
|
||||||
{
|
{
|
||||||
'name': 'Fusion Plating - Compliance (Framework)',
|
'name': 'Fusion Plating - Compliance (Framework)',
|
||||||
'version': '19.0.1.1.0',
|
'version': '19.0.1.2.0',
|
||||||
'category': 'Manufacturing/Plating',
|
'category': 'Manufacturing/Plating',
|
||||||
'summary': 'Jurisdiction-agnostic compliance framework: permits, discharge monitoring, waste manifests, pollutant inventory, compliance calendar, spill register.',
|
'summary': 'Jurisdiction-agnostic compliance framework: permits, discharge monitoring, waste manifests, pollutant inventory, compliance calendar, spill register.',
|
||||||
'description': 'Generic compliance framework. Region packs load jurisdiction-specific data.',
|
'description': 'Generic compliance framework. Region packs load jurisdiction-specific data.',
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<odoo>
|
<odoo>
|
||||||
<menuitem id="menu_fp_compliance_root" name="Compliance" parent="fusion_plating.menu_fp_root" sequence="40"/>
|
<!-- Phase 1 — re-parented under fusion_plating.menu_fp_compliance_hub
|
||||||
|
and renamed to 'General' since the hub is now the top-level Compliance. -->
|
||||||
|
<menuitem id="menu_fp_compliance_root" name="General"
|
||||||
|
parent="fusion_plating.menu_fp_compliance_hub" sequence="10"/>
|
||||||
|
|
||||||
<menuitem id="menu_fp_compliance_permit" name="Permits" parent="menu_fp_compliance_root" action="action_fp_permit" sequence="10"/>
|
<menuitem id="menu_fp_compliance_permit" name="Permits" parent="menu_fp_compliance_root" action="action_fp_permit" sequence="10"/>
|
||||||
<menuitem id="menu_fp_compliance_discharge_sample" name="Discharge Samples" parent="menu_fp_compliance_root" action="action_fp_discharge_sample" sequence="20"/>
|
<menuitem id="menu_fp_compliance_discharge_sample" name="Discharge Samples" parent="menu_fp_compliance_root" action="action_fp_discharge_sample" sequence="20"/>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
'name': 'Fusion Plating — Configurator',
|
'name': 'Fusion Plating — Configurator',
|
||||||
'version': '19.0.17.15.0',
|
'version': '19.0.17.16.0',
|
||||||
'category': 'Manufacturing/Plating',
|
'category': 'Manufacturing/Plating',
|
||||||
'summary': 'Quotation configurator with part catalog, coating configs, and formula-based pricing engine.',
|
'summary': 'Quotation configurator with part catalog, coating configs, and formula-based pricing engine.',
|
||||||
'description': """
|
'description': """
|
||||||
|
|||||||
@@ -15,10 +15,14 @@
|
|||||||
<field name="context">{'default_customer_rank': 1}</field>
|
<field name="context">{'default_customer_rank': 1}</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!-- Default landing screen for the Plating app = Sale Orders -->
|
<!--
|
||||||
<menuitem id="fusion_plating.menu_fp_root"
|
The Plating app's landing screen is now resolved by a server
|
||||||
name="Plating"
|
action defined in fusion_plating core (Phase 1):
|
||||||
action="action_fp_sale_orders"/>
|
user.x_fc_plating_landing_action_id →
|
||||||
|
company.x_fc_default_landing_action_id →
|
||||||
|
action_fp_sale_orders fallback
|
||||||
|
See fusion_plating/data/fp_landing_data.xml.
|
||||||
|
-->
|
||||||
|
|
||||||
<!-- ===== SALES submenu under Fusion Plating root ===== -->
|
<!-- ===== SALES submenu under Fusion Plating root ===== -->
|
||||||
<menuitem id="menu_fp_sales"
|
<menuitem id="menu_fp_sales"
|
||||||
|
|||||||
@@ -467,6 +467,7 @@
|
|||||||
(0, 0, {'view_mode': 'list', 'view_id': ref('view_sale_order_list_fp_quotes')})]"/>
|
(0, 0, {'view_mode': 'list', 'view_id': ref('view_sale_order_list_fp_quotes')})]"/>
|
||||||
<field name="search_view_id" ref="view_sale_order_search_fp_quotes"/>
|
<field name="search_view_id" ref="view_sale_order_search_fp_quotes"/>
|
||||||
<field name="context">{'default_x_fc_delivery_method': 'shipping_partner'}</field>
|
<field name="context">{'default_x_fc_delivery_method': 'shipping_partner'}</field>
|
||||||
|
<field name="x_fc_pickable_landing" eval="True"/>
|
||||||
<field name="help" type="html">
|
<field name="help" type="html">
|
||||||
<p class="o_view_nocontent_smiling_face">
|
<p class="o_view_nocontent_smiling_face">
|
||||||
Create a new quotation
|
Create a new quotation
|
||||||
@@ -482,6 +483,7 @@
|
|||||||
<field name="domain">[('state', 'in', ('sale', 'done'))]</field>
|
<field name="domain">[('state', 'in', ('sale', 'done'))]</field>
|
||||||
<field name="view_ids" eval="[(5, 0, 0),
|
<field name="view_ids" eval="[(5, 0, 0),
|
||||||
(0, 0, {'view_mode': 'list', 'view_id': ref('view_sale_order_list_fp')})]"/>
|
(0, 0, {'view_mode': 'list', 'view_id': ref('view_sale_order_list_fp')})]"/>
|
||||||
|
<field name="x_fc_pickable_landing" eval="True"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
'name': 'Fusion Plating — Nuclear (CSA N299, NQA-1)',
|
'name': 'Fusion Plating — Nuclear (CSA N299, NQA-1)',
|
||||||
'version': '19.0.1.0.0',
|
'version': '19.0.1.1.0',
|
||||||
'category': 'Manufacturing/Plating',
|
'category': 'Manufacturing/Plating',
|
||||||
'summary': 'Nuclear industry pack: CSA N299 Levels 1-4, NQA-1 awareness, '
|
'summary': 'Nuclear industry pack: CSA N299 Levels 1-4, NQA-1 awareness, '
|
||||||
'CNSC licence tracking, 10 CFR Part 21 reporting, ITPs, '
|
'CNSC licence tracking, 10 CFR Part 21 reporting, ITPs, '
|
||||||
|
|||||||
@@ -6,11 +6,11 @@
|
|||||||
-->
|
-->
|
||||||
<odoo>
|
<odoo>
|
||||||
|
|
||||||
<!-- ===== NUCLEAR (top-level submenu under the Plating app) ===== -->
|
<!-- Phase 1 — re-parented under Plating → Compliance hub. -->
|
||||||
<menuitem id="menu_fp_nuclear"
|
<menuitem id="menu_fp_nuclear"
|
||||||
name="Nuclear"
|
name="Nuclear (CSA N299 / CNSC)"
|
||||||
parent="fusion_plating.menu_fp_root"
|
parent="fusion_plating.menu_fp_compliance_hub"
|
||||||
sequence="65"
|
sequence="40"
|
||||||
groups="fusion_plating.group_fusion_plating_operator"/>
|
groups="fusion_plating.group_fusion_plating_operator"/>
|
||||||
|
|
||||||
<menuitem id="menu_fp_nuclear_program"
|
<menuitem id="menu_fp_nuclear_program"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
'name': 'Fusion Plating — Safety (EHS)',
|
'name': 'Fusion Plating — Safety (EHS)',
|
||||||
'version': '19.0.1.0.0',
|
'version': '19.0.1.1.0',
|
||||||
'category': 'Manufacturing/Plating',
|
'category': 'Manufacturing/Plating',
|
||||||
'summary': 'Occupational health and safety for plating shops: SDS library, '
|
'summary': 'Occupational health and safety for plating shops: SDS library, '
|
||||||
'WHMIS/TDG training, exposure monitoring, JHSC, incidents, PPE, '
|
'WHMIS/TDG training, exposure monitoring, JHSC, incidents, PPE, '
|
||||||
|
|||||||
@@ -6,11 +6,11 @@
|
|||||||
-->
|
-->
|
||||||
<odoo>
|
<odoo>
|
||||||
|
|
||||||
<!-- ===== SAFETY (top-level under Plating) ===== -->
|
<!-- Phase 1 — re-parented under Plating → Compliance hub. -->
|
||||||
<menuitem id="menu_fp_safety_root"
|
<menuitem id="menu_fp_safety_root"
|
||||||
name="Safety"
|
name="Safety / WHMIS"
|
||||||
parent="fusion_plating.menu_fp_root"
|
parent="fusion_plating.menu_fp_compliance_hub"
|
||||||
sequence="45"
|
sequence="20"
|
||||||
groups="fusion_plating.group_fusion_plating_operator"/>
|
groups="fusion_plating.group_fusion_plating_operator"/>
|
||||||
|
|
||||||
<menuitem id="menu_fp_safety_sds"
|
<menuitem id="menu_fp_safety_sds"
|
||||||
|
|||||||
Reference in New Issue
Block a user