private async Task <MortgageProposal> ProposalCalculator(MortgageRequirement requirement) { var proposal = new MortgageProposal { Id = Guid.NewGuid(), MortgageRequirement = requirement, MortgageRequirementId = requirement.Id, Products = new List <MortgageProposalProduct>() }; await _proposalRepository.CreateAsync(proposal); var products = await _productService.GetAll(); var proposalProducts = new List <MortgageProposalProduct>(); var applicant = await _applicantService.GetById(requirement.ApplicantId); if (!_applicantService.CheckApplicantAge(applicant.DateOfBirth)) { return(proposal); } foreach (var product in products) { var ltv = CalculateLTV(requirement.PropertyValue, requirement.DepositAmount); if (ltv <= product.LoanToValue) { proposalProducts.Add(new MortgageProposalProduct { Id = Guid.NewGuid(), MortgageProposalId = proposal.Id, ProductId = product.Id, Product = product });; } } proposal.Products = proposalProducts; return(proposal); }
public async Task <MortgageProposal> CreateProposal(MortgageRequirement requirement) { await _requirementRepository.CreateAsync(requirement); return(await ProposalCalculator(requirement)); }