public RedirectToRouteResult ReloadAgreementsModel() { var agreementsModelBuilder = new AgreementsModelBuilder(this.loanLegalRepo, this.context); var loans = this.loanRepository.GetAll(); foreach (var loan in loans) { var agreement = agreementsModelBuilder.ReBuild(loan.Customer, loan); loan.AgreementModel = JsonConvert.SerializeObject(agreement); } // for each return(RedirectToAction("Index", "GenerateAgreements", new { Area = "Underwriter" })); } // ReloadAgreementsModel
public AgreementController( AgreementRenderer agreementRenderer, IEzbobWorkplaceContext context, AgreementsModelBuilder builder, LoanBuilder loanBuilder ) { this.agreementRenderer = agreementRenderer; this.context = context; this.builder = builder; this.customer = this.context.Customer; this.loanBuilder = loanBuilder; this.serviceClient = new ServiceClient(); } // constructor
} // Calculate private LoanOffer CalculateLoan(int amount, int loanType, int repaymentPeriod) { if (!this.context.Customer.CreditSum.HasValue) { log.Warn( "Cannot calculate loan ({0} of type {1} for {2} repayments) for customer {3}: credit sum is null.", amount.ToString("C0"), loanType, repaymentPeriod, this.context.Customer.Stringify() ); return(null); } // if if (this.context.Customer.Status != Status.Approved) { log.Warn( "Cannot calculate loan ({0} of type {1} for {2} repayments) for customer {3}: customer status is '{4}'.", amount.ToString("C0"), loanType, repaymentPeriod, this.context.Customer.Stringify(), this.context.Customer.Status ); return(null); } // if var creditSum = this.context.Customer.CreditSum.Value; this.context.Customer.ValidateOfferDate(); if (amount < 0) { amount = (int)Math.Floor(creditSum); } if (amount > creditSum) { log.Warn( "Attempt to calculate schedule for amount({0}) bigger than credit sum value({1})", amount, creditSum ); amount = (int)Math.Floor(creditSum); } // if var cr = this.context.Customer.LastCashRequest; if (this.context.Customer.IsLoanTypeSelectionAllowed == 1) { var oDBHelper = ObjectFactory.GetInstance <IDatabaseDataHelper>() as DatabaseDataHelper; if (oDBHelper != null) { cr.LoanType = oDBHelper.LoanTypeRepository.Get(loanType); } } // if if (cr.IsCustomerRepaymentPeriodSelectionAllowed) { cr.RepaymentPeriod = repaymentPeriod; } BuiltLoan builtLoan = this.loanBuilder.BuildLoan(cr, amount, DateTime.UtcNow, cr.RepaymentPeriod); var schedule = builtLoan.Loan.Schedule; var apr = this.aprCalc.Calculate(amount, schedule, builtLoan.Loan.SetupFee, builtLoan.Loan.Date); var b = new AgreementsModelBuilder(this.loanLegalRepo); var agreement = b.Build(this.context.Customer, amount, builtLoan.Loan); // TODO calculate offer log.Debug("calculate offer for customer {0}", this.context.Customer.Id); var loanOffer = LoanOffer.InitFromLoan(builtLoan.Loan, apr, agreement, cr); loanOffer.ManualSetupFeePercent = builtLoan.ManualSetupFeePercent; loanOffer.BrokerFeePercent = builtLoan.BrokerFeePercent; return(loanOffer); } // CalculateLoan