Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

SyncWithCompanyDefaults.php 1.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. namespace App\Listeners;
  3. use App\Events\CompanyDefaultEvent;
  4. use App\Models\Setting\CompanyDefault;
  5. use Illuminate\Support\Facades\DB;
  6. class SyncWithCompanyDefaults
  7. {
  8. /**
  9. * Create the event listener.
  10. */
  11. public function __construct()
  12. {
  13. //
  14. }
  15. /**
  16. * Handle the event.
  17. */
  18. public function handle(CompanyDefaultEvent $event): void
  19. {
  20. DB::transaction(function () use ($event) {
  21. $this->syncWithCompanyDefaults($event);
  22. }, 5);
  23. }
  24. private function syncWithCompanyDefaults($event): void
  25. {
  26. $model = $event->model;
  27. if (! $model->getAttribute('enabled') || ! auth()->check() || ! auth()->user()->currentCompany) {
  28. return;
  29. }
  30. $companyId = auth()->user()->current_company_id;
  31. if (! $companyId) {
  32. return;
  33. }
  34. $this->updateCompanyDefaults($model, $companyId);
  35. }
  36. private function updateCompanyDefaults($model, $companyId): void
  37. {
  38. $modelName = class_basename($model);
  39. /** @var CompanyDefault $default */
  40. $default = CompanyDefault::firstOrNew([
  41. 'company_id' => $companyId,
  42. ]);
  43. match ($modelName) {
  44. 'Currency' => $default->currency_code = $model->getAttribute('code'),
  45. 'BankAccount' => $default->bank_account_id = $model->getKey(),
  46. default => null,
  47. };
  48. $default->save();
  49. }
  50. }