Leave Balance Report Notes*
This commit is contained in:
parent
60eab0a398
commit
33758553df
|
|
@ -2854,4 +2854,10 @@ msgstr "انتظار الموارد البشرية"
|
||||||
#. module: attendances
|
#. module: attendances
|
||||||
#: model:ir.model.fields,field_description:attendances.field_hr_attendance_transaction__justification
|
#: model:ir.model.fields,field_description:attendances.field_hr_attendance_transaction__justification
|
||||||
msgid "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 "أيام الغياب"
|
||||||
|
|
@ -120,6 +120,7 @@ class HrAttendanceReport(models.Model):
|
||||||
lambda t: t.official_id != False
|
lambda t: t.official_id != False
|
||||||
and t.official_id.mission_type.duration_type == 'days').mapped('total_mission_hours'))
|
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'))
|
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'))
|
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'))
|
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(
|
break_hours = sum(transactions.filtered(
|
||||||
lambda t: t.break_duration and t.break_duration > 0).mapped('break_duration'))
|
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):
|
def generate_report(self):
|
||||||
transaction_values = {}
|
transaction_values = {}
|
||||||
|
|
@ -177,7 +178,7 @@ class HrAttendanceReport(models.Model):
|
||||||
if self.calendar_ids: trans_domain += [('calendar_id', 'in', self.calendar_ids.ids)]
|
if self.calendar_ids: trans_domain += [('calendar_id', 'in', self.calendar_ids.ids)]
|
||||||
for employee in emps:
|
for employee in emps:
|
||||||
missed_hours, wasted_hours, absent, total_mission, leaves, hours_per_day, count, \
|
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)]
|
emp_trans_dom = trans_domain.copy() + [('employee_id', '=', employee.id)]
|
||||||
attendance_transaction = transaction_pool.search(emp_trans_dom)
|
attendance_transaction = transaction_pool.search(emp_trans_dom)
|
||||||
if len(attendance_transaction.mapped('calendar_id')) > 1:
|
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)
|
current_trans = attendance_transaction.filtered(lambda t: df <= t.date <= dt)
|
||||||
hours_dict = self.calcualte_flexible_transaction(current_trans)
|
hours_dict = self.calcualte_flexible_transaction(current_trans)
|
||||||
actual_absent_hours = hours_dict.get('actual_absent_hours', 0.0)
|
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)
|
total_permission_hours =hours_dict.get('total_permission_hours', 0.0)
|
||||||
missing_punch_hours = hours_dict.get('missing_punch_hours', 0.0)
|
missing_punch_hours = hours_dict.get('missing_punch_hours', 0.0)
|
||||||
break_hours = hours_dict.get('break_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)
|
current_trans = attendance_transaction.filtered(lambda t: df <= t.date <= self.date_to)
|
||||||
hours_dict = self.calcualte_flexible_transaction(current_trans)
|
hours_dict = self.calcualte_flexible_transaction(current_trans)
|
||||||
actual_absent_hours = hours_dict.get('actual_absent_hours', 0.0)
|
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)
|
break_hours = hours_dict.get('break_hours', 0.0)
|
||||||
early_exit_hours = hours_dict.get('early_exit_hours', 0.0)
|
early_exit_hours = hours_dict.get('early_exit_hours', 0.0)
|
||||||
lateness_hours = hours_dict.get('lateness_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)
|
hours_dict = self.calcualte_flexible_transaction(attendance_transaction)
|
||||||
missed_hours = hours_dict['missed_hours']
|
missed_hours = hours_dict['missed_hours']
|
||||||
actual_absent_hours = hours_dict.get('actual_absent_hours', 0.0)
|
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)
|
break_hours = hours_dict.get('break_hours', 0.0)
|
||||||
early_exit_hours = hours_dict.get('early_exit_hours', 0.0)
|
early_exit_hours = hours_dict.get('early_exit_hours', 0.0)
|
||||||
lateness_hours = hours_dict.get('lateness_hours', 0.0)
|
lateness_hours = hours_dict.get('lateness_hours', 0.0)
|
||||||
|
|
@ -249,6 +253,7 @@ class HrAttendanceReport(models.Model):
|
||||||
'total_hours': missed_hours,
|
'total_hours': missed_hours,
|
||||||
'dummy_field': missed_hours,
|
'dummy_field': missed_hours,
|
||||||
'actual_absent_hours': actual_absent_hours,
|
'actual_absent_hours': actual_absent_hours,
|
||||||
|
'actual_absent_days': actual_absent_days,
|
||||||
'total_permission_hours':total_permission_hours,
|
'total_permission_hours':total_permission_hours,
|
||||||
'missing_punch_hours':missing_punch_hours ,
|
'missing_punch_hours':missing_punch_hours ,
|
||||||
'total_amount': employee.contract_id.total_allowance,
|
'total_amount': employee.contract_id.total_allowance,
|
||||||
|
|
@ -262,7 +267,7 @@ class HrAttendanceReport(models.Model):
|
||||||
for attendance in emp_trans:
|
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
|
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_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
|
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 + \
|
total_hours_for_two_shifts = emp_calendar.shift_one_working_hours + \
|
||||||
emp_calendar.shift_two_working_hours
|
emp_calendar.shift_two_working_hours
|
||||||
|
|
@ -316,6 +321,7 @@ class HrAttendanceReport(models.Model):
|
||||||
|
|
||||||
if attendance.is_absent:
|
if attendance.is_absent:
|
||||||
actual_absent_hours +=attendance.plan_hours
|
actual_absent_hours +=attendance.plan_hours
|
||||||
|
actual_absent_days +=1
|
||||||
total_absent += attendance.plan_hours
|
total_absent += attendance.plan_hours
|
||||||
if attendance.calendar_id.is_full_day:
|
if attendance.calendar_id.is_full_day:
|
||||||
total_absent += attendance.calendar_id.break_duration
|
total_absent += attendance.calendar_id.break_duration
|
||||||
|
|
@ -366,7 +372,8 @@ class HrAttendanceReport(models.Model):
|
||||||
'additional_hours': additional_hours,
|
'additional_hours': additional_hours,
|
||||||
'actual_absent_hours':actual_absent_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
|
'missing_punch_hours':missing_punch_hours,
|
||||||
|
'actual_absent_days': actual_absent_days,
|
||||||
}
|
}
|
||||||
item_list.append(values)
|
item_list.append(values)
|
||||||
from itertools import groupby, tee
|
from itertools import groupby, tee
|
||||||
|
|
@ -377,8 +384,9 @@ class HrAttendanceReport(models.Model):
|
||||||
if not isinstance(key, tuple):
|
if not isinstance(key, tuple):
|
||||||
key = [key]
|
key = [key]
|
||||||
temp_dict = dict(zip(["employee_name"], 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_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["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["missing_punch_hours"] = sum(item.get("missing_punch_hours", 0.0) for item in grp18)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ class HrAttendanceReportLine(models.Model):
|
||||||
amount_per_hour = fields.Float() # get from total_amount / total_hours
|
amount_per_hour = fields.Float() # get from total_amount / total_hours
|
||||||
total_deduction = fields.Float() # get from delay+leave+absent * amount_per_hour
|
total_deduction = fields.Float() # get from delay+leave+absent * amount_per_hour
|
||||||
actual_absent_hours = fields.Float(string='Actual Absent Hours')
|
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')
|
total_permission_hours = fields.Float(string='Total Permission Hours')
|
||||||
missing_punch_hours = fields.Float(string='Total Punch Hours')
|
missing_punch_hours = fields.Float(string='Total Punch Hours')
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -68,9 +68,10 @@
|
||||||
<field name="delay" string="Delay" widget="float_time" readonly="1" sum="Total:"/>
|
<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="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="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="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="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="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:"/>
|
<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="exist_hours" string="Early Exist" widget="float_time"/>
|
||||||
<field name="total_permission_hours" string="Permission Hours" 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_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="missing_punch_hours" string="Missing Punch Hours" widget="float_time"/>
|
||||||
|
|
||||||
<field name="extra_break_duration" string="Extra Break Duration" widget="float_time"/>
|
<field name="extra_break_duration" string="Extra Break Duration" widget="float_time"/>
|
||||||
|
|
@ -111,10 +113,8 @@
|
||||||
</page>
|
</page>
|
||||||
<page string="Departments">
|
<page string="Departments">
|
||||||
<field name="department_ids" widget="many2many" attrs="{'readonly':[('state','!=','draft')]}"/>
|
<field name="department_ids" widget="many2many" attrs="{'readonly':[('state','!=','draft')]}"/>
|
||||||
|
|
||||||
</page>
|
</page>
|
||||||
<page string="Employees">
|
<page string="Employees">
|
||||||
|
|
||||||
<field name="selected_employee_ids"
|
<field name="selected_employee_ids"
|
||||||
widget="many2many"
|
widget="many2many"
|
||||||
domain="[('id', 'in', available_employee_ids)]"
|
domain="[('id', 'in', available_employee_ids)]"
|
||||||
|
|
@ -122,15 +122,7 @@
|
||||||
context="{'search_default_available_employees': True}"
|
context="{'search_default_available_employees': True}"
|
||||||
options="{'no_create': True}"
|
options="{'no_create': True}"
|
||||||
/>
|
/>
|
||||||
|
</page>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</page>
|
|
||||||
|
|
||||||
</notebook>
|
</notebook>
|
||||||
|
|
||||||
</sheet>
|
</sheet>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue