. */ declare(strict_types=1); namespace FireflyIII\Handlers\Events\Model; use FireflyIII\Events\Model\PiggyBank\ChangedName; use FireflyIII\Models\Account; use FireflyIII\Models\Rule; use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionGroup; use FireflyIII\Events\Model\PiggyBank\ChangedAmount; use FireflyIII\Models\PiggyBankEvent; /** * Class PiggyBankEventHandler */ class PiggyBankEventHandler { public function changedPiggyBankName(ChangedName $event): void { // loop all accounts, collect all user's rules. /** @var Account $account */ foreach ($event->piggyBank->accounts as $account) { /** @var Rule $rule */ foreach ($account->user->rules as $rule) { /** @var RuleAction $ruleAction */ foreach ($rule->ruleActions()->where('action_type', 'update_piggy')->get() as $ruleAction) { if ($event->oldName === $ruleAction->action_value) { $ruleAction->action_value = $event->newName; $ruleAction->save(); } } } } } public function changePiggyAmount(ChangedAmount $event): void { // find journal if group is present. $journal = $event->transactionJournal; if ($event->transactionGroup instanceof TransactionGroup) { $journal = $event->transactionGroup->transactionJournals()->first(); } $date = $journal->date ?? today(config('app.timezone')); // sanity check: event must not already exist for this journal and piggy bank. if (null !== $journal) { $exists = PiggyBankEvent::where('piggy_bank_id', $event->piggyBank->id) ->where('transaction_journal_id', $journal->id) ->exists() ; if ($exists) { app('log')->warning('Already have event for this journal and piggy, will not create another.'); return; } } PiggyBankEvent::create( [ 'piggy_bank_id' => $event->piggyBank->id, 'transaction_journal_id' => $journal?->id, 'date' => $date->format('Y-m-d'), 'date_tz' => $date->format('e'), 'amount' => $event->amount, ] ); } }