using System; using System.Data; using System.Collections.Generic; using System.Linq; using System.Text; using Ease.CoreV35; using Ease.CoreV35.Model; using Ease.CoreV35.Caching; using System.Data.Linq.Mapping; using System.Windows.Forms; namespace Payroll.BO { #region LeaveProcess [Serializable] public class LeaveProcess : AuditTrailBase { public event ProcessStatus ProcessStatus; public event ProgressStatus ProgressStatus; private List _processStatuses; #region Cache Store private static Cache _cache = new Cache(typeof(LeaveProcess)); #endregion #region Constructor public LeaveProcess() { _leaveYearID = 0; _dProcessDate = DateTime.Now.Date; _isYearEnd = false; _nProgress = 0; _sProcessYearDesc = ""; _leaveYear = LeaveYear.GetCurrentYear(); _PayrollTypeID = 0; } #endregion public List ErrorList { get { return _processStatuses; } } private void UpdateprocessStatus(string statusString) { if (ProcessStatus != null) ProcessStatus(statusString); } private void UpdateProgressStatus(EnumProcessStatus status) { if (ProgressStatus != null) ProgressStatus(status); } #region Properties #region PayrollTypeID private int _PayrollTypeID; public int PayrollTypeID { get { return _PayrollTypeID; } set { _PayrollTypeID = value; } } #endregion #region LeaveYearID private int _leaveYearID; public int LeaveYearID { get { return _leaveYearID; } set { _leaveYearID = value; } } #endregion private string _sProcessYearDesc; public string ProcessYearDescription { get { return _sProcessYearDesc; } set { _sProcessYearDesc = value; } } #region For The Benifited Year public int ForTheBenifitedYear { get { return _leaveYearID > 0 ? _leaveYearID + 1 : 0; } } #endregion #region ProcessDate private DateTime _dProcessDate; public DateTime ProcessDate { get { return _dProcessDate; } set { _dProcessDate = value; } } #endregion private bool _isYearEnd; public bool IsYearEnd { get { return _isYearEnd; } set { _isYearEnd = value; } } #endregion private int _nProgress; private LeaveYear _leaveYear; public LeaveYear LeaveYear { get { if (_leaveYear == null) { _leaveYear = Payroll.BO.LeaveYear.Service.Get(ID.FromInteger(_leaveYearID)); } return _leaveYear; } set { _leaveYear = value; } } private ObjectsTemplate _empLeaveStatuss; public ObjectsTemplate EmpLeaveStatuss { get { return _empLeaveStatuss; } set { _empLeaveStatuss = value; } } #endregion #region Functions private ObjectsTemplate _LeaveProcessDetails; public ObjectsTemplate LeaveProcessDetails { get { return _LeaveProcessDetails; } set { _LeaveProcessDetails = value; } } public static ObjectsTemplate GetByYearType(int leaveYearID, int leaveId) { ObjectsTemplate oEmpLeaveStatuss = null; oEmpLeaveStatuss = LeaveProcess.Service.GetByYearType(leaveYearID, leaveId); return oEmpLeaveStatuss; } public LeaveProcess Get(int nLeaveProcessId) { LeaveProcess oLeaveProcess = null; #region Cache Header oLeaveProcess = (LeaveProcess)_cache["Get", nLeaveProcessId]; if (oLeaveProcess != null) return oLeaveProcess; #endregion oLeaveProcess = LeaveProcess.Service.Get(ID.FromInteger(nLeaveProcessId)); #region Cache Footer _cache.Add(oLeaveProcess, "Get", nLeaveProcessId); #endregion return oLeaveProcess; } public static LeaveProcess GetByYearID(int nLeaveProcessYear) { LeaveProcess oLeaveProcess = null; oLeaveProcess = LeaveProcess.Service.Get(nLeaveProcessYear); return oLeaveProcess; } public static LeaveProcess GetByYearANDPayrollTypeID(int nLeaveProcessYear, int nPayrollTypeid) { LeaveProcess oLeaveProcess = null; oLeaveProcess = LeaveProcess.Service.Get(nLeaveProcessYear, nPayrollTypeid); return oLeaveProcess; } public static LeaveProcess GetLastProcess() { LeaveProcess oLeaveProcess = null; oLeaveProcess = LeaveProcess.Service.GetLastProcess(); return oLeaveProcess; } public ID Save() { return LeaveProcess.Service.Save(this); } public void Delete() { LeaveProcess.Service.Delete(this.LeaveYearID); } public void DeleteByPayrollTypeID() { LeaveProcess.Service.Delete(this.LeaveYearID, this.PayrollTypeID); } public void UpadteLeaveYearStatus() { LeaveProcess.Service.UpadteLeaveYearStatus(this); } public void DoYearEnd() { LeaveProcess.Service.DoYearEnd(this); } public EmpLeaveStatus GetStatusFromColl(int employeeid, int leaveyearID, int leaveid) { foreach (EmpLeaveStatus oItem in this.LeaveProcessDetails) { if (oItem.EmpId == employeeid && oItem.LeaveYearID == leaveyearID && oItem.LeaveId == leaveid) return oItem; } return null; } #region New process public void Process(LeaveYear oLeaveYear) { //ObjectsTemplate oEmployees = new ObjectsTemplate(); //Employee oemp1 = Employee.Get("000004"); //oEmployees.Add(oemp1); ObjectsTemplate oEmployees = Employee.GetNew(oLeaveYear.EndDate,Payroll.BO.SystemInformation.CurrentSysInfo.PayrollTypeID.Integer); UpdateprocessStatus("Collecting Leave Information ...."); _nProgress = 0; _empLeaveStatuss = new ObjectsTemplate(); try { _empLeaveStatuss = this.CurrentYearStatusForPreocess(oEmployees, oLeaveYear, EnumLeaveStatus.Approved); } catch (Exception exp) { throw new Exception(exp.Message); } this.EmpLeaveStatuss = _empLeaveStatuss; } #endregion private void PrepareLeaveStatuses(ObjectsTemplate oLeaveStatuss, DataTable oDT) { LeaveProcessDetail oStatus = null; foreach (DataRow oRow in oDT.Rows) { _nProgress += 1; oStatus = new LeaveProcessDetail(); oStatus.EmpId = Convert.ToInt32(oRow["EmpId"]); oStatus.LeaveYearID = _leaveYear.ID.Integer; oStatus.LeaveId = Convert.ToInt32(oRow["LeaveId"]); oStatus.CarryFromPrvYear = Convert.ToInt32(oRow["CarryFromPrvYear"]); SetDetails(oStatus, oRow); oLeaveStatuss.Add(oStatus); } } private void SetDetails(LeaveProcessDetail oStatus, DataRow orow) { LeaveProcessDetail oPrevStatus = null; LeaveParameterDetail oDetail = null; Employee oEmp = Employee.Service.Get(ID.FromInteger(oStatus.EmpId)); LeaveParameter oParameter = new LeaveParameter(); oPrevStatus = LeaveProcessDetail.GetYearStatus(_leaveYear.ID.Integer - 1, oStatus.LeaveId, oEmp.ID.Integer); double nBalance = 0.0; oDetail = oParameter.GetDetailForEmp(oEmp.ID); if (oDetail != null) { nBalance = (oPrevStatus == null) ? oDetail.MaxDays : (oPrevStatus.YearEndBalance + oDetail.MaxDays); nBalance -= Convert.ToDouble(orow["TotalDays"]); if (nBalance > 0) { oStatus.CFDays = (nBalance >= oDetail.MaxCF) ? oDetail.MaxCF : nBalance; nBalance = nBalance - oStatus.CFDays; oStatus.EncashDays = (nBalance >= oDetail.MaxEncash) ? oDetail.MaxEncash : nBalance; nBalance = nBalance - oStatus.EncashDays; } else { oStatus.CFDays = 0; oStatus.EncashDays = 0; } oStatus.EncashAmount = 0; oStatus.NormalLeaveDays = oDetail.MaxDays; oStatus.YearEndBalance = oStatus.CFDays; } } public bool IsProcessed(int nProcessYear) { return LeaveProcess.Service.IsProcessed(nProcessYear); } public ObjectsTemplate CurrentYearStatusForPreocess(ObjectsTemplate oEmployees, LeaveYear lYear, EnumLeaveStatus eStatus) { ObjectsTemplate oCurrYearBalance = null; ObjectsTemplate oAllEmpsCurrYearBalance = new ObjectsTemplate(); DateTime operationDate = GlobalFunctions.GetOperationDate(); LeaveYear oCurrYear = lYear; LeaveYear oPrvYear = LeaveYear.LastLeaveYear(oCurrYear); List setupTypes = SetupDetail.GetTypes(EnumParameterSetup.Leave); ObjectsTemplate setupDetails = SetupDetail.GetParameters(EnumParameterSetup.Leave); ObjectsTemplate leaveParamss = LeaveParameter.Get(); ObjectsTemplate leaveParamDetails = new LeaveParameter().GetAllDetails(); List oLs = LeaveEntry.GetByLeaveYear(oCurrYear.ID.Integer); ObjectsTemplate olYears = LeaveYear.Service.Get(); LeaveYear ly = EmpLeaveStatus.GetPrvYear(oCurrYear, olYears); List oPrevStatus = EmpLeaveStatus.GetByYear(ly == null ? 0 : ly.ID.Integer); List oPrevStatuses = oPrevStatus;// EmpLeaveStatus.GetAllPrvYearStatus(oCurrYear.ID.Integer); UpdateProgressStatus(EnumProcessStatus.Start); int nMax = oEmployees.Count; int ncc = 1; foreach (Employee oEmp in oEmployees) { UpdateProgressStatus(EnumProcessStatus.PerformStep); UpdateprocessStatus("Collecting Leave Information " + ncc.ToString() + "/" + nMax); ObjectsTemplate oAppLeaveParams = LeaveParameter.ApplicableParamsForReport(oEmp, setupTypes, setupDetails, leaveParamss); oCurrYearBalance = EmpLeaveStatus.CurrentYearStatusForProcess(oEmp, operationDate, oAppLeaveParams, oCurrYear, oLs, eStatus, oPrevStatuses, leaveParamDetails, olYears, oPrevStatus); foreach (EmpLeaveStatus eSts in oCurrYearBalance) oAllEmpsCurrYearBalance.Add(eSts); ncc++; } UpdateProgressStatus(EnumProcessStatus.End); return oAllEmpsCurrYearBalance; } #region Functions public static ObjectsTemplate Get() { #region Cache Header ObjectsTemplate leaveProcess = _cache["Get"] as ObjectsTemplate; if (leaveProcess != null) return leaveProcess; #endregion leaveProcess = LeaveProcess.Service.Get(); #region Cache Footer _cache.Add(leaveProcess, "Get"); #endregion return leaveProcess; } #endregion #region Service Factory internal static ILeaveProcessService Service { get { return Services.Factory.CreateService(typeof(ILeaveProcessService)); } } #endregion } #endregion #region Leave Process Detail public class EmpLeaveStatus : BasicBaseObject { #region Cache Store private static Cache _cache = new Cache(typeof(EmpLeaveStatus)); #endregion #region Constructor public EmpLeaveStatus() { _nProcessId = 0; _nEmpId = 0; _leaveYearID = 0; _nLeaveId = 0; _carryFromPrvYear = 0; _nCFDays = 0; _nEncashDays = 0; _nEncashAmount = 0; _nNormalLeaveDays = 0; _nYearEndBalance = 0; _nleaveavailed = 0; _nOpeningBalance = 0; _nForFitedDays = 0; _CurrentYearBalance = 0; _CurrentYearOpening = 0; _ApplyDays = 0; } #endregion private double _CurrentYearBalance; public double CurrentYearBalance { get { return _CurrentYearBalance; } set { _CurrentYearBalance = value; } } private double _CurrentYearOpening; public double CurrentYearOpening { get { return _CurrentYearOpening; } set { _CurrentYearOpening = value; } } #region Properties #region ProcessId private int _nProcessId; public int ProcessId { get { return _nProcessId; } set { _nProcessId = value; } } #endregion #region EmpId private int _nEmpId; public int EmpId { get { return _nEmpId; } set { _nEmpId = value; } } #endregion #region ProcessDate private int _leaveYearID; public int LeaveYearID { get { return _leaveYearID; } set { _leaveYearID = value; } } #endregion #region LeaveId private int _nLeaveId; public int LeaveId { get { return _nLeaveId; } set { _nLeaveId = value; } } #endregion #region ForBenifitedYear private double _carryFromPrvYear; public double CarryFromPrvYear { get { return _carryFromPrvYear; } set { _carryFromPrvYear = value; } } #endregion #region CFDays private double _nCFDays; public double CFDays { get { return _nCFDays; } set { _nCFDays = value; } } #endregion #region EncashDays private double _nEncashDays; public double EncashDays { get { return _nEncashDays; } set { _nEncashDays = value; } } #endregion #region EncashAmount private double _nEncashAmount; public double EncashAmount { get { return _nEncashAmount; } set { _nEncashAmount = value; } } #endregion #region NormalLeaveDays private double _nNormalLeaveDays; public double NormalLeaveDays { get { return _nNormalLeaveDays; } set { _nNormalLeaveDays = value; } } private double _ApplyDays; public double ApplyDays { get { return _ApplyDays; } set { _ApplyDays = value; } } public double ClosingBalance { get { return _nYearEndBalance; } } #endregion #region YearEndBalance private double _nYearEndBalance; public double YearEndBalance { get { return _nYearEndBalance; } set { _nYearEndBalance = value; } } #endregion #region Leave Availed private double _nleaveavailed; public double LeaveAvailed { get { return _nleaveavailed; } set { _nleaveavailed = value; } } #endregion #region Emp Opening Balance private double _nOpeningBalance; public double OpeningBalance { get { return _nOpeningBalance; } set { _nOpeningBalance = value; } } #endregion #region Forfited Days private double _nForFitedDays; public double ForfitedDays { get { return _nForFitedDays; } set { _nForFitedDays = value; } } #endregion private Leave _oLeave; public Leave Leave { get { if (_nLeaveId != 0) { _oLeave = new Leave().Get(ID.FromInteger(_nLeaveId)); } return _oLeave; } } #endregion public void UpdateEncashAmount(ObjectsTemplate _oEmpLeaveStatus) { LeaveProcess.Service.UpdateEncashAmount(_oEmpLeaveStatus); } public static ObjectsTemplate GetByYearType(int leaveYearID, int leaveId) { ObjectsTemplate oEmpLeaveStatuss = null; oEmpLeaveStatuss = LeaveProcess.Service.GetByYearType(leaveYearID, leaveId); return oEmpLeaveStatuss; } public static List> CurrentYearStatusForReport(ObjectsTemplate oemps, LeaveYear lYear) { List> obalance = new List>(); ; ObjectsTemplate oCurrYearBalance = null; DateTime operationDate = GlobalFunctions.GetOperationDate(); foreach (Employee oEmployee in oemps) { oCurrYearBalance = new ObjectsTemplate(); //EmpLeaveStatus oStatus = null; LeaveYear oCurrYear = lYear; //LeaveYear oPrvYear = LeaveYear.LastLeaveYear(oCurrYear); //ObjectsTemplate prvYearStatus =EmpLeaveStatus.GetAllStatus(employeeID); ObjectsTemplate oAppLeaveParams = LeaveParameter.ApplicableParams(oEmployee); ObjectsTemplate tempEmps = new ObjectsTemplate(); tempEmps.Add(oEmployee); oCurrYearBalance = EmpLeaveStatus.CurrentYearStatus(tempEmps, oCurrYear, EnumLeaveStatus.Approved); obalance.Add(oCurrYearBalance); } return obalance; } public static ObjectsTemplate CurrentYearStatusForView(Employee oEmployee, DateTime operationDate, ObjectsTemplate oAppLeaveParams, LeaveYear oCurrYear) { DateTime dCurrentDate = operationDate; ObjectsTemplate oCurrYearBalance = new ObjectsTemplate(); LeaveParameterDetail oDetail = null; ConfigurationManager oCon = new ConfigurationManager(); //string Params = ConfigurationManager.GetStringValue("leave", "balance", EnumConfigurationType.Logic); foreach (LeaveParameter oItem in oAppLeaveParams) { EmpLeaveStatus oPrevStatus=new EmpLeaveStatus(); EmpLeaveStatus oCurrStatus = new EmpLeaveStatus(); oCurrStatus.EmpId = oEmployee.ID.Integer; oCurrStatus.LeaveId = oItem.LeaveId; oCurrStatus.LeaveYearID = oCurrYear.ID.Integer; //oDetail = oItem.GetApplicableForEmployee(oEmployee, operationDate,); //8 if (oDetail != null) oCurrStatus.NormalLeaveDays = oDetail.MaxDays; else continue; oItem.Details = new ObjectsTemplate(); oItem.Details.Add(oDetail); //oPrevStatus = EmpLeaveStatus.GetPrvYearStatus(oCurrYear.ID.Integer, oItem.LeaveId, oEmployee.ID.Integer); #region calculate the opening balance if (oPrevStatus != null) { oCurrStatus.OpeningBalance = oPrevStatus.CFDays; oCurrStatus.CFDays = oPrevStatus.CFDays; } double nNormalLeavedays = 0; if (oEmployee.JoiningDate.Date.Year == oCurrYear.StartDate.Date.Year) { TimeSpan ts = (oCurrYear.EndDate - oEmployee.JoiningDate); double ntemp = oCurrStatus.NormalLeaveDays / 12; double nDays = ts.Days; nNormalLeavedays = Math.Round((ntemp * (nDays / (double)30.00))); } else { nNormalLeavedays = oCurrStatus.NormalLeaveDays; } oCurrStatus.NormalLeaveDays = nNormalLeavedays; if (oItem.IsForfited) { if (oCurrYear.StartDate.AddMonths(oItem.ForfitedMonth).Month >= dCurrentDate.Date.Month) { double nLeaveAvailed = 0; oCurrStatus.ForfitedDays = oPrevStatus.YearEndBalance - nLeaveAvailed; oCurrStatus.ForfitedDays = (oCurrStatus.ForfitedDays < 0) ? 0 : oCurrStatus.ForfitedDays; } } if (oItem.IsMonthlyBalance) oCurrStatus.OpeningBalance = oCurrStatus.OpeningBalance + Math.Round(oCurrStatus.NormalLeaveDays / 12 * (dCurrentDate.Date.Month - 1)); else oCurrStatus.OpeningBalance = oCurrStatus.OpeningBalance + oCurrStatus.NormalLeaveDays; oCurrStatus.OpeningBalance = oCurrStatus.OpeningBalance > oItem.MaxAccumulatedDays ? oItem.MaxAccumulatedDays : oCurrStatus.OpeningBalance; //if (oItem.Leave.IsEarnedLeave) // oCurrStatus.OpeningBalance = oCurrStatus.OpeningBalance > oItem.MaxAccumulatedDays ? oItem.MaxAccumulatedDays : oCurrStatus.OpeningBalance; //else // oCurrStatus.OpeningBalance = (oCurrStatus.OpeningBalance + oCurrStatus.NormalLeaveDays) > oItem.MaxAccumulatedDays ? oItem.MaxAccumulatedDays : oCurrStatus.OpeningBalance + oCurrStatus.NormalLeaveDays; #endregion calculate the opening balance #region calculate leave availed in current year oCurrStatus.LeaveAvailed = LeaveEntry.GetLeaveAmtByType(oEmployee.ID.Integer, oItem.ID.Integer, oCurrYear.ID.Integer, EnumLeaveStatus.Approved); //10 #endregion calculate leave availed in current year #region Calculate Year-End Balance oCurrStatus.YearEndBalance = 0; if (oItem.Leave.IsBalanceCalculationNeeded == false) { oCurrStatus.NormalLeaveDays = 0; oCurrStatus.OpeningBalance = 0; } else oCurrStatus.YearEndBalance = oCurrStatus.OpeningBalance - (oCurrStatus.ForfitedDays + oCurrStatus.LeaveAvailed); #endregion Calculate Year-End Balance oCurrYearBalance.Add(oCurrStatus); } return oCurrYearBalance; } private static double GetCurrentYearDays(EnumLeaveCalculationType eType , Employee emp , DateTime dCurrentDate , EmpLeaveStatus oPreviousStatus , LeaveParameterDetail oDetail , LeaveYear oCurrentYear) { double nTotalDays = 0; TimeSpan ts = new TimeSpan(); double nTempDays = 0; if (eType == EnumLeaveCalculationType.Daily) { List oAttnProcess = new List(); List oPresentRecords = new List(); oAttnProcess = DailyAttnProcess.Get(emp.ID , GlobalFunctions.FirstDateOfYear(dCurrentDate) , dCurrentDate); oPresentRecords = oAttnProcess.FindAll(delegate(DailyAttnProcess oitem) { return oitem.AttenType == EnumAttendanceType.Present; }); if (oPresentRecords.Count > 0) nTotalDays = (double) oPresentRecords.Count / 18; } else if (eType == EnumLeaveCalculationType.Monthly) { if (emp.JoiningDate > oCurrentYear.StartDate) ts = dCurrentDate - emp.JoiningDate; else ts = dCurrentDate - GlobalFunctions.FirstDateOfYear(dCurrentDate); nTempDays = oDetail.MaxDays / 12; nTotalDays = (double) nTempDays * (ts.Days / 30); } else if (eType == EnumLeaveCalculationType.Yearly) { if (emp.JoiningDate > oCurrentYear.StartDate) ts = dCurrentDate - emp.JoiningDate; else ts = dCurrentDate - GlobalFunctions.FirstDateOfYear(dCurrentDate); if (ts.Days > 365) nTotalDays = (double) oDetail.MaxDays; } //else if (eType == EnumLeaveCalculationType.Prorated) //{ // if (emp.JoiningDate > oCurrentYear.StartDate) // { // ts = GlobalFunctions.LastDateOfYear(dCurrentDate) - emp.JoiningDate; // } // else // { // ts = GlobalFunctions.LastDateOfYear(dCurrentDate) - GlobalFunctions.FirstDateOfYear(dCurrentDate); // } // nTotalDays = (oDetail.MaxDays / 365) * ts.Days; //} else if (eType == EnumLeaveCalculationType.Not_Applicable) { //if (emp.JoiningDate > oCurrentYear.StartDate) // ts = GlobalFunctions.LastDateOfYear(dCurrentDate) - emp.JoiningDate; //else ts = GlobalFunctions.LastDateOfYear(dCurrentDate) - GlobalFunctions.FirstDateOfYear(dCurrentDate); nTempDays = oDetail.MaxDays / 12; nTotalDays = (double) nTempDays * (ts.Days / 30); } else if (eType == EnumLeaveCalculationType.Not_Applicable_With_Prorated) { if (emp.JoiningDate > oCurrentYear.StartDate) ts = GlobalFunctions.LastDateOfYear(dCurrentDate) - emp.JoiningDate; else ts = GlobalFunctions.LastDateOfYear(dCurrentDate) - GlobalFunctions.FirstDateOfYear(dCurrentDate); nTempDays = oDetail.MaxDays / 12; nTotalDays = (double) nTempDays * (ts.Days / 30); } return Math.Round(nTotalDays , 0); } public static List GetAllPrvYearStatus(int leaveYearID) { LeaveYear oCurrYear = LeaveYear.Service.Get(ID.FromInteger(leaveYearID)); LeaveYear oPrvYear = null; ObjectsTemplate olYears = LeaveYear.Service.Get(); foreach (LeaveYear oItem in olYears) { if (oItem.EndDate.AddDays(1) == oCurrYear.StartDate) { oPrvYear = oItem; break; } } if (oPrvYear == null) return null; return LeaveProcess.Service.GetByYear(oPrvYear.ID.Integer); } public static ObjectsTemplate CurrentYearStatusForProcess(Employee oEmployee, DateTime operationDate, ObjectsTemplate oAppLeaveParams, LeaveYear oCurrYear, List oLeaveEntries, EnumLeaveStatus enumLeaveStatus, List oPrevStatuses, List ParamDetails, ObjectsTemplate olYears, List oAllPrevStatus) { DateTime dCurrentDate = operationDate; ObjectsTemplate oCurrYearBalance = new ObjectsTemplate(); LeaveParameterDetail oDetail = null; ConfigurationManager oCon = new ConfigurationManager(); //string Params = ConfigurationManager.GetStringValue("leave", "balance", EnumConfigurationType.Logic); foreach (LeaveParameter oItem in oAppLeaveParams) { EmpLeaveStatus oPrevStatus; EmpLeaveStatus oCurrStatus = new EmpLeaveStatus(); oCurrStatus.EmpId = oEmployee.ID.Integer; oCurrStatus.LeaveId = oItem.LeaveId; oCurrStatus.LeaveYearID = oCurrYear.ID.Integer; //ObjectsTemplate oExceptions = LeaveException.GetByEmpID(oItem.LeaveId, oEmployee.ID.Integer); //if (oExceptions.Count > 0) //{ // oCurrStatus.LeaveAvailed = LeaveEntry.GetLeaveAmtByType(oEmployee.ID.Integer, oItem.Leave.ID.Integer, oCurrYear.ID.Integer, EnumLeaveStatus.Approved); //10 // oCurrStatus.OpeningBalance = oExceptions[0].OpeningBalance + oExceptions[0].MaxDays; // oCurrStatus.YearEndBalance = oCurrStatus.OpeningBalance - oCurrStatus.LeaveAvailed; //} //else //{ oDetail = oItem.GetApplicableForEmployee(oEmployee, operationDate, ParamDetails); if (oDetail != null) oCurrStatus.NormalLeaveDays = 0; else continue; //oItem.Details = new ObjectsTemplate(); //oItem.Details.Add(oDetail); ////need to change oPrevStatus = oAllPrevStatus.Find(delegate(EmpLeaveStatus es) { return es.LeaveId == oItem.LeaveId && es.EmpId == oEmployee.ID.Integer; }); //.GetPrvYearStatus(oCurrYear.ID.Integer, oItem.LeaveId, oEmployee.ID.Integer,oCurrYear,olYears); oCurrStatus.CurrentYearBalance = 0; oCurrStatus.CurrentYearOpening = 0; #region calculate the opening balance new if (oPrevStatus == null) oCurrStatus.CurrentYearOpening = 0; else oCurrStatus.CurrentYearOpening = oPrevStatus.YearEndBalance; #endregion #region calculate the current year balance if (oItem.ApplicableFor == LeaveApplicableType.Confirmed) { if (oEmployee.IsConfirmed == true) { oCurrStatus.CurrentYearBalance = Math.Round(GetCurrentYearDays(oItem.CalculationType, oEmployee, dCurrentDate, oPrevStatus, oDetail, oCurrYear), 1); } else oCurrStatus.CurrentYearBalance = 0; } else { oCurrStatus.CurrentYearBalance = Math.Round(GetCurrentYearDays(oItem.CalculationType, oEmployee, dCurrentDate, oPrevStatus, oDetail, oCurrYear), 1); } #endregion oCurrStatus.OpeningBalance = oCurrStatus.CurrentYearBalance; #region calculate leave availed in current year if (oLeaveEntries == null) oCurrStatus.LeaveAvailed = 0; else { var itemsInCart = from o in oLeaveEntries where o.EmpID == oEmployee.ID.Integer && o.LeaveID.Integer == oItem.LeaveId && o.LeaveYear == oCurrYear.ID.Integer && (o.LeaveStatus == enumLeaveStatus || o.LeaveStatus == EnumLeaveStatus.Cancel_Request) select new { o.ApprovedTotalDays }; var sum = itemsInCart.ToList().Select(c => c.ApprovedTotalDays).Sum(); oCurrStatus.LeaveAvailed = Convert.ToDouble(sum); } #endregion calculate leave availed in current year #region Calculate Year-End Balance oCurrStatus.YearEndBalance = 0; if (oItem.Leave.IsBalanceCalculationNeeded == false) { oCurrStatus.NormalLeaveDays = 0; oCurrStatus.OpeningBalance = 0; } else oCurrStatus.YearEndBalance = Math.Round(oCurrStatus.OpeningBalance - (oCurrStatus.ForfitedDays + oCurrStatus.LeaveAvailed),1); if (oCurrStatus.YearEndBalance < 0) { oCurrStatus.CFDays = 0; oCurrStatus.YearEndBalance += oCurrStatus.CurrentYearOpening; } else { if (oDetail.MaxCF > 0) oCurrStatus.CFDays = oCurrStatus.YearEndBalance > oDetail.MaxCF ? oDetail.MaxCF : oCurrStatus.YearEndBalance; else oCurrStatus.CFDays = 0; oCurrStatus.YearEndBalance = Math.Round(oCurrStatus.CFDays + oCurrStatus.CurrentYearOpening,1); } if (oItem.MaxAccumulatedDays > 0) oCurrStatus.YearEndBalance = Math.Round(oCurrStatus.YearEndBalance > oItem.MaxAccumulatedDays ? oItem.MaxAccumulatedDays : oCurrStatus.YearEndBalance,1); //} #endregion Calculate Year-End Balance if (oItem.Leave.IsBalanceCalculationNeeded) { oCurrStatus.YearEndBalance = Math.Round(oCurrStatus.YearEndBalance, 1); oCurrStatus.OpeningBalance = Math.Round(oCurrStatus.OpeningBalance, 1); oCurrYearBalance.Add(oCurrStatus); } } return oCurrYearBalance; } public static ObjectsTemplate CurrentYearStatus(Employee oEmployee, DateTime operationDate, ObjectsTemplate oAppLeaveParams, LeaveYear oCurrYear, List oLeaveEntries, EnumLeaveStatus enumLeaveStatus, List oPrevStatuses, List ParamDetails, List oExceptions) { try { DateTime dCurrentDate = operationDate; DateTime from_Date = DateTime.MinValue; DateTime to_Date = DateTime.MinValue; ObjectsTemplate oCurrYearBalance = new ObjectsTemplate(); LeaveParameterDetail oDetail = null; ConfigurationManager oCon = new ConfigurationManager(); string Params = ConfigurationManager.GetStringValue("leave", "balance", EnumConfigurationType.Logic); foreach (LeaveParameter oItem in oAppLeaveParams) { EmpLeaveStatus oPrevStatus = null; EmpLeaveStatus oCurrStatus = new EmpLeaveStatus(); oCurrStatus.EmpId = oEmployee.ID.Integer; oCurrStatus.LeaveId = oItem.LeaveId; oCurrStatus.LeaveYearID = oCurrYear.ID.Integer; // int empId = oEmployee.ID.Integer; from_Date = GlobalFunctions.FirstDateOfYear(operationDate); to_Date = GlobalFunctions.LastDateOfYear(operationDate); ObjectsTemplate les = LeaveEntry.GetByLeaveID(oItem.LeaveId, empId, from_Date, to_Date); double countDays = 0; foreach (LeaveEntry le in les) { countDays += le.AppliedTotalDays; } oCurrStatus.ApplyDays = countDays; // if (oPrevStatuses != null) oPrevStatus = oPrevStatuses.Find(delegate(EmpLeaveStatus el) { return el.LeaveId == oItem.LeaveId && el.EmpId == oEmployee.ID.Integer; }); //EmpLeaveStatus.GetPrvYearStatus(oCurrYear.ID.Integer, oItem.LeaveId, oEmployee.ID.Integer); LeaveException oLeaveEx = oExceptions.Find(delegate(LeaveException el) { return el.LeaveID == oItem.LeaveId && el.EmployeeID == oEmployee.ID.Integer; }); //EmpLeaveStatus.GetPrvYearStatus(oCurrYear.ID.Integer, oItem.LeaveId, oEmployee.ID.Integer); oDetail = oItem.GetApplicableForEmployee2(oEmployee, operationDate, ParamDetails, oItem.ID); if (oLeaveEx != null) { oCurrStatus.LeaveAvailed = LeaveEntry.GetLeaveAmtByType(oEmployee.ID.Integer, oItem.Leave.ID.Integer, oCurrYear.ID.Integer, EnumLeaveStatus.Approved); //10 oCurrStatus.OpeningBalance = oLeaveEx.OpeningBalance + oLeaveEx.MaxDays; oCurrStatus.YearEndBalance = oCurrStatus.OpeningBalance - oCurrStatus.LeaveAvailed; } else { if (oDetail != null) oCurrStatus.NormalLeaveDays = 0; else continue; //oItem.Details = new ObjectsTemplate(); //oItem.Details.Add(oDetail); oCurrStatus.CurrentYearBalance = 0; oCurrStatus.CurrentYearOpening = 0; #region calculate the opening balance new if (oPrevStatus == null) oCurrStatus.CurrentYearOpening = 0; else { oCurrStatus.CurrentYearOpening = oPrevStatus.YearEndBalance; oCurrStatus.CFDays = oPrevStatus.CFDays; } #endregion #region calculate the current year balance if (oItem.ApplicableFor == LeaveApplicableType.Confirmed) { if (oEmployee.IsConfirmed == true) { oCurrStatus.CurrentYearBalance = Math.Round(GetCurrentYearDays(oItem.CalculationType, oEmployee, dCurrentDate, oPrevStatus, oDetail, oCurrYear), 1); } else oCurrStatus.CurrentYearBalance = 0; } else { oCurrStatus.CurrentYearBalance = Math.Round(GetCurrentYearDays(oItem.CalculationType, oEmployee, dCurrentDate, oPrevStatus, oDetail, oCurrYear), 1); } #endregion oCurrStatus.OpeningBalance = oCurrStatus.CurrentYearBalance + oCurrStatus.CurrentYearOpening; #region calculate leave availed in current year if (oLeaveEntries == null) oCurrStatus.LeaveAvailed = 0; else { var itemsInCart = from o in oLeaveEntries where o.EmpID == oEmployee.ID.Integer && o.LeaveID.Integer == oItem.LeaveId && o.LeaveYear == oCurrYear.ID.Integer && (o.LeaveStatus == enumLeaveStatus || o.LeaveStatus == EnumLeaveStatus.Cancel_Request) select new { o.ApprovedTotalDays }; var sum = itemsInCart.ToList().Select(c => c.ApprovedTotalDays).Sum(); oCurrStatus.LeaveAvailed = Convert.ToDouble(sum); } #endregion calculate leave availed in current year #region Calculate Year-End Balance oCurrStatus.YearEndBalance = 0; if (oItem.MaxAccumulatedDays > 0) { oCurrStatus.OpeningBalance = oCurrStatus.OpeningBalance > oItem.MaxAccumulatedDays ? oItem.MaxAccumulatedDays : oCurrStatus.OpeningBalance; oCurrStatus.OpeningBalance = Math.Round(oCurrStatus.OpeningBalance, 1); } if (oItem.Leave.IsBalanceCalculationNeeded == false) { oCurrStatus.NormalLeaveDays = 0; oCurrStatus.OpeningBalance = 0; } else { oCurrStatus.YearEndBalance = Math.Round(oCurrStatus.OpeningBalance - (oCurrStatus.ForfitedDays + oCurrStatus.LeaveAvailed), 1); oCurrStatus.YearEndBalance = Math.Round(oCurrStatus.YearEndBalance, 1); } } #endregion Calculate Year-End Balance if (oItem.Leave.IsBalanceCalculationNeeded) oCurrYearBalance.Add(oCurrStatus); } return oCurrYearBalance; } catch (Exception exp) { MessageBox.Show(oEmployee.EmployeeNo); throw new Exception(exp.Message); } return new ObjectsTemplate(); } public static ObjectsTemplate CurrentYearStatusForPreocess(ObjectsTemplate oEmployees, LeaveYear lYear, EnumLeaveStatus eStatus, ProgressBar pgBar) { ObjectsTemplate oCurrYearBalance = null; ObjectsTemplate oAllEmpsCurrYearBalance = new ObjectsTemplate(); DateTime operationDate = GlobalFunctions.GetOperationDate(); LeaveYear oCurrYear = lYear; LeaveYear oPrvYear = LeaveYear.LastLeaveYear(oCurrYear); List setupTypes = SetupDetail.GetTypes(EnumParameterSetup.Leave); ObjectsTemplate setupDetails = SetupDetail.GetParameters(EnumParameterSetup.Leave); ObjectsTemplate leaveParamss = LeaveParameter.Get(); ObjectsTemplate leaveParamDetails = new LeaveParameter().GetAllDetails(); List oLs = LeaveEntry.GetByLeaveYear(oCurrYear.ID.Integer); List oPrevStatuses = EmpLeaveStatus.GetAllPrvYearStatus(oCurrYear.ID.Integer); ObjectsTemplate olYears = LeaveYear.Service.Get(); LeaveYear ly=EmpLeaveStatus.GetPrvYear(oCurrYear,olYears); List oPrevStatus = EmpLeaveStatus.GetByYear(ly == null ? 0 : ly.ID.Integer); foreach (Employee oEmp in oEmployees) { pgBar.Value += 1; ObjectsTemplate oAppLeaveParams = LeaveParameter.ApplicableParamsForReport(oEmp, setupTypes, setupDetails, leaveParamss); oCurrYearBalance = EmpLeaveStatus.CurrentYearStatusForProcess(oEmp, operationDate, oAppLeaveParams, oCurrYear, oLs, eStatus, oPrevStatuses, leaveParamDetails, olYears, oPrevStatus); foreach (EmpLeaveStatus eSts in oCurrYearBalance) oAllEmpsCurrYearBalance.Add(eSts); } return oAllEmpsCurrYearBalance; } public static ObjectsTemplate CurrentYearStatusForPreocess(ObjectsTemplate oEmployees, LeaveYear lYear, EnumLeaveStatus eStatus) { ObjectsTemplate oCurrYearBalance = null; ObjectsTemplate oAllEmpsCurrYearBalance = new ObjectsTemplate(); DateTime operationDate = GlobalFunctions.GetOperationDate(); LeaveYear oCurrYear = lYear; LeaveYear oPrvYear = LeaveYear.LastLeaveYear(oCurrYear); List setupTypes = SetupDetail.GetTypes(EnumParameterSetup.Leave); ObjectsTemplate setupDetails = SetupDetail.GetParameters(EnumParameterSetup.Leave); ObjectsTemplate leaveParamss = LeaveParameter.Get(); ObjectsTemplate leaveParamDetails = new LeaveParameter().GetAllDetails(); List oLs = LeaveEntry.GetByLeaveYear(oCurrYear.ID.Integer); List oPrevStatuses = EmpLeaveStatus.GetAllPrvYearStatus(oCurrYear.ID.Integer); ObjectsTemplate olYears = LeaveYear.Service.Get(); LeaveYear ly = EmpLeaveStatus.GetPrvYear(oCurrYear, olYears); List oPrevStatus = EmpLeaveStatus.GetByYear(ly == null ? 0 : ly.ID.Integer); foreach (Employee oEmp in oEmployees) { ObjectsTemplate oAppLeaveParams = LeaveParameter.ApplicableParamsForReport(oEmp, setupTypes, setupDetails, leaveParamss); oCurrYearBalance = EmpLeaveStatus.CurrentYearStatusForProcess(oEmp, operationDate, oAppLeaveParams, oCurrYear, oLs, eStatus, oPrevStatuses, leaveParamDetails, olYears, oPrevStatus); foreach (EmpLeaveStatus eSts in oCurrYearBalance) oAllEmpsCurrYearBalance.Add(eSts); } return oAllEmpsCurrYearBalance; } public static ObjectsTemplate CurrentYearStatus(int employeeID, LeaveYear lYear) { ObjectsTemplate oCurrYearBalance = null; DateTime operationDate = GlobalFunctions.GetOperationDate(); Employee oEmployee = Employee.Get(ID.FromInteger(employeeID)); LeaveYear oCurrYear = lYear; LeaveYear oPrvYear = LeaveYear.LastLeaveYear(oCurrYear); //ObjectsTemplate prvYearStatus =EmpLeaveStatus.GetAllStatus(employeeID); ObjectsTemplate oAppLeaveParams = LeaveParameter.ApplicableParams(oEmployee); oCurrYearBalance = EmpLeaveStatus.CurrentYearStatus(oEmployee, operationDate, oAppLeaveParams, oCurrYear); return oCurrYearBalance; } public static ObjectsTemplate CurrentYearStatus(Employee oEmployee, DateTime operationDate, ObjectsTemplate oAppLeaveParams, LeaveYear oCurrYear) { DateTime dCurrentDate = operationDate; ObjectsTemplate oCurrYearBalance = new ObjectsTemplate(); LeaveParameterDetail oDetail = null; ConfigurationManager oCon = new ConfigurationManager(); // string Params = ConfigurationManager.GetStringValue("leave", "balance", EnumConfigurationType.Logic); foreach (LeaveParameter oItem in oAppLeaveParams) { EmpLeaveStatus oPrevStatus = new EmpLeaveStatus(); ; EmpLeaveStatus oCurrStatus = new EmpLeaveStatus(); oCurrStatus.EmpId = oEmployee.ID.Integer; oCurrStatus.LeaveId = oItem.LeaveId; oCurrStatus.LeaveYearID = oCurrYear.ID.Integer; //oDetail = oItem.GetApplicableForEmployee(oEmployee, operationDate); //8 if (oDetail != null) oCurrStatus.NormalLeaveDays = oDetail.MaxDays; else continue; oItem.Details = new ObjectsTemplate(); oItem.Details.Add(oDetail); //oPrevStatus = EmpLeaveStatus.GetPrvYearStatus(oCurrYear.ID.Integer, oItem.LeaveId, oEmployee.ID.Integer); #region calculate the opening balance //if (oItem.Leave.IsEarnedLeave) //{ // if (oEmployee.JoiningDate.Year == oCurrYear.StartDate.Year) // Service length Current Year // oCurrStatus.OpeningBalance = 0; // else if (Math.Abs((oEmployee.JoiningDate.Year - oCurrYear.StartDate.Year)) == 1) // Service length 2nd Year // { // if (oPrevStatus == null) // { // if (oEmployee.IsConfirmed == true) // { // TimeSpan tdate = Ease.CoreV35.Utility.Global.DateFunctions.LastDateOfYear(oEmployee.JoiningDate) // - oEmployee.JoiningDate; // double ntemp = oDetail.MaxDays / 12; // double nDays = tdate.Days; // oCurrStatus.OpeningBalance = Math.Round((ntemp * (nDays / (double)30.00))); // } // else oCurrStatus.OpeningBalance = 0; // } // else oCurrStatus.OpeningBalance = oPrevStatus.CFDays; // } // else // { // if (oPrevStatus != null) oCurrStatus.OpeningBalance = oPrevStatus.CFDays; // Service Length 3rd Year // } //} //else //{ // if (oEmployee.JoiningDate.Year == oCurrYear.StartDate.Year) // Service length Current Year // { // TimeSpan tdate = Ease.CoreV35.Utility.Global.DateFunctions.LastDateOfYear(oEmployee.JoiningDate) // - oEmployee.JoiningDate; // double nDays = tdate.Days; // oCurrStatus.OpeningBalance = Math.Round(((double)oDetail.MaxDays / (double)12.00) * // (double)((nDays / (double)30.00))); // } // else // oCurrStatus.OpeningBalance = oDetail.MaxDays; // if (oPrevStatus != null) oCurrStatus.OpeningBalance = oPrevStatus.CFDays + oCurrStatus.OpeningBalance; //} if (oPrevStatus != null) { oCurrStatus.OpeningBalance = oPrevStatus.CFDays; oCurrStatus.CFDays = oPrevStatus.CFDays; } if (oItem.IsForfited) { if (oCurrYear.StartDate.AddMonths(oItem.ForfitedMonth).Month >= dCurrentDate.Date.Month) { double nLeaveAvailed = 0; oCurrStatus.ForfitedDays = oPrevStatus.YearEndBalance - nLeaveAvailed; oCurrStatus.ForfitedDays = (oCurrStatus.ForfitedDays < 0) ? 0 : oCurrStatus.ForfitedDays; } } double nNormalLeavedays = 0; if (oEmployee.JoiningDate.Date.Year == oCurrYear.StartDate.Date.Year) { TimeSpan ts = (oCurrYear.EndDate - oEmployee.JoiningDate); double ntemp = oCurrStatus.NormalLeaveDays / 12; double nDays = ts.Days; nNormalLeavedays = Math.Round((ntemp * (nDays / (double)30.00))); } else { nNormalLeavedays = oCurrStatus.NormalLeaveDays; } oCurrStatus.NormalLeaveDays = nNormalLeavedays; if (oItem.IsMonthlyBalance) oCurrStatus.OpeningBalance = oCurrStatus.OpeningBalance + Math.Round(oCurrStatus.NormalLeaveDays / 12 * (dCurrentDate.Date.Month)); else oCurrStatus.OpeningBalance = oCurrStatus.OpeningBalance + oCurrStatus.NormalLeaveDays; //if (oItem.Leave.IsEarnedLeave) // oCurrStatus.OpeningBalance = oCurrStatus.OpeningBalance > oItem.MaxAccumulatedDays ? oItem.MaxAccumulatedDays : oCurrStatus.OpeningBalance; //else // oCurrStatus.OpeningBalance = (oCurrStatus.OpeningBalance + oCurrStatus.NormalLeaveDays) > oItem.MaxAccumulatedDays ? oItem.MaxAccumulatedDays : oCurrStatus.OpeningBalance + oCurrStatus.NormalLeaveDays; #endregion calculate the opening balance #region calculate leave availed in current year oCurrStatus.LeaveAvailed = LeaveEntry.GetLeaveAmtByType(oEmployee.ID.Integer, oItem.ID.Integer, oCurrYear.ID.Integer, EnumLeaveStatus.Approved); //10 #endregion calculate leave availed in current year #region Calculate Year-End Balance oCurrStatus.YearEndBalance = 0; if (oItem.Leave.IsBalanceCalculationNeeded == false) { oCurrStatus.NormalLeaveDays = 0; oCurrStatus.OpeningBalance = 0; } else oCurrStatus.YearEndBalance = oCurrStatus.OpeningBalance - (oCurrStatus.ForfitedDays + oCurrStatus.LeaveAvailed); #endregion Calculate Year-End Balance oCurrYearBalance.Add(oCurrStatus); } return oCurrYearBalance; } public static ObjectsTemplate CurrentYearStatus(ObjectsTemplate oEmployees, LeaveYear lYear, EnumLeaveStatus eStatus) { try { ObjectsTemplate oCurrYearBalance = null; ObjectsTemplate oAllEmpsCurrYearBalance = new ObjectsTemplate(); DateTime operationDate = GlobalFunctions.GetOperationDate(); LeaveYear oCurrYear = lYear; LeaveYear oPrvYear = LeaveYear.LastLeaveYear(oCurrYear); List setupTypes = SetupDetail.GetTypes(EnumParameterSetup.Leave); ObjectsTemplate setupDetails = SetupDetail.GetParameters(EnumParameterSetup.Leave); ObjectsTemplate leaveParamss = LeaveParameter.Get(); ObjectsTemplate leaveParamDetails = new LeaveParameter().GetAllDetails(); List oLs = LeaveEntry.GetByLeaveYear(oCurrYear.ID.Integer); List oPrevStatuses = EmpLeaveStatus.GetAllPrvYearStatus(oCurrYear.ID.Integer); ObjectsTemplate oExceptions = LeaveException.Get(lYear.StartDate, lYear.EndDate); int nCount = 1; foreach (Employee oEmp in oEmployees) { ObjectsTemplate oAppLeaveParams = LeaveParameter.ApplicableParamsForReport(oEmp, setupTypes, setupDetails, leaveParamss); oCurrYearBalance = EmpLeaveStatus.CurrentYearStatus(oEmp, operationDate, oAppLeaveParams, oCurrYear, oLs, eStatus, oPrevStatuses, leaveParamDetails, oExceptions); foreach (EmpLeaveStatus eSts in oCurrYearBalance) oAllEmpsCurrYearBalance.Add(eSts); } return oAllEmpsCurrYearBalance; } catch (Exception exp) { } return new ObjectsTemplate(); } public static ObjectsTemplate EmpCurrentYearStatus(Employee oEmp) { LeaveYear oCurrYear = LeaveYear.GetCurrentYear(); DateTime dCurrentDate = SystemInformation.GetServerDate(); ObjectsTemplate oCurrYearBalance = new ObjectsTemplate(); if (oCurrYear == null) return null; List oLeaves = Leave.Get(EnumStatus.Active); EmpLeaveStatus oCurrStatus; foreach (Leave oLeave in oLeaves) { oCurrStatus = new EmpLeaveStatus(); oCurrStatus.EmpId = oEmp.ID.Integer; oCurrStatus.LeaveId = oLeave.ID.Integer; oCurrStatus.LeaveAvailed = LeaveEntry.GetAvailedLeave(oEmp.ID.Integer, oLeave.ID.Integer, oCurrYear.ID.Integer, EnumLeaveStatus.Approved); oCurrYearBalance.Add(oCurrStatus); } return oCurrYearBalance; } public static EmpLeaveStatus GetleaveStatus(ObjectsTemplate leaveBalances, int nLeaveId) { foreach (EmpLeaveStatus oItem in leaveBalances) { if (oItem.LeaveId == nLeaveId) return oItem; } return null; } public static LeaveYear GetPrvYear(LeaveYear oCurrYear, ObjectsTemplate olYears) { //LeaveYear oCurrYear = LeaveYear.Service.Get(ID.FromInteger(leaveYearID)); LeaveYear oPrvYear = null; //ObjectsTemplate olYears = LeaveYear.Service.Get(); foreach (LeaveYear oItem in olYears) { if (oItem.EndDate.AddDays(1) == oCurrYear.StartDate) { oPrvYear = oItem; break; } } return oPrvYear; } public static EmpLeaveStatus GetPrvYearStatus(int leaveYearID, int nLeaveId, int nEmpId, LeaveYear oCurrYear, ObjectsTemplate olYears) { //LeaveYear oCurrYear = LeaveYear.Service.Get(ID.FromInteger(leaveYearID)); LeaveYear oPrvYear = null; //ObjectsTemplate olYears = LeaveYear.Service.Get(); foreach (LeaveYear oItem in olYears) { if (oItem.EndDate.AddDays(1) == oCurrYear.StartDate) { oPrvYear = oItem; break; } } if (oPrvYear == null) return null; return LeaveProcess.Service.GetStatus(nEmpId, nLeaveId, oPrvYear.ID.Integer); } public static ObjectsTemplate GetByYear(int leaveYearID) { ObjectsTemplate oEmpLeaveStatuss = null; oEmpLeaveStatuss = LeaveProcess.Service.GetByYear(leaveYearID); return oEmpLeaveStatuss; } #region Functions public void SaveStatus(EmpLeaveStatus oEmpLeaveStatus) { LeaveProcess.Service.SaveStatus(oEmpLeaveStatus); } public static void Save(EmpLeaveStatus oEmpLeaveStatus) { LeaveProcess.Service.Save(oEmpLeaveStatus); } public void SaveStatus(List oEmpLeaveStatus) { LeaveProcess.Service.SaveStatus(oEmpLeaveStatus); } public void DeleteProcessDetailByID(int nProcessId) { LeaveProcess.Service.DeleteProcessDetailByID(nProcessId); } public void DeleteByPayrollType(int nProcessId, int nPayrollTypeId, int nLeaveID) { LeaveProcess.Service.DeleteByPayrollType(nProcessId, nPayrollTypeId, nLeaveID); } #endregion #region Collection of EmpLeaveStatus public string GetEmpIDs() { string ids = string.Empty; return ids; } #endregion #region Functions public static ObjectsTemplate GetProcessDetails(int nProcessId) { #region Cache Header ObjectsTemplate oEmpLeaveStatuss = _cache["Get"] as ObjectsTemplate; if (oEmpLeaveStatuss != null) return oEmpLeaveStatuss; #endregion return oEmpLeaveStatuss; } #endregion } #endregion #region ILeaveProcess Service public interface ILeaveProcessService { #region Leave Process LeaveProcess Get(ID LeaveProcessId); LeaveProcess Get(int LeaveYear); LeaveProcess Get(int nLeaveProcessYear, int nPayrollTypeid); ObjectsTemplate Get(); LeaveProcess GetLastProcess(); ID Save(LeaveProcess oLeaveProcess); void UpadteLeaveYearStatus(LeaveProcess oLeaveProcess); void Delete(int nProcessYear); void Delete(int LeaveYearID, int PayrollTypeID); bool IsProcessed(int nProcessYear); void DoYearEnd(LeaveProcess oLeaveProcess); #endregion #region Leave Process Detail EmpLeaveStatus GetProcessDetail(ID id); EmpLeaveStatus GetStatus(int empid, int leaveID, int leaveYearID); EmpLeaveStatus GetByYear(int ProcessYear, int LeaveId, int EmpId); ObjectsTemplate GetByYear(int leaveYearID); ObjectsTemplate GetProcessDetails(int ProcessId); ID Save(EmpLeaveStatus oEmpLeaveStatus); void SaveStatus(EmpLeaveStatus oEmpLeaveStatus); void DeleteProcessDetail(ID id); void DeleteProcessDetailByID(int nProcessId); void DeleteByPayrollType(int nProcessId, int nPayrollTypeId, int nLeaveID); ObjectsTemplate GetByYearType(int leaveYearID, int leaveId); void SaveStatus(List oEmpLeaveStatus); void UpdateEncashAmount(ObjectsTemplate _oEmpLeaveStatus); #endregion } #endregion }