components([ Wizard::make([ Step::make('Profile') ->icon('lucide-user-plus') ->description('Benutzer anlegen.') ->schema([ Select::make('gender') ->label('Geschlecht') ->options([ 'Herr' => 'Herr', 'Frau' => 'Frau', 'Non-binary' => 'Non-binary', ]) ->required() ->validationMessages([ 'required' => 'Ein Geschlecht ist erforderlich.', ]), $this->getNameFormComponent()->validationMessages([ 'required' => 'Ein Name ist erforderlich.', ]), $this->getEmailFormComponent() ->validationMessages([ 'required' => 'Eine E-Mail-Adresse ist erforderlich.', ]), $this->getPasswordFormComponent() ->validationMessages([ 'required' => 'Ein Passwort ist erforderlich.', 'same' => 'Das Passwort muß mit dem "Passwort bestätigen" Feld übereinstimmen.', 'min' => [ 'string' => 'Das :attribute muß mindestens :min Stellen lang sein.', ], ]), $this->getPasswordConfirmationFormComponent(), ])->columnSpan(3), Wizard\Step::make('Konto') // ->columns(4) ->icon('lucide-key-square') ->description('Mit einem Konto verbinden.') ->schema([ /** BESTEHENDES / NEU */ Select::make('register-modus') ->columnSpan(4) ->label('Registriermodus') ->prefixIcon('lucide-key-square') ->prefixIconColor('primary') ->aboveLabel(function (Get $get) { if (! $get('register-modus')) { return ['Bitte wählen Sie ein Konto oder erstellen Sie ein neues.']; } }) ->options([ 'old' => 'Mit einem bestehenden Konto verbinden', 'new' => 'Ein neues Konto erstellen', ]) ->live() ->required(), /** BESTEHEND */ Select::make('konto_id') ->columnSpan(4) ->label('Konto auswählen') ->belowLabel([ 'Um das erstellte Profil zu aktivieren muß der Kontoinhaber die Anmeldung im Programm freischalten', ]) ->visible(fn (Get $get): bool => $get('register-modus') == 'old') ->options(Konto::query()->pluck('company', 'id')) ->searchable() ->required(), /** NEU */ Fieldset::make('Rechnungsdaten') ->visible(fn (Get $get): bool => $get('register-modus') == 'new') ->schema([ TextInput::make('kontos.company') ->label('Firma') ->required(), TextInput::make('kontos.uid_number') ->label('UID Nummer') ->rules([new VatNumber]) ->required(), Textarea::make('kontos.address') ->label('Adresse') ->required(), ])->columnSpan(4), Fieldset::make('Kontaktperson') ->visible(fn (Get $get): bool => $get('register-modus') == 'new') ->schema([ Select::make('kontos.gender') ->columnSpan(2) ->label('Geschlecht') ->options([ 'Herr' => 'Herr', 'Frau' => 'Frau', 'Non-binary' => 'Non-binary', ]) ->required(), TextInput::make('kontos.title') ->label('Titel'), TextInput::make('kontos.name') ->required(), TextInput::make('kontos.email') ->label('E-Mail') ->unique(table: Konto::class) ->required(), PhoneInput::make('kontos.phone') ->label('Telefon') ->defaultCountry('AT'), ])->columnSpan(4), Fieldset::make('Mit diesen Daten auch einen') ->visible(fn (Get $get): bool => $get('register-modus') == 'new') ->schema([ Checkbox::make('gutachter_anlegen')->inline(), Checkbox::make('auftraggeber_anlegen')->inline(), ])->columnSpan(4), ]), // Wizard\Step::make('Zahlungsmodus') // ->icon('phosphor-coins') // ->visible(fn (Get $get): bool => $get('register-modus') == 'new') // ->description('Drei Optionen stehen zur Auswahl') // ->schema([ // Section::make('Zahlungsoptionen') // ->description('können jederzeit geändert werden. Im Moment bieten wir nur unseren Basic Plan an.')->columnSpanFull(), // RadioDeck::make('plan_id') // ->label('Wählen sie eine Option') // ->options(fn () => Plan::pluck('name', 'id')->toArray()) // ->descriptions(Plan::options()) // ->icons(fn () => Plan::pluck('icon', 'id')->toArray()) // ->required() // ->default(1) // ->disabled() // ->iconPosition(IconPosition::Before) // Before | After // ->iconSize(IconSize::ExtraLarge) // ->alignment(Alignment::Center) // Start | Center | End // ->padding('p-2') // Padding around the deck // ->extraCardsAttributes([ // 'class' => 'rounded-xl drop-shadow-xl mt-1', // ]) // ->extraOptionsAttributes([ // 'class' => 'text-2xl font-black tracking-tight lg:text-3xl', // ]) // ->colors('primary') // ->columns(3) // ->columnSpanFull(), // ]), Wizard\Step::make('AGB') ->icon('lucide-receipt-text') ->description('Allgemeine Geschäftsbedingungen') ->schema([ Fieldset::make('Bitte lesen und akzeptieren Sie die Allgemeinen Geschäftsbedinnungen.') ->schema([ View::make('pages.agb'), Checkbox::make('agb_akzeptiert') ->default(false) ->beforeLabel(Icon::make('phosphor-arrow-fat-right')) ->label('Allgemeinen Geschäftsbedinnungen akzeptieren') ->accepted() ->validationMessages([ 'accepted' => 'Das Akzeptieren der Allgemeinen Geschäftsbedinnungen ist erforderlich.', ]), ])->columns(1), ]), ])->submitAction(new HtmlString(Blade::render(<<<'BLADE' Registrieren BLADE))), ]); } protected function getFormActions(): array { return []; } public function handleRegistration(array $data): Model { // dd($data); if (isset($data['kontos'])) { $konto = new Konto($data['kontos']); $konto->save(); $data['konto_id'] = $konto->id; unset($data['kontos']['uid_number']); } if (isset($data['gutachter_anlegen'])) { $gutachter = new Gutachter($data['kontos']); $gutachter->konto_id = $konto->id; $gutachter->save(); } if (isset($data['auftraggeber_anlegen'])) { $auftraggeber = new Auftraggeber($data['kontos']); $auftraggeber->konto_id = $konto->id; $auftraggeber->save(); } unset($data['gutachter_anlegen']); unset($data['auftraggeber_anlegen']); unset($data['kontos']); $user = parent::handleRegistration($data); return $user; } }