public IHttpActionResult GetSummaryData() { ApplicationUser user = null; UserSummaryDTO summaryDto = null; try { var userId = User.Identity.GetUserId <int>(); Logger.Trace("GetSummaryData requested for [User#{0}]", userId); var summaryRes = invBalanceRepo.GetSummaryData(userId); user = summaryRes.Item2; summaryDto = summaryRes.Item1; if (user == null) { Logger.Error("User not found [User#{0}]", userId); return(OkMsg(new object(), "User not found!")); } } catch (Exception ex) { telemetry.TrackException(ex); Logger.Error(ex, "Exception in GetSummaryData()"); } return(OkMsg(((IInvestmentsApi)this).GetSummaryData(user, summaryDto))); }
/// <summary> /// /// Get the summary user data converted to the user currency. /// /// </summary> /// <param name="user"></param> /// <param name="summaryDto"></param> /// <returns></returns> SummaryDataViewModel IInvestmentsApi.GetSummaryData(ApplicationUser user, UserSummaryDTO summaryDto) { var summaryDvm = new SummaryDataViewModel { InvestmentsBalance = DbExpressions.RoundCustomerBalanceAmount(summaryDto.InvestmentsBalance), TotalInvestments = DbExpressions.RoundCustomerBalanceAmount(summaryDto.TotalInvestments), TotalInvestmentsReturns = DbExpressions.RoundCustomerBalanceAmount(summaryDto.TotalInvestmentsReturns), NextInvestmentOn = DbExpressions.GetNextMonthsFirstWeekday(), LastInvestmentAmount = DbExpressions.RoundCustomerBalanceAmount(summaryDto.LastInvestmentAmount), StatusAsOf = summaryDto.StatusAsOf, LockInDays = summaryDto.LockInDays, EligibleWithdrawDate = summaryDto.EligibleWithdrawDate, OkToWithdraw = summaryDto.OkToWithdraw, Prompt = summaryDto.Prompt, Vintages = summaryDto .Vintages .Select( t => mapper .Map <VintageDto, VintageViewModel>(t)) .ToList(), BegGmBalance = Math.Round(summaryDto.BegGmBalance, 1), EndGmBalance = Math.Round(summaryDto.EndGmBalance, 1), Deposits = Math.Round(summaryDto.Deposits, 1), GmGainLoss = Math.Round(summaryDto.GmGainLoss, 1), Withdrawals = Math.Round(summaryDto.Withdrawals, 1), CashBonus = Math.Round(summaryDto.CashBonus, 1) }; foreach (var vm in summaryDvm.Vintages) { vm.InvestmentAmount = DbExpressions.RoundCustomerBalanceAmount(vm.InvestmentAmount); vm.SellingValue = DbExpressions.RoundCustomerBalanceAmount(vm.SellingValue); } return(summaryDvm); }
/// <summary> /// /// Perform all the Summary SQL Queries in a optimized fashion to fill up the summary DTO object. /// /// </summary> /// <returns></returns> public Tuple <UserSummaryDTO, ApplicationUser> GetSummaryData(int userId) { ApplicationUser userRet = null; UserSummaryDTO summaryDtoRet = null; var invBalanceRes = GetLatestBalanceDto( GetCachedLatestBalance(userId) ); userRet = userRepo.GetCachedUser(userId); var withdrawalEligibility = GetWithdrawEligibilityData(userId); //---------------- Execute SQL Function var vintages = GetCustomerVintages(userId); var lastInvestmentAmount = DbExpressions.RoundCustomerBalanceAmount(gzTransactionRepo.LastInvestmentAmount(userId, DateTime.UtcNow .ToStringYearMonth ())); //-------------- Retrieve previously executed async query results // user if (userRet == null) { _logger.Error("User with id {0} is null in GetSummaryData()", userId); } // Package all the results summaryDtoRet = new UserSummaryDTO() { Vintages = vintages, Currency = CurrencyHelper.GetSymbol(userRet.Currency), // current balance should not include this month's loss amount to be invested InvestmentsBalance = invBalanceRes.Balance - lastInvestmentAmount, // Monthly gaming amounts BegGmBalance = invBalanceRes.BegGmBalance, Deposits = invBalanceRes.Deposits, Withdrawals = invBalanceRes.Withdrawals, GmGainLoss = invBalanceRes.GmGainLoss, EndGmBalance = invBalanceRes.EndGmBalance, CashBonus = invBalanceRes.CashBonus, TotalInvestments = invBalanceRes.TotalCashInvInHold, TotalInvestmentsReturns = invBalanceRes.Balance - invBalanceRes.TotalCashInvInHold, NextInvestmentOn = DbExpressions.GetNextMonthsFirstWeekday(), LastInvestmentAmount = lastInvestmentAmount, //latestBalanceUpdateDatetime StatusAsOf = GetLastUpdatedMidnight(invBalanceRes.UpdatedOnUtc), // Withdrawal eligibility LockInDays = withdrawalEligibility.LockInDays, EligibleWithdrawDate = withdrawalEligibility.EligibleWithdrawDate, OkToWithdraw = withdrawalEligibility.OkToWithdraw, Prompt = withdrawalEligibility.Prompt }; return(Tuple.Create(summaryDtoRet, userRet)); }