. */ declare(strict_types=1); namespace FireflyIII\Factory; use FireflyIII\Exceptions\DuplicateTransactionException; use FireflyIII\Models\TransactionGroup; use FireflyIII\User; use Log; /** * Class TransactionGroupFactory * * @codeCoverageIgnore */ class TransactionGroupFactory { /** @var TransactionJournalFactory */ private $journalFactory; /** @var User The user */ private $user; /** * TransactionGroupFactory constructor. */ public function __construct() { $this->journalFactory = app(TransactionJournalFactory::class); } /** * Store a new transaction journal. * * @param array $data * * @throws DuplicateTransactionException * @return TransactionGroup */ public function create(array $data): TransactionGroup { $this->journalFactory->setUser($this->user); $this->journalFactory->setErrorOnHash($data['error_if_duplicate_hash'] ?? false); try { $collection = $this->journalFactory->create($data); } catch (DuplicateTransactionException $e) { Log::warning('GroupFactory::create() caught journalFactory::create() with a duplicate!'); throw new DuplicateTransactionException($e->getMessage()); } $title = $data['group_title'] ?? null; $title = '' === $title ? null : $title; if (null !== $title) { $title = substr($title, 0, 1000); } $group = new TransactionGroup; $group->user()->associate($this->user); $group->title = $title; $group->save(); $group->transactionJournals()->saveMany($collection); return $group; } /** * Set the user. * * @param User $user */ public function setUser(User $user): void { $this->user = $user; } }