コード例 #1
0
 private DateTime GetDateTimeFrom(DayOfWeekInfo dayOfWeekInfo, int hour, int minute)
 {
     return(new DateTime(
                dayOfWeekInfo.CurrentDate.Year,
                dayOfWeekInfo.CurrentDate.Month,
                dayOfWeekInfo.CurrentDate.Day,
                hour, minute, 0));
 }
コード例 #2
0
        private bool IsCurrentSlotBusy(DayOfWeekInfo dayOfWeekInfo, DateTime availableSlot)
        {
            if (dayOfWeekInfo.BusySlots == null)
            {
                return(false);
            }

            return(dayOfWeekInfo.BusySlots.Exists(x => availableSlot == GetDateTimeFrom(dayOfWeekInfo, x.Start.Hour, x.Start.Minute)));
        }
コード例 #3
0
        private void ThrowExceptionIsNotValidDataDay(DayOfWeekInfo day)
        {
            Condition.Requires(day, "dayOfWeek")
            .IsNotNull();

            Condition.Requires(day.WorkPeriod, "workPeriod")
            .IsNotNull()
            .Evaluate(x => x.EndHour > x.StartHour);
        }
コード例 #4
0
 private void SetCurrentDayOfWeek(DayOfWeek day, DayOfWeekInfo dayOfWeekInfo)
 {
     if (day == DayOfWeek.Monday)
     {
         dayOfWeekInfo.CurrentDate = _weekData.DayOfMonday;
     }
     else
     {
         dayOfWeekInfo.CurrentDate = _weekData.DayOfMonday.AddDays(((int)day + 6) % 7);
     }
 }
コード例 #5
0
        private bool IsAvailableSlot(DayOfWeekInfo dayOfWeekInfo, DateTime slotToAd, DateTime lunchStartAt, DateTime lunchEndsAt)
        {
            if (IsCurrentSlotBetweenLunchTime(slotToAd, lunchStartAt, lunchEndsAt))
            {
                return(false);
            }

            if (IsCurrentSlotBusy(dayOfWeekInfo, slotToAd))
            {
                return(false);
            }

            return(true);
        }
コード例 #6
0
        private DaySlots SplitDayInSlots(DayOfWeekInfo dayOfWeekInfo)
        {
            try
            {
                ThrowExceptionIsNotValidDataDay(dayOfWeekInfo);


                var availableSlots = new List <IntervalSlot>();

                var workStartAt = GetDateTimeFrom(dayOfWeekInfo, dayOfWeekInfo.WorkPeriod.StartHour, 0);
                var workEndsAt  = GetDateTimeFrom(dayOfWeekInfo, dayOfWeekInfo.WorkPeriod.EndHour, 0);

                var lunchStartAt = GetDateTimeFrom(dayOfWeekInfo, dayOfWeekInfo.WorkPeriod.LunchStartHour, 0);
                var lunchEndsAt  = GetDateTimeFrom(dayOfWeekInfo, dayOfWeekInfo.WorkPeriod.LunchEndHour, 0);

                while (workStartAt != workEndsAt)
                {
                    int minutes = +_weekData.SlotDurationMinutes;

                    var slotToAdd = GetDateTimeFrom(dayOfWeekInfo, workStartAt.Hour, workStartAt.Minute);

                    if (IsAvailableSlot(dayOfWeekInfo, slotToAdd, lunchStartAt, lunchEndsAt))
                    {
                        availableSlots.Add(new IntervalSlot(slotToAdd, _weekData.SlotDurationMinutes));
                    }

                    workStartAt = workStartAt.AddMinutes(minutes);
                }

                return(new DaySlots(dayOfWeekInfo.CurrentDate, availableSlots));
            }
            catch (Exception err)
            {
                _loggerProvider.Log(err);
                return(DaySlots.CreateDayWithNoAvailability(dayOfWeekInfo.CurrentDate));
            }
        }