[IMP] hr(_fleet): add private car plate

Not all employees have a company car. This commit adds a private license plate field on hr.employee.
The field allows the HR Officer and HR Administrator to search for emloyees based on their license plates.
If fleet and hr apps are installed, the search is based on both the company car and private car license plates.

task-2936873

closes odoo/odoo#101146

Related: odoo/enterprise#31796
Signed-off-by: Kevin Baptiste <kba@odoo.com>
This commit is contained in:
Philippe Wauthy
2022-09-26 16:55:11 +02:00
parent 66289abd5e
commit d5472861ef
6 changed files with 32 additions and 17 deletions
+1
View File
@@ -120,6 +120,7 @@ class HrEmployeePrivate(models.Model):
message_main_attachment_id = fields.Many2one(groups="hr.group_hr_user")
id_card = fields.Binary(string="ID Card Copy", groups="hr.group_hr_user")
driving_license = fields.Binary(string="Driving License", groups="hr.group_hr_user")
private_car_plate = fields.Char(groups="hr.group_hr_user", help="If you have more than one car, just separate the plates by a space.")
_sql_constraints = [
('barcode_uniq', 'unique (barcode)', "The Badge ID must be unique, this one is already assigned to another employee."),
+5 -7
View File
@@ -8,10 +8,12 @@
<field name="arch" type="xml">
<search string="Employees">
<field name="name" string="Employees" filter_domain="['|',('work_email','ilike',self),('name','ilike',self)]"/>
<field name="job_title" string="Job Title"/>
<field name="department_id" string="Department"/>
<searchpanel>
<field name="company_id" groups="base.group_multi_company" icon="fa-building" enable_counters="1"/>
<field name="department_id" icon="fa-users" enable_counters="1"/>
</searchpanel>
<field name="parent_id" string="Manager"/>
<field name="company_id" string="Company"/>
<field name="job_title"/>
<separator/>
<filter name="my_team" string="My Team" domain="[('parent_id.user_id', '=', uid)]"/>
<filter name="my_department" string="My Department" domain="[('member_of_department', '=', True)]"/>
@@ -22,10 +24,6 @@
<filter name="group_department" string="Department" domain="[]" context="{'group_by':'department_id'}"/>
<filter name="group_company" string="Company" domain="[]" context="{'group_by':'company_id'}"/>
</group>
<searchpanel>
<field name="company_id" groups="base.group_multi_company" icon="fa-building" enable_counters="1"/>
<field name="department_id" icon="fa-users" enable_counters="1"/>
</searchpanel>
</search>
</field>
</record>
+10 -6
View File
@@ -8,9 +8,14 @@
<field name="arch" type="xml">
<search string="Employees">
<field name="name" string="Employee" filter_domain="['|', ('work_email', 'ilike', self), ('name', 'ilike', self)]"/>
<field name="category_ids" groups="hr.group_hr_user"/>
<field name="job_id"/>
<searchpanel>
<field name="company_id" groups="base.group_multi_company" icon="fa-building" enable_counters="1"/>
<field name="department_id" icon="fa-users" enable_counters="1"/>
</searchpanel>
<field name="parent_id" string="Manager"/>
<field name="job_id"/>
<field name="category_ids" groups="hr.group_hr_user"/>
<field name="private_car_plate" />
<separator/>
<filter string="Unread Messages" name="message_needaction" domain="[('message_needaction', '=', True)]"/>
<separator/>
@@ -31,10 +36,6 @@
<filter name="group_job" string="Job" domain="[]" context="{'group_by': 'job_id'}"/>
<filter name="group_category_ids" string="Tags" domain="[]" context="{'group_by': 'category_ids'}"/>
</group>
<searchpanel>
<field name="company_id" groups="base.group_multi_company" icon="fa-building" enable_counters="1"/>
<field name="department_id" icon="fa-users" enable_counters="1"/>
</searchpanel>
</search>
</field>
</record>
@@ -147,6 +148,9 @@
<span>Km</span>
</div>
</group>
<group colspan="2">
<field name="private_car_plate" />
</group>
</group>
<group>
<group name="family_status" string="Family Status" colspan="2">
+13
View File
@@ -13,6 +13,7 @@ class Employee(models.Model):
'fleet.vehicle', 'driver_employee_id', string='Vehicles (private)',
groups="fleet.fleet_group_manager,hr.group_hr_user",
)
license_plate = fields.Char(compute="_compute_license_plate", search="_search_license_plate")
mobility_card = fields.Char(groups="fleet.fleet_group_user")
def action_open_employee_cars(self):
@@ -27,6 +28,18 @@ class Employee(models.Model):
"name": "History Employee Cars",
}
@api.depends('private_car_plate', 'car_ids.license_plate')
def _compute_license_plate(self):
for employee in self:
if employee.private_car_plate and employee.car_ids.license_plate:
employee.license_plate = ' '.join([employee.car_ids.license_plate, employee.private_car_plate])
else:
employee.license_plate = employee.car_ids.license_plate or employee.private_car_plate
def _search_license_plate(self, operator, value):
employees = self.env['hr.employee'].search(['|', ('car_ids.license_plate', operator, value), ('private_car_plate', operator, value)])
return [('id', 'in', employees.ids)]
def _compute_employee_cars_count(self):
rg = self.env['fleet.vehicle.assignation.log']._read_group([
('driver_employee_id', 'in', self.ids),
+2 -3
View File
@@ -28,9 +28,8 @@
<field name="model">hr.employee</field>
<field name="inherit_id" ref="hr.view_employee_filter"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='job_id']" position="after">
<field name="car_ids" string="License Plate"
filter_domain="[('car_ids.license_plate', 'ilike', self)]"/>
<xpath expr="//field[@name='private_car_plate']" position="replace">
<field name="license_plate"/>
</xpath>
</field>
</record>
+1 -1
View File
@@ -21,7 +21,7 @@
<field name="model">hr.employee.public</field>
<field name="inherit_id" ref="hr.hr_employee_public_view_search"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='company_id']" position="after">
<xpath expr="//field[@name='job_title']" position="after">
<field name="employee_skill_ids"/>
<field name="resume_line_ids" string="Resumé" filter_domain="['|', ('resume_line_ids.name', 'ilike', self), ('resume_line_ids.description', 'ilike', self)]"/>
</xpath>