Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

CreateAccount.php 1.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <?php
  2. namespace App\Filament\Resources\AccountResource\Pages;
  3. use App\Filament\Resources\AccountResource;
  4. use App\Models\Banking\Account;
  5. use Filament\Pages\Actions;
  6. use Filament\Resources\Pages\CreateRecord;
  7. use Illuminate\Database\Eloquent\Model;
  8. use Illuminate\Support\Facades\DB;
  9. class CreateAccount extends CreateRecord
  10. {
  11. protected static string $resource = AccountResource::class;
  12. protected function getRedirectUrl(): string
  13. {
  14. return $this->getResource()::getUrl('index');
  15. }
  16. protected function mutateFormDataBeforeCreate(array $data): array
  17. {
  18. $data['company_id'] = auth()->user()->currentCompany->id;
  19. return $data;
  20. }
  21. protected function handleRecordCreation(array $data): Model
  22. {
  23. $currentCompanyId = auth()->user()->currentCompany->id;
  24. $accountId = $data['id'] ?? null;
  25. $enabledAccountsCount = Account::where('company_id', $currentCompanyId)
  26. ->where('enabled', true)
  27. ->where('id', '!=', $accountId)
  28. ->count();
  29. if ($data['enabled'] === true && $enabledAccountsCount > 0) {
  30. $this->disableOtherAccounts($currentCompanyId, $accountId);
  31. } elseif ($data['enabled'] === false && $enabledAccountsCount < 1) {
  32. $data['enabled'] = true;
  33. }
  34. return parent::handleRecordCreation($data);
  35. }
  36. protected function disableOtherAccounts($companyId, $accountId): void
  37. {
  38. DB::table('accounts')
  39. ->where('company_id', $companyId)
  40. ->where('id', '!=', $accountId)
  41. ->update(['enabled' => false]);
  42. }
  43. }