Ejemplo n.º 1
0
        private LoanInfo GetLoanInfo()
        {
            string input;
            var    loanDTO = new LoanInfoDTO();

            while (_counter < Buffer.Length)
            {
                input = Buffer[_counter++];
                loanDTO.TryPopulate(input);
            }
            var loan = loanDTO.TryParse(out string[] errors);

            return(loan);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Parses Loan info properties
        /// </summary>
        /// <param name="loan">Initial Loan info object</param>
        /// <param name="errors">Output error messages after parsing</param>
        /// <returns>Parsed Loan Info object</returns>
        public static LoanInfo TryParse(this LoanInfoDTO loan, out string[] errors)
        {
            var      errorMessages = new List <string>();
            LoanInfo parsedLoan    = new LoanInfo();

            if (string.IsNullOrEmpty(loan.Amount) || !decimal.TryParse(loan.Amount, out var amount))
            {
                errorMessages.Add("The Loan Amount has incorrect format.");
            }
            else
            {
                parsedLoan.Amount = amount;
            }
            if (string.IsNullOrEmpty(loan.Downpayment) || !decimal.TryParse(loan.Downpayment, out var downpayment))
            {
                errorMessages.Add("The Loan Downpayment has incorrect format.");
            }
            else
            {
                parsedLoan.Downpayment = downpayment;
            }
            if (string.IsNullOrEmpty(loan.Interest) ||
                !decimal.TryParse(loan.Interest.Replace("%", "").Trim(), out var interest))
            {
                errorMessages.Add("The Loan Interest has incorrect format.");
            }
            else
            {
                parsedLoan.Interest = loan.Interest.Contains("%") ? interest / 100 : interest;
            }
            if (string.IsNullOrEmpty(loan.Term) || !int.TryParse(loan.Term, out var term))
            {
                errorMessages.Add("The Loan Term has incorrect format.");
            }
            else
            {
                parsedLoan.Term = term;
            }
            errors = errorMessages.ToArray();
            return(errorMessages.Any() ? null : parsedLoan);
        }
Ejemplo n.º 3
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);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Populate properties of Loan Info object from user console input
        /// </summary>
        /// <param name="loan">Loan info object</param>
        /// <param name="userInput">Console input</param>
        /// <returns>Is Populated</returns>
        public static bool TryPopulate(this LoanInfoDTO loan, string userInput)
        {
            var tokens = userInput.Split(new[] { ':' }, StringSplitOptions.RemoveEmptyEntries)
                         .Select(s => s.Trim()).ToArray();

            if (tokens.Length != 2)
            {
                return(false);
            }
            var property = tokens[0].ToLower();
            var value    = tokens[1]
                           .Replace(" ", "").Replace("'", "").Replace(",", "");      // replace some possible thousand separatore

            switch (property)
            {
            case "amount":
                loan.Amount = value;
                break;

            case "interest":
                loan.Interest = value;
                break;

            case "downpayment":
                loan.Downpayment = value;
                break;

            case "term":
                loan.Term = value;
                break;

            default:
                return(false);
            }
            return(true);
        }