accounts = new Collection(); $this->budgets = new Collection(); $this->categories = new Collection(); $this->tags = new Collection(); $this->transactionGroups = new Collection(); $this->transactionJournals = new Collection(); } public static function collectFromTransactionGroup(TransactionGroup $transactionGroup): self { Log::debug(sprintf('collectFromTransactionGroup(#%d)', $transactionGroup->id)); $object = new self(); $object->transactionGroups->push($transactionGroup); /** @var TransactionJournal $journal */ foreach ($transactionGroup->transactionJournals as $journal) { $object->transactionJournals->push($journal); $object->budgets = $object->tags->merge($journal->budgets); $object->categories = $object->tags->merge($journal->categories); $object->tags = $object->tags->merge($journal->tags); /** @var Transaction $transaction */ foreach ($journal->transactions as $transaction) { $object->accounts->push($transaction->account); } } return $object; } }