New model fusion.plating.process.node with _parent_store hierarchy for defining reusable plating recipes. Node types: recipe, sub_process, operation, step. Includes companion model for operator input definitions. Full OWL tree editor (client action) with: - Hierarchical tree with connector lines and type-coloured borders - Click-to-edit side panel with save - Add/delete child nodes inline - Drag & drop reorder and reparent - Theme-aware SCSS (light + dark mode) - Demo data: Electroless Nickel Plating — Steel Line (30+ nodes) Backend: 7 JSON-RPC endpoints for tree CRUD, reorder, move, duplicate. Security: 3-tier ACL (operator read / supervisor write / manager full). Menu: Process Recipes under Plating > Operations. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
263 lines
12 KiB
XML
263 lines
12 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!--
|
|
Copyright 2026 Nexa Systems Inc.
|
|
License OPL-1 (Odoo Proprietary License v1.0)
|
|
Demo recipe: Electroless Nickel Plating — Steel Line
|
|
-->
|
|
<odoo>
|
|
<data noupdate="1">
|
|
|
|
<!-- ===== ROOT: Electroless Nickel Plating — Steel Line ===== -->
|
|
<record id="demo_recipe_en_steel" model="fusion.plating.process.node">
|
|
<field name="name">Electroless Nickel Plating — Steel Line</field>
|
|
<field name="code">EN_STEEL</field>
|
|
<field name="node_type">recipe</field>
|
|
<field name="icon">fa-flask</field>
|
|
<field name="sequence">10</field>
|
|
<field name="customer_visible">True</field>
|
|
</record>
|
|
|
|
<!-- 1. Blasting -->
|
|
<record id="demo_node_blasting" model="fusion.plating.process.node">
|
|
<field name="name">Blasting</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="demo_recipe_en_steel"/>
|
|
<field name="icon">fa-bullseye</field>
|
|
<field name="sequence">10</field>
|
|
<field name="estimated_duration">30</field>
|
|
<field name="is_manual">True</field>
|
|
</record>
|
|
<record id="demo_step_ready_blast" model="fusion.plating.process.node">
|
|
<field name="name">Ready for Blast</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="demo_node_blasting"/>
|
|
<field name="icon">fa-clock-o</field>
|
|
<field name="sequence">10</field>
|
|
</record>
|
|
<record id="demo_step_blast" model="fusion.plating.process.node">
|
|
<field name="name">Blast</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="demo_node_blasting"/>
|
|
<field name="icon">fa-fire</field>
|
|
<field name="sequence">20</field>
|
|
<field name="requires_signoff">True</field>
|
|
</record>
|
|
|
|
<!-- 2. Masking -->
|
|
<record id="demo_node_masking" model="fusion.plating.process.node">
|
|
<field name="name">Masking</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="demo_recipe_en_steel"/>
|
|
<field name="icon">fa-paint-brush</field>
|
|
<field name="sequence">20</field>
|
|
<field name="estimated_duration">45</field>
|
|
<field name="is_manual">True</field>
|
|
</record>
|
|
<record id="demo_step_ready_mask" model="fusion.plating.process.node">
|
|
<field name="name">Ready for Masking</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="demo_node_masking"/>
|
|
<field name="sequence">10</field>
|
|
</record>
|
|
<record id="demo_step_mask" model="fusion.plating.process.node">
|
|
<field name="name">Masking</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="demo_node_masking"/>
|
|
<field name="icon">fa-paint-brush</field>
|
|
<field name="sequence">20</field>
|
|
<field name="requires_signoff">True</field>
|
|
</record>
|
|
|
|
<!-- 3. Racking -->
|
|
<record id="demo_node_racking" model="fusion.plating.process.node">
|
|
<field name="name">Racking</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="demo_recipe_en_steel"/>
|
|
<field name="icon">fa-th</field>
|
|
<field name="sequence">30</field>
|
|
<field name="estimated_duration">20</field>
|
|
</record>
|
|
|
|
<!-- 4. Steel Line (sub-process with many children) -->
|
|
<record id="demo_node_steel_line" model="fusion.plating.process.node">
|
|
<field name="name">Steel Line</field>
|
|
<field name="node_type">sub_process</field>
|
|
<field name="parent_id" ref="demo_recipe_en_steel"/>
|
|
<field name="icon">fa-industry</field>
|
|
<field name="sequence">40</field>
|
|
<field name="auto_complete">True</field>
|
|
</record>
|
|
|
|
<!-- 4a. Cleaner (sub-process inside Steel Line) -->
|
|
<record id="demo_node_cleaner" model="fusion.plating.process.node">
|
|
<field name="name">Cleaner</field>
|
|
<field name="node_type">sub_process</field>
|
|
<field name="parent_id" ref="demo_node_steel_line"/>
|
|
<field name="icon">fa-shower</field>
|
|
<field name="sequence">10</field>
|
|
</record>
|
|
<record id="demo_step_soak_clean" model="fusion.plating.process.node">
|
|
<field name="name">Soak Clean (S-3)</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="demo_node_cleaner"/>
|
|
<field name="sequence">10</field>
|
|
<field name="estimated_duration">10</field>
|
|
<field name="is_manual">False</field>
|
|
</record>
|
|
<record id="demo_step_electroclean" model="fusion.plating.process.node">
|
|
<field name="name">Electroclean (S-3)</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="demo_node_cleaner"/>
|
|
<field name="sequence">20</field>
|
|
<field name="estimated_duration">5</field>
|
|
<field name="is_manual">False</field>
|
|
</record>
|
|
<record id="demo_step_primary_rinse_1" model="fusion.plating.process.node">
|
|
<field name="name">Primary Rinse (S-4)</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="demo_node_cleaner"/>
|
|
<field name="sequence">30</field>
|
|
<field name="is_manual">False</field>
|
|
</record>
|
|
|
|
<!-- 4b. Acid Dip -->
|
|
<record id="demo_node_acid_dip" model="fusion.plating.process.node">
|
|
<field name="name">Acid Dip (S-5)</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="demo_node_steel_line"/>
|
|
<field name="icon">fa-flask</field>
|
|
<field name="sequence">20</field>
|
|
<field name="estimated_duration">5</field>
|
|
<field name="is_manual">False</field>
|
|
</record>
|
|
|
|
<!-- 4c. Nickel Strike -->
|
|
<record id="demo_node_nickel_strike" model="fusion.plating.process.node">
|
|
<field name="name">Nickel Strike (S-7 / SP-5)</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="demo_node_steel_line"/>
|
|
<field name="icon">fa-bolt</field>
|
|
<field name="sequence">30</field>
|
|
<field name="estimated_duration">8</field>
|
|
<field name="is_manual">False</field>
|
|
<field name="requires_signoff">True</field>
|
|
</record>
|
|
|
|
<!-- 4d. E-Nickel Plate (Mid Phos) -->
|
|
<record id="demo_node_en_plate" model="fusion.plating.process.node">
|
|
<field name="name">E-Nickel Plate (Mid Phos) (S-9)</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="demo_node_steel_line"/>
|
|
<field name="icon">fa-diamond</field>
|
|
<field name="sequence">40</field>
|
|
<field name="estimated_duration">90</field>
|
|
<field name="is_manual">False</field>
|
|
<field name="requires_signoff">True</field>
|
|
</record>
|
|
<record id="demo_step_rinse_after_plate" model="fusion.plating.process.node">
|
|
<field name="name">Primary Rinse (S-11)</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="demo_node_en_plate"/>
|
|
<field name="sequence">10</field>
|
|
<field name="is_manual">False</field>
|
|
</record>
|
|
<record id="demo_step_hot_rinse" model="fusion.plating.process.node">
|
|
<field name="name">Hot Rinse (S-13)</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="demo_node_en_plate"/>
|
|
<field name="sequence">20</field>
|
|
<field name="is_manual">False</field>
|
|
</record>
|
|
|
|
<!-- 4e. Hot Water Porosity -->
|
|
<record id="demo_node_porosity" model="fusion.plating.process.node">
|
|
<field name="name">Hot Water Porosity (A-15)</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="demo_node_steel_line"/>
|
|
<field name="icon">fa-tint</field>
|
|
<field name="sequence">50</field>
|
|
<field name="estimated_duration">15</field>
|
|
<field name="requires_signoff">True</field>
|
|
</record>
|
|
|
|
<!-- 4f. Dry -->
|
|
<record id="demo_node_dry" model="fusion.plating.process.node">
|
|
<field name="name">Dry</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="demo_node_steel_line"/>
|
|
<field name="icon">fa-sun-o</field>
|
|
<field name="sequence">60</field>
|
|
<field name="is_manual">False</field>
|
|
</record>
|
|
|
|
<!-- 5. Oven Baking -->
|
|
<record id="demo_node_oven_bake" model="fusion.plating.process.node">
|
|
<field name="name">Oven Baking</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="demo_recipe_en_steel"/>
|
|
<field name="icon">fa-fire</field>
|
|
<field name="sequence">50</field>
|
|
<field name="estimated_duration">240</field>
|
|
<field name="is_manual">False</field>
|
|
<field name="requires_signoff">True</field>
|
|
</record>
|
|
|
|
<!-- 6. De-racking -->
|
|
<record id="demo_node_derack" model="fusion.plating.process.node">
|
|
<field name="name">De-Racking</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="demo_recipe_en_steel"/>
|
|
<field name="icon">fa-th</field>
|
|
<field name="sequence">60</field>
|
|
<field name="estimated_duration">15</field>
|
|
</record>
|
|
|
|
<!-- 7. De-Masking -->
|
|
<record id="demo_node_demask" model="fusion.plating.process.node">
|
|
<field name="name">De-Masking</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="demo_recipe_en_steel"/>
|
|
<field name="icon">fa-eraser</field>
|
|
<field name="sequence">70</field>
|
|
<field name="estimated_duration">20</field>
|
|
</record>
|
|
|
|
<!-- 8. Oven Bake (Post De-Rack) -->
|
|
<record id="demo_node_post_bake" model="fusion.plating.process.node">
|
|
<field name="name">Oven Bake (Post De-Rack)</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="demo_recipe_en_steel"/>
|
|
<field name="icon">fa-fire</field>
|
|
<field name="sequence">80</field>
|
|
<field name="estimated_duration">120</field>
|
|
<field name="is_manual">False</field>
|
|
</record>
|
|
|
|
<!-- 9. Post Plate Inspection -->
|
|
<record id="demo_node_inspection" model="fusion.plating.process.node">
|
|
<field name="name">Post Plate Inspection</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="demo_recipe_en_steel"/>
|
|
<field name="icon">fa-search</field>
|
|
<field name="sequence">90</field>
|
|
<field name="estimated_duration">30</field>
|
|
<field name="requires_signoff">True</field>
|
|
</record>
|
|
<record id="demo_step_ready_inspect" model="fusion.plating.process.node">
|
|
<field name="name">Ready for Post Plate Inspection</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="demo_node_inspection"/>
|
|
<field name="sequence">10</field>
|
|
</record>
|
|
<record id="demo_step_inspect" model="fusion.plating.process.node">
|
|
<field name="name">Post Plate Inspection</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="demo_node_inspection"/>
|
|
<field name="icon">fa-check-circle</field>
|
|
<field name="sequence">20</field>
|
|
<field name="requires_signoff">True</field>
|
|
</record>
|
|
|
|
</data>
|
|
</odoo>
|