示例#1
0
        public bool Post(Transaction transaction)
        {
            var relatedAccounts = transaction
                .RelatedAccounts()
                .Distinct()
                .ToArray();

            foreach (var account in relatedAccounts)
            {
                var budgets = GetBudgetsForAccount(account.Id).ToArray();
                if (budgets.Length == 0)
                    continue;

                ProcessBudgetPayout(transaction, account, budgets);
            }

            if (transaction.Check())
            {
                transaction.Id = TransactionId.From(transaction);
                if (_repository.Post(transaction))
                {
                    foreach (var debitAmount in transaction.Debit)
                        debitAmount.Post();

                    foreach (var creditAmount in transaction.Credit)
                        creditAmount.Post();
                }

                return true;
            }

            return false;
        }