mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-15 16:57:09 +00:00
make sure rules fire for events.
This commit is contained in:
@@ -150,6 +150,9 @@ class ApplyRules extends Command
|
|||||||
$ruleEngine->setUser($this->getUser());
|
$ruleEngine->setUser($this->getUser());
|
||||||
$ruleEngine->setRulesToApply($rulesToApply);
|
$ruleEngine->setRulesToApply($rulesToApply);
|
||||||
|
|
||||||
|
// for this call, the rule engine only includes "store" rules:
|
||||||
|
$ruleEngine->setTriggerMode(RuleEngine::TRIGGER_STORE);
|
||||||
|
|
||||||
$bar = $this->output->createProgressBar(count($journals));
|
$bar = $this->output->createProgressBar(count($journals));
|
||||||
Log::debug(sprintf('Now looping %d transactions.', count($journals)));
|
Log::debug(sprintf('Now looping %d transactions.', count($journals)));
|
||||||
/** @var array $journal */
|
/** @var array $journal */
|
||||||
|
@@ -23,11 +23,8 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Handlers\Events;
|
namespace FireflyIII\Handlers\Events;
|
||||||
|
|
||||||
use FireflyIII\Events\StoredTransactionGroup;
|
use FireflyIII\Events\StoredTransactionGroup;
|
||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
use FireflyIII\Models\Rule;
|
use FireflyIII\TransactionRules\Engine\RuleEngine;
|
||||||
use FireflyIII\Models\RuleGroup;
|
|
||||||
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
|
|
||||||
use FireflyIII\TransactionRules\Processor;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class StoredGroupEventHandler
|
* Class StoredGroupEventHandler
|
||||||
@@ -38,46 +35,24 @@ class StoredGroupEventHandler
|
|||||||
* This method grabs all the users rules and processes them.
|
* This method grabs all the users rules and processes them.
|
||||||
*
|
*
|
||||||
* @param StoredTransactionGroup $storedJournalEvent
|
* @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;
|
$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) {
|
foreach ($journals as $journal) {
|
||||||
$ruleGroupRepos->setUser($journal->user);
|
$ruleEngine->processTransactionJournal($journal);
|
||||||
$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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -24,10 +24,8 @@ namespace FireflyIII\Handlers\Events;
|
|||||||
|
|
||||||
use FireflyIII\Events\UpdatedTransactionGroup;
|
use FireflyIII\Events\UpdatedTransactionGroup;
|
||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Models\Rule;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
use FireflyIII\Models\RuleGroup;
|
use FireflyIII\TransactionRules\Engine\RuleEngine;
|
||||||
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
|
|
||||||
use FireflyIII\TransactionRules\Processor;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class UpdatedGroupEventHandler
|
* Class UpdatedGroupEventHandler
|
||||||
@@ -38,42 +36,20 @@ class UpdatedGroupEventHandler
|
|||||||
* This method will check all the rules when a journal is updated.
|
* This method will check all the rules when a journal is updated.
|
||||||
*
|
*
|
||||||
* @param UpdatedTransactionGroup $updatedJournalEvent
|
* @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;
|
$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) {
|
foreach ($journals as $journal) {
|
||||||
$ruleGroupRepos->setUser($journal->user);
|
$ruleEngine->processTransactionJournal($journal);
|
||||||
|
|
||||||
$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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user