. */ declare(strict_types=1); namespace FireflyIII\Handlers\Observer; use FireflyIII\Models\PiggyBank; use FireflyIII\Support\Http\Api\ExchangeRateConverter; use Illuminate\Support\Facades\Log; /** * Class PiggyBankObserver */ class PiggyBankObserver { public function updated(PiggyBank $piggyBank): void { Log::debug('Observe "updated" of a piggy bank.'); $this->updateNativeAmount($piggyBank); } public function created(PiggyBank $piggyBank): void { Log::debug('Observe "created" of a piggy bank.'); $this->updateNativeAmount($piggyBank); } private function updateNativeAmount(PiggyBank $piggyBank): void { $group = $piggyBank->accounts()->first()?->user->userGroup; if (null === $group) { Log::debug(sprintf('No account(s) yet for piggy bank #%d.', $piggyBank->id)); return; } $userCurrency = app('amount')->getDefaultCurrencyByUserGroup($group); if (null === $userCurrency) { return; } $piggyBank->native_target_amount = null; if ($piggyBank->transactionCurrency->id !== $userCurrency->id) { $converter = new ExchangeRateConverter(); $converter->setIgnoreSettings(true); $piggyBank->native_target_amount = $converter->convert($piggyBank->transactionCurrency, $userCurrency, today(), $piggyBank->target_amount); } $piggyBank->saveQuietly(); Log::debug('Piggy bank native target amount is updated.'); } /** * Also delete related objects. */ public function deleting(PiggyBank $piggyBank): void { app('log')->debug('Observe "deleting" of a piggy bank.'); foreach ($piggyBank->attachments()->get() as $attachment) { $attachment->delete(); } $piggyBank->piggyBankEvents()->delete(); $piggyBank->piggyBankRepetitions()->delete(); $piggyBank->notes()->delete(); } }