Before this commit, suppose we have a scenario like below
Task-A:
Activity-1:
name: Email ( Today )
Assigned to: User-1
Task-B:
Activity-1:
name: Email ( Today )
assigned to: User-2
Activity-2:
name: Call ( Due in 3 Days )
assigned to: User-1
When User-1 goes through the systray 'Today' filter shortcut he gets both
Task-A and Task-B in the list instead of only Task-A. Indeed currently
activities are not filtered based on current user with its deadlines.
However purpose of systray is to indicate activities current user has to
perform instead of global activities.
After this commit activities will be filtered based on deadlines as well as the
current user. In order to achieve this behavior we needed to pass a domain like
[
('activity_ids.date_deadline','=', fields.Date.today()),
('activity_ids.user_id','=', 1)
]
And for that purpose we introduced a non-stored compute field with a search
method.
Task ID-2438822
COM PR odoo/odoo#72219
X-original-commit: f4eaf4d8fb2f97240201104dcd4fc7e2674bce02
1069 lines
55 KiB
XML
1069 lines
55 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<odoo>
|
|
|
|
<!-- equiment.request : views -->
|
|
<record id="hr_equipment_request_view_search" model="ir.ui.view">
|
|
<field name="name">equipment.request.search</field>
|
|
<field name="model">maintenance.request</field>
|
|
<field name="arch" type="xml">
|
|
<search string="Maintenance Request Search">
|
|
<field name="name" string="Request"/>
|
|
<field name="category_id"/>
|
|
<field name="user_id"/>
|
|
<field name="equipment_id"/>
|
|
<field name="owner_user_id"/>
|
|
<field name="stage_id"/>
|
|
<field name="maintenance_team_id"/>
|
|
<filter string="My Maintenances" name="my_maintenances" domain="[('user_id', '=', uid)]"/>
|
|
<separator/>
|
|
<filter string="To Do" name="todo" domain="[('stage_id.done', '=', False)]"/>
|
|
<separator/>
|
|
<filter string="Blocked" name="kanban_state_block" domain="[('kanban_state', '=', 'blocked')]"/>
|
|
<filter string="Ready" name="done" domain="[('kanban_state', '=', 'done')]"/>
|
|
<separator/>
|
|
<filter string="High-priority" name="high_priority" domain="[('priority', '=', '3')]"/>
|
|
<separator/>
|
|
<filter string="Unscheduled" name="unscheduled" domain="[('schedule_date', '=', False)]"/>
|
|
<separator/>
|
|
<filter name="filter_request_date" date="request_date"/>
|
|
<filter name="filter_schedule_date" date="schedule_date"/>
|
|
<filter name="filter_close_date" date="close_date"/>
|
|
<separator/>
|
|
<filter string="Unread Messages" name="message_needaction" domain="[('message_needaction', '=', True)]"/>
|
|
<separator/>
|
|
<filter invisible="1" string="Late Activities" name="activities_overdue"
|
|
domain="[('my_activity_date_deadline', '<', context_today().strftime('%Y-%m-%d'))]"
|
|
help="Show all records which has next action date is before today"/>
|
|
<filter invisible="1" string="Today Activities" name="activities_today"
|
|
domain="[('my_activity_date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/>
|
|
<filter invisible="1" string="Future Activities" name="activities_upcoming_all"
|
|
domain="[('my_activity_date_deadline', '>', context_today().strftime('%Y-%m-%d'))]"/>
|
|
<separator/>
|
|
<filter string="Archived" name="inactive" domain="[('archive', '=', True)]"/>
|
|
<group expand='0' string='Group by...'>
|
|
<filter string='Assigned to' name="assigned" domain="[]" context="{'group_by': 'user_id'}"/>
|
|
<filter string='Category' name="category" domain="[]" context="{'group_by' : 'category_id'}"/>
|
|
<filter string='Stage' name="stages" domain="[]" context="{'group_by' : 'stage_id'}"/>
|
|
<filter string='Created By' name='created_by' domain="[]" context="{'group_by': 'owner_user_id'}"/>
|
|
</group>
|
|
</search>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_equipment_request_view_form" model="ir.ui.view">
|
|
<field name="name">equipment.request.form</field>
|
|
<field name="model">maintenance.request</field>
|
|
<field name="arch" type="xml">
|
|
<form string="Maintenance Request">
|
|
<header>
|
|
<button string="Cancel" name="archive_equipment_request" type="object" attrs="{'invisible': [('archive', '=', True)]}"/>
|
|
<button string="Reopen Request" name="reset_equipment_request" type="object" attrs="{'invisible': [('archive', '=', False)]}"/>
|
|
<field name="stage_id" widget="statusbar" options="{'clickable': '1'}" attrs="{'invisible': [('archive', '=', True)]}"/>
|
|
</header>
|
|
<sheet>
|
|
<div attrs="{'invisible': [('archive', '=', False)]}">
|
|
<span class="badge badge-warning float-right">Canceled</span>
|
|
</div>
|
|
<div class="oe_right">
|
|
<field name="kanban_state" class="oe_inline" widget="state_selection"/>
|
|
</div>
|
|
<div class="oe_title">
|
|
<label for="name" string="Request"/>
|
|
<h1>
|
|
<field name="name" placeholder="e.g. Screen not working"/>
|
|
</h1>
|
|
</div>
|
|
<group>
|
|
<group>
|
|
<field name="owner_user_id" string="Requested By" invisible="1"/>
|
|
<field name="equipment_id" context="{'default_company_id':company_id, 'default_category_id':category_id}"/>
|
|
<field name="category_id" groups="maintenance.group_equipment_manager" context="{'default_company_id':company_id}" attrs="{'invisible': [('equipment_id', '=', False)]}"/>
|
|
<field name="request_date" readonly="True"/>
|
|
<field name="done" invisible="1"/>
|
|
<field name="close_date" attrs="{'invisible': [('done', '!=', True)]}" readonly="True"/>
|
|
<field name="archive" invisible="1"/>
|
|
<field name="maintenance_type" widget="radio"/>
|
|
</group>
|
|
<group>
|
|
<field name="maintenance_team_id" options="{'no_create': True, 'no_open': True}"/>
|
|
<field name="user_id" string="Responsible"/>
|
|
<field name="schedule_date"/>
|
|
<label for="duration"/>
|
|
<div>
|
|
<field name="duration"
|
|
widget="float_time"
|
|
class="oe_inline"/> <span class="ml8">hours</span>
|
|
</div>
|
|
<field name="priority" widget="priority"/>
|
|
<field name="email_cc" string="Email cc" groups="base.group_no_one"/>
|
|
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
|
|
</group>
|
|
</group>
|
|
<field name='description' placeholder="Internal Notes"/>
|
|
</sheet>
|
|
<div class="oe_chatter">
|
|
<field name="message_follower_ids"/>
|
|
<field name="activity_ids"/>
|
|
<field name="message_ids"/>
|
|
</div>
|
|
</form>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_equipment_request_view_kanban" model="ir.ui.view">
|
|
<field name="name">equipment.request.kanban</field>
|
|
<field name="model">maintenance.request</field>
|
|
<field name="arch" type="xml">
|
|
<kanban default_group_by="stage_id" sample="1">
|
|
<field name="stage_id"/>
|
|
<field name="color"/>
|
|
<field name="priority"/>
|
|
<field name="equipment_id"/>
|
|
<field name="user_id"/>
|
|
<field name="owner_user_id"/>
|
|
<field name="category_id"/>
|
|
<field name="kanban_state"/>
|
|
<field name="activity_ids" />
|
|
<field name="activity_state" />
|
|
<progressbar field="kanban_state" colors='{"done": "success", "blocked": "danger"}'/>
|
|
<templates>
|
|
<t t-name="kanban-tooltip">
|
|
<ul class="oe_kanban_tooltip">
|
|
<li t-if="record.category_id.raw_value"><b>Category:</b> <t t-esc="record.category_id.value"/></li>
|
|
<li t-if="record.user_id.raw_value"><b>Request to:</b> <t t-esc="record.user_id.value"/></li>
|
|
</ul>
|
|
</t>
|
|
<t t-name="kanban-box">
|
|
<div t-attf-class="{{!selection_mode ? 'oe_kanban_color_' + kanban_getcolor(record.color.raw_value) : ''}} oe_kanban_card oe_kanban_global_click oe_semantic_html_override">
|
|
<div class="o_dropdown_kanban dropdown">
|
|
|
|
<a role="button" class="dropdown-toggle o-no-caret btn" data-toggle="dropdown" data-display="static" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
|
<span class="fa fa-ellipsis-v"/>
|
|
</a>
|
|
<div class="dropdown-menu" role="menu">
|
|
<t t-if="widget.editable"><a role="menuitem" type="edit" class="dropdown-item">Edit...</a></t>
|
|
<t t-if="widget.deletable"><a role="menuitem" type="delete" class="dropdown-item">Delete</a></t>
|
|
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
|
</div>
|
|
</div>
|
|
<div class="oe_kanban_content" tooltip="kanban-tooltip">
|
|
<div class="o_kanban_record_top">
|
|
<b class="o_kanban_record_title"><field name="name"/></b>
|
|
</div>
|
|
<div class="o_kanban_record_body">
|
|
<span name="owner_user_id" t-if="record.owner_user_id.raw_value">Requested by : <field name="owner_user_id"/><br/></span>
|
|
<span class="oe_grey" t-if="record.equipment_id.raw_value"><field name="equipment_id"/><br/></span>
|
|
<span t-if="record.category_id.raw_value"><field name="category_id"/></span>
|
|
</div>
|
|
<div class="o_kanban_record_bottom">
|
|
<div class="oe_kanban_bottom_left">
|
|
<field name="priority" widget="priority"/>
|
|
<div class="o_kanban_inline_block ml4 mr4">
|
|
<field name="activity_ids" widget="kanban_activity" />
|
|
</div>
|
|
</div>
|
|
<div class="oe_kanban_bottom_right">
|
|
<field name="kanban_state" widget="state_selection"/>
|
|
<field name="user_id" widget="many2one_avatar_user"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="oe_clear"></div>
|
|
</div>
|
|
</t>
|
|
</templates>
|
|
</kanban>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_equipment_request_view_tree" model="ir.ui.view">
|
|
<field name="name">equipment.request.tree</field>
|
|
<field name="model">maintenance.request</field>
|
|
<field name="arch" type="xml">
|
|
<tree string="maintenance Request" multi_edit="1" sample="1">
|
|
<field name="message_needaction" invisible="1"/>
|
|
<field name="name"/>
|
|
<field name="request_date" groups="base.group_no_one"/>
|
|
<field name="owner_user_id"/>
|
|
<field name="user_id"/>
|
|
<field name="category_id" readonly="1" groups="maintenance.group_equipment_manager"/>
|
|
<field name="stage_id"/>
|
|
<field name="company_id" readonly="1" groups="base.group_multi_company"/>
|
|
<field name="activity_exception_decoration" widget="activity_exception"/>
|
|
</tree>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_equipment_request_view_graph" model="ir.ui.view">
|
|
<field name="name">equipment.request.graph</field>
|
|
<field name="model">maintenance.request</field>
|
|
<field name="arch" type="xml">
|
|
<graph string="maintenance Request" sample="1">
|
|
<field name="user_id"/>
|
|
<field name="stage_id"/>
|
|
</graph>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_equipment_request_view_pivot" model="ir.ui.view">
|
|
<field name="name">equipment.request.pivot</field>
|
|
<field name="model">maintenance.request</field>
|
|
<field name="arch" type="xml">
|
|
<pivot string="maintenance Request" sample="1">
|
|
<field name="user_id"/>
|
|
<field name="stage_id"/>
|
|
<field name="color" invisible="1"/>
|
|
</pivot>
|
|
</field>
|
|
</record>
|
|
|
|
|
|
<record id="hr_equipment_view_calendar" model="ir.ui.view">
|
|
<field name="name">equipment.request.calendar</field>
|
|
<field name="model">maintenance.request</field>
|
|
<field name="arch" type="xml">
|
|
<calendar date_start="schedule_date" date_delay="duration" color="user_id" event_limit="5">
|
|
<field name="user_id" filters="1"/>
|
|
<field name="priority"/>
|
|
<field name="maintenance_type"/>
|
|
</calendar>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- equiment.request : actions -->
|
|
<record id="hr_equipment_request_action" model="ir.actions.act_window">
|
|
<field name="name">Maintenance Requests</field>
|
|
<field name="res_model">maintenance.request</field>
|
|
<field name="view_mode">kanban,tree,form,pivot,graph,calendar</field>
|
|
<field name="view_id" ref="hr_equipment_request_view_kanban"/>
|
|
<field name="context">{'default_user_id': uid}</field>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
Add a new maintenance request
|
|
</p><p>
|
|
Follow the process of the request and communicate with the collaborator.
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_equipment_request_action_link" model="ir.actions.act_window">
|
|
<field name="name">Maintenance Requests</field>
|
|
<field name="res_model">maintenance.request</field>
|
|
<field name="view_mode">kanban,tree,form,pivot,graph,calendar</field>
|
|
<field name="search_view_id" ref="hr_equipment_request_view_search"/>
|
|
<field name="view_id" ref="hr_equipment_request_view_kanban"/>
|
|
<field name="context">{
|
|
'search_default_category_id': [active_id],
|
|
'default_category_id': active_id,
|
|
}</field>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
Add a new maintenance request
|
|
</p><p>
|
|
Follow the process of the request and communicate with the collaborator.
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_equipment_request_action_from_equipment" model="ir.actions.act_window">
|
|
<field name="name">Maintenance Requests</field>
|
|
<field name="res_model">maintenance.request</field>
|
|
<field name="binding_model_id" ref="maintenance.model_maintenance_equipment"/>
|
|
<field name="view_mode">kanban,tree,form,pivot,graph,calendar</field>
|
|
<field name="context">{
|
|
'default_equipment_id': active_id,
|
|
}</field>
|
|
<field name="domain">[('equipment_id', '=', active_id)]</field>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
Add a new maintenance request
|
|
</p><p>
|
|
Follow the process of the request and communicate with the collaborator.
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_equipment_todo_request_action_from_dashboard" model="ir.actions.act_window">
|
|
<field name="name">Maintenance Requests</field>
|
|
<field name="res_model">maintenance.request</field>
|
|
<field name="view_mode">kanban,tree,form,pivot,graph,calendar</field>
|
|
<field name="context">{
|
|
'default_maintenance_team_id': active_id,
|
|
}</field>
|
|
<field name="domain">[('maintenance_team_id', '=', active_id), ('maintenance_type', 'in', context.get('maintenance_type', ['preventive', 'corrective']))]</field>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
Add a new maintenance request
|
|
</p><p>
|
|
Follow the process of the request and communicate with the collaborator.
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_equipment_request_action_cal" model="ir.actions.act_window">
|
|
<field name="name">Maintenance Requests</field>
|
|
<field name="res_model">maintenance.request</field>
|
|
<field name="view_mode">calendar,kanban,tree,form,pivot,graph</field>
|
|
<field name="view_id" ref="hr_equipment_view_calendar"/>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
Add a new maintenance request
|
|
</p><p>
|
|
Follow the process of the request and communicate with the collaborator.
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="maintenance_request_action_reports" model="ir.actions.act_window">
|
|
<field name="name">Maintenance Requests</field>
|
|
<field name="res_model">maintenance.request</field>
|
|
<field name="view_mode">graph,pivot,kanban,tree,form,calendar</field>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
Add a new maintenance request
|
|
</p><p>
|
|
Follow the process of the request and communicate with the collaborator.
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- equiment : views -->
|
|
<record id="hr_equipment_view_form" model="ir.ui.view">
|
|
<field name="name">equipment.form</field>
|
|
<field name="model">maintenance.equipment</field>
|
|
<field name="arch" type="xml">
|
|
<form string="Equipments">
|
|
<sheet>
|
|
<div class="oe_button_box" name="button_box">
|
|
<button name="%(hr_equipment_request_action_from_equipment)d"
|
|
type="action"
|
|
class="oe_stat_button"
|
|
context="{'default_company_id': company_id}"
|
|
icon="fa-wrench">
|
|
<field string="Maintenance" name="maintenance_count" widget="statinfo"/>
|
|
</button>
|
|
</div>
|
|
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
|
|
<div class="oe_title">
|
|
<label for="name"/>
|
|
<h1><field name="name" string="Name" placeholder="e.g. LED Monitor"/></h1>
|
|
</div>
|
|
<group>
|
|
<group>
|
|
<field name="active" invisible="1"/>
|
|
<field name="category_id" options="{"no_open": True}" context="{'default_company_id':company_id}"/>
|
|
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}"/>
|
|
<field name="owner_user_id" string="Owner"/>
|
|
</group>
|
|
<group>
|
|
<field name="maintenance_team_id" attrs="{'required': [('period', '!=', 0)]}" context="{'default_company_id':company_id}"/>
|
|
<field name="technician_user_id" domain="[('share', '=', False)]"/>
|
|
<field name="assign_date" groups="base.group_no_one"/>
|
|
<field name="scrap_date" groups="base.group_no_one"/>
|
|
<field name="location" string="Used in location"/>
|
|
</group>
|
|
</group>
|
|
<notebook>
|
|
<page string="Description" name="description">
|
|
<field name="note"/>
|
|
</page>
|
|
<page string="Product Information" name="product_information">
|
|
<group>
|
|
<group>
|
|
<field name="partner_id"/>
|
|
<field name="partner_ref"/>
|
|
<field name="model"/>
|
|
<field name="serial_no"/>
|
|
</group><group>
|
|
<field name="effective_date"/>
|
|
<field name="cost" groups="maintenance.group_equipment_manager"/>
|
|
<field name="warranty_date"/>
|
|
</group>
|
|
</group>
|
|
</page>
|
|
<page string="Maintenance" name="maintenance">
|
|
<group>
|
|
<group name="maintenance">
|
|
<field name="next_action_date" class="oe_read_only" string="Next Preventive Maintenance"/>
|
|
<label for="period" string="Preventive Maintenance Frequency"/>
|
|
<div class="o_row">
|
|
<field name="period"/> days
|
|
</div>
|
|
<label for="maintenance_duration" string="Maintenance Duration"/>
|
|
<div class="o_row">
|
|
<field name="maintenance_duration"/> hours
|
|
</div>
|
|
</group>
|
|
</group>
|
|
</page>
|
|
</notebook>
|
|
</sheet>
|
|
<div class="oe_chatter">
|
|
<field name="message_follower_ids"/>
|
|
<field name="activity_ids"/>
|
|
<field name="message_ids"/>
|
|
</div>
|
|
</form>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_equipment_view_kanban" model="ir.ui.view">
|
|
<field name="name">equipment.kanban</field>
|
|
<field name="model">maintenance.equipment</field>
|
|
<field name="arch" type="xml">
|
|
<kanban sample="1">
|
|
<field name="name"/>
|
|
<field name="color"/>
|
|
<field name="technician_user_id"/>
|
|
<field name="owner_user_id"/>
|
|
<field name="category_id"/>
|
|
<field name="serial_no"/>
|
|
<field name="model"/>
|
|
<field name="maintenance_ids"/>
|
|
<field name="maintenance_open_count"/>
|
|
<field name="next_action_date"/>
|
|
<field name="activity_ids" />
|
|
<field name="activity_state" />
|
|
<progressbar field="activity_state" colors='{"planned": "success", "today": "warning", "overdue": "danger"}'/>
|
|
<templates>
|
|
<t t-name="kanban-tooltip">
|
|
<ul class="oe_kanban_tooltip">
|
|
<li t-if="record.serial_no.raw_value"><b>Serial Number:</b> <t t-esc="record.serial_no.value"/></li>
|
|
<li t-if="record.model.raw_value"><b>Model Number:</b> <t t-esc="record.model.value"/></li>
|
|
</ul>
|
|
</t>
|
|
<t t-name="kanban-box">
|
|
<div t-attf-class="{{!selection_mode ? 'oe_kanban_color_' + kanban_getcolor(record.color.raw_value) : ''}} oe_kanban_card oe_kanban_global_click">
|
|
<div class="o_dropdown_kanban dropdown" t-if="!selection_mode">
|
|
|
|
<a role="button" class="dropdown-toggle o-no-caret btn" data-toggle="dropdown" data-display="static" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
|
<span class="fa fa-ellipsis-v"/>
|
|
</a>
|
|
<div class="dropdown-menu" role="menu">
|
|
<t t-if="widget.editable"><a role="menuitem" type="edit" class="dropdown-item">Edit...</a></t>
|
|
<t t-if="widget.deletable"><a role="menuitem" type="delete" class="dropdown-item">Delete</a></t>
|
|
<div role="separator" class="dropdown-divider"></div>
|
|
<div role="separator" class="dropdown-header">Record Colour</div>
|
|
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
|
</div>
|
|
</div>
|
|
<div class="oe_kanban_content" tooltip="kanban-tooltip">
|
|
<div class="o_kanban_record_top">
|
|
<b class="o_kanban_record_title"><field name="name"/><small><span t-if="record.model.raw_value"> (<field name="model"/>)</span></small></b>
|
|
</div>
|
|
<div class="o_kanban_record_body">
|
|
<div t-if="record.serial_no.raw_value"><field name="serial_no"/></div>
|
|
</div>
|
|
<div class="o_kanban_record_bottom">
|
|
<div class="oe_kanban_bottom_left">
|
|
<div class="badge badge-danger" t-if="!selection_mode and record.maintenance_open_count.raw_value" >
|
|
<t t-raw="record.maintenance_open_count.raw_value"/> Request
|
|
</div>
|
|
<div class="badge badge-secondary" t-if="!selection_mode and record.next_action_date.raw_value" >
|
|
<t t-raw="moment(record.next_action_date.raw_value).format('MMMM Do')"/>
|
|
</div>
|
|
</div>
|
|
<div class="oe_kanban_bottom_right">
|
|
<div class="o_kanban_inline_block" t-if="!selection_mode">
|
|
<field name="activity_ids" widget="kanban_activity" />
|
|
</div>
|
|
<field name="owner_user_id" widget="many2one_avatar_user"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="oe_clear"></div>
|
|
</div>
|
|
</t>
|
|
</templates>
|
|
</kanban>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_equipment_view_tree" model="ir.ui.view">
|
|
<field name="name">equipment.tree</field>
|
|
<field name="model">maintenance.equipment</field>
|
|
<field name="arch" type="xml">
|
|
<tree string="Assign To User" sample="1">
|
|
<field name="message_needaction" invisible="1"/>
|
|
<field name="name"/>
|
|
<!-- <field name="active" invisible="1"/> -->
|
|
<field name="owner_user_id" string="Owner"/>
|
|
<field name="assign_date" groups="base.group_no_one"/>
|
|
<field name="serial_no"/>
|
|
<field name="technician_user_id"/>
|
|
<field name="category_id"/>
|
|
<field name="partner_id" invisible="1"/>
|
|
<field name="company_id" groups="base.group_multi_company"/>
|
|
<field name="activity_exception_decoration" widget="activity_exception"/>
|
|
</tree>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_equipment_view_search" model="ir.ui.view">
|
|
<field name="name">equipment.search</field>
|
|
<field name="model">maintenance.equipment</field>
|
|
<field name="arch" type="xml">
|
|
<search string="Search">
|
|
<field string="Equipment" name="name" filter_domain="[
|
|
'|', '|', '|',
|
|
('name', 'ilike', self), ('model', 'ilike', self), ('serial_no', 'ilike', self), ('partner_ref', 'ilike', self)]"/>
|
|
<field string="Category" name="category_id"/>
|
|
<field name="owner_user_id"/>
|
|
<filter string="My Equipments" name="my" domain="[('owner_user_id', '=', uid)]"/>
|
|
<filter string="Assigned" name="assigned" domain="[('owner_user_id', '!=', False)]"/>
|
|
<filter string="Unassigned" name="available" domain="[('owner_user_id', '=', False)]"/>
|
|
<separator/>
|
|
<filter string="Under Maintenance" name="under_maintenance" domain="[('maintenance_open_count', '>', 0)]"/>
|
|
<separator/>
|
|
<filter string="Unread Messages" name="message_needaction" domain="[('message_needaction','=',True)]"/>
|
|
<separator/>
|
|
<filter invisible="1" string="Late Activities" name="activities_overdue"
|
|
domain="[('my_activity_date_deadline', '<', context_today().strftime('%Y-%m-%d'))]"
|
|
help="Show all records which has next action date is before today"/>
|
|
<filter invisible="1" string="Today Activities" name="activities_today"
|
|
domain="[('my_activity_date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/>
|
|
<filter invisible="1" string="Future Activities" name="activities_upcoming_all"
|
|
domain="[('my_activity_date_deadline', '>', context_today().strftime('%Y-%m-%d'))]"/>
|
|
<separator/>
|
|
<filter string="Archived" name="inactive" domain="[('active','=',False)]"/>
|
|
<group expand='0' string='Group by...'>
|
|
<filter string='Technician' name="technicians" domain="[]" context="{'group_by': 'technician_user_id'}"/>
|
|
<filter string='Category' name="category" domain="[]" context="{'group_by': 'category_id'}"/>
|
|
<filter string='Owner' name="owner" domain="[]" context="{'group_by': 'owner_user_id'}"/>
|
|
<filter string='Vendor' name="vendor" domain="[]" context="{'group_by': 'partner_id'}"/>
|
|
</group>
|
|
</search>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_equipment_action" model="ir.actions.act_window">
|
|
<field name="name">Equipments</field>
|
|
<field name="res_model">maintenance.equipment</field>
|
|
<field name="view_mode">kanban,tree,form</field>
|
|
<field name="view_id" ref="hr_equipment_view_kanban"/>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
Add a new equipment
|
|
</p><p>
|
|
Track equipments and link it to an employee or department.
|
|
You will be able to manage allocations, issues and maintenance of your equipment.
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- equiment : actions -->
|
|
<record id="hr_equipment_action_from_category_form" model="ir.actions.act_window">
|
|
<field name="name">Equipments</field>
|
|
<field name="res_model">maintenance.equipment</field>
|
|
<field name="view_mode">kanban,tree,form</field>
|
|
<field name="search_view_id" ref="hr_equipment_view_search"/>
|
|
<field name="view_id" ref="hr_equipment_view_kanban"/>
|
|
<field name="context">{
|
|
'search_default_category_id': [active_id],
|
|
'default_category_id': active_id,
|
|
}</field>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
Add a new equipment
|
|
</p><p>
|
|
Track equipments and link it to an employee or department.
|
|
You will be able to manage allocations, issues and maintenance of your equipment.
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- equipment.category : views -->
|
|
<record id="hr_equipment_category_view_form" model="ir.ui.view">
|
|
<field name="name">equipment.category.form</field>
|
|
<field name="model">maintenance.equipment.category</field>
|
|
<field name="arch" type="xml">
|
|
<form string="Equipment Categories">
|
|
<sheet>
|
|
<div class="oe_button_box" name="button_box">
|
|
<button name="%(hr_equipment_action_from_category_form)d"
|
|
class="oe_stat_button"
|
|
icon="fa-cubes"
|
|
type="action">
|
|
<field string="Equipment" name="equipment_count" widget="statinfo"/>
|
|
</button>
|
|
<button name="%(hr_equipment_request_action_link)d"
|
|
type="action"
|
|
class="oe_stat_button"
|
|
icon="fa-wrench">
|
|
<field string="Maintenance" name="maintenance_count" widget="statinfo"/>
|
|
</button>
|
|
</div>
|
|
<div class="oe_title">
|
|
<label for="name" string="Category Name"/>
|
|
<h1>
|
|
<field name="name" placeholder="e.g. Monitors"/>
|
|
</h1>
|
|
</div>
|
|
<group>
|
|
<field name="technician_user_id" class="oe_inline" domain="[('share', '=', False)]"/>
|
|
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}" class="oe_inline"/>
|
|
</group>
|
|
<group name="group_alias" attrs="{'invisible': [('alias_domain', '=', False)]}" groups="base.group_no_one">
|
|
<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;">
|
|
<field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline" readonly="1"/>
|
|
</div>
|
|
</div>
|
|
</group>
|
|
<field name="note" nolabel="1"/>
|
|
</sheet>
|
|
<div class="oe_chatter">
|
|
<field name="message_follower_ids"/>
|
|
<field name="message_ids"/>
|
|
</div>
|
|
</form>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_equipment_category_view_tree" model="ir.ui.view">
|
|
<field name="name">equipment.category.tree</field>
|
|
<field name="model">maintenance.equipment.category</field>
|
|
<field name="arch" type="xml">
|
|
<tree string="Assign To User">
|
|
<field name="name" string="Name"/>
|
|
<field name="technician_user_id"/>
|
|
<field name="company_id" groups="base.group_multi_company"/>
|
|
</tree>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_equipment_category_view_search" model="ir.ui.view">
|
|
<field name="name">equipment.category.search</field>
|
|
<field name="model">maintenance.equipment.category</field>
|
|
<field name="arch" type="xml">
|
|
<search string="Search">
|
|
<field name="name" string="Category Name" filter_domain="[('name','ilike',self)]"/>
|
|
<group expand='0' string='Group by...'>
|
|
<filter string='Responsible' name="responsible" domain="[]" context="{'group_by' : 'technician_user_id'}"/>
|
|
</group>
|
|
</search>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="view_maintenance_equipment_category_kanban" model="ir.ui.view">
|
|
<field name="name">maintenance.equipment.category.kanban</field>
|
|
<field name="model">maintenance.equipment.category</field>
|
|
<field name="arch" type="xml">
|
|
<kanban>
|
|
<field name="name"/>
|
|
<field name="technician_user_id"/>
|
|
<templates>
|
|
<t t-name="kanban-box">
|
|
<div t-attf-class="oe_kanban_global_click">
|
|
<div class="mb4">
|
|
<strong><field name="name"/></strong>
|
|
</div>
|
|
<div class="row mt4">
|
|
<div class="col-6">
|
|
<span class="badge badge-pill">
|
|
<strong>Equipments:</strong> <field name="equipment_count"/>
|
|
</span>
|
|
</div>
|
|
<div class="col-6 text-right">
|
|
<span class="badge badge-pill">
|
|
<strong>Maintenance:</strong> <field name="maintenance_count"/>
|
|
</span>
|
|
<field name="technician_user_id" widget="many2one_avatar_user"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</t>
|
|
</templates>
|
|
</kanban>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- equipment.category : actions -->
|
|
<record id="hr_equipment_category_action" model="ir.actions.act_window">
|
|
<field name="name">Equipment Categories</field>
|
|
<field name="res_model">maintenance.equipment.category</field>
|
|
<field name="view_mode">tree,kanban,form</field>
|
|
<field name="view_id" ref="hr_equipment_category_view_tree"/>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
Add a new equipment category
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- equipment.stage : views -->
|
|
<record id="hr_equipment_stage_view_search" model="ir.ui.view">
|
|
<field name="name">equipment.stage.search</field>
|
|
<field name="model">maintenance.stage</field>
|
|
<field name="arch" type="xml">
|
|
<search string="Maintenance Request Stages">
|
|
<field name="name" string="Maintenance Request Stages"/>
|
|
</search>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_equipment_stage_view_tree" model="ir.ui.view">
|
|
<field name="name">equipment.stage.tree</field>
|
|
<field name="model">maintenance.stage</field>
|
|
<field name="arch" type="xml">
|
|
<tree string="Maintenance Request Stage" editable="top">
|
|
<field name="sequence" widget="handle"/>
|
|
<field name="name"/>
|
|
<field name="fold"/>
|
|
<field name="done"/>
|
|
</tree>
|
|
</field>
|
|
</record>
|
|
<record id="hr_equipment_stage_view_kanban" model="ir.ui.view">
|
|
<field name="name">equipment.stage.kanban</field>
|
|
<field name="model">maintenance.stage</field>
|
|
<field name="arch" type="xml">
|
|
<kanban class="o_kanban_mobile">
|
|
<templates>
|
|
<t t-name="kanban-box">
|
|
<div t-attf-class="oe_kanban_global_click">
|
|
<div>
|
|
<strong><field name="name"/></strong>
|
|
</div>
|
|
</div>
|
|
</t>
|
|
</templates>
|
|
</kanban>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- equipment.stages : actions -->
|
|
<record id="hr_equipment_stage_action" model="ir.actions.act_window">
|
|
<field name="name">Stages</field>
|
|
<field name="res_model">maintenance.stage</field>
|
|
<field name="view_mode">tree,kanban,form</field>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
Add a new stage in the maintenance request
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- maintenance.team: views -->
|
|
<record id="maintenance_team_view_form" model="ir.ui.view">
|
|
<field name="name">maintenance.team.form</field>
|
|
<field name="model">maintenance.team</field>
|
|
<field name="arch" type="xml">
|
|
<form string="Maintenance Team">
|
|
<sheet>
|
|
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
|
|
<div class="oe_title">
|
|
<label for="name" string="Team Name"/>
|
|
<h1>
|
|
<field name="name" placeholder="e.g. Internal Maintenance"/>
|
|
</h1>
|
|
</div>
|
|
<group>
|
|
<group>
|
|
<field name="active" invisible="1"/>
|
|
<field name="member_ids" widget="many2many_tags" options="{'color_field': 'color', 'no_create': True}" domain="[('share', '=', False)]"/>
|
|
</group>
|
|
<group>
|
|
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}"/>
|
|
</group>
|
|
</group>
|
|
</sheet>
|
|
</form>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="maintenance_team_view_tree" model="ir.ui.view">
|
|
<field name="name">maintenance.team.tree</field>
|
|
<field name="model">maintenance.team</field>
|
|
<field name="arch" type="xml">
|
|
<tree string="Maintenance Team" editable="bottom">
|
|
<field name="name"/>
|
|
<field name="member_ids" widget="many2many_tags" options="{'color_field': 'color', 'no_create': True}" domain="[('share', '=', False)]"/>
|
|
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}"/>
|
|
</tree>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="maintenance_team_view_kanban" model="ir.ui.view">
|
|
<field name="name">maintenance.team.kanban</field>
|
|
<field name="model">maintenance.team</field>
|
|
<field name="arch" type="xml">
|
|
<kanban class="o_kanban_mobile">
|
|
<templates>
|
|
<t t-name="kanban-box">
|
|
<div t-attf-class="oe_kanban_global_click">
|
|
<div>
|
|
<strong><field name="name"/></strong>
|
|
</div>
|
|
</div>
|
|
</t>
|
|
</templates>
|
|
</kanban>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="maintenance_team_kanban" model="ir.ui.view">
|
|
<field name="name">maintenance.team.kanban</field>
|
|
<field name="model">maintenance.team</field>
|
|
<field name="arch" type="xml">
|
|
<kanban class="oe_background_grey o_kanban_dashboard o_maintenance_team_kanban" create="0">
|
|
<field name="name"/>
|
|
<field name="color"/>
|
|
<field name="todo_request_ids"/>
|
|
<field name="todo_request_count"/>
|
|
<field name="todo_request_count_date"/>
|
|
<field name="todo_request_count_high_priority"/>
|
|
<field name="todo_request_count_block"/>
|
|
<field name="todo_request_count_unscheduled"/>
|
|
<templates>
|
|
<t t-name="kanban-box">
|
|
<div t-attf-class="#{!selection_mode ? kanban_color(record.color.raw_value) : ''}">
|
|
<div t-attf-class="o_kanban_card_header">
|
|
<div class="o_kanban_card_header_title">
|
|
<div class="o_primary">
|
|
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action">
|
|
<field name="name"/>
|
|
</a></div>
|
|
</div>
|
|
<div class="o_kanban_manage_button_section">
|
|
<a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/></a>
|
|
</div>
|
|
</div>
|
|
<div class="container o_kanban_card_content">
|
|
<div class="row">
|
|
<div class="col-6 o_kanban_primary_left">
|
|
<button class="btn btn-primary" name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_todo': 1}">
|
|
<t t-esc="record.todo_request_count.value"/> To Do
|
|
</button>
|
|
</div>
|
|
<div class="col-6 o_kanban_primary_right">
|
|
<div t-if="record.todo_request_count_date.raw_value > 0">
|
|
<a name="%(hr_equipment_request_action_cal)d" type="action">
|
|
<t t-esc="record.todo_request_count_date.value"/>
|
|
Scheduled
|
|
</a>
|
|
</div>
|
|
<div t-if="record.todo_request_count_high_priority.raw_value > 0">
|
|
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_high_priority': 1}">
|
|
<t t-esc="record.todo_request_count_high_priority.value"/>
|
|
Top Priorities
|
|
</a>
|
|
</div>
|
|
<div t-if="record.todo_request_count_block.raw_value > 0">
|
|
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_kanban_state_block': 1}">
|
|
<t t-esc="record.todo_request_count_block.value"/>
|
|
Blocked
|
|
</a>
|
|
</div>
|
|
<div t-if="record.todo_request_count_unscheduled.raw_value > 0">
|
|
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_unscheduled': 1}">
|
|
<t t-esc="record.todo_request_count_unscheduled.value"/>
|
|
Unscheduled
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div><div class="container o_kanban_card_manage_pane dropdown-menu" role="menu">
|
|
<div class="row">
|
|
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_view">
|
|
<div role="menuitem" class="o_kanban_card_manage_title">
|
|
<span>Requests</span>
|
|
</div>
|
|
<div role="menuitem">
|
|
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action">
|
|
All
|
|
</a>
|
|
</div>
|
|
<div role="menuitem">
|
|
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_todo': 1}">
|
|
To Do
|
|
</a>
|
|
</div>
|
|
<div role="menuitem">
|
|
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_progress': 1}">
|
|
In Progress
|
|
</a>
|
|
</div>
|
|
<div role="menuitem">
|
|
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_done': 1}">
|
|
Done
|
|
</a>
|
|
</div>
|
|
</div>
|
|
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_new">
|
|
<div role="menuitem" class="o_kanban_card_manage_title">
|
|
<span>Reporting</span>
|
|
</div>
|
|
<div role="menuitem">
|
|
<a name="%(maintenance_request_action_reports)d" type="action" context="{'search_default_maintenance_team_id': active_id}">
|
|
Maintenance Requests
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div t-if="widget.editable" class="o_kanban_card_manage_settings row">
|
|
<div class="col-8" role="menuitem" aria-haspopup="true">
|
|
<ul role="menu" class="oe_kanban_colorpicker" data-field="color"/>
|
|
</div>
|
|
<div role="menuitem" class="col-4">
|
|
<a type="edit" class="dropdown-item">Configuration</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</t>
|
|
</templates>
|
|
</kanban>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="maintenance_team_view_search" model="ir.ui.view">
|
|
<field name="name">maintenance.team.search</field>
|
|
<field name="model">maintenance.team</field>
|
|
<field name="arch" type="xml">
|
|
<search string="Search">
|
|
<field string="Team" name="name"/>
|
|
<filter string="Archived" domain="[('active', '=', False)]" name="inactive"/>
|
|
</search>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- equipment.team : actions -->
|
|
<record id="maintenance_team_action_settings" model="ir.actions.act_window">
|
|
<field name="name">Teams</field>
|
|
<field name="res_model">maintenance.team</field>
|
|
<field name="view_mode">tree,kanban,form</field>
|
|
<field name="search_view_id" ref="maintenance_team_view_search"/>
|
|
<field name="view_ids" eval="[(5, 0, 0),
|
|
(0, 0, {'view_mode': 'tree', 'view_id': ref('maintenance_team_view_tree')}),
|
|
(0, 0, {'view_mode': 'kanban', 'view_id': ref('maintenance_team_view_kanban')})]"/>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
Add a team in the maintenance request
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="maintenance_dashboard_action" model="ir.actions.act_window">
|
|
<field name="name">Maintenance Teams</field>
|
|
<field name="res_model">maintenance.team</field>
|
|
<field name="view_mode">kanban,form</field>
|
|
<field name="view_id" ref="maintenance_team_kanban"/>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
Add a new stage in the maintenance request
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
|
|
<!-- Menu items hierachy -->
|
|
<menuitem
|
|
id="menu_maintenance_title"
|
|
name="Maintenance"
|
|
web_icon="maintenance,static/description/icon.png"
|
|
sequence="160"/>
|
|
|
|
<menuitem
|
|
id="menu_m_dashboard"
|
|
name="Dashboard"
|
|
parent="menu_maintenance_title"
|
|
groups="group_equipment_manager,base.group_user"
|
|
action="maintenance_dashboard_action"
|
|
sequence="0"/>
|
|
|
|
<menuitem
|
|
id="menu_m_request"
|
|
name="Maintenance"
|
|
parent="menu_maintenance_title"
|
|
groups="group_equipment_manager,base.group_user"
|
|
sequence="1"/>
|
|
|
|
<menuitem
|
|
id="menu_m_request_form"
|
|
name="Maintenance Requests"
|
|
parent="menu_m_request"
|
|
action="hr_equipment_request_action"
|
|
groups="group_equipment_manager,base.group_user"
|
|
sequence="1"/>
|
|
|
|
<menuitem
|
|
id="menu_m_request_calendar"
|
|
name="Maintenance Calendar"
|
|
parent="menu_m_request"
|
|
action="hr_equipment_request_action_cal"
|
|
groups="group_equipment_manager,base.group_user"
|
|
sequence="2"/>
|
|
|
|
<menuitem
|
|
id="menu_equipment_form"
|
|
name="Equipments"
|
|
parent="menu_maintenance_title"
|
|
action="hr_equipment_action"
|
|
groups="group_equipment_manager,base.group_user"
|
|
sequence="2"/>
|
|
|
|
<menuitem
|
|
id="menu_m_reports"
|
|
name="Reporting"
|
|
parent="menu_maintenance_title"
|
|
groups="group_equipment_manager,base.group_user"
|
|
sequence="3"/>
|
|
|
|
<menuitem
|
|
id="menu_m_reports_oee"
|
|
name="Overall Equipment Effectiveness (OEE)"
|
|
parent="menu_m_reports"
|
|
groups="group_equipment_manager,base.group_user"
|
|
sequence="1"/>
|
|
|
|
<menuitem
|
|
id="menu_m_reports_losses"
|
|
name="Losses Analysis"
|
|
parent="menu_m_reports"
|
|
groups="group_equipment_manager,base.group_user"
|
|
sequence="2"/>
|
|
|
|
<menuitem
|
|
id="maintenance_reporting"
|
|
name="Reporting"
|
|
parent="menu_maintenance_title"
|
|
sequence="20"/>
|
|
<menuitem
|
|
id="maintenance_request_reporting"
|
|
action="maintenance_request_action_reports"
|
|
parent="maintenance_reporting"/>
|
|
|
|
<menuitem
|
|
id="menu_maintenance_configuration"
|
|
name="Configuration"
|
|
parent="menu_maintenance_title"
|
|
groups="group_equipment_manager"
|
|
sequence="100"/>
|
|
|
|
<menuitem
|
|
id="menu_maintenance_teams"
|
|
name="Maintenance Teams"
|
|
parent="menu_maintenance_configuration"
|
|
action="maintenance_team_action_settings"
|
|
groups="group_equipment_manager"
|
|
sequence="1"/>
|
|
|
|
<menuitem
|
|
id="menu_maintenance_cat"
|
|
name="Equipment Categories"
|
|
parent="menu_maintenance_configuration"
|
|
action="hr_equipment_category_action"
|
|
sequence="2"/>
|
|
|
|
<menuitem
|
|
id="menu_maintenance_stage_configuration"
|
|
name="Maintenance Stages"
|
|
parent="menu_maintenance_configuration"
|
|
action="hr_equipment_stage_action"
|
|
groups="base.group_no_one"
|
|
sequence="3" />
|
|
</odoo>
|