Merge pull request #4744 from expsa/ky_dev_odex25_hr

Leave Balance Report Notes*
This commit is contained in:
kchyounes19 2025-09-25 08:03:59 +01:00 committed by GitHub
commit 16e2cd9e88
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 27 additions and 20 deletions

View File

@ -2854,4 +2854,10 @@ msgstr "انتظار الموارد البشرية"
#. module: attendances
#: model:ir.model.fields,field_description:attendances.field_hr_attendance_transaction__justification
msgid "Justification"
msgstr "تم التبرير "
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 "أيام الغياب"

View File

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

View File

@ -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')

View File

@ -68,9 +68,10 @@
<field name="delay" string="Delay" widget="float_time" readonly="1" sum="Total:"/>
<field name="exist_hours" string="Early Exist" widget="float_time" readonly="1" sum="Total:"/>
<field name="total_permission_hours" string="Permission Hours" widget="float_time" readonly="1" sum="Total:" optional="show"/>
<field name="actual_absent_hours" string="Actual Absent Hours" widget="float_time" readonly="1" sum="Total:" />
<field name="actual_absent_hours" string="Actual Absent Hours" widget="float_time" optional="hide" readonly="1" sum="Total:" />
<field name="actual_absent_days" string="Actual Absent Days" optional="hide" readonly="1" sum="Total:"/>
<field name="missing_punch_hours" string="Missing Punch Hours" widget="float_time" readonly="1" sum="Total:" />
<field name="extra_break_duration" string="Extra Break Duration" widget="float_time" readonly="1" sum="Total:"/>
<field name="extra_break_duration" string="Extra Break Duration" optional="hide" widget="float_time" readonly="1" sum="Total:"/>
<field name="mission_by_days" string="Mission Hours" widget="float_time" readonly="1" sum="Total:" optional="show"/>
<field name="leave" string="Holiday Hours" widget="float_time" readonly="1" sum="Total:" optional="show"/>
<field name="absent" string="Absent Hours" widget="float_time" readonly="1" sum="Total:"/>
@ -91,6 +92,7 @@
<field name="exist_hours" string="Early Exist" widget="float_time"/>
<field name="total_permission_hours" string="Permission Hours" widget="float_time"/>
<field name="actual_absent_hours" string="Actual Absent Hours" widget="float_time"/>
<field name="actual_absent_days" string="Actual Absent Days"/>
<field name="missing_punch_hours" string="Missing Punch Hours" widget="float_time"/>
<field name="extra_break_duration" string="Extra Break Duration" widget="float_time"/>
@ -111,10 +113,8 @@
</page>
<page string="Departments">
<field name="department_ids" widget="many2many" attrs="{'readonly':[('state','!=','draft')]}"/>
</page>
<page string="Employees">
<page string="Employees">
<field name="selected_employee_ids"
widget="many2many"
domain="[('id', 'in', available_employee_ids)]"
@ -122,15 +122,7 @@
context="{'search_default_available_employees': True}"
options="{'no_create': True}"
/>
</page>
</page>
</notebook>
</sheet>