public async Task <IResult> CalculateAsync(ICalculatorRequest request)
        {
            var mortgageRequest = (MortgageCalculationRequest)request;

            if (mortgageRequest != null)
            {
                var mortgageResult = new MortgageResult();
                var mortgageModel  = CalculateMortgageModel(mortgageRequest.Mortgage, mortgageRequest.Purchase);

                mortgageResult.Mortgage = mortgageModel.Interest + mortgageModel.Principle + mortgageModel.PMI;

                var yearlyPropertyTax = mortgageRequest.Purchase.PurchasePrice * 0.0223;

                mortgageResult.PropertyTaxes   = yearlyPropertyTax / 12;
                mortgageResult.HomeInsurance   = mortgageRequest.Extras.HomeInsuranceAnnual / 12;
                mortgageResult.UtilitiesCost   = mortgageRequest.Extras.Utilities.Sum(x => x.Cost);
                mortgageResult.AssociationDues = mortgageRequest.Extras.HOADues;

                return(new Result <MortgageResult>
                {
                    data = mortgageResult
                });
            }
            return(new Result <MortgageResult>());
        }
        /// <summary>
        /// mortgage calculation core part
        /// </summary>
        /// <param name="model"></param>
        /// <returns>MortgageResult</returns>
        public static MortgageResult CalculateMorgage(MortgageModel model)
        {
            MortgageResult result = new MortgageResult();

            double Principal = 0, loanTerm = 0, intrstRate = 0, pwrValue, EMI, totalRepayment, totInterest;

            if (model != null)
            {
                loanTerm   = (model.LoanTerm) * 12;
                Principal  = model.PrincipalAmount;
                intrstRate = model.Rate;
            }
            intrstRate = (intrstRate / 100) / 12;

            pwrValue = Math.Pow((1 + intrstRate), loanTerm);

            EMI = Principal * intrstRate * (pwrValue / (pwrValue - 1));

            totalRepayment = Math.Round((EMI * loanTerm), 2);

            totInterest = Math.Round((totalRepayment - Principal), 2);

            result.TotalInterest = totInterest;

            result.TotalRepayment = totalRepayment;
            return(result);
        }
Beispiel #3
0
        public MortgageCalculateControllerTests()
        {
            _logger = new Mock <ILogger <MortgageCalculatorController> >();
            _mapper = new Mock <IMapper>();
            _mortgageCalculateProvider = new Mock <IMortgageCalculateProvider>();
            _interestRateProvider      = new Mock <IInterestRateProvider>();
            _requestValidator          = new Mock <IRequestValidator>();
            _controller = new MortgageCalculatorController(
                _logger.Object,
                _mapper.Object,
                _mortgageCalculateProvider.Object,
                _interestRateProvider.Object,
                _requestValidator.Object);

            var mortgageResult = new MortgageResult(500, true);

            _mortgageCalculateProvider.Setup(x => x.GetMortgageResult(It.IsAny <MortgageInput>())).Returns(mortgageResult);
        }
Beispiel #4
0
        public static void Log(MortgageInfo mortgageInfo, MortgageResult mortgageResult)
        {
            SqlConnection connection = Connect();

            SqlCommand cmd = new SqlCommand($"INSERT INTO {TableName} VALUES(@principle, @time, @rate, @years, @monthlyPayment)",
                                            connection);

            cmd.Parameters.AddWithValue("principle", mortgageInfo.Principle);
            cmd.Parameters.AddWithValue("time", DateTime.Now.Ticks);
            cmd.Parameters.AddWithValue("rate", mortgageInfo.InterestRate);
            cmd.Parameters.AddWithValue("years", mortgageInfo.DurationYears);

            cmd.Parameters.AddWithValue("monthlyPayment", mortgageResult.MonthlyPayment);

            cmd.ExecuteNonQuery();

            connection.Close();
        }
        public ActionResult Index(double Cost, double Principle, double InterestRate, int DurationYears)
        {
            MortgageInfo mortgageInfo = new MortgageInfo(Cost, Principle, InterestRate, DurationYears);

            MortgageResult mortgageResult = new MortgageResult {
                MonthlyPayment = MortgageLib.MonthlyPayment(mortgageInfo)
            };

            // Saving the results to a database.
            {
                MortgageLoggerSQL.TryCreateTables(); // Yes, I am too lazy to run this at the start of the program. Let's just do it here.

                MortgageLoggerSQL.Log(mortgageInfo, mortgageResult);
            }


            return(View("IndexResult", mortgageResult));
        }
 public ActionResult IndexResult(MortgageResult mortgageResult)
 {
     return(View());
 }