public async Task <FinancialRatio> FindByLoanApplication(long loanApplicationId) { BalanceSheetSummary balanceSheetSummary = await balanceSheetSummaryRepository.GetByLoanApplication(loanApplicationId); IncomeStatement incomeStatement = await businessRepository.GetIncomeStatement(loanApplicationId); var personalExpenses = await personalExpenseRepository.GetByLoanApplication(loanApplicationId); LoanApplication loanApplication = await context.LoanApplications.SingleOrDefaultAsync(e => e.Id == loanApplicationId); var internalLoansAnnualAmortization = (await internalLoanAnnualAmortizationRepository.GetAnnualAmortizations(loanApplication.Id, loanApplication.RecastDate)).ToList(); var appliedLoanPaymentCapacity = await loanApplicationAnnualAmortizationRepository.GetLoanApplicationCapacity(loanApplication); internalLoansAnnualAmortization.Add(appliedLoanPaymentCapacity); var externalLoansAnnualAmortization = await externalLoanAnnualAmortizationRepository.GetAnnualAmortizations(loanApplication.Id, loanApplication.RecastDate); var existingLoans = (await existingLoanRepository.GetActiveByLoanApplication(loanApplication.Id)) .Where(x => x.IsForRenewal == false); return(new FinancialRatio { BalanceSheetSummary = balanceSheetSummary, IncomeStatement = incomeStatement, PersonalExpenses = personalExpenses, LoanApplication = loanApplication, ExistingLoans = existingLoans, InternalLoansAnnualAmortization = internalLoansAnnualAmortization, ExternalLoansAnnualAmortization = externalLoansAnnualAmortization }); }
public async Task <CashFlowSummary> FindByLoanApplication(long loanApplicationId) { LoanApplication loanApplication = await loanApplicationRepository.FindAsync(loanApplicationId); IncomeStatement incomeStatement = await businessRepository.GetIncomeStatement(loanApplicationId); int numberOfYears = (int)Math.Ceiling((loanApplication.TermInMonths + loanApplication.GracePeriods) / (decimal)CoreSystemConstants.MonthsPerYear); var personalExpenses = await personalExpenseRepository.GetByLoanApplication(loanApplicationId); BalanceSheetSummary balanceSheetSummary = await balanceSheetSummaryRepository.GetByLoanApplication(loanApplicationId); IEnumerable <BuyOutLoan> buyOutLoans = await buyOutLoanRepository.GetByLoanApplication(loanApplicationId); IEnumerable <ExistingLoan> existingLoans = await existingLoanRepository.GetActiveByLoanApplication(loanApplicationId); List <ExistingLoan> excludedMarkedForRenewLoans = existingLoans.Where(e => e.IsForRenewal == false).ToList(); var loanRepaymentCashFlow = new List <LoanRepaymentCashFlowItem>(); var internalLoanCashFLow = await internalLoanCashFlowRepository.GenerateCashFlow(loanApplication, numberOfYears); var externalLoanCashFlow = await externalLoanCashFlowRepository.GenerateCashFlow(loanApplication, numberOfYears); loanRepaymentCashFlow.AddRange(internalLoanCashFLow); loanRepaymentCashFlow.AddRange(externalLoanCashFlow); loanRepaymentCashFlow.Add(await GenerateAppliedLoanCashFlow(loanApplication, numberOfYears)); var renewedLoans = existingLoans.Where(e => e.IsForRenewal == true).ToList(); CashFlowSummary cashFlow = new CashFlowSummary { IncomeStatement = incomeStatement, NumberOfYears = numberOfYears, LoanApplication = loanApplication, PersonalExpenses = personalExpenses, BalanceSheet = balanceSheetSummary, BuyOutLoans = buyOutLoans, ExistingLoansCashFlow = loanRepaymentCashFlow, RenewedLoans = renewedLoans }; return(cashFlow); }