6.7 KiB
6.7 KiB
Partner-Einladung & Setup-Wizard
Kurze Notizen zur aktuellen Einladungskette und dem Setup-Wizard, plus offene To-dos.
Ablauf Einladung
- Admin lädt Partner über
resources/views/livewire/admin/partners/invite.blade.phpein. - Gültigkeit wird im Formular gewählt (1–4 Wochen) und als
expires_atinPartnerInvitationgespeichert. - Einladungslink:
route('partner.invitation.accept', ['token' => $token]). - Zusätzliche Statusseiten:
/partner/invitation/expired/{token}und/partner/invitation/used/{token}.
Routen
/partner/invitation/{token}→ Volt-Komponentepartner.invitation-accept./partner/invitation/expired/{token}und/partner/invitation/used/{token}→ statische Blade-Views./partner/setup→ Volt-Komponentepartner.setup-wizard, geschützt mitauth-Middleware.
Setup-Wizard (partner.setup-wizard)
- Basisdaten: Partner wird über eingeloggten User geladen (
Auth::user()->partner_id); Rolle bestimmt Icon/Label. - Schritte je Partner-Typ:
- Retailer:
Stammdaten→Liefergebiete→Fertig. - Manufacturer:
Stammdaten→Marke anlegen→Fertig. - Estate-Agent (und Default):
Profil/Stammdaten→Fertig.
- Retailer:
- Schritt 1 (alle):
- Felder: Firmenname (pflicht), Logo-Upload (optional, 2 MB, jpg/png/webp), Kurzbeschreibung, Straße/PLZ/Stadt (pflicht), Website (optional, URL).
- Logo wird bei Upload in
public/partner-logosgespeichert; Partner wird mit Name/Beschreibung/Logo aktualisiert. - TODO im Code: Adresse noch separat speichern (Adresse aktuell nicht persistiert).
- Schritt 2 Retailer:
- Felder: Lieferradius km, Montageradius km (1–500, pflicht).
- Speichert
delivery_radius_kmundassembly_radius_kmim Partner; danach Abschluss.
- Schritt 2 Manufacturer:
- Felder: Markenname (pflicht), Markenlogo (optional, 2 MB), Markenbeschreibung.
- Speichert neue
Brandmit Slug aus Namen; Logo inpublic/brand-logos.
- Abschluss:
- Partner wird
is_active=true,setup_completed=true,setup_completed_at=now(). - Dashboard-Button; für Nicht-Makler CTA „Erstes Produkt anlegen“ (derzeit ohne Aktion).
- Partner wird
Offene To-dos / Beobachtungen
- Adresse persistieren (separates Modell/JSON), wird aktuell nur validiert.
- Website-Feld wird vorausgefüllt? momentan leer trotz vorhandener Partner-Daten.
- CTA „Erstes Produkt anlegen“ ohne Link/Action; Zielseite definieren.
- Hersteller: Slug-Kollision/Mehrmarken-Handling prüfen (derzeit einfacher
Str::slugmit create). - Estate-Agent: Gibt es spezifische Felder? Wizard zeigt nur Schritt 1 → Fertig; klären ob ausreichend.
QR-/Registrierungscode-Flow (neu)
- Öffentliche Landing unter
/reg/{role}aufb2in.test, Rollen-Codes:c= Kunde,e= Makler,m= Hersteller,r= Händler.- Gleiches Blade-Template, Inhalte/CTA dynamisch nach Role.
- QR-Codes enthalten nur den Link (
/reg/{role}), kein Code-Query. Der Code steht z.B. auf der Visitenkarte und wird manuell eingegeben. - Registrierungscode ist zwingend, wird einmalig eingelöst und danach als „verbraucht“ markiert.
- Validierter Code schaltet erst das passende Registrierungsformular frei (bestehender Flow wiederverwenden, kein zweites System).
- Rollen-spezifische Registrierung:
- Makler (
/reg/e): braucht gültige Makler-Nummer (einzigartig, vorab im System hinterlegt). - Kunde (
/reg/c): braucht gültige Kundennummer, die einem Makler zugeordnet ist; jeder Kunde muss einem Makler zugeordnet werden (Provisions-Tracking). - Händler (
/reg/r) und Hersteller (/reg/m): eigener Flow, ebenfalls mit einmaligem Code; Hersteller haben keine Kunden, Händler pflegen Sortiment und können Kundenzugänge verschaffen.
- Makler (
Vorschlag Datenmodell Codes (anzulegen)
- Tabelle
registration_codes(oder separatebroker_codes+customer_codes):code(unique),role(broker|customer|retailer|manufacturer),status(available|used|expired),partner_id(optional, z.B. für Händler/Hersteller),broker_id(für Kundennummern-Block),used_by_user_id(nullable),used_at,expires_at(optional),metadata(json für Notizen/Quelle).- Für Maklernummern:
role=broker,status=available, keinebroker_id. - Für Kundennummern:
role=customer,broker_idPflicht, damit Zuordnung bei Registrierung klar ist.
- Einlösung:
- Lookup
code+rolepassend zur Route. - Wenn
status != available→ Fehlermeldung. - Bei Erfolg: markiere
used, setzeused_at,used_by_user_id(nach erfolgreichem User-Create), ggf.partner_idkoppeln.
- Lookup
Nummernformat / Vergabe
- Format: 8-stellige Nummern mit optional vorangestelltem Buchstaben (Alias). Beispiele:
00100001,M00100001,K01102513. - Buchstabenpräfixe nur Alias (Marketing), intern immer über IDs verknüpfen; Code bleibt als Alias gespeichert.
- Nummern sind fortlaufend; Kundennummern werden blockweise einem Makler zugewiesen (z.B.
K01102510–K01102560= 50 Stück). - Ein Code kann nur einmal eingelöst werden und wird danach als „used“ markiert.
Umsetzung QR-/Reg-Landing (Stand)
- Neue Route
/reg/{role}(Volt) mit Rollen-Slugs:cKunde,eMakler,mHersteller,rHändler. - Gemeinsames Template
resources/views/livewire/reg/landing.blade.php, Inhalte dynamisch nach Rolle. - Eingabe und Prüfung des Registrierungscodes; Normalisierung (Leerzeichen/Bindestriche entfernt, uppercase).
- Valider Code (Status
available, Rolle passend) wird in Session abgelegt (registration_code_id,registration_role) und leitet zureg/create-accountweiter. Verbrauch/Markierung erfolgt beim Account-Create bzw. Wizard-Abschluss. - Neues Modell
App\Models\RegistrationCode+ Migrationregistration_codesmit Feldern für Status, Rolle, Broker-/Partner-Referenzen, Used-Infos.
Account-Create nach Code (neu)
- Route
/reg/create-account(Volt) nutztreg.create-account-Komponente. - Felder: Vorname, Nachname, E-Mail, Passwort + Bestätigung, AGB-Checkbox.
- Prüft Session-Code; mappt Rollen auf Partner-Typ (
broker→Estate-Agent,retailer→Retailer,manufacturer→Manufacturer; Customer aktuell nicht unterstützt). - Erstellt Partner (minimal), User, weist Rolle zu, markiert Code als verwendet, loggt ein, leitet in den Setup-Wizard.
Landing-/Flow-Idee
- Route/Controller/Volt für
/reg/{role}:- Zeigt Rolle-spezifischen Text und Eingabefeld „Registrierungscode“.
- Nach erfolgreicher Code-Validierung: Formular mit bestehenden Feldern je Rolle anzeigen (Reuse: bestehende Registrierung/Setup-Logik).
- Kopplung mit bestehendem Einladungssystem:
- Kein zweites System; nach Code-Check wird derselbe Registrierungspfad genutzt (User/Partner anlegen, Setup-Wizard etc.).
- To-do: Admin-Oberfläche bereitstellen, um Maklernummern und Kundennummern-Blöcke zu erzeugen und einem Makler zuzuweisen.