mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-12 23:45:10 +00:00
Remove statistics when creating a new journal.
This commit is contained in:
@@ -28,6 +28,7 @@ use FireflyIII\Events\RequestedSendWebhookMessages;
|
|||||||
use FireflyIII\Events\StoredTransactionGroup;
|
use FireflyIII\Events\StoredTransactionGroup;
|
||||||
use FireflyIII\Generator\Webhook\MessageGeneratorInterface;
|
use FireflyIII\Generator\Webhook\MessageGeneratorInterface;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
|
use FireflyIII\Repositories\PeriodStatistic\PeriodStatisticRepositoryInterface;
|
||||||
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
|
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
|
||||||
use FireflyIII\Services\Internal\Support\CreditRecalculateService;
|
use FireflyIII\Services\Internal\Support\CreditRecalculateService;
|
||||||
use FireflyIII\TransactionRules\Engine\RuleEngineInterface;
|
use FireflyIII\TransactionRules\Engine\RuleEngineInterface;
|
||||||
@@ -36,6 +37,8 @@ use Illuminate\Support\Facades\Log;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Class StoredGroupEventHandler
|
* Class StoredGroupEventHandler
|
||||||
|
*
|
||||||
|
* TODO migrate to observer?
|
||||||
*/
|
*/
|
||||||
class StoredGroupEventHandler
|
class StoredGroupEventHandler
|
||||||
{
|
{
|
||||||
@@ -44,6 +47,7 @@ class StoredGroupEventHandler
|
|||||||
$this->processRules($event);
|
$this->processRules($event);
|
||||||
$this->recalculateCredit($event);
|
$this->recalculateCredit($event);
|
||||||
$this->triggerWebhooks($event);
|
$this->triggerWebhooks($event);
|
||||||
|
$this->removePeriodStatistics($event);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -58,14 +62,14 @@ class StoredGroupEventHandler
|
|||||||
}
|
}
|
||||||
Log::debug('Now in StoredGroupEventHandler::processRules()');
|
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);
|
||||||
Log::debug(sprintf('Add local operator for journal(s): %s', $journalIds));
|
Log::debug(sprintf('Add local operator for journal(s): %s', $journalIds));
|
||||||
|
|
||||||
// collect rules:
|
// collect rules:
|
||||||
@@ -74,10 +78,10 @@ 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);
|
||||||
@@ -86,7 +90,7 @@ class StoredGroupEventHandler
|
|||||||
|
|
||||||
private 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);
|
||||||
@@ -94,20 +98,33 @@ class StoredGroupEventHandler
|
|||||||
$object->recalculate();
|
$object->recalculate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function removePeriodStatistics(StoredTransactionGroup $event): void
|
||||||
|
{
|
||||||
|
/** @var PeriodStatisticRepositoryInterface $repository */
|
||||||
|
$repository = app(PeriodStatisticRepositoryInterface::class);
|
||||||
|
/** @var TransactionJournal $journal */
|
||||||
|
foreach ($event->transactionGroup->transactionJournals as $journal) {
|
||||||
|
$source = $journal->transactions()->where('amount', '<', '0')->first();
|
||||||
|
$dest = $journal->transactions()->where('amount', '>', '0')->first();
|
||||||
|
$repository->deleteStatisticsForModel($source->account, $journal->date);
|
||||||
|
$repository->deleteStatisticsForModel($dest->account, $journal->date);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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)
|
||||||
*/
|
*/
|
||||||
private function triggerWebhooks(StoredTransactionGroup $storedGroupEvent): void
|
private function triggerWebhooks(StoredTransactionGroup $storedGroupEvent): void
|
||||||
{
|
{
|
||||||
Log::debug(__METHOD__);
|
Log::debug(__METHOD__);
|
||||||
$group = $storedGroupEvent->transactionGroup;
|
$group = $storedGroupEvent->transactionGroup;
|
||||||
if (false === $storedGroupEvent->fireWebhooks) {
|
if (false === $storedGroupEvent->fireWebhooks) {
|
||||||
Log::info(sprintf('Will not fire webhooks for transaction group #%d', $group->id));
|
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);
|
||||||
|
@@ -74,4 +74,9 @@ class PeriodStatisticRepository implements PeriodStatisticRepositoryInterface
|
|||||||
{
|
{
|
||||||
return $model->primaryPeriodStatistics()->where('start', '>=', $start)->where('end', '<=', $end)->get();
|
return $model->primaryPeriodStatistics()->where('start', '>=', $start)->where('end', '<=', $end)->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function deleteStatisticsForModel(Model $model, Carbon $date): void
|
||||||
|
{
|
||||||
|
$model->primaryPeriodStatistics()->where('start', '<=', $date)->where('end', '>=', $date)->delete();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,4 +37,6 @@ interface PeriodStatisticRepositoryInterface
|
|||||||
public function saveStatistic(Model $model, int $currencyId, Carbon $start, Carbon $end, string $type, int $count, string $amount): PeriodStatistic;
|
public function saveStatistic(Model $model, int $currencyId, Carbon $start, Carbon $end, string $type, int $count, string $amount): PeriodStatistic;
|
||||||
|
|
||||||
public function allInRangeForModel(Model $model, Carbon $start, Carbon $end): Collection;
|
public function allInRangeForModel(Model $model, Carbon $start, Carbon $end): Collection;
|
||||||
|
|
||||||
|
public function deleteStatisticsForModel(Model $model, Carbon $date): void;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user