Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

CreateAccount.php 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace App\Filament\Resources\AccountResource\Pages;
  3. use App\Filament\Resources\AccountResource;
  4. use App\Models\Banking\Account;
  5. use Filament\Notifications\Notification;
  6. use Filament\Pages\Actions;
  7. use Filament\Resources\Pages\CreateRecord;
  8. use Illuminate\Database\Eloquent\Model;
  9. use Illuminate\Support\Facades\Auth;
  10. use Illuminate\Support\Facades\DB;
  11. class CreateAccount extends CreateRecord
  12. {
  13. protected static string $resource = AccountResource::class;
  14. protected function getRedirectUrl(): string
  15. {
  16. return self::getResource()::getUrl('index');
  17. }
  18. protected function mutateFormDataBeforeCreate(array $data): array
  19. {
  20. $data['company_id'] = Auth::user()->currentCompany->id;
  21. $data['enabled'] = (bool)$data['enabled'];
  22. $data['created_by'] = Auth::id();
  23. return $data;
  24. }
  25. protected function handleRecordCreation(array $data): Model
  26. {
  27. return DB::transaction(function () use ($data) {
  28. $currentCompanyId = auth()->user()->currentCompany->id;
  29. $enabled = (bool)($data['enabled'] ?? false); // Ensure $enabled is always a boolean
  30. if ($enabled === true) {
  31. $this->disableExistingRecord($currentCompanyId);
  32. } else {
  33. $this->ensureAtLeastOneEnabled($currentCompanyId, $enabled);
  34. }
  35. $data['enabled'] = $enabled;
  36. return parent::handleRecordCreation($data);
  37. });
  38. }
  39. protected function disableExistingRecord($companyId): void
  40. {
  41. $existingEnabledRecord = Account::where('company_id', $companyId)
  42. ->where('enabled', true)
  43. ->first();
  44. if ($existingEnabledRecord !== null) {
  45. $existingEnabledRecord->enabled = false;
  46. $existingEnabledRecord->save();
  47. $this->defaultAccountChanged();
  48. }
  49. }
  50. protected function ensureAtLeastOneEnabled($companyId, &$enabled): void
  51. {
  52. $enabledAccountsCount = Account::where('company_id', $companyId)
  53. ->where('enabled', true)
  54. ->count();
  55. if ($enabledAccountsCount === 0) {
  56. $enabled = true;
  57. }
  58. }
  59. protected function defaultAccountChanged(): void
  60. {
  61. Notification::make()
  62. ->warning()
  63. ->title('Default account updated')
  64. ->body('Your default account has been updated. Please check your account settings to review this change and ensure it is correct.')
  65. ->persistent()
  66. ->send();
  67. }
  68. }