. */ declare(strict_types=1); namespace FireflyIII\Handlers\Observer; use FireflyIII\Handlers\ExchangeRate\ConversionParameters; use FireflyIII\Handlers\ExchangeRate\ConvertsAmountToPrimaryAmount; use FireflyIII\Models\Attachment; use FireflyIII\Models\PiggyBank; use FireflyIII\Repositories\Attachment\AttachmentRepositoryInterface; use Illuminate\Support\Facades\Log; /** * Class PiggyBankObserver */ class PiggyBankObserver { public function created(PiggyBank $piggyBank): void { Log::debug('Observe "created" of a piggy bank.'); $this->updatePrimaryCurrencyAmount($piggyBank); } /** * Also delete related objects. */ public function deleting(PiggyBank $piggyBank): void { Log::debug('Observe "deleting" of a piggy bank.'); $repository = app(AttachmentRepositoryInterface::class); $repository->setUser($piggyBank->accounts()->first()->user); /** @var Attachment $attachment */ foreach ($piggyBank->attachments()->get() as $attachment) { $repository->destroy($attachment); } $piggyBank->piggyBankEvents()->delete(); $piggyBank->piggyBankRepetitions()->delete(); $piggyBank->notes()->delete(); } public function updated(PiggyBank $piggyBank): void { Log::debug('Observe "updated" of a piggy bank.'); $this->updatePrimaryCurrencyAmount($piggyBank); } private function updatePrimaryCurrencyAmount(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; } $params = new ConversionParameters(); $params->user = $piggyBank->accounts()->first()?->user; $params->model = $piggyBank; $params->originalCurrency = $piggyBank->transactionCurrency; $params->amountField = 'target_amount'; $params->primaryAmountField = 'native_target_amount'; ConvertsAmountToPrimaryAmount::convert($params); } }