public async Task RecalculateBalance(IEnumerable <BudgetCategory> budgetCategories, int year, int month, CancellationToken cancellationToken) { foreach (var budgetCategory in budgetCategories) { await _balanceService.CalculateBudgetCategoryBalance(budgetCategory.BudgetCategoryId, year, month, cancellationToken); } foreach (var budgetId in budgetCategories.Select(x => x.BudgetId).Distinct()) { await _balanceService.CalculateBudgetBalance(budgetId, cancellationToken); await _mediator.Publish(new BudgetBalanceChanged() { BudgetId = budgetId }, cancellationToken); } }
/// <inheritdoc /> public async Task Handle(Notification notification, CancellationToken cancellationToken) { var category = _readDb.BudgetCategories.FirstOrDefault(x => x.BudgetCategoryId == notification.ReferenceTransaction.BudgetCategoryId); if (category == null) { return; } var dates = new List <DateTime>() { notification.ReferenceTransaction.TransactionDate }; if (notification.ReferenceTransaction.SubTransactions != null && notification.ReferenceTransaction.SubTransactions.Any()) { dates.AddRange(notification.ReferenceTransaction.SubTransactions.Select(x => x.TransactionDate)); } foreach (var dateTime in dates.Select(x => x.StartOfMonth()).Distinct()) { await _balanceService.CalculateBudgetCategoryBalance(category.BudgetCategoryId, dateTime.Year, dateTime.Month, cancellationToken); } await _mediator.Publish(new BudgetCategoryBalanceChanged.Notification() { BudgetCategoryId = notification.ReferenceTransaction.BudgetCategoryId }, cancellationToken); await _balanceService.CalculateBudgetBalance(category.BudgetId, cancellationToken); await _mediator.Publish(new BudgetBalanceChanged() { BudgetId = category.BudgetId }, cancellationToken); }
/// <inheritdoc /> public async Task Handle(Notification notification, CancellationToken cancellationToken) { foreach (var budgetCategory in notification.BudgetCategories) { await _balanceService.CalculateBudgetCategoryBalance(budgetCategory.BudgetCategoryId, cancellationToken); await _mediator.Publish(new BudgetCategoryBalanceChanged.Notification() { BudgetCategoryId = budgetCategory.BudgetCategoryId }, cancellationToken); } foreach (var budgetId in notification.BudgetCategories.Select(x => x.BudgetId).Distinct()) { await _balanceService.CalculateBudgetBalance(budgetId, cancellationToken); await _mediator.Publish(new BudgetBalanceChanged() { BudgetId = budgetId }, cancellationToken); } }