. */ declare(strict_types=1); namespace FireflyIII\Handlers\Events; use FireflyIII\Events\StoredTransactionGroup; use FireflyIII\Models\Rule; use FireflyIII\Models\RuleGroup; use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface; use FireflyIII\TransactionRules\Processor; /** * Class StoredGroupEventHandler */ class StoredGroupEventHandler { /** * This method grabs all the users rules and processes them. * * @param StoredTransactionGroup $storedJournalEvent * * @return bool * @throws \FireflyIII\Exceptions\FireflyException */ public function processRules(StoredTransactionGroup $storedJournalEvent): bool { $journals = $storedJournalEvent->transactionGroup->transactionJournals; if(false === $storedJournalEvent->applyRules) { return true; } die('cannot apply rules yet'); // create objects: /** @var RuleGroupRepositoryInterface $ruleGroupRepos */ $ruleGroupRepos = app(RuleGroupRepositoryInterface::class); foreach ($journals as $journal) { $ruleGroupRepos->setUser($journal->user); $groups = $ruleGroupRepos->getActiveGroups(); /** @var RuleGroup $group */ foreach ($groups as $group) { $rules = $ruleGroupRepos->getActiveStoreRules($group); /** @var Rule $rule */ foreach ($rules as $rule) { /** @var Processor $processor */ $processor = app(Processor::class); $processor->make($rule); $processor->handleTransactionJournal($journal); // TODO refactor the stop_processing logic. // TODO verify that rule execution happens in one place only, including the journal + rule loop (if any) if ($rule->stop_processing) { break; } } } } return true; } }