. */ declare(strict_types=1); namespace FireflyIII\Handlers\Events; use FireflyIII\Events\UpdatedTransactionJournal; use FireflyIII\Models\Rule; use FireflyIII\Models\RuleGroup; use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface; use FireflyIII\Support\Events\BillScanner; use FireflyIII\TransactionRules\Processor; /** * @codeCoverageIgnore * * Class UpdatedJournalEventHandler */ class UpdatedJournalEventHandler { /** @var RuleGroupRepositoryInterface */ public $repository; /** * StoredJournalEventHandler constructor. * * @param RuleGroupRepositoryInterface $ruleGroupRepository */ public function __construct(RuleGroupRepositoryInterface $ruleGroupRepository) { $this->repository = $ruleGroupRepository; } /** * This method will check all the rules when a journal is updated. * TODO move to factory. * * @param UpdatedTransactionJournal $updatedJournalEvent * * @return bool */ public function processRules(UpdatedTransactionJournal $updatedJournalEvent): bool { // get all the user's rule groups, with the rules, order by 'order'. $journal = $updatedJournalEvent->journal; $groups = $this->repository->getActiveGroups($journal->user); /** @var RuleGroup $group */ foreach ($groups as $group) { $rules = $this->repository->getActiveUpdateRules($group); /** @var Rule $rule */ foreach ($rules as $rule) { $processor = Processor::make($rule); $processor->handleTransactionJournal($journal); if ($rule->stop_processing) { break; } } } return true; } /** * This method calls a special bill scanner that will check if the updated journal is part of a bill. * TODO move to factory. * * @param UpdatedTransactionJournal $updatedJournalEvent * * @return bool */ public function scanBills(UpdatedTransactionJournal $updatedJournalEvent): bool { $journal = $updatedJournalEvent->journal; BillScanner::scan($journal); return true; } }