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>());
        }
Ejemplo n.º 2
0
 private void ValidateRequest(ICalculatorRequest request)
 {
     if (request == null)
     {
         throw new ArgumentException("Request must be initialized");
     }
 }
 public ICalculator GetCalculator(ICalculatorRequest request)
 {
     if (request.GetType() == typeof(MortgageCalculationRequest))
     {
         return(new MortgagePropertyCalculator());
     }
     else
     {
         throw new NotImplementedException("This request type doesnt support calculations at the moment");
     }
 }