. */ declare(strict_types=1); namespace FireflyIII\Handlers\Events\Model; use FireflyIII\Events\Model\PiggyBank\ChangedAmount; use FireflyIII\Models\PiggyBankEvent; use Illuminate\Support\Facades\Log; /** * Class PiggyBankEventHandler */ class PiggyBankEventHandler { /** * @param ChangedAmount $event * * @return void */ public function changePiggyAmount(ChangedAmount $event): void { // find journal if group is present. $journal = $event->transactionJournal; if (null !== $event->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'), 'amount' => $event->amount, ] ); } }