loadRegistrationCode(); $this->roleSlug = session('registration_slug') ?? null; if (!$this->registrationCode || !$this->roleKey) { session()->flash('message', __('Registrierungscode fehlt oder ist ungültig. Bitte starten Sie erneut über den QR-Link.')); $this->redirect(route('registration.landing', ['role' => $this->roleSlug]), navigate: true); return; } // Optional: E-Mail vorbelegen, wenn im Code gespeichert (meta) if ($this->registrationCode->metadata['email'] ?? false) { $this->email = $this->registrationCode->metadata['email']; } } public function createAccount(): void { $this->loadRegistrationCode(); if (!$this->registrationCode || !$this->roleKey || !$this->registrationCode->isAvailable()) { $this->addError('registration_code', __('Registrierungscode fehlt oder ist ungültig. Bitte starten Sie erneut über den QR-Link.')); return; } $this->validate([ 'firstName' => 'required|string|max:255', 'lastName' => 'required|string|max:255', 'email' => 'required|email|max:255|unique:users,email', 'password' => 'required|string|min:8|confirmed', 'acceptTerms' => 'accepted', ], [ 'firstName.required' => __('Bitte geben Sie Ihren Vornamen ein.'), 'lastName.required' => __('Bitte geben Sie Ihren Nachnamen ein.'), 'email.required' => __('Bitte geben Sie Ihre E-Mail-Adresse ein.'), 'email.email' => __('Bitte geben Sie eine gültige E-Mail-Adresse ein.'), 'email.unique' => __('Diese E-Mail-Adresse ist bereits registriert.'), 'password.required' => __('Bitte vergeben Sie ein Passwort.'), 'password.min' => __('Das Passwort muss mindestens 8 Zeichen haben.'), 'password.confirmed' => __('Die Passwörter stimmen nicht überein.'), 'acceptTerms.accepted' => __('Bitte akzeptieren Sie die AGB und Datenschutzbestimmungen.'), ]); try { \DB::beginTransaction(); // Parent-Partner-ID ermitteln (Makler oder Händler, für Kunden) $parentPartnerId = null; if ($this->registrationCode->assigned_to_code_id) { $assignedCode = RegistrationCode::with('partner')->find($this->registrationCode->assigned_to_code_id); if ($assignedCode && $assignedCode->partner_id) { $parentPartnerId = $assignedCode->partner_id; } } // Aktuelle Marke/Theme ermitteln (aus Domain) $brand = config('app.theme', 'b2in'); // Partner anlegen (minimal, wird im Wizard vervollständigt) $partnerName = __('roles.' . $this->registrationCode->role . ' :code', ['code' => $this->registrationCode->code]); $partner = Partner::create([ 'company_name' => $partnerName, 'slug' => Str::slug($partnerName . '-' . $this->registrationCode->id), 'type' => $this->roleKey, 'brand' => $brand, 'parent_partner_id' => $parentPartnerId, 'is_active' => false, ]); // User anlegen $user = User::create([ 'partner_id' => $partner->id, 'name' => trim($this->firstName . ' ' . $this->lastName), 'display_name' => $this->registrationCode->name ?? null, // Name aus Registrierungscode übernehmen 'email' => $this->email, 'password' => Hash::make($this->password), 'email_verified_at' => null, // E-Mail muss verifiziert werden ]); // Rolle zuweisen if ($role = Role::whereRaw('LOWER(REPLACE(name, "-", "")) = ?', [strtolower($this->roleKey)])->first()) { $user->assignRole($role); } // Registrierungscode verbrauchen $this->registrationCode->markUsed($user); // E-Mail-Verifizierung senden $user->sendEmailVerificationNotification(); session()->forget(['registration_code_id', 'registration_role', 'registration_slug']); \DB::commit(); // Weiterleitung zur Danke-Seite (User ist NICHT eingeloggt) $this->redirect(route('registration.thank-you', ['email' => $user->email]), navigate: true); } catch (\Exception $e) { \DB::rollBack(); $this->addError('email', __('Fehler beim Erstellen des Kontos: ') . $e->getMessage()); } } protected function loadRegistrationCode(): void { if ($this->registrationCode) { return; } $codeId = session('registration_code_id'); $role = session('registration_role'); if (!$codeId || !$role) { return; } $this->registrationCode = RegistrationCode::where('id', $codeId) ->where('role', $role) ->first(); $this->roleKey = $role; // Falls Rolle (z.B. customer) nicht unterstützt, Session leeren if (!$this->roleKey || !$this->registrationCode?->isAvailable()) { session()->forget(['registration_code_id', 'registration_role', 'registration_slug']); $this->registrationCode = null; $this->roleKey = null; } } }; ?>
{{-- Header --}}

{{ __('Konto anlegen') }}

{{ __('Zugang erstellen & Setup starten') }}

{{ __('Mit Ihrem Registrierungscode haben Sie den Zugang freigeschaltet. Legen Sie jetzt Ihr persönliches Konto an.') }}

@svg('heroicon-o-key', 'h-5 w-5 text-accent-600')
{{ __('Code bestätigt') }}
{{ __('Fortschritt: Konto anlegen, danach Setup-Wizard abschließen.') }}
@error('firstName')
{{ $message }}
@enderror
@error('lastName')
{{ $message }}
@enderror
@error('email')
{{ $message }}
@enderror
@error('password')
{{ $message }}
@enderror
@error('password_confirmation')
{{ $message }}
@enderror
{{ __('Ich akzeptiere die') }} {{ __('AGB') }} {{ __('und') }} {{ __('Datenschutzbestimmungen') }}.
@error('acceptTerms')
{{ $message }}
@enderror
@svg('heroicon-o-arrow-right-circle', 'h-5 w-5 text-lime-600')
{{ __('Verifizieren Sie Ihre E-Mail-Adresse') }}
{{ __('Nach erfolgreicher Registrierung erhalten Sie einen Verifizierungslink per E-Mail. Bitte klicken Sie auf den Link, um Ihre E-Mail-Adresse zu verifizieren.') }}
{{ __('Probleme? Bitte wenden Sie sich an Ihren Ansprechpartner oder den Support.') }}