public HttpResponseMessage DeclineLoan(ApiModels.TrnLoanModel objLoanModel, String id)
        {
            try
            {
                var currentUser = from d in db.MstUsers
                                  where d.AspNetUserId == User.Identity.GetUserId()
                                  select d;

                var loan = from d in db.TrnLoans
                           where d.Id == Convert.ToInt32(id)
                           select d;

                if (loan.Any())
                {
                    if (loan.FirstOrDefault().IsSubmitted == false)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "Cannot decline unsubmitted loan application."));
                    }

                    if (loan.FirstOrDefault().IsCancelled == true)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "Cannot decline cancelled loan application."));
                    }

                    if (loan.FirstOrDefault().IsApproved == true)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "Cannot decline approved loan application."));
                    }

                    if (loan.FirstOrDefault().IsDeclined == true)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "This loan application was already declcined."));
                    }

                    if (loan.FirstOrDefault().IsClosed == true)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "This transaction is closed."));
                    }

                    var declineLoan = loan.FirstOrDefault();
                    declineLoan.Status          = "Declined";
                    declineLoan.Remarks         = "Sorry but your loan application has been declined.";
                    declineLoan.IsDeclined      = true;
                    declineLoan.IsLocked        = true;
                    declineLoan.UpdatedByUserId = currentUser.FirstOrDefault().Id;
                    declineLoan.UpdatedDateTime = DateTime.Now;
                    db.SubmitChanges();

                    return(Request.CreateResponse(HttpStatusCode.OK));
                }
                else
                {
                    return(Request.CreateResponse(HttpStatusCode.NotFound, "Loan transaction not found."));
                }
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }
Example #2
0
        public HttpResponseMessage CancelLoan(String id, ApiModels.TrnLoanModel objLoanModel)
        {
            try
            {
                var currentUser = from d in db.MstUsers
                                  where d.AspNetUserId == User.Identity.GetUserId()
                                  select d;

                var loan = from d in db.TrnLoans
                           where d.Id == Convert.ToInt32(id)
                           select d;

                if (loan.Any())
                {
                    if (loan.FirstOrDefault().IsSubmitted == false)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "You cannot cancel unsubmitted loan application."));
                    }

                    if (loan.FirstOrDefault().IsCancelled == true)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "Your loan application was already cancelled."));
                    }

                    if (loan.FirstOrDefault().IsDeclined == true)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "You cannot cancel declined loan application."));
                    }

                    if (loan.FirstOrDefault().IsClosed == true)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "This transaction is closed."));
                    }

                    var cancelLoan = loan.FirstOrDefault();
                    cancelLoan.IsCancelled = true;
                    cancelLoan.IsClosed    = true;
                    cancelLoan.Status      = "Cancelled";
                    cancelLoan.Remarks     = "Your loan application has been cancelled.";
                    db.SubmitChanges();

                    return(Request.CreateResponse(HttpStatusCode.OK));
                }
                else
                {
                    return(Request.CreateResponse(HttpStatusCode.NotFound, "Loan transaction not found."));
                }
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }
        public HttpResponseMessage CloseLoanTransaction(ApiModels.TrnLoanModel objLoanModel, String id)
        {
            try
            {
                var currentUser = from d in db.MstUsers
                                  where d.AspNetUserId == User.Identity.GetUserId()
                                  select d;

                var loan = from d in db.TrnLoans
                           where d.Id == Convert.ToInt32(id)
                           select d;

                if (loan.Any())
                {
                    if (loan.FirstOrDefault().IsSubmitted == false)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "Cannot close unsubmitted loan application."));
                    }

                    if (loan.FirstOrDefault().IsCancelled == true)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "Cannot close cancelled loan application."));
                    }

                    if (loan.FirstOrDefault().IsClosed == true)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "This transaction is already closed."));
                    }

                    var closeLoanTransaction = loan.FirstOrDefault();
                    closeLoanTransaction.Status          = "Closed";
                    closeLoanTransaction.Remarks         = "Sorry. Your transaction has been closed due to some reasons: \n\n" + objLoanModel.Remarks;
                    closeLoanTransaction.IsClosed        = true;
                    closeLoanTransaction.UpdatedByUserId = currentUser.FirstOrDefault().Id;
                    closeLoanTransaction.UpdatedDateTime = DateTime.Now;
                    db.SubmitChanges();

                    return(Request.CreateResponse(HttpStatusCode.OK));
                }
                else
                {
                    return(Request.CreateResponse(HttpStatusCode.NotFound, "Loan transaction not found."));
                }
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }
Example #4
0
        public HttpResponseMessage SubmitLoan(String id, ApiModels.TrnLoanModel objLoanModel)
        {
            try
            {
                var currentUser = from d in db.MstUsers
                                  where d.AspNetUserId == User.Identity.GetUserId()
                                  select d;

                var loan = from d in db.TrnLoans
                           where d.Id == Convert.ToInt32(id)
                           select d;

                if (loan.Any())
                {
                    if (loan.FirstOrDefault().IsSubmitted == true)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "Your loan application was already submitted. Please wait for an approval."));
                    }

                    var submitLoan = loan.FirstOrDefault();
                    submitLoan.IsSubmitted = true;
                    submitLoan.Status      = "Submitted";
                    submitLoan.Remarks     = "Your loan application has been successfully submitted for an approval. You will receive a text or an email once your loan application has been approved.";
                    submitLoan.IsLocked    = true;
                    db.SubmitChanges();

                    return(Request.CreateResponse(HttpStatusCode.OK));
                }
                else
                {
                    return(Request.CreateResponse(HttpStatusCode.NotFound, "Loan transaction not found."));
                }
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }
        public HttpResponseMessage UpdateLoan(String id, ApiModels.TrnLoanModel objLoanModel)
        {
            try
            {
                var currentUser = from d in db.MstUsers
                                  where d.AspNetUserId == User.Identity.GetUserId()
                                  select d;

                var term = from d in db.MstTerms
                           where d.Id == objLoanModel.TermId
                           select d;

                if (term.Any() == false)
                {
                    return(Request.CreateResponse(HttpStatusCode.NotFound, "Term not found."));
                }

                if (objLoanModel.PrincipalAmount > term.FirstOrDefault().LimitAmount)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, "Sorry, the customer cannot loan when the principal amount exceeds at " + term.FirstOrDefault().LimitAmount.ToString("#,##0.00")));
                }

                Decimal principalAmount    = objLoanModel.PrincipalAmount;
                Decimal interestAmount     = principalAmount * (term.FirstOrDefault().MstInterest.Percentage / 100);
                Decimal loanAmount         = principalAmount + interestAmount;
                Decimal netAmount          = principalAmount - interestAmount;
                Decimal balanceAmount      = principalAmount;
                Decimal amortizationAmount = term.FirstOrDefault().NumberOfMonths > 0 ? principalAmount / term.FirstOrDefault().NumberOfMonths : principalAmount;

                var loan = from d in db.TrnLoans
                           where d.Id == Convert.ToInt32(id)
                           select d;

                if (loan.Any())
                {
                    if (loan.FirstOrDefault().IsCancelled == true)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "Cannot change cancelled loan application."));
                    }

                    if (loan.FirstOrDefault().IsApproved == true)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "Cannot change approved loan application."));
                    }

                    if (loan.FirstOrDefault().IsDeclined == true)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "Cannot change declined loan application."));
                    }

                    if (loan.FirstOrDefault().IsClosed == true)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "This transaction is closed."));
                    }

                    if (loan.FirstOrDefault().IsLocked == true)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "This transaction is locked."));
                    }

                    var submitLoan = loan.FirstOrDefault();
                    submitLoan.TermId             = term.FirstOrDefault().Id;
                    submitLoan.TermNumberOfMonths = term.FirstOrDefault().NumberOfMonths;
                    submitLoan.PrincipalAmount    = principalAmount;
                    submitLoan.InterestId         = term.FirstOrDefault().DefaultInterestId;
                    submitLoan.InterestPercentage = term.FirstOrDefault().MstInterest.Percentage;
                    submitLoan.InterestAmount     = interestAmount;
                    submitLoan.LoanAmount         = loanAmount;
                    submitLoan.NetAmount          = netAmount;
                    submitLoan.AmortizationAmount = amortizationAmount;
                    submitLoan.BalanceAmount      = balanceAmount;
                    submitLoan.UpdatedByUserId    = currentUser.FirstOrDefault().Id;
                    submitLoan.UpdatedDateTime    = DateTime.Now;
                    db.SubmitChanges();

                    return(Request.CreateResponse(HttpStatusCode.OK));
                }
                else
                {
                    return(Request.CreateResponse(HttpStatusCode.NotFound, "Loan transaction not found."));
                }
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }
        public HttpResponseMessage CreateLoan(ApiModels.TrnLoanModel objLoanModel)
        {
            try
            {
                var currentUser = from d in db.MstUsers
                                  where d.AspNetUserId == User.Identity.GetUserId()
                                  select d;

                var loanNumber = "0000000001";
                var lastLoan   = from d in db.TrnLoans.OrderByDescending(d => d.Id)
                                 select d;

                if (lastLoan.Any())
                {
                    var lastLoanNumber = Convert.ToInt32(lastLoan.FirstOrDefault().LoanNumber) + 0000000001;
                    loanNumber = LeadingZeroes(lastLoanNumber, 10);
                }

                var customer = from d in db.MstCustomers
                               where d.Id == objLoanModel.CustomerId
                               select d;

                if (customer.Any() == false)
                {
                    return(Request.CreateResponse(HttpStatusCode.NotFound, "Customer not found."));
                }

                var term = from d in db.MstTerms
                           where d.Id == objLoanModel.TermId
                           select d;

                if (term.Any() == false)
                {
                    return(Request.CreateResponse(HttpStatusCode.NotFound, "Term not found."));
                }

                if (objLoanModel.PrincipalAmount > term.FirstOrDefault().LimitAmount)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, "Sorry, the customer cannot loan if the principal amount exceeds at " + term.FirstOrDefault().LimitAmount.ToString("#,##0.00")));
                }

                var getLastLoan = from d in db.TrnLoans.OrderByDescending(d => d.Id)
                                  where d.CustomerId == customer.FirstOrDefault().Id &&
                                  d.BalanceAmount > 0 &&
                                  d.IsClosed == false
                                  select d;

                if (getLastLoan.Any())
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, "Cannot proceed if the customer has an open or pending previous transaction."));
                }

                Decimal principalAmount    = objLoanModel.PrincipalAmount;
                Decimal interestAmount     = principalAmount * (term.FirstOrDefault().MstInterest.Percentage / 100);
                Decimal loanAmount         = principalAmount + interestAmount;
                Decimal netAmount          = principalAmount - interestAmount;
                Decimal balanceAmount      = principalAmount;
                Decimal amortizationAmount = term.FirstOrDefault().NumberOfMonths > 0 ? principalAmount / term.FirstOrDefault().NumberOfMonths : principalAmount;

                Data.TrnLoan newLoan = new Data.TrnLoan()
                {
                    LoanNumber         = loanNumber,
                    LoanDate           = DateTime.Today,
                    ManualLoanNumber   = loanNumber,
                    CustomerId         = customer.FirstOrDefault().Id,
                    TermId             = term.FirstOrDefault().Id,
                    TermNumberOfMonths = term.FirstOrDefault().NumberOfMonths,
                    PrincipalAmount    = principalAmount,
                    InterestId         = term.FirstOrDefault().DefaultInterestId,
                    InterestPercentage = term.FirstOrDefault().MstInterest.Percentage,
                    InterestAmount     = interestAmount,
                    LoanAmount         = loanAmount,
                    NetAmount          = netAmount,
                    AmortizationAmount = amortizationAmount,
                    PaidAmount         = 0,
                    PenaltyAmount      = 0,
                    BalanceAmount      = balanceAmount,
                    Remarks            = "NA",
                    Status             = "Open",
                    IsSubmitted        = true,
                    IsCancelled        = false,
                    IsApproved         = false,
                    IsDeclined         = false,
                    IsClosed           = false,
                    IsLocked           = false,
                    CreatedByUserId    = currentUser.FirstOrDefault().Id,
                    CreatedDateTime    = DateTime.Now,
                    UpdatedByUserId    = currentUser.FirstOrDefault().Id,
                    UpdatedDateTime    = DateTime.Now
                };

                db.TrnLoans.InsertOnSubmit(newLoan);
                db.SubmitChanges();

                return(Request.CreateResponse(HttpStatusCode.OK, newLoan.Id.ToString()));
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }