public object PeOfficeClockIn(string remoteClockData)
        {
            using (var dtx = new DataContextEF())
            {
                StaffClockModel remoteClock =
                    dtx.StaffClockData.First(x => x.Staff.StaffClockCardNumber.Equals(remoteClockData.Split('-').Last()));

                if (remoteClock != null)
                {
                    remoteClock.DataStatus    = 0;
                    remoteClock.ClockDateTime = DateTime.Now;
                    remoteClock.RecordStatus  = "Active";
                    remoteClock.StaffId       = GetStaffIdByCardNumber(remoteClock.StaffId);
                    remoteClock.Comments      = remoteClock.Comments +
                                                ("PE office clock in");

                    dtx.StaffClockData.Add(remoteClock);
                    dtx.SaveChanges();


                    object obj = new
                    {
                        Name       = remoteClock.Staff.StaffFullName,
                        Time       = DateTime.Now.TimeOfDay,
                        CardNumber = remoteClock.Staff.StaffClockCardNumber
                    };

                    return(Request.CreateResponse(HttpStatusCode.OK, obj));
                }
                return(Request.CreateResponse(HttpStatusCode.ExpectationFailed));
            }
        }
        /**/

        /*
         * /// <summary>
         * /// Merges leave days and clocking Records
         * /// </summary>
         * /// <param name="model"></param>
         * public static ICollection<StaffClockModel> MergeClockData(StaffModel model)
         * {
         *
         *  var clockData = model.StaffClockData;
         *  var leaveData = model.StaffLeaveData;
         *
         *  if (leaveData == null)
         *      return clockData;
         *
         *  //if (clockData.Count < 1)
         *  //    return clockData;
         *
         *  foreach (var data in leaveData)
         *  {
         *      // check how long the leave is
         *      var numOfLeaveDays = GetDaysOff(data.LeaveDateStart, data.LeaveDateEnd);
         *
         *      for (var i = 0; i < numOfLeaveDays; i++)
         *      {
         *          var date = data.LeaveDateStart.AddDays(i);
         *
         *          if (IsWeekend(date)) continue;
         *
         #region Get the staff's start and end times
         *
         *          var staffHoursModel = model.StaffHoursData.FirstOrDefault(m => m.DayId.Equals((int)date.DayOfWeek));
         *
         *          if (staffHoursModel == null)
         *              throw new ArgumentNullException("staffHoursModel");
         *
         *          var dayStart = new StaffClockModel(model.StaffId,
         *                                             new DateTime(date.Year, date.Month, date.Day,
         *                                                          staffHoursModel.DayTimeStart.Hour + 2, staffHoursModel.DayTimeStart.Minute, 0), data.LeaveType);
         *          var dayEnd = new StaffClockModel(model.StaffId,
         *                                           new DateTime(date.Year, date.Month, date.Day,
         *                                                        staffHoursModel.DayTimeEnd.Hour + 2, staffHoursModel.DayTimeEnd.Minute, 0), data.LeaveType);
         *          var lunchStart = new StaffClockModel(model.StaffId,
         *                                           new DateTime(date.Year, date.Month, date.Day,
         *                                                        LunchStartHour, 0, 0), data.LeaveType);
         *          var lunchEnd = new StaffClockModel(model.StaffId,
         *                                           new DateTime(date.Year, date.Month, date.Day,
         *                                                        LunchEndHour, 0, 0), data.LeaveType);
         *
         *          dayStart.IsLeaveRecord   = true;
         *          dayEnd.IsLeaveRecord     = true;
         *          lunchStart.IsLeaveRecord = true;
         *          lunchEnd.IsLeaveRecord   = true;
         *
         *          dayStart.IsPublicHoldiday   = false;
         *          dayEnd.IsPublicHoldiday = false;
         *          lunchStart.IsPublicHoldiday = false;
         *          lunchEnd.IsPublicHoldiday = false;
         *
         *          dayStart.LeaveType   = data.LeaveType;
         *          dayEnd.LeaveType     = data.LeaveType;
         *          lunchStart.LeaveType = data.LeaveType;
         *          lunchEnd.LeaveType   = data.LeaveType;
         *
         *          clockData.Add(dayStart);
         *          clockData.Add(lunchStart);
         *          clockData.Add(lunchEnd);
         *          clockData.Add(dayEnd);
         *
         #endregion
         *      }
         *
         *  }
         *
         *  return clockData;
         * }
         */
        public static ICollection <StaffClockModel> ConvertLeaveDataToClockData(StaffModel model)
        {
            IList <StaffClockModel> clockData = new List <StaffClockModel>();
            var leaveData = model.StaffLeaveData;

            if (leaveData == null)
            {
                return(clockData);
            }

            foreach (var data in leaveData)
            {
                // check how long the leave is
                var numOfLeaveDays = GetDaysOff(data.LeaveDateStart, data.LeaveDateEnd);

                for (var i = 0; i < numOfLeaveDays; i++)
                {
                    var date = data.LeaveDateStart.AddDays(i);

                    if (IsWeekend(date))
                    {
                        continue;
                    }

                    #region Get the staff's start and end times

                    var staffHoursModel = model.StaffHoursData.FirstOrDefault(m => m.DayId.Equals((int)date.DayOfWeek));

                    if (staffHoursModel == null)
                    {
                        throw new ArgumentNullException("staffHoursModel");
                    }

                    var dayStart = new StaffClockModel(model.StaffId,
                                                       new DateTime(date.Year, date.Month, date.Day,
                                                                    staffHoursModel.DayTimeStart.Hour, 0, 0), data.LeaveType);
                    var dayEnd = new StaffClockModel(model.StaffId,
                                                     new DateTime(date.Year, date.Month, date.Day,
                                                                  staffHoursModel.DayTimeEnd.Hour, 0, 0), data.LeaveType);
                    var lunchStart = new StaffClockModel(model.StaffId,
                                                         new DateTime(date.Year, date.Month, date.Day,
                                                                      LunchStartHour, 0, 0), data.LeaveType);
                    var lunchEnd = new StaffClockModel(model.StaffId,
                                                       new DateTime(date.Year, date.Month, date.Day,
                                                                    LunchEndHour, 0, 0), data.LeaveType);

                    clockData.Add(dayStart);
                    clockData.Add(lunchStart);
                    clockData.Add(lunchEnd);
                    clockData.Add(dayEnd);

                    #endregion
                }
            }
            return(clockData);
        }
        public bool RemoteClockIn(StaffClockModel remoteClock)
        {
            remoteClock.RecordStatus = "Active";
            remoteClock.StaffId      = GetStaffIdByEmail(remoteClock.Email);
            remoteClock.Comments     = remoteClock.Comments +
                                       (". This clock in is of an appointment the staff member was in");

            try
            {
                using (DataContextEF dataContext = new DataContextEF())
                {
                    dataContext.StaffClockData.Add(remoteClock);
                    dataContext.SaveChanges();
                }
                return(true);
            }
            catch (Exception e)
            {
                return(false);
            }
        }
        /// <summary>
        /// Merges leave days and clocking Records for Graphs
        /// </summary>
        /// <param name="clockModel"></param>
        /// <param name="hoursModel"></param>
        /// <param name="leaveModel"></param>
        /// <returns></returns>
        public static ICollection <StaffClockModel> MergeClockDataForGraphs(IQueryable <StaffClockModel> clockModel, ICollection <StaffHoursModel> hoursModel, IQueryable <StaffLeaveModel> leaveModel)
        {
            var clockData = clockModel.ToList();
            var leaveData = leaveModel;

            if (leaveData == null)
            {
                return(clockData);
            }

            if (clockData.Count < 1)
            {
                return(clockData);
            }

            foreach (var data in leaveData)
            {
                // check how long the leave is
                var numOfLeaveDays = GetDaysOff(data.LeaveDateStart, data.LeaveDateEnd);

                for (var i = 0; i < numOfLeaveDays; i++)
                {
                    var date = data.LeaveDateStart.AddDays(i);

                    if (IsWeekend(date))
                    {
                        continue;
                    }

                    #region Get the staff's start and end times


                    var staffHoursModel = hoursModel.FirstOrDefault(m => m.DayId.Equals((int)date.DayOfWeek));

                    if (staffHoursModel == null)
                    {
                        throw new ArgumentNullException("staffHoursModel");
                    }

                    var dayStart = new StaffClockModel(data.StaffId,
                                                       new DateTime(date.Year, date.Month, date.Day,
                                                                    staffHoursModel.DayTimeStart.Hour, 0, 0), data.LeaveType);
                    var dayEnd = new StaffClockModel(data.StaffId,
                                                     new DateTime(date.Year, date.Month, date.Day,
                                                                  staffHoursModel.DayTimeEnd.Hour, 0, 0), data.LeaveType);
                    var lunchStart = new StaffClockModel(data.StaffId,
                                                         new DateTime(date.Year, date.Month, date.Day,
                                                                      LunchStartHour, 0, 0), data.LeaveType);
                    var lunchEnd = new StaffClockModel(data.StaffId,
                                                       new DateTime(date.Year, date.Month, date.Day,
                                                                    LunchEndHour, 0, 0), data.LeaveType);

                    clockData.Add(dayStart);
                    clockData.Add(lunchStart);
                    clockData.Add(lunchEnd);
                    clockData.Add(dayEnd);

                    #endregion
                }
            }
            return(clockData);
        }
        /*
         * /// <summary>
         * /// Merges leave days and clocking Records
         * /// </summary>
         * /// <param name="model"></param>
         * public static ICollection<StaffClockModel> MergeClockData(StaffModel model)
         * {
         *  var clockData = model.StaffClockData;
         *  var leaveData = model.StaffLeaveData;
         *
         #region Insert clock records for Public holidays and if public holiday is on a Sunday
         *  var publicHolidays = DateTime.Now.ThePublicHolidays();
         *
         *  var minDate = new DateTime();
         *  var maxDate = new DateTime();
         *
         *  if (clockData.Any())
         *  {
         *      minDate = (from d in clockData select d.ClockDateTime).Min();
         *      maxDate = (from d in clockData select d.ClockDateTime).Max();
         *  }
         *  else if (leaveData.Any())
         *  {
         *      minDate = (from d in leaveData select d.LeaveDateStart).Min();
         *      maxDate = (from d in leaveData select d.LeaveDateEnd).Max();
         *  }
         *
         *  publicHolidays = publicHolidays.Where(m => m.Date >= minDate && m.Date <= maxDate).ToList();
         *
         *  foreach (DateTime publicHoliday in publicHolidays)
         *  {
         *      var staffHoursModel = new StaffHoursModel();
         *      var dayStartPublicHolidayOnSunday = new StaffClockModel();
         *      var dayEndPublicHolidayOnSunday = new StaffClockModel();
         *      var dayStart = new StaffClockModel();
         *      var dayEnd = new StaffClockModel();
         *
         *      var date = publicHoliday.Date;
         *
         *      if (date.DayOfWeek == DayOfWeek.Saturday) continue;
         *
         *      if (date.DayOfWeek == DayOfWeek.Sunday)
         *      {
         *          staffHoursModel = model.StaffHoursData.FirstOrDefault(m => m.DayId.Equals(1));
         *      }
         *      else
         *      {
         *          staffHoursModel = model.StaffHoursData.FirstOrDefault(m => m.DayId.Equals((int)date.DayOfWeek));
         *      }
         *      if (staffHoursModel == null)
         *          throw new ArgumentNullException("staffHoursModel");
         *
         *
         *      if (date.DayOfWeek == DayOfWeek.Sunday)
         *      {
         *          dayStartPublicHolidayOnSunday = new StaffClockModel(model.StaffId,
         *              new DateTime(publicHoliday.Year, publicHoliday.Month, publicHoliday.Day,
         *                  staffHoursModel.DayTimeStart.Hour + 2, staffHoursModel.DayTimeStart.Minute, 0));
         *
         *          dayEndPublicHolidayOnSunday = new StaffClockModel(model.StaffId,
         *              new DateTime(publicHoliday.Year, publicHoliday.Month, publicHoliday.Day,
         *                  staffHoursModel.DayTimeEnd.Hour + 1, staffHoursModel.DayTimeEnd.Minute, 0));
         *      }
         *      else
         *      {
         *          dayStart = new StaffClockModel(model.StaffId,
         *              new DateTime(publicHoliday.Year, publicHoliday.Month, publicHoliday.Day,
         *                  staffHoursModel.DayTimeStart.Hour + 2, staffHoursModel.DayTimeStart.Minute, 0));
         *
         *          dayEnd = new StaffClockModel(model.StaffId,
         *              new DateTime(publicHoliday.Year, publicHoliday.Month, publicHoliday.Day,
         *                  staffHoursModel.DayTimeEnd.Hour + 1, staffHoursModel.DayTimeEnd.Minute, 0));
         *      }
         *
         *      dayStart.IsPublicHoldiday = true;
         *      dayEnd.IsPublicHoldiday = true;
         *
         *      dayStart.IsLeaveRecord = false;
         *      dayEnd.IsLeaveRecord = false;
         *
         *      dayEnd.DataStatus = (int)ClockRecordEnums.PublicHoliday;
         *
         *      var valueDayStart = clockData.FirstOrDefault(x => x.ClockDateTime.Date == dayStart.ClockDateTime.Date);
         *      var valueDayEnd = clockData.FirstOrDefault(x => x.ClockDateTime.Date == dayStart.ClockDateTime.Date);
         *
         *      if (valueDayEnd == null)
         *          clockData.Add(dayEnd);
         *
         *      if (valueDayStart == null)
         *          clockData.Add(dayStart);
         *
         *      if (valueDayEnd == null && dayStart.ClockDateTime != default(DateTime))
         *      {
         *          dayStartPublicHolidayOnSunday.IsLeaveRecord = false;
         *          dayStartPublicHolidayOnSunday.IsPublicHoldiday = true;
         *          clockData.Add(dayStartPublicHolidayOnSunday);
         *      }
         *
         *      if (valueDayEnd == null && dayStart.ClockDateTime != default(DateTime))
         *      {
         *          dayEndPublicHolidayOnSunday.IsLeaveRecord = false;
         *          dayEndPublicHolidayOnSunday.IsPublicHoldiday = true;
         *          clockData.Add(dayEndPublicHolidayOnSunday);
         *      }
         *  }
         *
         #endregion
         *
         #region Insert clock record for days on leave
         *  foreach (var data in leaveData)
         *  {
         *      if (data.LeaveStatus == (int)LeaveStatus.Approved)
         *      {
         *          var numOfLeaveDays = GetDaysOff(data.LeaveDateStart, data.LeaveDateEnd);
         *          for (var i = 0; i < numOfLeaveDays; i++)
         *          {
         *              var date = data.LeaveDateStart.AddDays(i);
         *              if (IsWeekend(date)) continue;
         *
         *              var dayStart = new StaffClockModel(model.StaffId,
         *                  new DateTime(date.Year, date.Month, date.Day,
         *                      data.LeaveDateStart.Hour, data.LeaveDateStart.Minute, 0), data.LeaveType);
         *
         *              var dayEnd = new StaffClockModel(model.StaffId,
         *                  new DateTime(date.Year, date.Month, date.Day,
         *                      (data.LeaveDateEnd.Hour), data.LeaveDateEnd.Minute,
         *                      0), data.LeaveType);
         *
         *              dayStart.IsLeaveRecord = true;
         *              dayEnd.IsLeaveRecord = true;
         *
         *              dayStart.IsPublicHoldiday = false;
         *              dayEnd.IsPublicHoldiday = false;
         *
         *              dayStart.LeaveType = data.LeaveType;
         *              dayEnd.LeaveType = data.LeaveType;
         *
         *              dayEnd.DataStatus = (int)ClockRecordEnums.OnLeave;
         *              dayStart.DataStatus = (int)ClockRecordEnums.OnLeave;
         *
         *              clockData.Add(dayEnd);
         *              clockData.Add(dayStart);
         *          }
         *      }
         *  }
         #endregion
         *
         *  if (clockData.Count < 1)
         *      return clockData;
         *
         *  clockData = clockData.ToList().OrderBy(m => m.ClockDateTime).ToList();
         *  return clockData;
         * }
         */


        /// <summary>
        /// Merges leave days and clocking Records
        /// </summary>
        /// <param name="model"></param>
        public static ICollection <StaffClockModel> MergeClockData(StaffModel model)
        {
            var clockData = model.StaffClockData;
            var leaveData = model.StaffLeaveData;

            if (!clockData.Any() && !leaveData.Any())
            {
                return(default(ICollection <StaffClockModel>));
            }
            var publicHolidays = DateTime.Now.ThePublicHolidays((from d in clockData select d.ClockDateTime).Max(), (from d in clockData select d.ClockDateTime).Min());

            var minDate = new DateTime();
            var maxDate = new DateTime();

            #region

            if (clockData.Any())
            {
                minDate = (from d in clockData select d.ClockDateTime).Min();
                maxDate = (from d in clockData select d.ClockDateTime).Max();
            }
            else if (leaveData.Any())
            {
                minDate = (from d in leaveData select d.LeaveDateStart).Min();
                maxDate = (from d in leaveData select d.LeaveDateEnd).Max();
            }


            //publicHolidays = publicHolidays.Where(m => m.Date >= minDate.Date && m.Month >= minDate.Month && m.Date <= maxDate.Date && m.Month <= maxDate.Month).ToList();



            foreach (DateTime publicHoliday in publicHolidays)
            {
                if (clockData.Any(x => x.ClockDateTime.Date == publicHoliday.Date))
                {
                    continue;
                }
                var staffHoursModel = new StaffHoursModel();
                var dayStartPublicHolidayOnSunday = new StaffClockModel();
                var dayEndPublicHolidayOnSunday   = new StaffClockModel();
                var dayStart = new StaffClockModel();
                var dayEnd   = new StaffClockModel();

                var date = publicHoliday.Date;

                //if (IsWeekend(date)) continue;

                if (date.DayOfWeek == DayOfWeek.Saturday)
                {
                    continue;
                }

                if (date.DayOfWeek == DayOfWeek.Sunday)
                {
                    staffHoursModel = model.StaffHoursData.FirstOrDefault(m => m.DayId.Equals(1));
                }
                else
                {
                    staffHoursModel = model.StaffHoursData.FirstOrDefault(m => m.DayId.Equals((int)date.DayOfWeek));
                }


                if (staffHoursModel == null)
                {
                    throw new ArgumentNullException("staffHoursModel");
                }


                if (date.DayOfWeek == DayOfWeek.Sunday)
                {
                    dayStartPublicHolidayOnSunday = new StaffClockModel(model.StaffId,
                                                                        new DateTime(publicHoliday.Year, publicHoliday.Month, publicHoliday.Day,
                                                                                     staffHoursModel.DayTimeStart.Hour + 2, 0, 0));

                    dayEndPublicHolidayOnSunday = new StaffClockModel(model.StaffId,
                                                                      new DateTime(publicHoliday.Year, publicHoliday.Month, publicHoliday.Day,
                                                                                   staffHoursModel.DayTimeEnd.Hour + 1, publicHoliday.DayOfWeek == DayOfWeek.Friday ? 30 : 0, 0));
                }
                else
                {
                    dayStart = new StaffClockModel(model.StaffId,
                                                   new DateTime(publicHoliday.Year, publicHoliday.Month, publicHoliday.Day,
                                                                staffHoursModel.DayTimeStart.Hour + 2, staffHoursModel.DayTimeStart.Minute == 0 ? 0 : staffHoursModel.DayTimeStart.Minute, 0));

                    dayEnd = new StaffClockModel(model.StaffId,
                                                 new DateTime(publicHoliday.Year, publicHoliday.Month, publicHoliday.Day,
                                                              staffHoursModel.DayTimeEnd.Hour + 1, staffHoursModel.DayTimeEnd.Minute == 0 ? 0 : staffHoursModel.DayTimeEnd.Minute, 0));
                }



                dayStart.IsPublicHoldiday = true;
                dayEnd.IsPublicHoldiday   = true;

                dayStart.IsLeaveRecord = false;
                dayEnd.IsLeaveRecord   = false;

                dayEnd.DataStatus   = (int)ClockRecordEnums.PublicHoliday;
                dayStart.DataStatus = (int)ClockRecordEnums.PublicHoliday;

                dayEnd.DataStatusHighlight   = (int)ClockRecordHighlightEnums.PublicHoliday;
                dayStart.DataStatusHighlight = (int)ClockRecordHighlightEnums.PublicHoliday;

                var valueDayStart = clockData.FirstOrDefault(x => x.ClockDateTime.Date == dayStart.ClockDateTime.Date);
                var valueDayEnd   = clockData.FirstOrDefault(x => x.ClockDateTime.Date == dayStart.ClockDateTime.Date);

                if (valueDayEnd == null)
                {
                    clockData.Add(dayEnd);
                }

                if (valueDayStart == null)
                {
                    clockData.Add(dayStart);
                }

                //if (valueDayEnd == null && dayStart.ClockDateTime != default(DateTime))
                //{
                //    dayStartPublicHolidayOnSunday.IsLeaveRecord = false;
                //    dayStartPublicHolidayOnSunday.IsPublicHoldiday = true;
                //    clockData.Add(dayStartPublicHolidayOnSunday);
                //}


                //if (valueDayEnd == null && dayStart.ClockDateTime != default(DateTime))
                //{
                //    dayEndPublicHolidayOnSunday.IsLeaveRecord = false;
                //    dayEndPublicHolidayOnSunday.IsPublicHoldiday = true;
                //    clockData.Add(dayEndPublicHolidayOnSunday);
                //}
            }
            // }

            #endregion

            #region

            if (!leaveData.Any())
            {
                return(clockData);
            }
            else
            {
                foreach (var data in leaveData)
                {
                    if (data.LeaveStatus == (int)LeaveStatus.Approved)
                    {
                        // check how long the leave is
                        var numOfLeaveDays = GetDaysOff(data.LeaveDateStart, data.LeaveDateEnd);
                        for (var i = 0; i < numOfLeaveDays; i++)
                        {
                            var date = data.LeaveDateStart.AddDays(i);
                            if (IsWeekend(date))
                            {
                                continue;
                            }

                            #region Get the staff's start and end times of the leave and add them as clocking records

                            var staffHoursModel =
                                model.StaffHoursData.FirstOrDefault(m => m.DayId.Equals((int)date.DayOfWeek));

                            if (staffHoursModel == null)
                            {
                                throw new ArgumentNullException("staffHoursModel");
                            }
                            var dayStart = new StaffClockModel(model.StaffId,
                                                               new DateTime(date.Year, date.Month, date.Day,
                                                                            data.LeaveDateStart.Hour, data.LeaveDateStart.Minute, 0), data.LeaveType);

                            //var dayEnd = new StaffClockModel(model.StaffId,
                            //    new DateTime(date.Year, date.Month, date.Day,
                            //      data.LeaveDateEnd.Date > data.LeaveDateStart.Date ? staffHoursModel.DayTimeEnd.Hour + 1 : (data.LeaveDateEnd.Hour),
                            //      data.LeaveDateEnd.Minute > staffHoursModel.DayTimeEnd.Minute ? staffHoursModel.DayTimeEnd.Minute : data.LeaveDateEnd.Minute,
                            //        0), data.LeaveType);

                            var dayEnd = new StaffClockModel(model.StaffId,
                                                             new DateTime(date.Year, date.Month, date.Day,
                                                                          data.LeaveDateEnd.Date > data.LeaveDateStart.Date ? staffHoursModel.DayTimeEnd.Hour + 1 : (data.LeaveDateEnd.Hour),
                                                                          staffHoursModel.DayTimeEnd.Minute,
                                                                          0), data.LeaveType);

                            if (staffHoursModel.DayId.Equals((int)DayOfWeek.Friday))
                            {
                            }

                            //if (data.LeaveType != (int)LeaveType.Special)
                            //{

                            //    if (data.LeaveDateEnd.Subtract(data.LeaveDateStart).TotalHours > 7)
                            //    {

                            //        //if (dayEnd.ClockDateTime.Hour == staffHoursModel.DayTimeEnd.AddHours(2).Hour)
                            //        //{
                            //        //    dayEnd.ClockDateTime = dayEnd.ClockDateTime.Subtract(new TimeSpan(0,0,staffHoursModel.DayLunchLength,0));
                            //        //}
                            //        if (staffHoursModel.DayTimeEnd.Hour + 2 == 16 && staffHoursModel.DayTimeEnd.Minute == 30)
                            //        {
                            //            dayEnd.ClockDateTime = dayEnd.ClockDateTime.Subtract(new TimeSpan(0, 0, staffHoursModel.DayId == 5 && staffHoursModel.DayLunchLength > 0 ? (/*staffHoursModel.DayLunchLength +*/ 30) : staffHoursModel.DayLunchLength, 0, 0));

                            //        }
                            //        else if (staffHoursModel.DayTimeEnd.Hour + 2 < 16 && staffHoursModel.DayTimeEnd.Minute == 00)
                            //        {

                            //        }
                            //        //dayEnd.ClockDateTime = dayEnd.ClockDateTime.Subtract(new TimeSpan(0, 0, staffHoursModel.DayId == 5 && staffHoursModel.DayLunchLength > 0 ? (/*staffHoursModel.DayLunchLength +*/ 30) : staffHoursModel.DayLunchLength, 0, 0));
                            //    }

                            //}
                            dayStart.IsLeaveRecord = true;
                            dayEnd.IsLeaveRecord   = true;

                            dayStart.IsPublicHoldiday = false;
                            dayEnd.IsPublicHoldiday   = false;

                            dayStart.LeaveType = data.LeaveType;
                            dayEnd.LeaveType   = data.LeaveType;


                            if (data.LeaveType == (int)LeaveType.Special)
                            {
                                dayEnd.DataStatus   = (int)ClockRecordEnums.Special;
                                dayStart.DataStatus = (int)ClockRecordEnums.Special;

                                dayEnd.DataStatusHighlight   = (int)ClockRecordHighlightEnums.Special;
                                dayStart.DataStatusHighlight = (int)ClockRecordHighlightEnums.Special;
                            }
                            else if (data.LeaveType == (int)LeaveType.OffSite)
                            {
                                dayEnd.DataStatus   = (int)ClockRecordEnums.Offiste;
                                dayStart.DataStatus = (int)ClockRecordEnums.Offiste;

                                dayEnd.DataStatusHighlight   = (int)ClockRecordHighlightEnums.Offiste;
                                dayStart.DataStatusHighlight = (int)ClockRecordHighlightEnums.Offiste;
                            }
                            else
                            {
                                dayEnd.DataStatus   = (int)ClockRecordEnums.OnLeave;
                                dayStart.DataStatus = (int)ClockRecordEnums.OnLeave;

                                dayEnd.DataStatusHighlight   = (int)ClockRecordHighlightEnums.OnLeave;
                                dayStart.DataStatusHighlight = (int)ClockRecordHighlightEnums.OnLeave;
                            }


                            clockData.Add(dayEnd);
                            clockData.Add(dayStart);

                            #endregion
                        }
                    }
                }
            }

            #endregion

            if (clockData.Count < 1)
            {
                return(clockData);
            }

            clockData = clockData.ToList().OrderBy(m => m.ClockDateTime).ToList();
            return(clockData);
        }