/// <inheritdoc /> public override async Task <Response> Handle(Query request, CancellationToken cancellationToken) { if (!await BudgetRepository.IsAccessibleToUser(request.BudgetId)) { throw new NotFoundException("Budget was not found"); } var budgetEntity = await BudgetRepository.GetByIdAsync(request.BudgetId); var categoryReports = budgetEntity.BudgetCategories .Select(x => new BudgetCategoryReport(x, request.DateStart, request.DateEnd)) .ToList(); var reportDto = new MonthlyBudgetReportDto(); reportDto.BudgetCategoryReports = categoryReports.Select(x => new BudgetCategoryMonthlyReportDto() { BudgetCategoryId = x.Category.Id, BudgetCategoryType = x.Category.Type, MonthlyReports = x.MonthByMonth .Data .Select(t => new MonthReportDto() { Month = new Month() { MonthNumber = t.Month, Year = t.Year }, ReportData = new ReportDataDto() { AllocationsSum = t.AllocationsSum, AveragePerDay = t.AveragePerDay, TransactionsSum = t.TransactionsSum } }) }) .ToList(); reportDto.TotalMonthlyReports = reportDto.BudgetCategoryReports .SelectMany(x => x.MonthlyReports) .GroupBy(x => x.Month) .Select(t => new MonthReportDto() { Month = t.Key, ReportData = new ReportDataDto() { AllocationsSum = t.Sum(g => g.ReportData.AllocationsSum), TransactionsSum = t.Sum(g => g.ReportData.TransactionsSum), AveragePerDay = t.Sum(g => g.ReportData.AveragePerDay) } }); return(new Response() { Data = reportDto }); }
/// <inheritdoc /> public override async Task <Response> Handle(Query request, CancellationToken cancellationToken) { if (!await BudgetRepository.IsAccessibleToUser(request.BudgetId)) { throw new NotFoundException("Budget was not found"); } var repositoryResult = await BudgetRepository.GetByIdAsync(request.BudgetId); var dto = Mapper.Map <BudgetDto>(repositoryResult); return(new Response() { Data = dto }); }
/// <inheritdoc /> public override async Task <Response> Handle(Query request, CancellationToken cancellationToken) { if (!await BudgetRepository.IsAccessibleToUser(request.BudgetId)) { throw new NotFoundException("Budget was not found"); } var budgetEntity = await BudgetRepository.GetByIdAsync(request.BudgetId); var categoryReports = budgetEntity.BudgetCategories .Select(x => new BudgetCategoryReport(x, request.DateStart, request.DateEnd)) .ToList(); var reportDto = new PeriodBudgetReportDto(); reportDto.BudgetCategoryReports = categoryReports.Select(x => new BudgetCategoryPeriodReportDto() { BudgetCategoryId = x.Category.Id, BudgetCategoryType = x.Category.Type, ReportData = new ReportDataDto() { BudgetedSum = x.PeriodReport.BudgetAmount, AllocationsSum = x.PeriodReport.AllocationsSum, AveragePerDay = x.PeriodReport.AveragePerDay, TransactionsSum = x.PeriodReport.TransactionsSum } }) .ToList(); reportDto.TotalPeriodReport = new ReportDataDto() { BudgetedSum = reportDto.BudgetCategoryReports.Sum(g => g.ReportData.BudgetedSum), AllocationsSum = reportDto.BudgetCategoryReports.Sum(g => g.ReportData.AllocationsSum), TransactionsSum = reportDto.BudgetCategoryReports.Sum(g => g.ReportData.TransactionsSum), AveragePerDay = reportDto.BudgetCategoryReports.Sum(g => g.ReportData.AveragePerDay) }; return(new Response() { Data = reportDto }); }
/// <inheritdoc /> public override async Task <Response> Handle(Request request, CancellationToken cancellationToken) { var findShareTask = _budgetShareRepository.ListWithFilter(new Domain.Entities.Budget(request.BudgetId), new BudgetShareFilterModel() { UserIdFilter = request.UserId }); if (!await BudgetRepository.IsAccessibleToUser(request.BudgetId)) { throw new NotFoundException("Budget was not found"); } var budgetShares = await findShareTask; if (!budgetShares.Any()) { throw new NotFoundException("Budget share was not found"); } await Task.WhenAll(budgetShares.Select(i => _budgetShareRepository.DeleteAsync(i))); try { await _budgetShareRepository.SaveChangesAsync(cancellationToken); } catch (Exception) { throw new SaveFailureException("budget share", budgetShares); } return(new Response() { Data = new Unit() }); }