[REF] (hr_)maintenance
- rename models from hr.equipment.something to maintenance.something - add concept of maintenance team and dashboard - remove generic alias for maintenance
This commit is contained in:
committed by
Thibault Delavallée
parent
e7ef6e069c
commit
9a20c6556f
@@ -9,6 +9,7 @@
|
||||
'depends': ['hr', 'maintenance'],
|
||||
'summary': 'Equipments, Assets, Internal Hardware, Allocation Tracking',
|
||||
'data': [
|
||||
'security/equipment.xml',
|
||||
'views/maintenance_views.xml',
|
||||
],
|
||||
'demo': [],
|
||||
|
||||
@@ -3,16 +3,26 @@
|
||||
from odoo import api, fields, models, tools
|
||||
|
||||
|
||||
class HrEquipment(models.Model):
|
||||
_inherit = 'hr.equipment'
|
||||
class MaintenanceEquipment(models.Model):
|
||||
_inherit = 'maintenance.equipment'
|
||||
|
||||
employee_id = fields.Many2one('hr.employee', string='Assigned to Employee', track_visibility='onchange')
|
||||
department_id = fields.Many2one('hr.department', string='Assigned to Department', track_visibility='onchange')
|
||||
equipment_assign_to = fields.Selection(
|
||||
[('department', 'Department'), ('employee', 'Employee')],
|
||||
[('department', 'Department'), ('employee', 'Employee') ,('other', 'Other')],
|
||||
string='Used By',
|
||||
required=True,
|
||||
default='employee')
|
||||
owner_user_id = fields.Many2one(compute='_compute_owner')
|
||||
|
||||
@api.one
|
||||
@api.depends('employee_id', 'department_id', 'equipment_assign_to')
|
||||
def _compute_owner(self):
|
||||
self.owner_user_id = self.env.user.id
|
||||
if self.equipment_assign_to == 'employee':
|
||||
self.owner_user_id = self.employee_id.user_id.id
|
||||
elif self.equipment_assign_to == 'department':
|
||||
self.owner_user_id = self.department_id.manager_id.user_id.id
|
||||
|
||||
@api.onchange('equipment_assign_to')
|
||||
def _onchange_equipment_assign_to(self):
|
||||
@@ -24,7 +34,7 @@ class HrEquipment(models.Model):
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
equipment = super(HrEquipment, self).create(vals)
|
||||
equipment = super(MaintenanceEquipment, self).create(vals)
|
||||
# subscribe employee or department manager when equipment assign to him.
|
||||
user_ids = []
|
||||
if equipment.employee_id and equipment.employee_id.user_id:
|
||||
@@ -49,18 +59,18 @@ class HrEquipment(models.Model):
|
||||
user_ids.append(department.manager_id.user_id.id)
|
||||
if user_ids:
|
||||
self.message_subscribe_users(user_ids=user_ids)
|
||||
return super(HrEquipment, self).write(vals)
|
||||
return super(MaintenanceEquipment, self).write(vals)
|
||||
|
||||
@api.multi
|
||||
def _track_subtype(self, init_values):
|
||||
self.ensure_one()
|
||||
if ('employee_id' in init_values and self.employee_id) or ('department_id' in init_values and self.department_id):
|
||||
return 'maintenance.mt_mat_assign'
|
||||
return super(HrEquipment, self)._track_subtype(init_values)
|
||||
return super(MaintenanceEquipment, self)._track_subtype(init_values)
|
||||
|
||||
|
||||
class HrEquipmentRequest(models.Model):
|
||||
_inherit = 'hr.equipment.request'
|
||||
class MaintenanceRequest(models.Model):
|
||||
_inherit = 'maintenance.request'
|
||||
|
||||
@api.returns('self')
|
||||
def _default_employee_get(self):
|
||||
@@ -68,6 +78,14 @@ class HrEquipmentRequest(models.Model):
|
||||
|
||||
employee_id = fields.Many2one('hr.employee', string='Employee', default=_default_employee_get)
|
||||
department_id = fields.Many2one('hr.department', string='Department')
|
||||
owner_user_id = fields.Many2one(compute='_compute_owner', store=True)
|
||||
|
||||
@api.depends('employee_id', 'department_id')
|
||||
def _compute_owner(self):
|
||||
if self.equipment_id.equipment_assign_to == 'employee':
|
||||
self.owner_user_id = self.employee_id.user_id.id
|
||||
elif self.equipment_id.equipment_assign_to == 'department':
|
||||
self.owner_user_id = self.department_id.manager_id.user_id.id
|
||||
|
||||
@api.onchange('employee_id', 'department_id')
|
||||
def onchange_department_or_employee_id(self):
|
||||
@@ -78,27 +96,25 @@ class HrEquipmentRequest(models.Model):
|
||||
domain = ['|'] + domain
|
||||
if self.employee_id:
|
||||
domain = domain + ['|', ('employee_id', '=', self.employee_id.id), ('employee_id', '=', None)]
|
||||
equipment = self.env['hr.equipment'].search(domain, limit=2)
|
||||
equipment = self.env['maintenance.equipment'].search(domain, limit=2)
|
||||
if len(equipment) == 1:
|
||||
self.equipment_id = equipment
|
||||
return {'domain': {'equipment_id': domain}}
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
result = super(HrEquipmentRequest, self).create(vals)
|
||||
result = super(MaintenanceRequest, self).create(vals)
|
||||
if result.employee_id.user_id:
|
||||
result.message_subscribe_users(user_ids=[result.employee_id.user_id.id])
|
||||
return result
|
||||
|
||||
@api.multi
|
||||
def write(self, vals):
|
||||
# Overridden to reset the kanban_state to normal whenever
|
||||
# the stage (stage_id) of the Maintenance Request changes.
|
||||
if vals.get('employee_id'):
|
||||
employee = self.env['hr.employee'].browse(vals['employee_id'])
|
||||
if employee and employee.user_id:
|
||||
self.message_subscribe_users(user_ids=[employee.user_id.id])
|
||||
return super(HrEquipmentRequest, self).write(vals)
|
||||
return super(MaintenanceRequest, self).write(vals)
|
||||
|
||||
@api.model
|
||||
def message_new(self, msg, custom_values=None):
|
||||
@@ -114,4 +130,4 @@ class HrEquipmentRequest(models.Model):
|
||||
employee = self.env['hr.employee'].search([('user_id', '=', user.id)], limit=1)
|
||||
if employee:
|
||||
custom_values['employee_id'] = employee and employee[0].id
|
||||
return super(HrEquipmentRequest, self).message_new(msg, custom_values=custom_values)
|
||||
return super(MaintenanceRequest, self).message_new(msg, custom_values=custom_values)
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- HR officers and HR managers are allowed to manage equipments -->
|
||||
<record id="base.group_hr_user" model="res.groups">
|
||||
<field name="implied_ids" eval="[(4, ref('base.group_equipment_manager'))]"/>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
@@ -2,12 +2,12 @@
|
||||
<odoo>
|
||||
|
||||
<!-- equiment.request : views -->
|
||||
<record id="hr_equipment_request_view_search_inherit_hr" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.request.view.search.inherit.hr</field>
|
||||
<field name="model">hr.equipment.request</field>
|
||||
<record id="maintenance_request_view_search_inherit_hr" model="ir.ui.view">
|
||||
<field name="name">maintenance.request.view.search.inherit.hr</field>
|
||||
<field name="model">maintenance.request</field>
|
||||
<field name="inherit_id" ref="maintenance.hr_equipment_request_view_search"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="field[@name='user_id']" position="after">
|
||||
<xpath expr="field[@name='technician_user_id']" position="after">
|
||||
<field name="employee_id"/>
|
||||
</xpath>
|
||||
<xpath expr="//filter[@name='my_requests']" position="replace">
|
||||
@@ -19,9 +19,9 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_equipment_request_view_form_inherit_hr" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.request.view.form.inherit.hr</field>
|
||||
<field name="model">hr.equipment.request</field>
|
||||
<record id="maintenance_request_view_form_inherit_hr" model="ir.ui.view">
|
||||
<field name="name">maintenance.request.view.form.inherit.hr</field>
|
||||
<field name="model">maintenance.request</field>
|
||||
<field name="inherit_id" ref="maintenance.hr_equipment_request_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='owner_user_id']" position="replace">
|
||||
@@ -30,9 +30,9 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_equipment_request_view_kanban_inherit_hr" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.request.view.kanban.inherit.hr</field>
|
||||
<field name="model">hr.equipment.request</field>
|
||||
<record id="maintenance_request_view_kanban_inherit_hr" model="ir.ui.view">
|
||||
<field name="name">maintenance.request.view.kanban.inherit.hr</field>
|
||||
<field name="model">maintenance.request</field>
|
||||
<field name="inherit_id" ref="maintenance.hr_equipment_request_view_kanban"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//span[@name='owner_user_id']" position="replace">
|
||||
@@ -42,9 +42,9 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_equipment_request_view_tree_inherit_hr" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.request.view.tree.inherit.hr</field>
|
||||
<field name="model">hr.equipment.request</field>
|
||||
<record id="maintenance_request_view_tree_inherit_hr" model="ir.ui.view">
|
||||
<field name="name">maintenance.request.view.tree.inherit.hr</field>
|
||||
<field name="model">maintenance.request</field>
|
||||
<field name="inherit_id" ref="maintenance.hr_equipment_request_view_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='owner_user_id']" position="replace">
|
||||
@@ -54,9 +54,9 @@
|
||||
</record>
|
||||
|
||||
<!-- equiment : views -->
|
||||
<record id="hr_equipment_view_form_inherit_hr" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.view.form.inherit.hr</field>
|
||||
<field name="model">hr.equipment</field>
|
||||
<record id="maintenance_equipment_view_form_inherit_hr" model="ir.ui.view">
|
||||
<field name="name">maintenance.equipment.view.form.inherit.hr</field>
|
||||
<field name="model">maintenance.equipment</field>
|
||||
<field name="inherit_id" ref="maintenance.hr_equipment_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='owner_user_id']" position="replace">
|
||||
@@ -67,12 +67,12 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_equipment_view_kanban_inherit_hr" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.view.kanban.inherit.hr</field>
|
||||
<field name="model">hr.equipment</field>
|
||||
<record id="maintenance_equipment_view_kanban_inherit_hr" model="ir.ui.view">
|
||||
<field name="name">maintenance.equipment.view.kanban.inherit.hr</field>
|
||||
<field name="model">maintenance.equipment</field>
|
||||
<field name="inherit_id" ref="maintenance.hr_equipment_view_kanban"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='user_id']" position="after">
|
||||
<xpath expr="//field[@name='technician_user_id']" position="after">
|
||||
<field name="employee_id"/>
|
||||
<field name="department_id"/>
|
||||
</xpath>
|
||||
@@ -82,9 +82,9 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_equipment_view_tree_inherit_hr" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.view.tree.inherit.hr</field>
|
||||
<field name="model">hr.equipment</field>
|
||||
<record id="maintenance_equipment_view_tree_inherit_hr" model="ir.ui.view">
|
||||
<field name="name">maintenance.equipment.view.tree.inherit.hr</field>
|
||||
<field name="model">maintenance.equipment</field>
|
||||
<field name="inherit_id" ref="maintenance.hr_equipment_view_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='owner_user_id']" position="replace">
|
||||
|
||||
@@ -6,15 +6,15 @@
|
||||
'sequence': 125,
|
||||
'category': 'Human Resources',
|
||||
'description': """
|
||||
Track employees' equipment and manage maintenance requests.""",
|
||||
Track equipment and manage maintenance requests.""",
|
||||
'depends': ['mail'],
|
||||
'summary': 'Equipments, Assets, Internal Hardware, Allocation Tracking',
|
||||
'data': [
|
||||
'security/maintenance.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'data/maintenance_data.xml',
|
||||
'views/maintenance_config_settings_views.xml',
|
||||
'views/maintenance_views.xml',
|
||||
'views/maintenance_templates.xml',
|
||||
],
|
||||
'demo': ['data/maintenance_demo.xml'],
|
||||
'installable': True,
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding='UTF-8'?>
|
||||
<odoo>
|
||||
<record model="ir.cron" id="maintenance_requests_cron">
|
||||
<field name="name">Generate preventive maintenance requests</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<field name="doall" eval="False"/>
|
||||
<field name="model" eval="'maintenance.equipment'"/>
|
||||
<field name="function" eval="'_cron_generate_requests'"/>
|
||||
<field name="args" eval="'()'" />
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -1,25 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<data>
|
||||
|
||||
<!-- Standard stages for Maintenance Request -->
|
||||
<record id="stage_0" model="hr.equipment.stage">
|
||||
<record id="stage_0" model="maintenance.stage">
|
||||
<field name="name">New Request</field>
|
||||
<field name="sequence" eval="1" />
|
||||
<field name="fold" eval="False" />
|
||||
</record>
|
||||
<record id="stage_1" model="hr.equipment.stage">
|
||||
<record id="stage_1" model="maintenance.stage">
|
||||
<field name="name">In Progress</field>
|
||||
<field name="sequence" eval="2" />
|
||||
<field name="fold" eval="False" />
|
||||
</record>
|
||||
<record id="stage_3" model="hr.equipment.stage">
|
||||
<record id="stage_3" model="maintenance.stage">
|
||||
<field name="name">Repaired</field>
|
||||
<field name="sequence" eval="3" />
|
||||
<field name="fold" eval="True" />
|
||||
<field name="done" eval="True" />
|
||||
</record>
|
||||
<record id="stage_4" model="hr.equipment.stage">
|
||||
<record id="stage_4" model="maintenance.stage">
|
||||
<field name="name">Scrap</field>
|
||||
<field name="sequence" eval="4" />
|
||||
<field name="fold" eval="True" />
|
||||
@@ -29,20 +29,20 @@
|
||||
<!-- email alias for maintenance requests -->
|
||||
<record id="mail_alias_equipment" model="mail.alias">
|
||||
<field name="alias_name">helpdesk</field>
|
||||
<field name="alias_model_id" ref="model_hr_equipment_request"/>
|
||||
<field name="alias_model_id" ref="model_maintenance_request"/>
|
||||
<field name="alias_user_id" ref="base.user_root"/>
|
||||
</record>
|
||||
|
||||
<!-- Maintenance Request-related subtypes for messaging / Chatter -->
|
||||
<record id="mt_req_created" model="mail.message.subtype">
|
||||
<field name="name">Request Created</field>
|
||||
<field name="res_model">hr.equipment.request</field>
|
||||
<field name="res_model">equipment.request</field>
|
||||
<field name="hidden" eval="True"/>
|
||||
<field name="description">Maintenance Request created</field>
|
||||
</record>
|
||||
<record id="mt_req_status" model="mail.message.subtype">
|
||||
<field name="name">Status Changed</field>
|
||||
<field name="res_model">hr.equipment.request</field>
|
||||
<field name="res_model">maintenance.request</field>
|
||||
<field name="default" eval="True"/>
|
||||
<field name="description">Status changed</field>
|
||||
</record>
|
||||
@@ -50,35 +50,49 @@
|
||||
<!-- Equipment-related subtypes for messaging / Chatter -->
|
||||
<record id="mt_mat_assign" model="mail.message.subtype">
|
||||
<field name="name">Equipment Assigned</field>
|
||||
<field name="res_model">hr.equipment</field>
|
||||
<field name="res_model">maintenance.equipment</field>
|
||||
<field name="description">Equipment Assigned</field>
|
||||
</record>
|
||||
|
||||
<!-- Equipment Category-related subtypes for messaging / Chatter -->
|
||||
<record id="mt_cat_req_created" model="mail.message.subtype">
|
||||
<field name="name">Maintenance Request Created</field>
|
||||
<field name="res_model">hr.equipment.category</field>
|
||||
<field name="res_model">maintenance.equipment.category</field>
|
||||
<field name="default" eval="True"/>
|
||||
<field name="parent_id" eval="ref('mt_req_created')"/>
|
||||
<field name="relation_field">category_id</field>
|
||||
</record>
|
||||
<record id="mt_cat_mat_assign" model="mail.message.subtype">
|
||||
<field name="name">Equipment Assigned</field>
|
||||
<field name="res_model">hr.equipment.category</field>
|
||||
<field name="res_model">maintenance.equipment.category</field>
|
||||
<field name="default" eval="True"/>
|
||||
<field name="parent_id" eval="ref('mt_mat_assign')"/>
|
||||
<field name="relation_field">category_id</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_equipment_computer" model="hr.equipment.category">
|
||||
<record id="equipment_computer" model="maintenance.equipment.category">
|
||||
<field name="name">Computers</field>
|
||||
<field name="alias_id" ref="mail_alias_equipment"/>
|
||||
</record>
|
||||
<record id="hr_equipment_software" model="hr.equipment.category">
|
||||
<record id="equipment_software" model="maintenance.equipment.category">
|
||||
<field name="name">Software</field>
|
||||
<field name="alias_id" ref="mail_alias_equipment"/>
|
||||
</record>
|
||||
<record id="hr_equipment_printer" model="hr.equipment.category">
|
||||
<record id="equipment_printer" model="maintenance.equipment.category">
|
||||
<field name="name">Printers</field>
|
||||
<field name="alias_id" ref="mail_alias_equipment"/>
|
||||
</record>
|
||||
|
||||
<record id="equipment_team_maintenance" model="maintenance.team">
|
||||
<field name="name">Internal Maintenance</field>
|
||||
</record>
|
||||
|
||||
<record id="equipment_team_metrology" model="maintenance.team">
|
||||
<field name="name">Metrology</field>
|
||||
</record>
|
||||
|
||||
<record id="equipment_team_subcontractor" model="maintenance.team">
|
||||
<field name="name">Subcontractor</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
||||
@@ -3,129 +3,131 @@
|
||||
<data noupdate="1">
|
||||
|
||||
<!-- Equipment categories -->
|
||||
<record id="hr_equipment_monitor" model="hr.equipment.category">
|
||||
<record id="equipment_monitor" model="maintenance.equipment.category">
|
||||
<field name="name">Monitors</field>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="technician_user_id" ref="base.user_root"/>
|
||||
<field name="color">3</field>
|
||||
<field name="alias_id" ref="mail_alias_equipment"/>
|
||||
</record>
|
||||
<record id="hr_equipment_phone" model="hr.equipment.category">
|
||||
<record id="equipment_phone" model="maintenance.equipment.category">
|
||||
<field name="name">Phones</field>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="technician_user_id" ref="base.user_root"/>
|
||||
<field name="alias_id" ref="mail_alias_equipment"/>
|
||||
</record>
|
||||
|
||||
<!-- Equipments -->
|
||||
<record id="hr_equipment_monitor1" model="hr.equipment">
|
||||
<record id="equipment_monitor1" model="maintenance.equipment">
|
||||
<field name="name">Samsung Monitor 15"</field>
|
||||
<field name="category_id" ref="hr_equipment_monitor"/>
|
||||
<field name="category_id" ref="equipment_monitor"/>
|
||||
<field name="owner_user_id" ref="base.user_root"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="technician_user_id" ref="base.user_root"/>
|
||||
<field name="assign_date" eval="time.strftime('%Y-%m-10')"/>
|
||||
<field name="serial_no">MT/122/11112222</field>
|
||||
<field name="model">NP300E5X</field>
|
||||
</record>
|
||||
<record id="hr_equipment_monitor4" model="hr.equipment">
|
||||
<record id="equipment_monitor4" model="maintenance.equipment">
|
||||
<field name="name">Samsung Monitor 15"</field>
|
||||
<field name="category_id" ref="hr_equipment_monitor"/>
|
||||
<field name="category_id" ref="equipment_monitor"/>
|
||||
<field name="owner_user_id" ref="base.user_root"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="technician_user_id" ref="base.user_root"/>
|
||||
<field name="assign_date" eval="time.strftime('%Y-01-01')"/>
|
||||
<field name="serial_no">MT/125/22778837</field>
|
||||
<field name="model">NP355E5X</field>
|
||||
</record>
|
||||
<record id="hr_equipment_monitor6" model="hr.equipment">
|
||||
<record id="equipment_monitor6" model="maintenance.equipment">
|
||||
<field name="name">Samsung Monitor 15"</field>
|
||||
<field name="category_id" ref="hr_equipment_monitor"/>
|
||||
<field name="category_id" ref="equipment_monitor"/>
|
||||
<field name="owner_user_id" ref="base.user_demo"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="technician_user_id" ref="base.user_demo"/>
|
||||
<field name="assign_date" eval="time.strftime('%Y-02-01')"/>
|
||||
<field name="serial_no">MT/127/18291018</field>
|
||||
<field name="model">NP355E5X</field>
|
||||
<field name="color">3</field>
|
||||
</record>
|
||||
<record id="hr_equipment_computer3" model="hr.equipment">
|
||||
<record id="equipment_computer3" model="maintenance.equipment">
|
||||
<field name="name">Acer Laptop</field>
|
||||
<field name="category_id" ref="hr_equipment_computer"/>
|
||||
<field name="category_id" ref="equipment_computer"/>
|
||||
<field name="owner_user_id" ref="base.user_demo"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="technician_user_id" ref="base.user_root"/>
|
||||
<field name="assign_date" eval="time.strftime('%Y-03-08')"/>
|
||||
<field name="serial_no">LP/203/19281928</field>
|
||||
<field name="model">NE56R</field>
|
||||
</record>
|
||||
<record id="hr_equipment_computer5" model="hr.equipment">
|
||||
<record id="equipment_computer5" model="maintenance.equipment">
|
||||
<field name="name">Acer Laptop</field>
|
||||
<field name="category_id" ref="hr_equipment_computer"/>
|
||||
<field name="category_id" ref="equipment_computer"/>
|
||||
<field name="owner_user_id" ref="base.user_root"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="technician_user_id" ref="base.user_demo"/>
|
||||
<field name="assign_date" eval="time.strftime('%Y-04-08')"/>
|
||||
<field name="serial_no">LP/205/12928291</field>
|
||||
<field name="model">V5131</field>
|
||||
</record>
|
||||
<record id="hr_equipment_computer9" model="hr.equipment">
|
||||
<record id="equipment_computer9" model="maintenance.equipment">
|
||||
<field name="name">HP Laptop</field>
|
||||
<field name="category_id" ref="hr_equipment_computer"/>
|
||||
<field name="category_id" ref="equipment_computer"/>
|
||||
<field name="owner_user_id" ref="base.user_root"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="technician_user_id" ref="base.user_demo"/>
|
||||
<field name="assign_date" eval="time.strftime('%Y-%m-11')"/>
|
||||
<field name="serial_no">LP/303/28292090</field>
|
||||
<field name="model">17-j059nr</field>
|
||||
</record>
|
||||
<record id="hr_equipment_computer11" model="hr.equipment">
|
||||
<record id="equipment_computer11" model="maintenance.equipment">
|
||||
<field name="name">HP Laptop</field>
|
||||
<field name="category_id" ref="hr_equipment_computer"/>
|
||||
<field name="category_id" ref="equipment_computer"/>
|
||||
<field name="owner_user_id" ref="base.user_demo"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="technician_user_id" ref="base.user_demo"/>
|
||||
<field name="assign_date" eval="time.strftime('%Y-05-01')"/>
|
||||
<field name="serial_no">LP/305/17281718</field>
|
||||
</record>
|
||||
<record id="hr_equipment_printer1" model="hr.equipment">
|
||||
<record id="equipment_printer1" model="maintenance.equipment">
|
||||
<field name="name">HP Inkjet printer</field>
|
||||
<field name="category_id" ref="hr_equipment_printer"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="category_id" ref="equipment_printer"/>
|
||||
<field name="technician_user_id" ref="base.user_demo"/>
|
||||
<field name="serial_no">PR/011/2928191889</field>
|
||||
</record>
|
||||
|
||||
<!--Maintenance Request-->
|
||||
|
||||
<record id="m_request_3" model="hr.equipment.request">
|
||||
<record id="m_request_3" model="maintenance.request">
|
||||
<field name="name">Resolution is bad</field>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="technician_user_id" ref="base.user_demo"/>
|
||||
<field name="owner_user_id" ref="base.user_root"/>
|
||||
<field name="equipment_id" ref="hr_equipment_monitor6"/>
|
||||
<field name="category_id" ref="hr_equipment_monitor"/>
|
||||
<field name="equipment_id" ref="equipment_monitor6"/>
|
||||
<field name="color">7</field>
|
||||
<field name="stage_id" ref="stage_3"/>
|
||||
<field name="maintenance_team_id" ref="equipment_team_maintenance"/>
|
||||
</record>
|
||||
<record id="m_request_4" model="hr.equipment.request">
|
||||
<record id="m_request_4" model="maintenance.request">
|
||||
<field name="name">Some keys are not working</field>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="technician_user_id" ref="base.user_root"/>
|
||||
<field name="owner_user_id" ref="base.user_root"/>
|
||||
<field name="equipment_id" ref="hr_equipment_computer3"/>
|
||||
<field name="category_id" ref="hr_equipment_computer"/>
|
||||
<field name="equipment_id" ref="equipment_computer3"/>
|
||||
<field name="stage_id" ref="stage_0"/>
|
||||
<field name="maintenance_team_id" ref="equipment_team_maintenance"/>
|
||||
</record>
|
||||
<record id="m_request_6" model="hr.equipment.request">
|
||||
<record id="m_request_6" model="maintenance.request">
|
||||
<field name="name">Motherboard failed</field>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="technician_user_id" ref="base.user_demo"/>
|
||||
<field name="owner_user_id" ref="base.user_root"/>
|
||||
<field name="equipment_id" ref="hr_equipment_computer5"/>
|
||||
<field name="category_id" ref="hr_equipment_computer"/>
|
||||
<field name="equipment_id" ref="equipment_computer5"/>
|
||||
<field name="stage_id" ref="stage_4"/>
|
||||
<field name="maintenance_team_id" ref="equipment_team_maintenance"/>
|
||||
</record>
|
||||
<record id="m_request_7" model="hr.equipment.request">
|
||||
<record id="m_request_7" model="maintenance.request">
|
||||
<field name="name">Battery drains fast</field>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="technician_user_id" ref="base.user_demo"/>
|
||||
<field name="owner_user_id" ref="base.user_demo"/>
|
||||
<field name="equipment_id" ref="hr_equipment_computer9"/>
|
||||
<field name="category_id" ref="hr_equipment_computer"/>
|
||||
<field name="equipment_id" ref="equipment_computer9"/>
|
||||
<field name="stage_id" ref="stage_1"/>
|
||||
<field name="maintenance_team_id" ref="equipment_team_maintenance"/>
|
||||
</record>
|
||||
<record id="m_request_8" model="hr.equipment.request">
|
||||
<record id="m_request_8" model="maintenance.request">
|
||||
<field name="name">Touchpad not working</field>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="technician_user_id" ref="base.user_demo"/>
|
||||
<field name="owner_user_id" ref="base.user_demo"/>
|
||||
<field name="equipment_id" ref="hr_equipment_computer11"/>
|
||||
<field name="category_id" ref="hr_equipment_computer"/>
|
||||
<field name="equipment_id" ref="equipment_computer11"/>
|
||||
<field name="stage_id" ref="stage_1"/>
|
||||
<field name="maintenance_team_id" ref="equipment_team_maintenance"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import maintenance
|
||||
import maintenance_config_settings
|
||||
|
||||
@@ -1,27 +1,28 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from openerp import api, fields, models, fields
|
||||
from openerp import _, tools
|
||||
from openerp.exceptions import UserError
|
||||
from datetime import date, datetime, timedelta
|
||||
|
||||
from odoo import api, fields, models, _
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT
|
||||
|
||||
|
||||
class HrEquipmentStage(models.Model):
|
||||
class MaintenanceStage(models.Model):
|
||||
""" Model for case stages. This models the main stages of a Maintenance Request management flow. """
|
||||
|
||||
_name = 'hr.equipment.stage'
|
||||
_name = 'maintenance.stage'
|
||||
_description = 'Maintenance Stage'
|
||||
_order = 'sequence, id'
|
||||
|
||||
name = fields.Char('Name', required=True, translate=True)
|
||||
sequence = fields.Integer('Sequence', default=20)
|
||||
fold = fields.Boolean('Folded in Recruitment Pipe')
|
||||
fold = fields.Boolean('Folded in Maintenance Pipe')
|
||||
done = fields.Boolean('Request Done')
|
||||
|
||||
|
||||
class HrEquipmentCategory(models.Model):
|
||||
_name = 'hr.equipment.category'
|
||||
_inherits = {"mail.alias": "alias_id"}
|
||||
_inherit = ['mail.thread']
|
||||
class MaintenanceEquipmentCategory(models.Model):
|
||||
_name = 'maintenance.equipment.category'
|
||||
_inherit = ['mail.alias.mixin', 'mail.thread']
|
||||
_description = 'Asset Category'
|
||||
|
||||
@api.one
|
||||
@@ -30,12 +31,12 @@ class HrEquipmentCategory(models.Model):
|
||||
self.fold = False if self.equipment_count else True
|
||||
|
||||
name = fields.Char('Category Name', required=True, translate=True)
|
||||
user_id = fields.Many2one('res.users', 'Responsible', track_visibility='onchange', default=lambda self: self.env.uid)
|
||||
technician_user_id = fields.Many2one('res.users', 'Responsible', track_visibility='onchange', default=lambda self: self.env.uid, oldname='user_id')
|
||||
color = fields.Integer('Color Index')
|
||||
note = fields.Text('Comments', translate=True)
|
||||
equipment_ids = fields.One2many('hr.equipment', 'category_id', string='Equipments', copy=False)
|
||||
equipment_ids = fields.One2many('maintenance.equipment', 'category_id', string='Equipments', copy=False)
|
||||
equipment_count = fields.Integer(string="Equipment", compute='_compute_equipment_count')
|
||||
maintenance_ids = fields.One2many('hr.equipment.request', 'category_id', copy=False)
|
||||
maintenance_ids = fields.One2many('maintenance.request', 'category_id', copy=False)
|
||||
maintenance_count = fields.Integer(string="Maintenance", compute='_compute_maintenance_count')
|
||||
alias_id = fields.Many2one(
|
||||
'mail.alias', 'Alias', ondelete='cascade', required=True,
|
||||
@@ -45,36 +46,49 @@ class HrEquipmentCategory(models.Model):
|
||||
|
||||
@api.multi
|
||||
def _compute_equipment_count(self):
|
||||
equipment_data = self.env['hr.equipment'].read_group([('category_id', 'in', self.ids)], ['category_id'], ['category_id'])
|
||||
equipment_data = self.env['maintenance.equipment'].read_group([('category_id', 'in', self.ids)], ['category_id'], ['category_id'])
|
||||
mapped_data = dict([(m['category_id'][0], m['category_id_count']) for m in equipment_data])
|
||||
for category in self:
|
||||
category.equipment_count = mapped_data.get(category.id, 0)
|
||||
|
||||
@api.multi
|
||||
def _compute_maintenance_count(self):
|
||||
maintenance_data = self.env['hr.equipment.request'].read_group([('category_id', 'in', self.ids)], ['category_id'], ['category_id'])
|
||||
maintenance_data = self.env['maintenance.request'].read_group([('category_id', 'in', self.ids)], ['category_id'], ['category_id'])
|
||||
mapped_data = dict([(m['category_id'][0], m['category_id_count']) for m in maintenance_data])
|
||||
for category in self:
|
||||
category.maintenance_count = mapped_data.get(category.id, 0)
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
self = self.with_context(alias_model_name='hr.equipment.request', alias_parent_model_name=self._name)
|
||||
category_id = super(HrEquipmentCategory, self).create(vals)
|
||||
self = self.with_context(alias_model_name='maintenance.request', alias_parent_model_name=self._name)
|
||||
if not vals.get('alias_name'):
|
||||
vals['alias_name'] = vals.get('name')
|
||||
category_id = super(MaintenanceEquipmentCategory, self).create(vals)
|
||||
category_id.alias_id.write({'alias_parent_thread_id': category_id.id, 'alias_defaults': {'category_id': category_id.id}})
|
||||
return category_id
|
||||
|
||||
@api.multi
|
||||
def unlink(self):
|
||||
MailAlias = self.env['mail.alias']
|
||||
for category in self:
|
||||
if category.equipment_ids or category.maintenance_ids:
|
||||
raise UserError(_("You cannot delete an equipment category containing equipments or maintenance requests."))
|
||||
res = super(HrEquipmentCategory, self).unlink()
|
||||
MailAlias += category.alias_id
|
||||
res = super(MaintenanceEquipmentCategory, self).unlink()
|
||||
MailAlias.unlink()
|
||||
return res
|
||||
|
||||
def get_alias_model_name(self, vals):
|
||||
return vals.get('alias_model', 'maintenance.equipment')
|
||||
|
||||
class HrEquipment(models.Model):
|
||||
_name = 'hr.equipment'
|
||||
def get_alias_values(self):
|
||||
values = super(MaintenanceEquipmentCategory, self).get_alias_values()
|
||||
values['alias_defaults'] = {'category_id': self.id}
|
||||
return values
|
||||
|
||||
|
||||
class MaintenanceEquipment(models.Model):
|
||||
_name = 'maintenance.equipment'
|
||||
_inherit = ['mail.thread']
|
||||
_description = 'Equipment'
|
||||
|
||||
@@ -83,7 +97,7 @@ class HrEquipment(models.Model):
|
||||
self.ensure_one()
|
||||
if 'owner_user_id' in init_values and self.owner_user_id:
|
||||
return 'maintenance.mt_mat_assign'
|
||||
return super(HrEquipment, self)._track_subtype(init_values)
|
||||
return super(MaintenanceEquipment, self)._track_subtype(init_values)
|
||||
|
||||
@api.multi
|
||||
def name_get(self):
|
||||
@@ -105,11 +119,11 @@ class HrEquipment(models.Model):
|
||||
recs = self.search([('name', operator, name)] + args, limit=limit)
|
||||
return recs.name_get()
|
||||
|
||||
name = fields.Char('Asset Name', required=True, translate=True)
|
||||
name = fields.Char('Equipment Name', required=True, translate=True)
|
||||
active = fields.Boolean(default=True)
|
||||
user_id = fields.Many2one('res.users', string='Technician', track_visibility='onchange')
|
||||
technician_user_id = fields.Many2one('res.users', string='Technician', track_visibility='onchange', oldname='user_id')
|
||||
owner_user_id = fields.Many2one('res.users', string='Owner', track_visibility='onchange')
|
||||
category_id = fields.Many2one('hr.equipment.category', string='Asset Category', track_visibility='onchange')
|
||||
category_id = fields.Many2one('maintenance.equipment.category', string='Equipment Category', track_visibility='onchange')
|
||||
partner_id = fields.Many2one('res.partner', string='Vendor', domain="[('supplier', '=', 1)]")
|
||||
partner_ref = fields.Char('Vendor Reference')
|
||||
location = fields.Char('Location')
|
||||
@@ -121,9 +135,24 @@ class HrEquipment(models.Model):
|
||||
warranty = fields.Date('Warranty')
|
||||
color = fields.Integer('Color Index')
|
||||
scrap_date = fields.Date('Scrap Date')
|
||||
maintenance_ids = fields.One2many('hr.equipment.request', 'equipment_id')
|
||||
maintenance_ids = fields.One2many('maintenance.request', 'equipment_id')
|
||||
maintenance_count = fields.Integer(compute='_compute_maintenance_count', string="Maintenance", store=True)
|
||||
maintenance_open_count = fields.Integer(compute='_compute_maintenance_count', string="Current Maintenance", store=True)
|
||||
period = fields.Integer('Days between each preventive maintenance')
|
||||
next_action_date = fields.Date(compute='_compute_next_maintenance', string='Date of the next preventive maintenance', store=True)
|
||||
maintenance_team_id = fields.Many2one('maintenance.team', string='Maintenance Team')
|
||||
maintenance_duration = fields.Float(help="Maintenance Duration in minutes and seconds.")
|
||||
|
||||
@api.depends('period', 'maintenance_open_count', 'maintenance_ids.request_date')
|
||||
def _compute_next_maintenance(self):
|
||||
for equipment in self:
|
||||
create_date = equipment.create_date and datetime.strptime(equipment.create_date, DEFAULT_SERVER_DATETIME_FORMAT)
|
||||
if equipment.period:
|
||||
next_date = create_date
|
||||
if equipment.maintenance_ids:
|
||||
maintenance = equipment.maintenance_ids.sorted(lambda x: x.request_date)[0]
|
||||
next_date = maintenance.request_date and datetime.strptime(maintenance.request_date, DEFAULT_SERVER_DATE_FORMAT) or create_date
|
||||
equipment.next_action_date = next_date and (next_date + timedelta(days=equipment.period)).strftime(DEFAULT_SERVER_DATE_FORMAT)
|
||||
|
||||
@api.one
|
||||
@api.depends('maintenance_ids.stage_id.done')
|
||||
@@ -133,7 +162,7 @@ class HrEquipment(models.Model):
|
||||
|
||||
@api.onchange('category_id')
|
||||
def _onchange_category_id(self):
|
||||
self.user_id = self.category_id.user_id
|
||||
self.technician_user_id = self.category_id.technician_user_id
|
||||
|
||||
_sql_constraints = [
|
||||
('serial_no', 'unique(serial_no)', "Another asset already exists with this serial number!"),
|
||||
@@ -141,23 +170,23 @@ class HrEquipment(models.Model):
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
equipment = super(HrEquipment, self).create(vals)
|
||||
equipment = super(MaintenanceEquipment, self).create(vals)
|
||||
if equipment.owner_user_id:
|
||||
equipment.message_subscribe_users(user_ids=equipment.owner_user_id.id)
|
||||
equipment.message_subscribe_users(user_ids=[equipment.owner_user_id.id])
|
||||
return equipment
|
||||
|
||||
@api.multi
|
||||
def write(self, vals):
|
||||
if vals.get('owner_user_id'):
|
||||
self.message_subscribe_users(user_ids=[vals['owner_user_id']])
|
||||
return super(HrEquipment, self).write(vals)
|
||||
return super(MaintenanceEquipment, self).write(vals)
|
||||
|
||||
@api.multi
|
||||
def _read_group_category_ids(self, domain, read_group_order=None, access_rights_uid=None):
|
||||
""" Read group customization in order to display all the category in the
|
||||
kanban view, even if they are empty
|
||||
"""
|
||||
category_obj = self.env['hr.equipment.category']
|
||||
category_obj = self.env['maintenance.equipment.category']
|
||||
order = category_obj._order
|
||||
access_rights_uid = access_rights_uid or self._uid
|
||||
if read_group_order == 'category_id desc':
|
||||
@@ -173,20 +202,32 @@ class HrEquipment(models.Model):
|
||||
fold[category.id] = category.fold
|
||||
return result, fold
|
||||
|
||||
@api.model
|
||||
def _cron_generate_requests(self):
|
||||
for equipment in self.search([]):
|
||||
if equipment.period and equipment.next_action_date == date.today().strftime(DEFAULT_SERVER_DATE_FORMAT):
|
||||
self.env['maintenance.request'].create({
|
||||
'name': _('Preventive Maintenance - %s' % equipment.next_action_date),
|
||||
'request_date': equipment.next_action_date,
|
||||
'category_id': equipment.category_id.id,
|
||||
'equipment_id': equipment.id,
|
||||
'maintenance_type': 'preventive',
|
||||
})
|
||||
|
||||
_group_by_full = {
|
||||
'category_id': _read_group_category_ids
|
||||
}
|
||||
|
||||
|
||||
class HrEquipmentRequest(models.Model):
|
||||
_name = 'hr.equipment.request'
|
||||
class MaintenanceRequest(models.Model):
|
||||
_name = 'maintenance.request'
|
||||
_inherit = ['mail.thread']
|
||||
_description = 'Maintenance Requests'
|
||||
_order = "id desc"
|
||||
|
||||
@api.returns('self')
|
||||
def _default_stage(self):
|
||||
return self.env['hr.equipment.stage'].search([], limit=1)
|
||||
return self.env['maintenance.stage'].search([], limit=1)
|
||||
|
||||
@api.multi
|
||||
def _track_subtype(self, init_values):
|
||||
@@ -195,50 +236,65 @@ class HrEquipmentRequest(models.Model):
|
||||
return 'maintenance.mt_req_created'
|
||||
elif 'stage_id' in init_values and self.stage_id.sequence > 1:
|
||||
return 'maintenance.mt_req_status'
|
||||
return super(HrEquipmentRequest, self)._track_subtype(init_values)
|
||||
return super(MaintenanceRequest, self)._track_subtype(init_values)
|
||||
|
||||
def _get_default_team_id(self):
|
||||
return self.env.ref('maintenance.equipment_team_maintenance', raise_if_not_found=False)
|
||||
|
||||
name = fields.Char('Subjects', required=True)
|
||||
description = fields.Text('Description')
|
||||
request_date = fields.Date('Request Date', track_visibility='onchange', default=fields.Date.context_today)
|
||||
|
||||
owner_user_id = fields.Many2one('res.users', string='Created by', default=lambda s: s.env.uid)
|
||||
category_id = fields.Many2one('hr.equipment.category', string='Category')
|
||||
equipment_id = fields.Many2one('hr.equipment', string='Asset', select=True)
|
||||
user_id = fields.Many2one('res.users', string='Assigned to', track_visibility='onchange')
|
||||
stage_id = fields.Many2one('hr.equipment.stage', string='Stage', track_visibility='onchange', default=_default_stage)
|
||||
category_id = fields.Many2one('maintenance.equipment.category', related='equipment_id.category_id', string='Category', store=True, readonly=True)
|
||||
equipment_id = fields.Many2one('maintenance.equipment', string='Equipment', select=True)
|
||||
technician_user_id = fields.Many2one('res.users', string='Owner', track_visibility='onchange', oldname='user_id')
|
||||
stage_id = fields.Many2one('maintenance.stage', string='Stage', track_visibility='onchange', default=_default_stage)
|
||||
priority = fields.Selection([('0', 'Very Low'), ('1', 'Low'), ('2', 'Normal'), ('3', 'High')], string='Priority')
|
||||
color = fields.Integer('Color Index')
|
||||
close_date = fields.Date('Close Date')
|
||||
kanban_state = fields.Selection([('normal', 'In Progress'), ('blocked', 'Blocked'), ('done', 'Ready for next stage')],
|
||||
string='Kanban State', required=True, default='normal', track_visibility='onchange')
|
||||
active = fields.Boolean(default=True, help="Set active to false to hide the maintenance request without deleting it.")
|
||||
# active = fields.Boolean(default=True, help="Set active to false to hide the maintenance request without deleting it.")
|
||||
archive = fields.Boolean(default=False, help="Set archive to true to hide the maintenance request without deleting it.")
|
||||
maintenance_type = fields.Selection([('corrective', 'Corrective'), ('preventive', 'Preventive')], string='Maintenance Type', default="corrective")
|
||||
schedule_date = fields.Datetime('Scheduled Date')
|
||||
maintenance_team_id = fields.Many2one('maintenance.team', string='Team', required=True, default=_get_default_team_id)
|
||||
duration = fields.Float(help="Duration in minutes and seconds.")
|
||||
|
||||
@api.multi
|
||||
def archive_equipment_request(self):
|
||||
self.write({'active': False})
|
||||
self.write({'archive': True})
|
||||
|
||||
@api.multi
|
||||
def reset_equipment_request(self):
|
||||
""" Reinsert the equipment request into the maintenance pipe in the first stage"""
|
||||
first_stage_obj = self.env['hr.equipment.stage'].search([], order="sequence asc", limit=1)
|
||||
self.write({'active': True, 'stage_id': first_stage_obj.id})
|
||||
""" Reinsert the maintenance request into the maintenance pipe in the first stage"""
|
||||
first_stage_obj = self.env['maintenance.stage'].search([], order="sequence asc", limit=1)
|
||||
# self.write({'active': True, 'stage_id': first_stage_obj.id})
|
||||
self.write({'archive': False, 'stage_id': first_stage_obj.id})
|
||||
|
||||
@api.onchange('equipment_id')
|
||||
def onchange_equipment_id(self):
|
||||
self.user_id = self.equipment_id.user_id if self.equipment_id.user_id else self.equipment_id.category_id.user_id
|
||||
self.category_id = self.equipment_id.category_id
|
||||
if self.equipment_id:
|
||||
self.technician_user_id = self.equipment_id.technician_user_id if self.equipment_id.technician_user_id else self.equipment_id.category_id.technician_user_id
|
||||
self.category_id = self.equipment_id.category_id
|
||||
if self.equipment_id.maintenance_team_id:
|
||||
self.maintenance_team_id = self.equipment_id.maintenance_team_id.id
|
||||
|
||||
@api.onchange('category_id')
|
||||
def onchange_category_id(self):
|
||||
if not self.user_id or not self.equipment_id or (self.user_id and not self.equipment_id.user_id):
|
||||
self.user_id = self.category_id.user_id
|
||||
if not self.technician_user_id or not self.equipment_id or (self.technician_user_id and not self.equipment_id.technician_user_id):
|
||||
self.technician_user_id = self.category_id.technician_user_id
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
# context: no_log, because subtype already handle this
|
||||
self = self.with_context(mail_create_nolog=True)
|
||||
request = super(HrEquipmentRequest, self).create(vals)
|
||||
request = super(MaintenanceRequest, self).create(vals)
|
||||
if request.owner_user_id:
|
||||
request.message_subscribe_users(user_ids=[request.owner_user_id.id])
|
||||
if request.equipment_id and not request.maintenance_team_id:
|
||||
request.maintenance_team_id = request.equipment_id.maintenance_team_id
|
||||
return request
|
||||
|
||||
@api.multi
|
||||
@@ -249,14 +305,17 @@ class HrEquipmentRequest(models.Model):
|
||||
vals['kanban_state'] = 'normal'
|
||||
if vals.get('owner_user_id'):
|
||||
self.message_subscribe_users(user_ids=[vals['owner_user_id']])
|
||||
return super(HrEquipmentRequest, self).write(vals)
|
||||
res = super(MaintenanceRequest, self).write(vals)
|
||||
if self.stage_id.done and 'stage_id' in vals:
|
||||
self.write({'close_date': fields.Date.today()})
|
||||
return res
|
||||
|
||||
@api.multi
|
||||
def _read_group_stage_ids(self, domain, read_group_order=None, access_rights_uid=None):
|
||||
""" Read group customization in order to display all the stages in the
|
||||
kanban view, even if they are empty
|
||||
"""
|
||||
stage_obj = self.env['hr.equipment.stage']
|
||||
stage_obj = self.env['maintenance.stage']
|
||||
order = stage_obj._order
|
||||
access_rights_uid = access_rights_uid or self._uid
|
||||
|
||||
@@ -277,3 +336,35 @@ class HrEquipmentRequest(models.Model):
|
||||
_group_by_full = {
|
||||
'stage_id': _read_group_stage_ids
|
||||
}
|
||||
|
||||
|
||||
class MaintenanceTeam(models.Model):
|
||||
_name = 'maintenance.team'
|
||||
_description = 'Maintenance Teams'
|
||||
|
||||
name = fields.Char(required=True)
|
||||
partner_id = fields.Many2one('res.partner', string='Subcontracting Partner')
|
||||
color = fields.Integer(default=0)
|
||||
request_ids = fields.One2many('maintenance.request', 'maintenance_team_id', copy=False)
|
||||
equipment_ids = fields.One2many('maintenance.equipment', 'maintenance_team_id', copy=False)
|
||||
|
||||
# For the dashboard only
|
||||
todo_request_ids = fields.One2many('maintenance.request', copy=False, compute='_compute_todo_requests')
|
||||
todo_request_count = fields.Integer(compute='_compute_todo_requests')
|
||||
todo_request_count_date = fields.Integer(compute='_compute_todo_requests')
|
||||
todo_request_count_high_priority = fields.Integer(compute='_compute_todo_requests')
|
||||
todo_request_count_block = fields.Integer(compute='_compute_todo_requests')
|
||||
|
||||
@api.one
|
||||
@api.depends('todo_request_ids.stage_id.done')
|
||||
def _compute_todo_requests(self):
|
||||
self.todo_request_ids = self.request_ids.filtered(lambda e: e.stage_id.done==False)
|
||||
self.todo_request_count = len(self.todo_request_ids)
|
||||
self.todo_request_count_date = len(self.todo_request_ids.filtered(lambda e: e.schedule_date != False))
|
||||
self.todo_request_count_high_priority = len(self.todo_request_ids.filtered(lambda e: e.priority == '3'))
|
||||
self.todo_request_count_block = len(self.todo_request_ids.filtered(lambda e: e.kanban_state == 'blocked'))
|
||||
|
||||
@api.one
|
||||
@api.depends('equipment_ids')
|
||||
def _compute_equipment(self):
|
||||
self.equipment_count = len(self.equipment_ids)
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from urlparse import urlsplit
|
||||
from openerp import api, fields, models
|
||||
|
||||
|
||||
class HrEquipmentConfigSettings(models.TransientModel):
|
||||
_name = 'hr.equipment.config.settings'
|
||||
_inherit = 'res.config.settings'
|
||||
|
||||
equipment_alias_prefix = fields.Char('Use the following alias to report internal equipment issue')
|
||||
alias_domain = fields.Char("Alias Domain")
|
||||
|
||||
@api.model
|
||||
def get_default_alias_equipment(self, fields):
|
||||
alias_name = False
|
||||
alias_id = self.env.ref('hr_equipment.mail_alias_equipment')
|
||||
if alias_id:
|
||||
alias_name = alias_id.alias_name
|
||||
return {'equipment_alias_prefix': alias_name}
|
||||
|
||||
@api.multi
|
||||
def set_default_alias_equipment(self):
|
||||
for record in self:
|
||||
default_equipment_alias_prefix = record.get_default_alias_equipment()['equipment_alias_prefix']
|
||||
if record.equipment_alias_prefix != default_equipment_alias_prefix:
|
||||
alias_id = self.env.ref('hr_equipment.mail_alias_equipment')
|
||||
if alias_id:
|
||||
alias_id.write({'alias_name': record.equipment_alias_prefix})
|
||||
return True
|
||||
|
||||
@api.model
|
||||
def get_default_alias_domain(self, fields):
|
||||
alias_domain = self.env['ir.config_parameter'].get_param("mail.catchall.domain")
|
||||
if not alias_domain:
|
||||
domain = self.env["ir.config_parameter"].get_param("web.base.url")
|
||||
try:
|
||||
alias_domain = urlsplit(domain).netloc.split(':')[0]
|
||||
except Exception:
|
||||
pass
|
||||
return {'alias_domain': alias_domain}
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_hr_equipment_user,hr.equipment.user,model_hr_equipment,base.group_hr_user,1,1,1,1
|
||||
access_hr_equipment_emp,hr.equipment.emp,model_hr_equipment,base.group_user,1,0,0,0
|
||||
access_hr_equipment_admin_user,hr.equipment.admin.user,model_hr_equipment,base.group_equipment_manager,1,1,1,1
|
||||
access_hr_maintenance_user,hr.equipment.request user,model_hr_equipment_request,base.group_hr_user,1,1,1,1
|
||||
access_hr_maintenance_system_user,hr.equipment.request system user,model_hr_equipment_request,base.group_user,1,1,1,1
|
||||
access_hr_equipment_category_user,hr.equipment.category.user,model_hr_equipment_category,base.group_hr_user,1,1,1,1
|
||||
access_maintenance_request_stage_user,hr.equipment.stage.user,model_hr_equipment_stage,base.group_hr_user,1,1,1,1
|
||||
access_hr_equipment_category_employee,hr.equipment.category.employee,model_hr_equipment_category,base.group_user,1,0,0,0
|
||||
access_maintenance_request_stage_employee,hr.equipment.stage.employee,model_hr_equipment_stage,base.group_user,1,0,0,0
|
||||
access_equipment_user,equipment.user,model_maintenance_equipment,base.group_user,1,0,0,0
|
||||
access_equipment_admin_user,equipment.admin.user,model_maintenance_equipment,base.group_equipment_manager,1,1,1,1
|
||||
access_maintenance_system_user,equipment.request system user,model_maintenance_request,base.group_user,1,1,1,1
|
||||
access_equipment_category_user,equipment.category.user,model_maintenance_equipment_category,base.group_user,1,0,0,0
|
||||
access_equipment_category_admin_user,equipment.category system user,model_maintenance_equipment_category,base.group_equipment_manager,1,1,1,1
|
||||
access_maintenance_stage_user,maintenance.stage.user,model_maintenance_stage,base.group_user,1,0,0,0
|
||||
access_maintenance_stage_admin_user,equipment.request.stage system user,model_maintenance_stage,base.group_equipment_manager,1,1,1,1
|
||||
access_maintenance_team_user,maintenance.team.user,model_maintenance_team,base.group_user,1,0,0,0
|
||||
|
@@ -1,9 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- This group is the lowest level of HR management: the Equipment manager
|
||||
is only allowed to deal with equipment registration and maintenance
|
||||
|
||||
HR Officers/Managers are Equipment Managers (see next group) -->
|
||||
<!-- This group is only allowed to deal with equipment registration and maintenance -->
|
||||
<record id="base.group_equipment_manager" model="res.groups">
|
||||
<field name="name">Equipment Manager</field>
|
||||
<field name="category_id" ref="base.module_category_human_resources"/>
|
||||
@@ -11,36 +8,31 @@
|
||||
<field name="comment">The user will be able to manage equipments.</field>
|
||||
</record>
|
||||
|
||||
<!-- HR officers and HR managers are allowed to manage equipments -->
|
||||
<record id="base.group_hr_user" model="res.groups">
|
||||
<field name="implied_ids" eval="[(4, ref('base.group_equipment_manager'))]"/>
|
||||
</record>
|
||||
|
||||
<!-- Rules -->
|
||||
<record id="hr_equipment_request_rule_user" model="ir.rule">
|
||||
<field name="name">Employees are allowed to access their own maintenance requests</field>
|
||||
<field name="model_id" ref="model_hr_equipment_request"/>
|
||||
<field name="domain_force">['|', ('user_id.id', '=', user.id), ('employee_id.user_id.id', '=', user.id)]</field>
|
||||
<record id="equipment_request_rule_user" model="ir.rule">
|
||||
<field name="name">Users are allowed to access their own maintenance requests</field>
|
||||
<field name="model_id" ref="model_maintenance_request"/>
|
||||
<field name="domain_force">['|', ('owner_user_id.id', '=', user.id), ('technician_user_id.id', '=', user.id)]</field>
|
||||
<field name="groups" eval="[(4, ref('base.group_user'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="hr_equipment_rule_user" model="ir.rule">
|
||||
<field name="name">Employees are allowed to access their own equipments</field>
|
||||
<field name="model_id" ref="model_hr_equipment"/>
|
||||
<field name="domain_force">[('employee_id.user_id.id', '=', user.id)]</field>
|
||||
<record id="equipment_rule_user" model="ir.rule">
|
||||
<field name="name">Users are allowed to access their own equipments</field>
|
||||
<field name="model_id" ref="model_maintenance_equipment"/>
|
||||
<field name="domain_force">[('owner_user_id.id', '=', user.id)]</field>
|
||||
<field name="groups" eval="[(4, ref('base.group_user'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="hr_equipment_request_rule_admin_user" model="ir.rule">
|
||||
<record id="equipment_request_rule_admin_user" model="ir.rule">
|
||||
<field name="name">Administrator of maintenance requests</field>
|
||||
<field name="model_id" ref="model_hr_equipment_request"/>
|
||||
<field name="model_id" ref="model_maintenance_request"/>
|
||||
<field name="domain_force">[(1, '=', 1)]</field>
|
||||
<field name="groups" eval="[(4, ref('base.group_equipment_manager'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="hr_equipment_rule_admin_user" model="ir.rule">
|
||||
<record id="equipment_rule_admin_user" model="ir.rule">
|
||||
<field name="name">Equipments administrator</field>
|
||||
<field name="model_id" ref="model_hr_equipment"/>
|
||||
<field name="model_id" ref="model_maintenance_equipment"/>
|
||||
<field name="domain_force">[(1, '=', 1)]</field>
|
||||
<field name="groups" eval="[(4, ref('base.group_equipment_manager'))]"/>
|
||||
</record>
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
.o_kanban_view.o_kanban_dashboard.o_maintenance_team_kanban {
|
||||
.o_kanban_record {
|
||||
min-height: 250px;
|
||||
@media (min-width: @screen-sm-min) {
|
||||
min-width: 420px;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,45 +4,44 @@ from openerp.tests.common import TransactionCase
|
||||
import time
|
||||
|
||||
|
||||
class TestHrEquipment(TransactionCase):
|
||||
class TestEquipment(TransactionCase):
|
||||
""" Test used to check that when doing equipment/maintenance_request/equipment_category creation."""
|
||||
|
||||
def setUp(self):
|
||||
super(TestHrEquipment, self).setUp()
|
||||
self.equipment = self.env['hr.equipment']
|
||||
self.maintenance_request = self.env['hr.equipment.request']
|
||||
self.user = self.env['res.users']
|
||||
super(TestEquipment, self).setUp()
|
||||
self.equipment = self.env['maintenance.equipment']
|
||||
self.maintenance_request = self.env['maintenance.request']
|
||||
self.res_users = self.env['res.users']
|
||||
self.main_company = self.env.ref('base.main_company')
|
||||
res_hr_user = self.env.ref('base.group_user')
|
||||
res_hr_manager = self.env.ref('base.group_hr_manager')
|
||||
res_user = self.env.ref('base.group_user')
|
||||
res_manager = self.env.ref('base.group_equipment_manager')
|
||||
|
||||
self.hr_user = self.user.create(dict(
|
||||
self.user = self.res_users.create(dict(
|
||||
name="Normal User/Employee",
|
||||
company_id=self.main_company.id,
|
||||
login="emp",
|
||||
password="emp",
|
||||
email="empuser@yourcompany.example.com",
|
||||
groups_id=[(6, 0, [res_hr_user.id])]
|
||||
groups_id=[(6, 0, [res_user.id])]
|
||||
))
|
||||
self.env.ref('hr.employee_qdp').write({'user_id': self.hr_user.id})
|
||||
|
||||
self.hr_manager = self.user.create(dict(
|
||||
name="HR Manager",
|
||||
self.manager = self.res_users.create(dict(
|
||||
name="Equipment Manager",
|
||||
company_id=self.main_company.id,
|
||||
login="hm",
|
||||
password="hm",
|
||||
email="hrmanager@yourcompany.example.com",
|
||||
groups_id=[(6, 0, [res_hr_manager.id])]
|
||||
email="eqmanager@yourcompany.example.com",
|
||||
groups_id=[(6, 0, [res_manager.id])]
|
||||
))
|
||||
|
||||
def test_hr_equipment_request_category(self):
|
||||
def test_equipment_request_category(self):
|
||||
|
||||
# Create a new equipment
|
||||
equipment_01 = self.equipment.sudo(self.hr_manager).create({
|
||||
equipment_01 = self.equipment.sudo(self.manager).create({
|
||||
'name': 'Samsung Monitor "15',
|
||||
'category_id': self.ref('hr_equipment.hr_equipment_monitor'),
|
||||
'employee_id': self.ref('hr.employee_qdp'),
|
||||
'user_id': self.ref('base.user_root'),
|
||||
'category_id': self.ref('maintenance.equipment_monitor'),
|
||||
'technician_user_id': self.ref('base.user_root'),
|
||||
'owner_user_id': self.user.id,
|
||||
'assign_date': time.strftime('%Y-%m-%d'),
|
||||
'serial_no': 'MT/127/18291015',
|
||||
'model': 'NP355E5X',
|
||||
@@ -53,24 +52,24 @@ class TestHrEquipment(TransactionCase):
|
||||
assert equipment_01, "Equipment not created"
|
||||
|
||||
# Create new maintenance request
|
||||
maintenance_request_01 = self.maintenance_request.sudo(self.hr_user).create({
|
||||
maintenance_request_01 = self.maintenance_request.sudo(self.user).create({
|
||||
'name': 'Resolution is bad',
|
||||
'user_id': self.hr_user.id,
|
||||
'employee_id': self.ref('hr.employee_qdp'),
|
||||
'technician_user_id': self.user.id,
|
||||
'owner_user_id': self.user.id,
|
||||
'equipment_id': equipment_01.id,
|
||||
'category_id': self.ref('hr_equipment.hr_equipment_monitor'),
|
||||
'color': 7,
|
||||
'stage_id': self.ref('hr_equipment.stage_0')
|
||||
'stage_id': self.ref('maintenance.stage_0'),
|
||||
'maintenance_team_id': self.ref('maintenance.equipment_team_maintenance')
|
||||
})
|
||||
|
||||
# I check that maintenance_request is created or not
|
||||
assert maintenance_request_01, "Maintenance Request not created"
|
||||
|
||||
# I check that Initially maintenance request is in the "New Request" stage
|
||||
self.assertEquals(maintenance_request_01.stage_id.id, self.ref('hr_equipment.stage_0'))
|
||||
self.assertEquals(maintenance_request_01.stage_id.id, self.ref('maintenance.stage_0'))
|
||||
|
||||
# I check that change the maintenance_request stage on click statusbar
|
||||
maintenance_request_01.sudo(self.hr_user).write({'stage_id': self.ref('hr_equipment.stage_1')})
|
||||
maintenance_request_01.sudo(self.user).write({'stage_id': self.ref('maintenance.stage_1')})
|
||||
|
||||
# I check that maintenance request is in the "In Progress" stage
|
||||
self.assertEquals(maintenance_request_01.stage_id.id, self.ref('hr_equipment.stage_1'))
|
||||
self.assertEquals(maintenance_request_01.stage_id.id, self.ref('maintenance.stage_1'))
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="hr_equipment_config_settings_view_form" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.config.settings</field>
|
||||
<field name="model">hr.equipment.config.settings</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Configure Equipments Settings" class="oe_form_configuration">
|
||||
<header>
|
||||
<button string="Apply" type="object" name="execute" class="oe_highlight"/>
|
||||
<button string="Cancel" type="object" name="cancel" class="oe_link"/>
|
||||
</header>
|
||||
<group string="Track Equipments" name="hr_equipment_grp">
|
||||
<label for="id" string="Requests Alias"/>
|
||||
<div>
|
||||
<label for="equipment_alias_prefix" class="oe_inline"/>
|
||||
<div>
|
||||
<label for="id" id="the following alias to report internal equipment issue"/>
|
||||
<field name="equipment_alias_prefix" class="oe_inline"/>@
|
||||
<field name="alias_domain" class="oe_inline" readonly="1"/>
|
||||
</div>
|
||||
</div>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_hr_equipment_configuration" model="ir.actions.act_window">
|
||||
<field name="name">Configure Equipments</field>
|
||||
<field name="res_model">hr.equipment.config.settings</field>
|
||||
<field name="view_id" ref="hr_equipment_config_settings_view_form"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">inline</field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<template id="assets_backend" name="maintenance assets" inherit_id="web.assets_backend">
|
||||
<xpath expr="." position="inside">
|
||||
<link rel="stylesheet" href="/maintenance/static/src/less/maintenance_team_dashboard.less"/>
|
||||
</xpath>
|
||||
</template>
|
||||
</odoo>
|
||||
@@ -1,18 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<!-- hr.equiment.request : views -->
|
||||
<!-- equiment.request : views -->
|
||||
<record id="hr_equipment_request_view_search" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.request.search</field>
|
||||
<field name="model">hr.equipment.request</field>
|
||||
<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"/>
|
||||
<field name="category_id"/>
|
||||
<field name="user_id"/>
|
||||
<field name="technician_user_id"/>
|
||||
<field name="equipment_id"/>
|
||||
<field name="owner_user_id"/>
|
||||
<field name="stage_id"/>
|
||||
<field name="maintenance_team_id"/>
|
||||
<separator/>
|
||||
<filter string="To do" domain="[('stage_id.done', '=', False)]" name="todo"/>
|
||||
<filter string="Blocked" name="kanban_state_block" domain="[('kanban_state', '=', 'blocked')]"/>
|
||||
<filter string="In Progress" name="progress" domain="[('kanban_state', '=', 'normal')]"/>
|
||||
<filter string="Done" name="done" domain="[('kanban_state', '=', 'done')]"/>
|
||||
<filter string="Top Priorities" name="top_priority" domain="[('priority', '=', '3')]"/>
|
||||
<separator/>
|
||||
<filter string="Unscheduled Maintenance" domain="[('schedule_date', '=', False)]" name="unscheduled"/>
|
||||
<separator/>
|
||||
<filter string="My Requests" name="my_requests" domain="[('owner_user_id', '=', uid)]"/>
|
||||
<separator/>
|
||||
@@ -20,7 +29,7 @@
|
||||
<separator/>
|
||||
<filter string="Archived" name="inactive" domain="[('active','=',False)]"/>
|
||||
<group expand='0' string='Group by...'>
|
||||
<filter string='Users' domain="[]" context="{'group_by': 'user_id'}"/>
|
||||
<filter string='Assigned' domain="[]" context="{'group_by': 'technician_user_id'}"/>
|
||||
<filter string='Category' domain="[]" context="{'group_by' : 'category_id'}"/>
|
||||
<filter string='Stages' domain="[]" context="{'group_by' : 'stage_id'}"/>
|
||||
<filter string='Created By' name='created_by' domain="[]" context="{'group_by': 'owner_user_id'}"/>
|
||||
@@ -30,22 +39,22 @@
|
||||
</record>
|
||||
|
||||
<record id="hr_equipment_request_view_form" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.request.form</field>
|
||||
<field name="model">hr.equipment.request</field>
|
||||
<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': [('active', '=', False)]}"/>
|
||||
<button string="Reset Request" name="reset_equipment_request" type="object" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<field name="stage_id" widget="statusbar" clickable="true" readonly="1"/>
|
||||
<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" clickable="true" readonly="1" attrs="{'invisible': [('archive', '=', True)]}"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button name="toggle_active" type="object" class="oe_stat_button" icon="fa-archive">
|
||||
<field name="active" widget="boolean_button" options='{"terminology": "archive"}'/>
|
||||
</button>
|
||||
<div attrs="{'invisible': [('archive', '=', False)]}">
|
||||
<span class="label label-warning pull-right">Canceled</span>
|
||||
</div>
|
||||
<div class="oe_right">
|
||||
<field name="kanban_state" class="oe_inline" widget="kanban_state_selection"/>
|
||||
</div>
|
||||
<field name="kanban_state" widget="kanban_state_selection"/>
|
||||
<div class="oe_title">
|
||||
<label for="name" class="oe_edit_only" string="Subject"/>
|
||||
<h1>
|
||||
@@ -56,12 +65,21 @@
|
||||
<group>
|
||||
<field name="owner_user_id" string="Requested By"/>
|
||||
<field name="equipment_id" context="{'default_category_id':category_id}"/>
|
||||
<field name="category_id" groups="base.group_hr_manager"/>
|
||||
<field name="category_id" groups="base.group_equipment_manager"/>
|
||||
<field name="request_date" groups="base.group_no_one"/>
|
||||
<field name="close_date" groups="base.group_no_one"/>
|
||||
<field name="archive" invisible="1"/>
|
||||
<field name="maintenance_type" widget="radio"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="user_id" string="Repair Responsible"/>
|
||||
<field name="maintenance_team_id"/>
|
||||
<field name="technician_user_id" string="Responsible"/>
|
||||
<label for="schedule_date"/>
|
||||
<div class="o_row">
|
||||
<field name="schedule_date"/>
|
||||
<label string="for"/>
|
||||
<field name="duration" class="oe_inline"/> hours
|
||||
</div>
|
||||
<field name="priority" widget="priority"/>
|
||||
</group>
|
||||
</group>
|
||||
@@ -76,15 +94,15 @@
|
||||
</record>
|
||||
|
||||
<record id="hr_equipment_request_view_kanban" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.request.kanban</field>
|
||||
<field name="model">hr.equipment.request</field>
|
||||
<field name="name">equipment.request.kanban</field>
|
||||
<field name="model">maintenance.request</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban default_group_by="stage_id">
|
||||
<field name="stage_id"/>
|
||||
<field name="color"/>
|
||||
<field name="priority"/>
|
||||
<field name="equipment_id"/>
|
||||
<field name="user_id"/>
|
||||
<field name="technician_user_id"/>
|
||||
<field name="owner_user_id"/>
|
||||
<field name="category_id"/>
|
||||
<field name="kanban_state"/>
|
||||
@@ -93,7 +111,7 @@
|
||||
<t t-name="kanban-tooltip">
|
||||
<ul class="oe_kanban_tooltip">
|
||||
<li><b>Category:</b> <field name="category_id"/></li>
|
||||
<li><b>Request to:</b> <field name="user_id"/></li>
|
||||
<li><b>Request to:</b> <field name="technician_user_id"/></li>
|
||||
</ul>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
@@ -138,28 +156,62 @@
|
||||
</record>
|
||||
|
||||
<record id="hr_equipment_request_view_tree" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.request.tree</field>
|
||||
<field name="model">hr.equipment.request</field>
|
||||
<field name="name">equipment.request.tree</field>
|
||||
<field name="model">maintenance.request</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="maintenance Request" decoration-bf="message_needaction==True">
|
||||
<field name="message_needaction" invisible="1"/>
|
||||
<field name="name"/>
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="request_date" groups="base.group_no_one"/>
|
||||
<field name="owner_user_id"/>
|
||||
<field name="user_id"/>
|
||||
<field name="category_id" groups="base.group_hr_manager"/>
|
||||
<field name="technician_user_id"/>
|
||||
<field name="category_id" groups="base.group_equipment_manager"/>
|
||||
<field name="stage_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- hr.equiment.request : actions -->
|
||||
<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">
|
||||
<field name="technician_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">
|
||||
<field name="technician_user_id"/>
|
||||
<field name="stage_id"/>
|
||||
</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" color="technician_user_id">
|
||||
<field name="name"/>
|
||||
<field name="technician_user_id"/>
|
||||
</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">hr.equipment.request</field>
|
||||
<field name="view_mode">kanban,tree,form</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_technician_user_id': uid}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to add a new maintenance request.
|
||||
@@ -171,8 +223,8 @@
|
||||
|
||||
<record id="hr_equipment_request_action_link" model="ir.actions.act_window">
|
||||
<field name="name">Maintenance Requests</field>
|
||||
<field name="res_model">hr.equipment.request</field>
|
||||
<field name="view_mode">kanban,tree,form</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">{
|
||||
@@ -190,26 +242,40 @@
|
||||
|
||||
<record id="hr_equipment_request_action_from_equipment" model="ir.actions.act_window">
|
||||
<field name="name">Maintenance Requests</field>
|
||||
<field name="res_model">hr.equipment.request</field>
|
||||
<field name="src_model">hr.equipment</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="res_model">maintenance.request</field>
|
||||
<field name="src_model">maintenance.equipment</field>
|
||||
<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>
|
||||
</record>
|
||||
|
||||
<!-- hr.equiment : views -->
|
||||
<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>
|
||||
</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"/>
|
||||
</record>
|
||||
|
||||
<!-- equiment : views -->
|
||||
<record id="hr_equipment_view_form" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.form</field>
|
||||
<field name="model">hr.equipment</field>
|
||||
<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="toggle_active" type="object" class="oe_stat_button" icon="fa-archive">
|
||||
<field name="active" widget="boolean_button" options='{"terminology": "archive"}'/>
|
||||
</button>
|
||||
<button name="%(hr_equipment_request_action_from_equipment)d"
|
||||
type="action"
|
||||
class="oe_stat_button"
|
||||
@@ -220,19 +286,18 @@
|
||||
<div class="oe_title">
|
||||
<label for="name" class="oe_edit_only"/>
|
||||
<h1><field name="name" string="Name" placeholder="Equipment Name"/></h1>
|
||||
<label for="category_id" class="oe_edit_only"/>
|
||||
<field name="category_id" options="{"no_open": True}"/>
|
||||
<label for="serial_no" class="oe_edit_only"/>
|
||||
<field name="serial_no"/>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="category_id" options="{"no_open": True}"/>
|
||||
<field name="owner_user_id" string="Owner"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="user_id"/>
|
||||
<field name="maintenance_team_id"/>
|
||||
<field name="technician_user_id"/>
|
||||
<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>
|
||||
@@ -245,10 +310,25 @@
|
||||
<field name="partner_id"/>
|
||||
<field name="partner_ref"/>
|
||||
<field name="model"/>
|
||||
<field name="serial_no"/>
|
||||
</group><group>
|
||||
<field name="cost" groups="base.group_hr_user"/>
|
||||
<field name="cost" groups="base.group_equipment_manager"/>
|
||||
<field name="warranty"/>
|
||||
<field name="location"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<page string="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>
|
||||
@@ -263,19 +343,21 @@
|
||||
</record>
|
||||
|
||||
<record id="hr_equipment_view_kanban" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.kanban</field>
|
||||
<field name="model">hr.equipment</field>
|
||||
<field name="name">equipment.kanban</field>
|
||||
<field name="model">maintenance.equipment</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban default_group_by="category_id">
|
||||
<kanban>
|
||||
<field name="name"/>
|
||||
<field name="color"/>
|
||||
<field name="user_id"/>
|
||||
<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="technician_user_id"/>
|
||||
<templates>
|
||||
<t t-name="kanban-tooltip">
|
||||
<ul class="oe_kanban_tooltip">
|
||||
@@ -309,6 +391,9 @@
|
||||
<div class="oe_kanban_footer_left mt4 label label-danger" t-if="record.maintenance_open_count.raw_value" >
|
||||
<t t-raw="record.maintenance_open_count.raw_value"/> Request
|
||||
</div>
|
||||
<div class="oe_kanban_footer_left mt4 label label-default" t-if="record.maintenance_open_count.raw_value == 0 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_clear"></div>
|
||||
</div>
|
||||
@@ -319,17 +404,17 @@
|
||||
</record>
|
||||
|
||||
<record id="hr_equipment_view_tree" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.tree</field>
|
||||
<field name="model">hr.equipment</field>
|
||||
<field name="name">equipment.tree</field>
|
||||
<field name="model">maintenance.equipment</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Assign To Employee" decoration-bf="message_needaction==True">
|
||||
<tree string="Assign To User" decoration-bf="message_needaction==True">
|
||||
<field name="message_needaction" invisible="1"/>
|
||||
<field name="name"/>
|
||||
<field name="active" invisible="1"/>
|
||||
<!-- <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="user_id"/>
|
||||
<field name="technician_user_id"/>
|
||||
<field name="category_id"/>
|
||||
<field name="partner_id" invisible="1"/>
|
||||
</tree>
|
||||
@@ -337,8 +422,8 @@
|
||||
</record>
|
||||
|
||||
<record id="hr_equipment_view_search" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.search</field>
|
||||
<field name="model">hr.equipment</field>
|
||||
<field name="name">equipment.search</field>
|
||||
<field name="model">maintenance.equipment</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search">
|
||||
<field name="name" filter_domain="['|','|','|',('name','ilike',self),('model','ilike',self),('serial_no','ilike',self),('partner_ref', 'ilike', self)]"/>
|
||||
@@ -353,9 +438,9 @@
|
||||
<separator/>
|
||||
<filter string="Unread Messages" name="message_needaction" domain="[('message_needaction','=',True)]"/>
|
||||
<separator/>
|
||||
<filter string="Archived" name="inactive" domain="[('active','=',False)]"/>
|
||||
<!-- <filter string="Archived" name="inactive" domain="[('active','=',False)]"/> -->
|
||||
<group expand='0' string='Group by...'>
|
||||
<filter string='Users' domain="[]" context="{'group_by': 'user_id'}"/>
|
||||
<filter string='Technicians' domain="[]" context="{'group_by': 'technician_user_id'}"/>
|
||||
<filter string='Category' domain="[]" context="{'group_by': 'category_id'}"/>
|
||||
<filter string='Owner' domain="[]" context="{'group_by': 'owner_user_id'}"/>
|
||||
<filter string='Vendor' domain="[]" context="{'group_by': 'partner_id'}"/>
|
||||
@@ -366,7 +451,7 @@
|
||||
|
||||
<record id="hr_equipment_action" model="ir.actions.act_window">
|
||||
<field name="name">Equipments</field>
|
||||
<field name="res_model">hr.equipment</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">
|
||||
@@ -381,10 +466,10 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- hr.equiment : actions -->
|
||||
<!-- equiment : actions -->
|
||||
<record id="hr_equipment_action_from_category_form" model="ir.actions.act_window">
|
||||
<field name="name">Equipments</field>
|
||||
<field name="res_model">hr.equipment</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"/>
|
||||
@@ -403,10 +488,10 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- hr.equipment.category : views -->
|
||||
<!-- equipment.category : views -->
|
||||
<record id="hr_equipment_category_view_form" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.category.form</field>
|
||||
<field name="model">hr.equipment.category</field>
|
||||
<field name="name">equipment.category.form</field>
|
||||
<field name="model">maintenance.equipment.category</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Equipment Categories">
|
||||
<sheet>
|
||||
@@ -432,7 +517,7 @@
|
||||
</div>
|
||||
<group>
|
||||
<group col="4">
|
||||
<field name="user_id"/>
|
||||
<field name="technician_user_id"/>
|
||||
</group>
|
||||
<group name="group_alias" attrs="{'invisible': [('alias_domain', '=', False)]}" groups="base.group_no_one">
|
||||
<label for="alias_name" string="Email Alias"/>
|
||||
@@ -455,33 +540,33 @@
|
||||
</record>
|
||||
|
||||
<record id="hr_equipment_category_view_tree" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.category.tree</field>
|
||||
<field name="model">hr.equipment.category</field>
|
||||
<field name="name">equipment.category.tree</field>
|
||||
<field name="model">maintenance.equipment.category</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Assign To Employee">
|
||||
<tree string="Assign To User">
|
||||
<field name="name" string="Name"/>
|
||||
<field name="user_id"/>
|
||||
<field name="technician_user_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_equipment_category_view_search" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.category.search</field>
|
||||
<field name="model">hr.equipment.category</field>
|
||||
<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' domain="[]" context="{'group_by' : 'user_id'}"/>
|
||||
<filter string='Responsible' domain="[]" context="{'group_by' : 'technician_user_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- hr.equipment.category : actions -->
|
||||
<!-- equipment.category : actions -->
|
||||
<record id="hr_equipment_category_action" model="ir.actions.act_window">
|
||||
<field name="name">Equipment Categories</field>
|
||||
<field name="res_model">hr.equipment.category</field>
|
||||
<field name="res_model">maintenance.equipment.category</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="hr_equipment_category_view_tree"/>
|
||||
<field name="help" type="html">
|
||||
@@ -491,10 +576,10 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- hr.equipment.stage : views -->
|
||||
<!-- equipment.stage : views -->
|
||||
<record id="hr_equipment_stage_view_search" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.stage.search</field>
|
||||
<field name="model">hr.equipment.stage</field>
|
||||
<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"/>
|
||||
@@ -503,8 +588,8 @@
|
||||
</record>
|
||||
|
||||
<record id="hr_equipment_stage_view_tree" model="ir.ui.view">
|
||||
<field name="name">hr.equipment.stage.tree</field>
|
||||
<field name="model">hr.equipment.stage</field>
|
||||
<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"/>
|
||||
@@ -515,10 +600,10 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- hr.equipment.stages : actions -->
|
||||
<!-- equipment.stages : actions -->
|
||||
<record id="hr_equipment_stage_action" model="ir.actions.act_window">
|
||||
<field name="name">Stages</field>
|
||||
<field name="res_model">hr.equipment.stage</field>
|
||||
<field name="res_model">maintenance.stage</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="hr_equipment_stage_view_tree"/>
|
||||
@@ -529,59 +614,263 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- maitenance.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>
|
||||
<div class="oe_title">
|
||||
<label for="name" class="oe_edit_only" string="Category Name"/>
|
||||
<h1>
|
||||
<field name="name"/>
|
||||
</h1>
|
||||
</div>
|
||||
<field name="partner_id"/>
|
||||
</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="top">
|
||||
<field name="name"/>
|
||||
</tree>
|
||||
</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"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="#{kanban_color(record.color.raw_value)}">
|
||||
<div class="o_kanban_card_header">
|
||||
<div class="o_kanban_card_header_title">
|
||||
<div class="o_primary"><field name="name"/></div>
|
||||
</div>
|
||||
<div class="o_kanban_manage_button_section">
|
||||
<a class="o_kanban_manage_toggle_button" href="#">More <i class="fa fa-caret-down"/></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container o_kanban_card_content o_visible">
|
||||
<div class="row">
|
||||
<div class="col-xs-6 o_kanban_primary_left">
|
||||
<button class="btn btn-primary" name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action">
|
||||
<t t-esc="record.todo_request_count.value"/> To Do
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-xs-6 o_kanban_primary_right">
|
||||
<div class="row">
|
||||
<div class="col-xs-9">
|
||||
<a name="%(hr_equipment_request_action_cal)d" type="action" domain="[('maintenance_team_id', '=', active_id)]">
|
||||
Scheduled
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-3">
|
||||
<t t-esc="record.todo_request_count_date.value"/>
|
||||
</div>
|
||||
<div class="col-xs-9">
|
||||
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_top_priority': 1}">
|
||||
Top Priorities
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-3">
|
||||
<t t-esc="record.todo_request_count_high_priority.value"/>
|
||||
</div>
|
||||
<div class="col-xs-9">
|
||||
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_kanban_state_block': 1}">
|
||||
Blocked
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-3">
|
||||
<t t-esc="record.todo_request_count_block.value"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="container o_kanban_card_manage_pane o_invisible">
|
||||
<div class="row">
|
||||
<div class="col-xs-6 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span>View</span>
|
||||
</div>
|
||||
<div>
|
||||
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action">
|
||||
All
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_todo': 1}">
|
||||
To Do
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_progress': 1}">
|
||||
In Progress
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_done': 1}">
|
||||
Done
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6 o_kanban_card_manage_section o_kanban_manage_new">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span>Reports</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div t-if="widget.editable" class="o_kanban_card_manage_settings row">
|
||||
<div class="col-xs-8">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
<div class="col-xs-4 text-right">
|
||||
<a type="edit">Settings</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</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</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="maintenance_team_view_tree"/>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to 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_type">form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to add a stage in the maintenance request.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- Menu items hierachy -->
|
||||
<menuitem
|
||||
id="menu_equipment_title"
|
||||
name="Equipments"
|
||||
web_icon="hr_equipment,static/description/icon.png"
|
||||
groups="base.group_hr_user,base.group_equipment_manager"
|
||||
id="menu_maintenance_title"
|
||||
name="Maintenance"
|
||||
web_icon="maintenance,static/description/icon.png"
|
||||
sequence="110"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_equipment_configuration"
|
||||
name="Configuration"
|
||||
parent="menu_equipment_title"
|
||||
groups="base.group_hr_manager"
|
||||
sequence="100"/>
|
||||
id="menu_m_dashboard"
|
||||
name="Dashboard"
|
||||
parent="menu_maintenance_title"
|
||||
groups="base.group_equipment_manager,base.group_user"
|
||||
action="maintenance_dashboard_action"
|
||||
sequence="0"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_m_request"
|
||||
name="Maintenance"
|
||||
parent="menu_maintenance_title"
|
||||
groups="base.group_equipment_manager,base.group_user"
|
||||
sequence="1"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_m_request_form"
|
||||
name="Maintenance Requests"
|
||||
parent="menu_equipment_title"
|
||||
parent="menu_m_request"
|
||||
action="hr_equipment_request_action"
|
||||
groups="base.group_hr_manager,base.group_hr_user,base.group_user"
|
||||
groups="base.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="base.group_equipment_manager,base.group_user"
|
||||
sequence="2"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_equipment_form"
|
||||
id="menu_equipment_form"
|
||||
name="Equipments"
|
||||
parent="menu_equipment_title"
|
||||
parent="menu_maintenance_title"
|
||||
action="hr_equipment_action"
|
||||
groups="base.group_hr_manager,base.group_hr_user,base.group_user"
|
||||
groups="base.group_equipment_manager,base.group_user"
|
||||
sequence="2"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_m_reports"
|
||||
name="Reporting"
|
||||
parent="menu_maintenance_title"
|
||||
groups="base.group_equipment_manager,base.group_user"
|
||||
sequence="3"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_m_reports_oee"
|
||||
name="Overall Equipment Effectiveness (OEE)"
|
||||
parent="menu_m_reports"
|
||||
groups="base.group_equipment_manager,base.group_user"
|
||||
sequence="1"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_equipment_global_settings"
|
||||
name="Settings"
|
||||
parent="menu_equipment_configuration"
|
||||
action="action_hr_equipment_configuration"
|
||||
sequence="0"
|
||||
groups="base.group_system"/>
|
||||
id="menu_m_reports_losses"
|
||||
name="Losses Analysis"
|
||||
parent="menu_m_reports"
|
||||
groups="base.group_equipment_manager,base.group_user"
|
||||
sequence="2"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_equipment_cat"
|
||||
id="menu_maintenance_configuration"
|
||||
name="Configuration"
|
||||
parent="menu_maintenance_title"
|
||||
groups="base.group_equipment_manager"
|
||||
sequence="100"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_maintenance_teams"
|
||||
name="Maintenance Teams"
|
||||
parent="menu_maintenance_configuration"
|
||||
action="maintenance_team_action_settings"
|
||||
groups="base.group_equipment_manager"
|
||||
sequence="1"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_maintenance_cat"
|
||||
name="Equipment Categories"
|
||||
parent="menu_equipment_configuration"
|
||||
parent="menu_maintenance_configuration"
|
||||
action="hr_equipment_category_action"
|
||||
groups="base.group_no_one"
|
||||
sequence="1"/>
|
||||
sequence="2"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_equipment_stage_configuration"
|
||||
name="Stages"
|
||||
parent="menu_equipment_configuration"
|
||||
id="menu_maintenance_stage_configuration"
|
||||
name="Maintenance Stages"
|
||||
parent="menu_maintenance_configuration"
|
||||
action="hr_equipment_stage_action"
|
||||
groups="base.group_no_one"
|
||||
sequence="2" />
|
||||
sequence="3" />
|
||||
</odoo>
|
||||
|
||||
Reference in New Issue
Block a user