CRITICAL BUG: 5 of 6 seeded recipe files had <data noupdate="0"> which caused EVERY module upgrade to re-import the recipe and overwrite any user customisations to the base recipe (renamed steps, added child nodes, custom prompts on seeded steps). Files fixed (now noupdate="1"): - fp_recipe_enp_alum_basic.xml - fp_recipe_enp_steel_basic.xml - fp_recipe_enp_sp.xml - fp_recipe_anodize.xml - fp_recipe_chem_conversion.xml (fp_recipe_general_processing.xml was already correctly noupdate=1.) Companion entech-side action (not in this commit, executed via SQL during the fix session): 200 ir.model.data rows for the affected process_node + process_node_input records were updated to noupdate=true so the next module upgrade will skip them entirely and respect the user's current state. Recovery for users whose base recipe edits were already lost: the variants (part-cloned recipes that share the recipe name) were untouched because they have no XML xmlid match. The customisations are preserved in the variants and can be lifted back to the base recipe via the simple/tree editor. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
387 lines
19 KiB
XML
387 lines
19 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!--
|
|
Copyright 2026 Nexa Systems Inc.
|
|
License OPL-1 (Odoo Proprietary License v1.0)
|
|
Recipe: ANODIZE (Sulfuric Anodize — Type II)
|
|
Source: Client's Steelhead export (April 2026 transcription).
|
|
|
|
Anodize is an umbrella workflow covering pre-treatment, the wet
|
|
anodize line (alkaline clean → etch → deoxidize → sulfuric anodize
|
|
→ hot water seal), and post-treatment (dry, unrack, de-mask).
|
|
|
|
Tree:
|
|
ANODIZE (recipe)
|
|
Ready for Solvent Clean (1) (sub-process, auto)
|
|
Solvent Clean (1) (operation, customer-visible)
|
|
Blasting (sub-process, signoff, auto)
|
|
Ready For Blast (operation)
|
|
Blast (operation, customer-visible)
|
|
Masking (sub-process, signoff, auto)
|
|
Ready For Masking (operation)
|
|
Masking (operation, customer-visible)
|
|
Racking (sub-process, auto)
|
|
Ready for Racking (operation)
|
|
Racking (operation, customer-visible)
|
|
Anodize Line (sub-process, auto)
|
|
Ready For Anodize (operation)
|
|
Alkaline Clean (Tank A1) (operation, customer-visible)
|
|
Primary Rinse (Tank A2)
|
|
Secondary Rinse (Tank A4)
|
|
Etch (Tank A3) (operation, customer-visible)
|
|
Primary Rinse (Tank A4)
|
|
Secondary Rinse (Tank A6)
|
|
Deoxidize (Tank A5) (operation, customer-visible)
|
|
Primary Rinse (Tank A6)
|
|
Secondary Rinse (Tank A8)
|
|
Sulfuric Anodize (operation, auto)
|
|
Sulfuric Anodize Ramp (Tank A9)
|
|
Sulfuric Anodize (Tank A9) (operation, signoff, customer-visible)
|
|
Primary Rinse (Tank A8)
|
|
Secondary Rinse (Tank A12)
|
|
Hot Rinse (Tank A17)
|
|
Hot Water Seal (Tank A16) (operation, customer-visible)
|
|
Primary Rinse (Tank A12)
|
|
Hot Rinse (Tank A17) (customer-visible)
|
|
Anodize Dry (sub-process)
|
|
Unracking (sub-process, auto)
|
|
Ready for Unrack (operation)
|
|
Unracking (operation, customer-visible)
|
|
De-Masking (sub-process, signoff, auto)
|
|
Ready for De-Masking (operation)
|
|
De-Masking (operation, customer-visible)
|
|
-->
|
|
<odoo>
|
|
<data noupdate="1">
|
|
|
|
<!-- ========================= ROOT ========================= -->
|
|
<record id="recipe_anodize" model="fusion.plating.process.node">
|
|
<field name="name">Anodize</field>
|
|
<field name="code">ANODIZE</field>
|
|
<field name="node_type">recipe</field>
|
|
<field name="icon">fa-flask</field>
|
|
<field name="sequence">50</field>
|
|
<field name="auto_complete">True</field>
|
|
<field name="customer_visible">False</field>
|
|
</record>
|
|
|
|
<!-- ========================= 1. Ready for Solvent Clean (1) ========================= -->
|
|
<record id="anodize_ready_solvent_clean" model="fusion.plating.process.node">
|
|
<field name="name">Ready for Solvent Clean (1)</field>
|
|
<field name="node_type">sub_process</field>
|
|
<field name="parent_id" ref="recipe_anodize"/>
|
|
<field name="icon">fa-shower</field>
|
|
<field name="sequence">10</field>
|
|
<field name="auto_complete">True</field>
|
|
</record>
|
|
<record id="anodize_solvent_clean" model="fusion.plating.process.node">
|
|
<field name="name">Solvent Clean (1)</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="anodize_ready_solvent_clean"/>
|
|
<field name="icon">fa-shower</field>
|
|
<field name="sequence">10</field>
|
|
<field name="customer_visible">True</field>
|
|
</record>
|
|
|
|
<!-- ========================= 2. Blasting ========================= -->
|
|
<record id="anodize_blasting" model="fusion.plating.process.node">
|
|
<field name="name">Blasting</field>
|
|
<field name="node_type">sub_process</field>
|
|
<field name="parent_id" ref="recipe_anodize"/>
|
|
<field name="icon">fa-bullseye</field>
|
|
<field name="sequence">20</field>
|
|
<field name="auto_complete">True</field>
|
|
<field name="requires_signoff">True</field>
|
|
</record>
|
|
<record id="anodize_blasting_ready" model="fusion.plating.process.node">
|
|
<field name="name">Ready For Blast</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="anodize_blasting"/>
|
|
<field name="icon">fa-clock-o</field>
|
|
<field name="sequence">10</field>
|
|
</record>
|
|
<record id="anodize_blasting_do" model="fusion.plating.process.node">
|
|
<field name="name">Blast</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="anodize_blasting"/>
|
|
<field name="icon">fa-bullseye</field>
|
|
<field name="sequence">20</field>
|
|
<field name="customer_visible">True</field>
|
|
</record>
|
|
|
|
<!-- ========================= 3. Masking ========================= -->
|
|
<record id="anodize_masking" model="fusion.plating.process.node">
|
|
<field name="name">Masking</field>
|
|
<field name="node_type">sub_process</field>
|
|
<field name="parent_id" ref="recipe_anodize"/>
|
|
<field name="icon">fa-paint-brush</field>
|
|
<field name="sequence">30</field>
|
|
<field name="auto_complete">True</field>
|
|
<field name="requires_signoff">True</field>
|
|
</record>
|
|
<record id="anodize_masking_ready" model="fusion.plating.process.node">
|
|
<field name="name">Ready For Masking</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="anodize_masking"/>
|
|
<field name="icon">fa-clock-o</field>
|
|
<field name="sequence">10</field>
|
|
</record>
|
|
<record id="anodize_masking_do" model="fusion.plating.process.node">
|
|
<field name="name">Masking</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="anodize_masking"/>
|
|
<field name="icon">fa-paint-brush</field>
|
|
<field name="sequence">20</field>
|
|
<field name="customer_visible">True</field>
|
|
</record>
|
|
|
|
<!-- ========================= 4. Racking ========================= -->
|
|
<record id="anodize_racking" model="fusion.plating.process.node">
|
|
<field name="name">Racking</field>
|
|
<field name="node_type">sub_process</field>
|
|
<field name="parent_id" ref="recipe_anodize"/>
|
|
<field name="icon">fa-th</field>
|
|
<field name="sequence">40</field>
|
|
<field name="auto_complete">True</field>
|
|
</record>
|
|
<record id="anodize_racking_ready" model="fusion.plating.process.node">
|
|
<field name="name">Ready for Racking</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="anodize_racking"/>
|
|
<field name="icon">fa-clock-o</field>
|
|
<field name="sequence">10</field>
|
|
</record>
|
|
<record id="anodize_racking_do" model="fusion.plating.process.node">
|
|
<field name="name">Racking</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="anodize_racking"/>
|
|
<field name="icon">fa-th</field>
|
|
<field name="sequence">20</field>
|
|
<field name="customer_visible">True</field>
|
|
</record>
|
|
|
|
<!-- ========================= 5. Anodize Line (sub-process) ========================= -->
|
|
<record id="anodize_line" model="fusion.plating.process.node">
|
|
<field name="name">Anodize Line</field>
|
|
<field name="node_type">sub_process</field>
|
|
<field name="parent_id" ref="recipe_anodize"/>
|
|
<field name="icon">fa-industry</field>
|
|
<field name="sequence">50</field>
|
|
<field name="auto_complete">True</field>
|
|
</record>
|
|
|
|
<!-- 5a. Ready For Anodize -->
|
|
<record id="anodize_line_ready" model="fusion.plating.process.node">
|
|
<field name="name">Ready For Anodize</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="anodize_line"/>
|
|
<field name="icon">fa-clock-o</field>
|
|
<field name="sequence">10</field>
|
|
</record>
|
|
|
|
<!-- 5b. Alkaline Clean (Tank A-1) -->
|
|
<record id="anodize_alkaline_clean" model="fusion.plating.process.node">
|
|
<field name="name">Alkaline Clean (Tank A-1)</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="anodize_line"/>
|
|
<field name="icon">fa-shower</field>
|
|
<field name="sequence">20</field>
|
|
<field name="customer_visible">True</field>
|
|
</record>
|
|
<record id="anodize_alkaline_primary_rinse" model="fusion.plating.process.node">
|
|
<field name="name">Primary Rinse (Tank A-2)</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="anodize_alkaline_clean"/>
|
|
<field name="icon">fa-tint</field>
|
|
<field name="sequence">10</field>
|
|
</record>
|
|
<record id="anodize_alkaline_secondary_rinse" model="fusion.plating.process.node">
|
|
<field name="name">Secondary Rinse (Tank A-4)</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="anodize_alkaline_clean"/>
|
|
<field name="icon">fa-tint</field>
|
|
<field name="sequence">20</field>
|
|
</record>
|
|
|
|
<!-- 5c. Etch (Tank A-3) -->
|
|
<record id="anodize_etch" model="fusion.plating.process.node">
|
|
<field name="name">Etch (Tank A-3)</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="anodize_line"/>
|
|
<field name="icon">fa-flask</field>
|
|
<field name="sequence">30</field>
|
|
<field name="customer_visible">True</field>
|
|
</record>
|
|
<record id="anodize_etch_primary_rinse" model="fusion.plating.process.node">
|
|
<field name="name">Primary Rinse (Tank A-4)</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="anodize_etch"/>
|
|
<field name="icon">fa-tint</field>
|
|
<field name="sequence">10</field>
|
|
</record>
|
|
<record id="anodize_etch_secondary_rinse" model="fusion.plating.process.node">
|
|
<field name="name">Secondary Rinse (Tank A-6)</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="anodize_etch"/>
|
|
<field name="icon">fa-tint</field>
|
|
<field name="sequence">20</field>
|
|
</record>
|
|
|
|
<!-- 5d. Deoxidize (Tank A-5) -->
|
|
<record id="anodize_deoxidize" model="fusion.plating.process.node">
|
|
<field name="name">Deoxidize (Tank A-5)</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="anodize_line"/>
|
|
<field name="icon">fa-flask</field>
|
|
<field name="sequence">40</field>
|
|
<field name="customer_visible">True</field>
|
|
</record>
|
|
<record id="anodize_deoxidize_primary_rinse" model="fusion.plating.process.node">
|
|
<field name="name">Primary Rinse (Tank A-6)</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="anodize_deoxidize"/>
|
|
<field name="icon">fa-tint</field>
|
|
<field name="sequence">10</field>
|
|
</record>
|
|
<record id="anodize_deoxidize_secondary_rinse" model="fusion.plating.process.node">
|
|
<field name="name">Secondary Rinse (Tank A-8)</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="anodize_deoxidize"/>
|
|
<field name="icon">fa-tint</field>
|
|
<field name="sequence">20</field>
|
|
</record>
|
|
|
|
<!-- 5e. Sulfuric Anodize (operation container) -->
|
|
<record id="anodize_sulfuric" model="fusion.plating.process.node">
|
|
<field name="name">Sulfuric Anodize</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="anodize_line"/>
|
|
<field name="icon">fa-bolt</field>
|
|
<field name="sequence">50</field>
|
|
<field name="auto_complete">True</field>
|
|
</record>
|
|
<record id="anodize_sulfuric_ramp" model="fusion.plating.process.node">
|
|
<field name="name">Sulfuric Anodize Ramp (Tank A-9)</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="anodize_sulfuric"/>
|
|
<field name="icon">fa-bolt</field>
|
|
<field name="sequence">10</field>
|
|
</record>
|
|
<record id="anodize_sulfuric_do" model="fusion.plating.process.node">
|
|
<field name="name">Sulfuric Anodize (Tank A-9)</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="anodize_sulfuric"/>
|
|
<field name="icon">fa-bolt</field>
|
|
<field name="sequence">20</field>
|
|
<field name="requires_signoff">True</field>
|
|
<field name="customer_visible">True</field>
|
|
</record>
|
|
<record id="anodize_sulfuric_do_primary_rinse" model="fusion.plating.process.node">
|
|
<field name="name">Primary Rinse (Tank A-8)</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="anodize_sulfuric_do"/>
|
|
<field name="icon">fa-tint</field>
|
|
<field name="sequence">10</field>
|
|
</record>
|
|
<record id="anodize_sulfuric_do_secondary_rinse" model="fusion.plating.process.node">
|
|
<field name="name">Secondary Rinse (Tank A-12)</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="anodize_sulfuric_do"/>
|
|
<field name="icon">fa-tint</field>
|
|
<field name="sequence">20</field>
|
|
</record>
|
|
<record id="anodize_sulfuric_do_hot_rinse" model="fusion.plating.process.node">
|
|
<field name="name">Hot Rinse (Tank A-17)</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="anodize_sulfuric_do"/>
|
|
<field name="icon">fa-thermometer-half</field>
|
|
<field name="sequence">30</field>
|
|
</record>
|
|
|
|
<!-- 5f. Hot Water Seal (Tank A-16) -->
|
|
<record id="anodize_hot_water_seal" model="fusion.plating.process.node">
|
|
<field name="name">Hot Water Seal (Tank A-16)</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="anodize_line"/>
|
|
<field name="icon">fa-tint</field>
|
|
<field name="sequence">60</field>
|
|
<field name="customer_visible">True</field>
|
|
</record>
|
|
<record id="anodize_hot_water_seal_primary_rinse" model="fusion.plating.process.node">
|
|
<field name="name">Primary Rinse (Tank A-12)</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="anodize_hot_water_seal"/>
|
|
<field name="icon">fa-tint</field>
|
|
<field name="sequence">10</field>
|
|
</record>
|
|
<record id="anodize_hot_water_seal_hot_rinse" model="fusion.plating.process.node">
|
|
<field name="name">Hot Rinse (Tank A-17)</field>
|
|
<field name="node_type">step</field>
|
|
<field name="parent_id" ref="anodize_hot_water_seal"/>
|
|
<field name="icon">fa-thermometer-half</field>
|
|
<field name="sequence">20</field>
|
|
<field name="customer_visible">True</field>
|
|
</record>
|
|
|
|
<!-- ========================= 6. Anodize Dry ========================= -->
|
|
<record id="anodize_dry" model="fusion.plating.process.node">
|
|
<field name="name">Anodize Dry</field>
|
|
<field name="node_type">sub_process</field>
|
|
<field name="parent_id" ref="recipe_anodize"/>
|
|
<field name="icon">fa-sun-o</field>
|
|
<field name="sequence">60</field>
|
|
</record>
|
|
|
|
<!-- ========================= 7. Unracking ========================= -->
|
|
<record id="anodize_unracking" model="fusion.plating.process.node">
|
|
<field name="name">Unracking</field>
|
|
<field name="node_type">sub_process</field>
|
|
<field name="parent_id" ref="recipe_anodize"/>
|
|
<field name="icon">fa-th</field>
|
|
<field name="sequence">70</field>
|
|
<field name="auto_complete">True</field>
|
|
</record>
|
|
<record id="anodize_unracking_ready" model="fusion.plating.process.node">
|
|
<field name="name">Ready for Unrack</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="anodize_unracking"/>
|
|
<field name="icon">fa-clock-o</field>
|
|
<field name="sequence">10</field>
|
|
</record>
|
|
<record id="anodize_unracking_do" model="fusion.plating.process.node">
|
|
<field name="name">Unracking</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="anodize_unracking"/>
|
|
<field name="icon">fa-th</field>
|
|
<field name="sequence">20</field>
|
|
<field name="customer_visible">True</field>
|
|
</record>
|
|
|
|
<!-- ========================= 8. De-Masking ========================= -->
|
|
<record id="anodize_demasking" model="fusion.plating.process.node">
|
|
<field name="name">De-Masking</field>
|
|
<field name="node_type">sub_process</field>
|
|
<field name="parent_id" ref="recipe_anodize"/>
|
|
<field name="icon">fa-eraser</field>
|
|
<field name="sequence">80</field>
|
|
<field name="auto_complete">True</field>
|
|
<field name="requires_signoff">True</field>
|
|
</record>
|
|
<record id="anodize_demasking_ready" model="fusion.plating.process.node">
|
|
<field name="name">Ready for De-Masking</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="anodize_demasking"/>
|
|
<field name="icon">fa-clock-o</field>
|
|
<field name="sequence">10</field>
|
|
</record>
|
|
<record id="anodize_demasking_do" model="fusion.plating.process.node">
|
|
<field name="name">De-Masking</field>
|
|
<field name="node_type">operation</field>
|
|
<field name="parent_id" ref="anodize_demasking"/>
|
|
<field name="icon">fa-eraser</field>
|
|
<field name="sequence">20</field>
|
|
<field name="customer_visible">True</field>
|
|
</record>
|
|
|
|
</data>
|
|
</odoo>
|