Make sure this order is used. #9780

This commit is contained in:
James Cole 2025-02-06 05:55:46 +01:00
parent d53b1670d3
commit 42209e367f
No known key found for this signature in database
GPG Key ID: B49A324B7EAD6D80
3 changed files with 34 additions and 22 deletions

View File

@ -38,10 +38,18 @@ use Illuminate\Support\Collection;
*/ */
class StoredGroupEventHandler class StoredGroupEventHandler
{ {
public function runAllHandlers(StoredTransactionGroup $event): void
{
$this->processRules($event);
$this->recalculateCredit($event);
$this->triggerWebhooks($event);
}
/** /**
* This method grabs all the users rules and processes them. * This method grabs all the users rules and processes them.
*/ */
public function processRules(StoredTransactionGroup $storedGroupEvent): void private function processRules(StoredTransactionGroup $storedGroupEvent): void
{ {
if (false === $storedGroupEvent->applyRules) { if (false === $storedGroupEvent->applyRules) {
app('log')->info(sprintf('Will not run rules on group #%d', $storedGroupEvent->transactionGroup->id)); app('log')->info(sprintf('Will not run rules on group #%d', $storedGroupEvent->transactionGroup->id));
@ -50,14 +58,14 @@ class StoredGroupEventHandler
} }
app('log')->debug('Now in StoredGroupEventHandler::processRules()'); app('log')->debug('Now in StoredGroupEventHandler::processRules()');
$journals = $storedGroupEvent->transactionGroup->transactionJournals; $journals = $storedGroupEvent->transactionGroup->transactionJournals;
$array = []; $array = [];
/** @var TransactionJournal $journal */ /** @var TransactionJournal $journal */
foreach ($journals as $journal) { foreach ($journals as $journal) {
$array[] = $journal->id; $array[] = $journal->id;
} }
$journalIds = implode(',', $array); $journalIds = implode(',', $array);
app('log')->debug(sprintf('Add local operator for journal(s): %s', $journalIds)); app('log')->debug(sprintf('Add local operator for journal(s): %s', $journalIds));
// collect rules: // collect rules:
@ -66,19 +74,19 @@ class StoredGroupEventHandler
// add the groups to the rule engine. // add the groups to the rule engine.
// it should run the rules in the group and cancel the group if necessary. // it should run the rules in the group and cancel the group if necessary.
$groups = $ruleGroupRepository->getRuleGroupsWithRules('store-journal'); $groups = $ruleGroupRepository->getRuleGroupsWithRules('store-journal');
// create and fire rule engine. // create and fire rule engine.
$newRuleEngine = app(RuleEngineInterface::class); $newRuleEngine = app(RuleEngineInterface::class);
$newRuleEngine->setUser($storedGroupEvent->transactionGroup->user); $newRuleEngine->setUser($storedGroupEvent->transactionGroup->user);
$newRuleEngine->addOperator(['type' => 'journal_id', 'value' => $journalIds]); $newRuleEngine->addOperator(['type' => 'journal_id', 'value' => $journalIds]);
$newRuleEngine->setRuleGroups($groups); $newRuleEngine->setRuleGroups($groups);
$newRuleEngine->fire(); $newRuleEngine->fire();
} }
public function recalculateCredit(StoredTransactionGroup $event): void private function recalculateCredit(StoredTransactionGroup $event): void
{ {
$group = $event->transactionGroup; $group = $event->transactionGroup;
/** @var CreditRecalculateService $object */ /** @var CreditRecalculateService $object */
$object = app(CreditRecalculateService::class); $object = app(CreditRecalculateService::class);
@ -89,17 +97,17 @@ class StoredGroupEventHandler
/** /**
* This method processes all webhooks that respond to the "stored transaction group" trigger (100) * This method processes all webhooks that respond to the "stored transaction group" trigger (100)
*/ */
public function triggerWebhooks(StoredTransactionGroup $storedGroupEvent): void private function triggerWebhooks(StoredTransactionGroup $storedGroupEvent): void
{ {
app('log')->debug(__METHOD__); app('log')->debug(__METHOD__);
$group = $storedGroupEvent->transactionGroup; $group = $storedGroupEvent->transactionGroup;
if (false === $storedGroupEvent->fireWebhooks) { if (false === $storedGroupEvent->fireWebhooks) {
app('log')->info(sprintf('Will not fire webhooks for transaction group #%d', $group->id)); app('log')->info(sprintf('Will not fire webhooks for transaction group #%d', $group->id));
return; return;
} }
$user = $group->user; $user = $group->user;
/** @var MessageGeneratorInterface $engine */ /** @var MessageGeneratorInterface $engine */
$engine = app(MessageGeneratorInterface::class); $engine = app(MessageGeneratorInterface::class);

View File

@ -41,10 +41,19 @@ use Illuminate\Support\Collection;
*/ */
class UpdatedGroupEventHandler class UpdatedGroupEventHandler
{ {
public function runAllHandlers(UpdatedTransactionGroup $event): void {
$this->unifyAccounts($event);
$this->processRules($event);
$this->recalculateCredit($event);
$this->triggerWebhooks($event);
}
/** /**
* This method will check all the rules when a journal is updated. * This method will check all the rules when a journal is updated.
*/ */
public function processRules(UpdatedTransactionGroup $updatedGroupEvent): void private function processRules(UpdatedTransactionGroup $updatedGroupEvent): void
{ {
if (false === $updatedGroupEvent->applyRules) { if (false === $updatedGroupEvent->applyRules) {
app('log')->info(sprintf('Will not run rules on group #%d', $updatedGroupEvent->transactionGroup->id)); app('log')->info(sprintf('Will not run rules on group #%d', $updatedGroupEvent->transactionGroup->id));
@ -76,7 +85,7 @@ class UpdatedGroupEventHandler
$newRuleEngine->fire(); $newRuleEngine->fire();
} }
public function recalculateCredit(UpdatedTransactionGroup $event): void private function recalculateCredit(UpdatedTransactionGroup $event): void
{ {
$group = $event->transactionGroup; $group = $event->transactionGroup;
@ -86,7 +95,7 @@ class UpdatedGroupEventHandler
$object->recalculate(); $object->recalculate();
} }
public function triggerWebhooks(UpdatedTransactionGroup $updatedGroupEvent): void private function triggerWebhooks(UpdatedTransactionGroup $updatedGroupEvent): void
{ {
app('log')->debug(__METHOD__); app('log')->debug(__METHOD__);
$group = $updatedGroupEvent->transactionGroup; $group = $updatedGroupEvent->transactionGroup;
@ -110,7 +119,7 @@ class UpdatedGroupEventHandler
/** /**
* This method will make sure all source / destination accounts are the same. * This method will make sure all source / destination accounts are the same.
*/ */
public function unifyAccounts(UpdatedTransactionGroup $updatedGroupEvent): void private function unifyAccounts(UpdatedTransactionGroup $updatedGroupEvent): void
{ {
$group = $updatedGroupEvent->transactionGroup; $group = $updatedGroupEvent->transactionGroup;
if (1 === $group->transactionJournals->count()) { if (1 === $group->transactionJournals->count()) {

View File

@ -169,16 +169,11 @@ class EventServiceProvider extends ServiceProvider
// is a Transaction Journal related event. // is a Transaction Journal related event.
StoredTransactionGroup::class => [ StoredTransactionGroup::class => [
'FireflyIII\Handlers\Events\StoredGroupEventHandler@processRules', 'FireflyIII\Handlers\Events\StoredGroupEventHandler@runAllHandlers',
'FireflyIII\Handlers\Events\StoredGroupEventHandler@recalculateCredit',
'FireflyIII\Handlers\Events\StoredGroupEventHandler@triggerWebhooks',
], ],
// is a Transaction Journal related event. // is a Transaction Journal related event.
UpdatedTransactionGroup::class => [ UpdatedTransactionGroup::class => [
'FireflyIII\Handlers\Events\UpdatedGroupEventHandler@unifyAccounts', 'FireflyIII\Handlers\Events\UpdatedGroupEventHandler@runAllHandlers',
'FireflyIII\Handlers\Events\UpdatedGroupEventHandler@processRules',
'FireflyIII\Handlers\Events\UpdatedGroupEventHandler@recalculateCredit',
'FireflyIII\Handlers\Events\UpdatedGroupEventHandler@triggerWebhooks',
], ],
DestroyedTransactionGroup::class => [ DestroyedTransactionGroup::class => [
'FireflyIII\Handlers\Events\DestroyedGroupEventHandler@triggerWebhooks', 'FireflyIII\Handlers\Events\DestroyedGroupEventHandler@triggerWebhooks',