예제 #1
0
        /// <inheritdoc />
        public ReservationConstraintsMessage PlaceReservation(int boatType, int memberId, DateTime reservationDate,
                                                              TimeSpan duration)
        {
            var availableBoats = GetAvailableBoats(reservationDate, duration).Where(boat =>
                                                                                    boat.BoatTypeId == boatType && boat.Status != (int)BoatState.InService).ToList();

            // Checks if the reservation doesn't violate any constraints
            var message = ReservationConstraints.IsValid(reservationDate, duration, this, memberId);

            if (!message.IsValid)
            {
                return(message);
            }

            // Check if there is an available boat
            if (availableBoats.Count > 0)
            {
                SailingBoat boatToReserve = null;

                // Take the boat with most reservations
                var max = int.MinValue;
                foreach (var boat in availableBoats)
                {
                    if (boat.SailingReservations.Count >= max)
                    {
                        boatToReserve = boat;
                        max           = boat.SailingReservations.Count;
                    }
                }

                //Create a reservation for this boat
                _context.Reservations.Add(new SailingReservation
                {
                    Date                  = reservationDate,
                    Duration              = duration,
                    ReservedByUserId      = memberId,
                    ReservedSailingBoatId = boatToReserve.Id
                });

                _context.SaveChanges();
                return(new ReservationConstraintsMessage(true, "Reservering is geplaatst"));
            }

            return(new ReservationConstraintsMessage(false, "Geen boten beschikbaar."));
        }
예제 #2
0
        public void SailingBoat_Constructor_Test()
        {
            // Assert.Pass();

            // Arrange
            // expected
            IVehicle vehicle = new SailingBoat("ABC 123", "Röd", 2);


            // Act
            // actual
            string strActualRegistrationNumber = ((Vehicle)vehicle).RegistrationNumber;
            string strActualColor        = ((Vehicle)vehicle).Color;
            int    iActualNumberOfEngins = ((SailingBoat)vehicle).NumberOfEngines;


            // Assert
            Assert.AreEqual("ABC 123", strActualRegistrationNumber);

            Assert.AreEqual("RÖD", strActualColor);

            Assert.AreEqual(2, iActualNumberOfEngins);
        }
예제 #3
0
        public Boat createBoat()
        {
            int    boatLen      = 0;
            int    boatType     = 0;
            int    boatDraft    = 0;
            string strBoatOwner = string.Empty;
            string strBoatName  = string.Empty;


            Boat Boat = null;

            while (true)
            {
                Console.WriteLine("Enter Boat Length");
                string strBoatLength = Console.ReadLine();
                if (!string.IsNullOrEmpty(strBoatLength))
                {
                    int.TryParse(strBoatLength, out boatLen);
                }
                if (boatLen < 1)
                {
                    Console.WriteLine("Boat Length Cannot be less tha 1 meter");
                }
                if (boatLen > marinaLength || boatLen < 1)
                {
                    Console.WriteLine("Boat Length Cannot be Greater than Marina Length or less than 1 meter");
                }
                //else if(boatLen>(Marina.getCurrentCapacityMarinaLength()-Marina.MarinaLength))
                else if (boatLen > (marinaLength - Marina.getCurrentCapacityMarinaLength()))
                {
                    throw new ArgumentException("The current marina capacity of " + Marina.getCurrentCapacityMarinaLength().ToString() + " will not be enough to accomodate this boat");
                }
                else
                {
                    break;
                }
            }
            while (true)
            {
                Console.WriteLine("Enter Boat Draft");
                string strBoatDraft = Console.ReadLine();
                if (!string.IsNullOrEmpty(strBoatDraft))
                {
                    int.TryParse(strBoatDraft, out boatDraft);
                }
                if (boatDraft < 1)
                {
                    Console.WriteLine("Boat Draft Cannot be less tha 1 meter");
                }
                if (boatDraft > 5 || boatDraft < 1)
                {
                    Console.WriteLine("Boat Draft Cannot be Greater than 5 meters or less than 1 meter");
                }
                else
                {
                    break;
                }
            }
            //check reservation here
            bool proceed = calculateBoatResrvation();

            if (proceed)
            {
                while (true)
                {
                    Console.WriteLine("Enter Boat Owner");
                    strBoatOwner = Console.ReadLine();
                    if (!string.IsNullOrEmpty(strBoatOwner))
                    {
                        break;
                    }
                }

                while (true)
                {
                    Console.WriteLine("Enter Boat Name");
                    strBoatName = Console.ReadLine();
                    if (!string.IsNullOrEmpty(strBoatName))
                    {
                        break;
                    }
                }



                Console.WriteLine("Choose Boat Type:");
                while (true)
                {
                    try
                    {
                        boatType = DisplayManager.displayBoatTypesMenu();
                        break;
                    }
                    catch (Exception ex)
                    {
                        DisplayManager.displayMessage(ex.Message);
                    }
                }


                switch (boatType)
                {
                case 1:

                    MotorBoat MB        = (Factory.MotorBoat)BoatFactory.BuildBoat(boatType);
                    int       mbSubtype = BoatFactory.BuildBoatSubTypes(boatType);
                    MB.DriveType = MB.GetEnumNameFromValue(mbSubtype);
                    Boat         = MB;
                    break;

                case 2:

                    // NarrowBoat NB = new NarrowBoat("NarrowBoat", boatType);
                    NarrowBoat NB        = (Factory.NarrowBoat)BoatFactory.BuildBoat(boatType);
                    int        nbSubtype = BoatFactory.BuildBoatSubTypes(boatType);
                    NB.SternType = NB.GetEnumNameFromValue(nbSubtype);
                    Boat         = NB;
                    break;

                case 3:

                    //SailingBoat SB = new SailingBoat("Sailing", boatType);
                    SailingBoat SB        = (Factory.SailingBoat)BoatFactory.BuildBoat(boatType);
                    int         sbSubtype = BoatFactory.BuildBoatSubTypes(boatType);
                    SB.SailingType = SB.GetEnumNameFromValue(sbSubtype);
                    Boat           = SB;
                    break;

                default:
                    break;
                }

                if (Boat != null)
                {
                    Boat.BoatLength  = boatLen;
                    Boat.NameOfBoat  = strBoatName;
                    Boat.NameOfOwner = strBoatOwner;
                    Boat.BoatDraft   = boatDraft;
                    Factory.BoatHelperClass.showDetails(Boat);
                }
            }
            else
            {
                throw new Exception("User terminated Booking transaction");
            }



            return(Boat);
        }