invitation = PartnerInvitation::with('role')->where('token', $token)->firstOrFail(); // Prüfe ob Einladung abgelaufen ist if ($this->invitation->isExpired()) { $this->invitation->markAsExpired(); $this->redirect('/partner/invitation/expired/' . $token); } // Prüfe ob Einladung bereits verwendet wurde if ($this->invitation->status !== 'pending') { $this->redirect('/partner/invitation/used/' . $token); } $this->email = $this->invitation->email; $this->firstName = $this->invitation->contact_first_name ?? ''; $this->lastName = $this->invitation->contact_last_name ?? ''; } public function createAccount(): void { $this->validate([ 'firstName' => 'required|string|max:255', 'lastName' => 'required|string|max:255', 'email' => 'required|email', 'password' => 'required|string|min:8|confirmed', 'acceptTerms' => 'accepted', ], [ 'firstName.required' => __('Bitte geben Sie Ihren Vornamen ein.'), 'firstName.max' => __('Der Vorname darf maximal 255 Zeichen lang sein.'), 'lastName.required' => __('Bitte geben Sie Ihren Nachnamen ein.'), 'lastName.max' => __('Der Nachname darf maximal 255 Zeichen lang sein.'), 'email.required' => __('Bitte geben Sie Ihre E-Mail-Adresse ein.'), 'email.email' => __('Bitte geben Sie eine gültige E-Mail-Adresse ein.'), 'password.required' => __('Bitte geben Sie ein Passwort ein.'), 'password.min' => __('Das Passwort muss mindestens 8 Zeichen lang sein.'), 'password.confirmed' => __('Die Passwörter stimmen nicht überein.'), 'acceptTerms.accepted' => __('Sie müssen die AGB und Datenschutzbestimmungen akzeptieren.'), ]); try { \DB::beginTransaction(); // 1. Erstelle Partner-Firma $partner = Partner::create([ 'company_name' => $this->invitation->company_name, 'slug' => Str::slug($this->invitation->company_name), 'type' => $this->invitation->role->name, 'is_active' => false, // Wird später im Setup-Wizard aktiviert ]); // 2. Erstelle User $user = User::create([ 'partner_id' => $partner->id, 'name' => $this->firstName . ' ' . $this->lastName, 'email' => $this->email, 'password' => Hash::make($this->password), 'email_verified_at' => now(), // Auto-verifiziert durch Einladung ]); // 3. Weise Rolle zu $user->assignRole($this->invitation->role); // 4. Markiere Einladung als akzeptiert $this->invitation->markAsAccepted($partner); // 5. Logge User ein Auth::login($user); \DB::commit(); // 6. Weiterleitung zum Setup-Wizard session()->flash('message', __('Willkommen bei B2In! Vervollständigen Sie nun Ihr Profil.')); $this->redirect(route('partner.setup.wizard'), navigate: true); } catch (\Exception $e) { \DB::rollBack(); $this->addError('email', __('Fehler beim Erstellen des Kontos: ') . $e->getMessage()); } } }; ?>
{{-- Header --}}
@include('partials.logo-head')

{{ __('Willkommen, :company!', ['company' => $invitation->company_name]) }}

{{ __('Erstellen Sie Ihr persönliches Konto, um Ihr Partner-Profil einzurichten.') }}

{{-- Card mit Formular --}}
{{-- Partner Info Badge --}}
{{ __('Partner-Typ') }}
{{ $invitation->role?->display_name ?? $invitation->role?->name }}
{{-- Name Felder --}}
{{ __('Ihr Vorname') }} * @error('firstName') {{ $message }} @enderror {{ __('Ihr Nachname') }} * @error('lastName') {{ $message }} @enderror
{{-- E-Mail (gesperrt) --}} {{ __('E-Mail-Adresse') }} {{ __('Diese E-Mail-Adresse wurde in der Einladung festgelegt und kann nicht geändert werden.') }} @error('email') {{ $message }} @enderror {{-- Passwort --}}
{{ __('Passwort festlegen') }} * @error('password') {{ $message }} @enderror {{ __('Passwort bestätigen') }} * @error('password_confirmation') {{ $message }} @enderror
{{-- AGB Checkbox --}}
{{ __('Ich akzeptiere die') }} {{ __('AGB') }} {{ __('und') }} {{ __('Datenschutzbestimmungen') }}.
@error('acceptTerms') {{ $message }} @enderror
{{-- Error Alert --}} {{-- Submit Button --}}
{{ __('Konto erstellen & Setup starten') }} {{ __('Wird erstellt...') }}
{{-- Footer Hinweis --}}

{{ __('Diese Einladung ist gültig bis zum') }} @if($invitation->expires_at) {{ $invitation->expires_at->format('d.m.Y H:i') }} {{ __('Uhr') }}. @else {{ __('unbegrenzt') }} {{ __('Uhr') }}. @endif