[ADD][SPLIT] maintenance: hr part

maintenance is not dependant on hr anymore. A new module hr_maintenance is
added that adds hr-related fields (employee owner, ...). This way maintenance
is a stand alone application.
This commit is contained in:
Thibault Delavallée
2016-07-04 16:22:37 +02:00
parent 12a35ec1a9
commit e7ef6e069c
9 changed files with 283 additions and 120 deletions
+4
View File
@@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import models
+17
View File
@@ -0,0 +1,17 @@
# -*- coding: utf-8 -*-
{
'name': 'HR - Equipments',
'version': '1.0',
'sequence': 125,
'description': """
Bridge between HR and Maintenance.""",
'depends': ['hr', 'maintenance'],
'summary': 'Equipments, Assets, Internal Hardware, Allocation Tracking',
'data': [
'views/maintenance_views.xml',
],
'demo': [],
'installable': True,
'auto-install': True,
}
+3
View File
@@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
import equipment
+117
View File
@@ -0,0 +1,117 @@
# -*- coding: utf-8 -*-
from odoo import api, fields, models, tools
class HrEquipment(models.Model):
_inherit = 'hr.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')],
string='Used By',
required=True,
default='employee')
@api.onchange('equipment_assign_to')
def _onchange_equipment_assign_to(self):
if self.equipment_assign_to == 'employee':
self.department_id = False
if self.equipment_assign_to == 'department':
self.employee_id = False
self.assign_date = fields.Date.context_today(self)
@api.model
def create(self, vals):
equipment = super(HrEquipment, 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:
user_ids.append(equipment.employee_id.user_id.id)
if equipment.department_id and equipment.department_id.manager_id and equipment.department_id.manager_id.user_id:
user_ids.append(equipment.department_id.manager_id.user_id.id)
if user_ids:
equipment.message_subscribe_users(user_ids=user_ids)
return equipment
@api.multi
def write(self, vals):
user_ids = []
# subscribe employee or department manager when equipment assign to employee or department.
if vals.get('employee_id'):
user_id = self.env['hr.employee'].browse(vals['employee_id'])['user_id']
if user_id:
user_ids.append(user_id.id)
if vals.get('department_id'):
department = self.env['hr.department'].browse(vals['department_id'])
if department and department.manager_id and department.manager_id.user_id:
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)
@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)
class HrEquipmentRequest(models.Model):
_inherit = 'hr.equipment.request'
@api.returns('self')
def _default_employee_get(self):
return self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
employee_id = fields.Many2one('hr.employee', string='Employee', default=_default_employee_get)
department_id = fields.Many2one('hr.department', string='Department')
@api.onchange('employee_id', 'department_id')
def onchange_department_or_employee_id(self):
domain = []
if self.department_id:
domain = [('department_id', '=', self.department_id.id)]
if self.employee_id and self.department_id:
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)
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)
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)
@api.model
def message_new(self, msg, custom_values=None):
""" Overrides mail_thread message_new that is called by the mailgateway
through message_process.
This override updates the document according to the email.
"""
if custom_values is None:
custom_values = {}
email = tools.email_split(msg.get('from')) and tools.email_split(msg.get('from'))[0] or False
user = self.env['res.users'].search([('login', '=', email)], limit=1)
if user:
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)
@@ -0,0 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<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>
<field name="inherit_id" ref="maintenance.hr_equipment_request_view_search"/>
<field name="arch" type="xml">
<xpath expr="field[@name='user_id']" position="after">
<field name="employee_id"/>
</xpath>
<xpath expr="//filter[@name='my_requests']" position="replace">
<filter string="My Requests" name="my_requests" domain="['|', ('employee_id.user_id', '=', uid), ('department_id.manager_id.user_id', '=', uid)]"/>
</xpath>
<xpath expr="//filter[@name='created_by']" position="replace">
<filter string='Created By' name='created_by' domain="[]" context="{'group_by': 'employee_id'}"/>
</xpath>
</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>
<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">
<field name="employee_id" string="Created By"/>
</xpath>
</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>
<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">
<span t-if="record.employee_id.raw_value"><field name="employee_id"/><br/></span>
<span t-if="record.department_id.raw_value"><field name="department_id"/><br/></span>
</xpath>
</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>
<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">
<field name="employee_id"/>
</xpath>
</field>
</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>
<field name="inherit_id" ref="maintenance.hr_equipment_view_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='owner_user_id']" position="replace">
<field name="equipment_assign_to" widget="radio"/>
<field name="employee_id" string="Employee" attrs="{'invisible': ['|', ('equipment_assign_to', '=', 'department'), ('equipment_assign_to', '=', False)]}"/>
<field name="department_id" string="Department" attrs="{'invisible': ['|', ('equipment_assign_to', '=', 'employee'), ('equipment_assign_to', '=', False)]}"/>
</xpath>
</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>
<field name="inherit_id" ref="maintenance.hr_equipment_view_kanban"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='user_id']" position="after">
<field name="employee_id"/>
<field name="department_id"/>
</xpath>
<xpath expr="//img[@t-att-title='record.owner_user_id.value']" position='replace'>
<img t-att-src="kanban_image('hr.employee', 'image_small', record.employee_id.raw_value)" t-att-title="record.employee_id.value" width="27" height="27" class="oe_kanban_avatar"/>
</xpath>
</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>
<field name="inherit_id" ref="maintenance.hr_equipment_view_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='owner_user_id']" position="replace">
<field name="employee_id" string="Employee"/>
<field name="department_id" string="Department"/>
</xpath>
</field>
</record>
</odoo>
+1 -1
View File
@@ -7,7 +7,7 @@
'category': 'Human Resources',
'description': """
Track employees' equipment and manage maintenance requests.""",
'depends': ['hr'],
'depends': ['mail'],
'summary': 'Equipments, Assets, Internal Hardware, Allocation Tracking',
'data': [
'security/maintenance.xml',
+12 -12
View File
@@ -17,7 +17,7 @@
<record id="hr_equipment_monitor1" model="hr.equipment">
<field name="name">Samsung Monitor 15"</field>
<field name="category_id" ref="hr_equipment_monitor"/>
<field name="employee_id" ref="hr.employee_al"/>
<field name="owner_user_id" ref="base.user_root"/>
<field name="user_id" ref="base.user_root"/>
<field name="assign_date" eval="time.strftime('%Y-%m-10')"/>
<field name="serial_no">MT/122/11112222</field>
@@ -26,7 +26,7 @@
<record id="hr_equipment_monitor4" model="hr.equipment">
<field name="name">Samsung Monitor 15"</field>
<field name="category_id" ref="hr_equipment_monitor"/>
<field name="employee_id" ref="hr.employee_stw"/>
<field name="owner_user_id" ref="base.user_root"/>
<field name="user_id" ref="base.user_root"/>
<field name="assign_date" eval="time.strftime('%Y-01-01')"/>
<field name="serial_no">MT/125/22778837</field>
@@ -35,7 +35,7 @@
<record id="hr_equipment_monitor6" model="hr.equipment">
<field name="name">Samsung Monitor 15"</field>
<field name="category_id" ref="hr_equipment_monitor"/>
<field name="employee_id" ref="hr.employee_qdp"/>
<field name="owner_user_id" ref="base.user_demo"/>
<field name="user_id" ref="base.user_demo"/>
<field name="assign_date" eval="time.strftime('%Y-02-01')"/>
<field name="serial_no">MT/127/18291018</field>
@@ -45,7 +45,7 @@
<record id="hr_equipment_computer3" model="hr.equipment">
<field name="name">Acer Laptop</field>
<field name="category_id" ref="hr_equipment_computer"/>
<field name="employee_id" ref="hr.employee_jve"/>
<field name="owner_user_id" ref="base.user_demo"/>
<field name="user_id" ref="base.user_root"/>
<field name="assign_date" eval="time.strftime('%Y-03-08')"/>
<field name="serial_no">LP/203/19281928</field>
@@ -54,7 +54,7 @@
<record id="hr_equipment_computer5" model="hr.equipment">
<field name="name">Acer Laptop</field>
<field name="category_id" ref="hr_equipment_computer"/>
<field name="employee_id" ref="hr.employee_jgo"/>
<field name="owner_user_id" ref="base.user_root"/>
<field name="user_id" ref="base.user_demo"/>
<field name="assign_date" eval="time.strftime('%Y-04-08')"/>
<field name="serial_no">LP/205/12928291</field>
@@ -63,7 +63,7 @@
<record id="hr_equipment_computer9" model="hr.equipment">
<field name="name">HP Laptop</field>
<field name="category_id" ref="hr_equipment_computer"/>
<field name="employee_id" ref="hr.employee_vad"/>
<field name="owner_user_id" ref="base.user_root"/>
<field name="user_id" ref="base.user_demo"/>
<field name="assign_date" eval="time.strftime('%Y-%m-11')"/>
<field name="serial_no">LP/303/28292090</field>
@@ -72,7 +72,7 @@
<record id="hr_equipment_computer11" model="hr.equipment">
<field name="name">HP Laptop</field>
<field name="category_id" ref="hr_equipment_computer"/>
<field name="employee_id" ref="hr.employee_jth"/>
<field name="owner_user_id" ref="base.user_demo"/>
<field name="user_id" ref="base.user_demo"/>
<field name="assign_date" eval="time.strftime('%Y-05-01')"/>
<field name="serial_no">LP/305/17281718</field>
@@ -89,7 +89,7 @@
<record id="m_request_3" model="hr.equipment.request">
<field name="name">Resolution is bad</field>
<field name="user_id" ref="base.user_demo"/>
<field name="employee_id" ref="hr.employee_qdp"/>
<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="color">7</field>
@@ -98,7 +98,7 @@
<record id="m_request_4" model="hr.equipment.request">
<field name="name">Some keys are not working</field>
<field name="user_id" ref="base.user_root"/>
<field name="employee_id" ref="hr.employee_qdp"/>
<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="stage_id" ref="stage_0"/>
@@ -106,7 +106,7 @@
<record id="m_request_6" model="hr.equipment.request">
<field name="name">Motherboard failed</field>
<field name="user_id" ref="base.user_demo"/>
<field name="employee_id" ref="hr.employee_jgo"/>
<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="stage_id" ref="stage_4"/>
@@ -114,7 +114,7 @@
<record id="m_request_7" model="hr.equipment.request">
<field name="name">Battery drains fast</field>
<field name="user_id" ref="base.user_demo"/>
<field name="employee_id" ref="hr.employee_vad"/>
<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="stage_id" ref="stage_1"/>
@@ -122,7 +122,7 @@
<record id="m_request_8" model="hr.equipment.request">
<field name="name">Touchpad not working</field>
<field name="user_id" ref="base.user_demo"/>
<field name="employee_id" ref="hr.employee_jth"/>
<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="stage_id" ref="stage_1"/>
+13 -82
View File
@@ -81,7 +81,7 @@ class HrEquipment(models.Model):
@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):
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)
@@ -108,8 +108,7 @@ class HrEquipment(models.Model):
name = fields.Char('Asset Name', required=True, translate=True)
active = fields.Boolean(default=True)
user_id = fields.Many2one('res.users', string='Technician', track_visibility='onchange')
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')
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')
partner_id = fields.Many2one('res.partner', string='Vendor', domain="[('supplier', '=', 1)]")
partner_ref = fields.Char('Vendor Reference')
@@ -122,11 +121,6 @@ class HrEquipment(models.Model):
warranty = fields.Date('Warranty')
color = fields.Integer('Color Index')
scrap_date = fields.Date('Scrap Date')
equipment_assign_to = fields.Selection(
[('department', 'Department'), ('employee', 'Employee')],
string='Used By',
required=True,
default='employee')
maintenance_ids = fields.One2many('hr.equipment.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)
@@ -137,15 +131,6 @@ class HrEquipment(models.Model):
self.maintenance_count = len(self.maintenance_ids)
self.maintenance_open_count = len(self.maintenance_ids.filtered(lambda x: not x.stage_id.done))
@api.onchange('equipment_assign_to')
def _onchange_equipment_assign_to(self):
if self.equipment_assign_to == 'employee':
self.department_id = False
if self.equipment_assign_to == 'department':
self.employee_id = False
self.assign_date = fields.Date.context_today(self)
@api.onchange('category_id')
def _onchange_category_id(self):
self.user_id = self.category_id.user_id
@@ -157,30 +142,14 @@ class HrEquipment(models.Model):
@api.model
def create(self, vals):
equipment = super(HrEquipment, 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:
user_ids.append(equipment.employee_id.user_id.id)
if equipment.department_id and equipment.department_id.manager_id and equipment.department_id.manager_id.user_id:
user_ids.append(equipment.department_id.manager_id.user_id.id)
if user_ids:
equipment.message_subscribe_users(user_ids=user_ids)
if equipment.owner_user_id:
equipment.message_subscribe_users(user_ids=equipment.owner_user_id.id)
return equipment
@api.multi
def write(self, vals):
user_ids = []
# subscribe employee or department manager when equipment assign to employee or department.
if vals.get('employee_id'):
user_id = self.env['hr.employee'].browse(vals['employee_id'])['user_id']
if user_id:
user_ids.append(user_id.id)
if vals.get('department_id'):
department = self.env['hr.department'].browse(vals['department_id'])
if department and department.manager_id and department.manager_id.user_id:
user_ids.append(department.manager_id.user_id.id)
if user_ids:
self.message_subscribe_users(user_ids=user_ids)
if vals.get('owner_user_id'):
self.message_subscribe_users(user_ids=[vals['owner_user_id']])
return super(HrEquipment, self).write(vals)
@api.multi
@@ -215,10 +184,6 @@ class HrEquipmentRequest(models.Model):
_description = 'Maintenance Requests'
_order = "id desc"
@api.returns('self')
def _default_employee_get(self):
return self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
@api.returns('self')
def _default_stage(self):
return self.env['hr.equipment.stage'].search([], limit=1)
@@ -235,8 +200,7 @@ class HrEquipmentRequest(models.Model):
name = fields.Char('Subjects', required=True)
description = fields.Text('Description')
request_date = fields.Date('Request Date', track_visibility='onchange', default=fields.Date.context_today)
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('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')
@@ -248,7 +212,6 @@ class HrEquipmentRequest(models.Model):
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.")
@api.multi
def archive_equipment_request(self):
self.write({'active': False})
@@ -259,20 +222,6 @@ class HrEquipmentRequest(models.Model):
first_stage_obj = self.env['hr.equipment.stage'].search([], order="sequence asc", limit=1)
self.write({'active': True, 'stage_id': first_stage_obj.id})
@api.onchange('employee_id', 'department_id')
def onchange_department_or_employee_id(self):
domain = []
if self.department_id:
domain = [('department_id', '=', self.department_id.id)]
if self.employee_id and self.department_id:
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)
if len(equipment) == 1:
self.equipment_id = equipment
return {'domain': {'equipment_id': domain}}
@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
@@ -287,10 +236,10 @@ class HrEquipmentRequest(models.Model):
def create(self, vals):
# context: no_log, because subtype already handle this
self = self.with_context(mail_create_nolog=True)
result = super(HrEquipmentRequest, self).create(vals)
if result.employee_id.user_id:
result.message_subscribe_users(user_ids=[result.employee_id.user_id.id])
return result
request = super(HrEquipmentRequest, self).create(vals)
if request.owner_user_id:
request.message_subscribe_users(user_ids=[request.owner_user_id.id])
return request
@api.multi
def write(self, vals):
@@ -298,10 +247,8 @@ class HrEquipmentRequest(models.Model):
# the stage (stage_id) of the Maintenance Request changes.
if vals and 'kanban_state' not in vals and 'stage_id' in vals:
vals['kanban_state'] = 'normal'
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])
if vals.get('owner_user_id'):
self.message_subscribe_users(user_ids=[vals['owner_user_id']])
return super(HrEquipmentRequest, self).write(vals)
@api.multi
@@ -330,19 +277,3 @@ class HrEquipmentRequest(models.Model):
_group_by_full = {
'stage_id': _read_group_stage_ids
}
@api.model
def message_new(self, msg, custom_values=None):
""" Overrides mail_thread message_new that is called by the mailgateway
through message_process.
This override updates the document according to the email.
"""
if custom_values is None:
custom_values = {}
email = tools.email_split(msg.get('from')) and tools.email_split(msg.get('from'))[0] or False
user = self.env['res.users'].search([('login', '=', email)], limit=1)
if user:
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)
+20 -25
View File
@@ -11,10 +11,10 @@
<field name="category_id"/>
<field name="user_id"/>
<field name="equipment_id"/>
<field name="employee_id"/>
<field name="owner_user_id"/>
<field name="stage_id"/>
<separator/>
<filter string="My Requests" domain="['|', ('employee_id.user_id', '=', uid), ('department_id.manager_id.user_id', '=', uid)]"/>
<filter string="My Requests" name="my_requests" domain="[('owner_user_id', '=', uid)]"/>
<separator/>
<filter string="Unread Messages" name="message_needaction" domain="[('message_needaction','=',True)]"/>
<separator/>
@@ -23,7 +23,7 @@
<filter string='Users' domain="[]" context="{'group_by': 'user_id'}"/>
<filter string='Category' domain="[]" context="{'group_by' : 'category_id'}"/>
<filter string='Stages' domain="[]" context="{'group_by' : 'stage_id'}"/>
<filter string='Employee' domain="[]" context="{'group_by': 'employee_id'}"/>
<filter string='Created By' name='created_by' domain="[]" context="{'group_by': 'owner_user_id'}"/>
</group>
</search>
</field>
@@ -54,7 +54,7 @@
</div>
<group>
<group>
<field name="employee_id" string="Sender"/>
<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="request_date" groups="base.group_no_one"/>
@@ -83,7 +83,9 @@
<field name="stage_id"/>
<field name="color"/>
<field name="priority"/>
<field name="equipment_id"/>
<field name="user_id"/>
<field name="owner_user_id"/>
<field name="category_id"/>
<field name="kanban_state"/>
<field name="message_needaction_counter"/>
@@ -110,8 +112,7 @@
<div class="oe_kanban_content" tooltip="kanban-tooltip">
<div>
<b><field name="name"/></b> <br/>
<span t-if="record.employee_id.raw_value"><field name="employee_id"/><br/></span>
<span t-if="record.department_id.raw_value"><field name="department_id"/><br/></span>
<span name="owner_user_id" t-if="record.owner_user_id.raw_value"><field name="owner_user_id"/><br/></span>
<span class="oe_grey" t-if="record.equipment_id.raw_value"><field name="equipment_id"/><br/></span>
</div>
<div class="oe_kanban_footer_left" style="margin-top:2px;">
@@ -121,7 +122,7 @@
<span t-if="record.category_id.raw_value"><field name="category_id"/></span>
</div>
<div class="oe_kanban_bottom_right">
<img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
<img t-att-src="kanban_image('res.users', 'image_small', record.owner_user_id.raw_value)" t-att-title="record.owner_user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
<div class="pull-left" groups="base.group_user">
<field name="kanban_state" widget="kanban_state_selection"/>
<field name="priority" widget="priority"/>
@@ -145,7 +146,7 @@
<field name="name"/>
<field name="active" invisible="1"/>
<field name="request_date" groups="base.group_no_one"/>
<field name="employee_id"/>
<field name="owner_user_id"/>
<field name="user_id"/>
<field name="category_id" groups="base.group_hr_manager"/>
<field name="stage_id"/>
@@ -226,9 +227,7 @@
</div>
<group>
<group>
<field name="equipment_assign_to" widget="radio"/>
<field name="employee_id" string="Employee" attrs="{'invisible': ['|', ('equipment_assign_to', '=', 'department'), ('equipment_assign_to', '=', False)]}"/>
<field name="department_id" string="Department" attrs="{'invisible': ['|', ('equipment_assign_to', '=', 'employee'), ('equipment_assign_to', '=', False)]}"/>
<field name="owner_user_id" string="Owner"/>
</group>
<group>
<field name="user_id"/>
@@ -271,6 +270,7 @@
<field name="name"/>
<field name="color"/>
<field name="user_id"/>
<field name="owner_user_id"/>
<field name="category_id"/>
<field name="serial_no"/>
<field name="model"/>
@@ -300,12 +300,11 @@
<div><b><field name="name"/><span t-if="record.model.raw_value"> (<field name="model"/>)</span></b></div>
<div class="mt4">
<div t-if="record.serial_no.raw_value"><field name="serial_no"/></div>
<div t-if="!record.employee_id.raw_value and !record.department_id.raw_value">Unassigned</div>
<div t-if="record.employee_id.raw_value"><field name="employee_id"/></div>
<div t-if="record.department_id.raw_value"><field name="department_id"/></div>
<div t-if="!record.owner_user_id.raw_value">Unassigned</div>
<div t-if="record.owner_user_id.raw_value"><field name="owner_user_id"/></div>
</div>
<div class="oe_kanban_bottom_right">
<img t-att-src="kanban_image('hr.employee', 'image_small', record.employee_id.raw_value)" t-att-title="record.employee_id.value" width="27" height="27" class="oe_kanban_avatar"/>
<img t-att-src="kanban_image('res.users', 'image_small', record.owner_user_id.raw_value)" t-att-title="record.owner_user_id.value" width="27" height="27" class="oe_kanban_avatar"/>
</div>
<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
@@ -327,8 +326,7 @@
<field name="message_needaction" invisible="1"/>
<field name="name"/>
<field name="active" invisible="1"/>
<field name="employee_id" string="Employee"/>
<field name="department_id" string="Department"/>
<field name="owner_user_id" string="Owner"/>
<field name="assign_date" groups="base.group_no_one"/>
<field name="serial_no"/>
<field name="user_id"/>
@@ -345,14 +343,13 @@
<search string="Search">
<field name="name" filter_domain="['|','|','|',('name','ilike',self),('model','ilike',self),('serial_no','ilike',self),('partner_ref', 'ilike', self)]"/>
<field name="category_id"/>
<field name="employee_id"/>
<field name="department_id"/>
<field name="owner_user_id"/>
<filter string="Under Maintenance" domain="[('maintenance_open_count', '&gt;', 0)]"/>
<separator/>
<filter string="Assigned" domain="['|', ('employee_id', '!=', False), ('department_id', '!=', False)]"/>
<filter string="Available" domain="[('employee_id', '=', False), ('department_id', '=', False)]"/>
<filter string="Assigned" name="assigned" domain="[('owner_user_id', '!=', False)]"/>
<filter string="Available" name="available" domain="[('owner_user_id', '=', False)]"/>
<separator/>
<filter string="My Equipments" domain="[('employee_id.user_id', '=', uid)]"/>
<filter string="My Equipments" name="my" domain="[('owner_user_id', '=', uid)]"/>
<separator/>
<filter string="Unread Messages" name="message_needaction" domain="[('message_needaction','=',True)]"/>
<separator/>
@@ -360,9 +357,7 @@
<group expand='0' string='Group by...'>
<filter string='Users' domain="[]" context="{'group_by': 'user_id'}"/>
<filter string='Category' domain="[]" context="{'group_by': 'category_id'}"/>
<filter string='Assigned to' help="Assigned to Employees and Departments" domain="[]" context="{'group_by': 'equipment_assign_to'}"/>
<filter string='Department' help="Assigned to Departments" domain="[]" context="{'group_by': 'department_id'}"/>
<filter string='Employee' help="Assigned to Employees" domain="[]" context="{'group_by': 'employee_id'}"/>
<filter string='Owner' domain="[]" context="{'group_by': 'owner_user_id'}"/>
<filter string='Vendor' domain="[]" context="{'group_by': 'partner_id'}"/>
</group>
</search>