using Ease.Core.Model; using System; using System.Collections.Generic; using System.Data; using System.Linq; using HRM.BO; using HRM.DA; using NPOI.SS.Formula.Functions; using System.Text; using System.IO; using System.Diagnostics; namespace HRM.UI.MODELS { public class DailyAttendanceProcess : AuditTrailBase { public readonly IDailyAttnProcessService _dailyAttnProcess; Shift oShift = null; List _shifts = null; MonthlyWorkPlan mplan = null; public DailyAttnProcess ProcessAttendanceForSingleEmployeeToday(DailyAttnProcessTModel oDailyAttnProcessTmodel, int PayrollTypeID) { // Employee oEmp = Employee.Get(Ease.Core.Model.ID.FromInteger(oDailyAttnProcessTmodel.EmployeeID)); DailyAttnProcess attnProcess = new DailyAttnProcess(); try { attnProcess.AttnDate = oDailyAttnProcessTmodel.AttnDate; attnProcess.EmployeeID = oDailyAttnProcessTmodel.EmployeeID; attnProcess.IsManualEntry = true; attnProcess.AttenType = EnumAttendanceType.Present; //attnProcess.IsFromMobile = true; attnProcess.IsFromMobile = oDailyAttnProcessTmodel.IsFromMobile; attnProcess.WFStatus = EnumWFAttnStatus.None; attnProcess.InTime = DateTime.Now; attnProcess.OutTime = null; attnProcess.InTimeLatitude = oDailyAttnProcessTmodel.Location.InTimeLatitude; attnProcess.InTimeLongitude = oDailyAttnProcessTmodel.Location.InTimeLongitude; attnProcess.InTimeNearestAddress = oDailyAttnProcessTmodel.InTimeNearestAddress; //SearchEmployee oemp = new SearchEmployeeService().get(oDailyAttnProcessTmodel.EmployeeID); //User ouser = new UserService().Get(oemp.EmployeeNo); attnProcess.CreatedBy = 1; //ouser.ID; attnProcess.CreatedDate = DateTime.Today; //List empWPGroups = new EmployeeWorkPlanSetupService().Get(); //List monthlyWorkPlans = new MonthlyWorkPlanService().GetByDate(attnProcess.AttnDate, ouser.LogInPayrollTypeID); //mplan = AttendanceProcess.GetPlanwithEmployee(attnProcess.AttnDate, attnProcess.EmployeeID, empWPGroups, monthlyWorkPlans, null); DataSet dsShidtIDWorkDatType = new DailyAttnProcessService().GetAttnShiftAndWorkDatTypeMobileWithNoLock(attnProcess.EmployeeID, attnProcess.AttnDate); if (dsShidtIDWorkDatType != null && dsShidtIDWorkDatType.Tables[0].Rows.Count > 0) { if (dsShidtIDWorkDatType.Tables[0].Rows[0][0] != DBNull.Value) attnProcess.ShiftID = Convert.ToInt16(dsShidtIDWorkDatType.Tables[0].Rows[0][0].ToString()); else if (dsShidtIDWorkDatType.Tables[0].Rows[0]["defaultShiftID"] != DBNull.Value) { attnProcess.ShiftID = Convert.ToInt16(dsShidtIDWorkDatType.Tables[0].Rows[0]["defaultShiftID"].ToString()); } else { throw new Exception("Failed to get roster, contact to system administrator"); } double FlexibleHour = Convert.ToDouble(dsShidtIDWorkDatType.Tables[0].Rows[0]["FlexibleHour"]); double LunchHour = Convert.ToDouble((Decimal)dsShidtIDWorkDatType.Tables[0].Rows[0]["LunchHour"]); double LateCalcualtion = Convert.ToDouble(dsShidtIDWorkDatType.Tables[0].Rows[0]["LateCalcualtion"]); double totalLateMinute = 0; DateTime ShiftInTime = ((DateTime)dsShidtIDWorkDatType.Tables[0].Rows[0]["ShiftInTime"]).AddMinutes(FlexibleHour); DateTime ShiftOutTime = ((DateTime)dsShidtIDWorkDatType.Tables[0].Rows[0]["ShiftOutTime"]); #region Old LateHour Calculation //if (((DateTime)attnProcess.InTime).TimeOfDay > temptime.TimeOfDay) //{ // totalLateMinute = ((DateTime)attnProcess.InTime).TimeOfDay.Subtract(temptime.TimeOfDay).TotalMinutes; // if (totalLateMinute > LateCalcualtion) // { // attnProcess.IsLate = true; // attnProcess.LateHour = totalLateMinute; // } //} #endregion Shift oshift = new Shift(); oshift.ID = (int)attnProcess.ShiftID; oshift.InTime = ShiftInTime; oshift.OutTime = ShiftOutTime; oshift.FlexibleHour = FlexibleHour; oshift.LunchHour = LunchHour; DailyAttnProcess daProcess = new DailyAttnProcess(); daProcess = new AttendanceProcess().CalulateLateAndDelayForMobileAttendance(attnProcess, oshift); attnProcess.LateHour = daProcess.LateHour; //attnProcess.EarlyHour = daProcess.EarlyHour; attnProcess.WorkHour = daProcess.WorkHour; attnProcess.WorkDayType = (EnumWorkPlanDayType)Convert.ToInt16(dsShidtIDWorkDatType.Tables[0].Rows[0][1].ToString()); // new AttendanceProcess().CalculateLateAndDelay(attnProcess, oshift); } List _dailyAttnProcesses = new List(); _dailyAttnProcesses.Add(attnProcess); new DailyAttnProcessService().Save(_dailyAttnProcesses, null); //Save RawData AttnMobileRawData orawData = new AttnMobileRawData(); orawData.AttnDate = attnProcess.AttnDate; orawData.PunchTime = (DateTime)attnProcess.InTime; orawData.EmpID = attnProcess.EmployeeID; orawData.PunchType = EnumMobilePunchType.In; orawData.IsSynced = true; new AttnMobileRawDataService().Save(orawData); } catch (Exception ex) { string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory); _filePath += @"\ChckInOutLog.txt"; //StreamWriter r = new StreamWriter(_filePath, true); //string sms = ""; //if (ex.Message != null) sms = ex.Message; //r.WriteLine((sms.Length > 50) ? sms.Substring(0, 50) : sms + " [" + attnProcess.EmployeeID + "] " //+ attnProcess.AttnDate.ToString("dd MMM yyyy") + ", " + ((DateTime)attnProcess.OutTime).ToString("dd MMM yyyy hh:mm")); //r.Close(); using (StreamWriter r = new StreamWriter(_filePath, true)) { string sms = ""; if (ex.Message != null) sms = ex.Message; r.WriteLine((sms.Length > 50) ? sms.Substring(0, 50) : sms + " [" + attnProcess.EmployeeID + "] " + attnProcess.AttnDate.ToString("dd MMM yyyy") + ", " + ((DateTime)attnProcess.OutTime).ToString("dd MMM yyyy hh:mm")); } } return attnProcess; } public void CheckOutFixedPosition(int empid, DateTime attnDate, string comment, decimal OutTimeLatitude, decimal OutTimeLongitude, int locationID, EnumIsFromMobile IsFromMobile, string OutTimeNearestAddress) { DailyAttnProcess daProcess = null; List _dailyAttnProcesses = new List(); try { daProcess = new DailyAttnProcessService().GetforMobileWithNoLock(empid, attnDate); if (daProcess == null) throw new CustomException(EnumExceptionType.Error, "Check-In data not found for this Day."); daProcess.IsManualEntry = true; daProcess.IsFromMobile = IsFromMobile; daProcess.LocationID = daProcess.LocationID == 0 ? locationID : daProcess.LocationID; daProcess.OutTime = DateTime.Now; daProcess.LocationID = locationID; daProcess.OutTimeLatitude = OutTimeLatitude; daProcess.OutTimeLongitude = OutTimeLongitude; daProcess.OutTimeNearestAddress = OutTimeNearestAddress; //daProcess.ActualInTime = daProcess.InTime; //daProcess.ActualOutTime = daProcess.OutTime; //daProcess.WFStatus = EnumWFAttnStatus.EmpSubmitted; if (daProcess.ShiftID != null) { Shift oshift = new ShiftService().Get((int)daProcess.ShiftID); // DateTime temptime = oshift.OutTime.AddMinutes(-oshift.FlexibleHour); //if ((daProcess.InTime != null && ((DateTime)daProcess.OutTime).Subtract((DateTime)daProcess.InTime).TotalHours < oshift.WorkHour)) //{ // daProcess.EarlyHour = oshift.WorkHour - ((DateTime)daProcess.OutTime).Subtract((DateTime)daProcess.InTime).TotalHours; //} //Shift tempShift = new Shift(); //tempShift.ID = (int)daProcess.ShiftID; //tempShift.InTime = (DateTime)daProcess.InTime; //tempShift.OutTime = (DateTime)daProcess.OutTime; //tempShift.FlexibleHour = oshift.FlexibleHour; //tempShift.LunchHour = oshift.LunchHour; DailyAttnProcess odaProcess = new DailyAttnProcess(); odaProcess = new AttendanceProcess().CalulateLateAndDelayForMobileAttendance(daProcess, oshift); new AttendanceProcess().CalulateOverTimeForMobileAttendance(daProcess, oshift); //daProcess.LateHour = odaProcess.LateHour; daProcess.EarlyHour = daProcess.EarlyHour; daProcess.WorkHour = odaProcess.WorkHour; // new AttendanceProcess().CalculateLateAndDelay(daProcess, oshift); } _dailyAttnProcesses.Add(daProcess); new DailyAttnProcessService().Save(_dailyAttnProcesses, null); AttnMobileRawData orawData = new AttnMobileRawData(); orawData.AttnDate = daProcess.AttnDate; orawData.PunchTime = (DateTime)daProcess.OutTime; orawData.EmpID = daProcess.EmployeeID; orawData.PunchType = EnumMobilePunchType.Out; orawData.IsSynced = true; new AttnMobileRawDataService().Save(orawData); } catch (Exception ex) { string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory); _filePath += @"\ChckInOutLog.txt"; //StreamWriter r = new StreamWriter(_filePath,true); //string sms = ""; //if(ex.Message !=null) sms = ex.Message; //r.WriteLine((sms.Length > 50) ? sms.Substring(0, 50) : sms + " [" + daProcess.EmployeeID + "] " // + daProcess.AttnDate.ToString("dd MMM yyyy") + ", " + ((DateTime)daProcess.OutTime).ToString("dd MMM yyyy hh:mm")); //r.Close(); using (StreamWriter r = new StreamWriter(_filePath, true)) { string sms = ""; if (ex.Message != null) sms = ex.Message; r.WriteLine((sms.Length > 50) ? sms.Substring(0, 50) : sms + " [" + daProcess.EmployeeID + "] " + daProcess.AttnDate.ToString("dd MMM yyyy") + ", " + ((DateTime)daProcess.OutTime).ToString("dd MMM yyyy hh:mm")); } } } //private void CalculateLateAttendanceType(DailyAttnProcess attnProcess, DateTime Attdate) //{ // if (attnProcess.WorkDayType == EnumWorkPlanDayType.WorkingDay && attnProcess.AttenType == EnumAttendanceType.Present) // { // CalcullateLateAttendanceType(attnProcess, oShift, Attdate); // if (attnProcess.LateAttendanceType != EnumLateAttendanceType.NotApplicable) // { // attnProcess.IsLate = true; // double _lateHour = 0; // _lateHour = (attnProcess.InTime.TimeOfDay.Subtract(oShift.InTime.TimeOfDay).TotalMinutes) / 60; // attnProcess.LateHour = _lateHour; // } // } //} //private void CalcullateLateAttendanceType(DailyAttnProcess attnProcess, Shift oshift, DateTime Attdate) //{ // int extraMinutes = 0; // if (attnProcess.InTime == DateTime.MinValue || attnProcess.OutTime == DateTime.MinValue) // { // return; // } // DateTime tInTime = attnProcess.InTime ?? DateTime.MinValue; // DateTime tOutTime = DateTime.MinValue; // DateTime dt_0_hour_00_minutes = new DateTime(Attdate.Year, Attdate.Month, Attdate.Day, oshift.InTime.Hour, oshift.InTime.Minute, oshift.InTime.Second); // DateTime dt0_hour_14_minutes = dt_0_hour_00_minutes.AddMinutes(14).AddSeconds(59); // if (attnProcess.InTime >= dt_0_hour_00_minutes && attnProcess.InTime <= dt0_hour_14_minutes) // { // extraMinutes = 15; // tOutTime = new DateTime(Attdate.Year, Attdate.Month, Attdate.Day, oshift.OutTime.Hour, oshift.OutTime.Minute, 0); // tOutTime = tOutTime.AddMinutes(extraMinutes); // if (attnProcess.OutTime < tOutTime) // { // attnProcess.LateAttendanceType = EnumLateAttendanceType.Nine_0am_to_Nine_14am; // } // } // DateTime dt0_hours_15_minutes = dt_0_hour_00_minutes.AddMinutes(15); // DateTime dt0_hours_29_minutes = dt_0_hour_00_minutes.AddMinutes(29).AddSeconds(59); // if (attnProcess.InTime >= dt0_hours_15_minutes && attnProcess.InTime <= dt0_hours_29_minutes) // { // extraMinutes = 30; // tOutTime = new DateTime(Attdate.Year, Attdate.Month, Attdate.Day, oshift.OutTime.Hour, oshift.OutTime.Minute, 0); // tOutTime = tOutTime.AddMinutes(extraMinutes); // if (attnProcess.OutTime < tOutTime) // { // attnProcess.LateAttendanceType = EnumLateAttendanceType.Nine_15am_to_Nine_29am; // } // } // DateTime dt_0_hour_30_minutes = dt_0_hour_00_minutes.AddMinutes(30); // DateTime dt_1_hour_59_minutes = dt_0_hour_00_minutes.AddHours(1).AddMinutes(59).AddSeconds(59); // if (attnProcess.InTime >= dt_0_hour_30_minutes && attnProcess.InTime <= dt_1_hour_59_minutes) // { // attnProcess.LateAttendanceType = EnumLateAttendanceType.Nine_30am_to_Ten_59am; // } // DateTime dt_2hour_00_minutes = dt_0_hour_00_minutes.AddHours(2); // DateTime dt_4_hour_30_minutes = dt_0_hour_00_minutes.AddHours(4).AddMinutes(30); // if (attnProcess.InTime >= dt_2hour_00_minutes && attnProcess.InTime <= dt_4_hour_30_minutes) // { // attnProcess.LateAttendanceType = EnumLateAttendanceType.Eleven_0am_to_One_30pm; // } //} //private void CalculateShift(WorkPlanGroup oEmpWPlanGroup, DailyAttnProcess attnProcess, DateTime Attdate, Employee emp, EmployeeWorkPlanSetup oEmpWorkplanSetup) //{ // #region Calculate Particular Shift Based On WorkPlan Group Type // List monthlyWorkPlans = MonthlyWorkPlan.GetByDate(Attdate); // List _tempraryShifts = new List(); // MonthlyWorkPlan mplan = null; // ActingResponsibilitySetup tempShiftEmployee = null; //_tempraryShifts.Where(o => o.EmployeeID == attnProcess.EmployeeID).FirstOrDefault(); // List shifts = Shift.Get(); // List CounterClockRotation = ShiftRotation.Get(EnumWorkPlanGroup.Counter_Clock_1); // List CounterClock2Rotation = ShiftRotation.Get(EnumWorkPlanGroup.Counter_Clock_2); // List CounterClock3Rotation = ShiftRotation.Get(EnumWorkPlanGroup.Counter_Clock_3); // List CounterClock4Rotation = ShiftRotation.Get(EnumWorkPlanGroup.Counter_Clock_4); // if (oEmpWPlanGroup.Type == EnumWorkPlanGroup.Fixed) // { // if (oEmpWPlanGroup.WorkPlanGroupType == EnumWorkPlanGroupType.Exception && attnProcess.MonthlyWorkPlan != null) // { // attnProcess.ShiftID = mplan.ShiftID; // attnProcess.TempShiftID = null; // if (tempShiftEmployee != null) // { // mplan = GetPlanwithEmployee(Attdate, emp.ID, oEmpWorkplanSetup, monthlyWorkPlans, _tempraryShifts); // attnProcess.MonthlyWorkPlan = mplan; // attnProcess.TempShiftID = mplan.ShiftID; // } // } // else // { // switch (Attdate.DayOfWeek) // { // case DayOfWeek.Friday: // attnProcess.ShiftID = oEmpWPlanGroup.FridayShiftID.HasValue ? ID.FromInteger(oEmpWPlanGroup.FridayShiftID.Value) : ID.FromInteger(0); // break; // case DayOfWeek.Monday: // attnProcess.ShiftID = oEmpWPlanGroup.MondayShiftID.HasValue ? ID.FromInteger(oEmpWPlanGroup.MondayShiftID.Value) : ID.FromInteger(0); // break; // case DayOfWeek.Saturday: // attnProcess.ShiftID = oEmpWPlanGroup.SaturdayShiftID.HasValue ? ID.FromInteger(oEmpWPlanGroup.SaturdayShiftID.Value) : ID.FromInteger(0); // break; // case DayOfWeek.Sunday: // attnProcess.ShiftID = oEmpWPlanGroup.SundayShiftID.HasValue ? ID.FromInteger(oEmpWPlanGroup.SundayShiftID.Value) : ID.FromInteger(0); // break; // case DayOfWeek.Thursday: // attnProcess.ShiftID = oEmpWPlanGroup.ThursdayShiftID.HasValue ? ID.FromInteger(oEmpWPlanGroup.ThursdayShiftID.Value) : ID.FromInteger(0); // break; // case DayOfWeek.Tuesday: // attnProcess.ShiftID = oEmpWPlanGroup.TuesdayShiftID.HasValue ? ID.FromInteger(oEmpWPlanGroup.TuesdayShiftID.Value) : ID.FromInteger(0); // break; // case DayOfWeek.Wednesday: // attnProcess.ShiftID = oEmpWPlanGroup.WednesdayShiftID.HasValue ? ID.FromInteger(oEmpWPlanGroup.WednesdayShiftID.Value) : ID.FromInteger(0); // break; // default: // break; // } // } // } // else // { // if (attnProcess.MonthlyWorkPlan != null) // { // attnProcess.ShiftID = mplan.ShiftID; // attnProcess.TempShiftID = null; // if (tempShiftEmployee != null) // { // mplan = GetPlanwithEmployee(Attdate, emp.ID, oEmpWorkplanSetup, monthlyWorkPlans, _tempraryShifts); // attnProcess.MonthlyWorkPlan = mplan; // attnProcess.TempShiftID = mplan.ShiftID; // } // } // else // { // List osrs; // if (oEmpWPlanGroup.Type == EnumWorkPlanGroup.Counter_Clock_1) // osrs = CounterClockRotation; // else if (oEmpWPlanGroup.Type == EnumWorkPlanGroup.Counter_Clock_2) // osrs = CounterClock2Rotation; // else if (oEmpWPlanGroup.Type == EnumWorkPlanGroup.Counter_Clock_3) // osrs = CounterClock3Rotation; // else if (oEmpWPlanGroup.Type == EnumWorkPlanGroup.Counter_Clock_4) // osrs = CounterClock4Rotation; // else osrs = CounterClockRotation; // foreach (ShiftRotation sr in osrs) // { // Shift oshift = shifts.Where(o => o.ID.Integer == sr.ShiftID.Integer) // .Single(); // DateTime shiftInTime = Attdate.Subtract(Attdate.TimeOfDay).Add(oshift.InTime.TimeOfDay); // attnProcess.ShiftID = sr.ShiftID; // } // } // } // if (attnProcess.TempShiftID == null) // { // oShift = shifts.GetItem(attnProcess.ShiftID); // } // else // { // oShift = shifts.GetItem(attnProcess.TempShiftID); // } // #endregion //} //private MonthlyWorkPlan GetPlanwithEmployee(DateTime EffectDate, int employeeid, EmployeeWorkPlanSetup plans, List MworkPlans, List temporaryShiftEmps) //{ // MonthlyWorkPlan dPlan = null; // if (temporaryShiftEmps == null) // { // EmployeeWorkPlanSetup workGroup = plans; // if (workGroup != null) // { // dPlan = MworkPlans.FirstOrDefault(x => x.WorkPlanGroupID == workGroup.WorkPlanGroupID && x.WorkDate == EffectDate); // dPlan.EmployeeID = employeeid; // } // } // else // { // ActingResponsibilitySetup tempShift = temporaryShiftEmps.FirstOrDefault(x => x.EmployeeID == employeeid && x.GradeID == null); // if (tempShift != null) // { // dPlan = MworkPlans.FirstOrDefault(x => x.WorkPlanGroupID == tempShift.WorkPlanGroupID && x.WorkDate == EffectDate); // dPlan.EmployeeID = employeeid; // } // } // return dPlan; //} //private void CalcullateWorkdayType(DailyAttnProcess attnProcess, EmployeeWorkPlanSetup oEmpWorkplan, WorkPlanGroup oEmpWPlanGroup, Employee emp, DateTime Attdate) //{ // List _shifts = Shift.Get(); // attnProcess.WorkDayType = EnumWorkPlanDayType.WorkingDay; // AttnShiftWiseNationalHoliday attnShiftWiseHoliday = null; // if (attnProcess.MonthlyWorkPlan != null) // { // attnProcess.WorkDayType = attnProcess.MonthlyWorkPlan.Type; // // if (attnProcess.WorkDayType == EnumWorkPlanDayType.NationalHoliday) attnProcess.WorkDayType = EnumWorkPlanDayType.WorkingDay; // National holiday calaculated in bottom of function // } // else // { // if (oEmpWPlanGroup.WorkPlanGroupType != EnumWorkPlanGroupType.Triple_Shift_Auto) // { // if ((oEmpWPlanGroup.WeekEndOn != null && attnProcess.AttnDate.DayOfWeek == (DayOfWeek)oEmpWPlanGroup.WeekEndOn) // || (oEmpWPlanGroup.WeekEndOn2 != null && attnProcess.AttnDate.DayOfWeek == (DayOfWeek)oEmpWPlanGroup.WeekEndOn2)) // { // attnProcess.WorkDayType = EnumWorkPlanDayType.WeeklyHoliday; // } // } // else // { // #region Counter clock // if (oEmpWorkplan.WeekEndOn != null) // { // if (attnProcess.AttnDate.DayOfWeek == (DayOfWeek)oEmpWorkplan.WeekEndOn) // attnProcess.WorkDayType = EnumWorkPlanDayType.WeeklyHoliday; // } // else // { // if (attnProcess.AttnDate >= oEmpWorkplan.StartDate) // { // int nShiftInterval = 7; // TimeSpan st = attnProcess.AttnDate - oEmpWorkplan.StartDate; // int dayCount = st.Days; // int nCircleDay = (dayCount % nShiftInterval); // if ((nShiftInterval - nCircleDay - 1) == 0 || (nShiftInterval - nCircleDay - 2) == 0) // attnProcess.WorkDayType = EnumWorkPlanDayType.WeeklyHoliday; // #region Do not Delete / 6 Day of Week // //int nShiftInterval = 7; // //TimeSpan st = attnProcess.AttnDate - oEmpWorkplan.StartDate; // //int dayCount = st.Days; // //int nCircleDay = (dayCount % nShiftInterval); // //if ((nShiftInterval - nCircleDay - 1) == 0) // //{ // // attnProcess.WorkDayType = EnumWorkPlanDayType.WeeklyHoliday; // //} // #endregion // } // } // #endregion // } // } // Employee employee = new Employee(); // employee = emp; // ID workPlanGroupID = null; // workPlanGroupID = oEmpWorkplan.WorkPlanGroupID; // DateTime oLastDate = GlobalFunctions.LastDateOfMonth(Attdate); // DateTime oFirstDate = GlobalFunctions.FirstDateOfMonth(Attdate); // List _AttNHolidays = AttnNationalHoliday.GetByMonth(oFirstDate, oLastDate); // AttnNationalHoliday holiday = AttnNationalHoliday.GetHoliday(_AttNHolidays, Attdate, employee.LocationID, workPlanGroupID); // if (attnProcess.WorkDayType == EnumWorkPlanDayType.NationalHoliday && holiday == null) // throw new Exception("Attandance date is defined Holiday in Monthly Calender, but not found in Holiday calender"); // if (holiday != null) // { // attnProcess.WorkDayType = EnumWorkPlanDayType.NationalHoliday; // attnProcess.ReferenceID = holiday.ID; // attnProcess.Holiday = holiday; // attnProcess.Reason = holiday.ID.ToString(); // } // if (attnProcess.WorkDayType == EnumWorkPlanDayType.WorkingDay && holiday != null && (holiday.HolidayType == HolidayType.Hartal || holiday.HolidayType == HolidayType.Other)) // { // // attnProcess.WorkDayType = EnumWorkPlanDayType.HartalDay; // if (holiday.AttnShiftWiseNationalHolidays.Count == 0) // { // attnProcess.ReferenceID = holiday.ID; // attnProcess.Holiday = holiday; // attnProcess.Reason = holiday.ID.ToString(); // } // else // { // attnShiftWiseHoliday = holiday.AttnShiftWiseNationalHolidays.Where(o => o.WorkPlanGroupID == attnProcess.MonthlyWorkPlan.WorkPlanGroupID).FirstOrDefault(); // if (attnShiftWiseHoliday != null) // { // attnProcess.ReferenceID = holiday.ID; // attnProcess.Holiday = holiday; // attnProcess.Reason = holiday.ID.ToString(); // } // } // } //} } }