diff --git a/odex25_hr/attendances/i18n/ar_001.po b/odex25_hr/attendances/i18n/ar_001.po index cc104e791..e20c9ee91 100644 --- a/odex25_hr/attendances/i18n/ar_001.po +++ b/odex25_hr/attendances/i18n/ar_001.po @@ -171,6 +171,13 @@ msgstr "إستثناء الساعات " msgid "Select Employee" msgstr "إختيار الموظفين" + +#. module: attendances +#: model_terms:ir.ui.view,arch_db:attendances.employee_lateness_absense_overtime_form_view +msgid "Missing Punch Hours" +msgstr "نسيان البصمة" + + #. module: attendances #: code:addons/attendances/wizard/attendances_report_wiz.py:0 #: code:addons/odoo/STANDARD_MODULES/test/odex25_hr/odex25_hr/attendances/wizard/attendances_report_wiz.py:0 diff --git a/odex25_hr/attendances/models/hr_attendance_report.py b/odex25_hr/attendances/models/hr_attendance_report.py index 10049d528..a58e4807e 100644 --- a/odex25_hr/attendances/models/hr_attendance_report.py +++ b/odex25_hr/attendances/models/hr_attendance_report.py @@ -126,9 +126,18 @@ class HrAttendanceReport(models.Model): working_hours = office_hours + permission_hours + mission_hours + mission_by_days_hours + leave_hours missed_hours = planed_hours - working_hours + missing_punch_transactions = transactions.filtered( + lambda t: (t.sign_in and not t.sign_out) or (not t.sign_in and t.sign_out) + ) + + missing_punch_hours = sum([ + t.plan_hours - t.office_hours if t.plan_hours > t.office_hours else 0.0 + for t in missing_punch_transactions + ]) + if missed_hours < 0: missed_hours = 0 - 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} + 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} def generate_report(self): transaction_values = {} @@ -150,7 +159,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 = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + additional_hours,actual_absent_hours,total_permission_hours,missing_punch_hours = 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: @@ -173,6 +182,7 @@ class HrAttendanceReport(models.Model): hours_dict = self.calcualte_flexible_transaction(current_trans) actual_absent_hours = hours_dict.get('actual_absent_hours', 0.0) total_permission_hours =hours_dict.get('total_permission_hours', 0.0) + missing_punch_hours = hours_dict.get('missing_punch_hours', 0.0) total_mission += hours_dict['mission_by_days'] missed_hours += hours_dict['missed_hours'] leaves += hours_dict['leaves'] @@ -186,6 +196,7 @@ class HrAttendanceReport(models.Model): hours_dict = self.calcualte_flexible_transaction(current_trans) actual_absent_hours = hours_dict.get('actual_absent_hours', 0.0) total_permission_hours = hours_dict.get('total_permission_hours', 0.0) + missing_punch_hours = hours_dict.get('missing_punch_hours', 0.0) total_mission += hours_dict['mission_by_days'] missed_hours += hours_dict['missed_hours'] leaves += hours_dict['leaves'] @@ -211,6 +222,7 @@ class HrAttendanceReport(models.Model): 'dummy_field': missed_hours, 'actual_absent_hours': actual_absent_hours, 'total_permission_hours':total_permission_hours, + 'missing_punch_hours':missing_punch_hours + total_mission, 'total_amount': employee.contract_id.total_allowance, 'amount_per_hour': employee.contract_id.total_allowance / working_hours_flexible_days, 'total_deduction': missed_hours * ( @@ -224,7 +236,7 @@ class HrAttendanceReport(models.Model): ('state', '=', 'hr_manager')]) emp_trans = attendance_transaction.filtered(lambda t: t.public_holiday == False) for attendance in emp_trans: - lateness, early_exist, extra_break_duration, hours, additional_hours = 0.0, 0.0, 0.0, 0.0, 0.0 + 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 transaction_values['id'], transaction_values['name'] = attendance.employee_id.id, attendance.employee_id.name @@ -250,6 +262,9 @@ class HrAttendanceReport(models.Model): hours += attendance.official_hours extra_break_duration += attendance.break_duration additional_hours += attendance.additional_hours + if (attendance.sign_in and not attendance.sign_out) or ( + not attendance.sign_in and attendance.sign_out): + missing_punch_hours = attendance.plan_hours - attendance.official_hours if attendance.is_absent: actual_absent_hours +=attendance.plan_hours total_absent += attendance.plan_hours @@ -297,7 +312,8 @@ class HrAttendanceReport(models.Model): 'total_deduction': get_total_hours * get_amount_per_hour, 'additional_hours': additional_hours, 'actual_absent_hours':actual_absent_hours, - 'total_permission_hours':total_permission_hours + 'total_permission_hours':total_permission_hours, + 'missing_punch_hours':missing_punch_hours + total_absent } item_list.append(values) from itertools import groupby, tee @@ -308,9 +324,10 @@ 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 = tee(grp, 17) + grp1, grp2, grp3, grp4, grp5, grp6, grp7, grp8, grp9, grp10, grp11, grp12, grp13, grp14, grp15,grp16,grp17,grp18 = tee(grp, 18) temp_dict["actual_absent_hours"] = sum(item.get("actual_absent_hours", 0.0) for item in grp16) 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) temp_dict["delay"] = sum(item["delay"] for item in grp1) temp_dict["leave"] = sum(item1["leave"] for item1 in grp2) diff --git a/odex25_hr/attendances/models/hr_attendance_report_line.py b/odex25_hr/attendances/models/hr_attendance_report_line.py index aa2b1ec06..62b7781c6 100644 --- a/odex25_hr/attendances/models/hr_attendance_report_line.py +++ b/odex25_hr/attendances/models/hr_attendance_report_line.py @@ -21,6 +21,7 @@ class HrAttendanceReportLine(models.Model): total_deduction = fields.Float() # get from delay+leave+absent * amount_per_hour actual_absent_hours = fields.Float(string='Actual Absent Hours') total_permission_hours = fields.Float(string='Total Permission Hours') + missing_punch_hours = fields.Float(string='Total Punch Hours') additional_hours = fields.Float(string='Additional Hours', default=0) diff --git a/odex25_hr/attendances/views/hr_attendance_report.xml b/odex25_hr/attendances/views/hr_attendance_report.xml index bfab1b5f5..50ea227d3 100644 --- a/odex25_hr/attendances/views/hr_attendance_report.xml +++ b/odex25_hr/attendances/views/hr_attendance_report.xml @@ -69,7 +69,7 @@ - + @@ -91,6 +91,7 @@ +