using System; using System.Data; using System.Linq; using Ease.Core.Model; using Ease.Core.DataAccess; using Ease.Core.Utility; using System.Collections.Generic; using HRM.BO; namespace HRM.DA { #region EmpLifeCycle Service public class EmpLifeCycleService : ServiceTemplate, IEmpLifeCycleService { //public event ProgressStatus ProgressStatus; //public event ProcessStatus ProcessStatus; public EmpLifeCycleService() { } //private void UpdateProgressStatus(EnumProcessStatus status) //{ // if (ProgressStatus != null) ProgressStatus(status); //} //private void UpdateprocessStatus(string statusString) //{ // if (ProcessStatus != null) ProcessStatus(statusString); //} private void MapObject(EmpLifeCycle oEmpLifeCycle, DataReader oReader) { base.SetObjectID(oEmpLifeCycle, oReader.GetInt32("EmpLifeCycleID").Value); oEmpLifeCycle.EffectDate = oReader.GetDateTime("EffectDate").Value; oEmpLifeCycle.NodeID = oReader.GetInt32("NodeID"); oEmpLifeCycle.GrossSalary = oReader.GetDouble("GrossSalary"); oEmpLifeCycle.BasicSalary = oReader.GetDouble("BasicSalary"); oEmpLifeCycle.GradeID = oReader.GetInt32("GradeID"); oEmpLifeCycle.CategoryID = oReader.GetInt32("CategoryID"); oEmpLifeCycle.CompanyID = oReader.GetInt32("CompanyID"); oEmpLifeCycle.FunctionID = oReader.GetInt32("FunctionID"); oEmpLifeCycle.DesignationID = oReader.GetInt32("DesignationID"); oEmpLifeCycle.LocationID = oReader.GetInt32("LocationID"); oEmpLifeCycle.DepartmentID = oReader.GetInt32("DepartmentID"); oEmpLifeCycle.CostCenterID = oReader.GetInt32("CostCenterID"); oEmpLifeCycle.IsConfirm = oReader.GetBoolean("IsConfirm"); if (oReader.GetInt32("pFMemberType").HasValue) oEmpLifeCycle.PFMemberType = (EnumPFMembershipType)oReader.GetInt32("pFMemberType").Value; else oEmpLifeCycle.PFMemberType = null; oEmpLifeCycle.IsDiscontinue = oReader.GetBoolean("IsDiscontinue"); oEmpLifeCycle.IsContinue = oReader.GetBoolean("IsContinue"); oEmpLifeCycle.EmployeeID = oReader.GetInt32("EmployeeID").Value; oEmpLifeCycle.StatusDetailID = oReader.GetInt32("StatusDetailID"); oEmpLifeCycle.Remarks = oReader.GetString("Remarks"); oEmpLifeCycle.Description = oReader.GetString("Description"); if (oReader.GetInt32("Status") != null) oEmpLifeCycle.EmployeeStatus = (EnumEmployeeStatus)oReader.GetInt32("Status").Value; oEmpLifeCycle.Sequence = oReader.GetInt32("SequenceNO").Value; //oEmpLifeCycle.CreatedBy = oReader.GetInt32("CreatedBy").Value; oEmpLifeCycle.CreatedBy = oReader.GetInt32("CreatedBy", true, 0); oEmpLifeCycle.CreatedDate = oReader.GetDateTime("CreationDate") == null ? DateTime.MinValue : oReader.GetDateTime("CreationDate").Value; oEmpLifeCycle.ModifiedBy = oReader.GetInt32("ModifiedBy"); oEmpLifeCycle.ModifiedDate = oReader.GetDateTime("ModifiedDate"); oEmpLifeCycle.SalaryMonth = oReader.GetDateTime("SalaryMonth").Value; oEmpLifeCycle.IsCurrentMonthIncluded = oReader.GetBoolean("IsCurrentMonthIncluded").Value; oEmpLifeCycle.GradeSalaryAssesmentID = oReader.GetInt32("GradeSalaryAssesmentID"); oEmpLifeCycle.EmployeeCCID = oReader.GetInt32("EmployeeCCID"); oEmpLifeCycle.IncrementNo = oReader.GetInt32("IncrementNo"); oEmpLifeCycle.ComplainID = oReader.GetInt32("ComplainID").GetValueOrDefault(); oEmpLifeCycle.PunishmentID = oReader.GetInt32("PunishmentID").GetValueOrDefault(); this.SetObjectState(oEmpLifeCycle, Ease.Core.ObjectState.Saved); } protected override T CreateObject(DataReader oReader) { EmpLifeCycle oEmpLifeCycle = new EmpLifeCycle(); MapObject(oEmpLifeCycle, oReader); return oEmpLifeCycle as T; } #region Get Related Data public EmpLifeCycle GetRelatedData(TransactionContext tc, EmpLifeCycle oEmpLifeCycle) { oEmpLifeCycle.Employee = (new EmployeeService()).Get(tc, oEmpLifeCycle.EmployeeID); oEmpLifeCycle.HREmployee = (new HREmployeeService()).Get(tc, oEmpLifeCycle.EmployeeID); //oEmpLifeCycle.Department = (new DepartmentService()).Get(tc, oEmpLifeCycle.DepartmentID); //oEmpLifeCycle.Costcenter = (new CostcenterService()).Get(tc, SystemInformation.CurrentSysInfo.PayrollTypeID, oEmpLifeCycle.CostCenterID); //oEmpLifeCycle.Location = (new LocationService()).Get(tc, oEmpLifeCycle.LocationID); //oEmpLifeCycle.Category = (new CategoryService()).Get(tc, oEmpLifeCycle.CategoryID); //oEmpLifeCycle.Designation = (new DesignationService()).Get(tc, oEmpLifeCycle.DesignationID, SystemInformation.CurrentSysInfo.PayrollTypeID); //oEmpLifeCycle.Grade = (new GradeService()).Get(tc, oEmpLifeCycle.GradeID); return oEmpLifeCycle; } #endregion #region Service implementation public int GetPrvGradeId(int nEmpID, int nGradeID) { int nGradID = 0; TransactionContext tc = null; try { tc = TransactionContext.Begin(); nGradID = EmpLifeCycleDA.GetPrvGradeId(tc, nEmpID, nGradeID); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return nGradID; } public List GetNotYetProcessUptoToday() { List oEmployees = new List(); TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(EmpLifeCycleDA.GetNotYetProcessUptoToday(tc)); oEmployees = this.CreateObjects(oreader); oreader.Close(); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oEmployees; } public int GetPrvLocationId(int nEmpID, int nLocID) { int nLocationID = 0; TransactionContext tc = null; try { tc = TransactionContext.Begin(); nLocationID = EmpLifeCycleDA.GetPrvLocationId(tc, nEmpID, nLocID); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return nLocationID; } public int GetPrvDesigId(int nEmpID, int nDesigID) { int nDesgID = 0; TransactionContext tc = null; try { tc = TransactionContext.Begin(); nDesgID = EmpLifeCycleDA.GetPrvDesigId(tc, nEmpID, nDesigID); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return nDesgID; } public int? EmpPrevDesg(int employeeID) { int? nDesgID = null; TransactionContext tc = null; try { tc = TransactionContext.Begin(); nDesgID = EmpLifeCycleDA.EmpPrevDesg(tc, employeeID); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return nDesgID; } public int GetPrvRCId(int nEmpID) { int nCCID = 0; TransactionContext tc = null; try { tc = TransactionContext.Begin(); nCCID = EmpLifeCycleDA.GetPrvRCId(tc, nEmpID); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return nCCID; } public EmpLifeCycle Get(int lifecycleID) { EmpLifeCycle oEmpLifeCycle = null; TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(EmpLifeCycleDA.Get(tc, lifecycleID)); if (oreader.Read()) { oEmpLifeCycle = this.CreateObject(oreader); // GetRelatedData(tc, oEmpLifeCycle); } oreader.Close(); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oEmpLifeCycle; } public List getByStatus(int p, DateTime startDate, DateTime endDate) { List oEmployees = new List(); TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(EmpLifeCycleDA.Get(tc, p, startDate, endDate)); oEmployees = this.CreateObjects(oreader); oreader.Close(); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oEmployees; } public List Get(string empIds, int statusID, DateTime fromDate, DateTime toDate, int PayrollTypeID) { List oEmployees = new List(); TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(EmpLifeCycleDA.Get(tc, empIds, statusID, fromDate, toDate, PayrollTypeID)); oEmployees = this.CreateObjects(oreader); oreader.Close(); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oEmployees; } public List GetByDate(DateTime startDate, DateTime endDate, int payrollTypeID) { List oEmployees = new List(); TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(EmpLifeCycleDA.GetByDate(tc, startDate, endDate, payrollTypeID)); oEmployees = this.CreateObjects(oreader); oreader.Close(); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oEmployees; } public List GetByCreateDate(DateTime startDate, DateTime endDate, int payrollTypeID) { List oEmployees = new List(); TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(EmpLifeCycleDA.GetByCreateDate(tc, startDate, endDate, payrollTypeID)); oEmployees = this.CreateObjects(oreader); oreader.Close(); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oEmployees; } public List Get(EnumStatus sts, int payrollTypeID) { List oEmployees = new List(); TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(EmpLifeCycleDA.Get(tc, sts, payrollTypeID)); oEmployees = this.CreateObjects(oreader); oreader.Close(); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oEmployees; } public List GetEmpID(int nEmpID) { List EmpLifeCycles = new List(); TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader dr = new DataReader(EmpLifeCycleDA.GetEmpID(tc, nEmpID)); EmpLifeCycles = this.CreateObjects(dr); dr.Close(); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return EmpLifeCycles; } public DataSet GetDesignationChange(DateTime startDate, DateTime endDate, int payrollTypeID) { DataSet allData = new DataSet(); TransactionContext tc = null; try { tc = TransactionContext.Begin(); allData =EmpLifeCycleDA.GetDesignationChange(tc, startDate, endDate, payrollTypeID); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return allData; } public List GetEmpID(int employeeID, DateTime effectDate) { List EmpLifeCycles = new List(); TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader dr = new DataReader(EmpLifeCycleDA.GetEmpID(tc, employeeID, effectDate)); EmpLifeCycles = this.CreateObjects(dr); dr.Close(); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return EmpLifeCycles; } public DataSet GetEmpLifecycleServiceRecord(int empId) { DataSet dsetDSB = new DataSet(); TransactionContext tc = null; try { tc = TransactionContext.Begin(true); dsetDSB = EmpLifeCycleDA.GetEmpLifecycleServiceRecord(tc, empId); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return dsetDSB; } public EmpLifeCycle GetLastPosition(int nEmpID) { EmpLifeCycle oEmpLifeCycle = null; TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(EmpLifeCycleDA.GetLastPosition(tc, nEmpID)); if (oreader.Read()) { oEmpLifeCycle = this.CreateObject(oreader); oEmpLifeCycle = GetRelatedData(tc, oEmpLifeCycle); } oreader.Close(); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return oEmpLifeCycle; } public void ProcessGradeSalary(EmpLifeCycle item) { if ((item.BasicSalary != null || item.GrossSalary != null) || (item.GradeID != null)) { EmployeeGradeSalary ogs = new EmployeeGradeSalary(); ogs.BasicSalary = (item.BasicSalary == null) ? 0 : (double)item.BasicSalary; ogs.GrossSalary = (item.GrossSalary == null) ? 0 : (double)item.BasicSalary; if (item.GradeID == null) { if (item.Employee.GradeID == null) throw new ServiceException("Grade not yet assigned of employee."); ogs.GradeID = (int) item.Employee.GradeID; } else ogs.GradeID =(int) item.GradeID; if (ogs.BasicSalary + ogs.GrossSalary == 0) { if (item.Employee.BasicSalary + item.Employee.GrossSalary == 0) throw new ServiceException("Salary(Basic/Gross) can't be zero."); else { ogs.BasicSalary = item.Employee.BasicSalary; ogs.GrossSalary = item.Employee.GrossSalary; } } ogs.EmployeeID = item.EmployeeID; ogs.GradeSalaryTypeID =(int) item.StatusDetailID; ogs.EffectDate = item.EffectDate; item.EmployeeGradeSalary = ogs; } } public void Save(List lifecycles, DateTime salaryCutoffDate, DateTime nextPayProcessDate) { TransactionContext tc = null; try { foreach (EmpLifeCycle item in lifecycles) { if (item.EmployeeID != 0 && item.Employee == null) { item.Employee = (new EmployeeService()).Get(tc, item.EmployeeID); } item.HREmployee = new HREmployee(); item.HREmployee.SetObjectID(item.EmployeeID); item.HREmployee.GradeID = (item.GradeID == null) ? (item.Employee == null ? null : item.Employee.GradeID) : item.GradeID; item.HREmployee.CategoryID = (item.CategoryID == null) ? (item.Employee == null ? 0 : item.Employee.CategoryID) :(int) item.CategoryID; item.HREmployee.LocationID = (item.LocationID == null) ? (item.Employee == null ? null : item.Employee.LocationID) : item.LocationID; item.HREmployee.DesignationID = (item.DesignationID == null) ? (item.Employee == null ? null : item.Employee.DesignationID) : item.DesignationID; item.HREmployee.DepartmentID = (item.DepartmentID == null) ? (item.Employee == null ? null : item.Employee.DepartmentID) : item.DepartmentID; item.HREmployee.BasicSalary = item.BasicSalary == null ? (item.Employee == null ? 0.0 : item.Employee.BasicSalary) : (double)item.BasicSalary; item.HREmployee.GrossSalary = item.GrossSalary == null ? (item.Employee == null ? 0.0 : item.Employee.GrossSalary) : (double)item.GrossSalary; tc = TransactionContext.Begin(true); this.Save(item, tc, salaryCutoffDate, nextPayProcessDate); tc.End(); } } catch (Exception ex) { if (tc != null) tc.HandleError(); throw new ServiceException(ex.Message); } } public int Save(EmpLifeCycle oEmpLifeCycle, DateTime nextPayProcessDate, int currentPayrollId) { TransactionContext tc = null; try { tc = TransactionContext.Begin(true); int id = this.Save(tc, oEmpLifeCycle, nextPayProcessDate, currentPayrollId); tc.End(); return id; } catch (Exception ex) { if (tc != null) tc.HandleError(); throw new ServiceException(ex.Message); } } public int Save(TransactionContext tc, EmpLifeCycle oEmpLifeCycle, DateTime nextPayProcessDate, int currentPayrollId) { EmployeeStatus oempStatus = null; if (oEmpLifeCycle.EmpStatusObject == null) oempStatus = (new EmployeeStatusService()).Get((int)oEmpLifeCycle.StatusDetailID, tc); else oempStatus = oEmpLifeCycle.EmpStatusObject; //find the life cycle contains the 'forcely remove organogram' EmployeeStatus.EmpStatusComponent comp = oempStatus.EmployeeStatusComponents.Find( delegate(EmployeeStatus.EmpStatusComponent lcc) { return lcc.ComponentType == EnumLifeCycleComponent.Force_Remove_From_Position; }); try { EmployeeHistory oEmpHistory = new EmployeeHistory(); oEmpHistory.EffectDate = oEmpLifeCycle.EffectDate; oEmpHistory.EmployeeID = oEmpLifeCycle.EmployeeID; oEmpHistory.EmployeeStatus = oEmpLifeCycle.EmployeeStatus; oEmpHistory.Remarks = oEmpLifeCycle.EmployeeStatus.ToString(); List gradeSalaries = null; if (oEmpLifeCycle.EmployeeGradeSalary != null) { EmployeeGradeSalaryService egsSerice = new EmployeeGradeSalaryService(); gradeSalaries = egsSerice.process(tc, oEmpLifeCycle.EmployeeGradeSalary, nextPayProcessDate, oEmpLifeCycle.IsTransferReceived); } #region Cost-center update if (oEmpLifeCycle.CostCenterID != null) { EmployeeCostCenterService oEmpCCService = new EmployeeCostCenterService(); EmployeeCostCenter oEmpCC = new EmployeeCostCenter(); List oEmpCCs = new List(); oEmpCC.CostCenterID =(int) oEmpLifeCycle.CostCenterID; oEmpCC.EmployeeID = oEmpLifeCycle.EmployeeID; oEmpCC.IsCurrentCC = true; oEmpCC.Percentage = 100; oEmpCC.CreatedBy = oEmpLifeCycle.CreatedBy; oEmpCC.CreatedDate = oEmpLifeCycle.CreatedDate; oEmpCC.MonthDate = nextPayProcessDate; oEmpCC.TillDate = oEmpCC.MonthDate; oEmpCCs.Add(oEmpCC); oEmpCCService.Save(tc, oEmpCCs); oEmpLifeCycle.EmployeeCCID = oEmpCCs[0].ID; oEmpLifeCycle.HREmployee.CrgId = oEmpLifeCycle.CostCenterID; } #endregion Cost-center update #region Grade-Salary & Organogram Node if (oEmpLifeCycle.EmployeeGradeSalary != null) { //EmployeeGradeSalaryService sgs = new EmployeeGradeSalaryService(); //sgs.DeleteFromDate(tc, oEmpLifeCycle.EmployeeID, new DateTime(2001,1,1), EnumArrearType.ToCalculate); //sgs.DeleteFromDate(tc, oEmpLifeCycle.EmployeeID, PayrollGlobalFunctions.PayrollFirstDateOfMonth(oEmpLifeCycle.SalaryMonth), EnumArrearType.NotPresent); //sgs.Insert(tc, gradeSalaries); //// Grade Salary assignment object can be multiple for arrear item and last item //// arrear not present item. //oEmpLifeCycle.GradeSalaryAssesmentID = gradeSalaries[gradeSalaries.Count - 1].ID; EmployeeGradeSalaryService sgs = new EmployeeGradeSalaryService(); sgs.DeleteFromDate(tc, oEmpLifeCycle.EmployeeID, new DateTime(2001, 1, 1), EnumArrearType.ToCalculate); // createing problem in middle of the month increment, so it is commented // sgs.DeleteFromDate(tc, oEmpLifeCycle.EmployeeID, GlobalFunctions.FirstDateOfMonth(oEmpLifeCycle.SalaryMonth),EnumArrearType.NotPresent); sgs.DeleteFromDate(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.EffectDate, EnumArrearType.NotPresent); gradeSalaries.ForEach(x => { x.CreatedBy = oEmpLifeCycle.CreatedBy; x.CreatedDate = oEmpLifeCycle.CreatedDate; }); sgs.Save(tc, gradeSalaries); // Grade Salary assignment object can be multiple for arrear item and last item // arrear not present item. oEmpLifeCycle.GradeSalaryAssesmentID = gradeSalaries[gradeSalaries.Count - 1].ID; } // Insert to Organogram if (oEmpLifeCycle.NodeID != null && oEmpLifeCycle.NodeID!= 0) { OrganogramEmployee oOrg = new OrganogramEmployee(); oOrg.NodeID = (int)oEmpLifeCycle.NodeID; oOrg.EmployeeID = oEmpLifeCycle.EmployeeID; oOrg.CreatedBy = oEmpLifeCycle.CreatedBy; oOrg.CreatedDate = oEmpLifeCycle.CreatedDate; oOrg.AssignDate = oEmpLifeCycle.EffectDate; OrganogramEmployeeService oge = new OrganogramEmployeeService(); // Remove existing employee HREmployeeDA.updateRoceRemoveLineManagerByEmployee(tc, (int)oEmpLifeCycle.EmployeeID); oge.DeleteByNode(tc,(int) oEmpLifeCycle.NodeID); OrganogramDA.UpdateFromLifeCycle(tc, oEmpLifeCycle); // remove current emloyee other posting oge.DeleteByEmp(tc, oEmpLifeCycle.EmployeeID); oge.Save(tc, oOrg); HREmployeeDA.updateLineManagerByOrganogram(tc, oOrg.EmployeeID, oOrg.NodeID); } #endregion Grade-Salary & Organogram Node //} if (oEmpLifeCycle.IsNew) { if (oEmpLifeCycle.EmployeeStatus == EnumEmployeeStatus.Live && oempStatus.EmployeeStatusComponents.FindIndex(x => x.ComponentType == EnumLifeCycleComponent.Continue) > -1) { oEmpLifeCycle.IsContinue = true; } if (oEmpLifeCycle.EmployeeStatus == EnumEmployeeStatus.Discontinued && oempStatus.EmployeeStatusComponents.FindIndex(x => x.ComponentType == EnumLifeCycleComponent.Discontinue) > -1) { oEmpLifeCycle.IsDiscontinue = true; } int id = tc.GenerateID("EmpLifeCycle", "EmpLifeCycleID"); base.SetObjectID(oEmpLifeCycle, id); int seqNo = tc.GenerateID("EmpLifeCycle", "SequenceNO", "Where EmployeeID=" + oEmpLifeCycle.EmployeeID.ToString()); oEmpLifeCycle.Sequence = seqNo; EmpLifeCycleDA.Insert(tc, oEmpLifeCycle); EmployeeHistoryService oEmployeeHistory = new EmployeeHistoryService(); } else { EmpLifeCycleDA.Update(tc, oEmpLifeCycle); } // if (comp != null) { // if forcely remove ogranogram node component exist, remove employee from organogram OrganogramEmployeeService ogs = new OrganogramEmployeeService(); HREmployeeDA.updateRoceRemoveLineManagerByOrganogram(tc, oEmpLifeCycle.EmployeeID); ogs.DeleteByEmp(tc, oEmpLifeCycle.EmployeeID); } if (oEmpLifeCycle.Employee == null) oEmpLifeCycle.Employee = new EmployeeService().Get(tc, oEmpLifeCycle.ID); if (oEmpLifeCycle.HREmployee != null) { if (oEmpLifeCycle.HREmployee.DepartmentID == null && oEmpLifeCycle.Employee.DepartmentID != null) oEmpLifeCycle.HREmployee.DepartmentID = oEmpLifeCycle.Employee.DepartmentID; if (oEmpLifeCycle.HREmployee.LocationID == null && oEmpLifeCycle.Employee.LocationID != null) oEmpLifeCycle.HREmployee.LocationID = oEmpLifeCycle.Employee.LocationID; if (oEmpLifeCycle.HREmployee.GradeID == null && oEmpLifeCycle.Employee.GradeID != null) oEmpLifeCycle.HREmployee.GradeID = oEmpLifeCycle.Employee.GradeID; if (oEmpLifeCycle.HREmployee.DesignationID == null && oEmpLifeCycle.Employee.DesignationID != null) oEmpLifeCycle.HREmployee.DesignationID = oEmpLifeCycle.Employee.DesignationID; if (oEmpLifeCycle.HREmployee.CrgId == null && oEmpLifeCycle.Employee.CrgId != null) oEmpLifeCycle.HREmployee.CrgId = oEmpLifeCycle.Employee.CrgId; //if (oEmpLifeCycle.HREmployee.CategoryID == null && oEmpLifeCycle.Employee.CategoryID != null) // oEmpLifeCycle.HREmployee.CategoryID = oEmpLifeCycle.Employee.CategoryID; if (oEmpLifeCycle.HREmployee.GrossSalary == 0 && oEmpLifeCycle.Employee.GrossSalary != 0) oEmpLifeCycle.HREmployee.GrossSalary = oEmpLifeCycle.Employee.GrossSalary; if (oEmpLifeCycle.HREmployee.BasicSalary == 0 && oEmpLifeCycle.Employee.BasicSalary != 0) oEmpLifeCycle.HREmployee.BasicSalary = oEmpLifeCycle.Employee.BasicSalary; HREmployeeDA.UpdateForEmpLifeCycle(tc, oEmpLifeCycle.HREmployee, oEmpLifeCycle.EmployeeID); } switch (oEmpLifeCycle.EmployeeStatus) { case EnumEmployeeStatus.Waitingforjoin: case EnumEmployeeStatus.Live: if (oEmpLifeCycle.GrossSalary > 0) EmployeeDA.UpdateGross(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.GrossSalary); // if component contain 'IsContinue', update employee status if (oEmpLifeCycle.IsConfirm != null) //if ((bool)oEmpLifeCycle.IsContinue == true) { bool autopf = new SystemConfigarationService().GetconfigBooleanValue(EnumConfigurationType.Logic, "confirmation", "autopfmembership"); EmployeeDA.DoConfirm(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.EffectDate, true); if(autopf ==true) { HREmployeeDA.UpdatePFInfo(tc, oEmpLifeCycle.EmployeeID, EnumPFMembershipType.Live, oEmpLifeCycle.EffectDate); } } //else // EmployeeDA.UndoConfirm(tc, oEmpLifeCycle.EmployeeID, false); // if conponent contain isconfirm, update employee confirm property and confrim date. if (oEmpLifeCycle.IsContinue != null) { //if (oEmpLifeCycle.HREmployee.Status == EnumEmployeeStatus.IA) // EmployeeDA.DoContinueForLifeCycle(tc, oEmpLifeCycle.EmployeeID, // oEmpLifeCycle.HREmployee.JoiningDate); //else EmployeeDA.DoContinueForLifeCycle(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.EffectDate); } if (oempStatus.EmployeeStatusComponents.FindIndex(x => x.ComponentType == EnumLifeCycleComponent.salary_Withheld) > -1) { EmployeeDA.salaryWithHeld(tc, oEmpLifeCycle.EmployeeID, true); } if (oempStatus.EmployeeStatusComponents.FindIndex(x => x.ComponentType == EnumLifeCycleComponent.undo_salary_Withheld) > -1) { EmployeeDA.salaryWithHeld(tc, oEmpLifeCycle.EmployeeID, false); } // if conponent contain pf member, update employee pfMembership property property and pfMembership date. if (oEmpLifeCycle.PFMemberType != null) HREmployeeDA.UpdatePFInfo(tc, oEmpLifeCycle.EmployeeID, (EnumPFMembershipType)oEmpLifeCycle.PFMemberType, oEmpLifeCycle.EffectDate); break; case EnumEmployeeStatus.Discontinued: EmployeeDA.UpdateStatus(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.ID, oEmpLifeCycle.EffectDate, oEmpLifeCycle.EmployeeStatus); // update end of contract property of emlpoyee by effect date. if (oEmpLifeCycle.IsCurrentMonthIncluded == true) EmployeeDA.UpdatemiddleOfMonthDiscontinue(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.EmployeeStatus, oEmpLifeCycle.EffectDate); OrganogramEmployeeService OrgEmpSrv = new OrganogramEmployeeService(); OrgEmpSrv.DeleteByEmp(tc, oEmpLifeCycle.EmployeeID); break; case EnumEmployeeStatus.IA: EmployeeDA.UpdateStatus(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.ID, oEmpLifeCycle.EffectDate, oEmpLifeCycle.EmployeeStatus); break; case EnumEmployeeStatus.Secondy: case EnumEmployeeStatus.Suspend: EmployeeDA.UpdateStatus(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.ID, oEmpLifeCycle.EffectDate, oEmpLifeCycle.EmployeeStatus); // update end of contract property of emlpoyee by effect date. if (oEmpLifeCycle.IsCurrentMonthIncluded == true) EmployeeDA.UpdatemiddleOfMonthDiscontinue(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.EmployeeStatus, oEmpLifeCycle.EffectDate); break; //case EnumEmployeeStatus.Withheld: break; default: break; } //} if (oEmpLifeCycle.IsPayrollTypeChanged == true) { EmployeeService oEmpService = new EmployeeService(); oEmpService.UpdatePayrollType(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.PayrollTypeID); EmployeeWorkPlanSetupService oserveice = new EmployeeWorkPlanSetupService(); oserveice.DeleteByEmpID(tc, oEmpLifeCycle.EmployeeID); ActingResponsibilitySetupService oResService = new ActingResponsibilitySetupService(); oResService.UpdateTempShiftToDate(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.EffectDate); LeaveYearService oLeaveYearService = new LeaveYearService(); oLeaveYearService.UpdateLeaveBalance(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.PayrollTypeID, currentPayrollId); DailyAttnProcessService oAttProcess = new DailyAttnProcessService(); oAttProcess.UpdateAttProcessedShift(tc, oEmpLifeCycle, currentPayrollId); } //tc.End(); return oEmpLifeCycle.ID; } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } public int Save(List oEmpLifeCycles, DateTime nextPayProcessDate) { EmployeeStatus oempStatus = (new EmployeeStatusService()).Get((int)oEmpLifeCycles[0].StatusDetailID); EmployeeStatus.EmpStatusComponent comp = oempStatus.EmployeeStatusComponents.Find( delegate(EmployeeStatus.EmpStatusComponent lcc) { return lcc.ComponentType == EnumLifeCycleComponent.Force_Remove_From_Position; }); TransactionContext tc = null; tc = TransactionContext.Begin(true); try { foreach (EmpLifeCycle oEmpLifeCycle in oEmpLifeCycles) { EmployeeHistory oEmpHistory = new EmployeeHistory(); oEmpHistory.EffectDate = oEmpLifeCycle.EffectDate; oEmpHistory.EmployeeID = oEmpLifeCycle.EmployeeID; oEmpHistory.EmployeeStatus = oEmpLifeCycle.EmployeeStatus; oEmpHistory.Remarks = oEmpLifeCycle.EmployeeStatus.ToString(); List gradeSalaries = null; if (oEmpLifeCycle.EmployeeGradeSalary != null) { // get the last (max on date) grade salary item grade salary item from the database EmployeeGradeSalary lastgs = (new EmployeeGradeSalaryService()).GetMax(tc, oEmpLifeCycle.EmployeeGradeSalary.EmployeeID, EnumArrearType.NotPresent); gradeSalaries = oEmpLifeCycle.EmployeeGradeSalary.process(lastgs); } //if (oEmpLifeCycle.EffectDate <= SystemInformationService.GetServerDate(tc)) //{ #region Cost-center update if (oEmpLifeCycle.CostCenterID != 0) { EmployeeCostCenterService oEmpCCService = new EmployeeCostCenterService(); EmployeeCostCenter oEmpCC = new EmployeeCostCenter(); List oEmpCCs = new List(); oEmpCC.CostCenterID = (int)oEmpLifeCycle.CostCenterID; oEmpCC.EmployeeID = oEmpLifeCycle.EmployeeID; oEmpCC.IsCurrentCC = true; oEmpCC.Percentage = 100; oEmpCC.CreatedBy = oEmpLifeCycle.CreatedBy; oEmpCC.CreatedDate = oEmpLifeCycle.CreatedDate; oEmpCC.MonthDate = nextPayProcessDate; oEmpCC.TillDate = oEmpCC.MonthDate; oEmpCCs.Add(oEmpCC); oEmpCCService.Save(tc, oEmpCCs); oEmpLifeCycle.EmployeeCCID = oEmpCCs[0].ID; } #endregion Cost-center update #region Grade-Salary & Organogram Node if (oEmpLifeCycle.EmployeeGradeSalary != null) { //EmployeeGradeSalaryService sgs = new EmployeeGradeSalaryService(); //sgs.DeleteFromDate(tc, oEmpLifeCycle.EmployeeID, new DateTime(2001,1,1), EnumArrearType.ToCalculate); //sgs.DeleteFromDate(tc, oEmpLifeCycle.EmployeeID, PayrollGlobalFunctions.PayrollFirstDateOfMonth(oEmpLifeCycle.SalaryMonth), EnumArrearType.NotPresent); //sgs.Insert(tc, gradeSalaries); //// Grade Salary assignment object can be multiple for arrear item and last item //// arrear not present item. //oEmpLifeCycle.GradeSalaryAssesmentID = gradeSalaries[gradeSalaries.Count - 1].ID; EmployeeGradeSalaryService sgs = new EmployeeGradeSalaryService(); sgs.DeleteFromDate(tc, oEmpLifeCycle.EmployeeID, new DateTime(2001, 1, 1), EnumArrearType.ToCalculate); sgs.DeleteFromDate(tc, oEmpLifeCycle.EmployeeID, PayrollGlobalFunctions.PayrollFirstDateOfMonth(oEmpLifeCycle.SalaryMonth), EnumArrearType.NotPresent); sgs.Save(tc, gradeSalaries); // Grade Salary assignment object can be multiple for arrear item and last item // arrear not present item. oEmpLifeCycle.GradeSalaryAssesmentID = gradeSalaries[gradeSalaries.Count - 1].ID; } // Insert to Organogram if (oEmpLifeCycle.Orgemployees != null) { OrganogramEmployee oOrg = new OrganogramEmployee(); oEmpLifeCycle.Orgemployees[0].CreatedBy = oEmpLifeCycle.CreatedBy; oEmpLifeCycle.Orgemployees[0].CreatedDate = oEmpLifeCycle.CreatedDate; OrganogramEmployeeService oge = new OrganogramEmployeeService(); oge.DeleteByEmp(tc, oEmpLifeCycle.EmployeeID); oge.Save(tc, oEmpLifeCycle.Orgemployees[0]); } #endregion Grade-Salary & Organogram Node //} if (oEmpLifeCycle.IsNew) { int id = tc.GenerateID("EmpLifeCycle", "EmpLifeCycleID"); base.SetObjectID(oEmpLifeCycle, (id)); int seqNo = tc.GenerateID("EmpLifeCycle", "SequenceNO", "Where EmployeeID=" + oEmpLifeCycle.EmployeeID.ToString()); oEmpLifeCycle.Sequence = seqNo; EmpLifeCycleDA.Insert(tc, oEmpLifeCycle); EmployeeHistoryService oEmployeeHistory = new EmployeeHistoryService(); } else { EmpLifeCycleDA.Update(tc, oEmpLifeCycle); } // if (comp != null) { // if forcely remove ogranogram node component exist, remove employee from organogram OrganogramEmployeeService ogs = new OrganogramEmployeeService(); ogs.DeleteByEmp(tc, oEmpLifeCycle.EmployeeID); } //if (oEmpLifeCycle.EffectDate <= SystemInformationService.GetServerDate(tc)) //{ HREmployeeDA.UpdateForEmpLifeCycle(tc, oEmpLifeCycle.HREmployee, oEmpLifeCycle.EmployeeID); switch (oEmpLifeCycle.EmployeeStatus) { case EnumEmployeeStatus.Waitingforjoin: case EnumEmployeeStatus.Live: if (oEmpLifeCycle.GrossSalary > 0) EmployeeDA.UpdateGross(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.GrossSalary); // if component contain 'IsContinue', update employee status if (oEmpLifeCycle.IsConfirm != null) //if ((bool)oEmpLifeCycle.IsContinue == true) EmployeeDA.DoConfirm(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.EffectDate, true); //else // EmployeeDA.UndoConfirm(tc, oEmpLifeCycle.EmployeeID, false); // if conponent contain isconfirm, update employee confirm property and confrim date. if (oEmpLifeCycle.IsContinue != null) EmployeeDA.DoContinueForLifeCycle(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.EffectDate); // if conponent contain pf member, update employee pfMembership property property and pfMembership date. if (oEmpLifeCycle.PFMemberType != null) HREmployeeDA.UpdatePFInfo(tc, oEmpLifeCycle.EmployeeID, (EnumPFMembershipType)oEmpLifeCycle.PFMemberType, oEmpLifeCycle.EffectDate); break; case EnumEmployeeStatus.Discontinued: case EnumEmployeeStatus.IA: EmployeeDA.UpdateStatus(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.ID, oEmpLifeCycle.EffectDate, oEmpLifeCycle.EmployeeStatus); // update end of contract property of emlpoyee by effect date. if (oEmpLifeCycle.IsCurrentMonthIncluded == true) EmployeeDA.UpdatemiddleOfMonthDiscontinue(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.EmployeeStatus, oEmpLifeCycle.EffectDate); OrganogramEmployeeService OrgEmpSrv = new OrganogramEmployeeService(); OrgEmpSrv.DeleteByEmp(tc, oEmpLifeCycle.EmployeeID); break; case EnumEmployeeStatus.Secondy: case EnumEmployeeStatus.Suspend: case EnumEmployeeStatus.Withheld: EmployeeDA.UpdateStatus(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.ID, oEmpLifeCycle.EffectDate, oEmpLifeCycle.EmployeeStatus); // update end of contract property of emlpoyee by effect date. if (oEmpLifeCycle.IsCurrentMonthIncluded == true) EmployeeDA.UpdatemiddleOfMonthDiscontinue(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.EmployeeStatus, oEmpLifeCycle.EffectDate); break; default: break; } } tc.End(); return (1); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } //Data Integration public void SaveIntegration(EmpLifeCycle oEmpLifeCycle, TransactionContext tc, Employee oEmp, DateTime NextPayProcessDate, int currentUserId,DateTime LastPayProcessDate) { // find the life cycle contains the 'forcely remove organogram' string ErrMsg = ""; EmpLifeCycle eCycle = new EmpLifeCycle(); //EmployeeStatus oempStatus = EmployeeStatus.Get(oEmpLifeCycle.StatusDetailID); //EmployeeStatus.EmpStatusComponent comp = oempStatus.EmployeeStatusComponents.Find(delegate(EmployeeStatus.EmpStatusComponent lcc) { return lcc.ComponentType == (int)EnumLifeCycleComponent.Force_Remove_From_Position; }); //TransactionContext tc = null; try { EmployeeHistory oEmpHistory = new EmployeeHistory(); oEmpHistory.EffectDate = oEmpLifeCycle.EffectDate; oEmpHistory.EmployeeID = oEmpLifeCycle.EmployeeID; // oEmpHistory.EmployeeStatus = oEmpLifeCycle.Status; // ?? status not found oEmpHistory.Remarks = oEmpLifeCycle.Status.ToString(); List gradeSalaries = null; ErrMsg = "Error during Calculating salary"; if (oEmpLifeCycle.EmployeeGradeSalary != null) { EmployeeGradeSalaryService empgradeService = new EmployeeGradeSalaryService(); oEmpLifeCycle.EmployeeGradeSalary.EmployeeID = oEmpLifeCycle.EmployeeID; // gradeSalaries = oEmpLifeCycle.EmployeeGradeSalary.process(oEmp); gradeSalaries = empgradeService.process(oEmp, LastPayProcessDate, NextPayProcessDate, currentUserId, oEmpLifeCycle.EmployeeGradeSalary); } // tc = TransactionContext.Begin(true); //if (oEmpLifeCycle.EffectDate <= SystemInformationService.GetServerDate(tc)) //{ ErrMsg = "Error updating Cost-center"; #region Cost-center update if (oEmpLifeCycle.CostCenterID != null) { EmployeeCostCenterService oEmpCCService = new EmployeeCostCenterService(); EmployeeCostCenter oEmpCC = new EmployeeCostCenter(); List oEmpCCs = new List(); oEmpCC.CostCenterID =(int) oEmpLifeCycle.CostCenterID; oEmpCC.EmployeeID = oEmpLifeCycle.EmployeeID; oEmpCC.IsCurrentCC = true; oEmpCC.Percentage = 100; oEmpCC.CreatedBy = oEmpLifeCycle.CreatedBy; oEmpCC.CreatedDate = oEmpLifeCycle.CreatedDate; // oEmpCC.MonthDate = Payroll.BO.SystemInformation.CurrentSysInfo.NextPayProcessDate; oEmpCC.MonthDate = NextPayProcessDate; oEmpCC.TillDate = oEmpCC.MonthDate; oEmpCCs.Add(oEmpCC); oEmpCCService.Save(tc, oEmpCCs); oEmpLifeCycle.EmployeeCCID = oEmpCCs[0].ID; } #endregion Cost-center update ErrMsg = "Error updating grade/Salary"; #region Grade-Salary & Organogram Node if (oEmpLifeCycle.EmployeeGradeSalary != null) { EmployeeGradeSalaryService sgs = new EmployeeGradeSalaryService(); sgs.DeleteFromDate(tc, oEmpLifeCycle.EmployeeID, new DateTime(2001, 1, 1), EnumArrearType.ToCalculate); sgs.DeleteFromDate(tc, oEmpLifeCycle.EmployeeID, GlobalFunctions.FirstDateOfMonth(oEmpLifeCycle.SalaryMonth), EnumArrearType.NotPresent); sgs.Save(tc, gradeSalaries); // Grade Salary assignment object can be multiple for arrear item and last item // arrear not present item. oEmpLifeCycle.GradeSalaryAssesmentID = gradeSalaries[gradeSalaries.Count - 1].ID; } ErrMsg = "Error updating organogram"; // Save to Organogram if (oEmpLifeCycle.Orgemployees != null) { OrganogramEmployee oOrg = new OrganogramEmployee(); oEmpLifeCycle.Orgemployees[0].CreatedBy = oEmpLifeCycle.CreatedBy; oEmpLifeCycle.Orgemployees[0].CreatedDate = oEmpLifeCycle.CreatedDate; OrganogramEmployeeService oge = new OrganogramEmployeeService(); oge.DeleteByEmp(tc, oEmpLifeCycle.EmployeeID); oge.Save(tc, oEmpLifeCycle.Orgemployees[0]); } #endregion Grade-Salary & Organogram Node //} ErrMsg = "Error updating life-cycle"; if (oEmpLifeCycle.IsNew) { int id = tc.GenerateID("EmpLifeCycle", "EmpLifeCycleID"); base.SetObjectID(oEmpLifeCycle, id); int seqNo = tc.GenerateID("EmpLifeCycle", "SequenceNO", "Where EmployeeID=" + oEmpLifeCycle.EmployeeID.ToString()); oEmpLifeCycle.Sequence = seqNo; EmpLifeCycleDA.Insert(tc, oEmpLifeCycle); EmployeeHistoryService oEmployeeHistory = new EmployeeHistoryService(); } else { EmpLifeCycleDA.Update(tc, oEmpLifeCycle); } // //if (comp != null) //{ // // if forcely remove ogranogram node component exist, remove employee from organogram // OrganogramEmployeeService ogs = new OrganogramEmployeeService(); // ogs.DeleteByEmp(tc, oEmpLifeCycle.EmployeeID); //} //if (oEmpLifeCycle.EffectDate <= SystemInformationService.GetServerDate(tc)) //{ //HREmployeeDA.UpdateForEmpLifeCycle(tc, oEmpLifeCycle.HREmployee, oEmpLifeCycle.EmployeeID); ErrMsg = "Error updating Status"; /// need to ask shamim bhai //switch (oEmpLifeCycle.Status) //{ // case EnumEmployeeStatus.Waitingforjoin: // case EnumEmployeeStatus.Live: // if (oEmpLifeCycle.GrossSalary > 0) // EmployeeDA.UpdateGross(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.GrossSalary); // // if component contain 'IsContinue', update employee status // if (oEmpLifeCycle.IsConfirm != null) // //if ((bool)oEmpLifeCycle.IsContinue == true) // EmployeeDA.DoConfirm(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.EffectDate, true); // //else // // EmployeeDA.UndoConfirm(tc, oEmpLifeCycle.EmployeeID, false); // // if conponent contain isconfirm, update employee confirm property and confrim date. // if (oEmpLifeCycle.IsContinue != null) // { // if (oEmp.JoiningDate.Date > DateTime.MinValue.Date) // EmployeeDA.DoContinueForLifeCycleForOldEmployee(tc, oEmpLifeCycle.EmployeeID); // else // EmployeeDA.DoContinueForLifeCycle(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.EffectDate); // } // // if conponent contain pf member, update employee pfMembership property property and pfMembership date. // if (oEmpLifeCycle.PFMemberType != null && oEmpLifeCycle.PFMemberType != EnumPFMembershipType.NotYetLive) // HREmployeeDA.UpdatePFInfo(tc, oEmpLifeCycle.EmployeeID, (EnumPFMembershipType)oEmpLifeCycle.PFMemberType, oEmpLifeCycle.EffectDate); // break; // case EnumEmployeeStatus.Discontinued: // case EnumEmployeeStatus.Mobility: // EmployeeDA.UpdateStatus(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.ID, // oEmpLifeCycle.EffectDate, oEmpLifeCycle.Status); // // update end of contract property of emlpoyee by effect date. // if (oEmpLifeCycle.IsCurrentMonthIncluded == true) // EmployeeDA.UpdatemiddleOfMonthDiscontinue(tc, // oEmpLifeCycle.EmployeeID, oEmpLifeCycle.Status, oEmpLifeCycle.EffectDate); // OrganogramEmployeeService OrgEmpSrv = new OrganogramEmployeeService(); // OrgEmpSrv.DeleteByEmp(tc, oEmpLifeCycle.EmployeeID); // break; // case EnumEmployeeStatus.Secondy: // case EnumEmployeeStatus.Suspend: // case EnumEmployeeStatus.Withheld: // // if (oEmpLifeCycle.Status == EnumEmployeeStatus.Withheld ) // EmployeeDA.UpdateStatus(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.ID, // oEmpLifeCycle.EffectDate, oEmpLifeCycle.Status); // // update end of contract property of emlpoyee by effect date. // if (oEmpLifeCycle.IsCurrentMonthIncluded == true) // EmployeeDA.UpdatemiddleOfMonthDiscontinue(tc, // oEmpLifeCycle.EmployeeID, oEmpLifeCycle.Status, oEmpLifeCycle.EffectDate); // break; // default: // break; //} } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(ErrMsg + " for Emp: " + oEmp.EmployeeNo + " " + e.Message, e); #endregion } } //public void Insert(List lifecycles, DateTime salaryCutoffDate, DateTime nextPayProcessDate, // TransactionContext tc) //{ // try // { // foreach (EmpLifeCycle item in lifecycles) // { // if (item.EmployeeID != 0 && item.Employee == null) // { // //item.HREmployee = (new HREmployeeService()).Get(tc, item.EmployeeID); // item.Employee = (new EmployeeService()).Get(tc, item.EmployeeID); // } // //this.ProcessGradeSalary(item); // item.HREmployee = new HREmployee(); // item.HREmployee.SetObjectID(item.EmployeeID); // item.HREmployee.GradeID = (item.GradeID == null) // ? (item.Employee == null ? 0 : item.Employee.GradeID) // : item.GradeID; // item.HREmployee.CategoryID = (item.CategoryID == null) // ? (item.Employee == null ? 0 : item.Employee.CategoryID) // : (int) item.CategoryID; // item.HREmployee.LocationID = (item.LocationID == null) // ? (item.Employee == null ? null : item.Employee.LocationID) // : item.LocationID; // item.HREmployee.DesignationID = (item.DesignationID == null) // ? (item.Employee == null ? null : item.Employee.DesignationID) // : item.DesignationID; // item.HREmployee.DepartmentID = (item.DepartmentID == null) // ? (item.Employee == null ? null : item.Employee.DepartmentID) // : item.DepartmentID; // item.HREmployee.BasicSalary = item.BasicSalary == null // ? (item.Employee == null ? 0.0 : item.Employee.BasicSalary) // : (double)item.BasicSalary; // item.HREmployee.GrossSalary = item.GrossSalary == null // ? (item.Employee == null ? 0.0 : item.Employee.GrossSalary) // : (double)item.GrossSalary; // //if (item.Employee == null) // //{ // // item.HREmployee.GradeID = item.GradeID; // // item.HREmployee.CategoryID = item.CategoryID; // //} // //else // //{ // // item.HREmployee.GradeID = item.Employee.GradeID; // // item.HREmployee.CategoryID = item.Employee.CategoryID; // //} // //item.HREmployee.DesignationID = item.DesignationID; // //item.HREmployee.DepartmentID = item.DepartmentID; // //item.HREmployee.BasicSalary = item.BasicSalary == null ? 0 : (double)item.BasicSalary; // //item.HREmployee.GrossSalary = item.GrossSalary == null ? 0 : (double)item.GrossSalary; // this.Insert(item, tc, salaryCutoffDate, nextPayProcessDate); // } // } // catch (Exception ex) // { // throw new ServiceException(ex.Message); // } //} public int Save(EmpLifeCycle oEmpLifeCycle, TransactionContext tc, DateTime salaryCutoffDate, DateTime nextPayProcessDate) { oEmpLifeCycle.SalaryMonth = nextPayProcessDate; // temporary disabled if (salaryCutoffDate <= DateTime.Today && salaryCutoffDate.Month == nextPayProcessDate.Month) //Today is greater of cutoff date and current month { //oEmpLifeCycle.IsProcessed = false; if (!oEmpLifeCycle.IsNew) return oEmpLifeCycle.ID; return this.Insert(tc, oEmpLifeCycle); } else if (nextPayProcessDate < DateTime.Today) // Last month salary not yet complted monthend { //oEmpLifeCycle.IsProcessed = false; if (!oEmpLifeCycle.IsNew) return oEmpLifeCycle.ID; return this.Insert(tc, oEmpLifeCycle); } else { if (oEmpLifeCycle.EffectDate > DateTime.Today) // future effect data { //oEmpLifeCycle.IsProcessed = false; if (!oEmpLifeCycle.IsNew) return oEmpLifeCycle.ID; return this.Insert(tc, oEmpLifeCycle); } } // find the life cycle contains the 'forcely remove organogram' EmployeeStatus oempStatus = (new EmployeeStatusService()).Get((int)oEmpLifeCycle.StatusDetailID, tc); EmployeeStatus.EmpStatusComponent comp = null; if (oempStatus != null) { comp = (new EmployeeStatusService()).GetChild((int)oEmpLifeCycle.StatusDetailID, tc) .Where(o => o.ComponentType == EnumLifeCycleComponent.Force_Remove_From_Position) .SingleOrDefault(); } // TransactionContext tc = null; try { EmployeeHistory oEmpHistory = new EmployeeHistory(); oEmpHistory.EffectDate = oEmpLifeCycle.EffectDate; oEmpHistory.EmployeeID = oEmpLifeCycle.EmployeeID; oEmpHistory.EmployeeStatus = oEmpLifeCycle.EmployeeStatus; oEmpHistory.Remarks = oEmpLifeCycle.EmployeeStatus.ToString(); oEmpHistory.CreatedBy = oEmpLifeCycle.CreatedBy; oEmpHistory.CreatedDate = DateTime.Today; List gradeSalaries = null; gradeSalaries = oEmpLifeCycle.Gradesalaries; //if (oEmpLifeCycle.EmployeeGradeSalary != null) // gradeSalaries = oEmpLifeCycle.EmployeeGradeSalary.process(); // tc = TransactionContext.Begin(true); //if (oEmpLifeCycle.EffectDate <= SystemInformationService.GetServerDate(tc)) //{ #region Cost-center update if (oEmpLifeCycle.CostCenterID != 0) { EmployeeCostCenterService oEmpCCService = new EmployeeCostCenterService(); EmployeeCostCenter oEmpCC = new EmployeeCostCenter(); List oEmpCCs = new List(); oEmpCC.CostCenterID = (int)oEmpLifeCycle.CostCenterID; oEmpCC.EmployeeID = oEmpLifeCycle.EmployeeID; oEmpCC.IsCurrentCC = true; oEmpCC.Percentage = 100; oEmpCC.CreatedBy = oEmpLifeCycle.CreatedBy; oEmpCC.CreatedDate = oEmpLifeCycle.CreatedDate; oEmpCC.MonthDate = nextPayProcessDate; oEmpCC.TillDate = oEmpCC.MonthDate; oEmpCCs.Add(oEmpCC); oEmpCCService.Save(tc, oEmpCCs); oEmpLifeCycle.EmployeeCCID = oEmpCCs[0].ID; } #endregion Cost-center update #region Grade-Salary & Organogram Node if (oEmpLifeCycle.EmployeeGradeSalary != null) { EmployeeGradeSalaryService sgs = new EmployeeGradeSalaryService(); sgs.DeleteFromDate(tc, oEmpLifeCycle.EmployeeID, new DateTime(2001, 1, 1), EnumArrearType.ToCalculate); sgs.DeleteFromDate(tc, oEmpLifeCycle.EmployeeID, PayrollGlobalFunctions.PayrollFirstDateOfMonth(oEmpLifeCycle.SalaryMonth), EnumArrearType.NotPresent); sgs.Save(tc, gradeSalaries); // Grade Salary assignment object can be multiple for arrear item and last item // arrear not present item. oEmpLifeCycle.GradeSalaryAssesmentID = gradeSalaries[gradeSalaries.Count - 1].ID; } // Insert to Organogram if (oEmpLifeCycle.Orgemployees != null) { OrganogramEmployee oOrg = new OrganogramEmployee(); oEmpLifeCycle.Orgemployees[0].CreatedBy = oEmpLifeCycle.CreatedBy; oEmpLifeCycle.Orgemployees[0].CreatedDate = oEmpLifeCycle.CreatedDate; OrganogramEmployeeService oge = new OrganogramEmployeeService(); oge.DeleteByEmp(tc, oEmpLifeCycle.EmployeeID); oge.Save(tc, oEmpLifeCycle.Orgemployees[0]); } #endregion Grade-Salary & Organogram Node //} if (oEmpLifeCycle.IsNew) { int id = tc.GenerateID("EmpLifeCycle", "EmpLifeCycleID"); base.SetObjectID(oEmpLifeCycle, id); int seqNo = tc.GenerateID("EmpLifeCycle", "SequenceNO", "Where EmployeeID=" + oEmpLifeCycle.EmployeeID.ToString()); oEmpLifeCycle.Sequence = seqNo; EmpLifeCycleDA.Insert(tc, oEmpLifeCycle); // EmployeeHistoryService oEmployeeHistory = new EmployeeHistoryService(); } else { EmpLifeCycleDA.Update(tc, oEmpLifeCycle); } // if (comp != null) { // if forcely remove ogranogram node component exist, remove employee from organogram //OrganogramEmployeeService ogs = new OrganogramEmployeeService(); //ogs.DeleteByEmp(tc, oEmpLifeCycle.EmployeeID); } //if (oEmpLifeCycle.IsReHire != null && oEmpLifeCycle.IsReHire == true) //{ // HREmployee hEmp = new HREmployee(); // hEmp.PrevConfirmDate = oEmpLifeCycle.HREmployee.ConfirDate; // hEmp.PrevEndofContactDate = oEmpLifeCycle.HREmployee.EndOfContractDate; // hEmp.PrevHireDate = oEmpLifeCycle.HREmployee.JoiningDate; // if (oEmpLifeCycle.IsConfirm != null && oEmpLifeCycle.IsConfirm == true) // hEmp.ConfirDate = oEmpLifeCycle.EffectDate; // else // hEmp.ConfirDate = DateTime.MinValue; // hEmp.EndOfContractDate = null; // hEmp.JoiningDate = oEmpLifeCycle.EffectDate; // HREmployeeDA.UpdateRehire(tc, hEmp, oEmpLifeCycle.HREmployee.ID); //} //if (oEmpLifeCycle.EffectDate <= SystemInformationService.GetServerDate(tc)) //{ HREmployeeDA.UpdateForEmpLifeCycle(tc, oEmpLifeCycle.HREmployee, oEmpLifeCycle.EmployeeID); switch (oEmpLifeCycle.EmployeeStatus) { case EnumEmployeeStatus.Waitingforjoin: case EnumEmployeeStatus.Live: EmployeeHistoryService srvemp = new EmployeeHistoryService(); // if component contain 'IsContinue', update employee status if (oEmpLifeCycle.IsConfirm != null) //if ((bool)oEmpLifeCycle.IsContinue == true) EmployeeDA.DoConfirm(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.EffectDate, true); //else // EmployeeDA.UndoConfirm(tc, oEmpLifeCycle.EmployeeID, false); // if conponent contain isconfirm, update employee confirm property and confrim date. if (oEmpLifeCycle.IsContinue != null) { EmployeeDA.DoContinue(tc, oEmpLifeCycle.EmployeeID); if (oEmpLifeCycle.PFMemberType != null) srvemp.DoContinue(tc, oEmpHistory, true); else srvemp.DoContinue(tc, oEmpHistory, false); } // if conponent contain pf member, update employee pfMembership property property and pfMembership date. if (oEmpLifeCycle.PFMemberType != null) { HREmployeeDA.UpdatePFInfo(tc, oEmpLifeCycle.EmployeeID, (EnumPFMembershipType)oEmpLifeCycle.PFMemberType, oEmpLifeCycle.EffectDate); } break; case EnumEmployeeStatus.Discontinued: // update end of contract property of emlpoyee by effect date. EmployeeHistoryService srv = new EmployeeHistoryService(); if (oEmpLifeCycle.IsCurrentMonthIncluded == true) { srv.Save(tc, oEmpHistory, true); EmployeeDA.UpdatemiddleOfMonthDiscontinue(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.EmployeeStatus, oEmpLifeCycle.EffectDate); } else srv.Save(tc, oEmpHistory, false); EmployeeDA.UpdateStatus(tc, oEmpLifeCycle.EmployeeID, oEmpHistory.ID, oEmpLifeCycle.EffectDate, oEmpLifeCycle.EmployeeStatus); //OrganogramEmployeeService OrgEmpSrv = new OrganogramEmployeeService(); //OrgEmpSrv.DeleteByEmp(tc, oEmpLifeCycle.EmployeeID); break; case EnumEmployeeStatus.Secondy: case EnumEmployeeStatus.Suspend: case EnumEmployeeStatus.Withheld: EmployeeHistoryService srvwithheld = new EmployeeHistoryService(); // update end of contract property of emlpoyee by effect date. if (oEmpLifeCycle.IsCurrentMonthIncluded == true) { EmployeeDA.UpdatemiddleOfMonthDiscontinue(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.EmployeeStatus, oEmpLifeCycle.EffectDate); srvwithheld.Save(tc, oEmpHistory, true); } srvwithheld.Save(tc, oEmpHistory, false); EmployeeDA.UpdateStatus(tc, oEmpLifeCycle.EmployeeID, oEmpHistory.ID, oEmpLifeCycle.EffectDate, oEmpLifeCycle.EmployeeStatus); break; default: break; } //} // tc.End(); // By Hassan //oEmpLifeCycle.IsProcessed = true; // EmpLifeCycleDA.UpdateToProcessed(tc, oEmpLifeCycle); return oEmpLifeCycle.ID; } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } public int Insert(TransactionContext tc, EmpLifeCycle item) { try { int id = tc.GenerateID("EmpLifeCycle", "EmpLifeCycleID"); base.SetObjectID(item, id); int seqNo = tc.GenerateID("EmpLifeCycle", "SequenceNO", "Where EmployeeID=" + item.EmployeeID.ToString()); item.Sequence = seqNo; EmpLifeCycleDA.Insert(tc, item); } catch (Exception ex) { throw new ServiceException(ex.Message); } return item.ID; } public void Delete(EmpLifeCycle oEmpLifeCycle, DateTime NextPayProcessDate) { oEmpLifeCycle = this.Get(oEmpLifeCycle.ID); if (oEmpLifeCycle.SalaryMonth < NextPayProcessDate) { throw new Exception("Delete is not allowed on Last month approved data"); } TransactionContext tc = null; try { // find the life cycle contains the 'forcely remove organogram' EmployeeStatus oempStatus = (new EmployeeStatusService()).Get((int)oEmpLifeCycle.StatusDetailID); EmployeeStatus.EmpStatusComponent comp = oempStatus.EmployeeStatusComponents.Find( delegate(EmployeeStatus.EmpStatusComponent lcc) { return lcc.ComponentType == EnumLifeCycleComponent.Force_Remove_From_Position; }); tc = TransactionContext.Begin(true); EmpLifeCycleDA.Delete(tc, oEmpLifeCycle); //if (oEmpLifeCycle.EffectDate <= SystemInformationService.GetServerDate(tc)) //{ #region Update Grade & salary Information if (oEmpLifeCycle.GradeSalaryAssesmentID !=null && oEmpLifeCycle.GradeSalaryAssesmentID != 0) { EmployeeGradeSalaryService sgs = new EmployeeGradeSalaryService(); oEmpLifeCycle.EmployeeGradeSalary = sgs.GetbyID(tc, (int) oEmpLifeCycle.GradeSalaryAssesmentID); if (oEmpLifeCycle.EmployeeGradeSalary != null) { sgs.DeleteFromDate(tc, oEmpLifeCycle.EmployeeID, oEmpLifeCycle.EffectDate, EnumArrearType.ToCalculate); sgs.Delete(tc, oEmpLifeCycle.EmployeeGradeSalary); } } #endregion update Grade & salary Information #region Update costcenter information if (oEmpLifeCycle.CostCenterID != null && oEmpLifeCycle.CostCenterID != 0) { EmployeeCostCenterService oCCSevice = new EmployeeCostCenterService(); oCCSevice.Delete(tc, (int) oEmpLifeCycle.EmployeeCCID); //object crgID = EmpLifeCycleDA.GetCrgId(tc, oEmpLifeCycle.EmployeeID); //if (crgID != null) //{ // EmployeeCostCenter crg = new EmployeeCostCenter(); // crg.EmployeeID = oEmpLifeCycle.EmployeeID; // crg.MonthDate = NextPayProcessDate; // crg.CostCenterID = (Convert.ToInt32(crgID)); // crg.Percentage = 100; // crg.CreatedBy = oEmpLifeCycle.CreatedBy; // crg.IsCurrentCC = true; // crg.CreatedDate = DateTime.Today; // oEmpLifeCycle.EmployeeCostCenters = new List(); // oEmpLifeCycle.EmployeeCostCenters.Add(crg); // oCCSevice.Save(tc, oEmpLifeCycle.EmployeeCostCenters); //} } #endregion Update costcenter information #region Update Organogram information if (comp != null || (oEmpLifeCycle.NodeID != 0)) { OrganogramEmployeeService ogs = new OrganogramEmployeeService(); ogs.DeleteByEmp(tc, oEmpLifeCycle.EmployeeID); object nodeID = EmpLifeCycleDA.GetNodeId(tc, oEmpLifeCycle.EmployeeID); if (nodeID != null) { OrganogramEmployeeService oIsoccupied = new OrganogramEmployeeService(); List occupied = oIsoccupied.Get(tc, (Convert.ToInt32(nodeID))); if (occupied != null && occupied.Count > 0) throw new ServiceException( "Delete is not allowed due to previous assigned position is already occupied by another employee."); object effectDate = EmpLifeCycleDA.GetNodeAssignDate(tc, oEmpLifeCycle.EmployeeID); OrganogramEmployee ogemp = new OrganogramEmployee(); ogemp.AssignDate = Convert.ToDateTime(effectDate); ogemp.EmployeeID = oEmpLifeCycle.EmployeeID; ogemp.NodeID = (Convert.ToInt32(nodeID)); ogemp.CreatedBy = oEmpLifeCycle.CreatedBy; ogemp.CreatedDate = Convert.ToDateTime(effectDate); ogs.Save(tc, ogemp); } } #endregion Update Organogram information EmpLifeCycleDA.UpdateEmployee(tc, oEmpLifeCycle); //} tc.End(); } catch (ServiceException ex) { throw new ServiceException(ex.Message); } catch (Exception e) { #region Handle Exception ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } finally { if (tc != null) tc.HandleError(); } } #endregion } } #endregion