From 33758553df92762bf7aeed79427483e556254307 Mon Sep 17 00:00:00 2001 From: younes Date: Thu, 25 Sep 2025 08:01:57 +0100 Subject: [PATCH] Leave Balance Report Notes* --- odex25_hr/attendances/i18n/ar_001.po | 8 +++++++- .../models/hr_attendance_report.py | 18 ++++++++++++----- .../models/hr_attendance_report_line.py | 1 + .../views/hr_attendance_report.xml | 20 ++++++------------- 4 files changed, 27 insertions(+), 20 deletions(-) diff --git a/odex25_hr/attendances/i18n/ar_001.po b/odex25_hr/attendances/i18n/ar_001.po index cfd0e9828..4fc968dc1 100644 --- a/odex25_hr/attendances/i18n/ar_001.po +++ b/odex25_hr/attendances/i18n/ar_001.po @@ -2854,4 +2854,10 @@ msgstr "انتظار الموارد البشرية" #. module: attendances #: model:ir.model.fields,field_description:attendances.field_hr_attendance_transaction__justification msgid "Justification" -msgstr "تم التبرير " \ No newline at end of file +msgstr "تم التبرير " + +#. module: attendances +#: model:ir.model.fields,field_description:attendances.field_hr_attendance_report_line__actual_absent_days +#: model_terms:ir.ui.view,arch_db:attendances.employee_lateness_absense_overtime_form_view +msgid "Actual Absent Days" +msgstr "أيام الغياب" \ No newline at end of file diff --git a/odex25_hr/attendances/models/hr_attendance_report.py b/odex25_hr/attendances/models/hr_attendance_report.py index c248e1486..15c925ef7 100644 --- a/odex25_hr/attendances/models/hr_attendance_report.py +++ b/odex25_hr/attendances/models/hr_attendance_report.py @@ -120,6 +120,7 @@ class HrAttendanceReport(models.Model): lambda t: t.official_id != False and t.official_id.mission_type.duration_type == 'days').mapped('total_mission_hours')) absent_hours = sum(transactions.filtered(lambda t: t.is_absent).mapped('plan_hours')) + actual_absent_days = len(transactions.filtered(lambda t: t.is_absent)) total_permission = sum(transactions.filtered(lambda t: t.approve_personal_permission).mapped('total_permission_hours')) leave_hours = sum(transactions.filtered(lambda t: t.normal_leave == True).mapped('total_leave_hours')) @@ -155,7 +156,7 @@ class HrAttendanceReport(models.Model): break_hours = sum(transactions.filtered( lambda t: t.break_duration and t.break_duration > 0).mapped('break_duration')) - return {'leaves': leave_hours, 'missed_hours': missed_hours, 'mission_by_days': mission_by_days_hours, 'additional_hours': 0.0,'actual_absent_hours': absent_hours,'total_permission_hours':total_permission,'missing_punch_hours':missing_punch_hours,'total_lateness':lateness_hours,'total_early_exit':early_exit_hours,'total_break_duration':break_hours} + return {'leaves': leave_hours, 'missed_hours': missed_hours, 'mission_by_days': mission_by_days_hours, 'additional_hours': 0.0,'actual_absent_hours': absent_hours,'actual_absent_days':actual_absent_days,'total_permission_hours':total_permission,'missing_punch_hours':missing_punch_hours,'total_lateness':lateness_hours,'total_early_exit':early_exit_hours,'total_break_duration':break_hours} def generate_report(self): transaction_values = {} @@ -177,7 +178,7 @@ class HrAttendanceReport(models.Model): if self.calendar_ids: trans_domain += [('calendar_id', 'in', self.calendar_ids.ids)] for employee in emps: missed_hours, wasted_hours, absent, total_mission, leaves, hours_per_day, count, \ - additional_hours,actual_absent_hours,total_permission_hours,missing_punch_hours,lateness_hours,early_exit_hours,break_hours = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0 ,0,0 + additional_hours,actual_absent_days,actual_absent_hours,total_permission_hours,missing_punch_hours,lateness_hours,early_exit_hours,break_hours = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0 ,0,0,0 emp_trans_dom = trans_domain.copy() + [('employee_id', '=', employee.id)] attendance_transaction = transaction_pool.search(emp_trans_dom) if len(attendance_transaction.mapped('calendar_id')) > 1: @@ -199,6 +200,7 @@ class HrAttendanceReport(models.Model): current_trans = attendance_transaction.filtered(lambda t: df <= t.date <= dt) hours_dict = self.calcualte_flexible_transaction(current_trans) actual_absent_hours = hours_dict.get('actual_absent_hours', 0.0) + actual_absent_days = hours_dict.get('actual_absent_days', 0.0) total_permission_hours =hours_dict.get('total_permission_hours', 0.0) missing_punch_hours = hours_dict.get('missing_punch_hours', 0.0) break_hours = hours_dict.get('break_hours', 0.0) @@ -217,6 +219,7 @@ class HrAttendanceReport(models.Model): current_trans = attendance_transaction.filtered(lambda t: df <= t.date <= self.date_to) hours_dict = self.calcualte_flexible_transaction(current_trans) actual_absent_hours = hours_dict.get('actual_absent_hours', 0.0) + actual_absent_days = hours_dict.get('actual_absent_days', 0.0) break_hours = hours_dict.get('break_hours', 0.0) early_exit_hours = hours_dict.get('early_exit_hours', 0.0) lateness_hours = hours_dict.get('lateness_hours', 0.0) @@ -230,6 +233,7 @@ class HrAttendanceReport(models.Model): hours_dict = self.calcualte_flexible_transaction(attendance_transaction) missed_hours = hours_dict['missed_hours'] actual_absent_hours = hours_dict.get('actual_absent_hours', 0.0) + actual_absent_days = hours_dict.get('actual_absent_days', 0.0) break_hours = hours_dict.get('break_hours', 0.0) early_exit_hours = hours_dict.get('early_exit_hours', 0.0) lateness_hours = hours_dict.get('lateness_hours', 0.0) @@ -249,6 +253,7 @@ class HrAttendanceReport(models.Model): 'total_hours': missed_hours, 'dummy_field': missed_hours, 'actual_absent_hours': actual_absent_hours, + 'actual_absent_days': actual_absent_days, 'total_permission_hours':total_permission_hours, 'missing_punch_hours':missing_punch_hours , 'total_amount': employee.contract_id.total_allowance, @@ -262,7 +267,7 @@ class HrAttendanceReport(models.Model): for attendance in emp_trans: lateness, early_exist, extra_break_duration, hours, additional_hours,missing_punch_hours = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 total_permission, total_mission_by_hour, total_mission_by_day, total_leaves,total_permission_hours = 0.0, 0.0, 0.0, 0.0,0.0 - total_absent, lateness_hours_by_hr, get_total_amount,actual_absent_hours = 0.0, 0.0, 0.0,0.0 + total_absent, lateness_hours_by_hr, get_total_amount,actual_absent_hours,actual_absent_days = 0.0, 0.0, 0.0,0.0,0.0 transaction_values['id'], transaction_values['name'] = attendance.employee_id.id, attendance.employee_id.name total_hours_for_two_shifts = emp_calendar.shift_one_working_hours + \ emp_calendar.shift_two_working_hours @@ -316,6 +321,7 @@ class HrAttendanceReport(models.Model): if attendance.is_absent: actual_absent_hours +=attendance.plan_hours + actual_absent_days +=1 total_absent += attendance.plan_hours if attendance.calendar_id.is_full_day: total_absent += attendance.calendar_id.break_duration @@ -366,7 +372,8 @@ class HrAttendanceReport(models.Model): 'additional_hours': additional_hours, 'actual_absent_hours':actual_absent_hours, 'total_permission_hours':total_permission_hours, - 'missing_punch_hours':missing_punch_hours + 'missing_punch_hours':missing_punch_hours, + 'actual_absent_days': actual_absent_days, } item_list.append(values) from itertools import groupby, tee @@ -377,8 +384,9 @@ class HrAttendanceReport(models.Model): if not isinstance(key, tuple): key = [key] temp_dict = dict(zip(["employee_name"], key)) - grp1, grp2, grp3, grp4, grp5, grp6, grp7, grp8, grp9, grp10, grp11, grp12, grp13, grp14, grp15,grp16,grp17,grp18 = tee(grp, 18) + grp1, grp2, grp3, grp4, grp5, grp6, grp7, grp8, grp9, grp10, grp11, grp12, grp13, grp14, grp15,grp16,grp17,grp18,grp19 = tee(grp, 19) temp_dict["actual_absent_hours"] = sum(item.get("actual_absent_hours", 0.0) for item in grp16) + temp_dict["actual_absent_days"] = sum(item.get("actual_absent_days", 0.0) for item in grp19) temp_dict["total_permission_hours"] = sum(item.get("total_permission_hours", 0.0) for item in grp17) temp_dict["missing_punch_hours"] = sum(item.get("missing_punch_hours", 0.0) for item in grp18) diff --git a/odex25_hr/attendances/models/hr_attendance_report_line.py b/odex25_hr/attendances/models/hr_attendance_report_line.py index 68a658402..51641ca12 100644 --- a/odex25_hr/attendances/models/hr_attendance_report_line.py +++ b/odex25_hr/attendances/models/hr_attendance_report_line.py @@ -20,6 +20,7 @@ class HrAttendanceReportLine(models.Model): amount_per_hour = fields.Float() # get from total_amount / total_hours total_deduction = fields.Float() # get from delay+leave+absent * amount_per_hour actual_absent_hours = fields.Float(string='Actual Absent Hours') + actual_absent_days = fields.Float(string='Actual Absent Days') total_permission_hours = fields.Float(string='Total Permission Hours') missing_punch_hours = fields.Float(string='Total Punch Hours') diff --git a/odex25_hr/attendances/views/hr_attendance_report.xml b/odex25_hr/attendances/views/hr_attendance_report.xml index 4898cb534..7041684b8 100644 --- a/odex25_hr/attendances/views/hr_attendance_report.xml +++ b/odex25_hr/attendances/views/hr_attendance_report.xml @@ -68,9 +68,10 @@ - + + - + @@ -91,6 +92,7 @@ + @@ -111,10 +113,8 @@ - - - + - - - - - - - - - +