123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- <?php
-
- namespace App\Observers;
-
- use App\Events\CurrencyRateChanged;
- use App\Events\DefaultCurrencyChanged;
- use App\Models\Setting\Currency;
- use App\Utilities\Currency\CurrencyAccessor;
-
- class CurrencyObserver
- {
- public function creating(Currency $currency): void
- {
- $this->setStandardCurrencyAttributes($currency);
- }
-
- /**
- * Handle the Currency "updated" event.
- */
- public function updated(Currency $currency): void
- {
- if ($currency->wasChanged('enabled') && $currency->isEnabled()) {
- event(new DefaultCurrencyChanged($currency));
- }
-
- if ($currency->wasChanged('rate')) {
- event(new CurrencyRateChanged($currency, $currency->getOriginal('rate'), $currency->rate));
- }
- }
-
- protected function setStandardCurrencyAttributes(Currency $currency): void
- {
- if (empty($currency->code)) {
- return;
- }
-
- $defaultCurrency = CurrencyAccessor::getDefaultCurrency();
-
- $hasDefaultCurrency = $defaultCurrency !== null;
-
- $originalRate = $currency->rate;
-
- $currencyAttributes = Currency::factory()
- ->forCurrency($currency->code)
- ->make([
- 'enabled' => ! $hasDefaultCurrency,
- ])
- ->getAttributes();
-
- $currencyAttributes['rate'] = $originalRate;
-
- $currency->fill($currencyAttributes);
- }
- }
|