Example #1
0
        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);
        }
Example #2
0
        public async Task <MortgageProposal> CreateProposal(MortgageRequirement requirement)
        {
            await _requirementRepository.CreateAsync(requirement);

            return(await ProposalCalculator(requirement));
        }