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
{
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.
*/
public function processRules(StoredTransactionGroup $storedGroupEvent): void
private function processRules(StoredTransactionGroup $storedGroupEvent): void
{
if (false === $storedGroupEvent->applyRules) {
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()');
$journals = $storedGroupEvent->transactionGroup->transactionJournals;
$array = [];
$journals = $storedGroupEvent->transactionGroup->transactionJournals;
$array = [];
/** @var TransactionJournal $journal */
foreach ($journals as $journal) {
$array[] = $journal->id;
}
$journalIds = implode(',', $array);
$journalIds = implode(',', $array);
app('log')->debug(sprintf('Add local operator for journal(s): %s', $journalIds));
// collect rules:
@ -66,19 +74,19 @@ class StoredGroupEventHandler
// add the groups to the rule engine.
// 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.
$newRuleEngine = app(RuleEngineInterface::class);
$newRuleEngine = app(RuleEngineInterface::class);
$newRuleEngine->setUser($storedGroupEvent->transactionGroup->user);
$newRuleEngine->addOperator(['type' => 'journal_id', 'value' => $journalIds]);
$newRuleEngine->setRuleGroups($groups);
$newRuleEngine->fire();
}
public function recalculateCredit(StoredTransactionGroup $event): void
private function recalculateCredit(StoredTransactionGroup $event): void
{
$group = $event->transactionGroup;
$group = $event->transactionGroup;
/** @var CreditRecalculateService $object */
$object = app(CreditRecalculateService::class);
@ -89,17 +97,17 @@ class StoredGroupEventHandler
/**
* 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__);
$group = $storedGroupEvent->transactionGroup;
$group = $storedGroupEvent->transactionGroup;
if (false === $storedGroupEvent->fireWebhooks) {
app('log')->info(sprintf('Will not fire webhooks for transaction group #%d', $group->id));
return;
}
$user = $group->user;
$user = $group->user;
/** @var MessageGeneratorInterface $engine */
$engine = app(MessageGeneratorInterface::class);

View File

@ -41,10 +41,19 @@ use Illuminate\Support\Collection;
*/
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.
*/
public function processRules(UpdatedTransactionGroup $updatedGroupEvent): void
private function processRules(UpdatedTransactionGroup $updatedGroupEvent): void
{
if (false === $updatedGroupEvent->applyRules) {
app('log')->info(sprintf('Will not run rules on group #%d', $updatedGroupEvent->transactionGroup->id));
@ -76,7 +85,7 @@ class UpdatedGroupEventHandler
$newRuleEngine->fire();
}
public function recalculateCredit(UpdatedTransactionGroup $event): void
private function recalculateCredit(UpdatedTransactionGroup $event): void
{
$group = $event->transactionGroup;
@ -86,7 +95,7 @@ class UpdatedGroupEventHandler
$object->recalculate();
}
public function triggerWebhooks(UpdatedTransactionGroup $updatedGroupEvent): void
private function triggerWebhooks(UpdatedTransactionGroup $updatedGroupEvent): void
{
app('log')->debug(__METHOD__);
$group = $updatedGroupEvent->transactionGroup;
@ -110,7 +119,7 @@ class UpdatedGroupEventHandler
/**
* 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;
if (1 === $group->transactionJournals->count()) {

View File

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