33 lines
1.5 KiB
Python
33 lines
1.5 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||
|
|
||
|
from odoo import api, models
|
||
|
|
||
|
|
||
|
class HrEmployeeBase(models.AbstractModel):
|
||
|
_inherit = "hr.employee.base"
|
||
|
|
||
|
@api.depends("user_id.im_status", "attendance_state")
|
||
|
def _compute_presence_state(self):
|
||
|
"""
|
||
|
Override to include checkin/checkout in the presence state
|
||
|
Attendance has the second highest priority after login
|
||
|
"""
|
||
|
super()._compute_presence_state()
|
||
|
employees = self.filtered(lambda e: e.hr_presence_state != "present")
|
||
|
employee_to_check_working = self.filtered(lambda e: e.attendance_state == "checked_out"
|
||
|
and e.hr_presence_state == "to_define")
|
||
|
working_now_list = employee_to_check_working._get_employee_working_now()
|
||
|
for employee in employees:
|
||
|
if employee.attendance_state == "checked_out" and employee.hr_presence_state == "to_define" and \
|
||
|
employee.id in working_now_list:
|
||
|
employee.hr_presence_state = "absent"
|
||
|
elif employee.attendance_state == "checked_in":
|
||
|
employee.hr_presence_state = "present"
|
||
|
|
||
|
def _compute_presence_icon(self):
|
||
|
res = super()._compute_presence_icon()
|
||
|
# All employee must chek in or check out. Everybody must have an icon
|
||
|
self.filtered(lambda employee: not employee.show_hr_icon_display).show_hr_icon_display = True
|
||
|
return res
|