/// <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);
        }
示例#3
0
 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)
                                                       ));
 }