protected void GenerateCompensationLeaveEntitlement(ArrayList empInfoList, DateTime PeriodFrom, DateTime PeriodTo) { foreach (EEmpPersonalInfo empInfo in empInfoList) { ArrayList compensationLeaveEntitleList = new ArrayList(); DBFilter attendanceRecordFilter = new DBFilter(); attendanceRecordFilter.add(new Match("EmpID", empInfo.EmpID)); attendanceRecordFilter.add(new Match("AttendanceRecordDate", "<=", PeriodTo)); attendanceRecordFilter.add(new Match("AttendanceRecordDate", ">=", PeriodFrom)); //attendanceRecordFilter.add(new Match("AttendanceRecordActualOvertimeMins", ">", 0)); attendanceRecordFilter.add("AttendanceRecordDate", true); ArrayList attendanceRecordList = EAttendanceRecord.db.select(dbConn, attendanceRecordFilter); EEmpPositionInfo currentEmpPosInfo = null; EAttendancePlan currentAttendancePlan = null; foreach (EAttendanceRecord attendanceRecord in attendanceRecordList) { if (currentEmpPosInfo != null) { if (currentEmpPosInfo.EmpPosEffFr <= attendanceRecord.AttendanceRecordDate && (currentEmpPosInfo.EmpPosEffTo >= attendanceRecord.AttendanceRecordDate || currentEmpPosInfo.EmpPosEffTo.Ticks.Equals(0))) { currentEmpPosInfo = null; currentAttendancePlan = null; } } if (currentEmpPosInfo == null) { currentEmpPosInfo = AppUtils.GetLastPositionInfo(dbConn, attendanceRecord.AttendanceRecordDate, empInfo.EmpID); EAttendancePlan attendancePlan = new EAttendancePlan(); attendancePlan.AttendancePlanID = currentEmpPosInfo.AttendancePlanID; if (EAttendancePlan.db.select(dbConn, attendancePlan)) { currentAttendancePlan = attendancePlan; } } if (currentAttendancePlan != null) { if (currentAttendancePlan.AttendancePlanOTGainAsCompensationLeaveEntitle && currentAttendancePlan.AttendancePlanOTMinsUnit > 0) { int actualMins = AppUtils.ApplyRoundingRule(attendanceRecord.AttendanceRecordActualOvertimeMins, currentAttendancePlan.AttendancePlanOTMinsRoundingRule, currentAttendancePlan.AttendancePlanOTMinsUnit); ECompensationLeaveEntitle compLeaveEntitle = new ECompensationLeaveEntitle(); compLeaveEntitle.EmpID = empInfo.EmpID; compLeaveEntitle.CompensationLeaveEntitleEffectiveDate = attendanceRecord.AttendanceRecordDate; compLeaveEntitle.CompensationLeaveEntitleClaimPeriodFrom = attendanceRecord.AttendanceRecordDate; compLeaveEntitle.CompensationLeaveEntitleClaimPeriodTo = attendanceRecord.AttendanceRecordDate; compLeaveEntitle.CompensationLeaveEntitleHoursClaim = actualMins / 60.0; compLeaveEntitle.CompensationLeaveEntitleIsAutoGenerated = true; compensationLeaveEntitleList.Add(compLeaveEntitle); } } } SubmitCompensationLeaveEntitlementList(compensationLeaveEntitleList); //HROne.LeaveCalc.LeaveBalanceCalc leaaveBalCal = new HROne.LeaveCalc.LeaveBalanceCalc(dbConn, empInfo.EmpID); //leaaveBalCal.RecalculateAfter(PeriodFrom , ELeaveType.COMPENSATION_LEAVE_TYPE(dbConn).LeaveTypeID); } }