File: hr_employee_base.py

package info (click to toggle)
odoo 18.0.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 878,716 kB
  • sloc: javascript: 927,937; python: 685,670; xml: 388,524; sh: 1,033; sql: 415; makefile: 26
file content (28 lines) | stat: -rw-r--r-- 1,427 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models


class HrEmployeeBase(models.AbstractModel):
    _inherit = "hr.employee.base"

    @api.depends("user_id.im_status", "hr_presence_state_display")
    def _compute_presence_state(self):
        super()._compute_presence_state()
        company = self.env.company
        working_now_list = self._get_employee_working_now()
        for employee in self:
            if employee.manually_set_presence:
                employee.hr_presence_state = employee.hr_presence_state_display
                continue

            if not employee.company_id.hr_presence_control_email and not employee.company_id.hr_presence_control_ip:
                continue
            if company.hr_presence_last_compute_date and employee.id in working_now_list and \
                    company.hr_presence_last_compute_date.day == fields.Datetime.now().day and \
                    (employee.email_sent or employee.ip_connected or employee.manually_set_present):
                employee.hr_presence_state = 'present'
            elif employee.id in working_now_list and employee.is_absent and \
                not (employee.email_sent or employee.ip_connected or employee.manually_set_present):
                employee.hr_presence_state = 'absent'
            else:
                employee.hr_presence_state = 'out_of_working_hour'