using BuddyFinance.Admin.Areas.Admin.Models; using BuddyFinance.Admin.Controllers; using BuddyFinance.Admin.Models; using BuddyFinance.Common.Integration; using BuddyFinance.Integration.Models; using BuddyFinance.Integration.Models.Enums; using BuddyFinance.Integration.Models.LoanRequests; using BuddyFinance.Integration.Models.Loans; using BuddyFinance.Integration.Models.Lookups; using BuddyFinance.Integration.Models.PreLoanRequests; using BuddyFinance.Integration.Models.Transactions; using BuddyFinance.Model; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.Extensions.Configuration; using System; using System.Collections.Generic; using System.Linq; namespace BuddyFinance.Admin.Areas.Admin.Controllers { [Area("Admin")] public class LoansController : BaseController { public LoansController(IConfiguration configuration, BuddyFinanceDbContext dbContext) : base(configuration, dbContext) { masterUrl = $"{Configuration.GetValue("apiRootUrl", "")}loans/"; } private string masterUrl; public IActionResult Index(int? offerId) { var loans = new List(); var helperResponse = offerId == null ? WebApiHelper.Get(masterUrl, "getall", _token) : WebApiHelper.Get(masterUrl, "offerloans?offerId=" + offerId, _token); if (helperResponse.ErrorCode == 0) { var apiResponse = helperResponse.Result; if (apiResponse.ErrorCode == 0) loans = apiResponse.Result; else ViewBag.Message = "Could not get loans"; } else ViewBag.Message = "Could not get loans"; if (offerId != null) ViewData["isOffer"] = true; return View(loans); } public IActionResult Applications() { var requests = new List(); var apiResponse_2 = WebApiHelper.Get(masterUrl, "loanrequestapplications", _token); if (apiResponse_2.ErrorCode == 0) { var response = apiResponse_2.Result; if (response.ErrorCode == 0) { requests = response.Result; } } return View(requests); } public IActionResult Manage(int id) { var loan = new LoanModel(); var helperResponse = WebApiHelper.Get(masterUrl, $"getloan/{id}", SessionManager.Current?.CurrentUser.AccessToken); if (helperResponse.ErrorCode == 0) { var apiResponse = helperResponse.Result; if (apiResponse.ErrorCode == 0) { loan = apiResponse.Result; } else ViewBag.Message = "Could not get loan deatils"; } else ViewBag.Message = "Could not get loan details"; return View(loan); } public IActionResult ManageRequestLoan(string loanRequestId) { var loan = new LoanModel(); var helperResponse = WebApiHelper.Get(masterUrl, $"getRequestLoan?loanRequestId={loanRequestId}", SessionManager.Current?.CurrentUser.AccessToken); if (helperResponse.ErrorCode == 0) { var apiResponse = helperResponse.Result; if (apiResponse.ErrorCode == 0) { loan = apiResponse.Result; } else ViewBag.Message = "Could not get loan deatils"; } else ViewBag.Message = "Could not get loan details"; return View("Manage", loan); } [HttpPost] [ActionName("ApproveLoan")] public IActionResult AcceptConfimerd(int id) { var success = false; var message = ""; var helperresponse = WebApiHelper.Post(masterUrl, $"accept/{id}", null, SessionManager.Current?.CurrentUser.AccessToken); if (helperresponse.ErrorCode == 0) { var apiResponse = helperresponse.Result; if (apiResponse.ErrorCode == 0) success = apiResponse.Result; else message = apiResponse.ErrorMessage; //"Withdrawal request can not be found."; } else message = helperresponse.ErrorMessage; return Json(new { success, message }); } public IActionResult Repayments(int loanId) { var success = false; var message = ""; var helperResponse = WebApiHelper.Get(masterUrl, "getrepayments?loanId=" + loanId, SessionManager.Current?.CurrentUser.AccessToken); if (helperResponse.ErrorCode == 0) { var apiResponse = helperResponse.Result; if (apiResponse.ErrorCode == 0) return PartialView("_Repayments", apiResponse.Result); else message = "Could not get loan repayements" + apiResponse.ErrorMessage; } else message = "Could not get loan repayements" + helperResponse.ErrorMessage; return Json(new { success, message }); } public IActionResult UpdateRepayment(int loanId, int? repaymentId) { LoanRepaymentModel model = new LoanRepaymentModel { LoanId = loanId, PaymentDate = DateTime.Now, LoanrepaymentStatusId = (int)LoanRepaymentStatusEnum.Paid }; var helperResponse = WebApiHelper.Get(masterUrl, "getrepayment?repaymentId=" + repaymentId, SessionManager.Current?.CurrentUser.AccessToken); if (helperResponse.ErrorCode == 0) { var apiResponse = helperResponse.Result; if (apiResponse.ErrorCode == 0) model = apiResponse.Result; else ViewBag.Message = "Could not get loan repayment"; } else ViewBag.Message = "Could not get loan repayment"; PopulateLists(loanId); return PartialView(model); } public void PopulateLists(int loanId = 0) { var message = ""; //var helperResponse = WebApiHelper.Get(masterUrl.Replace("loans", "master"), "loanrepaymentstatuses", SessionManager.Current?.CurrentUser.AccessToken); //if (helperResponse.ErrorCode == 0) //{ // var apiResponse = helperResponse.Result; // if (apiResponse.ErrorCode == 0) // ViewBag.Repaymentstatuses = apiResponse.Result.ConvertAll(m => new SelectListItem // { // Value = m.Id.ToString(), // Text = m.Description // }); // else // message = "Could not get loan repayment status list"; //} //else // message = "Could not get loan repayment status list"; if (loanId != 0) { var helperResponse2 = WebApiHelper.Get>>(masterUrl, "getschedule?loanId=" + loanId, SessionManager.Current?.CurrentUser.AccessToken); if (helperResponse2.ErrorCode == 0) { var apiResponse = helperResponse2.Result; //.Where(m => m.StatusId != (int)LoanScheduleStatusEnum.Completed).ToList() if (apiResponse.ErrorCode == 0) { ViewBag.Schedules = apiResponse.Result.ConvertAll(m => new SelectListItem { Value = m.Id.ToString(), Text = $"{m.Description} (balance - {m.Balance:C2})" }); } else { message = "Could not get loan repayment status list"; } } else message = "Could not get loan repayements" + helperResponse2.ErrorMessage; } } public IActionResult UpdateStatus(int loanId, string currentStatus) { var model = new UpdateLoanStatusViewModel { LoanId = loanId, CurrentStatus = currentStatus }; var helperResponse = WebApiHelper.Get(masterUrl.Replace("loans", "master"), "loanstatuses", SessionManager.Current?.CurrentUser.AccessToken); if (helperResponse.ErrorCode == 0) { var apiResponse = helperResponse.Result; if (apiResponse.ErrorCode == 0) { var statusList = apiResponse.Result.Where(m => !m.Description.Equals(currentStatus)).ToList().ConvertAll(m => new SelectListItem { Value = m.Id.ToString(), Text = m.Description }); if (currentStatus.Equals(LoanStatusEnum.Active.ToString(), StringComparison.OrdinalIgnoreCase)) { statusList = statusList.Where(m => !m.Text.Equals(LoanStatusEnum.Pending.ToString()) && !m.Value.Equals(((int)LoanStatusEnum.Deactive).ToString())).ToList(); } ViewBag.Statuses = statusList; } else { ViewBag.Message = "Could not get loan repayment status list"; } } else ViewBag.Message = "Could not get loan repayment status list"; return PartialView(model); } public IActionResult AllocatePayout(int loanId) { //double loanAmount = 0; var model = new LoanPayoutModel { LoanId = loanId, PayoutDate = DateTime.Now }; //if (loanId != 0) //{ var helperResponse = WebApiHelper.Get(masterUrl, $"getloan/{loanId}", SessionManager.Current?.CurrentUser.AccessToken); if (helperResponse.ErrorCode == 0) { var apiResponse = helperResponse.Result; if (apiResponse.ErrorCode == 0) { if (apiResponse.Result.LoanPayout != null) { model.PayoutDate = apiResponse.Result.LoanPayout.PayoutDate; model.Amount = apiResponse.Result.LoanPayout.Amount; } else { model.Amount = apiResponse.Result.LoanAmount; } } else ViewBag.Message = "Could not get loans"; } else ViewBag.Message = "Could not get loans"; //} return PartialView(model); } public IActionResult Statement(int loanId) { var model = new List(); var apiResponse = WebApiHelper.Get(API_BASE + "transactions/", "loantransactions?loanId=" + loanId, _token); if (apiResponse.ErrorCode == 0) { var result = apiResponse.Result; if (result.ErrorCode == 0) { model = result.Result; return PartialView("_StatementPartialView", model); } else { return Json(new { success = false, message = $"could not load statement. {result.ErrorMessage}" }); } } else { ViewData["Message"] = $"could not load statement. {apiResponse.ErrorMessage}"; return Json(new { success = false, message = $"could not load statement. {apiResponse.ErrorMessage}" }); } } public IActionResult Deactivate(int loanId) { return PartialView(new DeactivateLoanViewModel { LoanId = loanId }); //var success = false; //var message = ""; //var helperresponse = WebApiHelper.Post(masterUrl, $"DeactivateLoan?loanId=" + loanId+" &comment"+comment,SessionManager.Current?.CurrentUser.AccessToken); //if (helperresponse.ErrorCode == 0) //{ // var apiResponse = helperresponse.Result; // if (apiResponse.ErrorCode == 0) // success = apiResponse.Result; // else // message = apiResponse.ErrorMessage; //} //else // message = helperresponse.ErrorMessage; //return Json(new { success, message }); } } }