public async Task <Result> Handle(Query request, CancellationToken cancellationToken) { var hasBudgetCategoriesAccess = await _accessControlService.HasBudgetCategoriesAccessAsync(request.BudgetCategoryIds); if (!hasBudgetCategoriesAccess) { throw new NotFoundException(Localization.For(() => ErrorMessages.BudgetCategoryNotFound)); } var balances = request.BudgetCategoryIds .Select(x => _balanceService.GetTotalCategoryBalance(x)) .Select(x => new BudgetCategoryBalanceDto() { BudgetCategoryId = x.BudgetCategoryId, BudgetLeftToEndOfYear = x.BudgetLeftToEndOfYear, ThisMonthTransactionsTotal = x.ThisMonthTransactionsTotal, TotalCategoryBalance = x.TotalCategoryBalance, ThisYearBudgetedAmount = x.ThisYearBudgetedAmount }) .ToList(); return(new Result() { Data = balances, Total = balances.Count }); }
public async Task <Result> Handle(Query request, CancellationToken cancellationToken) { var spendingBudgetCategoryIds = _accessControlService.GetAccessibleBudgetCategoryIds(request.BudgetId, eBudgetCategoryType.Spending).ToList(); var incomeBudgetCategoryIds = _accessControlService.GetAccessibleBudgetCategoryIds(request.BudgetId, eBudgetCategoryType.Income).ToList(); var savingBudgetCategoryIds = _accessControlService.GetAccessibleBudgetCategoryIds(request.BudgetId, eBudgetCategoryType.Saving).ToList(); var budgetCategoryIds = spendingBudgetCategoryIds.Union(incomeBudgetCategoryIds).Union(savingBudgetCategoryIds); var balances = budgetCategoryIds .Select(x => _balanceService.GetTotalCategoryBalance(x)) .ToList(); var spendingBalances = balances.Where(x => spendingBudgetCategoryIds.Contains(x.BudgetCategoryId)).ToList(); var incomeBalances = balances.Where(x => incomeBudgetCategoryIds.Contains(x.BudgetCategoryId)).ToList(); var savingBalances = balances.Where(x => savingBudgetCategoryIds.Contains(x.BudgetCategoryId)).ToList(); var spendingSummary = new BudgetedAmountSummaryDto { CurrentBudgetedAmount = spendingBalances.Select(x => x.ThisMonthBudgetedAmount).Aggregate((a, b) => a + b), TotalBudgetedAmount = spendingBalances.Select(x => x.TotalBudgetedAmount).Aggregate((a, b) => a + b), ThisYearBudgetedAmount = spendingBalances.Select(x => x.ThisYearBudgetedAmount).Aggregate((a, b) => a + b), }; var incomeSummary = new BudgetedAmountSummaryDto { CurrentBudgetedAmount = incomeBalances.Select(x => x.ThisMonthBudgetedAmount).Aggregate((a, b) => a + b), TotalBudgetedAmount = incomeBalances.Select(x => x.TotalBudgetedAmount).Aggregate((a, b) => a + b), ThisYearBudgetedAmount = incomeBalances.Select(x => x.ThisYearBudgetedAmount).Aggregate((a, b) => a + b), }; var savingSummary = new BudgetedAmountSummaryDto { CurrentBudgetedAmount = savingBalances.Select(x => x.ThisMonthBudgetedAmount).Aggregate((a, b) => a + b), TotalBudgetedAmount = savingBalances.Select(x => x.TotalBudgetedAmount).Aggregate((a, b) => a + b), ThisYearBudgetedAmount = savingBalances.Select(x => x.ThisYearBudgetedAmount).Aggregate((a, b) => a + b), }; var totalSummary = new BudgetedAmountSummaryDto { CurrentBudgetedAmount = incomeSummary.CurrentBudgetedAmount - spendingSummary.CurrentBudgetedAmount - savingSummary.CurrentBudgetedAmount, TotalBudgetedAmount = incomeSummary.TotalBudgetedAmount - spendingSummary.TotalBudgetedAmount - savingSummary.TotalBudgetedAmount, ThisYearBudgetedAmount = incomeSummary.ThisYearBudgetedAmount - spendingSummary.ThisYearBudgetedAmount - savingSummary.ThisYearBudgetedAmount, }; return(new Result() { Data = new SummaryDto() { SpendingSummary = spendingSummary, IncomeSummary = incomeSummary, SavingSummary = savingSummary, TotalSummary = totalSummary } }); }