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); }
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); }
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()); }