mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
make sure rules fire for events.
This commit is contained in:
parent
47c2d0eaf1
commit
b2628a290b
@ -150,6 +150,9 @@ class ApplyRules extends Command
|
||||
$ruleEngine->setUser($this->getUser());
|
||||
$ruleEngine->setRulesToApply($rulesToApply);
|
||||
|
||||
// for this call, the rule engine only includes "store" rules:
|
||||
$ruleEngine->setTriggerMode(RuleEngine::TRIGGER_STORE);
|
||||
|
||||
$bar = $this->output->createProgressBar(count($journals));
|
||||
Log::debug(sprintf('Now looping %d transactions.', count($journals)));
|
||||
/** @var array $journal */
|
||||
|
@ -23,11 +23,8 @@ declare(strict_types=1);
|
||||
namespace FireflyIII\Handlers\Events;
|
||||
|
||||
use FireflyIII\Events\StoredTransactionGroup;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Models\Rule;
|
||||
use FireflyIII\Models\RuleGroup;
|
||||
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
|
||||
use FireflyIII\TransactionRules\Processor;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\TransactionRules\Engine\RuleEngine;
|
||||
|
||||
/**
|
||||
* Class StoredGroupEventHandler
|
||||
@ -38,46 +35,24 @@ class StoredGroupEventHandler
|
||||
* This method grabs all the users rules and processes them.
|
||||
*
|
||||
* @param StoredTransactionGroup $storedJournalEvent
|
||||
*
|
||||
* @return bool
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function processRules(StoredTransactionGroup $storedJournalEvent): bool
|
||||
public function processRules(StoredTransactionGroup $storedJournalEvent): void
|
||||
{
|
||||
if (false === $storedJournalEvent->applyRules) {
|
||||
return;
|
||||
}
|
||||
|
||||
/** @var RuleEngine $ruleEngine */
|
||||
$ruleEngine = app(RuleEngine::class);
|
||||
$ruleEngine->setUser($storedJournalEvent->transactionGroup->user);
|
||||
$ruleEngine->setAllRules(true);
|
||||
$ruleEngine->setTriggerMode(RuleEngine::TRIGGER_STORE);
|
||||
$journals = $storedJournalEvent->transactionGroup->transactionJournals;
|
||||
if(false === $storedJournalEvent->applyRules) {
|
||||
return true;
|
||||
}
|
||||
// TODO fix this
|
||||
die('cannot apply rules yet');
|
||||
// create objects:
|
||||
/** @var RuleGroupRepositoryInterface $ruleGroupRepos */
|
||||
$ruleGroupRepos = app(RuleGroupRepositoryInterface::class);
|
||||
|
||||
/** @var TransactionJournal $journal */
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
$ruleEngine->processTransactionJournal($journal);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -24,10 +24,8 @@ namespace FireflyIII\Handlers\Events;
|
||||
|
||||
use FireflyIII\Events\UpdatedTransactionGroup;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Models\Rule;
|
||||
use FireflyIII\Models\RuleGroup;
|
||||
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
|
||||
use FireflyIII\TransactionRules\Processor;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\TransactionRules\Engine\RuleEngine;
|
||||
|
||||
/**
|
||||
* Class UpdatedGroupEventHandler
|
||||
@ -38,42 +36,20 @@ class UpdatedGroupEventHandler
|
||||
* This method will check all the rules when a journal is updated.
|
||||
*
|
||||
* @param UpdatedTransactionGroup $updatedJournalEvent
|
||||
*
|
||||
* @return bool
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function processRules(UpdatedTransactionGroup $updatedJournalEvent): bool
|
||||
public function processRules(UpdatedTransactionGroup $updatedJournalEvent): void
|
||||
{
|
||||
// get all the user's rule groups, with the rules, order by 'order'.
|
||||
/** @var RuleEngine $ruleEngine */
|
||||
$ruleEngine = app(RuleEngine::class);
|
||||
$ruleEngine->setUser($updatedJournalEvent->transactionGroup->user);
|
||||
$ruleEngine->setAllRules(true);
|
||||
$ruleEngine->setTriggerMode(RuleEngine::TRIGGER_UPDATE);
|
||||
$journals = $updatedJournalEvent->transactionGroup->transactionJournals;
|
||||
// TODO fix this
|
||||
die('cannot apply rules yet');
|
||||
/** @var RuleGroupRepositoryInterface $ruleGroupRepos */
|
||||
$ruleGroupRepos = app(RuleGroupRepositoryInterface::class);
|
||||
|
||||
/** @var TransactionJournal $journal */
|
||||
foreach ($journals as $journal) {
|
||||
$ruleGroupRepos->setUser($journal->user);
|
||||
|
||||
$groups = $ruleGroupRepos->getActiveGroups();
|
||||
|
||||
/** @var RuleGroup $group */
|
||||
foreach ($groups as $group) {
|
||||
$rules = $ruleGroupRepos->getActiveUpdateRules($group);
|
||||
/** @var Rule $rule */
|
||||
foreach ($rules as $rule) {
|
||||
/** @var Processor $processor */
|
||||
$processor = app(Processor::class);
|
||||
$processor->make($rule);
|
||||
$processor->handleTransactionJournal($journal);
|
||||
|
||||
if ($rule->stop_processing) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
$ruleEngine->processTransactionJournal($journal);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user