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.Profiles; using BuddyFinance.Integration.Models.ReportingServices; using BuddyFinance.Integration.Models.Statements; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Newtonsoft.Json; using System.Collections.Generic; using System.Linq; namespace BuddyFinance.Admin.Controllers { public class BorrowerController : BaseController { /* * Everything a borrower can do */ public BorrowerController(IConfiguration configuration, BuddyFinanceDbContext dbContext) : base(configuration, dbContext) { // API_BASE = Configuration.GetValue("apiRootUrl", ""); } public IActionResult Dashboard() { var currentUser = SessionManager.Current?.CurrentUser ?? null; if (currentUser == null) return RedirectToAction("index", "home"); if (currentUser.ProfileStatus.Id != (int)ProfileStatusEnum.Approved) return RedirectToAction("Details", "Profile"); return View(); } [HttpGet] [Route("/api/borrower/getcurrent")] public IActionResult GetCurrent() { var profileId = SessionManager.Current.CurrentUser?.ProfileId; var result = new BaseResult { ErrorCode = (int)ResponseCodes.Success, ErrorMessage = "Success", Result = profileId.GetValueOrDefault() }; return Json(result, pascalCaseJsonSettings); } [HttpGet("/api/profileEarningBrackets")] public IActionResult GetEarnings() { var currentProfileId = SessionManager.Current?.CurrentUser.ProfileId; var token = SessionManager.Current?.CurrentUser.AccessToken; var apiResponse = WebApiHelper.Get(API_BASE, $"profiles/getProfileEarning?profileId={currentProfileId}", token); if (apiResponse.ErrorCode == 0) { return Json(apiResponse.Result, new JsonSerializerSettings { ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver() }); //CamelCasePropertyNamesContractResolver}); } else { return Json(new GetProfileResult { ErrorCode = (int)apiResponse.ErrorCode, ErrorMessage = apiResponse.ErrorMessage }, new JsonSerializerSettings { ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver() }); } } [HttpPost] [Route("/api/borrower/statement")] public IActionResult Statement(GetStatement model) { int.TryParse(SessionManager.Current?.CurrentUser.ProfileId.ToString(), out int pId); model.ProfileId = pId; byte[] statement = null; var apiResonse = WebApiHelper.Post(API_BASE + "reporting/", "statement", model, _token); if (apiResonse.ErrorCode == 0) { var result = apiResonse.Result; if (result.ErrorCode == 0) { statement = result.Result; } } return File(statement, "application/pdf", "BuddyFianceStatement"); } [HttpGet("/api/borrower/getchartdata")] public IActionResult ChartData() { bool success = false; var message = ""; var profileId = SessionManager.Current?.CurrentUser._ProfileId; var requests = new List(); var loans = new List(); var apiResponse = WebApiHelper.Get(API_BASE, "profiles/summary?profileId=" + profileId, _token); //var apiResponse = WebApiHelper.Get(API_BASE, "Loans/GetRequests?profileId=" + profileId, _token); //var apiResponseLoans = WebApiHelper.Get(API_BASE, "Loans/GetLoans?ProfileId=" + profileId, _token); //if (apiResponseLoans.ErrorCode == 0) //{ // var Loanresult = apiResponseLoans.Result; // if (Loanresult.ErrorCode == 0) // { // loans = Loanresult.Result; // success = true; // } // else // { // message = $"could not load loans.{Loanresult.ErrorMessage}"; // } //} //else //{ // message = $"could not load loans.{apiResponseLoans.ErrorMessage}"; //} if (apiResponse.ErrorCode == 0) { var result = apiResponse.Result; if (result.ErrorCode == 0) { requests = result.Result.LoanRequests; loans = result.Result.Loans; success = true; } else { message = $"could not load requests.{result.ErrorMessage}"; } } else { message = $"could not load requests.{apiResponse.ErrorMessage}"; } var groupedRequests = requests.GroupBy(m => m.Status.Id); var groupedLoan = loans.GroupBy(m => m.Status.Id); var LoanRequests = groupedRequests.Select(m => new { y = GetLoanRequestStatus(m.Key), a = m.Count() }).ToList(); var Loans = groupedLoan.Select(m => new { y = GetLoanStatus(m.Key), a = m.Count() }).ToList(); return Json(new { success, message, Loans, LoanRequests }); } public static string GetLoanRequestStatus(int statusId) { switch (statusId) { case (int)LoanRequestStatusEnum.New: return "New"; case (int)LoanRequestStatusEnum.Approved: return "Approved"; case (int)LoanRequestStatusEnum.PreApproved: return "Pre Approved"; case (int)LoanRequestStatusEnum.Rejected: return "Rejected"; case (int)LoanRequestStatusEnum.Expired: return "Expired"; default: return ""; } } public static string GetLoanStatus(int statusId) { switch (statusId) { case (int)LoanStatusEnum.Active: return "Active"; case (int)LoanStatusEnum.PaidUp: return "Paid Up"; case (int)LoanStatusEnum.Pending: return "pending"; default: return ""; } } } }