. */ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Models\Note; use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; /** * Class PrependNotes. * TODO Can be replaced (and migrated) to action "set notes" with a prefilled expression */ class PrependNotes implements ActionInterface { private RuleAction $action; /** * TriggerInterface constructor. */ public function __construct(RuleAction $action) { $this->action = $action; } public function actOnArray(array $journal): bool { $dbNote = Note::where('noteable_id', (int)$journal['transaction_journal_id']) ->where('noteable_type', TransactionJournal::class) ->first(['notes.*']) ; if (null === $dbNote) { $dbNote = new Note(); $dbNote->noteable_id = (int)$journal['transaction_journal_id']; $dbNote->noteable_type = TransactionJournal::class; $dbNote->text = ''; } $before = $dbNote->text; $after = $this->action->getValue($journal); app('log')->debug(sprintf('RuleAction PrependNotes prepended "%s" to "%s".', $after, $dbNote->text)); $text = sprintf('%s%s', $after, $dbNote->text); $dbNote->text = $text; $dbNote->save(); // journal /** @var TransactionJournal $object */ $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); // audit log event(new TriggeredAuditLog($this->action->rule, $object, 'update_notes', $before, $text)); return true; } }