using BuddyFinance.Admin.Models; using BuddyFinance.Common.Integration; using BuddyFinance.Integration.Models; using BuddyFinance.Integration.Models.Enums; using BuddyFinance.Integration.Models.LoanOffers; using BuddyFinance.Integration.Models.LoanRequests; using BuddyFinance.Integration.Models.Profiles; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using System.Collections.Generic; using System.Linq; namespace BuddyFinance.Admin.Controllers { public class LenderController : BaseController { public LenderController(IConfiguration configuration, BuddyFinanceDbContext dbContext) : base(configuration, dbContext) { } public IActionResult Dashboard() { var currentUser = SessionManager.Current?.CurrentUser ?? null; if (currentUser == null) return RedirectToAction("index", "home"); if (SessionManager.Current?.CurrentUser.ProfileStatus.Id != (int)ProfileStatusEnum.Approved) return RedirectToAction("Details", "Profile"); return View(); } [HttpGet] [Route("/api/lender/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] [Route("/api/lender/loanofferbymonth")] public IActionResult Offers() { var profileId = SessionManager.Current?.CurrentUser.ProfileId; var _token = SessionManager.Current?.CurrentUser.AccessToken; var offers = new List(); var request = new List(); var apiResponse = WebApiHelper.Get(API_BASE, "LoanOffers/GetLoanOffers?profileId=" + profileId, _token); // var apiRequestResponse = WebApiHelper.Get(API_BASE, "Loans/GetLoansOffersResults?profileId=" + profileId, _token); if (apiResponse.ErrorCode == 0) { var result = apiResponse.Result; // var resultRequest = apiResponse.Result; if (result.ErrorCode == 0 && result.ErrorCode == 0) { offers = result.Result; // request = result.Result; } else { ViewData["Message"] = $"could not load offer.{apiResponse.ErrorMessage}"; // ViewData["Message"] = $"could not load resquest.{apiRequestResponse.ErrorMessage}"; } } else { ViewData["Message"] = $"could not load offers.{apiResponse.ErrorMessage}"; // ViewData["Message"] = $"could not load requests.{apiRequestResponse.ErrorMessage}"; } var grouped = offers.GroupBy(m => m.DateCreated.Month).ToList(); var loanOfferRequests = offers.SelectMany(n => n.LoanRequestOffers).ToList(); var loanOfferRequestsGr = loanOfferRequests.GroupBy(m => m.RequestDate.Month).ToList(); //var requestGrouped = request.GroupBy(m => m.DateCreated.Month).ToList(); var offers_ = grouped.Select(m => new { y = GetMonthName(m.Key), a = m.Sum(n => n.Amount), b = !loanOfferRequestsGr.Any(n => n.Key == m.Key) ? 1 : loanOfferRequestsGr.Where(n => n.Key == m.Key).ToList().Sum(g => g.Sum(c => c.Amount)) //m.Sum(n => n.LoanRequestOffers.Where(p => p.LoanOfferId == t => t.loanRequest.Id)); }).ToList(); return Json(new { success = 0, offers = offers_ //request =grouped.Select(m=>new //{ // y = GetMonthName.Select (t.Key), // b = m.Sum(n => n.LoanRequestOffers) //}) }); } [HttpGet] [Route("/api/lender/dashboarddata")] public IActionResult Dashboarddata() { var profileId = SessionManager.Current?.CurrentUser._ProfileId; var _token = SessionManager.Current?.CurrentUser.AccessToken; var apiResponse = WebApiHelper.Get(API_BASE, "profiles/summary?profileId=" + profileId, _token); if (apiResponse.ErrorCode == 0) { var result = apiResponse.Result; if (result.ErrorCode == 0 && result.ErrorCode == 0) { var offers = result.Result.LoanOffers;; var loanOfferRequests = result.Result.LoanOffers.SelectMany(n => n.LoanRequestOffers).ToList(); var loanoffersGr = offers.GroupBy(m => m.DateCreated.Month).ToList(); var loanOfferRequestsGr = loanOfferRequests.GroupBy(m => m.RequestDate.Month).ToList(); var offers_ = loanoffersGr.Select(m => new { y = GetMonthName(m.Key), a = m.Sum(n => n.Amount), b = !loanOfferRequestsGr.Any(n => n.Key == m.Key) ? 1 : loanOfferRequestsGr.Where(n => n.Key == m.Key).ToList().Sum(g => g.Sum(c => c.Amount)) //m.Sum(n => n.LoanRequestOffers.Where(p => p.LoanOfferId == t => t.loanRequest.Id)); }).ToList(); return Json(new { success = true, availablefunds = result.Result.AvailableFunds, cashdeposit = result.Result.TotalCashDeposit, cashWithdrawal = result.Result.TotalCashWithdrawal, totaloffersamount = offers.Sum(m => m.Amount), offers = offers_ }, pascalCaseJsonSettings); } else { return Json(new { success = false, result.ErrorMessage }, pascalCaseJsonSettings); } } else { //ViewData["Message"] = $"could not load offers.{apiResponse.ErrorMessage}"; return Json(new { success = false, apiResponse.ErrorMessage }, pascalCaseJsonSettings); } } } } //get all funds that will be display on lender dashboard //[HttpGet] //public IActionResult dashboardFunds() //{ // var profileId = SessionManager.Current?.CurrentUser.ProfileId; // var _token = SessionManager.Current?.CurrentUser.AccessToken; // var apiResponse = WebApiHelper.Get(API_BASE, "LoanOffers/GetLoanOffers?profileId=" + profileId, _token); // var offers = new List(); // var result = apiResponse.Result; // if (apiResponse.ErrorCode == 0) // { // offers = result.Result; // var totaloffers = offers.Sum(m => m.Amount); // var totalamount = totaloffers + // } // else // { // ViewData["Message"] = $"could not load offers.{apiResponse.ErrorMessage}"; // apiResponse.ErrorCode = (int)ResponseCodes.NotFound; // } // var loangrouped = offers.GroupBy(m => m.LenderId).ToList(); // select all where loan offer are not deleted // return dashboardFunds; //};