. */ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; use FireflyIII\Factory\CategoryFactory; use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; use FireflyIII\User; use Log; use DB; /** * Class SetCategory. */ class SetCategory implements ActionInterface { private RuleAction $action; /** * TriggerInterface constructor. * * @param RuleAction $action */ public function __construct(RuleAction $action) { $this->action = $action; } /** * Set category X * * @param TransactionJournal $journal * @deprecated * @codeCoverageIgnore * @return bool */ public function act(TransactionJournal $journal): bool { $name = $this->action->action_value; /** @var CategoryFactory $factory */ $factory = app(CategoryFactory::class); $factory->setUser($journal->user); $category = $factory->findOrCreate(null, $name); if (null === $category) { Log::error(sprintf('Action SetCategory did not fire because "%s" did not result in a valid category.', $name)); return false; } $journal->categories()->sync([$category->id]); Log::debug(sprintf('RuleAction SetCategory set the category of journal #%d to category #%d ("%s").', $journal->id, $category->id, $category->name)); return true; } /** * @inheritDoc */ public function actOnArray(array $journal): bool { $user = User::find($journal['user_id']); $search = $this->action->action_value; $category = $user->categories()->where('name', $search)->first(); if (null === $category) { Log::debug(sprintf('RuleAction SetCategory could not set category of journal #%d to "%s" because no such category exists.', $journal['transaction_journal_id'], $search)); return false; } Log::debug(sprintf('RuleAction SetCategory set the category of journal #%d to category #%d ("%s").', $journal['transaction_journal_id'], $category->id, $category->name)); DB::table('category_transaction_journal')->where('transaction_journal_id', '=', $journal['transaction_journal_id'])->delete(); DB::table('category_transaction_journal')->insert(['transaction_journal_id' => $journal['transaction_journal_id'], 'category_id' => $category->id]); return true; } }