using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient; using HRM.BO; using Ease.Core.Model; using Ease.Core.DataAccess; using Ease.Core.Utility; using Microsoft.Data.SqlClient; namespace HRM.DA { #region MonthlyWorkPlan Service [Serializable] public class MonthlyWorkPlanService : ServiceTemplate, IMonthlyWorkPlanService { public MonthlyWorkPlanService() { } private void MapObject(MonthlyWorkPlan oMonthlyWorkPlan, DataReader oReader) { base.SetObjectID(oMonthlyWorkPlan, oReader.GetInt32("MonthlyWorkPlanID").Value); oMonthlyWorkPlan.DaySerial = oReader.GetInt32("DaySerial", 0); oMonthlyWorkPlan.WorkDate = oReader.GetDateTime("WorkDate").Value; oMonthlyWorkPlan.ShiftID = oReader.GetInt32("ShiftID", 0); oMonthlyWorkPlan.HolidayID = oReader.GetInt32("HolidayID", 0); oMonthlyWorkPlan.WorkPlanGroupID = oReader.GetInt32("WorkPlanGroupID", 0); oMonthlyWorkPlan.Type = (EnumWorkPlanDayType)oReader.GetInt32("Type").Value; oMonthlyWorkPlan.CreatedBy = oReader.GetInt32("CreatedBy", 0); oMonthlyWorkPlan.CreatedDate = oReader.GetDateTime("CreatedDate").Value; oMonthlyWorkPlan.ModifiedBy = oReader.GetInt32("ModifiedBy"); oMonthlyWorkPlan.ModifiedDate = oReader.GetDateTime("ModifiedDate"); this.SetObjectState(oMonthlyWorkPlan, Ease.Core.ObjectState.Saved); } protected override T CreateObject(DataReader oReader) { MonthlyWorkPlan oMonthlyWorkPlan = new MonthlyWorkPlan(); MapObject(oMonthlyWorkPlan, oReader); return oMonthlyWorkPlan as T; } protected MonthlyWorkPlan CreateObject(DataReader oReader) { MonthlyWorkPlan oMonthlyWorkPlan = new MonthlyWorkPlan(); MapObject(oMonthlyWorkPlan, oReader); return oMonthlyWorkPlan; } #region Service implementation public List Get(DateTime attnMonth, int payrollTypeID) { List monthlyWorkPlans = new List(); TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader dr = new DataReader(MonthlyWorkPlanDA.Get(tc, attnMonth, payrollTypeID)); monthlyWorkPlans = 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 monthlyWorkPlans; } public List GetByDateAndGroupID(DateTime dAssDate, int groupID) { TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader dr = new DataReader(MonthlyWorkPlanDA.GetByDateAndGroupID(tc, dAssDate, groupID)); var monthlyWorkPlans = this.CreateObjects(dr); dr.Close(); tc.End(); return monthlyWorkPlans; } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } public List Get(DateTime fromdate, DateTime todate, int payrollTypeID) { TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader dr = new DataReader(MonthlyWorkPlanDA.Get(tc, fromdate, todate, payrollTypeID)); var monthlyWorkPlans = this.CreateObjects(dr); dr.Close(); tc.End(); return monthlyWorkPlans; } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } //public List GetMonthlyDataByEmp(DateTime dAssDate, EnumWorkPlanGroup type, int nEmpID) //{ // TransactionContext tc = null; // try // { // tc = TransactionContext.Begin(); // DataReader dr = new DataReader(MonthlyWorkPlanDA.GetMonthlyDataByEmp(tc, dAssDate, type, nEmpID)); // var monthlyWorkPlans = this.CreateObjects(dr); // dr.Close(); // tc.End(); // return monthlyWorkPlans; // } // 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 payrollTypeID) { TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader dr = new DataReader(MonthlyWorkPlanDA.Get(tc, payrollTypeID)); var monthlyWorkPlans = this.CreateObjects(dr); dr.Close(); tc.End(); return monthlyWorkPlans; } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } public List GetByPayrollTypeID(DateTime fromdate, DateTime todate, int payrolltypeID) { TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader dr = new DataReader(MonthlyWorkPlanDA.GetByPayrollTypeID(tc, fromdate, todate, payrolltypeID)); var monthlyWorkPlans = this.CreateObjects(dr); dr.Close(); tc.End(); return monthlyWorkPlans; } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } public List GetByDateAndPayrollType(DateTime attnDate, int payrollTypeID) { TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader dr = new DataReader(MonthlyWorkPlanDA.GetByDateAndPayrollType(tc, attnDate, payrollTypeID)); var monthlyWorkPlans = this.CreateObjects(dr); dr.Close(); tc.End(); return monthlyWorkPlans; } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } public MonthlyWorkPlan GetByEmpID(int nEmpID, DateTime assDate, EnumWorkPlanGroup type) { MonthlyWorkPlan oMonthlyWorkPlan = new MonthlyWorkPlan(); TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(MonthlyWorkPlanDA.GetByEmpID(tc, nEmpID, assDate, type)); if (oreader.Read()) { oMonthlyWorkPlan = 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 oMonthlyWorkPlan; } public MonthlyWorkPlan GetByEmpID(int nEmpID, DateTime workDate) { MonthlyWorkPlan oMonthlyWorkPlan = new MonthlyWorkPlan(); TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader oreader = new DataReader(MonthlyWorkPlanDA.GetByEmpID(tc, nEmpID, workDate)); if (oreader.Read()) { oMonthlyWorkPlan = 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 oMonthlyWorkPlan; } public List GetMonthlyDataByEmp(DateTime fromDate, DateTime toDate, EnumWorkPlanGroup type, int nEmpID, int workPlanGroupID) { TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader dr = new DataReader(MonthlyWorkPlanDA.GetMonthlyDataByEmp(tc, fromDate, toDate, type, nEmpID, workPlanGroupID)); var monthlyWorkPlans = this.CreateObjects(dr); dr.Close(); tc.End(); return monthlyWorkPlans; } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } public List GetByDate(DateTime attnDate, int payrollTypeID) { TransactionContext tc = null; try { tc = TransactionContext.Begin(); DataReader dr = new DataReader(MonthlyWorkPlanDA.GetByDate(tc, attnDate, payrollTypeID)); var monthlyWorkPlans = this.CreateObjects(dr); dr.Close(); tc.End(); return monthlyWorkPlans; } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } public DateTime GetLastSavedWorkDate(int payrollTypeID) { TransactionContext tc = null; try { tc = TransactionContext.Begin(); var lastSavedWorkDate = MonthlyWorkPlanDA.GetLastSavedWorkDate(tc, payrollTypeID); tc.End(); return lastSavedWorkDate; } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } public void Save(List oMWPlans) { TransactionContext tc = null; try { tc = TransactionContext.Begin(true); var startDate = oMWPlans.Min(x => x.WorkDate); var endDate = oMWPlans.Max(x => x.WorkDate); int id = tc.GenerateID("MonthlyWorkPlan", "MonthlyWorkPlanID"); // Delete between these Date MonthlyWorkPlanDA.Delete(tc, startDate, oMWPlans[0].payrollTypeID); // Bulk insert if (oMWPlans != null && oMWPlans.Count > 0) { DataTable _monthlyWorkPlan = null; _monthlyWorkPlan = new DataTable("MonthlyWorkPlan"); _monthlyWorkPlan.Columns.Add("MONTHLYWORKPLANID", typeof(int)); _monthlyWorkPlan.Columns.Add("WORKDATE", typeof(DateTime)); _monthlyWorkPlan.Columns.Add("SHIFTID", typeof(int)); _monthlyWorkPlan.Columns.Add("HOLIDAYID", typeof(int)); _monthlyWorkPlan.Columns.Add("CREATEDBY", typeof(int)); _monthlyWorkPlan.Columns.Add("CREATEDDATE", typeof(DateTime)); _monthlyWorkPlan.Columns.Add("MODIFIEDBY", typeof(int)); _monthlyWorkPlan.Columns.Add("MODIFIEDDATE", typeof(DateTime)); _monthlyWorkPlan.Columns.Add("TYPE", typeof(int)); _monthlyWorkPlan.Columns.Add("WORKPLANGROUPID", typeof(int)); _monthlyWorkPlan.Columns.Add("DAYSERIAL", typeof(int)); _monthlyWorkPlan.Columns.Add("PAYROLLTYPEID", typeof(int)); foreach (MonthlyWorkPlan item in oMWPlans) { _monthlyWorkPlan.Rows.Add( item.IsNew ? id++ : item.ID, item.WorkDate, DataReader.GetNullValue(item.ShiftID, 0), DataReader.GetNullValue(item.HolidayID, 0), DataReader.GetNullValue(item.CreatedBy, 0), item.CreatedDate, null, null, (int)item.Type, item.WorkPlanGroupID, item.DaySerial, item.payrollTypeID); } using (SqlBulkCopy bulkCopy = new SqlBulkCopy((SqlConnection)tc.Connection, SqlBulkCopyOptions.Default, (SqlTransaction)tc.Transaction)) { bulkCopy.BulkCopyTimeout = 600; // in seconds //bulkCopy.BatchSize = 5000; bulkCopy.ColumnMappings.Add("MONTHLYWORKPLANID", "MONTHLYWORKPLANID"); bulkCopy.ColumnMappings.Add("WORKDATE", "WORKDATE"); bulkCopy.ColumnMappings.Add("SHIFTID", "SHIFTID"); bulkCopy.ColumnMappings.Add("HOLIDAYID", "HOLIDAYID"); bulkCopy.ColumnMappings.Add("CREATEDBY", "CREATEDBY"); bulkCopy.ColumnMappings.Add("CREATEDDATE", "CREATEDDATE"); bulkCopy.ColumnMappings.Add("MODIFIEDBY", "MODIFIEDBY"); bulkCopy.ColumnMappings.Add("MODIFIEDDATE", "MODIFIEDDATE"); bulkCopy.ColumnMappings.Add("TYPE", "TYPE"); bulkCopy.ColumnMappings.Add("WORKPLANGROUPID", "WORKPLANGROUPID"); bulkCopy.ColumnMappings.Add("DAYSERIAL", "DAYSERIAL"); bulkCopy.ColumnMappings.Add("PAYROLLTYPEID", "PAYROLLTYPEID"); bulkCopy.DestinationTableName = "MonthlyWorkPlan"; bulkCopy.WriteToServer(_monthlyWorkPlan); } } //foreach (MonthlyWorkPlan oMWPlan in oMWPlans) //{ // if (oMWPlan.IsNew) // { // int id = tc.GenerateID("MonthlyWorkPlan", "MonthlyWorkPlanID"); // base.SetObjectID(oMWPlan, ID.FromInteger(id)); // MonthlyWorkPlanDA.Insert(tc, oMWPlan); // } // else // { // MonthlyWorkPlanDA.Update(tc, oMWPlan); // } //} tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } public void UpdateShiftAndRoster(MonthlyWorkPlan oMWPlan) { TransactionContext tc = null; try { tc = TransactionContext.Begin(true); MonthlyWorkPlanDA.UpdateShiftAndRoster(tc, oMWPlan); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } public void DeleteOnward(DateTime fromMonth, int payrolltypeid) { TransactionContext tc = null; try { tc = TransactionContext.Begin(true); MonthlyWorkPlanDA.Delete(tc, fromMonth, payrolltypeid); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } public void Delete(DateTime dFromDate, DateTime dToDate, int payrollTypeID) { TransactionContext tc = null; try { tc = TransactionContext.Begin(true); MonthlyWorkPlanDA.Delete(tc, dFromDate, dToDate, payrollTypeID); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } } //public void Delete(DateTime assignDate, string empIDs) //{ // TransactionContext tc = null; // try // { // tc = TransactionContext.Begin(true); // MonthlyWorkPlanDA.Delete(tc, assignDate, empIDs); // tc.End(); // } // catch (Exception e) // { // #region Handle Exception // if (tc != null) // tc.HandleError(); // ExceptionLog.Write(e); // throw new ServiceException(e.Message, e); // #endregion // } //} public bool IsExist(DateTime dAssDate, int groupID) { bool isExist = false; TransactionContext tc = null; try { tc = TransactionContext.Begin(); isExist = MonthlyWorkPlanDA.IsExist(tc, dAssDate, groupID); tc.End(); } catch (Exception e) { #region Handle Exception if (tc != null) tc.HandleError(); ExceptionLog.Write(e); throw new ServiceException(e.Message, e); #endregion } return isExist; } public List RefreshMonthlyWorkplan(DateTime monthFromDate, DateTime monthToDate, int payrollTypeID) { List currentMonthlyWorkPlans = new List(); var tempCurrentMonthlyWorkPlans = this.Get(monthFromDate, payrollTypeID); var PreviousMonthPlans = this.Get(monthFromDate.AddMonths(-1) , payrollTypeID); WorkPlanGroupService wfs = new WorkPlanGroupService(); List wfGroups = wfs.Get(EnumStatus.Regardless, payrollTypeID, string.Empty, null); AttnNationalHolidayService hcs = new AttnNationalHolidayService(); List AttNHolidays = hcs.Get(EnumStatus.Regardless, payrollTypeID); MonthlyWorkPlan tempMonthlyWorkPlan; ShiftRotationService srs = new ShiftRotationService(); List shiftRotations = srs.Get(EnumStatus.Regardless, payrollTypeID); if (monthFromDate.Day != 1) monthFromDate = GlobalFunctions.FirstDateOfMonth(monthFromDate); foreach (var currentWPGroup in wfGroups) { if (tempCurrentMonthlyWorkPlans.Any(x => x.WorkPlanGroupID == currentWPGroup.ID)) { currentMonthlyWorkPlans.AddRange(tempCurrentMonthlyWorkPlans.Where(x => x.WorkPlanGroupID== currentWPGroup.ID)); continue; } if (currentWPGroup.Type == EnumWorkPlanGroup.Fixed) { for (DateTime currentDate = monthFromDate; currentDate <= monthToDate; currentDate = currentDate.AddDays(1)) { tempMonthlyWorkPlan = new MonthlyWorkPlan { WorkDate = currentDate, WorkPlanGroupID = currentWPGroup.ID, Type = EnumWorkPlanDayType.WorkingDay, HolidayID = 0, payrollTypeID = payrollTypeID }; tempMonthlyWorkPlan.WorkPlanGroup = currentWPGroup; if (currentDate.DayOfWeek.ToHolidayDayOfWeek() == currentWPGroup.HolidayOne || currentDate.DayOfWeek.ToHolidayDayOfWeek() == currentWPGroup.HolidayTwo) { tempMonthlyWorkPlan.Type = EnumWorkPlanDayType.WeeklyHoliday; } if (AttNHolidays.Any(x => currentDate.Date >= x.FromDate.Date && currentDate.Date <= x.ToDate.Date)) { tempMonthlyWorkPlan.Type = EnumWorkPlanDayType.NationalHoliday; tempMonthlyWorkPlan.HolidayID = AttNHolidays.First(x => currentDate.Date >= x.FromDate.Date && currentDate.Date <= x.ToDate.Date).ID; } switch (currentDate.DayOfWeek) { case DayOfWeek.Sunday: tempMonthlyWorkPlan.ShiftID =(int) currentWPGroup.SundayShiftID; break; case DayOfWeek.Monday: tempMonthlyWorkPlan.ShiftID = (int)currentWPGroup.MondayShiftID; break; case DayOfWeek.Tuesday: tempMonthlyWorkPlan.ShiftID = (int)currentWPGroup.TuesdayShiftID; break; case DayOfWeek.Wednesday: tempMonthlyWorkPlan.ShiftID = (int)currentWPGroup.WednesdayShiftID; break; case DayOfWeek.Thursday: tempMonthlyWorkPlan.ShiftID = (int)currentWPGroup.ThursdayShiftID; break; case DayOfWeek.Friday: tempMonthlyWorkPlan.ShiftID = (int)currentWPGroup.FridayShiftID; break; case DayOfWeek.Saturday: tempMonthlyWorkPlan.ShiftID = (int)currentWPGroup.SaturdayShiftID; break; default: break; } currentMonthlyWorkPlans.Add(tempMonthlyWorkPlan); } } else { var lastDateofPreviousMonth = monthFromDate.AddMonths(-1).LastDateOfMonth(); var lastPreviousMWPlan = PreviousMonthPlans.FirstOrDefault(x => x.WorkDate.Date == lastDateofPreviousMonth && x.WorkPlanGroupID == currentWPGroup.ID); var tempShiftRotations = shiftRotations.Where(x => x.WorkPlanType == currentWPGroup.Type).OrderBy(x => x.Sequence).ToList(); if(tempShiftRotations == null || tempShiftRotations.Count ==0) { throw new Exception("shift Rotation not found for the roster: " + currentWPGroup.Name); } if ((currentWPGroup.Type == EnumWorkPlanGroup.Double_Shift_1 || currentWPGroup.Type == EnumWorkPlanGroup.Double_Shift_2) && tempShiftRotations.Count != 2) { throw new Exception("There must be two roster for a double shift"); } if ((currentWPGroup.Type == EnumWorkPlanGroup.Counter_Clock_1 || currentWPGroup.Type == EnumWorkPlanGroup.Counter_Clock_2 || currentWPGroup.Type == EnumWorkPlanGroup.Counter_Clock_3) && tempShiftRotations.Count != 3) { throw new Exception("There must be three roster for a Counter-Clock-shift"); } int DaySerial = 1; int shiftID = currentWPGroup.InitialShiftID; if (lastPreviousMWPlan != null) { lastPreviousMWPlan.WorkPlanGroup = currentWPGroup; DaySerial = lastPreviousMWPlan.NextDaySerial; shiftID = lastPreviousMWPlan.ShiftID; if (DaySerial == 1) { var lastRotationShift = tempShiftRotations.FirstOrDefault(x => x.ShiftID == lastPreviousMWPlan.ShiftID); shiftID = lastRotationShift.NextShiftID(tempShiftRotations); } } tempMonthlyWorkPlan = new MonthlyWorkPlan(); for (DateTime currentDate = monthFromDate; currentDate <= monthToDate; currentDate = currentDate.AddDays(1)) { tempMonthlyWorkPlan = new MonthlyWorkPlan { WorkDate = currentDate, WorkPlanGroupID = currentWPGroup.ID, ShiftID = shiftID, Type = EnumWorkPlanDayType.WorkingDay, HolidayID = 0, DaySerial = DaySerial, WorkPlanGroup= currentWPGroup }; if (currentDate.DayOfWeek.ToHolidayDayOfWeek() == currentWPGroup.HolidayOne || currentDate.DayOfWeek.ToHolidayDayOfWeek() == currentWPGroup.HolidayTwo) { tempMonthlyWorkPlan.Type = EnumWorkPlanDayType.WeeklyHoliday; } else if (DaySerial == 6 && currentWPGroup.HasTwoHolidays && currentWPGroup.HolidayOne == HolidayDayOfWeek.Auto) { tempMonthlyWorkPlan.Type = EnumWorkPlanDayType.WeeklyHoliday; } else if (DaySerial == 7 && currentWPGroup.HasTwoHolidays && currentWPGroup.HolidayTwo == HolidayDayOfWeek.Auto) { tempMonthlyWorkPlan.Type = EnumWorkPlanDayType.WeeklyHoliday; } else if (DaySerial == 7 && !currentWPGroup.HasTwoHolidays && currentWPGroup.HolidayOne == HolidayDayOfWeek.Auto) { tempMonthlyWorkPlan.Type = EnumWorkPlanDayType.WeeklyHoliday; } if (AttNHolidays.Any(x => currentDate.Date >= x.FromDate.Date && currentDate.Date <= x.ToDate.Date)) { tempMonthlyWorkPlan.Type = EnumWorkPlanDayType.NationalHoliday; tempMonthlyWorkPlan.HolidayID = AttNHolidays.First(x => currentDate.Date >= x.FromDate.Date && currentDate.Date <= x.ToDate.Date).ID; } currentMonthlyWorkPlans.Add(tempMonthlyWorkPlan); if (tempMonthlyWorkPlan.Type == EnumWorkPlanDayType.WeeklyHoliday && DaySerial != 7) tempMonthlyWorkPlan.DaySerial = 7; if (tempMonthlyWorkPlan.WorkPlanGroup.Type == EnumWorkPlanGroup.Two_Days_Shift_1 && tempMonthlyWorkPlan.Type == EnumWorkPlanDayType.WeeklyHoliday && DaySerial != 2) continue; if (tempMonthlyWorkPlan.WorkPlanGroup.Type == EnumWorkPlanGroup.Three_Days_Shift_1 && tempMonthlyWorkPlan.Type == EnumWorkPlanDayType.WeeklyHoliday && DaySerial != 3) continue; DaySerial = tempMonthlyWorkPlan.NextDaySerial; if (DaySerial == 1) { var lastRotationShift = tempShiftRotations.FirstOrDefault(x => x.ShiftID == shiftID); shiftID = lastRotationShift.NextShiftID(tempShiftRotations); } } } } return currentMonthlyWorkPlans; // lblStatus.Text = _currentMonthlyWorkPlans.All(o => o.ID.IsUnassigned) ? "UnSaved Data" : "Saved Data"; } public void SetWorkDayType(MonthlyWorkPlan newPlan, List AttNHolidays , int DaySerial, DateTime currentDate, WorkPlanGroup currentWPGroup) { EnumWorkPlanDayType rtype = EnumWorkPlanDayType.WorkingDay; if (currentDate.DayOfWeek.ToHolidayDayOfWeek() == currentWPGroup.HolidayOne || currentDate.DayOfWeek.ToHolidayDayOfWeek() == currentWPGroup.HolidayTwo) { newPlan.Type = EnumWorkPlanDayType.WeeklyHoliday; } else if (DaySerial == 6 && currentWPGroup.HasTwoHolidays && currentWPGroup.HolidayOne == HolidayDayOfWeek.Auto) { newPlan.Type = EnumWorkPlanDayType.WeeklyHoliday; } else if (DaySerial == 7 && currentWPGroup.HasTwoHolidays && currentWPGroup.HolidayTwo == HolidayDayOfWeek.Auto) { newPlan.Type = EnumWorkPlanDayType.WeeklyHoliday; } else if (DaySerial == 7 && !currentWPGroup.HasTwoHolidays && currentWPGroup.HolidayOne == HolidayDayOfWeek.Auto) { newPlan.Type = EnumWorkPlanDayType.WeeklyHoliday; } if (AttNHolidays.Any(x => currentDate.Date >= x.FromDate.Date && currentDate.Date <= x.ToDate.Date)) { newPlan.Type = EnumWorkPlanDayType.NationalHoliday; newPlan.HolidayID = AttNHolidays.First(x => currentDate.Date >= x.FromDate.Date && currentDate.Date <= x.ToDate.Date).ID; } } public List updateWorkPlan(MonthlyWorkPlan mplan) { List AttNHolidays = new AttnNationalHolidayService().Get(EnumStatus.Regardless, mplan.payrollTypeID); var monthToDate = mplan.WorkDate.LastDateOfMonth(); DateTime dDate = mplan.WorkDate.AddDays(1); int DaySerial = 1; List shiftRotation = new ShiftRotationService().Get(EnumStatus.Active, mplan.payrollTypeID); mplan.WorkPlanGroup = new WorkPlanGroupService().Get((int)mplan.WorkPlanGroupID); var tempShiftRotations = shiftRotation.Where(x => x.WorkPlanType == mplan.WorkPlanGroup.Type).OrderBy(x => x.Sequence).ToList(); int shiftID = mplan.ShiftID; List mplans = new List(); mplans.Add(mplan); List oshifts = new ShiftService().Get(string.Empty, string.Empty, EnumStatus.Regardless, mplan.payrollTypeID); this.SetWorkDayType(mplan, AttNHolidays, 1, mplan.WorkDate, mplan.WorkPlanGroup); if (mplan.Type == EnumWorkPlanDayType.WorkingDay) DaySerial = 2; if (mplan.WorkPlanGroup.Type == EnumWorkPlanGroup.Fixed) { for (DateTime currentDate = dDate; currentDate <= monthToDate; currentDate = currentDate.AddDays(1)) { MonthlyWorkPlan tempMonthlyWorkPlan = new MonthlyWorkPlan { WorkDate = currentDate, WorkPlanGroupID = mplan.WorkPlanGroup.ID, Type = EnumWorkPlanDayType.WorkingDay, HolidayID = 0, payrollTypeID = mplan.payrollTypeID }; if (currentDate.DayOfWeek.ToHolidayDayOfWeek() == mplan.WorkPlanGroup.HolidayOne || currentDate.DayOfWeek.ToHolidayDayOfWeek() == mplan.WorkPlanGroup.HolidayTwo) { tempMonthlyWorkPlan.Type = EnumWorkPlanDayType.WeeklyHoliday; } if (AttNHolidays.Any(x => currentDate.Date >= x.FromDate.Date && currentDate.Date <= x.ToDate.Date)) { tempMonthlyWorkPlan.Type = EnumWorkPlanDayType.NationalHoliday; tempMonthlyWorkPlan.HolidayID = AttNHolidays.First(x => currentDate.Date >= x.FromDate.Date && currentDate.Date <= x.ToDate.Date).ID; } switch (currentDate.DayOfWeek) { case DayOfWeek.Sunday: tempMonthlyWorkPlan.ShiftID = (int)mplan.WorkPlanGroup.SundayShiftID; break; case DayOfWeek.Monday: tempMonthlyWorkPlan.ShiftID = (int)mplan.WorkPlanGroup.MondayShiftID; break; case DayOfWeek.Tuesday: tempMonthlyWorkPlan.ShiftID = (int)mplan.WorkPlanGroup.TuesdayShiftID; break; case DayOfWeek.Wednesday: tempMonthlyWorkPlan.ShiftID = (int)mplan.WorkPlanGroup.WednesdayShiftID; break; case DayOfWeek.Thursday: tempMonthlyWorkPlan.ShiftID = (int)mplan.WorkPlanGroup.ThursdayShiftID; break; case DayOfWeek.Friday: tempMonthlyWorkPlan.ShiftID = (int)mplan.WorkPlanGroup.FridayShiftID; break; case DayOfWeek.Saturday: tempMonthlyWorkPlan.ShiftID = (int)mplan.WorkPlanGroup.SaturdayShiftID; break; default: break; } mplans.Add(tempMonthlyWorkPlan); } } else { for (DateTime currentDate = dDate; currentDate <= monthToDate; currentDate = currentDate.AddDays(1)) { MonthlyWorkPlan newPlan = new MonthlyWorkPlan(); newPlan.WorkDate = currentDate; newPlan.WorkPlanGroupID = mplan.WorkPlanGroupID; newPlan.payrollTypeID = mplan.payrollTypeID; newPlan.WorkPlanGroup = mplan.WorkPlanGroup; newPlan.DaySerial = DaySerial; newPlan.Type = EnumWorkPlanDayType.WorkingDay; //if (DaySerial == 7) // newPlan.Type = EnumWorkPlanDayType.WeeklyHoliday; //if (AttNHolidays.Any(x => currentDate.Date >= x.FromDate.Date && currentDate.Date <= x.ToDate.Date)) //{ // newPlan.Type = EnumWorkPlanDayType.NationalHoliday; // newPlan.HolidayID = AttNHolidays.First(x => currentDate.Date >= x.FromDate.Date && currentDate.Date <= x.ToDate.Date).ID; //} this.SetWorkDayType(newPlan, AttNHolidays, DaySerial, newPlan.WorkDate, mplan.WorkPlanGroup); if (DaySerial == 1) { var lastRotationShift = tempShiftRotations.FirstOrDefault(x => x.ShiftID == shiftID); shiftID = lastRotationShift.NextShiftID(tempShiftRotations); } DaySerial = newPlan.NextDaySerial; Shift oshif = oshifts.FirstOrDefault(x => x.ID == shiftID); newPlan.ShiftID = oshif.ID; mplans.Add(newPlan); } } return mplans; } public List updateWorkPlanSingleDay(MonthlyWorkPlan mplan) { List AttNHolidays = new AttnNationalHolidayService().Get(EnumStatus.Regardless, mplan.payrollTypeID); var monthToDate = mplan.WorkDate.LastDateOfMonth(); DateTime dDate = mplan.WorkDate.AddDays(1); int DaySerial = 1; List shiftRotation = new ShiftRotationService().Get(EnumStatus.Active, mplan.payrollTypeID); mplan.WorkPlanGroup = new WorkPlanGroupService().Get((int)mplan.WorkPlanGroupID); var tempShiftRotations = shiftRotation.Where(x => x.WorkPlanType == mplan.WorkPlanGroup.Type).OrderBy(x => x.Sequence).ToList(); int shiftID = mplan.ShiftID; List mplans = new List(); mplans.Add(mplan); List oshifts = new ShiftService().Get(string.Empty, string.Empty, EnumStatus.Regardless, mplan.payrollTypeID); this.SetWorkDayType(mplan, AttNHolidays, 1, mplan.WorkDate, mplan.WorkPlanGroup); if (mplan.Type == EnumWorkPlanDayType.WorkingDay) DaySerial = 2; if (mplan.WorkPlanGroup.Type == EnumWorkPlanGroup.Fixed) { for (DateTime currentDate = dDate; currentDate <= monthToDate; currentDate = currentDate.AddDays(1)) { MonthlyWorkPlan tempMonthlyWorkPlan = new MonthlyWorkPlan { WorkDate = currentDate, WorkPlanGroupID = mplan.WorkPlanGroup.ID, Type = EnumWorkPlanDayType.WorkingDay, HolidayID = 0, payrollTypeID = mplan.payrollTypeID }; if (currentDate.DayOfWeek.ToHolidayDayOfWeek() == mplan.WorkPlanGroup.HolidayOne || currentDate.DayOfWeek.ToHolidayDayOfWeek() == mplan.WorkPlanGroup.HolidayTwo) { tempMonthlyWorkPlan.Type = EnumWorkPlanDayType.WeeklyHoliday; } if (AttNHolidays.Any(x => currentDate.Date >= x.FromDate.Date && currentDate.Date <= x.ToDate.Date)) { tempMonthlyWorkPlan.Type = EnumWorkPlanDayType.NationalHoliday; tempMonthlyWorkPlan.HolidayID = AttNHolidays.First(x => currentDate.Date >= x.FromDate.Date && currentDate.Date <= x.ToDate.Date).ID; } switch (currentDate.DayOfWeek) { case DayOfWeek.Sunday: tempMonthlyWorkPlan.ShiftID = (int)mplan.WorkPlanGroup.SundayShiftID; break; case DayOfWeek.Monday: tempMonthlyWorkPlan.ShiftID = (int)mplan.WorkPlanGroup.MondayShiftID; break; case DayOfWeek.Tuesday: tempMonthlyWorkPlan.ShiftID = (int)mplan.WorkPlanGroup.TuesdayShiftID; break; case DayOfWeek.Wednesday: tempMonthlyWorkPlan.ShiftID = (int)mplan.WorkPlanGroup.WednesdayShiftID; break; case DayOfWeek.Thursday: tempMonthlyWorkPlan.ShiftID = (int)mplan.WorkPlanGroup.ThursdayShiftID; break; case DayOfWeek.Friday: tempMonthlyWorkPlan.ShiftID = (int)mplan.WorkPlanGroup.FridayShiftID; break; case DayOfWeek.Saturday: tempMonthlyWorkPlan.ShiftID = (int)mplan.WorkPlanGroup.SaturdayShiftID; break; default: break; } mplans.Add(tempMonthlyWorkPlan); } } else { for (DateTime currentDate = dDate; currentDate <= monthToDate; currentDate = currentDate.AddDays(1)) { MonthlyWorkPlan newPlan = new MonthlyWorkPlan(); newPlan.WorkDate = currentDate; newPlan.WorkPlanGroupID = mplan.WorkPlanGroupID; newPlan.payrollTypeID = mplan.payrollTypeID; newPlan.DaySerial = DaySerial; newPlan.Type = EnumWorkPlanDayType.WorkingDay; //if (DaySerial == 7) // newPlan.Type = EnumWorkPlanDayType.WeeklyHoliday; //if (AttNHolidays.Any(x => currentDate.Date >= x.FromDate.Date && currentDate.Date <= x.ToDate.Date)) //{ // newPlan.Type = EnumWorkPlanDayType.NationalHoliday; // newPlan.HolidayID = AttNHolidays.First(x => currentDate.Date >= x.FromDate.Date && currentDate.Date <= x.ToDate.Date).ID; //} this.SetWorkDayType(newPlan, AttNHolidays, DaySerial, newPlan.WorkDate, mplan.WorkPlanGroup); if (DaySerial == 1) { var lastRotationShift = tempShiftRotations.FirstOrDefault(x => x.ShiftID == shiftID); shiftID = lastRotationShift.NextShiftID(tempShiftRotations); } DaySerial = newPlan.NextDaySerial; Shift oshif = oshifts.FirstOrDefault(x => x.ID == shiftID); newPlan.ShiftID = oshif.ID; mplans.Add(newPlan); } } return mplans; } #endregion } #endregion }