folder rename
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
<?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.
|
||||
Dashboard-style act_window actions for KPI categories.
|
||||
-->
|
||||
<odoo>
|
||||
|
||||
<!-- ================================================================= -->
|
||||
<!-- Production KPIs -->
|
||||
<!-- OTD, Dock-to-Dock, Throughput, Processed Parts, Shipped Parts -->
|
||||
<!-- ================================================================= -->
|
||||
<record id="action_fp_kpi_dashboard_production" model="ir.actions.act_window">
|
||||
<field name="name">Production KPIs</field>
|
||||
<field name="res_model">fusion.plating.kpi.value</field>
|
||||
<field name="view_mode">graph,pivot,list</field>
|
||||
<field name="search_view_id" ref="fp_kpi_value_view_search"/>
|
||||
<field name="domain">[('kpi_type', 'in', ['otd', 'dock_to_dock', 'throughput', 'processed_parts', 'shipped_parts'])]</field>
|
||||
<field name="context">{
|
||||
'search_default_filter_quarter': 1,
|
||||
'search_default_group_kpi_type': 1,
|
||||
'search_default_group_date': 1,
|
||||
}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
No production KPI data yet
|
||||
</p>
|
||||
<p>
|
||||
Production KPIs include On-Time Delivery, Dock-to-Dock Lead Time,
|
||||
Throughput, Processed Parts, and Shipped Parts.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ================================================================= -->
|
||||
<!-- Quality KPIs -->
|
||||
<!-- Quality Yield, Rework Events, Failed Spec Count -->
|
||||
<!-- ================================================================= -->
|
||||
<record id="action_fp_kpi_dashboard_quality" model="ir.actions.act_window">
|
||||
<field name="name">Quality KPIs</field>
|
||||
<field name="res_model">fusion.plating.kpi.value</field>
|
||||
<field name="view_mode">graph,pivot,list</field>
|
||||
<field name="search_view_id" ref="fp_kpi_value_view_search"/>
|
||||
<field name="domain">[('kpi_type', 'in', ['quality_yield', 'rework_count', 'failed_spec_count'])]</field>
|
||||
<field name="context">{
|
||||
'search_default_filter_quarter': 1,
|
||||
'search_default_group_kpi_type': 1,
|
||||
'search_default_group_date': 1,
|
||||
}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
No quality KPI data yet
|
||||
</p>
|
||||
<p>
|
||||
Quality KPIs include Quality Yield, Rework Events, and Failed Spec Count.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ================================================================= -->
|
||||
<!-- Sales & Finance KPIs -->
|
||||
<!-- Bath Uptime, Cost Per Part, Custom (revenue, margin) -->
|
||||
<!-- ================================================================= -->
|
||||
<record id="action_fp_kpi_dashboard_finance" model="ir.actions.act_window">
|
||||
<field name="name">Sales & Finance KPIs</field>
|
||||
<field name="res_model">fusion.plating.kpi.value</field>
|
||||
<field name="view_mode">graph,pivot,list</field>
|
||||
<field name="search_view_id" ref="fp_kpi_value_view_search"/>
|
||||
<field name="domain">[('kpi_type', 'in', ['bath_uptime', 'cost_per_part', 'custom'])]</field>
|
||||
<field name="context">{
|
||||
'search_default_filter_quarter': 1,
|
||||
'search_default_group_kpi_type': 1,
|
||||
'search_default_group_date': 1,
|
||||
}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
No sales or finance KPI data yet
|
||||
</p>
|
||||
<p>
|
||||
Sales & Finance KPIs include Bath Uptime, Cost Per Part,
|
||||
and any custom revenue or margin metrics.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
143
fusion_plating/fusion_plating_kpi/views/fp_kpi_value_views.xml
Normal file
143
fusion_plating/fusion_plating_kpi/views/fp_kpi_value_views.xml
Normal file
@@ -0,0 +1,143 @@
|
||||
<?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>
|
||||
|
||||
<!-- ===== LIST VIEW ===== -->
|
||||
<record id="fp_kpi_value_view_list" model="ir.ui.view">
|
||||
<field name="name">fusion.plating.kpi.value.list</field>
|
||||
<field name="model">fusion.plating.kpi.value</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="KPI History" editable="bottom">
|
||||
<field name="kpi_id"/>
|
||||
<field name="kpi_type" optional="show"/>
|
||||
<field name="date"/>
|
||||
<field name="value"/>
|
||||
<field name="facility_id" optional="show"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ===== LINE GRAPH VIEW (default) ===== -->
|
||||
<record id="fp_kpi_value_view_graph" model="ir.ui.view">
|
||||
<field name="name">fusion.plating.kpi.value.graph.line</field>
|
||||
<field name="model">fusion.plating.kpi.value</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="KPI Trend (Line)" type="line">
|
||||
<field name="date" type="row"/>
|
||||
<field name="value" type="measure"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ===== STACKED BAR GRAPH VIEW ===== -->
|
||||
<record id="fp_kpi_value_view_graph_bar" model="ir.ui.view">
|
||||
<field name="name">fusion.plating.kpi.value.graph.bar</field>
|
||||
<field name="model">fusion.plating.kpi.value</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="KPI Values (Bar)" type="bar" stacked="True">
|
||||
<field name="date" interval="month" type="row"/>
|
||||
<field name="kpi_type" type="col"/>
|
||||
<field name="value" type="measure"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ===== PIVOT VIEW ===== -->
|
||||
<record id="fp_kpi_value_view_pivot" model="ir.ui.view">
|
||||
<field name="name">fusion.plating.kpi.value.pivot</field>
|
||||
<field name="model">fusion.plating.kpi.value</field>
|
||||
<field name="arch" type="xml">
|
||||
<pivot string="KPI Values">
|
||||
<field name="kpi_id" type="row"/>
|
||||
<field name="date" type="col" interval="month"/>
|
||||
<field name="value" type="measure"/>
|
||||
</pivot>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ===== SEARCH VIEW ===== -->
|
||||
<record id="fp_kpi_value_view_search" model="ir.ui.view">
|
||||
<field name="name">fusion.plating.kpi.value.search</field>
|
||||
<field name="model">fusion.plating.kpi.value</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search KPI Values">
|
||||
<field name="kpi_id"/>
|
||||
<field name="kpi_type"/>
|
||||
<field name="facility_id"/>
|
||||
<field name="date"/>
|
||||
<separator/>
|
||||
<filter string="Today" name="filter_today"
|
||||
domain="[('date', '=', context_today().strftime('%Y-%m-%d'))]"/>
|
||||
<filter string="Last 7 Days" name="filter_week"
|
||||
domain="[('date', '>=', (context_today() - datetime.timedelta(days=7)).strftime('%Y-%m-%d'))]"/>
|
||||
<filter string="Last 30 Days" name="filter_month"
|
||||
domain="[('date', '>=', (context_today() - datetime.timedelta(days=30)).strftime('%Y-%m-%d'))]"/>
|
||||
<filter string="Last 90 Days" name="filter_quarter"
|
||||
domain="[('date', '>=', (context_today() - datetime.timedelta(days=90)).strftime('%Y-%m-%d'))]"/>
|
||||
<filter string="Last 365 Days" name="filter_year"
|
||||
domain="[('date', '>=', (context_today() - datetime.timedelta(days=365)).strftime('%Y-%m-%d'))]"/>
|
||||
<separator/>
|
||||
<!-- KPI Type Filters -->
|
||||
<filter string="On-Time Delivery" name="filter_otd"
|
||||
domain="[('kpi_type', '=', 'otd')]"/>
|
||||
<filter string="Dock-to-Dock" name="filter_d2d"
|
||||
domain="[('kpi_type', '=', 'dock_to_dock')]"/>
|
||||
<filter string="Throughput" name="filter_throughput"
|
||||
domain="[('kpi_type', '=', 'throughput')]"/>
|
||||
<filter string="Quality Yield" name="filter_quality"
|
||||
domain="[('kpi_type', '=', 'quality_yield')]"/>
|
||||
<filter string="Bath Uptime" name="filter_bath"
|
||||
domain="[('kpi_type', '=', 'bath_uptime')]"/>
|
||||
<filter string="Rework Events" name="filter_rework"
|
||||
domain="[('kpi_type', '=', 'rework_count')]"/>
|
||||
<filter string="Failed Specs" name="filter_failed_spec"
|
||||
domain="[('kpi_type', '=', 'failed_spec_count')]"/>
|
||||
<filter string="Processed Parts" name="filter_processed"
|
||||
domain="[('kpi_type', '=', 'processed_parts')]"/>
|
||||
<filter string="Shipped Parts" name="filter_shipped"
|
||||
domain="[('kpi_type', '=', 'shipped_parts')]"/>
|
||||
<filter string="Cost Per Part" name="filter_cost_per_part"
|
||||
domain="[('kpi_type', '=', 'cost_per_part')]"/>
|
||||
<separator/>
|
||||
<group>
|
||||
<filter string="KPI" name="group_kpi"
|
||||
context="{'group_by': 'kpi_id'}"/>
|
||||
<filter string="KPI Type" name="group_kpi_type"
|
||||
context="{'group_by': 'kpi_type'}"/>
|
||||
<filter string="Facility" name="group_facility"
|
||||
context="{'group_by': 'facility_id'}"/>
|
||||
<filter string="Date (Day)" name="group_date_day"
|
||||
context="{'group_by': 'date:day'}"/>
|
||||
<filter string="Date (Week)" name="group_date_week"
|
||||
context="{'group_by': 'date:week'}"/>
|
||||
<filter string="Date (Month)" name="group_date"
|
||||
context="{'group_by': 'date:month'}"/>
|
||||
<filter string="Date (Quarter)" name="group_date_quarter"
|
||||
context="{'group_by': 'date:quarter'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ===== ACTION (generic history) ===== -->
|
||||
<record id="action_fp_kpi_value" model="ir.actions.act_window">
|
||||
<field name="name">KPI History</field>
|
||||
<field name="res_model">fusion.plating.kpi.value</field>
|
||||
<field name="view_mode">list,graph,pivot</field>
|
||||
<field name="search_view_id" ref="fp_kpi_value_view_search"/>
|
||||
<field name="context">{'search_default_filter_month': 1}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
No KPI values recorded yet
|
||||
</p>
|
||||
<p>
|
||||
Values are computed daily by the scheduled action or entered manually.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
146
fusion_plating/fusion_plating_kpi/views/fp_kpi_views.xml
Normal file
146
fusion_plating/fusion_plating_kpi/views/fp_kpi_views.xml
Normal file
@@ -0,0 +1,146 @@
|
||||
<?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>
|
||||
|
||||
<!-- ===== LIST VIEW ===== -->
|
||||
<record id="fp_kpi_view_list" model="ir.ui.view">
|
||||
<field name="name">fusion.plating.kpi.list</field>
|
||||
<field name="model">fusion.plating.kpi</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="KPIs"
|
||||
decoration-success="trend == 'up'"
|
||||
decoration-danger="trend == 'down'"
|
||||
decoration-muted="trend == 'flat'">
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="kpi_type"/>
|
||||
<field name="facility_id" optional="show"/>
|
||||
<field name="target_value"/>
|
||||
<field name="current_value"/>
|
||||
<field name="uom"/>
|
||||
<field name="trend"/>
|
||||
<field name="compute_method"/>
|
||||
<field name="active" column_invisible="True"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ===== FORM VIEW ===== -->
|
||||
<record id="fp_kpi_view_form" model="ir.ui.view">
|
||||
<field name="name">fusion.plating.kpi.form</field>
|
||||
<field name="model">fusion.plating.kpi</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="KPI Definition">
|
||||
<sheet>
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="name" placeholder="e.g. On-Time Delivery %"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="code"/>
|
||||
<field name="kpi_type"/>
|
||||
<field name="compute_method"/>
|
||||
<field name="active"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="target_value"/>
|
||||
<field name="uom"/>
|
||||
<field name="current_value"/>
|
||||
<field name="trend"/>
|
||||
<field name="facility_id"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Value History" name="history">
|
||||
<field name="value_ids">
|
||||
<list editable="bottom">
|
||||
<field name="date"/>
|
||||
<field name="value"/>
|
||||
</list>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Trend Chart" name="chart">
|
||||
<p class="text-muted">
|
||||
Use the <strong>KPI History</strong> menu to view trend charts, or click the history count button above.
|
||||
</p>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ===== SEARCH VIEW ===== -->
|
||||
<record id="fp_kpi_view_search" model="ir.ui.view">
|
||||
<field name="name">fusion.plating.kpi.search</field>
|
||||
<field name="model">fusion.plating.kpi</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search KPIs">
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="facility_id"/>
|
||||
<separator/>
|
||||
<filter string="On-Time Delivery" name="filter_otd"
|
||||
domain="[('kpi_type', '=', 'otd')]"/>
|
||||
<filter string="Dock-to-Dock" name="filter_d2d"
|
||||
domain="[('kpi_type', '=', 'dock_to_dock')]"/>
|
||||
<filter string="Throughput" name="filter_throughput"
|
||||
domain="[('kpi_type', '=', 'throughput')]"/>
|
||||
<filter string="Quality Yield" name="filter_quality"
|
||||
domain="[('kpi_type', '=', 'quality_yield')]"/>
|
||||
<filter string="Bath Uptime" name="filter_bath"
|
||||
domain="[('kpi_type', '=', 'bath_uptime')]"/>
|
||||
<filter string="Rework Events" name="filter_rework"
|
||||
domain="[('kpi_type', '=', 'rework_count')]"/>
|
||||
<filter string="Failed Specs" name="filter_failed_spec"
|
||||
domain="[('kpi_type', '=', 'failed_spec_count')]"/>
|
||||
<filter string="Processed Parts" name="filter_processed"
|
||||
domain="[('kpi_type', '=', 'processed_parts')]"/>
|
||||
<filter string="Shipped Parts" name="filter_shipped"
|
||||
domain="[('kpi_type', '=', 'shipped_parts')]"/>
|
||||
<filter string="Cost Per Part" name="filter_cost_per_part"
|
||||
domain="[('kpi_type', '=', 'cost_per_part')]"/>
|
||||
<filter string="Custom" name="filter_custom"
|
||||
domain="[('kpi_type', '=', 'custom')]"/>
|
||||
<separator/>
|
||||
<filter string="Automatic" name="filter_auto"
|
||||
domain="[('compute_method', '=', 'auto')]"/>
|
||||
<filter string="Manual" name="filter_manual"
|
||||
domain="[('compute_method', '=', 'manual')]"/>
|
||||
<separator/>
|
||||
<filter string="Archived" name="filter_archived"
|
||||
domain="[('active', '=', False)]"/>
|
||||
<group>
|
||||
<filter string="Type" name="group_type"
|
||||
context="{'group_by': 'kpi_type'}"/>
|
||||
<filter string="Facility" name="group_facility"
|
||||
context="{'group_by': 'facility_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ===== ACTION ===== -->
|
||||
<record id="action_fp_kpi" model="ir.actions.act_window">
|
||||
<field name="name">KPIs</field>
|
||||
<field name="res_model">fusion.plating.kpi</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="search_view_id" ref="fp_kpi_view_search"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Define your first KPI
|
||||
</p>
|
||||
<p>
|
||||
Track on-time delivery, throughput, quality yield, and more.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
46
fusion_plating/fusion_plating_kpi/views/fp_menu.xml
Normal file
46
fusion_plating/fusion_plating_kpi/views/fp_menu.xml
Normal file
@@ -0,0 +1,46 @@
|
||||
<?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>
|
||||
|
||||
<!-- ===== KPIs top-level menu ===== -->
|
||||
<menuitem id="menu_fp_dashboard"
|
||||
name="KPIs"
|
||||
parent="fusion_plating.menu_fp_root"
|
||||
sequence="85"/>
|
||||
|
||||
<menuitem id="menu_fp_kpis"
|
||||
name="KPIs"
|
||||
parent="menu_fp_dashboard"
|
||||
action="action_fp_kpi"
|
||||
sequence="10"/>
|
||||
|
||||
<menuitem id="menu_fp_kpi_history"
|
||||
name="KPI History"
|
||||
parent="menu_fp_dashboard"
|
||||
action="action_fp_kpi_value"
|
||||
sequence="20"/>
|
||||
|
||||
<!-- ===== Dashboard Category Actions ===== -->
|
||||
<menuitem id="menu_fp_kpi_production"
|
||||
name="Production KPIs"
|
||||
parent="menu_fp_dashboard"
|
||||
action="action_fp_kpi_dashboard_production"
|
||||
sequence="30"/>
|
||||
|
||||
<menuitem id="menu_fp_kpi_quality"
|
||||
name="Quality KPIs"
|
||||
parent="menu_fp_dashboard"
|
||||
action="action_fp_kpi_dashboard_quality"
|
||||
sequence="40"/>
|
||||
|
||||
<menuitem id="menu_fp_kpi_finance"
|
||||
name="Sales & Finance"
|
||||
parent="menu_fp_dashboard"
|
||||
action="action_fp_kpi_dashboard_finance"
|
||||
sequence="50"/>
|
||||
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user