diff --git a/verdigado_attendance/__manifest__.py b/verdigado_attendance/__manifest__.py index 1e63826..6182cd5 100644 --- a/verdigado_attendance/__manifest__.py +++ b/verdigado_attendance/__manifest__.py @@ -17,6 +17,7 @@ "hr_attendance_autoclose", "hr_attendance_break", "hr_attendance_break_autoclose", + "hr_attendance_missing_days", "hr_holidays_attendance", "l10n_de_holidays", "hr_holidays_public_overtime", @@ -26,6 +27,8 @@ "data": [ "data/base_ical.xml", "data/hr_leave_type.xml", + "data/ir_cron.xml", + "data/res_company.xml", "data/res.lang.csv", "security/verdigado_attendance.xml", "security/ir.model.access.csv", diff --git a/verdigado_attendance/data/ir_cron.xml b/verdigado_attendance/data/ir_cron.xml new file mode 100644 index 0000000..ecc6c77 --- /dev/null +++ b/verdigado_attendance/data/ir_cron.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/verdigado_attendance/data/res_company.xml b/verdigado_attendance/data/res_company.xml new file mode 100644 index 0000000..61f1bfb --- /dev/null +++ b/verdigado_attendance/data/res_company.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/verdigado_attendance/migrations/15.0.1.0.1/post-fix-hr_attendance_missing_days-config.py b/verdigado_attendance/migrations/15.0.1.0.1/post-fix-hr_attendance_missing_days-config.py new file mode 100644 index 0000000..a6d6067 --- /dev/null +++ b/verdigado_attendance/migrations/15.0.1.0.1/post-fix-hr_attendance_missing_days-config.py @@ -0,0 +1,18 @@ +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version=None): + """Force load hr_attendance_missing_days' configuration""" + openupgrade.load_data( + env.cr, + "verdigado_attendance", + "data/ir_cron.xml", + ) + openupgrade.load_data( + env.cr, + "verdigado_attendance", + "data/res_company.xml", + ) + # and recreate possibly missing overtime + env["hr.attendance"].search([])._update_overtime() diff --git a/verdigado_attendance/models/hr_attendance.py b/verdigado_attendance/models/hr_attendance.py index 3b6c28b..3c391ac 100644 --- a/verdigado_attendance/models/hr_attendance.py +++ b/verdigado_attendance/models/hr_attendance.py @@ -10,3 +10,28 @@ class HrAttendance(models.Model): check_in = DatetimeWithoutSeconds() check_out = DatetimeWithoutSeconds() + + def _update_overtime(self, employee_attendance_dates=None): + """Recreate missing overtime records""" + result = super()._update_overtime( + employee_attendance_dates=employee_attendance_dates + ) + if employee_attendance_dates is None: + employee_attendance_dates = self._get_attendances_dates() + missing_vals = [] + for employee, attendance_dates in employee_attendance_dates.items(): + dates = [attendance_date for _dummy, attendance_date in attendance_dates] + existing_overtime = self.env["hr.attendance.overtime"].search( + [ + ("employee_id", "=", employee.id), + ("company_id", "=", self.env.company.id), + ("date", "in", dates), + ] + ) + missing_vals += [ + {"employee_id": employee.id, "date": attendance_date} + for attendance_date in set(dates) + - set(existing_overtime.mapped("date")) + ] + self.env["hr.attendance.overtime"].create(missing_vals) + return result