diff --git a/fusion_plating/fusion_plating/__manifest__.py b/fusion_plating/fusion_plating/__manifest__.py index b1d4e54b..2b578a4b 100644 --- a/fusion_plating/fusion_plating/__manifest__.py +++ b/fusion_plating/fusion_plating/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Fusion Plating', - 'version': '19.0.10.4.0', + 'version': '19.0.11.0.0', 'category': 'Manufacturing/Plating', 'summary': 'Core plating / metal finishing ERP: facilities, processes, tanks, baths, jobs, operators.', 'description': """ @@ -81,6 +81,7 @@ Copyright (c) 2026 Nexa Systems Inc. All rights reserved. 'data': [ 'security/fp_security.xml', 'security/ir.model.access.csv', + 'data/fp_landing_data.xml', 'data/fp_sequence_data.xml', 'data/fp_job_sequences.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_operator_certification_views.xml', 'views/res_config_settings_views.xml', + 'views/fp_landing_views.xml', 'views/fp_menu.xml', 'views/fp_work_centre_views.xml', 'views/fp_job_views.xml', diff --git a/fusion_plating/fusion_plating/data/fp_landing_data.xml b/fusion_plating/fusion_plating/data/fp_landing_data.xml new file mode 100644 index 00000000..e26af20b --- /dev/null +++ b/fusion_plating/fusion_plating/data/fp_landing_data.xml @@ -0,0 +1,49 @@ + + + + + + Plating — Open Landing Page + + code + + + + diff --git a/fusion_plating/fusion_plating/models/__init__.py b/fusion_plating/fusion_plating/models/__init__.py index d2ef444f..e40391d4 100644 --- a/fusion_plating/fusion_plating/models/__init__.py +++ b/fusion_plating/fusion_plating/models/__init__.py @@ -41,3 +41,6 @@ from . import fp_step_template_transition_input # Sub 12b — Rack-aware moves + persistent labor reconciliation from . import fp_rack_tag from . import fp_job_step_move + +# Phase 1 — Plating landing-page resolver +from . import fp_landing diff --git a/fusion_plating/fusion_plating/models/fp_landing.py b/fusion_plating/fusion_plating/models/fp_landing.py new file mode 100644 index 00000000..ebadf848 --- /dev/null +++ b/fusion_plating/fusion_plating/models/fp_landing.py @@ -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.', + ) diff --git a/fusion_plating/fusion_plating/models/res_config_settings.py b/fusion_plating/fusion_plating/models/res_config_settings.py index c8d18d83..4562a37c 100644 --- a/fusion_plating/fusion_plating/models/res_config_settings.py +++ b/fusion_plating/fusion_plating/models/res_config_settings.py @@ -62,3 +62,11 @@ class ResConfigSettings(models.TransientModel): readonly=False, 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', + ) diff --git a/fusion_plating/fusion_plating/views/fp_job_step_move_views.xml b/fusion_plating/fusion_plating/views/fp_job_step_move_views.xml index 35e3f790..c64daa9d 100644 --- a/fusion_plating/fusion_plating/views/fp_job_step_move_views.xml +++ b/fusion_plating/fusion_plating/views/fp_job_step_move_views.xml @@ -115,10 +115,11 @@ + + sequence="90"/> diff --git a/fusion_plating/fusion_plating/views/fp_job_step_timelog_views.xml b/fusion_plating/fusion_plating/views/fp_job_step_timelog_views.xml index 213fb4a6..45fd2837 100644 --- a/fusion_plating/fusion_plating/views/fp_job_step_timelog_views.xml +++ b/fusion_plating/fusion_plating/views/fp_job_step_timelog_views.xml @@ -133,10 +133,11 @@ {'search_default_my_timers': 1} + + sequence="95"/> diff --git a/fusion_plating/fusion_plating/views/fp_landing_views.xml b/fusion_plating/fusion_plating/views/fp_landing_views.xml new file mode 100644 index 00000000..adc59f06 --- /dev/null +++ b/fusion_plating/fusion_plating/views/fp_landing_views.xml @@ -0,0 +1,82 @@ + + + + + + + res.users.form.fp.landing + res.users + + + + + + 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). + + + + + + + + + + + + res.users.form.simple.fp.landing + res.users + + + + + + Page that opens when you click the Plating app. + + + + + + + + + + + + res.config.settings.form.fp.landing + res.config.settings + + + + + + + + + + + + + diff --git a/fusion_plating/fusion_plating/views/fp_menu.xml b/fusion_plating/fusion_plating/views/fp_menu.xml index b007f49a..b1f7b4d0 100644 --- a/fusion_plating/fusion_plating/views/fp_menu.xml +++ b/fusion_plating/fusion_plating/views/fp_menu.xml @@ -6,13 +6,26 @@ --> - + + + + [('node_type', '=', 'recipe')] {'default_node_type': 'recipe', 'search_default_recipes_only': 1} + Create your first process recipe diff --git a/fusion_plating/fusion_plating_aerospace/__manifest__.py b/fusion_plating/fusion_plating_aerospace/__manifest__.py index fa1e9dcf..d9b262c8 100644 --- a/fusion_plating/fusion_plating_aerospace/__manifest__.py +++ b/fusion_plating/fusion_plating_aerospace/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Fusion Plating — Aerospace (AS9100 + Nadcap)', - 'version': '19.0.1.0.0', + 'version': '19.0.1.1.0', 'category': 'Manufacturing/Plating', 'summary': 'Aerospace industry pack: AS9100 Rev D clause library, Nadcap AC7108 ' 'audits, counterfeit parts prevention, config management, risk register, ' diff --git a/fusion_plating/fusion_plating_aerospace/views/fp_menu.xml b/fusion_plating/fusion_plating_aerospace/views/fp_menu.xml index 684bf1ad..03f3b7c5 100644 --- a/fusion_plating/fusion_plating_aerospace/views/fp_menu.xml +++ b/fusion_plating/fusion_plating_aerospace/views/fp_menu.xml @@ -6,11 +6,11 @@ --> - + - + [('certificate_type', '=', 'thickness_report')] - + - + - + + diff --git a/fusion_plating/fusion_plating_configurator/__manifest__.py b/fusion_plating/fusion_plating_configurator/__manifest__.py index 329bbf31..4dbfaf2f 100644 --- a/fusion_plating/fusion_plating_configurator/__manifest__.py +++ b/fusion_plating/fusion_plating_configurator/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Fusion Plating — Configurator', - 'version': '19.0.17.15.0', + 'version': '19.0.17.16.0', 'category': 'Manufacturing/Plating', 'summary': 'Quotation configurator with part catalog, coating configs, and formula-based pricing engine.', 'description': """ diff --git a/fusion_plating/fusion_plating_configurator/views/fp_configurator_menu.xml b/fusion_plating/fusion_plating_configurator/views/fp_configurator_menu.xml index 0b9db7d1..4563832f 100644 --- a/fusion_plating/fusion_plating_configurator/views/fp_configurator_menu.xml +++ b/fusion_plating/fusion_plating_configurator/views/fp_configurator_menu.xml @@ -15,10 +15,14 @@ {'default_customer_rank': 1} - - + {'default_x_fc_delivery_method': 'shipping_partner'} + Create a new quotation @@ -482,6 +483,7 @@ [('state', 'in', ('sale', 'done'))] + diff --git a/fusion_plating/fusion_plating_nuclear/__manifest__.py b/fusion_plating/fusion_plating_nuclear/__manifest__.py index caf7e742..08f40147 100644 --- a/fusion_plating/fusion_plating_nuclear/__manifest__.py +++ b/fusion_plating/fusion_plating_nuclear/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Fusion Plating — Nuclear (CSA N299, NQA-1)', - 'version': '19.0.1.0.0', + 'version': '19.0.1.1.0', 'category': 'Manufacturing/Plating', 'summary': 'Nuclear industry pack: CSA N299 Levels 1-4, NQA-1 awareness, ' 'CNSC licence tracking, 10 CFR Part 21 reporting, ITPs, ' diff --git a/fusion_plating/fusion_plating_nuclear/views/fp_menu.xml b/fusion_plating/fusion_plating_nuclear/views/fp_menu.xml index cb86dd19..f98b34c9 100644 --- a/fusion_plating/fusion_plating_nuclear/views/fp_menu.xml +++ b/fusion_plating/fusion_plating_nuclear/views/fp_menu.xml @@ -6,11 +6,11 @@ --> - + - +
+ 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). +
+ Page that opens when you click the Plating app. +
Create your first process recipe diff --git a/fusion_plating/fusion_plating_aerospace/__manifest__.py b/fusion_plating/fusion_plating_aerospace/__manifest__.py index fa1e9dcf..d9b262c8 100644 --- a/fusion_plating/fusion_plating_aerospace/__manifest__.py +++ b/fusion_plating/fusion_plating_aerospace/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Fusion Plating — Aerospace (AS9100 + Nadcap)', - 'version': '19.0.1.0.0', + 'version': '19.0.1.1.0', 'category': 'Manufacturing/Plating', 'summary': 'Aerospace industry pack: AS9100 Rev D clause library, Nadcap AC7108 ' 'audits, counterfeit parts prevention, config management, risk register, ' diff --git a/fusion_plating/fusion_plating_aerospace/views/fp_menu.xml b/fusion_plating/fusion_plating_aerospace/views/fp_menu.xml index 684bf1ad..03f3b7c5 100644 --- a/fusion_plating/fusion_plating_aerospace/views/fp_menu.xml +++ b/fusion_plating/fusion_plating_aerospace/views/fp_menu.xml @@ -6,11 +6,11 @@ --> - + - + [('certificate_type', '=', 'thickness_report')]
Create a new quotation @@ -482,6 +483,7 @@ [('state', 'in', ('sale', 'done'))] +