Files
2026-04-16 20:53:53 -04:00

249 lines
12 KiB
XML

<?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>
<!-- ===================== EQUIPMENT ===================== -->
<record id="view_fp_cal_equipment_list" model="ir.ui.view">
<field name="name">fp.cal.equipment.list</field>
<field name="model">fusion.plating.calibration.equipment</field>
<field name="arch" type="xml">
<list string="Calibrated Equipment"
decoration-warning="state == 'due_soon'"
decoration-danger="state == 'overdue'"
decoration-muted="state == 'out_of_service'">
<field name="code"/>
<field name="name"/>
<field name="equipment_type"/>
<field name="facility_id" groups="base.group_multi_company"/>
<field name="nist_traceable" widget="boolean_toggle"/>
<field name="calibration_interval_days"/>
<field name="last_cal_date"/>
<field name="next_cal_date"/>
<field name="state" widget="badge"
decoration-success="state == 'in_service'"
decoration-warning="state == 'due_soon'"
decoration-danger="state == 'overdue'"
decoration-muted="state == 'out_of_service'"/>
</list>
</field>
</record>
<record id="view_fp_cal_equipment_form" model="ir.ui.view">
<field name="name">fp.cal.equipment.form</field>
<field name="model">fusion.plating.calibration.equipment</field>
<field name="arch" type="xml">
<form string="Equipment">
<header>
<button name="action_mark_out_of_service" string="Mark Out of Service" type="object"
invisible="manual_state == 'out_of_service'"/>
<button name="action_return_to_service" string="Return to Service" type="object"
invisible="manual_state == 'in_service'"/>
<field name="state" widget="statusbar"
statusbar_visible="in_service,due_soon,overdue,out_of_service"/>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button name="action_view_events" type="object"
class="oe_stat_button" icon="fa-calendar-check-o">
<field name="event_count" widget="statinfo" string="Events"/>
</button>
</div>
<div class="oe_title">
<label for="name"/>
<h1><field name="name"/></h1>
</div>
<group>
<group>
<field name="code"/>
<field name="equipment_type"/>
<field name="facility_id"/>
<field name="nist_traceable"/>
</group>
<group>
<field name="calibration_interval_days"/>
<field name="last_cal_date" readonly="1"/>
<field name="next_cal_date" readonly="1"/>
<field name="manual_state"/>
</group>
</group>
<notebook>
<page string="Calibration Events">
<field name="event_ids" readonly="1">
<list>
<field name="cal_date"/>
<field name="performed_by_id"/>
<field name="result" widget="badge"
decoration-success="result == 'pass'"
decoration-warning="result == 'limited'"
decoration-danger="result == 'fail'"/>
<field name="certificate_ref"/>
</list>
</field>
</page>
</notebook>
</sheet>
<chatter/>
</form>
</field>
</record>
<record id="view_fp_cal_equipment_kanban" model="ir.ui.view">
<field name="name">fp.cal.equipment.kanban</field>
<field name="model">fusion.plating.calibration.equipment</field>
<field name="arch" type="xml">
<kanban default_group_by="state">
<field name="id"/>
<field name="name"/>
<field name="code"/>
<field name="equipment_type"/>
<field name="next_cal_date"/>
<field name="state"/>
<templates>
<t t-name="card">
<div class="o_fp_card" t-att-data-state="record.state.raw_value">
<strong class="o_fp_card_title">
<field name="code"/><field name="name"/>
</strong>
<div class="small text-muted"><field name="equipment_type"/></div>
<div class="small mt-2">
<i class="fa fa-calendar me-1 text-muted"/>
Next: <field name="next_cal_date"/>
</div>
<div class="mt-1">
<span t-att-class="'o_fp_overdue' if record.state.raw_value == 'overdue' else ''">
<field name="state"/>
</span>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="view_fp_cal_equipment_search" model="ir.ui.view">
<field name="name">fp.cal.equipment.search</field>
<field name="model">fusion.plating.calibration.equipment</field>
<field name="arch" type="xml">
<search string="Equipment">
<field name="name"/>
<field name="code"/>
<field name="facility_id"/>
<separator/>
<filter string="Overdue" name="overdue" domain="[('state','=','overdue')]"/>
<filter string="Due Soon" name="due_soon" domain="[('state','=','due_soon')]"/>
<filter string="In Service" name="in_service" domain="[('state','=','in_service')]"/>
<filter string="NIST Traceable" name="nist" domain="[('nist_traceable','=',True)]"/>
<separator/>
<filter string="Archived" name="inactive" domain="[('active','=',False)]"/>
<group>
<filter string="Status" name="group_state" context="{'group_by':'state'}"/>
<filter string="Type" name="group_type" context="{'group_by':'equipment_type'}"/>
<filter string="Facility" name="group_facility" context="{'group_by':'facility_id'}"/>
</group>
</search>
</field>
</record>
<record id="action_fp_cal_equipment" model="ir.actions.act_window">
<field name="name">Calibration Equipment</field>
<field name="res_model">fusion.plating.calibration.equipment</field>
<field name="view_mode">list,kanban,form</field>
<field name="search_view_id" ref="view_fp_cal_equipment_search"/>
</record>
<!-- ===================== EVENTS ===================== -->
<record id="view_fp_cal_event_list" model="ir.ui.view">
<field name="name">fp.cal.event.list</field>
<field name="model">fusion.plating.calibration.event</field>
<field name="arch" type="xml">
<list string="Calibration Events"
decoration-success="result == 'pass'"
decoration-warning="result == 'limited'"
decoration-danger="result == 'fail'">
<field name="cal_date"/>
<field name="equipment_id"/>
<field name="performed_by_id"/>
<field name="performed_by_external" optional="hide"/>
<field name="result" widget="badge"
decoration-success="result == 'pass'"
decoration-warning="result == 'limited'"
decoration-danger="result == 'fail'"/>
<field name="certificate_ref"/>
</list>
</field>
</record>
<record id="view_fp_cal_event_form" model="ir.ui.view">
<field name="name">fp.cal.event.form</field>
<field name="model">fusion.plating.calibration.event</field>
<field name="arch" type="xml">
<form string="Calibration Event">
<sheet>
<group>
<group>
<field name="equipment_id"/>
<field name="cal_date"/>
<field name="result"/>
<field name="certificate_ref"/>
</group>
<group>
<field name="performed_by_id"/>
<field name="performed_by_external"/>
<field name="facility_id" readonly="1"/>
</group>
</group>
<notebook>
<page string="As-Found">
<field name="as_found_notes"/>
</page>
<page string="As-Left">
<field name="as_left_notes"/>
</page>
<page string="Impact Assessment" invisible="result == 'pass'">
<field name="impact_assessment"
placeholder="If the result is fail or limited, document which jobs / parts may have been measured by this instrument since the last calibration."/>
</page>
</notebook>
</sheet>
<chatter/>
</form>
</field>
</record>
<record id="view_fp_cal_event_search" model="ir.ui.view">
<field name="name">fp.cal.event.search</field>
<field name="model">fusion.plating.calibration.event</field>
<field name="arch" type="xml">
<search string="Calibration Events">
<field name="equipment_id"/>
<field name="performed_by_id"/>
<field name="certificate_ref"/>
<separator/>
<filter string="Pass" name="pass_filter" domain="[('result','=','pass')]"/>
<filter string="Limited" name="limited" domain="[('result','=','limited')]"/>
<filter string="Fail" name="fail" domain="[('result','=','fail')]"/>
<group>
<filter string="Equipment" name="group_eq" context="{'group_by':'equipment_id'}"/>
<filter string="Result" name="group_result" context="{'group_by':'result'}"/>
<filter string="Calibration Date" name="group_date" context="{'group_by':'cal_date'}"/>
</group>
</search>
</field>
</record>
<record id="action_fp_cal_event" model="ir.actions.act_window">
<field name="name">Calibration Events</field>
<field name="res_model">fusion.plating.calibration.event</field>
<field name="view_mode">list,form</field>
<field name="search_view_id" ref="view_fp_cal_event_search"/>
</record>
</odoo>