public HttpResponseMessage CheckIfEligibleToCollectLoan(LoanDetailsDto loanDetailsDto)
        {
            var customerLinkedAccount = _context.CustomerAccounts.Single(c => c.Id == loanDetailsDto.LinkedCustomerAccountId);

            if (customerLinkedAccount.LoanDetailsId != null)
            {
                var linkedLoanDetail = _context.LoanDetails.SingleOrDefault(c => c.Id == customerLinkedAccount.LoanDetailsId);
                if (linkedLoanDetail != null && linkedLoanDetail.LoanAmount != 0)
                {
                    return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Customer yet to pay off previous loan"));
                }
            }
            return(Request.CreateResponse(HttpStatusCode.OK, "Ok"));
        }
        public HttpResponseMessage LoanDisbursement(LoanDetailsDto loanDetailsDto)
        {
            var loanAccountTypeConfig = _context.AccountTypes.Single(c => c.Name.Equals("Loan Account"));
            var interestRate          = loanAccountTypeConfig.DebitInterestRate;
            var capitalAccount        = _context.GlAccounts.SingleOrDefault(c => c.Name.Equals("Capital Account"));

            capitalAccount.AccountBalance = capitalAccount.AccountBalance - loanDetailsDto.LoanAmount; // DEBIT
            loanDetailsDto.CustomerLoan   = loanDetailsDto.LoanAmount;                                 // CREDIT

            // : Add financial entry
            AddToReport("Loan Disbursement", capitalAccount.Name, loanDetailsDto.CustomerLoanAccountName, loanDetailsDto.LoanAmount);

            loanDetailsDto.InterestRate = interestRate;
            var loanDetails = new LoanDetails();

            loanDetails = Mapper.Map <LoanDetailsDto, LoanDetails>(loanDetailsDto);
            _context.LoanDetails.Add(loanDetails);
            _context.SaveChanges();

            var customerAccount       = _context.CustomerAccounts.ToList();
            var linkedCustomerAccount =
                customerAccount.SingleOrDefault(c => c.Id == loanDetailsDto.LinkedCustomerAccountId);

            //var glLoanAccount = _context.GlAccounts.SingleOrDefault(c => c.Name.Equals(CBA.CUSTOMER_LOAN_ACCOUNT));
            if (linkedCustomerAccount != null)
            {
                linkedCustomerAccount.LoanDetailsId = loanDetails.Id;


                linkedCustomerAccount.AccountBalance = linkedCustomerAccount.AccountBalance + loanDetails.LoanAmount; // CREDIT
            }

            // : Financial Report Entry
            AddToReport("Loan Disbursement", loanDetailsDto.CustomerLoanAccountName, linkedCustomerAccount.Name, loanDetails.LoanAmount);

            _context.SaveChanges();
            List <string> message = new List <string>
            {
                "Loan Disbursed Successfully",
                loanDetails.Id.ToString()
            };

            return(Request.CreateResponse(HttpStatusCode.OK, message));
        }