[FIX] hr_payroll, resource: no attendances
Method `get_day_work_hours_count` can return 0 if no attendance is found in the calendar. Therefore, we must make sure to not divide by zero, otherwise, boom boom. Closes #22900 opw-1815095
This commit is contained in:
committed by
Nicolas Martinelli
parent
58eea6b3b3
commit
5ce76a0e70
@@ -190,7 +190,8 @@ class HrPayslip(models.Model):
|
||||
leave_time = (interval[1] - interval[0]).seconds / 3600
|
||||
current_leave_struct['number_of_hours'] += leave_time
|
||||
work_hours = contract.employee_id.get_day_work_hours_count(interval[0].date(), calendar=contract.resource_calendar_id)
|
||||
current_leave_struct['number_of_days'] += leave_time / work_hours
|
||||
if work_hours:
|
||||
current_leave_struct['number_of_days'] += leave_time / work_hours
|
||||
|
||||
# compute worked days
|
||||
work_data = contract.employee_id.get_work_days_data(day_from, day_to, calendar=contract.resource_calendar_id)
|
||||
|
||||
@@ -57,7 +57,8 @@ class ResourceMixin(models.AbstractModel):
|
||||
theoric_hours = self.get_day_work_hours_count(day_intervals[0][0].date(), calendar=calendar)
|
||||
work_time = sum((interval[1] - interval[0] for interval in day_intervals), timedelta())
|
||||
total_work_time += work_time
|
||||
days_count += float_utils.round((work_time.total_seconds() / 3600 / theoric_hours) * 4) / 4
|
||||
if theoric_hours:
|
||||
days_count += float_utils.round((work_time.total_seconds() / 3600 / theoric_hours) * 4) / 4
|
||||
return {
|
||||
'days': days_count,
|
||||
'hours': total_work_time.total_seconds() / 3600,
|
||||
@@ -80,7 +81,8 @@ class ResourceMixin(models.AbstractModel):
|
||||
for day_intervals in calendar._iter_leave_intervals(from_datetime, to_datetime, self.resource_id.id):
|
||||
theoric_hours = self.get_day_work_hours_count(day_intervals[0][0].date(), calendar=calendar)
|
||||
leave_time = sum((interval[1] - interval[0] for interval in day_intervals), timedelta())
|
||||
days_count += float_utils.round((leave_time.total_seconds() / 3600 / theoric_hours) * 4) / 4
|
||||
if theoric_hours:
|
||||
days_count += float_utils.round((leave_time.total_seconds() / 3600 / theoric_hours) * 4) / 4
|
||||
return days_count
|
||||
|
||||
def iter_leaves(self, from_datetime, to_datetime, calendar=None):
|
||||
|
||||
Reference in New Issue
Block a user