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ů.

CreateCompany.php 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. namespace App\Filament\Company\Pages;
  3. use App\Enums\Setting\EntityType;
  4. use App\Models\Company;
  5. use App\Models\Locale\Country;
  6. use App\Models\Setting\Localization;
  7. use App\Services\CompanyDefaultService;
  8. use App\Utilities\Currency\CurrencyAccessor;
  9. use Filament\Forms\Components\Select;
  10. use Filament\Forms\Components\TextInput;
  11. use Filament\Forms\Form;
  12. use Filament\Support\Enums\MaxWidth;
  13. use Illuminate\Contracts\Support\Htmlable;
  14. use Illuminate\Database\Eloquent\Model;
  15. use Illuminate\Support\Facades\Auth;
  16. use Illuminate\Support\Facades\DB;
  17. use Illuminate\Support\Facades\Gate;
  18. use Wallo\FilamentCompanies\Events\AddingCompany;
  19. use Wallo\FilamentCompanies\FilamentCompanies;
  20. use Wallo\FilamentCompanies\Pages\Company\CreateCompany as FilamentCreateCompany;
  21. class CreateCompany extends FilamentCreateCompany
  22. {
  23. protected bool $hasTopbar = false;
  24. protected static string $view = 'filament.company.pages.create-company';
  25. protected static string $layout = 'components.company.layout.custom-simple';
  26. public function getHeading(): string | Htmlable
  27. {
  28. return '';
  29. }
  30. public function getMaxWidth(): MaxWidth | string | null
  31. {
  32. return MaxWidth::FourExtraLarge;
  33. }
  34. public function hasLogo(): bool
  35. {
  36. return true;
  37. }
  38. public function form(Form $form): Form
  39. {
  40. return $form
  41. ->schema([
  42. TextInput::make('name')
  43. ->label(__('filament-companies::default.labels.company_name'))
  44. ->autofocus()
  45. ->maxLength(255)
  46. ->softRequired(),
  47. TextInput::make('profile.email')
  48. ->label('Company Email')
  49. ->email()
  50. ->softRequired(),
  51. Select::make('profile.entity_type')
  52. ->label('Entity Type')
  53. ->options(EntityType::class)
  54. ->softRequired(),
  55. Select::make('profile.country')
  56. ->label('Country')
  57. ->live()
  58. ->searchable()
  59. ->options(Country::getAvailableCountryOptions())
  60. ->softRequired(),
  61. Select::make('locale.language')
  62. ->label('Language')
  63. ->searchable()
  64. ->options(Localization::getAllLanguages())
  65. ->softRequired(),
  66. Select::make('currencies.code')
  67. ->label('Currency')
  68. ->searchable()
  69. ->options(CurrencyAccessor::getAllCurrencyOptions())
  70. ->optionsLimit(5)
  71. ->softRequired(),
  72. ])
  73. ->columns()
  74. ->model(FilamentCompanies::companyModel())
  75. ->statePath('data');
  76. }
  77. protected function handleRegistration(array $data): Model
  78. {
  79. $user = Auth::user();
  80. Gate::forUser($user)->authorize('create', FilamentCompanies::newCompanyModel());
  81. AddingCompany::dispatch($user);
  82. $personalCompany = $user?->personalCompany() === null;
  83. return DB::transaction(function () use ($user, $data, $personalCompany) {
  84. /** @var Company $company */
  85. $company = $user?->ownedCompanies()->create([
  86. 'name' => $data['name'],
  87. 'personal_company' => $personalCompany,
  88. ]);
  89. $company->profile()->create([
  90. 'email' => $data['profile']['email'],
  91. 'entity_type' => $data['profile']['entity_type'],
  92. 'country' => $data['profile']['country'],
  93. ]);
  94. $user?->switchCompany($company);
  95. $companyDefaultService = app(CompanyDefaultService::class);
  96. $user = $company->owner ?? $user;
  97. $companyDefaultService->createCompanyDefaults($company, $user, $data['currencies']['code'], $data['profile']['country'], $data['locale']['language']);
  98. $this->companyCreated($data['name']);
  99. return $company;
  100. });
  101. }
  102. }