// GET: Contacts/Create
        public async Task <IActionResult> Create(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }
            var userId = this.User.FindFirstValue(ClaimTypes.NameIdentifier);
            var lender = _context.Lenders.Where(c => c.IdentityUserId == userId).FirstOrDefault();

            ContactCustomerViewModel contactCustomerViewModel = new ContactCustomerViewModel();

            contactCustomerViewModel.Lender      = lender;
            contactCustomerViewModel.Application = await _context.Applications.Include(a => a.Property).Include(a => a.Liabilities).Include(a => a.LoanProfiles).FirstOrDefaultAsync(m => m.Id == id);

            contactCustomerViewModel.Customers    = _context.Customers.Where(c => c.Id == contactCustomerViewModel.Application.Id).ToList();
            contactCustomerViewModel.Contacts     = _context.Contacts.Where(c => c.ApplicationId == contactCustomerViewModel.Application.Id).ToList();
            contactCustomerViewModel.Customer     = contactCustomerViewModel.Customers.FirstOrDefault();
            contactCustomerViewModel.Property     = contactCustomerViewModel.Application.Property;
            contactCustomerViewModel.Liabilities  = contactCustomerViewModel.Application.Liabilities.ToList();
            contactCustomerViewModel.LoanProfiles = contactCustomerViewModel.Application.LoanProfiles.ToList();
            if (contactCustomerViewModel.Application == null)
            {
                return(NotFound());
            }

            return(View(contactCustomerViewModel));
        }
        public IActionResult CreateLiabilities(int id)
        {
            var userId   = this.User.FindFirstValue(ClaimTypes.NameIdentifier);
            var customer = _context.Customers.Where(c => c.IdentityUserId == userId).FirstOrDefault();

            ContactCustomerViewModel viewModel = new ContactCustomerViewModel();


            var applicationInDb = _context.Applications.Where(c => c.Id == id).SingleOrDefault();
            var liabilities     = _context.Liabilities.Where(l => l.ApplicationId == id).ToList();

            viewModel.Liabilities = liabilities;

            if (!liabilities.Any())
            {
                applicationInDb.Liabilities = null;
            }
            Liability newLiability = new Liability();

            viewModel.Application      = applicationInDb;
            viewModel.Liability        = newLiability;
            viewModel.Customer         = customer;
            ViewData["LiabilityTypes"] = new SelectList(_context.LiabilityTypes, "Id", "Name");

            return(View(viewModel));
        }
        public async Task <IActionResult> EditLiabilities(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }
            ContactCustomerViewModel viewModel = new ContactCustomerViewModel();
            var application = await _context.Applications.FindAsync(id);

            var liabilities = await _context.Liabilities.Where(a => a.ApplicationId == application.Id).ToListAsync();

            if (application == null)
            {
                return(NotFound());
            }
            viewModel.Application             = application;
            viewModel.Application.Liabilities = liabilities;
            return(View(viewModel));
        }
        // GET: Customers
        public async Task <IActionResult> Index()
        {
            ContactCustomerViewModel viewModel = new ContactCustomerViewModel();

            var userId   = this.User.FindFirstValue(ClaimTypes.NameIdentifier);
            var customer = _context.Customers.Where(c => c.IdentityUserId == userId).FirstOrDefault();

            viewModel.Customer = customer;
            if (customer == null)
            {
                return(RedirectToAction(nameof(Create)));
            }
            var application = await _context.Applications_Customers.Where(c => c.CustomerId == customer.Id).Select(d => d.Application).FirstOrDefaultAsync();

            var loanProfiles = await _context.LoanProfiles.Where(c => c.ApplicationId == application.Id).ToListAsync();

            var propertyInDb = await _context.Customers_Properties.Where(p => p.CustomerId == customer.Id).Select(q => q.Property).FirstOrDefaultAsync();

            if (propertyInDb.Rate == 0)
            {
                return(RedirectToAction(nameof(EditCurrentMortgage)));
            }
            var liabilities = await _context.Liabilities.Where(l => l.ApplicationId == application.Id).ToListAsync();

            viewModel.Property     = propertyInDb;
            viewModel.Application  = application;
            viewModel.LoanProfiles = loanProfiles;
            viewModel.Liabilities  = liabilities;

            double liabilityTotal = 0;

            foreach (var item in liabilities)
            {
                liabilityTotal += item.Payment;
            }
            double monthlyExpenses = propertyInDb.MonthlyPayment + propertyInDb.MonthlyHOIPremium + propertyInDb.MonthlyPropertyTax + liabilityTotal;

            propertyInDb.MonthlyExpenses = monthlyExpenses;
            propertyInDb.DebtToIncome    = Math.Round((monthlyExpenses / customer.MonthlyIncome) * 100, 2);
            _context.SaveChanges();

            return(View(viewModel));
        }