folder rename
This commit is contained in:
127
fusion_plating/fusion_plating/views/fp_bath_log_views.xml
Normal file
127
fusion_plating/fusion_plating/views/fp_bath_log_views.xml
Normal file
@@ -0,0 +1,127 @@
|
||||
<?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.
|
||||
-->
|
||||
<odoo>
|
||||
|
||||
<record id="view_fp_bath_log_list" model="ir.ui.view">
|
||||
<field name="name">fp.bath.log.list</field>
|
||||
<field name="model">fusion.plating.bath.log</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Bath Logs"
|
||||
decoration-success="status == 'ok'"
|
||||
decoration-warning="status == 'warning'"
|
||||
decoration-danger="status == 'out_of_spec'">
|
||||
<field name="name"/>
|
||||
<field name="log_date"/>
|
||||
<field name="bath_id"/>
|
||||
<field name="tank_id" optional="show"/>
|
||||
<field name="process_type_id" optional="show"/>
|
||||
<field name="operator_id"/>
|
||||
<field name="shift" optional="hide"/>
|
||||
<field name="status" widget="badge"
|
||||
decoration-success="status == 'ok'"
|
||||
decoration-warning="status == 'warning'"
|
||||
decoration-danger="status == 'out_of_spec'"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_fp_bath_log_form" model="ir.ui.view">
|
||||
<field name="name">fp.bath.log.form</field>
|
||||
<field name="model">fusion.plating.bath.log</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Bath Log">
|
||||
<sheet>
|
||||
<div class="oe_title">
|
||||
<h1><field name="name" readonly="1"/></h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="bath_id"/>
|
||||
<field name="tank_id" readonly="1"/>
|
||||
<field name="process_type_id" readonly="1"/>
|
||||
<field name="facility_id" readonly="1" groups="base.group_multi_company"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="log_date"/>
|
||||
<field name="operator_id"/>
|
||||
<field name="shift"/>
|
||||
<field name="status" readonly="1" widget="badge"
|
||||
decoration-success="status == 'ok'"
|
||||
decoration-warning="status == 'warning'"
|
||||
decoration-danger="status == 'out_of_spec'"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Readings">
|
||||
<field name="line_ids">
|
||||
<list editable="bottom"
|
||||
decoration-success="status == 'ok'"
|
||||
decoration-warning="status == 'warning'"
|
||||
decoration-danger="status == 'out_of_spec'">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="parameter_id"/>
|
||||
<field name="value"/>
|
||||
<field name="uom"/>
|
||||
<field name="target_min"/>
|
||||
<field name="target_max"/>
|
||||
<field name="status" widget="badge"
|
||||
decoration-success="status == 'ok'"
|
||||
decoration-warning="status == 'warning'"
|
||||
decoration-danger="status == 'out_of_spec'"/>
|
||||
<field name="notes"/>
|
||||
</list>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Notes">
|
||||
<field name="notes"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<chatter/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_fp_bath_log_search" model="ir.ui.view">
|
||||
<field name="name">fp.bath.log.search</field>
|
||||
<field name="model">fusion.plating.bath.log</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Bath Logs">
|
||||
<field name="name"/>
|
||||
<field name="bath_id"/>
|
||||
<field name="tank_id"/>
|
||||
<field name="process_type_id"/>
|
||||
<field name="operator_id"/>
|
||||
<separator/>
|
||||
<filter string="OK" name="ok" domain="[('status','=','ok')]"/>
|
||||
<filter string="Warning" name="warn" domain="[('status','=','warning')]"/>
|
||||
<filter string="Out of Spec" name="oos" domain="[('status','=','out_of_spec')]"/>
|
||||
<separator/>
|
||||
<filter string="Today" name="today"
|
||||
domain="[('log_date','>=', context_today().strftime('%Y-%m-%d'))]"/>
|
||||
<filter string="This Week" name="week"
|
||||
domain="[('log_date','>=', (context_today() - relativedelta(days=7)).strftime('%Y-%m-%d'))]"/>
|
||||
<group>
|
||||
<filter string="Bath" name="group_bath" context="{'group_by':'bath_id'}"/>
|
||||
<filter string="Tank" name="group_tank" context="{'group_by':'tank_id'}"/>
|
||||
<filter string="Process" name="group_process" context="{'group_by':'process_type_id'}"/>
|
||||
<filter string="Operator" name="group_op" context="{'group_by':'operator_id'}"/>
|
||||
<filter string="Status" name="group_status" context="{'group_by':'status'}"/>
|
||||
<filter string="Day" name="group_day" context="{'group_by':'log_date:day'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_fp_bath_log" model="ir.actions.act_window">
|
||||
<field name="name">Bath Logs</field>
|
||||
<field name="res_model">fusion.plating.bath.log</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="search_view_id" ref="view_fp_bath_log_search"/>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
198
fusion_plating/fusion_plating/views/fp_bath_views.xml
Normal file
198
fusion_plating/fusion_plating/views/fp_bath_views.xml
Normal file
@@ -0,0 +1,198 @@
|
||||
<?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.
|
||||
-->
|
||||
<odoo>
|
||||
|
||||
<record id="view_fp_bath_list" model="ir.ui.view">
|
||||
<field name="name">fp.bath.list</field>
|
||||
<field name="model">fusion.plating.bath</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Baths" decoration-muted="state == 'dumped'"
|
||||
decoration-warning="last_log_status == 'warning'"
|
||||
decoration-danger="last_log_status == 'out_of_spec'">
|
||||
<field name="name"/>
|
||||
<field name="tank_id"/>
|
||||
<field name="process_type_id"/>
|
||||
<field name="facility_id" groups="base.group_multi_company"/>
|
||||
<field name="state" widget="badge"
|
||||
decoration-success="state == 'operational'"
|
||||
decoration-info="state == 'new'"
|
||||
decoration-warning="state == 'under_review'"
|
||||
decoration-danger="state == 'dump_scheduled'"
|
||||
decoration-muted="state == 'dumped'"/>
|
||||
<field name="mto_count"/>
|
||||
<field name="last_log_date"/>
|
||||
<field name="last_log_status" widget="badge"
|
||||
decoration-success="last_log_status == 'ok'"
|
||||
decoration-warning="last_log_status == 'warning'"
|
||||
decoration-danger="last_log_status == 'out_of_spec'"/>
|
||||
<field name="makeup_date" optional="hide"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_fp_bath_form" model="ir.ui.view">
|
||||
<field name="name">fp.bath.form</field>
|
||||
<field name="model">fusion.plating.bath</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Bath">
|
||||
<header>
|
||||
<button name="action_make_operational" string="Set Operational" type="object"
|
||||
class="oe_highlight" invisible="state != 'new'"/>
|
||||
<button name="action_mark_under_review" string="Flag for Review" type="object"
|
||||
invisible="state not in ('operational',)"/>
|
||||
<button name="action_schedule_dump" string="Schedule Dump" type="object"
|
||||
invisible="state not in ('operational','under_review')"/>
|
||||
<button name="action_dump" string="Dump" type="object"
|
||||
invisible="state != 'dump_scheduled'"/>
|
||||
<field name="state" widget="statusbar"
|
||||
statusbar_visible="new,operational,under_review,dump_scheduled,dumped"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button name="%(action_fp_bath_log)d" type="action" class="oe_stat_button" icon="fa-flask"
|
||||
context="{'search_default_bath_id': id}">
|
||||
<field name="log_count" widget="statinfo" string="Logs"/>
|
||||
</button>
|
||||
</div>
|
||||
<div class="oe_title">
|
||||
<label for="name"/>
|
||||
<h1><field name="name" readonly="state != 'new'"/></h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="tank_id"/>
|
||||
<field name="process_type_id"/>
|
||||
<field name="facility_id" readonly="1"/>
|
||||
<field name="volume"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="makeup_date"/>
|
||||
<field name="makeup_by_id"/>
|
||||
<field name="mto_count" readonly="1"/>
|
||||
<field name="last_log_date" readonly="1"/>
|
||||
<field name="last_log_status" readonly="1" widget="badge"
|
||||
decoration-success="last_log_status == 'ok'"
|
||||
decoration-warning="last_log_status == 'warning'"
|
||||
decoration-danger="last_log_status == 'out_of_spec'"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Target Ranges">
|
||||
<field name="target_line_ids">
|
||||
<list editable="bottom">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="parameter_id"/>
|
||||
<field name="target_min"/>
|
||||
<field name="target_max"/>
|
||||
<field name="uom"/>
|
||||
</list>
|
||||
</field>
|
||||
<p class="text-muted mt-2">
|
||||
Per-bath target overrides. If empty, the parameter's default range is used.
|
||||
</p>
|
||||
</page>
|
||||
<page string="Chemistry Logs">
|
||||
<field name="log_ids" readonly="1">
|
||||
<list decoration-success="status == 'ok'"
|
||||
decoration-warning="status == 'warning'"
|
||||
decoration-danger="status == 'out_of_spec'">
|
||||
<field name="name"/>
|
||||
<field name="log_date"/>
|
||||
<field name="operator_id"/>
|
||||
<field name="shift"/>
|
||||
<field name="status"/>
|
||||
</list>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Notes">
|
||||
<field name="notes"/>
|
||||
</page>
|
||||
<page string="Dump" invisible="state not in ('dump_scheduled','dumped')">
|
||||
<group>
|
||||
<field name="dump_scheduled_date"/>
|
||||
<field name="dumped_date"/>
|
||||
<field name="dump_reason"/>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<chatter/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_fp_bath_kanban" model="ir.ui.view">
|
||||
<field name="name">fp.bath.kanban</field>
|
||||
<field name="model">fusion.plating.bath</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban default_group_by="state" class="o_fp_bath_kanban">
|
||||
<field name="id"/>
|
||||
<field name="name"/>
|
||||
<field name="tank_id"/>
|
||||
<field name="process_type_id"/>
|
||||
<field name="state"/>
|
||||
<field name="last_log_status"/>
|
||||
<field name="mto_count"/>
|
||||
<field name="status_color"/>
|
||||
<templates>
|
||||
<t t-name="card">
|
||||
<div class="o_fp_card o_fp_bath_card"
|
||||
t-att-data-log-status="record.last_log_status.raw_value">
|
||||
<div class="d-flex justify-content-between align-items-start">
|
||||
<strong class="o_fp_card_title"><field name="name"/></strong>
|
||||
<span class="o_fp_health_dot"
|
||||
t-att-data-status="record.last_log_status.raw_value or 'ok'"/>
|
||||
</div>
|
||||
<div class="small text-muted">
|
||||
<field name="process_type_id"/>
|
||||
</div>
|
||||
<div class="small"><i class="fa fa-flask me-1 text-muted"/><field name="tank_id"/></div>
|
||||
<div class="d-flex justify-content-between mt-2 small">
|
||||
<span class="text-muted">MTO</span>
|
||||
<span class="fw-bold"><field name="mto_count"/></span>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_fp_bath_search" model="ir.ui.view">
|
||||
<field name="name">fp.bath.search</field>
|
||||
<field name="model">fusion.plating.bath</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Baths">
|
||||
<field name="name"/>
|
||||
<field name="tank_id"/>
|
||||
<field name="process_type_id"/>
|
||||
<field name="facility_id"/>
|
||||
<separator/>
|
||||
<filter string="Operational" name="operational" domain="[('state','=','operational')]"/>
|
||||
<filter string="Under Review" name="review" domain="[('state','=','under_review')]"/>
|
||||
<filter string="Out of Spec" name="oos" domain="[('last_log_status','=','out_of_spec')]"/>
|
||||
<filter string="Warning" name="warn" domain="[('last_log_status','=','warning')]"/>
|
||||
<separator/>
|
||||
<filter string="Archived" name="inactive" domain="[('active','=',False)]"/>
|
||||
<group>
|
||||
<filter string="Facility" name="group_facility" context="{'group_by':'facility_id'}"/>
|
||||
<filter string="Process" name="group_process" context="{'group_by':'process_type_id'}"/>
|
||||
<filter string="Tank" name="group_tank" context="{'group_by':'tank_id'}"/>
|
||||
<filter string="Status" name="group_state" context="{'group_by':'state'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_fp_bath" model="ir.actions.act_window">
|
||||
<field name="name">Baths</field>
|
||||
<field name="res_model">fusion.plating.bath</field>
|
||||
<field name="view_mode">kanban,list,form</field>
|
||||
<field name="search_view_id" ref="view_fp_bath_search"/>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
156
fusion_plating/fusion_plating/views/fp_facility_views.xml
Normal file
156
fusion_plating/fusion_plating/views/fp_facility_views.xml
Normal file
@@ -0,0 +1,156 @@
|
||||
<?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.
|
||||
-->
|
||||
<odoo>
|
||||
|
||||
<record id="view_fp_facility_list" model="ir.ui.view">
|
||||
<field name="name">fp.facility.list</field>
|
||||
<field name="model">fusion.plating.facility</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Facilities">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="work_center_count"/>
|
||||
<field name="tank_count"/>
|
||||
<field name="capability_count"/>
|
||||
<field name="active" widget="boolean_toggle"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_fp_facility_form" model="ir.ui.view">
|
||||
<field name="name">fp.facility.form</field>
|
||||
<field name="model">fusion.plating.facility</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Facility">
|
||||
<header/>
|
||||
<sheet>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button name="%(action_fp_tank)d" type="action" class="oe_stat_button" icon="fa-flask"
|
||||
context="{'search_default_facility_id': id}">
|
||||
<field name="tank_count" widget="statinfo" string="Tanks"/>
|
||||
</button>
|
||||
<button name="%(action_fp_work_center)d" type="action" class="oe_stat_button" icon="fa-cogs"
|
||||
context="{'search_default_facility_id': id}">
|
||||
<field name="work_center_count" widget="statinfo" string="Work Centers"/>
|
||||
</button>
|
||||
</div>
|
||||
<div class="oe_title">
|
||||
<label for="name"/>
|
||||
<h1><field name="name" placeholder="e.g. Site A — Mississauga"/></h1>
|
||||
<div class="text-muted">
|
||||
<field name="code" placeholder="SITE-A"/>
|
||||
</div>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="sequence"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="active" widget="boolean_toggle"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Capabilities">
|
||||
<field name="capability_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
|
||||
<p class="text-muted mt-2">
|
||||
Process types this facility can perform. Install process packs
|
||||
(EN, chrome, anodize, black oxide) to populate the list.
|
||||
</p>
|
||||
</page>
|
||||
<page string="Work Centers">
|
||||
<field name="work_center_ids">
|
||||
<list>
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="tank_count"/>
|
||||
<field name="active" widget="boolean_toggle"/>
|
||||
</list>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Tanks">
|
||||
<field name="tank_ids">
|
||||
<list>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="work_center_id"/>
|
||||
<field name="current_process_id"/>
|
||||
<field name="state"/>
|
||||
</list>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<chatter/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_fp_facility_kanban" model="ir.ui.view">
|
||||
<field name="name">fp.facility.kanban</field>
|
||||
<field name="model">fusion.plating.facility</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_fp_facility_kanban">
|
||||
<field name="id"/>
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="tank_count"/>
|
||||
<field name="work_center_count"/>
|
||||
<field name="capability_count"/>
|
||||
<templates>
|
||||
<t t-name="card">
|
||||
<div class="o_fp_card">
|
||||
<div class="d-flex align-items-start justify-content-between">
|
||||
<div>
|
||||
<strong class="o_fp_card_title"><field name="name"/></strong>
|
||||
<div class="text-muted small"><field name="code"/></div>
|
||||
</div>
|
||||
<i class="fa fa-industry text-muted" aria-hidden="true"/>
|
||||
</div>
|
||||
<div class="d-flex gap-3 mt-3 o_fp_card_stats">
|
||||
<div class="text-center">
|
||||
<div class="fw-bold"><field name="work_center_count"/></div>
|
||||
<div class="small text-muted">Lines</div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="fw-bold"><field name="tank_count"/></div>
|
||||
<div class="small text-muted">Tanks</div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="fw-bold"><field name="capability_count"/></div>
|
||||
<div class="small text-muted">Processes</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_fp_facility" model="ir.actions.act_window">
|
||||
<field name="name">Facilities</field>
|
||||
<field name="res_model">fusion.plating.facility</field>
|
||||
<field name="view_mode">kanban,list,form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create your first facility
|
||||
</p>
|
||||
<p>
|
||||
A facility is a physical site with its own tanks, work centers,
|
||||
operators, and regulatory profile. A single-site shop has one
|
||||
facility; a multi-site operator has several.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
83
fusion_plating/fusion_plating/views/fp_menu.xml
Normal file
83
fusion_plating/fusion_plating/views/fp_menu.xml
Normal file
@@ -0,0 +1,83 @@
|
||||
<?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.
|
||||
-->
|
||||
<odoo>
|
||||
|
||||
<!-- ===== ROOT APP MENU ===== -->
|
||||
<menuitem id="menu_fp_root"
|
||||
name="Plating"
|
||||
sequence="46"
|
||||
web_icon="fusion_plating,static/description/icon.png"
|
||||
groups="group_fusion_plating_operator"/>
|
||||
|
||||
<!-- ===== OPERATIONS ===== -->
|
||||
<menuitem id="menu_fp_operations"
|
||||
name="Operations"
|
||||
parent="menu_fp_root"
|
||||
sequence="18"/>
|
||||
|
||||
<menuitem id="menu_fp_process_recipes"
|
||||
name="Process Recipes"
|
||||
parent="menu_fp_operations"
|
||||
action="action_fp_process_recipe"
|
||||
sequence="5"/>
|
||||
|
||||
<menuitem id="menu_fp_baths"
|
||||
name="Baths"
|
||||
parent="menu_fp_operations"
|
||||
action="action_fp_bath"
|
||||
sequence="10"/>
|
||||
|
||||
<menuitem id="menu_fp_bath_logs"
|
||||
name="Chemistry Logs"
|
||||
parent="menu_fp_operations"
|
||||
action="action_fp_bath_log"
|
||||
sequence="20"/>
|
||||
|
||||
<menuitem id="menu_fp_tanks"
|
||||
name="Tanks"
|
||||
parent="menu_fp_operations"
|
||||
action="action_fp_tank"
|
||||
sequence="30"/>
|
||||
|
||||
<!-- ===== CONFIGURATION ===== -->
|
||||
<menuitem id="menu_fp_config"
|
||||
name="Configuration"
|
||||
parent="menu_fp_root"
|
||||
sequence="90"
|
||||
groups="group_fusion_plating_manager"/>
|
||||
|
||||
<menuitem id="menu_fp_facilities"
|
||||
name="Facilities"
|
||||
parent="menu_fp_config"
|
||||
action="action_fp_facility"
|
||||
sequence="10"/>
|
||||
|
||||
<menuitem id="menu_fp_work_centers"
|
||||
name="Work Centers"
|
||||
parent="menu_fp_config"
|
||||
action="action_fp_work_center"
|
||||
sequence="20"/>
|
||||
|
||||
<menuitem id="menu_fp_process_categories"
|
||||
name="Process Categories"
|
||||
parent="menu_fp_config"
|
||||
action="action_fp_process_category"
|
||||
sequence="30"/>
|
||||
|
||||
<menuitem id="menu_fp_process_types"
|
||||
name="Process Types"
|
||||
parent="menu_fp_config"
|
||||
action="action_fp_process_type"
|
||||
sequence="40"/>
|
||||
|
||||
<menuitem id="menu_fp_bath_parameters"
|
||||
name="Bath Parameters"
|
||||
parent="menu_fp_config"
|
||||
action="action_fp_bath_parameter"
|
||||
sequence="50"/>
|
||||
|
||||
</odoo>
|
||||
184
fusion_plating/fusion_plating/views/fp_process_node_views.xml
Normal file
184
fusion_plating/fusion_plating/views/fp_process_node_views.xml
Normal file
@@ -0,0 +1,184 @@
|
||||
<?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.
|
||||
-->
|
||||
<odoo>
|
||||
|
||||
<!-- ===== TREE (LIST) VIEW — Recipes only ===== -->
|
||||
<record id="view_fp_process_node_tree" model="ir.ui.view">
|
||||
<field name="name">fusion.plating.process.node.tree</field>
|
||||
<field name="model">fusion.plating.process.node</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Process Recipes" default_order="sequence, name">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="code" optional="show"/>
|
||||
<field name="name"/>
|
||||
<field name="node_type" widget="badge"
|
||||
decoration-info="node_type == 'recipe'"
|
||||
decoration-success="node_type == 'operation'"
|
||||
decoration-warning="node_type == 'sub_process'"
|
||||
decoration-muted="node_type == 'step'"/>
|
||||
<field name="process_type_id" optional="show"/>
|
||||
<field name="work_center_id" optional="show"/>
|
||||
<field name="child_count" string="Steps"/>
|
||||
<field name="version" optional="hide"/>
|
||||
<field name="active" column_invisible="True"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ===== FORM VIEW ===== -->
|
||||
<record id="view_fp_process_node_form" model="ir.ui.view">
|
||||
<field name="name">fusion.plating.process.node.form</field>
|
||||
<field name="model">fusion.plating.process.node</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Process Node">
|
||||
<header>
|
||||
<button name="action_open_tree_editor" type="object"
|
||||
string="Open Tree Editor" class="btn-primary"
|
||||
icon="fa-sitemap"
|
||||
invisible="node_type != 'recipe'"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button name="action_open_tree_editor" type="object"
|
||||
class="oe_stat_button" icon="fa-sitemap"
|
||||
invisible="node_type != 'recipe'">
|
||||
<field name="child_count" widget="statinfo"
|
||||
string="Steps"/>
|
||||
</button>
|
||||
</div>
|
||||
<widget name="web_ribbon" title="Archived"
|
||||
bg_color="text-bg-danger"
|
||||
invisible="active"/>
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="name" placeholder="Node name..."/>
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<group string="Classification">
|
||||
<field name="code"/>
|
||||
<field name="node_type"/>
|
||||
<field name="process_type_id"/>
|
||||
<field name="work_center_id"/>
|
||||
<field name="parent_id"/>
|
||||
<field name="icon"/>
|
||||
</group>
|
||||
<group string="Behaviour">
|
||||
<field name="sequence"/>
|
||||
<field name="estimated_duration"/>
|
||||
<field name="auto_complete"/>
|
||||
<field name="customer_visible"/>
|
||||
<field name="is_manual"/>
|
||||
<field name="requires_signoff"/>
|
||||
<field name="opt_in_out"/>
|
||||
<field name="version"/>
|
||||
<field name="active" invisible="True"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<group string="Tracking">
|
||||
<field name="create_date" string="Created"/>
|
||||
<field name="create_uid" string="Created By"/>
|
||||
<field name="write_date" string="Last Updated"/>
|
||||
<field name="write_uid" string="Updated By"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Description" name="description">
|
||||
<field name="description" widget="html"/>
|
||||
</page>
|
||||
<page string="Operator Inputs" name="inputs">
|
||||
<field name="input_ids">
|
||||
<list editable="bottom">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="name"/>
|
||||
<field name="input_type"/>
|
||||
<field name="required"/>
|
||||
<field name="hint"/>
|
||||
<field name="uom"/>
|
||||
<field name="selection_options"
|
||||
invisible="input_type != 'selection'"/>
|
||||
</list>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Child Steps" name="children">
|
||||
<field name="child_ids">
|
||||
<list default_order="sequence, name">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="name"/>
|
||||
<field name="node_type" widget="badge"/>
|
||||
<field name="work_center_id"/>
|
||||
<field name="estimated_duration"/>
|
||||
<field name="child_count" string="Sub-Steps"/>
|
||||
</list>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Notes" name="notes">
|
||||
<field name="notes" placeholder="Internal notes..."/>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<chatter/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ===== SEARCH VIEW ===== -->
|
||||
<record id="view_fp_process_node_search" model="ir.ui.view">
|
||||
<field name="name">fusion.plating.process.node.search</field>
|
||||
<field name="model">fusion.plating.process.node</field>
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="process_type_id"/>
|
||||
<field name="work_center_id"/>
|
||||
<filter name="recipes_only" string="Recipes"
|
||||
domain="[('node_type', '=', 'recipe')]"/>
|
||||
<filter name="sub_processes" string="Sub-Processes"
|
||||
domain="[('node_type', '=', 'sub_process')]"/>
|
||||
<filter name="operations" string="Operations"
|
||||
domain="[('node_type', '=', 'operation')]"/>
|
||||
<filter name="archived" string="Archived"
|
||||
domain="[('active', '=', False)]"/>
|
||||
<filter name="group_type" string="Type"
|
||||
context="{'group_by': 'node_type'}"/>
|
||||
<filter name="group_process" string="Process Type"
|
||||
context="{'group_by': 'process_type_id'}"/>
|
||||
<filter name="group_wc" string="Work Centre"
|
||||
context="{'group_by': 'work_center_id'}"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ===== WINDOW ACTION — Recipe list ===== -->
|
||||
<record id="action_fp_process_recipe" model="ir.actions.act_window">
|
||||
<field name="name">Process Recipes</field>
|
||||
<field name="res_model">fusion.plating.process.node</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="domain">[('node_type', '=', 'recipe')]</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="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create your first process recipe
|
||||
</p>
|
||||
<p>
|
||||
Recipes define the step-by-step process for plating parts.
|
||||
Each recipe is a reusable template with nested operations
|
||||
and sub-processes.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ===== CLIENT ACTION — OWL Tree Editor ===== -->
|
||||
<record id="action_fp_recipe_tree_editor" model="ir.actions.client">
|
||||
<field name="name">Recipe Tree Editor</field>
|
||||
<field name="tag">fp_recipe_tree_editor</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
240
fusion_plating/fusion_plating/views/fp_process_type_views.xml
Normal file
240
fusion_plating/fusion_plating/views/fp_process_type_views.xml
Normal file
@@ -0,0 +1,240 @@
|
||||
<?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.
|
||||
-->
|
||||
<odoo>
|
||||
|
||||
<!-- ===== Process Category ===== -->
|
||||
<record id="view_fp_process_category_list" model="ir.ui.view">
|
||||
<field name="name">fp.process.category.list</field>
|
||||
<field name="model">fusion.plating.process.category</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Process Categories">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="process_type_count"/>
|
||||
<field name="active" widget="boolean_toggle"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_fp_process_category_form" model="ir.ui.view">
|
||||
<field name="name">fp.process.category.form</field>
|
||||
<field name="model">fusion.plating.process.category</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Process Category">
|
||||
<sheet>
|
||||
<div class="oe_title">
|
||||
<label for="name"/>
|
||||
<h1><field name="name" placeholder="e.g. Plating"/></h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="code"/>
|
||||
<field name="sequence"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="active" widget="boolean_toggle"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Description">
|
||||
<field name="description" placeholder="What this category represents..."/>
|
||||
</page>
|
||||
<page string="Process Types">
|
||||
<field name="process_type_ids">
|
||||
<list>
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="active" widget="boolean_toggle"/>
|
||||
</list>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_fp_process_category" model="ir.actions.act_window">
|
||||
<field name="name">Process Categories</field>
|
||||
<field name="res_model">fusion.plating.process.category</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Define process categories
|
||||
</p>
|
||||
<p>
|
||||
Categories group related finishing processes (plating, anodizing,
|
||||
conversion coatings, etc.). Process packs reference these categories
|
||||
when they load specific process types.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ===== Process Type ===== -->
|
||||
<record id="view_fp_process_type_list" model="ir.ui.view">
|
||||
<field name="name">fp.process.type.list</field>
|
||||
<field name="model">fusion.plating.process.type</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Process Types">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="category_id"/>
|
||||
<field name="icon" optional="hide"/>
|
||||
<field name="active" widget="boolean_toggle"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_fp_process_type_form" model="ir.ui.view">
|
||||
<field name="name">fp.process.type.form</field>
|
||||
<field name="model">fusion.plating.process.type</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Process Type">
|
||||
<sheet>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
|
||||
<div class="oe_title">
|
||||
<label for="name"/>
|
||||
<h1><field name="name" placeholder="e.g. Electroless Nickel — Mid Phosphorus"/></h1>
|
||||
<div class="text-muted">
|
||||
<field name="code" placeholder="EN_MID"/>
|
||||
</div>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="category_id"/>
|
||||
<field name="sequence"/>
|
||||
<field name="icon"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="color" widget="color_picker"/>
|
||||
<field name="active" widget="boolean_toggle"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Description">
|
||||
<field name="description" placeholder="Short description of the process..."/>
|
||||
</page>
|
||||
<page string="Bath Parameters">
|
||||
<field name="parameter_ids">
|
||||
<list>
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="parameter_type"/>
|
||||
<field name="uom"/>
|
||||
<field name="target_min"/>
|
||||
<field name="target_max"/>
|
||||
</list>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Hazard Notes">
|
||||
<field name="hazard_notes"
|
||||
placeholder="Process-level hazard awareness (e.g. Cr(VI) carcinogen, hypophosphite reducer)..."/>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_fp_process_type_search" model="ir.ui.view">
|
||||
<field name="name">fp.process.type.search</field>
|
||||
<field name="model">fusion.plating.process.type</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Process Types">
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="category_id"/>
|
||||
<separator/>
|
||||
<filter string="Archived" name="inactive" domain="[('active','=',False)]"/>
|
||||
<group>
|
||||
<filter string="Category" name="group_category" context="{'group_by':'category_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_fp_process_type" model="ir.actions.act_window">
|
||||
<field name="name">Process Types</field>
|
||||
<field name="res_model">fusion.plating.process.type</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="search_view_id" ref="view_fp_process_type_search"/>
|
||||
<field name="context">{'search_default_group_category': 1}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
No process types yet
|
||||
</p>
|
||||
<p>
|
||||
Install a process pack (EN, Chrome, Anodize, Black Oxide) to load
|
||||
pre-configured process types, or create your own.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ===== Bath Parameter ===== -->
|
||||
<record id="view_fp_bath_parameter_list" model="ir.ui.view">
|
||||
<field name="name">fp.bath.parameter.list</field>
|
||||
<field name="model">fusion.plating.bath.parameter</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Bath Parameters">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="parameter_type"/>
|
||||
<field name="uom"/>
|
||||
<field name="target_min"/>
|
||||
<field name="target_max"/>
|
||||
<field name="warning_tolerance"/>
|
||||
<field name="active" widget="boolean_toggle"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_fp_bath_parameter_form" model="ir.ui.view">
|
||||
<field name="name">fp.bath.parameter.form</field>
|
||||
<field name="model">fusion.plating.bath.parameter</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Bath Parameter">
|
||||
<sheet>
|
||||
<div class="oe_title">
|
||||
<label for="name"/>
|
||||
<h1><field name="name" placeholder="e.g. Nickel Concentration"/></h1>
|
||||
<div class="text-muted">
|
||||
<field name="code" placeholder="Ni"/>
|
||||
</div>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="parameter_type"/>
|
||||
<field name="uom"/>
|
||||
<field name="decimals"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="target_min"/>
|
||||
<field name="target_max"/>
|
||||
<field name="warning_tolerance"/>
|
||||
<field name="active" widget="boolean_toggle"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string="Description">
|
||||
<field name="description" nolabel="1"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_fp_bath_parameter" model="ir.actions.act_window">
|
||||
<field name="name">Bath Parameters</field>
|
||||
<field name="res_model">fusion.plating.bath.parameter</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
168
fusion_plating/fusion_plating/views/fp_tank_views.xml
Normal file
168
fusion_plating/fusion_plating/views/fp_tank_views.xml
Normal file
@@ -0,0 +1,168 @@
|
||||
<?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.
|
||||
-->
|
||||
<odoo>
|
||||
|
||||
<record id="view_fp_tank_list" model="ir.ui.view">
|
||||
<field name="name">fp.tank.list</field>
|
||||
<field name="model">fusion.plating.tank</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Tanks">
|
||||
<field name="facility_id"/>
|
||||
<field name="work_center_id"/>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="current_process_id"/>
|
||||
<field name="state" widget="badge"
|
||||
decoration-success="state == 'in_use'"
|
||||
decoration-info="state == 'filled'"
|
||||
decoration-warning="state in ('draining', 'maintenance')"
|
||||
decoration-muted="state in ('empty', 'out_of_service')"/>
|
||||
<field name="material" optional="hide"/>
|
||||
<field name="volume" optional="show"/>
|
||||
<field name="volume_uom" optional="show"/>
|
||||
<field name="active" widget="boolean_toggle" optional="hide"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_fp_tank_form" model="ir.ui.view">
|
||||
<field name="name">fp.tank.form</field>
|
||||
<field name="model">fusion.plating.tank</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Tank">
|
||||
<header>
|
||||
<field name="state" widget="statusbar"
|
||||
statusbar_visible="empty,filled,in_use,draining,maintenance"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<widget name="web_ribbon" title="Out of Service" bg_color="text-bg-danger"
|
||||
invisible="state != 'out_of_service'"/>
|
||||
<div class="oe_title">
|
||||
<label for="name"/>
|
||||
<h1><field name="name" placeholder="e.g. EN Plating Tank A1"/></h1>
|
||||
<div class="text-muted">
|
||||
<field name="code" placeholder="T-01"/>
|
||||
</div>
|
||||
</div>
|
||||
<group>
|
||||
<group string="Location">
|
||||
<field name="facility_id"/>
|
||||
<field name="work_center_id"/>
|
||||
<field name="sequence"/>
|
||||
</group>
|
||||
<group string="Current Bath">
|
||||
<field name="current_bath_id" readonly="1"/>
|
||||
<field name="current_process_id" readonly="1"/>
|
||||
<field name="qr_code"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Physical">
|
||||
<group>
|
||||
<group>
|
||||
<field name="volume"/>
|
||||
<field name="volume_uom"/>
|
||||
<field name="material"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="heating_type"/>
|
||||
<field name="has_filtration"/>
|
||||
<field name="has_rectifier"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Bath History">
|
||||
<field name="bath_ids">
|
||||
<list decoration-muted="state == 'dumped'">
|
||||
<field name="name"/>
|
||||
<field name="process_type_id"/>
|
||||
<field name="state"/>
|
||||
<field name="makeup_date"/>
|
||||
<field name="mto_count"/>
|
||||
<field name="last_log_date"/>
|
||||
</list>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<chatter/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_fp_tank_kanban" model="ir.ui.view">
|
||||
<field name="name">fp.tank.kanban</field>
|
||||
<field name="model">fusion.plating.tank</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_fp_tank_kanban">
|
||||
<field name="id"/>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="state"/>
|
||||
<field name="current_bath_id"/>
|
||||
<field name="current_process_id"/>
|
||||
<field name="facility_id"/>
|
||||
<field name="work_center_id"/>
|
||||
<templates>
|
||||
<t t-name="card">
|
||||
<div class="o_fp_card o_fp_tank_card" t-att-data-state="record.state.raw_value">
|
||||
<div class="d-flex align-items-start justify-content-between">
|
||||
<div>
|
||||
<strong class="o_fp_card_title"><field name="code"/></strong>
|
||||
<div class="small text-muted"><field name="name"/></div>
|
||||
</div>
|
||||
<span class="badge o_fp_badge" t-att-data-state="record.state.raw_value">
|
||||
<field name="state"/>
|
||||
</span>
|
||||
</div>
|
||||
<div class="mt-2 small">
|
||||
<div><i class="fa fa-flask me-1 text-muted"/><field name="current_process_id"/></div>
|
||||
<div class="text-muted"><field name="work_center_id"/></div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_fp_tank_search" model="ir.ui.view">
|
||||
<field name="name">fp.tank.search</field>
|
||||
<field name="model">fusion.plating.tank</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Tanks">
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="qr_code"/>
|
||||
<field name="facility_id"/>
|
||||
<field name="work_center_id"/>
|
||||
<field name="current_process_id"/>
|
||||
<separator/>
|
||||
<filter string="In Use" name="in_use" domain="[('state','=','in_use')]"/>
|
||||
<filter string="Filled" name="filled" domain="[('state','=','filled')]"/>
|
||||
<filter string="Maintenance" name="maintenance" domain="[('state','=','maintenance')]"/>
|
||||
<filter string="Out of Service" name="out" domain="[('state','=','out_of_service')]"/>
|
||||
<separator/>
|
||||
<filter string="Archived" name="inactive" domain="[('active','=',False)]"/>
|
||||
<group>
|
||||
<filter string="Facility" name="group_facility" context="{'group_by':'facility_id'}"/>
|
||||
<filter string="Work Center" name="group_wc" context="{'group_by':'work_center_id'}"/>
|
||||
<filter string="Process" name="group_process" context="{'group_by':'current_process_id'}"/>
|
||||
<filter string="Status" name="group_state" context="{'group_by':'state'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_fp_tank" model="ir.actions.act_window">
|
||||
<field name="name">Tanks</field>
|
||||
<field name="res_model">fusion.plating.tank</field>
|
||||
<field name="view_mode">kanban,list,form</field>
|
||||
<field name="search_view_id" ref="view_fp_tank_search"/>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
92
fusion_plating/fusion_plating/views/fp_work_center_views.xml
Normal file
92
fusion_plating/fusion_plating/views/fp_work_center_views.xml
Normal file
@@ -0,0 +1,92 @@
|
||||
<?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.
|
||||
-->
|
||||
<odoo>
|
||||
|
||||
<record id="view_fp_work_center_list" model="ir.ui.view">
|
||||
<field name="name">fp.work.center.list</field>
|
||||
<field name="model">fusion.plating.work.center</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Work Centers">
|
||||
<field name="facility_id"/>
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="tank_count"/>
|
||||
<field name="capacity_per_day"/>
|
||||
<field name="active" widget="boolean_toggle"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_fp_work_center_form" model="ir.ui.view">
|
||||
<field name="name">fp.work.center.form</field>
|
||||
<field name="model">fusion.plating.work.center</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Work Center">
|
||||
<sheet>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
|
||||
<div class="oe_title">
|
||||
<label for="name"/>
|
||||
<h1><field name="name" placeholder="e.g. Line 1 — EN Plating"/></h1>
|
||||
<div class="text-muted">
|
||||
<field name="code" placeholder="LINE-1"/>
|
||||
</div>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="facility_id"/>
|
||||
<field name="sequence"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="capacity_per_day"/>
|
||||
<field name="active" widget="boolean_toggle"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Supported Processes">
|
||||
<field name="supported_process_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
|
||||
</page>
|
||||
<page string="Tanks">
|
||||
<field name="tank_ids">
|
||||
<list>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="current_process_id"/>
|
||||
<field name="state"/>
|
||||
</list>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_fp_work_center_search" model="ir.ui.view">
|
||||
<field name="name">fp.work.center.search</field>
|
||||
<field name="model">fusion.plating.work.center</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Work Centers">
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="facility_id"/>
|
||||
<filter string="Archived" name="inactive" domain="[('active','=',False)]"/>
|
||||
<group>
|
||||
<filter string="Facility" name="group_facility" context="{'group_by':'facility_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_fp_work_center" model="ir.actions.act_window">
|
||||
<field name="name">Work Centers</field>
|
||||
<field name="res_model">fusion.plating.work.center</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="search_view_id" ref="view_fp_work_center_search"/>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user