Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

CurrencyObserver.php 1.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace App\Observers;
  3. use App\Events\CurrencyRateChanged;
  4. use App\Events\DefaultCurrencyChanged;
  5. use App\Models\Setting\Currency;
  6. use App\Utilities\Currency\CurrencyAccessor;
  7. class CurrencyObserver
  8. {
  9. public function creating(Currency $currency): void
  10. {
  11. $this->setStandardCurrencyAttributes($currency);
  12. }
  13. /**
  14. * Handle the Currency "updated" event.
  15. */
  16. public function updated(Currency $currency): void
  17. {
  18. if ($currency->wasChanged('enabled') && $currency->isEnabled()) {
  19. event(new DefaultCurrencyChanged($currency));
  20. }
  21. if ($currency->wasChanged('rate')) {
  22. event(new CurrencyRateChanged($currency, $currency->getOriginal('rate'), $currency->rate));
  23. }
  24. }
  25. protected function setStandardCurrencyAttributes(Currency $currency): void
  26. {
  27. if (empty($currency->code)) {
  28. return;
  29. }
  30. $defaultCurrency = CurrencyAccessor::getDefaultCurrency();
  31. $hasDefaultCurrency = $defaultCurrency !== null;
  32. $originalRate = $currency->rate;
  33. $currencyAttributes = Currency::factory()
  34. ->forCurrency($currency->code)
  35. ->make([
  36. 'enabled' => ! $hasDefaultCurrency,
  37. ])
  38. ->getAttributes();
  39. $currencyAttributes['rate'] = $originalRate;
  40. $currency->fill($currencyAttributes);
  41. }
  42. }