Files

974 lines
49 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- QUALITY.ALERT -->
<record id="quality_alert_view_search_inherit_quality_control" model="ir.ui.view">
<field name="name">quality.alert.view.search.inherit.quality.control</field>
<field name="model">quality.alert</field>
<field name="inherit_id" ref="quality.quality_alert_view_search"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='name']" position="replace">
<field name="title" string="Quality Alert" filter_domain="[
'|', '|', '|', ('title', 'ilike', self), ('product_id', 'ilike', self), ('product_tmpl_id', 'ilike', self), ('lot_ids', 'ilike', self)]"/>
</xpath>
</field>
</record>
<record id="quality_alert_view_kanban" model="ir.ui.view">
<field name="name">quality.alert.view.kanban</field>
<field name="model">quality.alert</field>
<field name="arch" type="xml">
<kanban default_group_by="stage_id" class="o_kanban_small_column" sample='1'>
<templates>
<t t-name="card">
<field name="tag_ids"/>
<field name="product_tmpl_id" class="fw-bolder"/>
<field name="display_name"/>
<footer>
<div class="d-flex">
<field name="priority" widget="priority"/>
<field name="activity_ids" widget="kanban_activity" class="ms-2"/>
</div>
<field name="user_id" widget="many2one_avatar_user" class="ms-auto"/>
</footer>
</t>
</templates>
</kanban>
</field>
</record>
<record id="quality_alert_view_form" model="ir.ui.view">
<field name="name">quality.alert.view.form</field>
<field name="model">quality.alert</field>
<field name="arch" type="xml">
<form>
<header>
<field name="stage_id" widget="statusbar" options="{'clickable': '1', 'fold_field': 'folded'}"/>
</header>
<sheet>
<field name="company_id" invisible="1"/>
<field name="product_id" invisible="1"/>
<div class="oe_button_box" name="button_box">
<button name="action_see_check" type="object" invisible="not check_id" class="oe_stat_button" icon="fa-check-square-o">
<div class="o_field_widget o_stat_info">
<span class="o_stat_value"><field name="check_id" readonly="1"/></span>
<span class="o_stat_text">Quality Check</span>
</div>
</button>
</div>
<div class="oe_title"><h1><field name="name" readonly="1"/></h1></div>
<group>
<group>
<field name="title"/>
<field name="product_tmpl_id"/>
<field name="product_id" groups="product.group_product_variant"/>
<field name="lot_ids" context="{'default_product_id': product_id}" groups="stock.group_production_lot" widget="many2many_tags" options="{'edit_tags': True}"/>
<field name="picking_id"/>
</group>
<group>
<field name="team_id"/>
<field name="user_id" domain="[('share', '=', False)]"/>
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
<field name="reason_id"/>
<field name="priority" widget="priority"/>
</group>
</group>
<notebook>
<page string="Description" name="description">
<field name="description" placeholder="Description of the issue..."/>
</page>
<page string="Corrective Actions" name="corrective_actions">
<field name="action_corrective" placeholder="Describe the corrective actions you did..."/>
</page>
<page string="Preventive Actions" name="preventive_actions">
<field name="action_preventive" placeholder="Describe the preventive actions you did..."/>
</page>
<page string="Miscellaneous" name="miscellaneous">
<group>
<group>
<field name="partner_id"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="email_cc" groups="base.group_no_one"/>
</group>
<group>
<field name="date_assign"/>
<field name="date_close" invisible="not date_close"/>
</group>
</group>
</page>
</notebook>
</sheet>
<chatter/>
</form>
</field>
</record>
<record id="quality_alert_view_tree" model="ir.ui.view">
<field name="name">quality.alert.view.list.inherit.quality.control</field>
<field name="model">quality.alert</field>
<field name="inherit_id" ref="quality.quality_alert_view_tree"/>
<field name="arch" type="xml">
<field name="user_id" position="after">
<field name="check_id" optional="show"/>
</field>
<field name="priority" position="after">
<field name="description" optional="hide"/>
</field>
<field name="partner_id" position="after">
<field name="activity_exception_decoration" widget="activity_exception"/>
</field>
<field name="date_assign" position="after">
<field name="company_id" groups="base.group_multi_company"/>
</field>
</field>
</record>
<record id="quality_alert_view_pivot" model="ir.ui.view">
<field name="name">quality.alert.view.pivot</field>
<field name="model">quality.alert</field>
<field name="arch" type="xml">
<pivot string="Quality Alert Analysis" sample="1">
<field name="stage_id" type="col"/>
<field name="team_id" type="row"/>
</pivot>
</field>
</record>
<record id="quality_alert_view_graph" model="ir.ui.view">
<field name="name">quality.alert.view.graph</field>
<field name="model">quality.alert</field>
<field name="arch" type="xml">
<graph string="Quality Alert Analysis" sample="1">
<field name="reason_id"/>
<field name="stage_id"/>
</graph>
</field>
</record>
<record id="quality_alert_view_calendar" model="ir.ui.view">
<field name="name">quality.alert.view.calendar</field>
<field name="model">quality.alert</field>
<field name="priority" eval="2"/>
<field name="arch" type="xml">
<calendar string="Quality Alert" date_start="date_assign" color="user_id" quick_create="0" event_limit="5">
<field name="user_id" filters="1"/>
<field name="product_id"/>
<field name="team_id"/>
<field name="partner_id" avatar_field="avatar_128"/>
<field name="reason_id"/>
</calendar>
</field>
</record>
<record id="quality_alert_action_team" model="ir.actions.act_window">
<field name="name">Quality Alerts</field>
<field name="res_model">quality.alert</field>
<field name="view_mode">kanban,list,form,pivot,graph,calendar</field>
<field name="domain">[('team_id', '=', active_id)]</field>
<field name="context">{'default_team_id': active_id,
'search_default_team_id': [active_id]}</field>
</record>
<record id="quality_alert_action_check" model="ir.actions.act_window">
<field name="name">Quality Alerts</field>
<field name="res_model">quality.alert</field>
<field name="path">quality-alerts</field>
<field name="view_mode">kanban,list,form,pivot,graph,calendar,activity</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new quality alert
</p>
</field>
</record>
<record id="quality_alert_action_report" model="ir.actions.act_window">
<field name="name">Quality Alerts Analysis</field>
<field name="res_model">quality.alert</field>
<field name="path">quality-alerts-analysis</field>
<field name="view_mode">graph,pivot,kanban,list,form,calendar</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No quality alert
</p>
</field>
</record>
<!-- QUALITY.CHECK -->
<record id="quality_check_view_form" model="ir.ui.view">
<field name="name">quality.check.view.form</field>
<field name="model">quality.check</field>
<field name="arch" type="xml">
<form>
<header>
<button name="do_pass" type="object" class="btn-primary" invisible="quality_state != 'none'" string="Pass" data-hotkey="q"/>
<button name="do_pass" type="object" invisible="quality_state != 'fail'" groups="quality.group_quality_manager" string="Pass" data-hotkey="q"/>
<button name="do_fail" type="object" class="btn-primary" invisible="quality_state != 'none'" string="Fail" data-hotkey="w"/>
<button name="do_fail" type="object" invisible="quality_state != 'pass'" groups="quality.group_quality_manager" string="Fail" data-hotkey="w"/>
<button name="do_measure" type="object" invisible="test_type != 'measure' or quality_state != 'none'" string="Measure" data-hotkey="v"/>
<button name="do_alert" type="object" invisible="alert_ids or quality_state != 'pass'" string="Create Alert" data-hotkey="g"/>
<button name="do_alert" type="object" class="btn-primary" invisible="alert_ids or quality_state != 'fail'" string="Create Alert" data-hotkey="g"/>
<field name="quality_state" widget="statusbar"/>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button name="action_see_alerts" icon="fa-bell" type="object" class="oe_stat_button" invisible="alert_count == 0">
<field name="alert_count" string="Alerts" widget="statinfo"/>
</button>
<button
string="Spreadsheet"
class="oe_stat_button"
name="action_open_spreadsheet"
icon="fa-th" type="object"
groups="quality.group_quality_user"
invisible="test_type != 'spreadsheet'">
</button>
</div>
<group>
<group>
<field name="company_id" invisible="1"/>
<field name="title"/>
<field name="measure_on" readonly="point_id"/>
<field name="product_id" invisible="measure_on == 'operation'" domain="[('id', 'in', allowed_product_ids), ('type', '=', 'consu')] if allowed_product_ids else [('type', '=', 'consu')]"/>
<field name="show_lot_text" invisible="1"/>
<field name="move_line_id" invisible="1"/>
<field name="product_tracking" invisible="1"/>
<field name="is_lot_tested_fractionally" invisible="1"/>
<field name="lot_name" invisible="product_tracking == 'none' or not show_lot_text or not move_line_id"/>
<field name="lot_ids" invisible="product_tracking == 'none' or show_lot_text or not product_id or measure_on == 'operation'" widget="many2many_tags" options="{'edit_tags': True} or not product_id or measure_on == 'operation'" context="{'default_product_id': product_id}"/>
<label for="qty_line" invisible="not move_line_id or quality_state == 'fail'"/>
<label for="qty_line" invisible="not move_line_id or quality_state != 'fail'" string="Failed Quantity"/>
<div class="o_row" invisible="not move_line_id">
<field name="qty_line"/>
<field name="uom_id" widget="many2one_uom" groups="uom.group_uom"/>
</div>
<field name="failure_location_id" invisible="not failure_location_id" readonly="True"/>
<label for="qty_to_test" invisible="not move_line_id or measure_on != 'move_line' or not is_lot_tested_fractionally"/>
<div class="o_row" invisible="not move_line_id or measure_on != 'move_line' or not is_lot_tested_fractionally">
<field name="qty_to_test"/>
<field name="uom_id" widget="many2one_uom" groups="uom.group_uom"/>
</div>
<label for="qty_tested" invisible="measure_on != 'move_line' or not is_lot_tested_fractionally"/>
<div class="o_row" invisible="measure_on != 'move_line' or not is_lot_tested_fractionally">
<field name="qty_tested" readonly="quality_state != 'none'"/>
<field name="uom_id" widget="many2one_uom" groups="uom.group_uom"/>
</div>
<field name="test_type" invisible="1"/>
<field name="measure" invisible="test_type != 'measure'"/>
<field name="alert_ids" invisible="1"/>
</group>
<group>
<field name="picking_id" invisible="(quality_state in ('pass', 'fail') and not picking_id) or context.get('from_barcode') or hide_picking_id > 0"/>
<field name="point_id"/>
<field string="Type" name="test_type_id" options="{'no_open': True, 'no_create': True}" readonly="point_id" domain="[('technical_name', 'not in', ['register_consumed_materials', 'register_production', 'print_label', 'register_byproducts'])]"/>
<field
name="spreadsheet_template_id"
invisible="test_type != 'spreadsheet'"
required="test_type == 'spreadsheet'"
widget="many2one_spreadsheet"
readonly="point_id and point_id.spreadsheet_template_id"
/>
<field name="control_date" invisible="1"/>
<field name="team_id"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="user_id" string="Control Person" invisible="1"/>
<field name="partner_id" string="Partner" invisible="not partner_id"/>
</group>
</group>
<group invisible="test_type != 'picture'">
<field name="picture" widget="image"/>
</group>
<notebook>
<page string="Notes" name="notes">
<group>
<field string="Instructions" name="note"/>
<field string="Notes" name="additional_note"/>
</group>
</page>
</notebook>
</sheet>
<chatter/>
</form>
</field>
</record>
<record id="quality_check_view_kanban" model="ir.ui.view">
<field name="name">quality.check.view.kanban</field>
<field name="model">quality.check</field>
<field name="arch" type="xml">
<kanban class="o_kanban_small_column" sample="1">
<field name="quality_state"/>
<templates>
<t t-name="card">
<div class="row">
<field name="name" class="col-6 fw-bolder"/>
<div class="col-6">
<span t-attf-class="float-end text-end badge #{['none'].indexOf(record.quality_state.raw_value) > -1 ? 'text-bg-secondary' : ['fail'].indexOf(record.quality_state.raw_value) > -1 ? 'text-bg-danger' : ['done'].indexOf(record.quality_state.raw_value) > -1 ? 'text-bg-primary' : 'text-bg-success'}"><field name="quality_state"/></span>
</div>
</div>
<div class="row text-muted">
<field name="product_id" class="col-8"/>
<field name="lot_ids" class="col-4" widget="many2many_tags"/>
</div>
<field name="user_id" widget="many2one_avatar_user" class="ms-auto"/>
</t>
</templates>
</kanban>
</field>
</record>
<record id="quality_check_view_tree" model="ir.ui.view">
<field name="name">quality.check.view.list</field>
<field name="model">quality.check</field>
<field name="arch" type="xml">
<list default_order="id desc" sample="1" decoration-info="quality_state == 'none'">
<field name="name" decoration-bf="1"/>
<field name="title" decoration-bf="1" optional="show"/>
<field name="measure_on" optional="hide"/>
<field name='product_id' optional="show"/>
<field name="lot_ids" column_invisible="context.get('show_lots_text')" widget="many2many_tags"/>
<field name="lot_name" column_invisible="not context.get('show_lots_text')"/>
<field name="picking_id" optional="hide" string="Transfer"/>
<field name="control_date" string="Checked Date" optional="show"/>
<field name="user_id" string="Checked By" optional="show" widget='many2one_avatar_user'/>
<field name="point_id" optional="hide"/>
<field name="team_id" optional="hide"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="quality_state" optional="show" widget='badge' decoration-success="quality_state == 'pass'" decoration-info="quality_state == 'none'" decoration-danger="quality_state == 'fail'"/>
</list>
</field>
</record>
<record id="quality_check_view_graph" model="ir.ui.view">
<field name="name">quality.check.view.graph</field>
<field name="model">quality.check</field>
<field name="arch" type="xml">
<graph string="Quality Check Analysis" sample="1">
<field name="control_date" interval="day"/>
<field name="quality_state"/>
</graph>
</field>
</record>
<record id="quality_check_view_pivot" model="ir.ui.view">
<field name="name">quality.check.view.pivot</field>
<field name="model">quality.check</field>
<field name="arch" type="xml">
<pivot string="Quality Check Analysis" sample="1">
<field name="control_date" type="col" interval="day"/>
<field name="product_id" type="row"/>
</pivot>
</field>
</record>
<record id="quality_check_view_search" model="ir.ui.view">
<field name="name">quality.check.view.search</field>
<field name="model">quality.check</field>
<field name="arch" type="xml">
<search>
<field name="product_id" string="Product" filter_domain="['|', ('product_id', 'ilike', self), ('lot_ids', 'ilike', self)]"/>
<field name="picking_id"/>
<field name="lot_ids" groups="stock.group_production_lot" widget="many2many_tags"/>
<field name="team_id"/>
<filter string="In Progress" name="progress" domain="[('quality_state', '=', 'none')]"/>
<filter string="Passed" name="passed" domain="[('quality_state', '=', 'pass')]"/>
<filter string="Failed" name="failed" domain="[('quality_state', '=', 'fail')]"/>
<separator/>
<filter string="Checked Date" name="control_date" date="control_date"/>
<group>
<filter string="Status" name="state" context="{'group_by': 'quality_state'}"/>
<filter string="Product" name="by_product" context="{'group_by': 'product_id'}"/>
<filter string="Control Point" name="groupby_point_id" context="{'group_by': 'point_id'}"/>
<filter string="Team" name="groupby_team_id" context="{'group_by': 'team_id'}"/>
</group>
<filter invisible="1" string="Late Activities" name="activities_overdue"
domain="[('my_activity_date_deadline', '&lt;', 'today')]"/>
<filter invisible="1" string="Today Activities" name="activities_today"
domain="[('my_activity_date_deadline', '=', 'today')]"/>
<filter invisible="1" string="Future Activities" name="activities_upcoming"
domain="[('my_activity_date_deadline', '&gt;', 'today')]"/>
</search>
</field>
</record>
<record id="quality_check_action_spc" model="ir.actions.act_window">
<field name="name">Quality Checks SPC</field>
<field name="res_model">quality.check</field>
<field name="view_mode">graph</field>
<field name="view_id" ref="quality_check_view_graph"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No data yet!
</p>
</field>
</record>
<record id="quality_check_action_team" model="ir.actions.act_window">
<field name="name">Quality Checks</field>
<field name="res_model">quality.check</field>
<field name="view_mode">list,form</field>
<field name="domain">[('team_id', '=', active_id)]</field>
<field name="context">{
'default_team_id': active_id,
'search_default_team_id': [active_id],
'search_default_progress': "1"}
</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No quality check found
</p><p>
Define Quality Control Points in order to automatically generate
quality checks at the right logistic operation: transfers, manufacturing orders.
</p>
</field>
</record>
<record id="quality_check_action_picking" model="ir.actions.act_window">
<field name="name">Quality Checks</field>
<field name="res_model">quality.check</field>
<field name="view_mode">list,form</field>
<field name="context">{}</field>
</record>
<record id="quality_check_action_production_lot" model="ir.actions.act_window">
<field name="name">Quality Checks</field>
<field name="res_model">quality.check</field>
<field name="view_mode">list,form</field>
<field name="context">{
'create': 0}
</field>
</record>
<record id="quality_check_action_main" model="ir.actions.act_window">
<field name="name">Quality Checks</field>
<field name="res_model">quality.check</field>
<field name="path">quality-checks</field>
<field name="view_mode">list,kanban,form,pivot,graph,activity</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No quality check found
</p><p>
Define Quality Control Points in order to automatically generate
quality checks at the right logistic operation: transfers, manufacturing orders.
</p>
</field>
</record>
<record model="ir.actions.act_window" id="quality_check_action_report">
<field name="name">Quality Check Analysis</field>
<field name="res_model">quality.check</field>
<field name="path">quality-checks-analysis</field>
<field name="view_mode">graph,pivot,kanban,list,form</field>
<field name="context">{'search_default_state': 1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No quality checks
</p>
</field>
</record>
<!-- view used for product.template only -->
<record id="product_template_form_view_quality_control" model="ir.ui.view">
<field name="name">product.template.quality</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="stock.product_template_form_view_procurement_button"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='action_view_related_putaway_rules']" position="after">
<button name="action_see_quality_control_points" type="object" class="oe_stat_button" icon="fa-list" invisible="type != 'consu'" groups="quality.group_quality_user">
<field string="Quality Points" name="quality_control_point_qty" widget="statinfo"/>
</button>
<button name="action_see_quality_checks" type="object" class="oe_stat_button" icon="fa-check" invisible="(type != 'consu' or quality_pass_qty == 0) and quality_fail_qty == 0" groups="quality.group_quality_user">
<div class="o_field_widget o_stat_info mr4">
<span class="o_stat_text">Pass:</span>
<span class="o_stat_text">Fail:</span>
</div>
<div class="o_field_widget o_stat_info">
<span class="o_stat_value"><field name="quality_pass_qty"/></span>
<span class="o_stat_value"><field name="quality_fail_qty"/></span>
</div>
</button>
</xpath>
</field>
</record>
<!-- view used for product.product only -->
<record id="product_product_form_view_quality_control" model="ir.ui.view">
<field name="name">product.product.quality</field>
<field name="model">product.product</field>
<field name="inherit_id" ref="stock.product_form_view_procurement_button"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='action_view_related_putaway_rules']" position="after">
<button name="action_see_quality_control_points" type="object" icon="fa-list" class="oe_stat_button" invisible="type != 'consu'" groups="quality.group_quality_user">
<field string="Quality Points" name="quality_control_point_qty" widget="statinfo"/>
</button>
<button name="action_see_quality_checks" type="object" class="oe_stat_button" icon="fa-check" groups="quality.group_quality_user" invisible="quality_pass_qty == 0 and quality_fail_qty == 0" >
<div class="o_field_widget o_stat_info mr4">
<span class="o_stat_text">Pass:</span>
<span class="o_stat_text">Fail:</span>
</div>
<div class="o_field_widget o_stat_info">
<span class="o_stat_value"><field name="quality_pass_qty"/></span>
<span class="o_stat_value"><field name="quality_fail_qty"/></span>
</div>
</button>
</xpath>
</field>
</record>
<!-- QUALITY.ALERT.TEAM -->
<record id="quality_alert_team_dashboard_view_kanban" model="ir.ui.view">
<field name="name">quality.alert.team.view.kanban</field>
<field name="model">quality.alert.team</field>
<field name="arch" type="xml">
<kanban highlight_color="color" class="o_quality_kanban" create="0" can_open="0">
<field name="alias_email"/>
<templates>
<t t-name="menu">
<div t-if="widget.editable" role="menuitem">
<a class="dropdown-item ps-0" type="open">Configuration</a>
</div>
<div t-if="widget.editable" role="menuitem" aria-haspopup="true">
<field name="color" widget="kanban_color_picker"/>
</div>
</t>
<t t-name="card">
<field name="name" class="fw-bold fs-4 ms-2"/>
<div t-if="record.alias_email.value" class="small ms-2">
<i class="fa fa-envelope-o" role="img" aria-label="Domain alias" title="Domain alias"></i>&amp;nbsp; <field name="alias_id"/>
</div>
<div class="row mt-3">
<div class="col-6">
<button class="btn btn-primary ms-2" name="%(quality_alert_action_team)d" type="action">
<span><field name="alert_count"/> Quality Alerts</span>
</button>
</div>
<a name="%(quality_check_action_team)d" type="action" class="col-6">
<field name="check_count"/>
Checks In Progress
</a>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="quality_alert_team_view_form" model="ir.ui.view">
<field name="name">quality.alert.team.view.form</field>
<field name="model">quality.alert.team</field>
<field name="arch" type="xml">
<form>
<sheet>
<div class="oe_title">
<label for="name" string="Team Name"/>
<h1>
<field name="name" placeholder="e.g. The QA Masters"/>
</h1>
</div>
<group>
<group name="group_alias">
<label for="alias_name" string="Email Alias"/>
<div name="alias_def">
<field name="alias_id" class="oe_read_only oe_inline"
string="Email Alias" required="0"/>
<div class="oe_edit_only oe_inline" name="edit_alias" style="display: inline;" dir="ltr">
<field name="alias_name" placeholder="alias" class="oe_inline"/>@
<field name="alias_domain_id" class="oe_inline" placeholder="e.g. mycompany.com"
options="{'no_create': True, 'no_open': True}"/>
</div>
</div>
<field name="alias_contact" class="oe_inline" groups="base.group_no_one"
string="Accept Emails From"/>
</group>
<group>
<field name="company_id" groups="base.group_multi_company"/>
</group>
</group>
</sheet>
<chatter/>
</form>
</field>
</record>
<record id="quality_alert_team_view_tree" model="ir.ui.view">
<field name="name">quality.alert.team.view.list</field>
<field name="model">quality.alert.team</field>
<field name="arch" type="xml">
<list string="Teams">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="company_id" groups="base.group_multi_company"/>
</list>
</field>
</record>
<record id="quality_alert_team_view_kanban" model="ir.ui.view">
<field name="name">quality.alert.team.view.kanban</field>
<field name="model">quality.alert.team</field>
<field name="arch" type="xml">
<kanban class="o_kanban_mobile">
<templates>
<t t-name="card">
<field name="name" class="fw-bolder"/>
</t>
</templates>
</kanban>
</field>
</record>
<record id="quality_alert_team_action" model="ir.actions.act_window">
<field name="name">Quality Overview</field>
<field name="path">quality</field>
<field name="res_model">quality.alert.team</field>
<field name="view_mode">kanban,form</field>
<field name="view_id" ref="quality_alert_team_dashboard_view_kanban" />
<field name="help" type="html">
<p class="o_view_nocontent_empty_folder">
</p><p>
Quality Teams group the different quality alerts/checks
according to the roles (teams) that need them.
</p>
</field>
</record>
<record id="quality_alert_team_action_config" model="ir.actions.act_window">
<field name="name">Quality Teams</field>
<field name="res_model">quality.alert.team</field>
<field name="path">quality-teams</field>
<field name="view_mode">list,kanban,form</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'list', 'view_id': ref('quality_alert_team_view_tree')}),
(0, 0, {'view_mode': 'kanban', 'view_id': ref('quality_alert_team_view_kanban')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('quality_alert_team_view_form')})]"/>
</record>
<record id="quality_spreadsheet_template_action_config" model="ir.actions.act_window">
<field name="name">Quality Spreadsheet Templates</field>
<field name="res_model">quality.spreadsheet.template</field>
<field name="path">quality-spreadsheet-templates</field>
<field name="view_mode">list</field>
</record>
<record id="quality_spreadsheet_template_view_list" model="ir.ui.view">
<field name="name">quality.spreadsheet.template.list</field>
<field name="model">quality.spreadsheet.template</field>
<field name="arch" type="xml">
<list editable="bottom">
<field name="name"/>
<field name="check_cell"/>
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}" placeholder="Visible to all"/>
<field name="spreadsheet_file_name" column_invisible="True"/>
<field name="spreadsheet_binary_data" groups="base.group_no_one" widget="binary_spreadsheet" filename="spreadsheet_file_name" string="Data" />
<button string="Edit" class="float-end" icon="fa-pencil" type="object" name="action_open_spreadsheet"/>
</list>
</field>
</record>
<!-- QUALITY.TAG -->
<record id="quality_tag_view_search" model="ir.ui.view">
<field name="name">quality.tag.view.search</field>
<field name="model">quality.tag</field>
<field name="arch" type="xml">
<search string="Tags">
<field name="name"/>
</search>
</field>
</record>
<record id="quality_tag_view_tree" model="ir.ui.view">
<field name="name">quality.tag.view.list</field>
<field name="model">quality.tag</field>
<field name="arch" type="xml">
<list string="Tags" editable="bottom">
<field name="name"/>
</list>
</field>
</record>
<record id="quality_tag_action" model="ir.actions.act_window">
<field name="name">Quality Tags</field>
<field name="res_model">quality.tag</field>
<field name="path">quality-tags</field>
<field name="view_mode">list,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Add a new tag
</p>
</field>
</record>
<!-- QUALITY.ALERT.STAGE -->
<record id="quality_alert_stage_view_tree" model="ir.ui.view">
<field name="name">quality.alert.stage.list</field>
<field name="model">quality.alert.stage</field>
<field name="arch" type="xml">
<list editable="bottom">
<field name="sequence" widget="handle"/>
<field name="name" string="Stage Name"/>
<field name="folded"/>
<field name="done"/>
<field name="team_ids" widget="many2many_tags"/>
</list>
</field>
</record>
<record id="view_quality_alert_stage_kanban" model="ir.ui.view">
<field name="name">quality.alert.stage.kanban</field>
<field name="model">quality.alert.stage</field>
<field name="arch" type="xml">
<kanban>
<templates>
<t t-name="card">
<field name="name" class="fw-bolder"/>
</t>
</templates>
</kanban>
</field>
</record>
<record id="quality_alert_stage_action" model="ir.actions.act_window">
<field name="name">Quality Alert Stages</field>
<field name="res_model">quality.alert.stage</field>
<field name="path">quality-alert-stages</field>
<field name="view_mode">list,kanban,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new quality alert stage
</p><p>
Quality Alert stages define the different steps a quality alert should go through.
</p>
</field>
</record>
<!-- QUALITY.POINT -->
<record id="quality_point_view_tree" model="ir.ui.view">
<field name="name">quality.point.view.list.inherit.quality.control</field>
<field name="model">quality.point</field>
<field name="inherit_id" ref="quality.quality_point_view_tree"/>
<field name="priority">10</field>
<field name="arch" type="xml">
<xpath expr="//field[@name='test_type_id']" position="before">
<field name="measure_on" optional="show"/>
<field name="measure_frequency_type" optional="hide"/>
<field name="is_lot_tested_fractionally" optional="hide"/>
<field name="testing_percentage_within_lot" optional="hide" string="Testing % Within Lot"/>
</xpath>
</field>
</record>
<record id="quality_point_view_search" model="ir.ui.view">
<field name="name">quality.point.view.search</field>
<field name="model">quality.point</field>
<field name="arch" type="xml">
<search>
<field name="name" string="Control Point" filter_domain="[
'|', '|', ('name', 'ilike', self), ('title', 'ilike', self), ('product_ids', 'ilike', self)]"/>
<field name="product_ids"/>
<field name="picking_type_ids"/>
<field name="test_type_id"/>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
<group>
<filter string="Test Type" name="groupby_test_type" context="{'group_by': 'test_type_id'}"/>
<filter string="Team" name="groupby_team_id" context="{'group_by': 'team_id'}"/>
<filter string="Responsible" name="groupby_user_id" context="{'group_by': 'user_id'}"/>
</group>
</search>
</field>
</record>
<record id="view_quality_point_kanban" model="ir.ui.view">
<field name="name">quality.point.kanban</field>
<field name="model">quality.point</field>
<field name="arch" type="xml">
<kanban class="o_kanban_mobile">
<templates>
<t t-name="card">
<div class="d-flex">
<field name="name" class="fw-bolder me-2 flex-shrink-0"/>
<span t-if="record.title.value">-</span>
<field name="title" class="text-truncate ms-2"/>
</div>
<div>Type: <field name="test_type_id"/></div>
<div>Control per: <field name="measure_on"/></div>
<div>Team: <field name="team_id"/></div>
<footer>
<field name="company_id" invisible="1"/> <!-- required for the domain of `check_company' in `user-id' -->
<field class="ms-auto" name="user_id" widget="many2one_avatar_user"/>
</footer>
</t>
</templates>
</kanban>
</field>
</record>
<record id="quality_point_view_form_inherit_quality_control" model="ir.ui.view">
<field name="name">quality.point.view.form.inherit.quality.control</field>
<field name="model">quality.point</field>
<field name="inherit_id" ref="quality.quality_point_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@name='button_box']" position="inside">
<button name="action_see_quality_checks" type="object" icon="fa-check" class="oe_stat_button">
<field string="Quality Checks" name="check_count" widget="statinfo"/>
</button>
<button name="action_see_spc_control" type="object" class="oe_stat_button"
invisible="check_count == 0 or test_type != 'measure'">
<span class="fa fa-2x" data-icon="&#x2211;" style="padding-left: 10px;" role="img" aria-label="Statistics" title="Statistics"/>
<div class="o_field_widget o_stat_info mr4">
<span class="o_stat_text">AVG:</span>
<span class="o_stat_text">STD:</span>
</div>
<div class="o_field_widget o_stat_info">
<span class="o_stat_value"><field name="average"/></span>
<span class="o_stat_value"><field name="standard_deviation"/></span>
</div>
</button>
</xpath>
<xpath expr="//page[@name='Notes']" position="before">
<page string="Message If Failure" name="message_if_failure"
invisible="test_type in ['picture', 'instructions', 'register_consumed_materials', 'print_label']">
<field name="failure_message"/>
</page>
</xpath>
<xpath expr="//field[@name='test_type']" position="before">
<field name="measure_on"/>
<field name="measure_frequency_type" string="Control Frequency"/>
<label for="measure_frequency_value" string="" invisible="measure_frequency_type in ('all', 'on_demand')"/>
<div class="o_row" invisible="measure_frequency_type in ('all', 'on_demand')">
<field name="measure_frequency_value" nolabel="1" invisible="measure_frequency_type != 'random'"/>
<label for="measure_frequency_value" string="% of the time" invisible="measure_frequency_type != 'random'"/>
<field name="measure_frequency_unit_value" string="Frequency" nolabel="1" invisible="measure_frequency_type != 'periodical'"/>
<field name="measure_frequency_unit" invisible="measure_frequency_type != 'periodical'" required="measure_frequency_type == 'periodical'"/>
</div>
<label for="testing_percentage_within_lot" string="Partial Test" invisible="measure_on != 'move_line'" />
<div class="o_row" invisible="measure_on != 'move_line'">
<span>Test </span>
<field name="testing_percentage_within_lot" nolabel="1"/>
<span>% of products</span>
</div>
</xpath>
<xpath expr="//field[@name='test_type_id']" position="after">
<label for="norm" invisible="test_type != 'measure'"/>
<div class="o_row" invisible="test_type != 'measure'">
<field name="norm" required="test_type == 'measure'"/>
<field name="norm_unit" string="Unit of Measure" required="test_type == 'measure'"/>
</div>
<label for="tolerance_min" string="Tolerance" invisible="test_type != 'measure'"/>
<div invisible="test_type != 'measure'" class="o_row">
<span>from </span> <field name="tolerance_min"/>
<span>to </span> <field name="tolerance_max"/>
</div>
<field
name="spreadsheet_template_id"
invisible="test_type != 'spreadsheet'"
required="test_type == 'spreadsheet'"
widget="many2one_spreadsheet"
/>
<field name="spreadsheet_check_cell" invisible="test_type != 'spreadsheet'" />
</xpath>
</field>
</record>
<record model="ir.actions.act_window" id="quality_point_action">
<field name="name">Control Points</field>
<field name="res_model">quality.point</field>
<field name="path">control-points</field>
<field name="view_mode">list,kanban,form</field>
<field name="search_view_id" ref="quality_point_view_search"/>
<field name="view_id" ref="quality_point_view_tree"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No quality control point found
</p><p>
Quality control points define the quality checks which should be
performed at each operation, for your different products.
</p>
</field>
</record>
<!-- Menu structure-->
<menuitem
id="menu_quality_root"
name="Quality"
web_icon="quality_control,static/description/icon.png"
sequence="150"
groups="quality.group_quality_user"/>
<menuitem
id="menu_quality_dashboard"
name="Overview"
action="quality_alert_team_action"
parent="menu_quality_root"
sequence="5"/>
<menuitem
id="menu_quality_control"
name="Quality Control"
parent="menu_quality_root"
sequence="15"/>
<menuitem
id="menu_quality_control_points"
name="Control Points"
parent="menu_quality_control"
action="quality_point_action"
groups="quality.group_quality_manager"
sequence="17"/>
<menuitem
id="menu_quality_checks"
name="Quality Checks"
action="quality_check_action_main"
parent="menu_quality_control"
sequence="18"/>
<menuitem
id="menu_quality_alert"
name="Quality Alerts"
action="quality_alert_action_check"
parent="menu_quality_control"
sequence="20"/>
<menuitem
id="menu_quality_configuration"
name="Configuration"
groups="quality.group_quality_manager"
parent="menu_quality_root"
sequence="25"/>
<menuitem
id="menu_quality_config_alert_team"
name="Quality Teams"
action="quality_alert_team_action_config"
parent="menu_quality_configuration"
sequence="5"/>
<menuitem
id="menu_quality_config_alert_stage"
name="Quality Alert Stages"
action="quality_alert_stage_action"
parent="menu_quality_configuration"
groups="base.group_no_one"
sequence="15"/>
<menuitem
id="menu_config_quality_tags"
name="Quality Tags"
groups="base.group_no_one"
action="quality_tag_action"
parent="menu_quality_configuration"
sequence="25"/>
<menuitem
id="menu_config_quality_spreadsheet_template"
name="Quality Spreadsheet Templates"
action="quality_spreadsheet_template_action_config"
parent="menu_quality_configuration"
sequence="35"/>
<menuitem
id="menu_quality_reporting"
name="Reporting"
groups="quality.group_quality_manager"
parent="menu_quality_root"
sequence="20"/>
<menuitem
id="menu_quality_alert_report"
action="quality_alert_action_report"
parent="menu_quality_reporting"
sequence="6"/>
<menuitem
id="menu_quality_check_report"
action="quality_check_action_report"
parent="menu_quality_reporting"
sequence="5"/>
</odoo>