From 625f6560f1f097110cdee94b1aae772c6801d2eb Mon Sep 17 00:00:00 2001 From: gsinghpal Date: Thu, 23 Apr 2026 08:45:24 -0400 Subject: [PATCH] feat(plating): split templates vs part-scoped processes + Process smart button MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two user-reported gaps: 1. The Process Recipes list was about to be flooded by part-scoped clones as soon as parts started carrying customised processes — thousands of clones would bury the handful of real shared templates (General Processing, Anodize, etc.). Fix: the main Process Recipes action now narrows to part_catalog_id = False so shared templates stay alone in that view. A sibling menu "Part Processes" (Plating → Operations → Part Processes) shows the inverse list — every part-cloned process, grouped by part — so admins can audit clones without cluttering the templates list. Search view gains two toggle filters (Shared Templates / Part-Scoped) and a "Group by Part" option. The node list gains an optional "Part" column. Split across modules: core owns the base search / tree / action (unchanged); configurator owns all the part_catalog_id-dependent pieces (filter extensions, list column, narrower domain, "Part Processes" action + menu). Keeps the dependency direction clean — configurator always depends on core, never the other way. 2. Added a "Process" smart button to the part form's button box. Shows either a green check (composed) or "None" (not yet composed) and opens the part-scoped Composer on click. Gives users one-tap access from any part form without hunting through the Process tab. fusion_plating → 19.0.8.0.0 fusion_plating_configurator → 19.0.13.1.0 Co-Authored-By: Claude Opus 4.7 (1M context) --- fusion_plating/fusion_plating/__manifest__.py | 2 +- .../views/fp_process_node_views.xml | 7 ++ .../__manifest__.py | 3 +- .../views/fp_part_catalog_views.xml | 20 ++++ .../fp_process_node_part_scoped_views.xml | 96 +++++++++++++++++++ 5 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 fusion_plating/fusion_plating_configurator/views/fp_process_node_part_scoped_views.xml diff --git a/fusion_plating/fusion_plating/__manifest__.py b/fusion_plating/fusion_plating/__manifest__.py index 0289596c..f1b5344f 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.7.4.0', + 'version': '19.0.8.0.0', 'category': 'Manufacturing/Plating', 'summary': 'Core plating / metal finishing ERP: facilities, processes, tanks, baths, jobs, operators.', 'description': """ diff --git a/fusion_plating/fusion_plating/views/fp_process_node_views.xml b/fusion_plating/fusion_plating/views/fp_process_node_views.xml index 55370a34..2a45f665 100644 --- a/fusion_plating/fusion_plating/views/fp_process_node_views.xml +++ b/fusion_plating/fusion_plating/views/fp_process_node_views.xml @@ -161,6 +161,7 @@ domain="[('node_type', '=', 'sub_process')]"/> + + + Process Recipes fusion.plating.process.node diff --git a/fusion_plating/fusion_plating_configurator/__manifest__.py b/fusion_plating/fusion_plating_configurator/__manifest__.py index 4a5bf77b..71dffecc 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.13.0.0', + 'version': '19.0.13.1.0', 'category': 'Manufacturing/Plating', 'summary': 'Quotation configurator with part catalog, coating configs, and formula-based pricing engine.', 'description': """ @@ -42,6 +42,7 @@ Provides: 'data/fp_treatment_data.xml', 'views/fp_treatment_views.xml', 'views/fp_part_catalog_views.xml', + 'views/fp_process_node_part_scoped_views.xml', 'views/fp_coating_config_views.xml', 'views/fp_pricing_rule_views.xml', 'views/fp_customer_price_list_views.xml', diff --git a/fusion_plating/fusion_plating_configurator/views/fp_part_catalog_views.xml b/fusion_plating/fusion_plating_configurator/views/fp_part_catalog_views.xml index e1b74200..902bf298 100644 --- a/fusion_plating/fusion_plating_configurator/views/fp_part_catalog_views.xml +++ b/fusion_plating/fusion_plating_configurator/views/fp_part_catalog_views.xml @@ -83,6 +83,26 @@ context="{'search_default_part_catalog_id': id, 'default_part_catalog_id': id}"> + + diff --git a/fusion_plating/fusion_plating_configurator/views/fp_process_node_part_scoped_views.xml b/fusion_plating/fusion_plating_configurator/views/fp_process_node_part_scoped_views.xml new file mode 100644 index 00000000..9e55200a --- /dev/null +++ b/fusion_plating/fusion_plating_configurator/views/fp_process_node_part_scoped_views.xml @@ -0,0 +1,96 @@ + + + + + + + fusion.plating.process.node.search.part.scoped + fusion.plating.process.node + + + + + + + + + + + + + + + + fusion.plating.process.node.tree.part.scoped + fusion.plating.process.node + + + + + + + + + + + [('node_type', '=', 'recipe'), ('part_catalog_id', '=', False)] + {'default_node_type': 'recipe', 'search_default_recipes_only': 1, 'search_default_templates_only': 1} + + + + + Part Processes + fusion.plating.process.node + list,form + [('node_type', '=', 'recipe'), ('part_catalog_id', '!=', False)] + {'search_default_part_scoped': 1, 'search_default_group_part': 1} + + +

+ No part-customised processes yet +

+

+ This view lists every process tree that has been + composed for a specific part via the part form's + Compose button. Each row is a clone of a shared + template with per-part tweaks. To browse the shared + templates themselves, use Process Recipes. +

+
+
+ + + +