. */ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Bill\BillRepositoryInterface; use Log; /** * Class LinkToBill. */ class LinkToBill implements ActionInterface { /** @var RuleAction The rule action */ private $action; /** * TriggerInterface constructor. * * @codeCoverageIgnore * * @param RuleAction $action */ public function __construct(RuleAction $action) { $this->action = $action; } /** * Set bill to be X. * * @param TransactionJournal $journal * * @return bool */ public function act(TransactionJournal $journal): bool { /** @var BillRepositoryInterface $repository */ $repository = app(BillRepositoryInterface::class); $repository->setUser($this->action->rule->user); $billName = (string)$this->action->action_value; $bill = $repository->findByName($billName); if (null !== $bill && $journal->transactionType->type === TransactionType::WITHDRAWAL) { $journal->bill()->associate($bill); $journal->save(); Log::debug(sprintf('RuleAction LinkToBill set the bill of journal #%d to bill #%d ("%s").', $journal->id, $bill->id, $bill->name)); return true; } Log::error(sprintf('RuleAction LinkToBill could not set the bill of journal #%d to bill "%s": no such bill found!', $journal->id, $billName)); return false; } }