public static List <DateTime> GetPossibleTimeSlots(DateTime date, TableAvailability availability) { var possibleTimeSlots = new List <DateTime>(); int firstTimeSlotDayOfWeek = availability.FirstTimeSlotDayOfWeek; int lastTimeSlotDayOfWeek = availability.LastTimeSlotDayOfWeek; int dayDifference = 0; while (firstTimeSlotDayOfWeek != lastTimeSlotDayOfWeek) { dayDifference++; firstTimeSlotDayOfWeek++; if (firstTimeSlotDayOfWeek == 7) { firstTimeSlotDayOfWeek = 0; } } var nextTimeSlot = new DateTime(date.Year, date.Month, date.Day, availability.FirstTimeSlot.Hour, availability.FirstTimeSlot.Minute, 0); var lastTimeSlot = new DateTime(date.Year, date.Month, date.Day, availability.LastTimeSlot.Hour, availability.LastTimeSlot.Minute, 0).AddDays(dayDifference); while (nextTimeSlot <= lastTimeSlot) { possibleTimeSlots.Add(nextTimeSlot); nextTimeSlot = nextTimeSlot.AddMinutes(30); } return(possibleTimeSlots); }
public void GetPossibleTimeSlotsOverMonthChange() { // Arrange var availability = new TableAvailability() { FirstTimeSlotDayOfWeek = 1, LastTimeSlotDayOfWeek = 2, FirstTimeSlot = new DateTime(2014, 1, 31, 19, 00, 00), LastTimeSlot = new DateTime(2014, 12, 12, 1, 00, 00) }; var sourceDate = new DateTime(2014, 1, 31); // Act List <DateTime> possibleTimeSlots = TimeSlotFactory.GetPossibleTimeSlots(sourceDate, availability); // Assert // 19:00 / 19:30 / 20:00 / 20:30 / 21:00 / 21:30 / 22:00 / 22:30 / 23:00 / 23:30 / 00:00 / 00:30 / 01:00 Assert.AreEqual(13, possibleTimeSlots.Count); for (int i = 0; i < possibleTimeSlots.Count; i++) { if (i < 10) { Assert.AreEqual(31, possibleTimeSlots[i].Day); Assert.AreEqual(1, possibleTimeSlots[i].Month); } else { Assert.AreEqual(1, possibleTimeSlots[i].Day); Assert.AreEqual(2, possibleTimeSlots[i].Month); } } }
public static TableAvailabilityDto ToDto(this TableAvailability availability) { return(new TableAvailabilityDto { FirstTimeSlot = availability.FirstTimeSlot, FirstTimeSlotDayOfWeek = availability.FirstTimeSlotDayOfWeek, LastTimeSlot = availability.LastTimeSlot, LastTimeSlotDayOfWeek = availability.LastTimeSlotDayOfWeek, Id = availability.Id }); }
public void GetPossibleTimeSlotsEvening() { // Arrange var availability = new TableAvailability() { FirstTimeSlotDayOfWeek = 1, LastTimeSlotDayOfWeek = 1, FirstTimeSlot = new DateTime(2014, 12, 12, 19, 00, 00), LastTimeSlot = new DateTime(2014, 12, 12, 23, 00, 00) }; var sourceDate = new DateTime(2014, 2, 20); // Act List <DateTime> possibleTimeSlots = TimeSlotFactory.GetPossibleTimeSlots(sourceDate, availability); // Assert // 19:00 / 19:30 / 20:00 / 20:30 / 21:00 / 21:30 / 22:00 / 22:30 / 23:00 Assert.AreEqual(9, possibleTimeSlots.Count); }
public void SaturdayToSundayTimeSlots() { // Arrange var availability = new TableAvailability() { FirstTimeSlotDayOfWeek = 6, LastTimeSlotDayOfWeek = 0, FirstTimeSlot = new DateTime(2014, 12, 12, 19, 00, 00), LastTimeSlot = new DateTime(2014, 12, 12, 02, 00, 00) }; var sourceDate = new DateTime(2014, 2, 20); // Act List <DateTime> possibleTimeSlots = TimeSlotFactory.GetPossibleTimeSlots(sourceDate, availability); // Assert // 19:00 / 19:30 / 20:00 / 20:30 / 21:00 / 21:30 / 22:00 / 22:30 / 23:00 / 23:30 / 00:00 / 00:30 / 01:00 / 01:30 / 02:00 Assert.AreEqual(15, possibleTimeSlots.Count); }
public void Init() { instance = new TableAvailability(); }