您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

SyncWithCompanyDefaults.php 1.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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()->currentCompany->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. $default = CompanyDefault::firstOrNew([
  40. 'company_id' => $companyId,
  41. ]);
  42. match ($modelName) {
  43. 'Currency' => $default->currency_code = $model->getAttribute('code'),
  44. 'BankAccount' => $default->bank_account_id = $model->getKey(),
  45. default => null,
  46. };
  47. $default->save();
  48. }
  49. }