Example #1
0
        private LoanInfo GetLoanInfo()
        {
            string input;
            var    loanDTO = new LoanInfoDTO();

            _view.Write("Please enter loan parameters:");
startInput:
            while (!string.IsNullOrEmpty(input = _view.GetUserInput()))
            {
                loanDTO.TryPopulate(input);
            }
            var loan = loanDTO.TryParse(out string[] errors);

            if (errors != null && errors.Any())
            {
                _view.Write(errors);
                _view.Write("Please correct input parameters.");
                goto startInput;
            }
            return(loan);
        }
        public void Run()
        {
            var keepRunning = true;

            _consoleView.PrintProgrammeStarted();
            do
            {
                try
                {
                    /*
                     * I would like to add a better handling of this and instead give users the ability to choose th
                     * instead of having to manually enter it is. This would lead to less human error
                     */
                    var command     = _consoleView.GetUserInput();
                    var enteredText = command.ToLower();
                    if (enteredText.Contains("print summary"))
                    {
                        _consoleView.PrintSummary();
                    }
                    else if (enteredText.Contains("add general"))
                    {
                        var passengerSegments = enteredText.Split(' ');
                        _scheduleService.AddPassenger(new Passenger
                        {
                            Type        = PassengerType.General,
                            Name        = passengerSegments[2],
                            Age         = Convert.ToInt32(passengerSegments[3]),
                            AllowedBags = 1
                        });
                        _consoleView.PrintSuccessfullyAddedPassenger("General", passengerSegments[2]);
                    }
                    else if (enteredText.Contains("add loyalty"))
                    {
                        var passengerSegments = enteredText.Split(' ');
                        _scheduleService.AddPassenger(new Passenger
                        {
                            Type                 = PassengerType.LoyaltyMember,
                            Name                 = passengerSegments[2],
                            Age                  = Convert.ToInt32(passengerSegments[3]),
                            AllowedBags          = 2,
                            LoyaltyPoints        = Convert.ToInt32(passengerSegments[4]),
                            IsUsingLoyaltyPoints = Convert.ToBoolean(passengerSegments[5]),
                        });
                        _consoleView.PrintSuccessfullyAddedPassenger("Loyalty", passengerSegments[2]);
                    }
                    else if (enteredText.Contains("add discounted"))
                    {
                        var passengerSegments = enteredText.Split(' ');
                        _scheduleService.AddPassenger(new Passenger
                        {
                            Type        = PassengerType.Discounted,
                            Name        = passengerSegments[2],
                            Age         = Convert.ToInt32(passengerSegments[3]),
                            AllowedBags = 0,
                        });
                        _consoleView.PrintSuccessfullyAddedPassenger("Discounted", passengerSegments[2]);
                    }
                    else if (enteredText.Contains("add airline"))
                    {
                        var passengerSegments = enteredText.Split(' ');
                        _scheduleService.AddPassenger(new Passenger
                        {
                            Type        = PassengerType.AirlineEmployee,
                            Name        = passengerSegments[2],
                            Age         = Convert.ToInt32(passengerSegments[3]),
                            AllowedBags = 1,
                        });
                        _consoleView.PrintSuccessfullyAddedPassenger("Airline Employee", passengerSegments[2]);
                    }
                    else if (enteredText.Contains("exit"))
                    {
                        keepRunning = false;
                        _consoleView.PrintExiting();
                    }
                    else
                    {
                        _consoleView.PrintError();
                    }
                }
                catch (Exception ex)
                {
                    /*
                     * This handles when the users adds the correct commands but doesn't fill
                     * out the rest of the fields e.g. name and age
                     * Would like to add better error handling and logging throughout the application.
                     * Maybe a local log file
                     */
                    if (ex is IndexOutOfRangeException)
                    {
                        _consoleView.PrintMissingFields();
                    }
                    else
                    {
                        _consoleView.PrintError();
                    }
                }
            } while (keepRunning);
        }