public bool CanBeReserved(DateTimeSpan requestedDates, int numberOfDaysGap) { // Find the booking dates before and after our current var firstPastReservation = Reservations.Where(kvp => kvp.Key <= requestedDates.EndDate).Select(kvp => kvp.Value).LastOrDefault(); var firstFutureReservation = Reservations.Where(kvp => kvp.Key >= requestedDates.EndDate).Select(kvp => kvp.Value).FirstOrDefault(); if (firstPastReservation != null && requestedDates.Overlaps(firstPastReservation.Span)) { // The reservation overlaps with the previous reservation return(false); } else if (firstFutureReservation != null && requestedDates.Overlaps(firstFutureReservation.Span)) { // The reservation overlaps with the next reservation return(false); } else if (firstPastReservation != null && firstPastReservation.EndDate.WillCreateGap(requestedDates.StartDate, numberOfDaysGap)) { // The reservation would create a gap return(false); } else if (firstFutureReservation != null && firstFutureReservation.StartDate.WillCreateGap(requestedDates.EndDate, numberOfDaysGap)) { // The reservation would create a gap return(false); } // Nothing disqualifies this site, so we can book it return(true); }
public void CanFindOverlap(int startA, int endA, int startB, int endB, bool shouldOverlap) { // Setup var a = new DateTimeSpan(new DateTime(startA), new DateTime(endA)); var b = new DateTimeSpan(new DateTime(startB), new DateTime(endB)); // Test var overlap = a.Overlaps(b); // Assert Assert.Equal(overlap, shouldOverlap); }