protected void btnSaveDelegate_Click(object sender, EventArgs e) { PageErrors errors = PageErrors.getErrors(db, Page.Master); errors.clear(); string[] strDelegateEmpNoList = txtDelegateEmpNoList.Text.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); ESSAuthorizationProcess authorizationProcess = new ESSAuthorizationProcess(dbConn); List <EEmpPersonalInfo> delegateEmpInfoList = new List <EEmpPersonalInfo>(); foreach (string delegateEmpNo in strDelegateEmpNoList) { EEmpPersonalInfo delegateEmpInfo = authorizationProcess.GetEmpInfo(delegateEmpNo); if (delegateEmpInfo == null) { errors.addError("Invalid Employee No: " + delegateEmpNo); } else { delegateEmpInfoList.Add(delegateEmpInfo); EEmpTermination empTerm = EEmpTermination.GetObjectByEmpID(dbConn, delegateEmpInfo.EmpID); if (empTerm != null) { if (empTerm.EmpTermLastDate < AppUtils.ServerDateTime().Date) { errors.addError("Employee " + delegateEmpNo + " is Terminated"); } } } } if (!errors.isEmpty()) { return; } DBFilter authorizerDBFilter = new DBFilter(); authorizerDBFilter.add(new Match("EmpID", CurID)); EAuthorizerDelegate.db.delete(dbConn, authorizerDBFilter); foreach (EEmpPersonalInfo delegateEmpInfo in delegateEmpInfoList) { EAuthorizerDelegate authorDelegate = new EAuthorizerDelegate(); authorDelegate.EmpID = CurID; authorDelegate.AuthorizerDelegateEmpID = delegateEmpInfo.EmpID; EAuthorizerDelegate.db.insert(dbConn, authorDelegate); } errors.addError("Delegate employee is submitted"); }
protected bool loadObject() { obj = new EEmpPersonalInfo(); obj.EmpID = CurID; // bool isNew = WebFormWorkers.loadKeys(db, obj, Request); if (!db.select(dbConn, obj)) { return(false); } Hashtable values = new Hashtable(); db.populate(obj, values); binding.toControl(values); if (obj.EmpProbaLastDate >= AppUtils.ServerDateTime().Date) { EmpProbaLastDate.ForeColor = System.Drawing.Color.Red; EmpProbaLastDate.Font.Bold = true; } EEmpTermination empTerm = EEmpTermination.GetObjectByEmpID(dbConn, obj.EmpID); if (empTerm == null) { EmpTermLastDate.Text = string.Empty; } else { EmpTermLastDate.Text = empTerm.EmpTermLastDate.ToString("yyyy-MM-dd"); EmpTermLastDate.ForeColor = System.Drawing.Color.Red; EmpTermLastDate.Font.Bold = true; } return(true); }
private static DataRow CreateWorkingSummaryTemplateRow(DatabaseConnection dbConn, DataTable dataTable, Hashtable hierarchyLevelHashTable, EEmpPersonalInfo empInfo, DateTime PeriodFrom, DateTime PeriodTo, EWorkHourPattern currentWorkHourPattern) { double restDayCount = 0; double statutoryHolidayCount = 0; double restDayTaken = 0; double statutoryHolidayTaken = 0; double workHourPatternWorkingDaysCount = 0; double workHourPatternLunchTimeCount = 0; double workHourPatternWorkingHourCount = 0; double totalWorkingDays = 0; double totalWorkingHours = 0; double totalLunchMins = 0; double totalWorkingHoursExpected = 0; double totalLateMins = 0; double totalEarlyLeaveMins = 0; double totalOvertimeMins = 0; double totalLeaveApplicationDayTaken = 0; EEmpTermination empTermination = EEmpTermination.GetObjectByEmpID(dbConn, empInfo.EmpID); bool hasStatutoryHolidayRosterCode = false; // Check if Roster Code List contains Statutory Holiday Roster Code ArrayList rosterCodeList = ERosterCode.db.select(dbConn, new DBFilter()); foreach (ERosterCode rosterCode in rosterCodeList) { if (rosterCode.RosterCodeType.Equals(ERosterCode.ROSTERTYPE_CODE_STATUTORYHOLIDAY)) { hasStatutoryHolidayRosterCode = true; break; } } if (currentWorkHourPattern != null) { for (DateTime asOfDate = PeriodFrom; asOfDate <= PeriodTo; asOfDate = asOfDate.AddDays(1)) { if (EStatutoryHoliday.IsHoliday(dbConn, asOfDate))// && currentWorkHourPattern.WorkHourPatternUseStatutoryHolidayTable) { statutoryHolidayCount++; } //rest day must be integer and rest within 24 hour restDayCount += (1 - currentWorkHourPattern.GetDefaultDayUnit(dbConn, asOfDate, false, false)); double workDayUnit = 0; double workHourUnit = 0; double LunchTimeUnit = 0; if (empInfo.EmpDateOfJoin <= asOfDate) { workDayUnit = currentWorkHourPattern.GetDefaultDayUnit(dbConn, asOfDate, false, false); LunchTimeUnit = currentWorkHourPattern.GetDefaultLunch(dbConn, asOfDate); workHourUnit = currentWorkHourPattern.GetDefaultWorkHour(dbConn, asOfDate); DBFilter leaveAppFilter = new DBFilter(); leaveAppFilter.add(new Match("EmpID", empInfo.EmpID)); leaveAppFilter.add(new Match("LeaveAppDateFrom", "<=", asOfDate)); leaveAppFilter.add(new Match("LeaveAppDateTo", ">=", asOfDate)); leaveAppFilter.add(new Match("LeaveAppNoPayProcess", false)); ArrayList leaveAppList = ELeaveApplication.db.select(dbConn, leaveAppFilter); foreach (ELeaveApplication leaveApp in leaveAppList) { if (leaveApp.LeaveAppDateFrom.Equals(leaveApp.LeaveAppDateTo)) { workDayUnit -= leaveApp.LeaveAppDays; double currentDayDefaultDayUnit = currentWorkHourPattern.GetDefaultDayUnit(dbConn, asOfDate, false, false); if (currentDayDefaultDayUnit * leaveApp.LeaveAppDays > 0) { workHourUnit -= currentWorkHourPattern.GetDefaultWorkHour(dbConn, asOfDate) / currentDayDefaultDayUnit * leaveApp.LeaveAppDays; } } else { workDayUnit = 0; workHourUnit = 0; LunchTimeUnit = 0; } } if (workDayUnit < 0) { workDayUnit = 0; } if (workHourUnit < 0) { workHourUnit = 0; } if (workDayUnit < 1) { LunchTimeUnit = 0; } if (empTermination != null) { if (empTermination.EmpTermLastDate < asOfDate) { workDayUnit = 0; workHourUnit = 0; LunchTimeUnit = 0; } } } workHourPatternWorkingDaysCount += workDayUnit; workHourPatternWorkingHourCount += workHourUnit; workHourPatternLunchTimeCount += LunchTimeUnit; } DBFilter leaveAppTakenFilter = new DBFilter(); leaveAppTakenFilter.add(new Match("EmpID", empInfo.EmpID)); leaveAppTakenFilter.add(new Match("LeaveAppDateFrom", "<=", PeriodTo)); leaveAppTakenFilter.add(new Match("LeaveAppDateTo", ">=", PeriodFrom)); leaveAppTakenFilter.add(new Match("LeaveAppNoPayProcess", false)); ArrayList leaveAppTakenList = ELeaveApplication.db.select(dbConn, leaveAppTakenFilter); foreach (ELeaveApplication leaveApp in leaveAppTakenList) { totalLeaveApplicationDayTaken += leaveApp.LeaveAppDays; } } DBFilter attendanceRecordFilter = new DBFilter(); attendanceRecordFilter.add(new Match("EmpID", empInfo.EmpID)); attendanceRecordFilter.add(new Match("AttendanceRecordDate", ">=", PeriodFrom)); attendanceRecordFilter.add(new Match("AttendanceRecordDate", "<=", PeriodTo)); attendanceRecordFilter.add("AttendanceRecordDate", true); ArrayList attendanceRecordList = EAttendanceRecord.db.select(dbConn, attendanceRecordFilter); foreach (EAttendanceRecord attendanceRecord in attendanceRecordList) { ERosterCode rosterCode = new ERosterCode(); rosterCode.RosterCodeID = attendanceRecord.RosterCodeID; if (ERosterCode.db.select(dbConn, rosterCode)) { if (rosterCode.RosterCodeType.Equals(ERosterCode.ROSTERTYPE_CODE_RESTDAY)) { restDayTaken++; } if (rosterCode.RosterCodeType.Equals(ERosterCode.ROSTERTYPE_CODE_STATUTORYHOLIDAY)) { statutoryHolidayTaken++; } } double workingHours = attendanceRecord.TotalWorkingHourTimeSpan(dbConn).TotalHours; if (workingHours <= 0) { workingHours = attendanceRecord.AttendanceRecordActualWorkingHour + Convert.ToDouble(attendanceRecord.AttendanceRecordActualEarlyLeaveMins - attendanceRecord.AttendanceRecordActualLateMins + attendanceRecord.AttendanceRecordActualOvertimeMins) / 60.0; } totalWorkingDays += attendanceRecord.AttendanceRecordActualWorkingDay; totalWorkingHours += workingHours; totalWorkingHoursExpected += attendanceRecord.AttendanceRecordActualWorkingHour; totalLateMins += attendanceRecord.AttendanceRecordActualLateMins; totalEarlyLeaveMins += attendanceRecord.AttendanceRecordActualEarlyLeaveMins; totalOvertimeMins += attendanceRecord.AttendanceRecordActualOvertimeMins; totalLunchMins += attendanceRecord.AttendanceRecordActualLunchTimeMins; } if (totalWorkingDays <= 0 && totalWorkingHours <= 0 && totalLunchMins <= 0 && empInfo.EmpDateOfJoin <= PeriodFrom) { totalWorkingDays = workHourPatternWorkingDaysCount; totalWorkingHours = workHourPatternWorkingHourCount; totalLunchMins = workHourPatternLunchTimeCount * 60; } DataRow row = dataTable.NewRow(); row[FIELD_EMP_NO] = empInfo.EmpNo; row["EnglishName"] = empInfo.EmpEngFullName; row["ChineseName"] = empInfo.EmpChiFullName; DBFilter empPosFilter = new DBFilter(); EEmpPositionInfo empPos = AppUtils.GetLastPositionInfo(dbConn, PeriodTo, empInfo.EmpID); if (empPos != null) { ECompany company = new ECompany(); company.CompanyID = empPos.CompanyID; if (ECompany.db.select(dbConn, company)) { row["Company"] = company.CompanyCode; } DBFilter empHierarchyFilter = new DBFilter(); empHierarchyFilter.add(new Match("EmpPosID", empPos.EmpPosID)); ArrayList empHierarchyList = EEmpHierarchy.db.select(dbConn, empHierarchyFilter); foreach (EEmpHierarchy empHierarchy in empHierarchyList) { EHierarchyLevel hierarchyLevel = (EHierarchyLevel)hierarchyLevelHashTable[empHierarchy.HLevelID]; if (hierarchyLevel != null) { EHierarchyElement hierarchyElement = new EHierarchyElement(); hierarchyElement.HElementID = empHierarchy.HElementID; if (EHierarchyElement.db.select(dbConn, hierarchyElement)) { row[hierarchyLevel.HLevelDesc] = hierarchyElement.HElementCode; } } } } row[FIELD_AS_OF_DATE] = PeriodTo; row[FIELD_REST_DAY_ENTITLED] = restDayCount - statutoryHolidayCount; if (hasStatutoryHolidayRosterCode) { row[FIELD_REST_DAY_TAKEN] = restDayTaken; } else { row[FIELD_REST_DAY_TAKEN] = restDayTaken > statutoryHolidayCount ? restDayTaken - statutoryHolidayCount : 0; } row[FIELD_TOTAL_WORKING_DAYS] = totalWorkingDays; row[FIELD_TOTAL_WORKING_HOURS] = totalWorkingHours; row[FIELD_TOTAL_LUNCH_HOURS] = totalLunchMins / 60.0; row[FIELD_EXTRA_TOTAL_STATUTORY_HOLIDAY] = statutoryHolidayCount; row[FIELD_EXTRA_TOTAL_LEAVE_APPLICATION_TAKEN] = totalLeaveApplicationDayTaken; row[FIELD_EXTRA_TOTAL_WORKING_HOURS_EXPECTED] = totalWorkingHoursExpected; row[FIELD_EXTRA_TOTAL_LATE_MINS] = totalLateMins; row[FIELD_EXTRA_TOTAL_EARLYLEAVE_MINS] = totalEarlyLeaveMins; row[FIELD_EXTRA_TOTAL_OVERTIME_MINS] = totalOvertimeMins; dataTable.Rows.Add(row); return(row); }
public static DataTable GenerateTemplate(DatabaseConnection dbConn, ArrayList EmpInfoList, DateTime PeriodFrom, DateTime PeriodTo) { DataTable tmpDataTable = new DataTable("WorkingSummary$"); tmpDataTable.Columns.Add(FIELD_EMP_NO, typeof(string)); tmpDataTable.Columns.Add("EnglishName", typeof(string)); tmpDataTable.Columns.Add("ChineseName", typeof(string)); tmpDataTable.Columns.Add("Company", typeof(string)); DBFilter hierarchyLevelFilter = new DBFilter(); Hashtable hierarchyLevelHashTable = new Hashtable(); hierarchyLevelFilter.add("HLevelSeqNo", true); ArrayList hierarchyLevelList = EHierarchyLevel.db.select(dbConn, hierarchyLevelFilter); foreach (EHierarchyLevel hlevel in hierarchyLevelList) { tmpDataTable.Columns.Add(hlevel.HLevelDesc, typeof(string)); hierarchyLevelHashTable.Add(hlevel.HLevelID, hlevel); } tmpDataTable.Columns.Add(FIELD_AS_OF_DATE, typeof(DateTime)); tmpDataTable.Columns.Add(FIELD_REST_DAY_ENTITLED, typeof(double)); tmpDataTable.Columns.Add(FIELD_REST_DAY_TAKEN, typeof(double)); tmpDataTable.Columns.Add(FIELD_TOTAL_WORKING_DAYS, typeof(double)); tmpDataTable.Columns.Add(FIELD_TOTAL_WORKING_HOURS, typeof(double)); tmpDataTable.Columns.Add(FIELD_TOTAL_LUNCH_HOURS, typeof(double)); // Extra Information tmpDataTable.Columns.Add(FIELD_EXTRA_TOTAL_STATUTORY_HOLIDAY, typeof(double)); tmpDataTable.Columns.Add(FIELD_EXTRA_TOTAL_LEAVE_APPLICATION_TAKEN, typeof(double)); tmpDataTable.Columns.Add(FIELD_EXTRA_TOTAL_WORKING_HOURS_EXPECTED, typeof(double)); tmpDataTable.Columns.Add(FIELD_EXTRA_TOTAL_OVERTIME_MINS, typeof(double)); tmpDataTable.Columns.Add(FIELD_EXTRA_TOTAL_LATE_MINS, typeof(double)); tmpDataTable.Columns.Add(FIELD_EXTRA_TOTAL_EARLYLEAVE_MINS, typeof(double)); foreach (EEmpPersonalInfo empInfo in EmpInfoList) { if (EEmpPersonalInfo.db.select(dbConn, empInfo)) { DBFilter empPosFilter = new DBFilter(); empPosFilter.add(new Match("EmpID", empInfo.EmpID)); empPosFilter.add(new Match("EmpPosEffFr", "<=", PeriodTo)); OR empPosEffOR = new OR(); empPosEffOR.add(new Match("EmpPosEffTo", ">=", PeriodFrom)); empPosEffOR.add(new NullTerm("EmpPosEffTo")); empPosFilter.add(empPosEffOR); empPosFilter.add("EmpPosEffFr", true); ArrayList empPosList = EEmpPositionInfo.db.select(dbConn, empPosFilter); EWorkHourPattern currentWorkHourPattern = null; DateTime lastStartDate = PeriodFrom; foreach (EEmpPositionInfo empPos in empPosList) { if (currentWorkHourPattern == null) { EWorkHourPattern tempWorkHourPattern = new EWorkHourPattern(); tempWorkHourPattern.WorkHourPatternID = empPos.WorkHourPatternID; if (EWorkHourPattern.db.select(dbConn, tempWorkHourPattern)) { currentWorkHourPattern = tempWorkHourPattern; if (empPos.EmpPosEffFr > PeriodFrom) { // generate working summary before the period for first join date CreateWorkingSummaryTemplateRow(dbConn, tmpDataTable, hierarchyLevelHashTable, empInfo, lastStartDate, empPos.EmpPosEffFr.AddDays(-1), currentWorkHourPattern); lastStartDate = empPos.EmpPosEffFr; } } } else if (currentWorkHourPattern.WorkHourPatternID != empPos.WorkHourPatternID) { EWorkHourPattern tempWorkHourPattern = new EWorkHourPattern(); tempWorkHourPattern.WorkHourPatternID = empPos.WorkHourPatternID; if (EWorkHourPattern.db.select(dbConn, tempWorkHourPattern)) { CreateWorkingSummaryTemplateRow(dbConn, tmpDataTable, hierarchyLevelHashTable, empInfo, lastStartDate, empPos.EmpPosEffFr.AddDays(-1), currentWorkHourPattern); lastStartDate = empPos.EmpPosEffFr; currentWorkHourPattern = tempWorkHourPattern; } } } EEmpTermination empTermination = EEmpTermination.GetObjectByEmpID(dbConn, empInfo.EmpID); if (empTermination != null) { if (empTermination.EmpTermLastDate >= lastStartDate && empTermination.EmpTermLastDate < PeriodTo) { CreateWorkingSummaryTemplateRow(dbConn, tmpDataTable, hierarchyLevelHashTable, empInfo, lastStartDate, empTermination.EmpTermLastDate, currentWorkHourPattern); lastStartDate = empTermination.EmpTermLastDate.AddDays(1); } } CreateWorkingSummaryTemplateRow(dbConn, tmpDataTable, hierarchyLevelHashTable, empInfo, lastStartDate, PeriodTo, currentWorkHourPattern); lastStartDate = PeriodTo.AddDays(1); } } return(tmpDataTable); }
public static bool ValidateUser(DatabaseConnection dbConn, string username, string encryptedPassword, bool throwException, out bool ChangePasswordRequired, out EESSUser user) { string message = string.Empty; ChangePasswordRequired = false; user = null; if (dbConn == null) { if (throwException) { message = HROne.Common.WebUtility.GetLocalizedString("Invalid User Name or Password"); throw new Exception(message); } return(false); } DBFilter filter = new DBFilter(); OR orEmpNoTerms = new OR(); orEmpNoTerms.add(new Match("EmpNo", username)); DBFieldTranscoder empNoTranscoder = EESSUser.db.getField("EmpNo").transcoder; if (empNoTranscoder != null) { orEmpNoTerms.add(new Match("EmpNo", empNoTranscoder.toDB(username.ToUpper()))); } filter.add(orEmpNoTerms); ArrayList list = EESSUser.db.select(dbConn, filter); if (list.Count == 0) { if (throwException) { message = HROne.Common.WebUtility.GetLocalizedString("Invalid User Name / Password"); throw new Exception(message); } return(false); } { user = (EESSUser)list[0]; ChangePasswordRequired = false; if (string.IsNullOrEmpty(user.EmpPW)) { ChangePasswordRequired = true; if (!(user.EmpHKID == "()") && !string.IsNullOrEmpty(user.EmpHKID)) { user.EmpPW = WebUtils.PasswordHash(user.EmpHKID.Substring(0, (user.EmpHKID.Length - 3))); } else { user.EmpPW = WebUtils.PasswordHash(user.EmpPassportNo); } } //if (user.EmpPW == WebUtils.PasswordHash(user.EmpPassportNo)) //{ // if (!user.EmpPW.Equals(Password.Text)) // { // Prompt.Text = "Invalid User Name / Password"; // return; // } // else // { // user.EmpPW = WebUtils.PasswordHash(Password.Text); // EESSUser.db.update(user); // } //} //else if (!user.EmpPW.Equals(encryptedPassword)) { if (throwException) { message = HROne.Common.WebUtility.GetLocalizedString("Invalid User Name / Password"); throw new Exception(message); } return(false); } EEmpTermination empTerm = EEmpTermination.GetObjectByEmpID(dbConn, user.EmpID); if (empTerm != null) { if (throwException) { if (empTerm.EmpTermLastDate < AppUtils.ServerDateTime().Date) { message = HROne.Common.WebUtility.GetLocalizedString("User is terminated"); throw new Exception(message); } return(false); } } } return(true); }
protected void Page_Load(object sender, EventArgs e) { if (!WebUtils.CheckAccess(Response, Session, TRIALRUN_FUNCTION_CODE, WebUtils.AccessLevel.ReadWrite)) { return; } if (!WebUtils.CheckAccess(Response, Session, CONFIRM_FUNCTION_CODE, WebUtils.AccessLevel.ReadWrite)) { return; } if (!WebUtils.CheckAccess(Response, Session, PROCESSEND_FUNCTION_CODE, WebUtils.AccessLevel.ReadWrite)) { return; } DateTime dtPayPeriodFr = new DateTime(long.Parse(DecryptedRequest["PayPeriodFr"])); DateTime dtPayPeriodTo = new DateTime(long.Parse(DecryptedRequest["PayPeriodTo"])); DateTime NextPayPeriodFr = dtPayPeriodTo.AddDays(1); long nextPayPeriodTick = 0; if (long.TryParse(DecryptedRequest["NextPayPeriodFr"], out nextPayPeriodTick)) { NextPayPeriodFr = new DateTime(nextPayPeriodTick); } int PayBatchID = 0; if (!int.TryParse(DecryptedRequest["PayBatchID"], out PayBatchID)) { PayBatchID = 0; } string[] payGroupStringList = DecryptedRequest["PayGroupIDList"].Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); int currentSelectedPayGroupSeq = 0; if (!int.TryParse(DecryptedRequest["SelectedPayGroupSeq"], out currentSelectedPayGroupSeq)) { currentSelectedPayGroupSeq = 0; } else { if (currentSelectedPayGroupSeq > payGroupStringList.GetUpperBound(0)) { currentSelectedPayGroupSeq = 0; dtPayPeriodFr = NextPayPeriodFr; NextPayPeriodFr = dtPayPeriodTo.AddDays(1); PayBatchID = 0; } } bool SkipRecurringPaymentProcess = DecryptedRequest["SkipRecurringPaymentProcess"].Equals("Yes", StringComparison.CurrentCultureIgnoreCase); bool SkipClaimsAndDeductionsProcess = DecryptedRequest["SkipClaimsAndDeductionsProcess"].Equals("Yes", StringComparison.CurrentCultureIgnoreCase); bool SkipYearEndBonusProcess = DecryptedRequest["SkipYearEndBonusProcess"].Equals("Yes", StringComparison.CurrentCultureIgnoreCase); bool SkipAdditionalRenumerationProcess = DecryptedRequest["SkipAdditionalRenumerationProcess"].Equals("Yes", StringComparison.CurrentCultureIgnoreCase); if (dtPayPeriodFr <= dtPayPeriodTo) { EPayrollPeriod currentPayPeriod = null; int currentPayPeriodID = 0; if (!int.TryParse(DecryptedRequest["PayPeriodID"], out currentPayPeriodID)) { DBFilter payPeriodFilter = new DBFilter(); payPeriodFilter.add(new Match("PayGroupID", payGroupStringList[currentSelectedPayGroupSeq])); payPeriodFilter.add(new Match("PayPeriodFr", "<=", dtPayPeriodFr)); payPeriodFilter.add(new Match("PayPeriodTo", ">=", dtPayPeriodFr)); // Skip checking payperiodstatus since the next step will check if payroll is being processed //payPeriodFilter.add(new Match("PayPeriodStatus", "<>", EPayrollPeriod.PAYPERIOD_STATUS_PROCESSEND_FLAG)); ArrayList payPeriodList = EPayrollPeriod.db.select(dbConn, payPeriodFilter); if (payPeriodList.Count > 0) { currentPayPeriod = ((EPayrollPeriod)payPeriodList[0]); currentPayPeriodID = currentPayPeriod.PayPeriodID; if (NextPayPeriodFr > currentPayPeriod.PayPeriodTo.AddDays(1)) { NextPayPeriodFr = currentPayPeriod.PayPeriodTo.AddDays(1); } } } else { currentPayPeriod = new EPayrollPeriod(); currentPayPeriod.LoadDBObject(dbConn, currentPayPeriodID); } int intTotal; if (int.TryParse(DecryptedRequest["Total"], out intTotal)) { intTotal = 0; } if (Session["PayrollContinuousProcess_EmpList"] == null) { DBFilter empPayrollCountFilter = new DBFilter(); empPayrollCountFilter.add(new Match("PayPeriodID", currentPayPeriodID)); if (EEmpPayroll.db.count(dbConn, empPayrollCountFilter) > 0) { lblProgressMessage.Text = "Payroll has been processed manually. Please complete this payroll cycle manually."; return; } EPayrollPeriod payPeriod = new EPayrollPeriod(); payPeriod.PayPeriodID = currentPayPeriodID; payPeriod.PayPeriodStatus = "C"; payPeriod.PayPeriodConfirmDate = AppUtils.ServerDateTime(); payPeriod.PayPeriodConfirmBy = WebUtils.GetCurUser(Session).UserID; EPayrollPeriod.db.update(dbConn, payPeriod); EPayrollBatch payBatch = new EPayrollBatch(); payBatch.PayBatchConfirmDate = AppUtils.ServerDateTime(); EPayrollBatch.db.insert(dbConn, payBatch); PayBatchID = payBatch.PayBatchID; DBFilter filter = new DBFilter(); IN inTerm = new IN("EmpID", "Select epi.EmpID from [EmpPositionInfo] epi, [PayrollPeriod] pp ", filter); filter.add(new MatchField("EmpID", "epi.EmpID")); filter.add(new MatchField("epi.PayGroupID", "pp.PayGroupID")); filter.add(new MatchField("epi.EmpPosEffFr", "<=", "pp.PayPeriodTo")); filter.add(new Match("pp.PayPeriodID", currentPayPeriodID)); filter.add(WebUtils.AddRankFilter(Session, "EmpID", true)); OR orFilter = new OR(); orFilter.add(new MatchField("epi.EmpPosEffTo", ">=", "pp.PayPeriodFr")); orFilter.add(new NullTerm("epi.EmpPosEffTo")); filter.add(orFilter); filter.add(new MatchField("EmpDateOfJoin", "<=", "pp.PayPeriodTo ")); OR otherConstraint = new OR(); OR orIncludeEmployeeTermination = new OR(); DBFilter empTerminationFilter = new DBFilter(); empTerminationFilter.add(new MatchField("et.EmpTermLastDate", ">=", "pp.PayPeriodFr")); orIncludeEmployeeTermination.add(new IN(" empid", "Select et.empid from " + EEmpTermination.db.dbclass.tableName + " et ", empTerminationFilter)); orIncludeEmployeeTermination.add(new IN("NOT empid", "Select et.empid from " + EEmpTermination.db.dbclass.tableName + " et ", new DBFilter())); otherConstraint.add(orIncludeEmployeeTermination); //OR orIncludeBackPay = new OR(); DBFilter empCNDFilter = new DBFilter(); empCNDFilter.add(new MatchField("CNDEffDate", "<=", "pp.PayperiodTo")); empCNDFilter.add(new MatchField("CNDEffDate", ">=", "epi.EmpPosEffFr")); OR orCNDPos = new OR(); orCNDPos.add(new MatchField("CNDEffDate", "<=", "epi.EmpPosEffTo")); orCNDPos.add(new NullTerm("epi.EmpPosEffTo")); empCNDFilter.add(orCNDPos); OR orCNDPayRecID = new OR(); orCNDPayRecID.add(new Match("PayRecID", 0)); orCNDPayRecID.add(new NullTerm("PayRecID")); empCNDFilter.add(orCNDPayRecID); otherConstraint.add(new IN(" empid", "Select cnd.empid from " + EClaimsAndDeductions.db.dbclass.tableName + " cnd ", empCNDFilter)); //otherConstraint.add(orIncludeBackPay); filter.add(otherConstraint); DBFilter resultFilter = new DBFilter(); resultFilter.add(inTerm); ArrayList empList = EEmpPersonalInfo.db.select(dbConn, resultFilter); Session["PayrollContinuousProcess_EmpList"] = empList; intTotal = empList.Count; } ArrayList list = (ArrayList)Session["PayrollContinuousProcess_EmpList"]; if (list.Count > 0) { //string[] strEmpIDListArray; //int intProgress = 0; //strEmpIDListArray = strEmpIDList.Split(new char[] { '_' }); //intProgress = 0; DateTime dtStartTime = AppUtils.ServerDateTime(); int UserID = WebUtils.GetCurUser(Session).UserID; HROne.Payroll.PayrollProcess payrollProcess = new HROne.Payroll.PayrollProcess(dbConn); while (AppUtils.ServerDateTime().Subtract(dtStartTime).Seconds < 30 && list.Count > 0) { EEmpPersonalInfo empInfo = (EEmpPersonalInfo)list[0]; //int intEmpID; //if (int.TryParse(strEmpIDListArray[intProgress], out intEmpID)) //{ DBFilter filter = new DBFilter(); filter.add(new Match("EmpID", empInfo.EmpID)); filter.add(WebUtils.AddRankFilter(new Page().Session, "EmpID", true)); if (EEmpPersonalInfo.db.count(dbConn, filter) > 0) { bool ActualRecurringPaymentProcess = !SkipRecurringPaymentProcess; bool ActualYearEndBonusProcess = !SkipYearEndBonusProcess; EEmpTermination empTerm = EEmpTermination.GetObjectByEmpID(dbConn, empInfo.EmpID); if (empTerm != null) { if (empTerm.EmpTermLastDate < dtPayPeriodFr) { ActualRecurringPaymentProcess = false; ActualYearEndBonusProcess = false; } } WebUtils.StartFunction(Session, CONFIRM_FUNCTION_CODE, empInfo.EmpID, false); payrollProcess.PayrollConfirm(payrollProcess.PayrollTrialRun(currentPayPeriodID, empInfo.EmpID, ActualRecurringPaymentProcess, !SkipClaimsAndDeductionsProcess, !SkipAdditionalRenumerationProcess, ActualYearEndBonusProcess, false, UserID), PayBatchID, UserID); WebUtils.EndFunction(dbConn); } //} //intProgress++; //if (intProgress == strEmpIDListArray.GetLength(0)) // break; list.Remove(empInfo); } } lblProgress.Text = (intTotal - list.Count).ToString() + " of " + intTotal.ToString(); if (list.Count == 0) { Session.Remove("PayrollContinuousProcess_EmpList"); EPayrollPeriod payPeriod = new EPayrollPeriod(); payPeriod.PayPeriodID = currentPayPeriodID; EPayrollPeriod.db.select(dbConn, payPeriod); HROne.Payroll.PayrollProcess payrollProcess = new HROne.Payroll.PayrollProcess(dbConn); WebUtils.StartFunction(Session, PROCESSEND_FUNCTION_CODE, false); payrollProcess.PayrollProcessEnd(payPeriod.PayPeriodID, WebUtils.GetCurUser(Session).UserID); payrollProcess.GenerateNextPayrollPeriod(payPeriod.PayGroupID); WebUtils.EndFunction(dbConn); currentSelectedPayGroupSeq++; string url = Request.Url.AbsolutePath + "?PayGroupIDList=" + string.Join("|", payGroupStringList) + "&PayPeriodFr=" + dtPayPeriodFr.Ticks + "&PayPeriodTo=" + dtPayPeriodTo.Ticks + "&NextPayPeriodFr=" + NextPayPeriodFr.Ticks + "&SelectedPayGroupSeq=" + currentSelectedPayGroupSeq + "&SkipRecurringPaymentProcess=" + (SkipRecurringPaymentProcess ? "Yes" : "No") + "&SkipClaimsAndDeductionsProcess=" + (SkipClaimsAndDeductionsProcess ? "Yes" : "No") + "&SkipYearEndBonusProcess=" + (SkipYearEndBonusProcess ? "Yes" : "No") + "&SkipAdditionalRenumerationProcess=" + (SkipAdditionalRenumerationProcess ? "Yes" : "No") ; WebUtils.RegisterRedirectJavaScript(this, url, 500); //payPeriod = HROne.Payroll.PayrollProcess.GenerateNextPayrollPeriod(payPeriod.PayGroupID); //noOfCycleLeft--; //if (noOfCycleLeft > 0) //{ // if (payPeriod != null) // { // Response.Write(@"<script language='javascript'>"); // Response.Write(@"setTimeout('Redirect()',500);"); // Response.Write(@"function Redirect()"); // Response.Write(@"{"); // Response.Write(@"window.location = 'Payroll_ProcessContinuous_Process.aspx?" // + "PayPeriodID=" + payPeriod.PayPeriodID // + "&PayBatchID=" + 0 // + "&NoOfCycleLeft=" + noOfCycleLeft // + "&Total=" + 0 // //+ "&EmpID=" + strRemainder // + "';"); // Response.Write(@"}"); // Response.Write(@"</script>"); // } //} } else { string url = Request.Url.AbsolutePath + "?PayGroupIDList=" + string.Join("|", payGroupStringList) + "&PayPeriodFr=" + dtPayPeriodFr.Ticks + "&PayPeriodTo=" + dtPayPeriodTo.Ticks + "&PayPeriodID=" + currentPayPeriodID + "&PayBatchID=" + PayBatchID + "&Total=" + intTotal + "&NextPayPeriodFr=" + NextPayPeriodFr.Ticks + "&SelectedPayGroupSeq=" + currentSelectedPayGroupSeq + "&SkipRecurringPaymentProcess=" + (SkipRecurringPaymentProcess ? "Yes" : "No") + "&SkipClaimsAndDeductionsProcess=" + (SkipClaimsAndDeductionsProcess ? "Yes" : "No") + "&SkipYearEndBonusProcess=" + (SkipYearEndBonusProcess ? "Yes" : "No") + "&SkipAdditionalRenumerationProcess=" + (SkipAdditionalRenumerationProcess ? "Yes" : "No") ; WebUtils.RegisterRedirectJavaScript(this, url, 500); } EPayrollGroup payGroup = new EPayrollGroup(); payGroup.LoadDBObject(dbConn, currentPayPeriod.PayGroupID); lblProgressMessage.Text = "Payroll process is in progress (" + payGroup.PayGroupCode + ":" + currentPayPeriod.PayPeriodFr.ToString("yyyy-MM-dd") + " To " + currentPayPeriod.PayPeriodTo.ToString("yyyy-MM-dd") + ")"; } else { lblProgressMessage.Text = "Payroll process is completed"; } HROne.Common.WebUtility.WebControlsLocalization(this, this.Controls); }
protected void btnGenerate_Click(object sender, EventArgs e) { const string FIELD_COMPANY = "Company"; const string FIELD_POSITION = "Position"; const string FIELD_PAYROLLGROUP = "Payroll Group"; const string FIELD_EMPNO = "EmployeeID"; const string FIELD_EMPENGFULLNAME = "English Name"; const string FIELD_CHINESENAME = "¤¤¤å©m¦W"; const string FIELD_HKID = @"HKID/Passport"; const string FIELD_PERIODFROM = "From"; const string FIELD_PERIODTO = "To"; const string FIELD_WAGESWORK = "Wages Paid"; const string FIELD_WORKHOURTOTAL = "Total Working Hours"; const string FIELD_RESTDAYTOTAL = "No. of Rest Day"; const string FIELD_STATUTORYHOLIDAYTOTAL = "No. of SH"; const string FIELD_FULLPAIDLEAVETOTAL = "No. of Full Paid Leave"; const string FIELD_NONFULLPAIDLEAVETOTAL = "Non-Full Paid Leave"; ArrayList list = new ArrayList(); foreach (RepeaterItem i in Repeater.Items) { CheckBox cb = (CheckBox)i.FindControl("ItemSelect"); if (cb.Checked) { EEmpPersonalInfo o = (EEmpPersonalInfo)EEmpPersonalInfo.db.createObject(); WebFormUtils.GetKeys(EEmpPersonalInfo.db, o, cb); list.Add(o); } } ArrayList payPeriodList = Payroll_ConfirmedPeriod_List1.GetSelectedBaseObjectList(); if (list.Count > 0 && payPeriodList.Count > 0) { //const string PAYMENTCODE_PREFIX = "[StatutoryMinimumWageSummary] "; string exportFileName = System.IO.Path.GetTempFileName(); System.IO.File.Delete(exportFileName); exportFileName += ".xls"; //System.IO.File.Copy(Server.MapPath("~/template/HistoryList_Template.xls"), exportFileName, true); HROne.Export.ExcelExport export = new HROne.Export.ExcelExport(exportFileName); DataSet dataSet = new DataSet(); //export.GetDataSet(); DataTable dataTable = new DataTable("Payroll$"); dataSet.Tables.Add(dataTable); dataTable.Columns.Add(FIELD_COMPANY, typeof(string)); DBFilter hierarchyLevelFilter = new DBFilter(); Hashtable hierarchyLevelHashTable = new Hashtable(); hierarchyLevelFilter.add("HLevelSeqNo", true); ArrayList hierarchyLevelList = EHierarchyLevel.db.select(dbConn, hierarchyLevelFilter); foreach (EHierarchyLevel hlevel in hierarchyLevelList) { dataTable.Columns.Add(hlevel.HLevelDesc, typeof(string)); hierarchyLevelHashTable.Add(hlevel.HLevelID, hlevel); } dataTable.Columns.Add(FIELD_POSITION, typeof(string)); dataTable.Columns.Add(FIELD_PAYROLLGROUP, typeof(string)); dataTable.Columns.Add(FIELD_EMPNO, typeof(string)); dataTable.Columns.Add(FIELD_EMPENGFULLNAME, typeof(string)); dataTable.Columns.Add(FIELD_CHINESENAME, typeof(string)); dataTable.Columns.Add(FIELD_HKID, typeof(string)); dataTable.Columns.Add(FIELD_PERIODFROM, typeof(DateTime)); dataTable.Columns.Add(FIELD_PERIODTO, typeof(DateTime)); dataTable.Columns.Add(FIELD_WAGESWORK, typeof(double)); dataTable.Columns.Add(FIELD_WORKHOURTOTAL, typeof(double)); dataTable.Columns.Add(FIELD_RESTDAYTOTAL, typeof(double)); dataTable.Columns.Add(FIELD_STATUTORYHOLIDAYTOTAL, typeof(double)); dataTable.Columns.Add(FIELD_FULLPAIDLEAVETOTAL, typeof(double)); dataTable.Columns.Add(FIELD_NONFULLPAIDLEAVETOTAL, typeof(double)); int firstSummaryColumnPos = dataTable.Columns.Count; int firstDetailColumnPos = dataTable.Columns.Count; foreach (EPayrollPeriod payPeriod in payPeriodList) { if (EPayrollPeriod.db.select(dbConn, payPeriod)) { EPayrollGroup payrollGroup = new EPayrollGroup(); payrollGroup.PayGroupID = payPeriod.PayGroupID; EPayrollGroup.db.select(dbConn, payrollGroup); foreach (EEmpPersonalInfo empInfo in list) { EEmpPersonalInfo.db.select(dbConn, empInfo); EEmpTermination empTerm = EEmpTermination.GetObjectByEmpID(dbConn, empInfo.EmpID); DBFilter empPayrollFilter = new DBFilter(); empPayrollFilter.add(new Match("ep.EmpID", empInfo.EmpID)); empPayrollFilter.add(new Match("ep.PayPeriodID", payPeriod.PayPeriodID)); if (PayrollStatus.SelectedValue.Equals("T")) { empPayrollFilter.add(new Match("ep.EmpPayStatus", "=", "T")); } else { empPayrollFilter.add(new Match("ep.EmpPayStatus", "<>", "T")); } DataRow row = dataTable.NewRow(); row[FIELD_EMPNO] = empInfo.EmpNo; row[FIELD_EMPENGFULLNAME] = empInfo.EmpEngFullName; row[FIELD_CHINESENAME] = empInfo.EmpChiFullName; row[FIELD_HKID] = empInfo.EmpHKID; row[FIELD_PERIODFROM] = payPeriod.PayPeriodFr; row[FIELD_PERIODTO] = payPeriod.PayPeriodTo; DBFilter empPosFilter = new DBFilter(); EEmpPositionInfo empPos = AppUtils.GetLastPositionInfo(dbConn, payPeriod.PayPeriodTo, empInfo.EmpID); if (empPos != null) { ECompany company = new ECompany(); company.CompanyID = empPos.CompanyID; if (ECompany.db.select(dbConn, company)) { row[FIELD_COMPANY] = company.CompanyCode; } EPosition position = new EPosition(); position.PositionID = empPos.PositionID; if (EPosition.db.select(dbConn, position)) { row[FIELD_POSITION] = position.PositionDesc; } DBFilter empHierarchyFilter = new DBFilter(); empHierarchyFilter.add(new Match("EmpPosID", empPos.EmpPosID)); ArrayList empHierarchyList = EEmpHierarchy.db.select(dbConn, empHierarchyFilter); foreach (EEmpHierarchy empHierarchy in empHierarchyList) { EHierarchyLevel hierarchyLevel = (EHierarchyLevel)hierarchyLevelHashTable[empHierarchy.HLevelID]; if (hierarchyLevel != null) { EHierarchyElement hierarchyElement = new EHierarchyElement(); hierarchyElement.HElementID = empHierarchy.HElementID; if (EHierarchyElement.db.select(dbConn, hierarchyElement)) { row[hierarchyLevel.HLevelDesc] = hierarchyElement.HElementDesc; } } } EPayrollGroup curentPayGroup = new EPayrollGroup(); curentPayGroup.PayGroupID = empPos.PayGroupID; if (EPayrollGroup.db.select(dbConn, curentPayGroup)) { row[FIELD_PAYROLLGROUP] = curentPayGroup.PayGroupDesc; } } double netAmount = 0, releventIncome = 0, nonRelevantIncome = 0, taxableAmount = 0, nonTaxableAmount = 0; double mcER = 0, mcEE = 0; double vcER = 0, vcEE = 0; double pFundER = 0, pFundEE = 0; double wagesByWork = 0; double wagesByRest = 0; double fullPaidLeaveDays = 0; double nonFullPaidLeaveDays = 0; DBFilter paymentRecordFilter = new DBFilter(); paymentRecordFilter.add(new IN("EmpPayrollID", "Select EmpPayrollID from " + EEmpPayroll.db.dbclass.tableName + " ep ", empPayrollFilter)); paymentRecordFilter.add(new Match("PayRecStatus", "A")); ArrayList paymentRecords = EPaymentRecord.db.select(dbConn, paymentRecordFilter); foreach (EPaymentRecord paymentRecord in paymentRecords) { EPaymentCode payCode = new EPaymentCode(); payCode.PaymentCodeID = paymentRecord.PaymentCodeID; EPaymentCode.db.select(dbConn, payCode); // Always Use Payment Code Description for grouping payment code with same description //string fieldName = PAYMENTCODE_PREFIX + payCode.PaymentCodeDesc; //if (dataTable.Columns[fieldName] == null) // dataTable.Columns.Add(new DataColumn(fieldName, typeof(double))); //if (row[fieldName] == null || row[fieldName] == DBNull.Value) // row[fieldName] = 0; //row[fieldName] = (double)row[fieldName] + paymentRecord.PayRecActAmount; netAmount += paymentRecord.PayRecActAmount; if (payCode.PaymentCodeIsMPF) { releventIncome += paymentRecord.PayRecActAmount; } else { nonRelevantIncome += paymentRecord.PayRecActAmount; } DBFilter taxPaymentMapFilter = new DBFilter(); taxPaymentMapFilter.add(new Match("PaymentCodeID", paymentRecord.PaymentCodeID)); if (ETaxPaymentMap.db.count(dbConn, taxPaymentMapFilter) > 0) { taxableAmount += paymentRecord.PayRecActAmount; } else { nonTaxableAmount += paymentRecord.PayRecActAmount; } if (payCode.PaymentCodeIsWages) { if (paymentRecord.PayRecIsRestDayPayment) { wagesByRest += paymentRecord.PayRecActAmount; } else { wagesByWork += paymentRecord.PayRecActAmount; } } } DBFilter mpfRecordFilter = new DBFilter(); mpfRecordFilter.add(new IN("EmpPayrollID", "Select EmpPayrollID from " + EEmpPayroll.db.dbclass.tableName + " ep ", empPayrollFilter)); ArrayList mpfRecords = EMPFRecord.db.select(dbConn, mpfRecordFilter); foreach (EMPFRecord mpfRecord in mpfRecords) { vcER += mpfRecord.MPFRecActVCER; mcER += +mpfRecord.MPFRecActMCER; vcEE += mpfRecord.MPFRecActVCEE; mcEE += mpfRecord.MPFRecActMCEE; } ArrayList orsoRecords = EORSORecord.db.select(dbConn, mpfRecordFilter); foreach (EORSORecord orsoRecord in orsoRecords) { pFundER += orsoRecord.ORSORecActER; pFundEE += orsoRecord.ORSORecActEE; } row[FIELD_WAGESWORK] = wagesByWork; DBFilter workingSummaryFilter = new DBFilter(); workingSummaryFilter.add(new Match("EmpWorkingSummaryAsOfDate", ">=", payPeriod.PayPeriodFr < empInfo.EmpDateOfJoin ? empInfo.EmpDateOfJoin : payPeriod.PayPeriodFr)); if (empTerm != null) { workingSummaryFilter.add(new Match("EmpWorkingSummaryAsOfDate", "<=", payPeriod.PayPeriodTo > empTerm.EmpTermLastDate ? empTerm.EmpTermLastDate : payPeriod.PayPeriodTo)); } else { workingSummaryFilter.add(new Match("EmpWorkingSummaryAsOfDate", "<=", payPeriod.PayPeriodTo)); } workingSummaryFilter.add(new Match("EmpID", empInfo.EmpID)); ArrayList empWorkingSummaryList = EEmpWorkingSummary.db.select(dbConn, workingSummaryFilter); double workHourTotal = 0, restDayTotal = 0; foreach (EEmpWorkingSummary empWorkSummary in empWorkingSummaryList) { workHourTotal += empWorkSummary.EmpWorkingSummaryTotalWorkingHours; restDayTotal += empWorkSummary.EmpWorkingSummaryRestDayEntitled; } row[FIELD_WORKHOURTOTAL] = workHourTotal; row[FIELD_RESTDAYTOTAL] = restDayTotal; DBFilter statutoryHolidayFilter = new DBFilter(); statutoryHolidayFilter.add(new Match("StatutoryHolidayDate", ">=", payPeriod.PayPeriodFr < empInfo.EmpDateOfJoin ? empInfo.EmpDateOfJoin : payPeriod.PayPeriodFr)); if (empTerm != null) { statutoryHolidayFilter.add(new Match("StatutoryHolidayDate", "<=", payPeriod.PayPeriodTo > empTerm.EmpTermLastDate ? empTerm.EmpTermLastDate : payPeriod.PayPeriodTo)); } else { statutoryHolidayFilter.add(new Match("StatutoryHolidayDate", "<=", payPeriod.PayPeriodTo)); } ArrayList statutoryHolidayList = EStatutoryHoliday.db.select(dbConn, statutoryHolidayFilter); double restDayCount = 0; foreach (EStatutoryHoliday statutoryHoliday in statutoryHolidayList) { restDayCount++; } row[FIELD_STATUTORYHOLIDAYTOTAL] = restDayCount; DBFilter LeaveAppEmpPayrollFilter = new DBFilter(); LeaveAppEmpPayrollFilter.add(new IN("EmpPayrollID", "Select EmpPayrollID from " + EEmpPayroll.db.dbclass.tableName + " ep ", empPayrollFilter)); ArrayList LeaveAppEmpPayrollLists = ELeaveApplication.db.select(dbConn, LeaveAppEmpPayrollFilter); foreach (ELeaveApplication leaveApp in LeaveAppEmpPayrollLists) { ELeaveCode leaveCode = new ELeaveCode(); leaveCode.LeaveCodeID = leaveApp.LeaveCodeID; if (ELeaveCode.db.select(dbConn, leaveCode)) { if (leaveCode.LeaveCodePayRatio >= 1) { fullPaidLeaveDays += leaveApp.LeaveAppDays; } else { nonFullPaidLeaveDays += leaveApp.LeaveAppDays; } } } row[FIELD_FULLPAIDLEAVETOTAL] = fullPaidLeaveDays; row[FIELD_NONFULLPAIDLEAVETOTAL] = nonFullPaidLeaveDays; dataTable.Rows.Add(row); } } } //DBFilter paymentCodeFilter = new DBFilter(); //paymentCodeFilter.add("PaymentCodeDisplaySeqNo", false); //paymentCodeFilter.add("PaymentCode", false); //ArrayList paymentCodeList = EPaymentCode.db.select(dbConn, paymentCodeFilter); //foreach (EPaymentCode paymentCode in paymentCodeList) //{ // if (dataTable.Columns.Contains(PAYMENTCODE_PREFIX + paymentCode.PaymentCodeDesc)) // { // DataColumn paymentColumn = dataTable.Columns[PAYMENTCODE_PREFIX + paymentCode.PaymentCodeDesc]; // paymentColumn.SetOrdinal(firstDetailColumnPos); // if (!dataTable.Columns.Contains(paymentCode.PaymentCodeDesc)) // paymentColumn.ColumnName = paymentCode.PaymentCodeDesc; // else // { // Console.Write("System reserved payment column is used"); // } // } //} //for (int i = firstSummaryColumnPos; i < firstDetailColumnPos; i++) // dataTable.Columns[firstSummaryColumnPos].SetOrdinal(dataTable.Columns.Count - 1); export.Update(dataSet); System.IO.FileStream excelfileStream = new System.IO.FileStream(exportFileName, System.IO.FileMode.Open); NPOI.HSSF.UserModel.HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook(excelfileStream); NPOI.HSSF.UserModel.HSSFSheet workSheet = (NPOI.HSSF.UserModel.HSSFSheet)workbook.GetSheetAt(0); workSheet.ShiftRows(workSheet.FirstRowNum, workSheet.LastRowNum, 1); NPOI.HSSF.UserModel.HSSFRow excelRow = (NPOI.HSSF.UserModel.HSSFRow)workSheet.GetRow(0); if (excelRow == null) { excelRow = (NPOI.HSSF.UserModel.HSSFRow)workSheet.CreateRow(0); } NPOI.HSSF.UserModel.HSSFCell excelCell = (NPOI.HSSF.UserModel.HSSFCell)excelRow.GetCell(0); if (excelCell == null) { excelCell = (NPOI.HSSF.UserModel.HSSFCell)excelRow.CreateCell(0); } excelCell.SetCellValue("Statutory Minimum Wage Summary Report"); excelfileStream = new System.IO.FileStream(exportFileName, System.IO.FileMode.Open); workbook.Write(excelfileStream); excelfileStream.Close(); WebUtils.TransmitFile(Response, exportFileName, "StatutoryMinimumWageSummary_" + AppUtils.ServerDateTime().ToString("yyyyMMddHHmmss") + ".xls", true); return; } else { PageErrors errors = PageErrors.getErrors(db, Page.Master); errors.addError("Employee not selected"); } }
protected bool loadObject() { lblLastEmploymentDateValue.Visible = false; obj = new EEmpPersonalInfo(); bool isNew = WebFormWorkers.loadKeys(db, obj, DecryptedRequest); DBFilter filter = new DBFilter(); filter.add(new Match("EmpID", obj.EmpID)); filter.add(WebUtils.AddRankFilter(Session, "EmpID", true)); ArrayList empInfoList = EEmpPersonalInfo.db.select(dbConn, filter); if (empInfoList.Count == 0) { if (CurID <= 0) { return(false); } else { HROne.Common.WebUtility.RedirectURLwithEncryptedQueryString(Response, Session, "~/AccessDeny.aspx"); } } obj = (EEmpPersonalInfo)empInfoList[0]; EEmpTermination empTerm = EEmpTermination.GetObjectByEmpID(dbConn, obj.EmpID); NewEmpNoPanel.Visible = false; lblLastEmploymentDateValue.Visible = false; if (empTerm != null) { lblLastEmploymentDateValue.Visible = true; lblLastEmploymentDateValue.Text = empTerm.EmpTermLastDate.ToString("yyyy-MM-dd"); EEmpPersonalInfo newEmpInfo = new EEmpPersonalInfo(); newEmpInfo.EmpID = empTerm.NewEmpID; if (EEmpPersonalInfo.db.select(dbConn, newEmpInfo)) { NewEmpNoPanel.Visible = true; hlNewEmpNo.Text = newEmpInfo.EmpNo; hlNewEmpNo.NavigateUrl = "~/Emp_View.aspx?EmpID=" + newEmpInfo.EmpID; } } Hashtable values = new Hashtable(); db.populate(obj, values); binding.toControl(values); EEmpDocument empDocument = EEmpDocument.GetProfilePhotoEmpDocument(dbConn, obj.EmpID); if (empDocument != null) { ProfilePhotoCell.Visible = true; ProfilePhoto.ImageUrl = "~/Emp_Document_Download.aspx?EmpID=" + empDocument.EmpID + "&EmpDocumentID=" + empDocument.EmpDocumentID; ProfilePhoto.Width = new Unit(100); } else { ProfilePhotoCell.Visible = false; } EEmpPersonalInfo prevEmpInfo = obj.GetPreviousEmpInfo(dbConn); if (prevEmpInfo == null) { PrevEmpNoRow.Visible = false; } else { hlPreviousEmpNo.Text = prevEmpInfo.EmpNo; hlPreviousEmpNo.NavigateUrl = "~/Emp_View.aspx?EmpID=" + prevEmpInfo.EmpID; PrevEmpNoRow.Visible = true; } MasterEmpNoRow.Visible = false; if (obj.MasterEmpID > 0) { EEmpPersonalInfo masterEmpInfo = new EEmpPersonalInfo(); masterEmpInfo.EmpID = obj.MasterEmpID; if (EEmpPersonalInfo.db.select(dbConn, masterEmpInfo)) { hlMasterEmpNo.Text = masterEmpInfo.EmpNo; hlMasterEmpNo.NavigateUrl = "~/Emp_View.aspx?EmpID=" + masterEmpInfo.EmpID; MasterEmpNoRow.Visible = true; } } ArrayList childRoleList = obj.GetOtherRoleList(dbConn); if (childRoleList.Count <= 0) { ChildRoleEmpNoRow.Visible = false; } else { ChildRoleEmpNoRow.Visible = true; ChildRoleEmpNoRepeater.DataSource = childRoleList; ChildRoleEmpNoRepeater.DataBind(); } double age = AppUtils.GetAge(obj.EmpDateOfBirth); if (!double.IsNaN(age)) { lblAge.Text = HROne.CommonLib.GenericRoundingFunctions.RoundingDown(age, 0, 3).ToString("0"); } else { lblAge.Text = string.Empty; } double yearOfService = obj.GetYearOfServer(dbConn, AppUtils.ServerDateTime()); if (!double.IsNaN(yearOfService)) { lblYearOfService.Text = HROne.CommonLib.GenericRoundingFunctions.RoundingDown(yearOfService, 1, 3).ToString("0.0"); } else { lblYearOfService.Text = string.Empty; } return(true); }
protected void Save_Click(object sender, EventArgs e) { ELeaveApplication c = new ELeaveApplication(); if (!LeaveAppUnit.SelectedValue.Equals("D")) { LeaveAppDateTo.Value = LeaveAppDateFrom.Value; } Hashtable values = new Hashtable(); binding.toValues(values); PageErrors errors = PageErrors.getErrors(db, Page.Master); errors.clear(); db.validate(errors, values); if (!errors.isEmpty()) { return; } db.parse(values, c); if (!c.LeaveAppUnit.Equals("D")) { //c.LeaveAppDateTo = c.LeaveAppDateFrom; if (c.LeaveAppTimeTo < c.LeaveAppTimeFrom) { errors.addError(HROne.Translation.PageErrorMessage.ERROR_INVALID_HOUR); } } else { EEmpPersonalInfo empInfo = new EEmpPersonalInfo(); empInfo.EmpID = c.EmpID; if (EEmpPersonalInfo.db.select(dbConn, empInfo)) { if (c.LeaveAppDateTo < c.LeaveAppDateFrom) { errors.addError(HROne.Translation.PageErrorMessage.ERROR_DATE_TO_TOO_EARLY); } else { if (c.LeaveAppDateFrom < empInfo.EmpDateOfJoin) { errors.addError(HROne.Translation.PageErrorMessage.ERROR_DATE_TOO_EARLY); } EEmpTermination empTerm = EEmpTermination.GetObjectByEmpID(dbConn, c.EmpID); if (empTerm != null) { if (c.LeaveAppDateTo > empTerm.EmpTermLastDate) { errors.addError(HROne.Translation.PageErrorMessage.ERROR_DATE_TOO_LATE); } } TimeSpan ts = c.LeaveAppDateTo.Subtract(c.LeaveAppDateFrom); if (c.LeaveAppDays > ts.Days + 1) { errors.addError(HROne.Translation.PageErrorMessage.ERROR_DAYS_TOO_LARGE); } } } } if (c.LeaveAppDateFrom.Month != c.LeaveAppDateTo.Month || c.LeaveAppDateFrom.Year != c.LeaveAppDateTo.Year) { errors.addError(HROne.Translation.PageErrorMessage.ERROR_LEAVE_APP_NOT_SAME_MTH); } if (HoursClaimPanel.Visible) { if (c.LeaveAppHours <= 0) { errors.addError(string.Format(HROne.Translation.PageErrorMessage.ERROR_FIELD_REQUIRED, new string[] { lblLeaveAppHours.Text })); } } //DBFilter overlapCheckingFilter = new DBFilter(); //overlapCheckingFilter.add(new Match("EmpID", c.EmpID)); //overlapCheckingFilter.add(new Match("LeaveAppID", "<>", c.LeaveAppID)); //overlapCheckingFilter.add(new Match("LeaveAppDateFrom", "<=", c.LeaveAppDateTo)); //overlapCheckingFilter.add(new Match("LeaveAppDateTo", ">=", c.LeaveAppDateFrom)); //if (c.LeaveAppUnit.Equals("H")) // overlapCheckingFilter.add(new Match("LeaveAppUnit", "D")); //if (overlapDailyLeaveAppList.Count > 0) //{ // errors.addError(HROne.Translation.PageErrorMessage.ERROR_LEAVE_APP_OVERLAP); // foreach (ELeaveApplication overlapDailyLeaveApp in overlapDailyLeaveAppList) // { // ELeaveCode leaveCode = new ELeaveCode(); // leaveCode.LeaveCodeID = overlapDailyLeaveApp.LeaveCodeID; // if (ELeaveCode.db.select(dbConn, leaveCode)) // { // errors.addError("- " + overlapDailyLeaveApp.LeaveAppDateFrom.ToString("yyyy-MM-dd") + (overlapDailyLeaveApp.LeaveAppDateFrom.Equals(overlapDailyLeaveApp.LeaveAppDateTo) ? "" : " To " + overlapDailyLeaveApp.LeaveAppDateTo.ToString("yyyy-MM-dd")) + " " + leaveCode.LeaveCodeDesc); // } // } //} //if (c.LeaveAppUnit.Equals("H")) //{ // DateTime newLeaveAppTimeFrom = c.LeaveAppDateFrom.Date.Add(new TimeSpan(c.LeaveAppTimeFrom.Hour, c.LeaveAppTimeFrom.Minute, c.LeaveAppTimeFrom.Second)); // DateTime newLeaveAppTimeTo = c.LeaveAppDateTo.Date.Add(new TimeSpan(c.LeaveAppTimeTo.Hour, c.LeaveAppTimeTo.Minute, c.LeaveAppTimeTo.Second)); // while (newLeaveAppTimeFrom > newLeaveAppTimeTo) // newLeaveAppTimeTo.AddDays(1); // overlapCheckingFilter = new DBFilter(); // overlapCheckingFilter.add(new Match("EmpID", c.EmpID)); // overlapCheckingFilter.add(new Match("LeaveAppID", "<>", c.LeaveAppID)); // overlapCheckingFilter.add(new Match("LeaveAppDateFrom", "<=", c.LeaveAppDateTo)); // overlapCheckingFilter.add(new Match("LeaveAppDateTo", ">=", c.LeaveAppDateFrom)); // overlapCheckingFilter.add(new Match("LeaveAppUnit", "H")); // ArrayList leaveAppList = ELeaveApplication.db.select(dbConn, overlapCheckingFilter); // foreach (ELeaveApplication oldLeaveApp in leaveAppList) // { // DateTime oldLeaveAppTimeFrom = oldLeaveApp.LeaveAppDateFrom.Date.Add(new TimeSpan(oldLeaveApp.LeaveAppTimeFrom.Hour, oldLeaveApp.LeaveAppTimeFrom.Minute, oldLeaveApp.LeaveAppTimeFrom.Second)); // DateTime oldLeaveAppTimeTo = oldLeaveApp.LeaveAppDateTo.Date.Add(new TimeSpan(oldLeaveApp.LeaveAppTimeTo.Hour, oldLeaveApp.LeaveAppTimeTo.Minute, oldLeaveApp.LeaveAppTimeTo.Second)); // while (oldLeaveAppTimeFrom > oldLeaveAppTimeTo) // oldLeaveAppTimeTo.AddDays(1); // if (!newLeaveAppTimeFrom.Equals(newLeaveAppTimeTo) && !oldLeaveAppTimeFrom.Equals(oldLeaveAppTimeTo)) // // Only check if the following case exists // // Time A From------- Time B From ---------- Time B To ------------Time A To // if (newLeaveAppTimeFrom <= oldLeaveAppTimeFrom && oldLeaveAppTimeTo <= newLeaveAppTimeTo || oldLeaveAppTimeFrom <= newLeaveAppTimeFrom && newLeaveAppTimeTo <= oldLeaveAppTimeTo) // errors.addError(HROne.Translation.PageErrorMessage.ERROR_LEAVE_APP_TIME_OVERLAP); // } //} ArrayList overlapLeaveAppList = new ArrayList(); if (c.IsOverlapLeaveApplication(dbConn, out overlapLeaveAppList)) { string strDailyOverlapMessage = string.Empty; string strHourlyOverlapMessage = string.Empty; foreach (ELeaveApplication overlapLeaveApp in overlapLeaveAppList) { if (overlapLeaveApp.LeaveAppUnit.Equals("D") || c.LeaveAppUnit.Equals("D")) { if (string.IsNullOrEmpty(strDailyOverlapMessage)) { strDailyOverlapMessage = HROne.Translation.PageErrorMessage.ERROR_LEAVE_APP_OVERLAP; } ELeaveCode errorLeaveCode = new ELeaveCode(); errorLeaveCode.LeaveCodeID = overlapLeaveApp.LeaveCodeID; if (ELeaveCode.db.select(dbConn, errorLeaveCode)) { // Start 0000201, Ricky So, 2015-06-02 //strDailyOverlapMessage += "\n- " + overlapLeaveApp.LeaveAppDateFrom.ToString("yyyy-MM-dd") + // (overlapLeaveApp.LeaveAppDateFrom.Equals(overlapLeaveApp.LeaveAppDateTo) ? "" : " To " + // overlapLeaveApp.LeaveAppDateTo.ToString("yyyy-MM-dd")) + " " + // errorLeaveCode.LeaveCodeDesc; strDailyOverlapMessage += "\n- " + overlapLeaveApp.LeaveAppDateFrom.ToString("yyyy-MM-dd"); if (overlapLeaveApp.LeaveAppUnit == "A") { strDailyOverlapMessage += "AM"; } else if (overlapLeaveApp.LeaveAppUnit == "P") { strDailyOverlapMessage += "PM"; } else if (overlapLeaveApp.LeaveAppUnit == "D" && !string.IsNullOrEmpty(overlapLeaveApp.LeaveAppDateFromAM)) { strDailyOverlapMessage += overlapLeaveApp.LeaveAppDateFromAM; } else if (overlapLeaveApp.LeaveAppDateFrom.Equals(overlapLeaveApp.LeaveAppDateTo)) { strDailyOverlapMessage += " To " + overlapLeaveApp.LeaveAppDateTo.ToString("yyyy-MM-dd"); } if (overlapLeaveApp.LeaveAppUnit == "D" && !string.IsNullOrEmpty(overlapLeaveApp.LeaveAppDateToAM)) { strDailyOverlapMessage += overlapLeaveApp.LeaveAppDateToAM; } else { strDailyOverlapMessage += " " + errorLeaveCode.LeaveCodeDesc; } // End 0000201, Ricky So, 2015-06-02 } } else { if (string.IsNullOrEmpty(strHourlyOverlapMessage)) { strHourlyOverlapMessage = HROne.Translation.PageErrorMessage.ERROR_LEAVE_APP_TIME_OVERLAP; } } } if (!string.IsNullOrEmpty(strDailyOverlapMessage)) { errors.addError(strDailyOverlapMessage); } if (!string.IsNullOrEmpty(strHourlyOverlapMessage)) { errors.addError(strHourlyOverlapMessage); } } ELeaveCode leaveCode = new ELeaveCode(); leaveCode.LeaveCodeID = c.LeaveCodeID; if (ELeaveCode.db.select(dbConn, leaveCode)) { if (leaveCode.LeaveCodeIsSkipPayrollProcess) { c.LeaveAppNoPayProcess = true; } } if (!errors.isEmpty()) { return; } WebUtils.StartFunction(Session, FUNCTION_CODE, c.EmpID); //LeaveBalanceCalc leaaveBalCal = new LeaveBalanceCalc(dbConn, c.EmpID); if (CurID < 0) { // Utils.MarkCreate(Session, c); db.insert(dbConn, c); CurID = c.LeaveAppID; //leaaveBalCal.RecalculateAfter(c.LeaveAppDateFrom, leaveCode.LeaveTypeID); // url = Utils.BuildURL(-1, CurID); } else { // Utils.Mark(Session, c); //ELeaveApplication leaveBalApp = new ELeaveApplication(); //leaveBalApp.LeaveAppID = CurID; //db.select(dbConn, leaveBalApp); db.update(dbConn, c); //leaaveBalCal.RecalculateAfter(leaveBalApp.LeaveAppDateFrom < c.LeaveAppDateFrom ? leaveBalApp.LeaveAppDateFrom : c.LeaveAppDateFrom); } WebUtils.EndFunction(dbConn); HROne.Common.WebUtility.RedirectURLwithEncryptedQueryString(Response, Session, "Emp_LeaveApplication_View.aspx?EmpID=" + c.EmpID + "&LeaveAppID=" + CurID); }
//private static double CalculateProrataFactor(int EmpID, EPayrollPeriod payrollPeriod) //{ // EEmpPersonalInfo oEmp = new EEmpPersonalInfo(); // oEmp.EmpID = EmpID; // EEmpPersonalInfo.db.select(dbConn, oEmp); // DateTime dt1AgeMin = oEmp.EmpDateOfBirth.AddYears(AGE_MINIMUM); // DateTime dt1AgeMax = oEmp.EmpDateOfBirth.AddYears(AGE_MAXIMUM); // EEmpTermination empTermination = EEmpTermination.GetObjectByEmpID(dbConn, EmpID); // bool blnTerminated; // if (empTermination != null) // { // if (empTermination.EmpTermLastDate <= payrollPeriod.PayPeriodTo && empTermination.EmpTermLastDate >= payrollPeriod.PayPeriodFr) // blnTerminated = true; // else // blnTerminated = false; // } // else // blnTerminated = false; // double prorataFactor = 1; // if (oEmp.EmpDateOfJoin < dt1AgeMin) // { // if (dt1AgeMin <= payrollPeriod.PayPeriodTo && dt1AgeMin >= payrollPeriod.PayPeriodFr) // { // if (blnTerminated) // prorataFactor = (double)(empTermination.EmpTermLastDate.Subtract(dt1AgeMin).Days + 1) / (empTermination.EmpTermLastDate.Subtract(payrollPeriod.PayPeriodFr > oEmp.EmpDateOfJoin ? payrollPeriod.PayPeriodFr : oEmp.EmpDateOfJoin).Days + 1); // else // prorataFactor = (double)(payrollPeriod.PayPeriodTo.Subtract(dt1AgeMin).Days + 1) / (payrollPeriod.PayPeriodTo.Subtract(payrollPeriod.PayPeriodFr > oEmp.EmpDateOfJoin ? payrollPeriod.PayPeriodFr : oEmp.EmpDateOfJoin).Days + 1); // } // if (dt1AgeMin >= payrollPeriod.PayPeriodTo) // prorataFactor = 0; // } // if (dt1AgeMax <= payrollPeriod.PayPeriodTo && dt1AgeMax >= payrollPeriod.PayPeriodFr) // { // if (blnTerminated) // { // if (empTermination.EmpTermLastDate < dt1AgeMax) // prorataFactor = 1; // else // prorataFactor = 1.0 - (double)(empTermination.EmpTermLastDate.Subtract(dt1AgeMax).Days + 1) / (empTermination.EmpTermLastDate.Subtract(payrollPeriod.PayPeriodFr > oEmp.EmpDateOfJoin ? payrollPeriod.PayPeriodFr : oEmp.EmpDateOfJoin).Days + 1); // } // else // prorataFactor = 1.0 - (double)(payrollPeriod.PayPeriodTo.Subtract(dt1AgeMax).Days + 1) / (payrollPeriod.PayPeriodTo.Subtract(payrollPeriod.PayPeriodFr > oEmp.EmpDateOfJoin ? payrollPeriod.PayPeriodFr : oEmp.EmpDateOfJoin).Days + 1); // } // if (dt1AgeMax <= payrollPeriod.PayPeriodFr) // prorataFactor = 0; // return prorataFactor; //} private static EORSORecord CreateORSORecord(DatabaseConnection dbConn, int EmpID, EPayrollPeriod payrollPeriod, ArrayList paymentRecords, DateTime ORSOJoinDate, ORSOJoinType ORSOJoinType, EMPFRecord mpfRecord) { //double RIProrateFactor = CalculateProrataFactor(EmpID, payrollPeriod); EORSORecord orsoRecord = new EORSORecord(); switch (ORSOJoinType) { case ORSOJoinType.NewJoin: orsoRecord.ORSORecType = "N"; break; case ORSOJoinType.Existing: orsoRecord.ORSORecType = "E"; break; //case ORSOJoinType.Terminated: // ORSORecord.ORSORecType = "T"; //break; } orsoRecord.ORSORecCalRI = 0; orsoRecord.ORSOPlanID = GetORSOPlanID(dbConn, EmpID, payrollPeriod.PayPeriodTo); if (orsoRecord.ORSOPlanID > 0) { EEmpPersonalInfo oEmp = new EEmpPersonalInfo(); oEmp.EmpID = EmpID; EEmpPersonalInfo.db.select(dbConn, oEmp); //DateTime dt1Age18 = oEmp.EmpDateOfBirth.AddYears(18); //DateTime dt1Age65 = oEmp.EmpDateOfBirth.AddYears(65); EEmpTermination empTermination = EEmpTermination.GetObjectByEmpID(dbConn, EmpID); orsoRecord.ORSORecPeriodFr = payrollPeriod.PayPeriodFr; orsoRecord.ORSORecPeriodTo = payrollPeriod.PayPeriodTo; if (orsoRecord.ORSORecPeriodFr > oEmp.EmpDateOfJoin && orsoRecord.ORSORecPeriodTo < oEmp.EmpDateOfJoin) { orsoRecord.ORSORecPeriodFr = oEmp.EmpDateOfJoin; } //if (ORSORecord.ORSORecPeriodFr > dt1Age18 && ORSORecord.ORSORecPeriodTo < dt1Age18) // ORSORecord.ORSORecPeriodFr = dt1Age18; if (empTermination != null) { // Start 0000186, Ricky So, 2016/04/15 // incomplete month --> no orso contribution if (orsoRecord.ORSORecPeriodTo > empTermination.EmpTermLastDate && orsoRecord.ORSORecPeriodFr <= empTermination.EmpTermLastDate) { orsoRecord.ORSORecPeriodTo = empTermination.EmpTermLastDate; orsoRecord.ORSORecActEE = 0; orsoRecord.ORSORecActER = 0; orsoRecord.ORSORecActRI = 0; orsoRecord.ORSORecCalEE = 0; orsoRecord.ORSORecCalER = 0; orsoRecord.ORSORecCalRI = 0; return(orsoRecord); } // End 0000186, Ricky So, 2016/04/15 if (orsoRecord.ORSORecPeriodTo < empTermination.EmpTermLastDate && orsoRecord.ORSORecPeriodFr >= empTermination.EmpTermLastDate) { orsoRecord.ORSORecPeriodTo = empTermination.EmpTermLastDate; } } //if (ORSORecord.ORSORecPeriodTo < dt1Age65 && ORSORecord.ORSORecPeriodFr > dt1Age65) // ORSORecord.ORSORecPeriodTo = dt1Age65; foreach (EPaymentRecord paymentRecord in paymentRecords) { EPaymentCode paymentCode = new EPaymentCode(); paymentCode.PaymentCodeID = paymentRecord.PaymentCodeID; EPaymentCode.db.select(dbConn, paymentCode); if (paymentCode.PaymentCodeIsORSO) { orsoRecord.ORSORecCalRI += paymentRecord.PayRecActAmount; } } orsoRecord.ORSORecActRI = orsoRecord.ORSORecCalRI; if (orsoRecord.ORSOPlanID > 0) { DBFilter oldORSORecordFilter = new DBFilter(); DBFilter empIDFilter = new DBFilter(); empIDFilter.add(new Match("EmpID", EmpID)); oldORSORecordFilter.add(new IN("EmpPayrollID", "Select EmpPayrollID from EMPPayroll ", empIDFilter)); oldORSORecordFilter.add(new Match("ORSORecPeriodFr", "<=", orsoRecord.ORSORecPeriodTo)); oldORSORecordFilter.add(new Match("ORSORecPeriodTo", ">=", orsoRecord.ORSORecPeriodFr)); ArrayList oldORSORecords = EORSORecord.db.select(dbConn, oldORSORecordFilter); EORSORecord oldTotalORSORecord = new EORSORecord(); EORSORecord newTotalORSORecord = new EORSORecord(); foreach (EORSORecord oldORSORecord in oldORSORecords) { oldTotalORSORecord.ORSORecActRI += oldORSORecord.ORSORecActRI; oldTotalORSORecord.ORSORecActER += oldORSORecord.ORSORecActER; oldTotalORSORecord.ORSORecActEE += oldORSORecord.ORSORecActEE; } newTotalORSORecord.ORSORecCalRI = oldTotalORSORecord.ORSORecActRI + orsoRecord.ORSORecCalRI; newTotalORSORecord.ORSORecCalER = CalculateERAmount(dbConn, oEmp, orsoRecord.ORSOPlanID, newTotalORSORecord.ORSORecCalRI, payrollPeriod, mpfRecord); newTotalORSORecord.ORSORecCalEE = CalculateEEAmount(dbConn, oEmp, orsoRecord.ORSOPlanID, newTotalORSORecord.ORSORecCalRI, payrollPeriod, ORSOJoinDate, mpfRecord); orsoRecord.ORSORecCalER = newTotalORSORecord.ORSORecCalER - oldTotalORSORecord.ORSORecActER; orsoRecord.ORSORecCalEE = newTotalORSORecord.ORSORecCalEE - oldTotalORSORecord.ORSORecActEE; orsoRecord.ORSORecActER = Math.Round(orsoRecord.ORSORecCalER, 2, MidpointRounding.AwayFromZero); orsoRecord.ORSORecActEE = Math.Round(orsoRecord.ORSORecCalEE, 2, MidpointRounding.AwayFromZero); EORSOPlan orsoPlan = new EORSOPlan(); orsoPlan.ORSOPlanID = orsoRecord.ORSOPlanID; if (EORSOPlan.db.select(dbConn, orsoPlan)) { if (string.IsNullOrEmpty(orsoPlan.ORSOPlanEmployerRoundingRule)) { orsoPlan.ORSOPlanEmployerRoundingRule = Values.ROUNDING_RULE_ROUND_TO; orsoPlan.ORSOPlanEmployerDecimalPlace = 2; } if (orsoPlan.ORSOPlanEmployerRoundingRule.Equals(Values.ROUNDING_RULE_ROUND_TO)) { orsoRecord.ORSORecActER = HROne.CommonLib.GenericRoundingFunctions.RoundingTo(orsoRecord.ORSORecCalER, orsoPlan.ORSOPlanEmployerDecimalPlace, ExchangeCurrency.DefaultCurrencyDecimalPlaces()); } else if (orsoPlan.ORSOPlanEmployerRoundingRule.Equals(Values.ROUNDING_RULE_ROUND_UP)) { orsoRecord.ORSORecActER = HROne.CommonLib.GenericRoundingFunctions.RoundingUp(orsoRecord.ORSORecCalER, orsoPlan.ORSOPlanEmployerDecimalPlace, ExchangeCurrency.DefaultCurrencyDecimalPlaces()); } else if (orsoPlan.ORSOPlanEmployerRoundingRule.Equals(Values.ROUNDING_RULE_ROUND_DOWN)) { orsoRecord.ORSORecActER = HROne.CommonLib.GenericRoundingFunctions.RoundingDown(orsoRecord.ORSORecCalER, orsoPlan.ORSOPlanEmployerDecimalPlace, ExchangeCurrency.DefaultCurrencyDecimalPlaces()); } if (string.IsNullOrEmpty(orsoPlan.ORSOPlanEmployeeRoundingRule)) { orsoPlan.ORSOPlanEmployeeRoundingRule = Values.ROUNDING_RULE_ROUND_TO; orsoPlan.ORSOPlanEmployeeDecimalPlace = 2; } if (orsoPlan.ORSOPlanEmployeeRoundingRule.Equals(Values.ROUNDING_RULE_ROUND_TO)) { orsoRecord.ORSORecActEE = HROne.CommonLib.GenericRoundingFunctions.RoundingTo(orsoRecord.ORSORecCalEE, orsoPlan.ORSOPlanEmployeeDecimalPlace, ExchangeCurrency.DefaultCurrencyDecimalPlaces()); } else if (orsoPlan.ORSOPlanEmployeeRoundingRule.Equals(Values.ROUNDING_RULE_ROUND_UP)) { orsoRecord.ORSORecActEE = HROne.CommonLib.GenericRoundingFunctions.RoundingUp(orsoRecord.ORSORecCalEE, orsoPlan.ORSOPlanEmployeeDecimalPlace, ExchangeCurrency.DefaultCurrencyDecimalPlaces()); } else if (orsoPlan.ORSOPlanEmployeeRoundingRule.Equals(Values.ROUNDING_RULE_ROUND_DOWN)) { orsoRecord.ORSORecActEE = HROne.CommonLib.GenericRoundingFunctions.RoundingDown(orsoRecord.ORSORecCalEE, orsoPlan.ORSOPlanEmployeeDecimalPlace, ExchangeCurrency.DefaultCurrencyDecimalPlaces()); } } } return(orsoRecord); } else { return(null); } }
protected DataTable LoadORSODetail() { DataTable _table = new DataSet.Payroll_MPFRemittanceStatement.ExistingMemberDataTable(); DBFilter _payPeriodFilter = new DBFilter(); _payPeriodFilter.add(new Match("PayPeriodFr", "<=", this.PayPeriodTo)); _payPeriodFilter.add(new Match("PayPeriodTo", ">=", this.PayPeriodFr)); DBFilter _empPayrollFilter = new DBFilter(); _empPayrollFilter.add(new IN("PayPeriodID", "SELECT PayPeriodID FROM PayrollPeriod", _payPeriodFilter)); DBFilter _orsoRecordFilter = new DBFilter(); _orsoRecordFilter.add(new Match("ORSOPlanID", this.ORSOPlanID)); _orsoRecordFilter.add(new IN("EmpPayrollID", "SELECT EmpPayrollID FROM EmpPayroll", _empPayrollFilter)); foreach (EORSORecord _orsoRecord in EORSORecord.db.select(dbConn, _orsoRecordFilter)) { DataRow _newRow = _table.NewRow(); EEmpPayroll _payroll = EEmpPayroll.GetObject(dbConn, _orsoRecord.EmpPayrollID); EEmpPersonalInfo _empInfo = EEmpPersonalInfo.GetObject(dbConn, _payroll.EmpID); _newRow["EmpID"] = _empInfo.EmpID; _newRow["MPFPlanID"] = _orsoRecord.ORSOPlanID; _newRow["EmpNo"] = _empInfo.EmpNo; _newRow["EmpName"] = _empInfo.EmpEngFullName; _newRow["SchemeJoinDate"] = _empInfo.EmpDateOfJoin; if (string.IsNullOrEmpty(_empInfo.EmpHKID)) { _newRow["HKID"] = _empInfo.EmpPassportNo; } else { _newRow["HKID"] = _empInfo.EmpHKID; } _newRow["PeriodFrom"] = _orsoRecord.ORSORecPeriodFr; _newRow["PeriodTo"] = _orsoRecord.ORSORecPeriodTo; _newRow["RelevantIncome"] = 0; //_orsoRecord.ORSORecActRI; _newRow["MCEE"] = _orsoRecord.ORSORecActEE; _newRow["MCER"] = _orsoRecord.ORSORecActER; _newRow["VCEE"] = 0; _newRow["VCER"] = 0; EEmpTermination _empTermination = EEmpTermination.GetObjectByEmpID(dbConn, _empInfo.EmpID); if (_empTermination != null && _empTermination.EmpTermLastDate.Ticks != 0) { _newRow["LastEmploymentDate"] = _empTermination.EmpTermLastDate; _newRow["IsBackPayRecord"] = (_empTermination.EmpTermLastDate > this.PayPeriodFr); } else { _newRow["LastEmploymentDate"] = DBNull.Value; _newRow["IsBackPayRecord"] = false; } _newRow["IsLSP"] = false; _newRow["IsSP"] = false; _newRow["LSPSPAmount"] = 0; _newRow["LSPSPAmountPaidByER"] = 0; _table.Rows.Add(_newRow); } return(_table); }