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);
                }
            }
예제 #2
0
            /// <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);
            }
예제 #3
0
            /// <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);
                }
            }