/// <summary> /// A function to check if a reservation is valid /// </summary> /// <param name="date">Starting DateTime of reservation</param> /// <param name="duration">Duration of the reservation</param> /// <param name="reservationService">Reservation service to check if there are more than 2 reservations already</param> /// <param name="accountId">The account to check</param> /// <returns>A message to indicate if a reservation is valid with info why or why not</returns> public static ReservationConstraintsMessage IsValid(DateTime date, TimeSpan duration, IReservationService reservationService, int accountId) { if (date < DateTime.Now || date + duration < DateTime.Now) { return(new ReservationConstraintsMessage(false, "Reservatie is in het verleden.")); } if (duration > TimeSpan.FromHours(2)) { return(new ReservationConstraintsMessage(false, "Reservatie is te lang (max 2 uur).")); } if (reservationService.GetFutureReservations(accountId).Count >= 2) { return(new ReservationConstraintsMessage(false, "U heeft al teveel reservaties geplaatst voor de toekomst.")); } if (!DayChecker.IsDay(date, duration)) { return(new ReservationConstraintsMessage(false, "Reservaties kunnen alleen tijdens de dag geplaatst worden.")); } if (reservationService.GetFutureReservations(accountId) .Any(x => !DateChecker.AvailableOn(x.Date, x.Duration, date, duration))) { return(new ReservationConstraintsMessage(false, "De reservering overlapt met een al bestaande reservering.")); } return(new ReservationConstraintsMessage(true, "All is fine")); }
public List <SailingBoat> GetAvailableBoats(DateTime reservationDate, TimeSpan duration) { var boats = _boatService.GetAllBoats(); var availableBoats = new List <SailingBoat>(); foreach (var boat in boats) { var available = true; if ((BoatState)boat.Status != BoatState.InService) { foreach (var reserv in boat.SailingReservations) { if (!DateChecker.AvailableOn(reserv.Date, reserv.Duration, reservationDate, duration)) { available = false; } } if (available) { availableBoats.Add(boat); } } } return(availableBoats); }
public void AvailibilityTest(string a_start, int a_duration, string b_start, int b_duration, bool expected) { Assert.AreEqual(expected, DateChecker.AvailableOn(DateTime.Parse(a_start), TimeSpan.FromMinutes(a_duration), DateTime.Parse(b_start), TimeSpan.FromMinutes(b_duration) )); }