Ejemplo n.º 1
0
        /// <summary>
        /// Helper Method to execute the option to display campgrounds at a specific national park
        /// </summary>
        private void DisplayCampgroundsByPark()
        {
            // Get a List of all national parks and display this to the user
            IList <Park> parks = parkDAO.GetAllParks();

            ObjectListViews.DisplayParksSingleLine(parks);

            // Get a list of valid selections given the results of the previous query
            List <int> validSelections = Validators.GetValidParkIds(parks);

            // Prompt the user to enter a selection and validate that this selection exists in the list
            int parkId = GetValidInteger("Please select a national park by Id to display the campgrounds at that park:", validSelections);

            // Display the campgrounds at the selected national park
            ObjectListViews.DisplayCampgrounds(campgroundDAO.GetCampgroundsByParkId(parkId));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// The override of ExecuteSelection handles whatever selection was made by the user.
        /// This is where any business logic is executed.
        /// </summary>
        /// <param name="choice">"Key" of the user's menu selection</param>
        /// <returns></returns>
        protected override bool ExecuteSelection(string choice)
        {
            switch (choice)
            {
            case "1":     // Display all parks with summary information
                ObjectListViews.DisplayParksDetailedView(parkDAO.GetAllParks());
                Pause("");
                return(true);

            case "2":     // Display all the campgrounds at a selected national park by calling DisplayCampgroundByPark method
                DisplayCampgroundsByPark();
                Pause("");
                return(true);

            case "3":     // Create and show the reservation sub-menu
                ReservationMenu rm = new ReservationMenu(parkDAO, campgroundDAO, siteDAO, reservationDAO);
                rm.Run();
                return(true);
            }
            return(true);
        }
        /// <summary>
        /// The override of ExecuteSelection handles whatever selection was made by the user.
        /// This is where any business logic is executed.
        /// </summary>
        /// <param name="choice">"Key" of the user's menu selection</param>
        /// <returns></returns>
        protected override bool ExecuteSelection(string choice)
        {
            switch (choice)
            {
            case "1":     // Allow the user to search for and book a campsite including advanced search options by calling the MakeReservation method
                ReservationSearch();
                Pause("");
                return(true);

            case "2":     // Allow the user to search for a reservation across the entire park
                ReservationSearchByPark();
                Pause("");
                return(true);

            case "3":     // Allow the user to view all upcoming reservations from the current date to a chosen end date
                DateTime            endDate      = GetDateTime("Enter a date to see all reservations from now until that date: ");
                IList <Reservation> reservations = reservationDAO.ViewAllUpcomingReservations(DateTime.Now, endDate);
                ObjectListViews.DisplayReservationList(reservations);
                Pause("");
                return(true);
            }
            return(true);
        }
        /// <summary>
        /// Helper method to perform the reservation search and prompt user for additional input
        /// </summary>
        private void ReservationSearch()
        {
            // Display a list of all parks for the user to choose from
            IList <Park> parks = parkDAO.GetAllParks();

            ObjectListViews.DisplayParksSingleLine(parks);

            // Prompt the user to select a valid park
            int parkId = GetValidInteger("Please choose a park to view available campgrounds: ", Validators.GetValidParkIds(parks));

            // Get and display a list of campgrounds at the selected park
            IList <Campground> campgrounds = campgroundDAO.GetCampgroundsByParkId(parkId);

            ObjectListViews.DisplayCampgrounds(campgrounds);

            // Prompt user to choose a valid campground if the user selects 0 cancel the transaction and return to the reservation menu
            int campgroundId = GetValidInteger("Choose a campground (Select 0 to cancel): ", Validators.GetValidCampgroundIds(campgrounds));

            if (campgroundId == 0)
            {
                return;
            }

            // Prompt the user to enter an arrival and departure date and store them and then calculate the total number of days of the stay
            DateTime startDate = GetDateTime("Please enter an arrival date: ");
            DateTime endDate   = GetDateTimeAfterDate("Please enter a departure date: ", startDate);
            int      numDays   = (int)((endDate - startDate).TotalDays);

            // Ask the user if they would like to perform an advanced search
            bool isAdvancedSearch = GetBool("Would you like to perform an advanced search (y/n): ");

            // Create a list to hold the results of the search
            IList <Site> sites = new List <Site>();

            // If the user selected to perform an advanced search get additional parameters, then build a list of sites matching search criteria
            if (isAdvancedSearch)
            {
                int  maxOccupancyRequired = GetInteger("What is the max occupancy required: ");
                bool isAccessible         = GetBool("Do you need a weelchair accessible site (y/n): ");
                int  rvSizeRequired       = GetInteger("What size RV parking is required (Enter 0 for no RV): ");
                bool isHookupRequired     = GetBool("Do you need utility hookups (y/n): ");
                sites = siteDAO.GetAvailableSites(campgroundId, startDate, endDate, maxOccupancyRequired, isAccessible, rvSizeRequired, isHookupRequired);
            }
            else
            {
                sites = siteDAO.GetAvailableSites(campgroundId, startDate, endDate);
            }

            // Check if the search returned any results and print a message indicating no results or a list showing matching results
            if (sites.Count == 0)
            {
                Console.WriteLine();
                Console.WriteLine("Sorry but no matching results were found for your search, returning to reservation menu.");
                return;
            }
            else
            {
                ObjectListViews.DisplayCampSites(sites, campgroundDAO.GetAllCampgrounds(), campgroundId, numDays);
            }

            // Prompt the user to choose a valid site to reserve allow the user to select 0 to cancel the reservation
            int siteNumber = GetValidInteger("Select a site that you want to reserve (enter 0 to cancel):", Validators.GetValidSiteNumber(sites));

            if (siteNumber == 0)
            {
                return;
            }

            // Prompt the user for a name to book the reservation under
            string name = GetString("Enter the name for the reservation: ");

            // Make the reservation and return to the user a confirmation number or error message if the booking was unsuccesful
            Reservation newReservation = reservationDAO.MakeReservation(siteNumber, campgroundId, name, startDate, endDate);

            if (newReservation == null)
            {
                Console.WriteLine();
                Console.WriteLine("Sorry but there was an error with your reservation, returning to the reservation menu.");
                Console.WriteLine();
            }
            else
            {
                Console.WriteLine();
                Console.WriteLine($"The reservation has been made and the confirmation id is {newReservation.ReservationId}.");
                ObjectListViews.DisplaySingleReservation(newReservation);
                Console.WriteLine();
            }

            return;
        }