You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

CreateCompany.php 2.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace App\Filament\Company\Pages;
  3. use App\Enums\EntityType;
  4. use App\Models\Setting\CompanyProfile;
  5. use Filament\Forms\Components\Select;
  6. use Filament\Forms\Components\TextInput;
  7. use Filament\Forms\Form;
  8. use Illuminate\Database\Eloquent\Model;
  9. use Illuminate\Support\Facades\Auth;
  10. use Illuminate\Support\Facades\Gate;
  11. use Wallo\FilamentCompanies\Events\AddingCompany;
  12. use Wallo\FilamentCompanies\FilamentCompanies;
  13. use Wallo\FilamentCompanies\Pages\Company\CreateCompany as FilamentCreateCompany;
  14. class CreateCompany extends FilamentCreateCompany
  15. {
  16. public function form(Form $form): Form
  17. {
  18. return $form
  19. ->schema([
  20. TextInput::make('name')
  21. ->label(__('filament-companies::default.labels.company_name'))
  22. ->autofocus()
  23. ->maxLength(255)
  24. ->required(),
  25. TextInput::make('profile.email')
  26. ->label('Company Email')
  27. ->email()
  28. ->required(),
  29. Select::make('profile.entity_type')
  30. ->label('Entity Type')
  31. ->native(false)
  32. ->options(EntityType::class)
  33. ->required(),
  34. Select::make('profile.country')
  35. ->label('Country')
  36. ->native(false)
  37. ->searchable()
  38. ->options(CompanyProfile::getAvailableCountryOptions())
  39. ->required(),
  40. ])
  41. ->model(FilamentCompanies::companyModel())
  42. ->statePath('data');
  43. }
  44. protected function handleRegistration(array $data): Model
  45. {
  46. $user = Auth::user();
  47. Gate::forUser($user)->authorize('create', FilamentCompanies::newCompanyModel());
  48. AddingCompany::dispatch($user);
  49. $personalCompany = $user?->personalCompany() === null;
  50. $company = $user?->ownedCompanies()->create([
  51. 'name' => $data['name'],
  52. 'personal_company' => $personalCompany,
  53. ]);
  54. $company->profile()->create([
  55. 'email' => $data['profile']['email'],
  56. 'entity_type' => $data['profile']['entity_type'],
  57. 'country' => $data['profile']['country'],
  58. ]);
  59. $user?->switchCompany($company);
  60. $name = $data['name'];
  61. $this->companyCreated($name);
  62. return $company;
  63. }
  64. }