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 @@
+