This commit is contained in:
gsinghpal
2026-05-25 08:17:29 -04:00
parent 5d5964a327
commit 80887d6098
19 changed files with 117 additions and 558 deletions

View File

@@ -1,185 +0,0 @@
<?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_first_piece_gate_list" model="ir.ui.view">
<field name="name">fp.first.piece.gate.list</field>
<field name="model">fusion.plating.first.piece.gate</field>
<field name="arch" type="xml">
<list string="First-Piece Gates"
decoration-success="result == 'pass' and rest_of_lot_released"
decoration-warning="result == 'pass' and not rest_of_lot_released"
decoration-danger="result == 'fail'"
decoration-muted="result == 'pending'">
<field name="name"/>
<field name="bath_id"/>
<field name="part_ref"/>
<field name="customer_ref" optional="show"/>
<field name="routing_first_run" widget="boolean_toggle" optional="hide"/>
<field name="first_piece_produced" optional="show"/>
<field name="first_piece_inspected" optional="show"/>
<field name="inspector_id" optional="show"/>
<field name="result" widget="badge"
decoration-success="result == 'pass'"
decoration-danger="result == 'fail'"
decoration-muted="result == 'pending'"/>
<field name="rest_of_lot_released" widget="boolean_toggle"/>
</list>
</field>
</record>
<record id="view_fp_first_piece_gate_form" model="ir.ui.view">
<field name="name">fp.first.piece.gate.form</field>
<field name="model">fusion.plating.first.piece.gate</field>
<field name="arch" type="xml">
<form string="First-Piece Gate">
<header>
<button name="action_mark_pass" string="Mark Pass" type="object"
class="oe_highlight" invisible="result != 'pending'"/>
<button name="action_mark_fail" string="Mark Fail" type="object"
invisible="result != 'pending'"/>
<button name="action_release_lot" string="Release Lot" type="object"
invisible="result != 'pass' or rest_of_lot_released"/>
<field name="result" widget="statusbar"
statusbar_visible="pending,pass"/>
</header>
<sheet>
<div class="oe_title">
<label for="name"/>
<h1><field name="name" readonly="1"/></h1>
</div>
<group>
<group string="Job">
<field name="bath_id"/>
<field name="facility_id" readonly="1"/>
<field name="part_ref"/>
<field name="customer_ref"/>
<field name="routing_first_run"/>
</group>
<group string="Inspection">
<field name="first_piece_produced"/>
<field name="first_piece_inspected"/>
<field name="inspector_id"/>
<field name="rest_of_lot_released"/>
</group>
</group>
<separator string="Notes"/>
<field name="notes"/>
</sheet>
<chatter/>
</form>
</field>
</record>
<!--
Kanban rebuilt 2026-04 to match the Plant Overview card design.
Shared base styles in fp_kanbans.scss (.o_fp_kcard); the
wrapping .o_fp_fpg_kanban scopes per-result stripe colours.
-->
<record id="view_fp_first_piece_gate_kanban" model="ir.ui.view">
<field name="name">fp.first.piece.gate.kanban</field>
<field name="model">fusion.plating.first.piece.gate</field>
<field name="arch" type="xml">
<kanban default_group_by="result" class="o_fp_fpg_kanban">
<field name="id"/>
<field name="name"/>
<field name="part_ref"/>
<field name="customer_ref"/>
<field name="bath_id"/>
<field name="first_piece_produced"/>
<field name="inspector_id"/>
<field name="result"/>
<field name="rest_of_lot_released"/>
<templates>
<t t-name="card">
<div class="o_fp_kcard"
t-att-data-result="record.result.raw_value">
<div class="o_fp_kcard_title">
<field name="name"/>
</div>
<div class="o_fp_kcard_sub" t-if="record.part_ref.raw_value">
<field name="part_ref"/>
</div>
<div class="o_fp_kcard_meta">
<span t-if="record.bath_id.raw_value">
<i class="fa fa-flask me-1"/><field name="bath_id"/>
</span>
<span class="o_fp_kcard_meta_sep"
t-if="record.bath_id.raw_value and record.customer_ref.raw_value">·</span>
<span t-if="record.customer_ref.raw_value">
<field name="customer_ref"/>
</span>
</div>
<div class="o_fp_kcard_meta"
t-if="record.inspector_id.raw_value or record.first_piece_produced.raw_value">
<span t-if="record.inspector_id.raw_value">
<i class="fa fa-user me-1"/><field name="inspector_id"/>
</span>
<span class="o_fp_kcard_meta_sep"
t-if="record.inspector_id.raw_value and record.first_piece_produced.raw_value">·</span>
<span t-if="record.first_piece_produced.raw_value">
<field name="first_piece_produced"/>
</span>
</div>
<div class="o_fp_kcard_footer">
<span t-att-class="'o_fp_kcard_chip ' + (
record.result.raw_value === 'pass' ? 'tone-success'
: record.result.raw_value === 'fail' ? 'tone-danger'
: record.result.raw_value === 'pending' ? 'tone-warning'
: 'tone-muted')">
<field name="result"/>
</span>
<span class="o_fp_fpg_released"
t-if="record.rest_of_lot_released.raw_value">
<i class="fa fa-check"/> Released
</span>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="view_fp_first_piece_gate_search" model="ir.ui.view">
<field name="name">fp.first.piece.gate.search</field>
<field name="model">fusion.plating.first.piece.gate</field>
<field name="arch" type="xml">
<search string="First-Piece Gates">
<field name="name"/>
<field name="part_ref"/>
<field name="customer_ref"/>
<field name="bath_id"/>
<field name="inspector_id"/>
<separator/>
<filter string="Pending" name="pending" domain="[('result','=','pending')]"/>
<filter string="Passed" name="passed" domain="[('result','=','pass')]"/>
<filter string="Failed" name="failed" domain="[('result','=','fail')]"/>
<separator/>
<filter string="Lot Released" name="released" domain="[('rest_of_lot_released','=',True)]"/>
<filter string="Lot On Hold" name="on_hold"
domain="[('result','=','pass'),('rest_of_lot_released','=',False)]"/>
<separator/>
<filter string="Archived" name="inactive" domain="[('active','=',False)]"/>
<group>
<filter string="Result" name="group_result" context="{'group_by':'result'}"/>
<filter string="Customer" name="group_customer" context="{'group_by':'customer_ref'}"/>
<filter string="Inspector" name="group_inspector" context="{'group_by':'inspector_id'}"/>
</group>
</search>
</field>
</record>
<record id="action_fp_first_piece_gate" model="ir.actions.act_window">
<field name="name">First-Piece Gates</field>
<field name="res_model">fusion.plating.first.piece.gate</field>
<field name="view_mode">kanban,list,form</field>
<field name="search_view_id" ref="view_fp_first_piece_gate_search"/>
<field name="context">{'search_default_pending': 1}</field>
</record>
</odoo>

View File

@@ -43,12 +43,6 @@
action="action_fp_bake_window"
sequence="20"/>
<menuitem id="menu_fp_shopfloor_first_piece"
name="First-Piece Gates"
parent="menu_fp_shopfloor"
action="action_fp_first_piece_gate"
sequence="30"/>
<!-- Phase 2 — both under Shop Setup. -->
<menuitem id="menu_fp_shopfloor_stations_cfg"
name="Shopfloor Stations"