using System; using System.Collections.Generic; using System.Linq; using System.Text; using Ease.Core.DataAccess; using Ease.Core.Model; using Ease.Core.Utility; using HRM.BO; namespace HRM.DA { #region AttnWiseAllowance Service [Serializable] public class AttnWiseAllowanceService : ServiceTemplate { private void MapObject(AttnWiseAllowance oAttnWiseAllowance, DataReader oReader) { base.SetObjectID(oAttnWiseAllowance, (oReader.GetInt32("AttnWiseAllowanceID").Value)); oAttnWiseAllowance.ShiftID = oReader.GetInt32("ShiftID").Value; oAttnWiseAllowance.ShiftName = oReader.GetString("ShiftName"); oAttnWiseAllowance.ProvisionID = oReader.GetInt32("ProvisionID").Value; oAttnWiseAllowance.ProvisionName = oReader.GetString("ProvisionName"); oAttnWiseAllowance.ProvisionType = (enumPayrollComponentType)oReader.GetInt32("ProvisionType").Value; oAttnWiseAllowance.ConsiderShiftHour = oReader.GetBoolean("HasHour").Value; oAttnWiseAllowance.HoursOverShift = oReader.GetBoolean("HasHourOverShift").Value; oAttnWiseAllowance.OnLeave = oReader.GetBoolean("IncludeLeave").Value; oAttnWiseAllowance.OnHoliday = oReader.GetBoolean("IncludeHoliday").Value; //Newly Added oAttnWiseAllowance.ConsiderPresentHour = oReader.GetBoolean("ConsiderPresentHour").Value; //Newly Added oAttnWiseAllowance.Multiple = oReader.GetDouble("Multiple").Value; oAttnWiseAllowance.FixedAmount = oReader.GetDouble("FixedAmount").Value; oAttnWiseAllowance.PercentOfBasic = oReader.GetDouble("PercentOfBasic").Value; oAttnWiseAllowance.CreatedBy = oReader.GetInt32("CreatedBy", 0); oAttnWiseAllowance.CreatedDate = oReader.GetDateTime("CreatedDate").Value; oAttnWiseAllowance.ModifiedBy = oReader.GetInt32("ModifiedBy", 0); oAttnWiseAllowance.ModifiedDate = oReader.GetDateTime("ModifiedDate"); oAttnWiseAllowance.PayrollTypeID = oReader.GetInt32("PayrollTypeID", 0); oAttnWiseAllowance.TimeDependent = oReader.GetBoolean("TimeDependent", false); oAttnWiseAllowance.FromTime = oReader.GetDateTime("FromTime", DateTime.MinValue); oAttnWiseAllowance.ToTime = oReader.GetDateTime("ToTime", DateTime.MinValue); oAttnWiseAllowance.WorkTime = oReader.GetDouble("WorkTime", 0.0); oAttnWiseAllowance.GraceTime = oReader.GetDouble("GraceTime", 0.0); oAttnWiseAllowance.ConsiderOutTime = oReader.GetBoolean("ConsiderOutTime", false); //Newly Added this.SetObjectState(oAttnWiseAllowance, Ease.Core.ObjectState.Saved); } protected override T CreateObject(DataReader oReader) { AttnWiseAllowance oAttnWiseAllowance = new AttnWiseAllowance(); MapObject(oAttnWiseAllowance, oReader); return oAttnWiseAllowance as T; } #region Service implementation public AttnWiseAllowance Get(int id, int payrollTypeID) { AttnWiseAllowance oAttnWiseAllowance = new AttnWiseAllowance(); TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(AttnWiseAllowanceDA.Get(tc, id, payrollTypeID)); if (oreader.Read()) { oAttnWiseAllowance = this.CreateObject(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 oAttnWiseAllowance; } public List Get(int payrollTypeID) { TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader dr = new DataReader(AttnWiseAllowanceDA.Get(tc, payrollTypeID)); var AttnWiseAllowances = this.CreateObjects(dr); dr.Close(); tc.End(); return AttnWiseAllowances; } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } public List Get(int shiftId, EnumAttendanceType attnType, bool value) { TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader dr = new DataReader(AttnWiseAllowanceDA.Get(tc, shiftId, attnType, value)); //if (dr.Read()) //{ var AttnWiseAllowances = this.CreateObjects(dr); //} dr.Close(); tc.End(); return AttnWiseAllowances; } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } public int Save(AttnWiseAllowance oAttnWiseAllowance) { TransactionContext tc = null; try { tc = TransactionContext.Begin(true); if (oAttnWiseAllowance.IsNew) { //int id = tc.GenerateID("AttnWiseAllowance", "AttnWiseAllowanceID"); //base.SetObjectID(oAttnWiseAllowance, ID.FromInteger(id)); AttnWiseAllowanceDA.Insert(tc, oAttnWiseAllowance); } else { AttnWiseAllowanceDA.Update(tc, oAttnWiseAllowance); } tc.End(); return oAttnWiseAllowance.ID; } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } public void Delete(int id) { TransactionContext tc = null; try { tc = TransactionContext.Begin(true); AttnWiseAllowanceDA.Delete(tc, id); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } public DateTime GetShiftOutTime(AttnWiseAllowance oAttnWiseAllowance, Shift oshift, DailyAttnProcess attn) { DateTime loutTime = DateTime.MinValue; if (oshift.IsOverlapingDay == true) { DateTime newDate = attn.AttnDate.AddDays(1); loutTime = new DateTime(newDate.Year, newDate.Month, newDate.Day, oshift.OutTime.Hour, oshift.OutTime.Minute, 0); } else { DateTime newDate = attn.AttnDate; loutTime = new DateTime(newDate.Year, newDate.Month, newDate.Day, oshift.OutTime.Hour, oshift.OutTime.Minute, 0); } DateTime dtOutTime = new DateTime(loutTime.Year, loutTime.Month, loutTime.Day, oAttnWiseAllowance.OutTime.Hour, oAttnWiseAllowance.OutTime.Minute, 0); return dtOutTime; } public List GetAllApplicableItem(List attnSetups, DailyAttnProcess atProcess) { List oattBens = new List(); if (atProcess.InTime != DateTime.MinValue && atProcess.OutTime != DateTime.MinValue) { foreach (var attnSetup in attnSetups) { if (attnSetup.FromTime != DateTime.MinValue) { attnSetup.FromTime = atProcess.AttnDate.Date.Add(attnSetup.FromTime.TimeOfDay); } } List attnWiseAllowances = GetAttnWiseAllowances(attnSetups, atProcess, (int)atProcess.ShiftID); if (attnWiseAllowances.Count > 0) oattBens.AddRange(attnWiseAllowances); } return oattBens; } public static List GetAllApplicableItem(List attnSetups, DailyAttnProcess atProcess, AttnNationalHoliday anHoliday, List oLeaves, bool isWorkingDay) { List oattBens = new List(); foreach (var attnSetup in attnSetups) { if (attnSetup.FromTime != DateTime.MinValue) { attnSetup.FromTime = atProcess.AttnDate.Date.Add(attnSetup.FromTime.TimeOfDay); } } List attnWiseAllowances = GetAttnWiseAllowances(attnSetups, atProcess, (int) atProcess.ShiftID); //if (atProcess.HasDualShift && atProcess.SecondaryShift != null) //{ // attnWiseAllowances = GetAttnWiseAllowances(attnSetups, atProcess, atProcess.SecondaryShift.ID); //} if (atProcess.InTime != DateTime.MinValue && atProcess.OutTime != DateTime.MinValue) { oattBens.AddRange(attnWiseAllowances); } return oattBens; } private static List GetAttnWiseAllowances(List attnSetups, DailyAttnProcess atProcess, int shiftID) { DateTime InTime = (DateTime)atProcess.InTime; DateTime OutTime = atProcess.OutTime != DateTime.MinValue ? (DateTime)atProcess.OutTime : DateTime.MinValue; //List attnWiseAllowances = attnSetups. // Where(osetup => osetup.ShiftID == shiftID && // (osetup.ProvisionType == enumPayrollComponentType.Allowance || osetup.ProvisionType == enumPayrollComponentType.Over_Time) && // (osetup.TimeDependent ? (osetup.FromTime >= InTime && osetup.FromTime <= OutTime) : true)). // ToList(); List attnWiseAllowances = attnSetups.Where(osetup => osetup.ShiftID == shiftID && (osetup.ProvisionType == enumPayrollComponentType.Allowance || osetup.ProvisionType == enumPayrollComponentType.Over_Time) && (osetup.TimeDependent ? (atProcess.OTHour + (osetup.GraceTime / 60.0) >= osetup.WorkTime) : true)) .ToList(); if (atProcess.WorkDayType == EnumWorkPlanDayType.WorkingDay) { // Take general allowances // Take holiday allowance if next day is holiday and out time is in next day //attnWiseAllowances = attnWiseAllowances.Where(x => !x.OnHoliday || // ((atProcess.NextWorkDayType == // EnumWorkPlanDayType.WeeklyHoliday || // atProcess.NextWorkDayType == // EnumWorkPlanDayType.NationalHoliday) && // x.OnHoliday && x.ConsiderOutTime && // OutTime.Date > atProcess.AttnDate)).ToList(); } else if (atProcess.WorkDayType == EnumWorkPlanDayType.WeeklyHoliday || atProcess.WorkDayType == EnumWorkPlanDayType.NationalHoliday) { // Take general allowances // Tske holiday allowances which does not consider out time // Take holiday allowance if next day is holiday and out time is in next day //attnWiseAllowances = attnWiseAllowances.Where(x => !x.OnHoliday || // (x.OnHoliday && !x.ConsiderOutTime) || // ((atProcess.NextWorkDayType == // EnumWorkPlanDayType.WeeklyHoliday || // atProcess.NextWorkDayType == // EnumWorkPlanDayType.NationalHoliday) && // x.OnHoliday && x.ConsiderOutTime && // OutTime.Date > atProcess.AttnDate)).ToList(); } // If there is one or more time dependent allowance if (attnWiseAllowances.Where(x => x.TimeDependent).Count() > 1) { //DateTime maxFromTime = attnWiseAllowances.Where(x => x.TimeDependent).Max(x => x.FromTime); double workTime = attnWiseAllowances.Where(x => x.TimeDependent).Max(x => x.WorkTime); // Take all not time dependent allowances // Take only the maximum time dependent allowance //attnWiseAllowances = attnWiseAllowances.Where(x => !x.TimeDependent || // x.FromTime == maxFromTime) // .ToList(); attnWiseAllowances = attnWiseAllowances.Where(x => !x.TimeDependent || x.WorkTime == workTime) .ToList(); } return attnWiseAllowances; } #endregion } #endregion }