[FIX]hr_employee_stats_sheet:convert public holidays in employee tz
Some checks failed
pre-commit / pre-commit (pull_request) Failing after 1m31s
Some checks failed
pre-commit / pre-commit (pull_request) Failing after 1m31s
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
import logging
|
||||
import pytz
|
||||
|
||||
from odoo import api, fields, models
|
||||
from datetime import timedelta
|
||||
from pytz import utc
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -162,8 +164,41 @@ class HrEmployeeStats(models.Model):
|
||||
stat.is_public_holiday = False
|
||||
continue
|
||||
stat.dayofweek = int(stat.date.strftime("%u")) - 1
|
||||
stat.is_public_holiday = bool(stat.sheet_id.employee_id._get_public_holidays(stat.date, stat.date - timedelta(days=1)))
|
||||
stat.is_public_holiday = stat._is_public_holiday_accordig_to_employe_tz()
|
||||
|
||||
def _convert_to_employee_tz(self, date):
|
||||
"""Convert a UTC datetime to the employee's timezone datetime."""
|
||||
self.ensure_one()
|
||||
if not date:
|
||||
return None
|
||||
employee_tz = pytz.timezone(self.employee_id.tz or "UTC")
|
||||
if date.tzinfo is None:
|
||||
dt = pytz.utc.localize(date)
|
||||
return dt.astimezone(employee_tz)
|
||||
|
||||
def _is_public_holiday_accordig_to_employe_tz(self):
|
||||
self.ensure_one()
|
||||
if not self.date or not self.employee_id:
|
||||
return False
|
||||
#get public holidays for the employee
|
||||
public_holidays = self.employee_id._get_public_holidays(
|
||||
self.date, self.date
|
||||
)
|
||||
if not public_holidays:
|
||||
return False
|
||||
ph = public_holidays[0]
|
||||
# Convert public holiday to the employee timezone
|
||||
ph_datetime_from_tz = self._convert_to_employee_tz(ph.date_from)
|
||||
ph_datetime_to_tz = self._convert_to_employee_tz(ph.date_to)
|
||||
# Convert datetime to date
|
||||
ph_date_from = ph_datetime_from_tz.date()
|
||||
ph_date_to = ph_datetime_to_tz.date()
|
||||
# Check if the stat date falls within the public holiday range after conversion in employee tz
|
||||
if ph_date_from <= self.date <= ph_date_to:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def _get_gap_hours(self, total_hours, total_recovery_hours, total_leave_hours, total_planned_hours):
|
||||
self.ensure_one()
|
||||
balance = (
|
||||
|
||||
Reference in New Issue
Block a user