. */ declare(strict_types=1); namespace FireflyIII\Handlers\Events; use FireflyIII\Events\StoredTransactionGroup; use FireflyIII\Models\TransactionJournal; use FireflyIII\Repositories\Rule\RuleRepositoryInterface; use FireflyIII\TransactionRules\Engine\RuleEngine; use FireflyIII\TransactionRules\Engine\RuleEngineInterface; use Log; /** * Class StoredGroupEventHandler */ class StoredGroupEventHandler { /** * This method grabs all the users rules and processes them. * * @param StoredTransactionGroup $storedGroupEvent */ public function processRules(StoredTransactionGroup $storedGroupEvent): void { if (false === $storedGroupEvent->applyRules) { Log::info(sprintf('Will not run rules on group #%d', $storedGroupEvent->transactionGroup->id)); return; } Log::debug('Now in StoredGroupEventHandler::processRules()'); $journals = $storedGroupEvent->transactionGroup->transactionJournals; $array = []; /** @var TransactionJournal $journal */ foreach ($journals as $journal) { $array[] = $journal->id; } $journalIds = implode(',', $array); Log::debug(sprintf('Add local operator for journal(s): %s', $journalIds)); // collect rules: $ruleRepository = app(RuleRepositoryInterface::class); $ruleRepository->setUser($storedGroupEvent->transactionGroup->user); $rules = $ruleRepository->getStoreRules(); // file rule engine. $newRuleEngine = app(RuleEngineInterface::class); $newRuleEngine->setUser($storedGroupEvent->transactionGroup->user); $newRuleEngine->addOperator(['type' => 'journal_id', 'value' => $journalIds]); $newRuleEngine->setRules($rules); $newRuleEngine->fire(); } }