private DateTime GetDateTimeFrom(DayOfWeekInfo dayOfWeekInfo, int hour, int minute) { return(new DateTime( dayOfWeekInfo.CurrentDate.Year, dayOfWeekInfo.CurrentDate.Month, dayOfWeekInfo.CurrentDate.Day, hour, minute, 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))); }
private void ThrowExceptionIsNotValidDataDay(DayOfWeekInfo day) { Condition.Requires(day, "dayOfWeek") .IsNotNull(); Condition.Requires(day.WorkPeriod, "workPeriod") .IsNotNull() .Evaluate(x => x.EndHour > x.StartHour); }
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); } }
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); }
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)); } }