protected bool loadObject() { obj = new EEmpTermination(); DBFilter filter = new DBFilter(); filter.add(new Match("EmpID", CurID)); ArrayList list = db.select(dbConn, filter); if (list.Count == 0) { return(false); } obj = (EEmpTermination)list[0]; Hashtable values = new Hashtable(); db.populate(obj, values); binding.toControl(values); if (!obj.EmpTermResignDate.Ticks.Equals(0) && obj.EmpTermNoticePeriod >= 0 && obj.EmpTermNoticeUnit != string.Empty) { ExpectedLastDate.Text = obj.GetExpectedLastEmploymentDate().ToString("yyyy-MM-dd"); } return(true); }
private void LoadExistingMemberRowInfo(EEmpPersonalInfo empInfo, EORSORecord mpfRecord, DataSet.Payroll_ORSOStatement.ExistingMemberRow existingORSORow) { existingORSORow.EmpID = empInfo.EmpID; existingORSORow.EmpNo = empInfo.EmpNo; existingORSORow.HKID = empInfo.EmpHKID.Length < 7 ? empInfo.EmpPassportNo : empInfo.EmpHKID; existingORSORow.EmpName = empInfo.EmpEngFullName; existingORSORow.PeriodFrom = mpfRecord.ORSORecPeriodFr; existingORSORow.PeriodTo = mpfRecord.ORSORecPeriodTo; existingORSORow.ORSOPlanID = mpfRecord.ORSOPlanID; existingORSORow.RelevantIncome = 0; existingORSORow.EE = 0; existingORSORow.EE = 0; existingORSORow.ER = 0; existingORSORow.ER = 0; DBFilter empTerminationFilter = new DBFilter(); empTerminationFilter.add(new Match("EmpID", empInfo.EmpID)); empTerminationFilter.add(new Match("EmpTermLastDate", "<=", mpfRecord.ORSORecPeriodTo)); empTerminationFilter.add(new Match("EmpTermLastDate", ">=", mpfRecord.ORSORecPeriodFr)); ArrayList empTerminations = EEmpTermination.db.select(dbConn, empTerminationFilter); if (empTerminations.Count > 0) { EEmpTermination empTermination = (EEmpTermination)empTerminations[0]; existingORSORow.LastEmploymentDate = empTermination.EmpTermLastDate; ECessationReason cessationReason = new ECessationReason(); cessationReason.CessationReasonID = empTermination.CessationReasonID; ECessationReason.db.select(dbConn, cessationReason); existingORSORow.TermCode = cessationReason.CessationReasonCode; } }
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 void btnGenerate_Click(object sender, EventArgs e) { PageErrors errors = PageErrors.getErrors(db, Page.Master); errors.clear(); ArrayList empTermList = new ArrayList(); foreach (RepeaterItem item in Repeater.Items) { CheckBox cb = (CheckBox)item.FindControl("ItemSelect"); if (cb.Checked) { EEmpTermination et = new EEmpTermination(); WebFormUtils.GetKeys(EEmpTermination.db, et, cb); empTermList.Add(et); } } string strTermEmpList = string.Empty; if (empTermList.Count > 0) { //foreach (EEmpTermination o in empTermList) //{ // if (strTermEmpList == string.Empty) // strTermEmpList = o.EmpTermID.ToString(); // else // strTermEmpList += "_" + o.EmpTermID.ToString(); //} } else { errors.addError("Employee not selected"); } if (errors.isEmpty()) { HROne.Reports.Employee.TerminationListProcess rpt = new HROne.Reports.Employee.TerminationListProcess(dbConn, empTermList); string reportFileName = WebUtils.GetLocalizedReportFile(Server.MapPath("~/Report_Employee_TerminationList.rpt")); WebUtils.ReportExport(dbConn, user, errors, lblReportHeader.Text, Response, rpt, reportFileName, ((Button)sender).CommandArgument, "TerminationList", true); //Server.Transfer("Report_Employee_TerminationList_View.aspx?" //+ "EmpTermID=" + strTermEmpList //); } // emploadData(empInfo, EEmpPayroll.db, empRepeater); }
public void ImportToDatabase(int UploadEmpID) { DBFilter sessionFilter = new DBFilter(); sessionFilter.add(new Match("SessionID", m_SessionID)); if (UploadEmpID > 0) { sessionFilter.add(new Match("UploadEmpID", UploadEmpID)); } ArrayList uploadEmpTerminationList = tempDB.select(dbConn, sessionFilter); foreach (EUploadEmpTermination obj in uploadEmpTerminationList) { EEmpTermination empTermination = new EEmpTermination(); if (obj.ImportActionStatus != ImportDBObject.ImportActionEnum.INSERT) { empTermination.EmpTermID = obj.EmpTermID; uploadDB.select(dbConn, empTermination); } obj.ExportToObject(empTermination); if (obj.ImportActionStatus == ImportDBObject.ImportActionEnum.INSERT) { empTermination.EmpID = ParseTemp.GetEmpIDFromUploadEmpID(dbConn, obj.UploadEmpID); uploadDB.insert(dbConn, empTermination); // Upload Employee Status to Terminated EEmpPersonalInfo empInfo = new EEmpPersonalInfo(); empInfo.EmpID = empTermination.EmpID; empInfo.EmpStatus = "T"; EEmpPersonalInfo.db.update(dbConn, empInfo); } else if (obj.ImportActionStatus == ImportDBObject.ImportActionEnum.UPDATE) { uploadDB.update(dbConn, empTermination); // Upload Employee Status to Terminated EEmpPersonalInfo empInfo = new EEmpPersonalInfo(); empInfo.EmpID = empTermination.EmpID; empInfo.EmpStatus = "T"; EEmpPersonalInfo.db.update(dbConn, empInfo); } tempDB.delete(dbConn, obj); } }
protected void UpdateLastDate() { EEmpTermination c = new EEmpTermination(); Hashtable values = new Hashtable(); binding.toValues(values); db.parse(values, c); if (!c.EmpTermResignDate.Ticks.Equals(0) && c.EmpTermNoticePeriod >= 0 && c.EmpTermNoticeUnit != string.Empty) { EmpTermLastDate.Value = c.GetExpectedLastEmploymentDate().ToString("yyyy-MM-dd"); ExpectedLastDate.Text = c.GetExpectedLastEmploymentDate().ToString("yyyy-MM-dd"); } else { ExpectedLastDate.Text = string.Empty; } }
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); }
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 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); }
protected bool loadObject() { DBFilter filter = new DBFilter(); filter.add(new Match("EmpID", CurEmpID)); filter.add(WebUtils.AddRankFilter(Session, "EmpID", true)); if (EEmpPersonalInfo.db.count(dbConn, filter) == 0) { if (CurEmpID <= 0) { return(false); } else { HROne.Common.WebUtility.RedirectURLwithEncryptedQueryString(Response, Session, "~/AccessDeny.aspx"); } } DBFilter empTermFilter = new DBFilter(); empTermFilter.add(new Match("EmpID", CurEmpID)); ArrayList list = db.select(dbConn, empTermFilter); if (list.Count == 0) { obj = new EEmpTermination(); obj.EmpID = CurEmpID; obj.EmpTermID = -1; EEmpPersonalInfo p = new EEmpPersonalInfo(); p.EmpID = CurEmpID; EEmpPersonalInfo.db.select(dbConn, p); if (p.EmpNoticePeriod == 0 && p.EmpNoticeUnit == "") { obj.EmpTermNoticePeriod = 1; obj.EmpTermNoticeUnit = "D"; } else { obj.EmpTermNoticePeriod = p.EmpNoticePeriod; obj.EmpTermNoticeUnit = p.EmpNoticeUnit; } } else { obj = (EEmpTermination)list[0]; CurID = obj.EmpTermID; } if (!obj.EmpTermResignDate.Ticks.Equals(0) && obj.EmpTermNoticePeriod >= 0 && obj.EmpTermNoticeUnit != string.Empty) { ExpectedLastDate.Text = obj.GetExpectedLastEmploymentDate().ToString("yyyy-MM-dd"); } Hashtable values = new Hashtable(); db.populate(obj, values); binding.toControl(values); return(true); }
protected void Save_Click(object sender, EventArgs e) { EEmpTermination c = new EEmpTermination(); 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); //EEmpTermination i = new EEmpTermination(); //i.EmpTermID = c.EmpTermID; //if (c.EmpTermID >= 0) // db.select(dbConn, i); //if (c.EmpTermID < 0 || i.EmpTermNoticePeriod != c.EmpTermNoticePeriod || !i.EmpTermNoticeUnit.Equals(c.EmpTermNoticeUnit) || !i.EmpTermResignDate.Equals(c.EmpTermResignDate)) //{ // if ("D".Equals(c.EmpTermNoticeUnit)) // c.EmpTermLastDate = c.EmpTermResignDate.AddDays(c.EmpTermNoticePeriod - 1); // else // c.EmpTermLastDate = c.EmpTermResignDate.AddMonths(c.EmpTermNoticePeriod ).AddDays(-1); //} WebUtils.StartFunction(Session, FUNCTION_CODE, c.EmpID); if (c.EmpTermID < 0) { DBFilter filter = new DBFilter(); filter.add(new Match("EmpID", c.EmpID)); ArrayList list = db.select(dbConn, filter); if (list.Count > 0) { c.EmpTermID = ((EEmpTermination)list[0]).EmpTermID; db.update(dbConn, c); } else { db.insert(dbConn, c); } CurID = c.EmpTermID; } else { // Utils.Mark(Session, c); db.update(dbConn, c); } WebUtils.EndFunction(dbConn); EEmpPersonalInfo pi = new EEmpPersonalInfo(); pi.EmpID = CurEmpID; EEmpPersonalInfo.db.select(dbConn, pi); pi.EmpStatus = "T"; EEmpPersonalInfo.db.update(dbConn, pi); db.select(dbConn, c); if (c.EmpTermIsTransferCompany && c.NewEmpID <= 0) { HROne.Common.WebUtility.RedirectURLwithEncryptedQueryString(Response, Session, "Emp_TransferCompany.aspx?EmpID=" + c.EmpID); } else { HROne.Common.WebUtility.RedirectURLwithEncryptedQueryString(Response, Session, "EmpTab_Termination_View.aspx?EmpID=" + c.EmpID); } }
public DataTable UploadToTempDatabase(DataTable rawDataTable, int UserID, bool CreateCodeIfNotExists) { if (rawDataTable == null) { return(GetImportDataFromTempDatabase(null)); } int rowCount = 1; foreach (DataRow row in rawDataTable.Rows) { rowCount++; EUploadEmpTermination uploadEmpTermination = new EUploadEmpTermination(); EEmpTermination lastEmpTermination = null; string EmpNo = row[FIELD_EMP_NO].ToString().Trim(); uploadEmpTermination.EmpID = Parse.GetEmpID(dbConn, EmpNo, UserID); if (uploadEmpTermination.EmpID < 0) { errors.addError(ImportErrorMessage.ERROR_ACCESS_DENIED_EMP_NO, new string[] { EmpNo, rowCount.ToString() }); } uploadEmpTermination.CessationReasonID = Parse.GetCessationReasonID(dbConn, row[FIELD_CESSATION_REASON].ToString(), CreateCodeIfNotExists, UserID); if (uploadEmpTermination.CessationReasonID <= 0) { errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_CESSATION_REASON + "=" + row[FIELD_CESSATION_REASON].ToString(), EmpNo, rowCount.ToString() }); } try { uploadEmpTermination.EmpTermResignDate = Parse.toDateTimeObject(row[FIELD_RESIGN_DATE]); } catch { errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_RESIGN_DATE + "=" + row[FIELD_RESIGN_DATE].ToString(), EmpNo, rowCount.ToString() }); } if (uploadEmpTermination.EmpTermResignDate.Ticks.Equals(0)) { errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_RESIGN_DATE + "=" + row[FIELD_RESIGN_DATE].ToString(), EmpNo, rowCount.ToString() }); } string tempString; tempString = row[FIELD_NOTICE_PERIOD_UNIT].ToString().Replace(" ", ""); if (tempString.Equals("Days", StringComparison.CurrentCultureIgnoreCase) || tempString.Equals("Day", StringComparison.CurrentCultureIgnoreCase) || tempString.Equals("D", StringComparison.CurrentCultureIgnoreCase)) { uploadEmpTermination.EmpTermNoticeUnit = "D"; } else if (tempString.Equals("Months", StringComparison.CurrentCultureIgnoreCase) || tempString.Equals("Month", StringComparison.CurrentCultureIgnoreCase) || tempString.Equals("M", StringComparison.CurrentCultureIgnoreCase)) { uploadEmpTermination.EmpTermNoticeUnit = "M"; } else if (tempString.Equals(string.Empty)) { uploadEmpTermination.EmpTermNoticeUnit = string.Empty; } else { uploadEmpTermination.EmpTermNoticeUnit = string.Empty; errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_NOTICE_PERIOD_UNIT + "=" + row[FIELD_NOTICE_PERIOD_UNIT].ToString(), EmpNo, rowCount.ToString() }); } int period = 0; if (int.TryParse(row[FIELD_NOTICE_PERIOD].ToString(), out period)) { uploadEmpTermination.EmpTermNoticePeriod = period; } else if (uploadEmpTermination.EmpTermNoticeUnit.Equals(string.Empty)) { if (uploadEmpTermination.EmpID > 0) { // Get Notice Period from EmpInfo EEmpPersonalInfo empinfo = new EEmpPersonalInfo(); empinfo.EmpID = uploadEmpTermination.EmpID; EEmpPersonalInfo.db.select(dbConn, empinfo); if (!empinfo.EmpNoticeUnit.Equals(string.Empty)) { uploadEmpTermination.EmpTermNoticeUnit = empinfo.EmpNoticeUnit; uploadEmpTermination.EmpTermNoticePeriod = empinfo.EmpNoticePeriod; } else { errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_NOTICE_PERIOD + "='" + row[FIELD_NOTICE_PERIOD].ToString() + "'", EmpNo, rowCount.ToString() }); errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_NOTICE_PERIOD_UNIT + "='" + row[FIELD_NOTICE_PERIOD_UNIT].ToString() + "'", EmpNo, rowCount.ToString() }); } } } else { errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_NOTICE_PERIOD + "='" + row[FIELD_NOTICE_PERIOD].ToString() + "'", EmpNo, rowCount.ToString() }); } try { uploadEmpTermination.EmpTermLastDate = Parse.toDateTimeObject(row[FIELD_LAST_DATE]); } catch { errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_LAST_DATE + "=" + row[FIELD_LAST_DATE].ToString(), EmpNo, rowCount.ToString() }); } if (uploadEmpTermination.EmpTermLastDate.Ticks == 0) { if (uploadEmpTermination.EmpTermNoticeUnit.Equals("M")) { uploadEmpTermination.EmpTermLastDate = uploadEmpTermination.EmpTermResignDate.AddMonths(uploadEmpTermination.EmpTermNoticePeriod).AddDays(-1); } else if (uploadEmpTermination.EmpTermNoticeUnit.Equals("D")) { uploadEmpTermination.EmpTermLastDate = uploadEmpTermination.EmpTermResignDate.AddDays(uploadEmpTermination.EmpTermNoticePeriod).AddDays(-1); } else { errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_LAST_DATE + "='" + row[FIELD_LAST_DATE].ToString() + "'", EmpNo, rowCount.ToString() }); } } if (rawDataTable.Columns.Contains(FIELD_NEW_EMP_NO)) { if (!string.IsNullOrEmpty(row[FIELD_NEW_EMP_NO].ToString())) { // Use UserID = 0 to allow searching all EmpID int newEmpID = Parse.GetEmpID(dbConn, row[FIELD_NEW_EMP_NO].ToString().Trim(), 0); if (newEmpID > 0) { if (newEmpID != uploadEmpTermination.EmpID) { uploadEmpTermination.EmpTermIsTransferCompany = true; uploadEmpTermination.NewEmpID = newEmpID; } else { errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_NEW_EMP_NO + "='" + row[FIELD_NEW_EMP_NO].ToString() + "'", EmpNo, rowCount.ToString() }); } } else { errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_NEW_EMP_NO + "='" + row[FIELD_NEW_EMP_NO].ToString() + "'", EmpNo, rowCount.ToString() }); } } } uploadEmpTermination.EmpTermRemark = row[FIELD_REMARK].ToString(); uploadEmpTermination.SessionID = m_SessionID; uploadEmpTermination.TransactionDate = UploadDateTime; if (uploadEmpTermination.EmpID != 0) { //if (rawDataTable.Columns.Contains(FIELD_INTERNAL_ID)) //{ // try // { // if (!row.IsNull(FIELD_INTERNAL_ID)) // { // int tmpID = FromHexDecWithCheckDigit((string)row[FIELD_INTERNAL_ID]); // EEmpTermination tmpObj = new EEmpTermination(); // tmpObj.EmpTermID = tmpID; // if (EEmpTermination.db.select(dbConn, tmpObj)) // uploadEmpTermination.EmpTermID = tmpID; // else // { // errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_INTERNAL_ID + "=" + row[FIELD_INTERNAL_ID].ToString(), EmpNo, rowCount.ToString() }); // continue; // } // } // } // catch (Exception ex) // { // errors.addError(ImportErrorMessage.ERROR_INVALID_FIELD_VALUE, new string[] { FIELD_INTERNAL_ID + "=" + row[FIELD_INTERNAL_ID].ToString(), EmpNo, rowCount.ToString() }); // continue; // } //} if (rawDataTable.Columns.Contains(FIELD_SYNC_ID)) { if (!row.IsNull(FIELD_SYNC_ID)) { string strSynID = row[FIELD_SYNC_ID].ToString(); uploadEmpTermination.SynID = strSynID; if (!string.IsNullOrEmpty(strSynID)) { DBFilter synIDFilter = new DBFilter(); synIDFilter.add(new Match("SynID", strSynID)); ArrayList objSameSynIDList = EEmpTermination.db.select(dbConn, synIDFilter); if (objSameSynIDList.Count > 0) { uploadEmpTermination.EmpTermID = ((EEmpTermination)objSameSynIDList[0]).EmpTermID; } } } } if (uploadEmpTermination.EmpTermID == 0) { lastEmpTermination = (EEmpTermination)AppUtils.GetLastObj(dbConn, uploadDB, "EmpTermID", uploadEmpTermination.EmpID); if (lastEmpTermination != null) { if (uploadEmpTermination.CessationReasonID == lastEmpTermination.CessationReasonID && uploadEmpTermination.EmpTermResignDate == lastEmpTermination.EmpTermResignDate && uploadEmpTermination.EmpTermNoticeUnit == lastEmpTermination.EmpTermNoticeUnit && uploadEmpTermination.EmpTermNoticePeriod == lastEmpTermination.EmpTermNoticePeriod && uploadEmpTermination.EmpTermLastDate == lastEmpTermination.EmpTermLastDate && uploadEmpTermination.EmpTermRemark == lastEmpTermination.EmpTermRemark && uploadEmpTermination.NewEmpID == lastEmpTermination.NewEmpID ) { continue; } else { uploadEmpTermination.EmpTermID = lastEmpTermination.EmpTermID; } } } } if (uploadEmpTermination.EmpTermID <= 0) { uploadEmpTermination.ImportActionStatus = ImportDBObject.ImportActionEnum.INSERT; } else { uploadEmpTermination.ImportActionStatus = ImportDBObject.ImportActionEnum.UPDATE; } uploadEmpTermination.UploadEmpID = ParseTemp.GetUploadEmpID(dbConn, EmpNo, m_SessionID); if (uploadEmpTermination.UploadEmpID == 0) { if (uploadEmpTermination.EmpID == 0) { errors.addError(ImportErrorMessage.ERROR_INVALID_EMP_NO, new string[] { EmpNo, rowCount.ToString() }); } else { uploadEmpTermination.UploadEmpID = ImportEmpPersonalInfoProcess.CreateDummyUploadEmployeeInfo(dbConn, uploadEmpTermination.EmpID, m_SessionID, UploadDateTime); } } Hashtable values = new Hashtable(); tempDB.populate(uploadEmpTermination, values); PageErrors pageErrors = new PageErrors(EUploadEmpPersonalInfo.db); tempDB.validate(pageErrors, values); if (pageErrors.errors.Count == 0) { tempDB.insert(dbConn, uploadEmpTermination); } else { pageErrors.addError(rawDataTable.TableName); throw new HRImportException(pageErrors.getPrompt() + " on line " + rowCount); } } if (errors.List.Count > 0) { ClearTempTable(); throw (new HRImportException(rawDataTable.TableName + "\r\n" + errors.Message())); } return(GetImportDataFromTempDatabase(null)); }
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) { PageErrors errors = PageErrors.getErrors(db, Page.Master); errors.clear(); ArrayList empTermList = new ArrayList(); foreach (RepeaterItem item in Repeater.Items) { CheckBox cb = (CheckBox)item.FindControl("ItemSelect"); if (cb.Checked) { EEmpTermination et = new EEmpTermination(); WebFormUtils.GetKeys(EEmpTermination.db, et, cb); empTermList.Add(et); } } string strTermEmpList = string.Empty; if (empTermList.Count > 0) { //foreach (EEmpTermination o in empTermList) //{ // if (strTermEmpList == string.Empty) // strTermEmpList = o.EmpTermID.ToString(); // else // strTermEmpList += "_" + o.EmpTermID.ToString(); //} } else { errors.addError("Employee not selected"); } if (errors.isEmpty()) { ESystemParameter.setParameter(dbConn, SYSTEMPARAMETER_PREPAREDBY, txtPreparedBy.Text); ESystemParameter.setParameter(dbConn, SYSTEMPARAMETER_REVIEWEDBY, txtReviewedBy.Text); HROne.Reports.Payroll.FinalPaymentStatementProcess rpt = null; if (Payroll_PeriodSelectionList1.SelectedPayrollStatus.Equals("C")) { ArrayList payBatchList = this.Payroll_PeriodSelectionList1.GetPayBatchList(); rpt = new HROne.Reports.Payroll.FinalPaymentStatementProcess(dbConn, empTermList, null, payBatchList, HROne.Reports.Payroll.FinalPaymentStatementProcess.ReportType.History, txtPreparedBy.Text, txtReviewedBy.Text); } else if (Payroll_PeriodSelectionList1.SelectedPayrollStatus.Equals("T")) { ArrayList payPeriodList = this.Payroll_PeriodSelectionList1.GetTrialRunPayPeriodList(); rpt = new HROne.Reports.Payroll.FinalPaymentStatementProcess(dbConn, empTermList, payPeriodList, null, HROne.Reports.Payroll.FinalPaymentStatementProcess.ReportType.TrialRun, txtPreparedBy.Text, txtReviewedBy.Text); } string reportFileName = WebUtils.GetLocalizedReportFile(Server.MapPath("~/Report_Payroll_FinalPaymentStatement.rpt")); WebUtils.ReportExport(dbConn, user, errors, lblReportHeader.Text, Response, rpt, reportFileName, ((Button)sender).CommandArgument, "FinalPaymentStatement", true); //TerminationFormProcess rpt = new TerminationFormProcess(empTermList, Server.MapPath("Customize_Report_Employee_TerminationForm.xsd"), txtPreparedBy.Text, txtReviewedBy.Text, txtApprovedBy.Text); //string reportFileName = WebUtils.GetLocalizedReportFile(Server.MapPath("Customize_Report_Employee_TerminationForm.rpt")); //WebUtils.ReportExport(dbConn, user, errors, lblReportHeader.Text, Response, rpt, reportFileName, ((Button)sender).CommandArgument, "TerminationForm"); } //else // emploadData(empInfo, EEmpPayroll.db, empRepeater); }
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"); } }
//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 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 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); }
protected void Save_Click(object sender, EventArgs e) { EEmpPositionInfo newEmpPos = new EEmpPositionInfo(); Hashtable values = new Hashtable(); empPosBinding.toValues(values); PageErrors errors = PageErrors.getErrors(empPosDB, Page); errors.clear(); empPosDB.validate(errors, values); if (!errors.isEmpty()) { return; } empPosDB.parse(values, newEmpPos); int OldEmpPosID = newEmpPos.EmpPosID; EEmpPersonalInfo newEmpInfo = new EEmpPersonalInfo(); values = new Hashtable(); empBinding.toValues(values); errors = PageErrors.getErrors(empDB, Page); errors.clear(); empDB.validate(errors, values); if (!errors.isEmpty()) { return; } empDB.parse(values, newEmpInfo); int OldEmpID = newEmpInfo.EmpID; newEmpInfo.EmpID = 0; newEmpInfo.EmpNo = newEmpInfo.EmpNo.ToUpper(); if (!AppUtils.checkDuplicate(dbConn, empDB, newEmpInfo, errors, "EmpNo")) { return; } DBFilter empTermFilter = new DBFilter(); empTermFilter.add(new Match("EmpID", OldEmpID)); empTermFilter.add(WebUtils.AddRankFilter(Session, "EmpID", true)); ArrayList empTermList = EEmpTermination.db.select(dbConn, empTermFilter); if (empTermList.Count == 0) { errors.addError(HROne.Translation.PageErrorMessage.ERROR_TERMINATION_RECORD_NOT_FOUND); return; } EEmpTermination empTerm = (EEmpTermination)empTermList[0]; if (!empTerm.EmpTermIsTransferCompany) { errors.addError(HROne.Translation.PageErrorMessage.ERROR_EMP_NOT_TRANSFERABLE); return; } if (empTerm.NewEmpID >= 0) { EEmpPersonalInfo NextEmpInfo = new EEmpPersonalInfo(); NextEmpInfo.EmpID = empTerm.NewEmpID; if (EEmpPersonalInfo.db.select(dbConn, NextEmpInfo)) { errors.addError(string.Format(HROne.Translation.PageErrorMessage.ERROR_EMP_TRANSFERRED_BEFORE, new string[] { NextEmpInfo.EmpNo })); return; } } empTerm.NewEmpID = CopyEmployeeDetail(OldEmpID); EEmpTermination.db.update(dbConn, empTerm); newEmpInfo.EmpID = empTerm.NewEmpID; newEmpInfo.EmpStatus = "A"; newEmpInfo.EmpDateOfJoin = empTerm.EmpTermLastDate.AddDays(1); newEmpInfo.PreviousEmpID = OldEmpID; EEmpPersonalInfo.db.update(dbConn, newEmpInfo); EEmpPositionInfo oldEmpPos = new EEmpPositionInfo(); oldEmpPos.EmpPosID = OldEmpPosID; if (EEmpPositionInfo.db.select(dbConn, oldEmpPos)) { //oldEmpPos.EmpPosEffTo = empTerm.EmpTermLastDate; EEmpPositionInfo.db.update(dbConn, oldEmpPos); } newEmpPos.EmpPosEffFr = empTerm.EmpTermLastDate.AddDays(1); newEmpPos.EmpID = newEmpInfo.EmpID; newEmpPos.EmpPosID = 0; EEmpPositionInfo.db.insert(dbConn, newEmpPos); ArrayList list = new ArrayList(); foreach (RepeaterItem item in HierarchyLevel.Items) { DropDownList d = (DropDownList)item.FindControl("HElementID"); int HLevelID = Int32.Parse(d.Attributes["HLevelID"]); if (d.SelectedIndex > 0) { EEmpHierarchy h = new EEmpHierarchy(); h.EmpID = newEmpInfo.EmpID; h.EmpPosID = newEmpPos.EmpPosID; h.HLevelID = HLevelID; h.HElementID = Int32.Parse(d.SelectedValue); list.Add(h); } } DBFilter empHierarchyFilter = new DBFilter(); empHierarchyFilter.add(new Match("EmpID", newEmpInfo.EmpID)); empHierarchyFilter.add(new Match("EmpPosID", newEmpPos.EmpPosID)); EEmpHierarchy.db.delete(dbConn, empHierarchyFilter); foreach (EEmpHierarchy h in list) { EEmpHierarchy.db.insert(dbConn, h); } HROne.LeaveCalc.LeaveBalanceCalc bal = new HROne.LeaveCalc.LeaveBalanceCalc(dbConn, OldEmpID, empTerm.EmpTermLastDate); ArrayList balList = bal.getCurrentBalanceList(); foreach (ELeaveBalance leaveBalance in balList) { ELeaveBalanceAdjustment leaveAdj = new ELeaveBalanceAdjustment(); leaveAdj.EmpID = newEmpInfo.EmpID; leaveAdj.LeaveBalAdjDate = empTerm.EmpTermLastDate; leaveAdj.LeaveBalAdjType = ELeaveBalanceAdjustment.ADJUST_TYPE_RESET_BALANCE; leaveAdj.LeaveTypeID = leaveBalance.LeaveTypeID; leaveAdj.LeaveBalAdjValue = leaveBalance.getBalance(); leaveAdj.LeaveBalAdjRemark = "System adjustment by transfer company"; ELeaveBalanceAdjustment.db.insert(dbConn, leaveAdj); } HROne.Common.WebUtility.RedirectURLwithEncryptedQueryString(Response, Session, "Emp_PositionInfo_View.aspx?EmpPosID=" + newEmpPos.EmpPosID + "&EmpID=" + newEmpInfo.EmpID); }
private void LoadExistingMemberRowInfo(EEmpPersonalInfo empInfo, EORSORecord mpfRecord, DataSet.Payroll_KTPFundStatement.ExistingMemberRow existingORSORow) { existingORSORow.EmpID = empInfo.EmpID; existingORSORow.EmpNo = empInfo.EmpNo; existingORSORow.MemberID = ""; //existingORSORow.HKID = empInfo.EmpHKID.Length < 7 ? empInfo.EmpPassportNo : empInfo.EmpHKID; existingORSORow.EmpName = empInfo.EmpEngFullName; existingORSORow.EmpSex = empInfo.EmpGender; existingORSORow.EmpDOB = empInfo.EmpDateOfBirth; existingORSORow.EmpDateJoin = empInfo.EmpDateOfJoin; existingORSORow.PeriodFrom = mpfRecord.ORSORecPeriodFr; existingORSORow.PeriodTo = mpfRecord.ORSORecPeriodTo; existingORSORow.ORSOPlanID = mpfRecord.ORSOPlanID; existingORSORow.RelevantIncome = 0; existingORSORow.EE = 0; existingORSORow.EE = 0; existingORSORow.ER = 0; existingORSORow.ER = 0; existingORSORow.MpfMCEE = 0; existingORSORow.MpfMCER = 0; existingORSORow.MpfVCEE = 0; existingORSORow.MpfVCER = 0; existingORSORow.TermCode = ""; DBFilter empTerminationFilter = new DBFilter(); empTerminationFilter.add(new Match("EmpID", empInfo.EmpID)); empTerminationFilter.add(new Match("EmpTermLastDate", "<=", mpfRecord.ORSORecPeriodTo)); empTerminationFilter.add(new Match("EmpTermLastDate", ">=", mpfRecord.ORSORecPeriodFr)); ArrayList empTerminations = EEmpTermination.db.select(dbConn, empTerminationFilter); if (empTerminations.Count > 0) { EEmpTermination empTermination = (EEmpTermination)empTerminations[0]; existingORSORow.LastEmploymentDate = empTermination.EmpTermLastDate; ECessationReason cessationReason = new ECessationReason(); cessationReason.CessationReasonID = empTermination.CessationReasonID; ECessationReason.db.select(dbConn, cessationReason); existingORSORow.TermCode = cessationReason.CessationReasonCode; } // get member ID DBFilter m_empFieldFilter = new DBFilter(); m_empFieldFilter.add(new Match("EmpExtraFieldName", "P-Fund Member ID")); int m_extraFieldID = 0; ArrayList m_fieldList = EEmpExtraField.db.select(dbConn, m_empFieldFilter); if (m_fieldList.Count > 0) { m_extraFieldID = ((EEmpExtraField)m_fieldList[0]).EmpExtraFieldID; } if (m_extraFieldID > 0) { DBFilter m_empFieldValueFilter = new DBFilter(); m_empFieldValueFilter.add(new Match("EmpID", empInfo.EmpID)); m_empFieldValueFilter.add(new Match("EmpExtraFieldID", m_extraFieldID)); ArrayList m_fieldValueList = EEmpExtraFieldValue.db.select(dbConn, m_empFieldValueFilter); if (m_fieldValueList.Count > 0) { existingORSORow.MemberID = ((EEmpExtraFieldValue)m_fieldValueList[0]).EmpExtraFieldValue; } } // get P-Fund effective date (i.e. 1st contribution date) DBFilter m_empOrsoPlanFilter = new DBFilter(); m_empOrsoPlanFilter.add(new Match("EmpID", empInfo.EmpID)); m_empOrsoPlanFilter.add("EmpORSOEffFr", true); ArrayList m_orsoPlanList = EEmpORSOPlan.db.select(dbConn, m_empOrsoPlanFilter); if (m_orsoPlanList.Count > 0) { existingORSORow.OrsoEffDate = ((EEmpORSOPlan)m_orsoPlanList[0]).EmpORSOEffFr; } }