9.5 KiB
9.5 KiB
Plan: Wizard Registrierung - Starterpaket-Auswahl umbauen
Ausgangslage
Der letzte Schritt des Berater-Registrierungs-Wizards hat aktuell:
- Mitgliedschaften als Radio-Buttons (show_on 7+8)
- Onboarding-Produkte als optionale Checkboxen (show_on 9)
- Kompensationsprodukt für Versandkosten
Was sich ändert
-
Eine einzige Radio-Button-Auswahl zwischen:
- Reine Jahresmitgliedschaft (Produkt-ID 35, Gewicht 0 = keine Versandkosten)
- 2-3 Starterpakete (inkl. Mitgliedschaft + Versandkosten = 0)
-
Neues DB-Feld
free_shipping_consultantauf der Produkttabelle- Boolean-Checkbox im Admin: "Versandkostenfrei für Berater"
- Wird in der Versandkostenberechnung (Yard) berücksichtigt
-
Warn-Modal wenn nur Mitgliedschaft gewählt wird:
- Hinweis auf Rabatt und Einmaligkeit des Starterpaket-Angebots
-
Onboarding-Checkboxen entfallen - alles über Radio-Buttons
Betroffene Dateien
| Datei | Änderung |
|---|---|
database/migrations/... |
Neues Feld free_shipping_consultant |
app/Models/Product.php |
fillable + casts |
app/Repositories/ProductRepository.php |
Checkbox-Handling |
resources/views/admin/product/form.blade.php |
Admin-Checkbox |
app/Services/Yard.php |
Versandkosten-Logik |
app/Http/Controllers/WizardController.php |
Query + storePayment |
resources/views/user/wizard/_payment.blade.php |
UI-Umbau + Modal |
resources/lang/{de,en,es}/register.php |
Übersetzungen |
Umsetzungsstatus (Stand: 2026-02-19)
ERLEDIGT - Alle geplanten Änderungen sind umgesetzt
1. Migration free_shipping_consultant - ERLEDIGT
- Datei:
database/migrations/2026_02_19_120000_add_free_shipping_consultant_to_products_table.php - Boolean-Feld
free_shipping_consultantmitdefault(false)nachno_free_shipping - Down-Migration entfernt die Spalte korrekt
2. Product Model - ERLEDIGT
- Datei:
app/Models/Product.php free_shipping_consultantin$castsals'bool'hinzugefügt (Zeile 192)free_shipping_consultantin$fillablehinzugefügt (Zeile 216)
3. ProductRepository Checkbox-Handling - ERLEDIGT
- Datei:
app/Repositories/ProductRepository.php $data['free_shipping_consultant'] = isset($data['free_shipping_consultant']) ? 1 : 0;in derupdate()-Methode (Zeile 30)
4. Admin Produkt-Formular - ERLEDIGT
- Datei:
resources/views/admin/product/form.blade.php - Neue Checkbox-Sektion "Versandkostenfrei für Berater (FcB.)" eingebaut (Zeilen 124-132)
- Text: "Versandkosten für Berater sind bei diesem Produkt immer 0 (z.B. Starterpakete)."
5. Yard.php Versandkosten-Logik - ERLEDIGT
- Datei:
app/Services/Yard.php - Neue Methode
allItemsFreeShippingConsultant()hinzugefügt (Zeilen 419-429)- Prüft ob alle Items im Warenkorb
free_shipping_consultant = truehaben - Gibt
falsezurück wenn der Warenkorb leer ist
- Prüft ob alle Items im Warenkorb
- In
calculateShippingPrice()(Zeile 260): Bedingung erweitert:if ($this->allItemsFreeShippingConsultant() || $this->weight() == 0) {- Wenn alle Items
free_shipping_consultanthaben ODER Gewicht = 0 -> Versandkosten = 0
- Wenn alle Items
6. WizardController - ERLEDIGT
- Datei:
app/Http/Controllers/WizardController.php - In
storePayment()(Zeile 607):free_shipping_consultantwird beim Hinzufügen zum Warenkorb als Cart-Option übergeben:'free_shipping_consultant' => $product->free_shipping_consultant - Die Product-Queries in
create(),register(),payment()laden weiterhin show_on 7, 8, 9 - das ist korrekt, da die Produkte über show_on gesteuert werden
7. Wizard Payment Blade (UI-Umbau) - ERLEDIGT
- Datei:
resources/views/user/wizard/_payment.blade.php - Einheitliche Radio-Button-Auswahl: Alle Produkte werden als Radio-Buttons (
switchers-package-wizard) dargestellt - keine separaten Checkboxen mehr für Onboarding-Produkte - Warn-Modal implementiert (Zeilen 78-96):
- Bootstrap Modal
#starterWarningModalmit Titel, Text, Zurück-Button und Bestätigen-Button - Übersetzungsschlüssel:
register.starter_warning_title,register.starter_warning_text,register.starter_warning_back,register.starter_warning_confirm
- Bootstrap Modal
- JavaScript-Logik (Zeilen 98-129):
data-is-membership-only="1"auf Produkt-ID 35 (reine Mitgliedschaft)- Submit-Button (
#btn-wizard-submit) prüft ob reine Mitgliedschaft gewählt ist - Falls ja: Modal wird angezeigt statt direkt abzusenden
- Bestätigen-Button im Modal (
#btn-confirm-membership-only) schließt Modal und submittet das Formular - Preisberechnung über
data-priceundcalculate_package_payment()funktioniert
- Standard-Auswahl: Der 2. Eintrag (erstes Starterpaket) ist per Default vorgewählt (
@if($counter == 2) checked @endif)
8. Sprachdateien - ERLEDIGT
- DE (
resources/lang/de/register.php):starter_warning_title=> 'Achtung'starter_warning_text=> 'Mit einem Starterpaket erhältst Du einen Rabatt und kannst direkt in den nächsten Rang aufsteigen. Dieses Angebot ist nur einmalig bei der Registrierung verfügbar. Möchtest Du wirklich ohne Starterpaket nur die reine Mitgliedschaft abschließen?'starter_warning_back=> 'Zurück zur Auswahl'starter_warning_confirm=> 'Ja, nur Mitgliedschaft'
- EN (
resources/lang/en/register.php):starter_warning_title=> 'Attention'starter_warning_text=> 'With a starter package you receive a discount and can advance directly to the next rank. This offer is only available once during registration. Do you really want to proceed with only the membership without a starter package?'starter_warning_back=> 'Back to selection'starter_warning_confirm=> 'Yes, membership only'
- ES (
resources/lang/es/register.php):starter_warning_title=> 'Atención'starter_warning_text=> 'Con un paquete de inicio recibes un descuento y puedes ascender directamente al siguiente rango. Esta oferta solo está disponible una vez durante el registro. ¿Realmente deseas continuar solo con la membresía sin un paquete de inicio?'starter_warning_back=> 'Volver a la selección'starter_warning_confirm=> 'Sí, solo membresía'
Nachbesserung 1: Modal-Styling + dynamische Mitgliedschaft-Erkennung (2026-02-19)
Problem
- Modal war optisch unauffällig (Standard-Bootstrap, keine Warn-Farben)
- Produkt-ID 35 war im Blade hardcoded (
$product->id == 35)
Lösung
9. Neues DB-Feld is_membership_only - ERLEDIGT
- Migration:
database/migrations/2026_02_19_140000_add_is_membership_only_to_products_table.php- Boolean
is_membership_only, defaultfalse, nachfree_shipping_consultant
- Boolean
- Product Model:
$casts+$fillableergänzt - ProductRepository: Checkbox-Handling in
update()ergänzt - Admin-Formular: Neue Checkbox "Reine Mitgliedschaft (MoP.)" mit Text: "Dieses Produkt ist eine reine Mitgliedschaft ohne Starterpaket (Warnung im Wizard)."
10. Hardcoded ID entfernt - ERLEDIGT
- Blade
_payment.blade.php:$product->id == 35ersetzt durch$product->is_membership_only - Jetzt dynamisch: Jedes Produkt mit aktivierter Checkbox löst die Warnung aus
11. Modal-Styling aufgewertet - ERLEDIGT
- Header:
bg-warning text-darkmitfa-exclamation-triangleIcon - Border:
border-warningam Modal-Content - Body: Inhalt in
alert alert-warningBox mitfa-info-circleIcon - Footer: "Zurück"-Button als
btn-warning(auffällig), "Bestätigen" alsbtn-outline-secondary(dezent)
Nachbesserung 2: Info-Box + Validierung ohne Vorauswahl (2026-02-19)
Problem
- Ein Produkt war per Default vorausgewählt (2. Eintrag) - Nutzer hat das entfernt
- Kein Hinweistext, der erklärt was zu tun ist
- Keine Fehlermeldung wenn Submit ohne Auswahl geklickt wird
Lösung
12. Info-Alert oberhalb der Produkttabelle - ERLEDIGT
- Blade
_payment.blade.php:alert alert-infoBox mitfa-info-circleIcon - Text erklärt die Wahlmöglichkeiten (Mitgliedschaft vs. Starterpaket mit Vorteilen)
- Übersetzungsschlüssel:
register.wizard_package_info
13. Validierung bei fehlender Auswahl - ERLEDIGT
- Fehlermeldung: Verstecktes
alert alert-danger(#wizard-selection-error) unter der Tabelle - JS-Logik: Submit prüft ob ein Radio-Button gewählt ist:
- Falls nein: Fehlermeldung einblenden + roter Rand um Tabelle + Scroll zum Fehler
- Fehlermeldung verschwindet sobald ein Produkt gewählt wird
- Übersetzungsschlüssel:
register.wizard_no_selection
14. Keine Vorauswahl mehr - ERLEDIGT
@if($counter == 2) checked @endifwurde vom Nutzer entfernt- Kein Produkt ist vorausgewählt, Nutzer muss aktiv wählen
15. Sprachdateien ergänzt - ERLEDIGT
- DE:
wizard_package_info+wizard_no_selection - EN:
wizard_package_info+wizard_no_selection - ES:
wizard_package_info+wizard_no_selection
Offene Punkte / Nächste Schritte
Testen
- Wizard ohne Auswahl: Fehlermeldung muss rot erscheinen + Tabelle rot umrandet
- Wizard mit Auswahl: Fehlermeldung verschwindet, Submit funktioniert
- Wizard mit reiner Mitgliedschaft: Warning-Modal erscheint
- Wizard mit Starterpaket: Direkt zum Checkout
- Info-Box in allen Sprachen prüfen (de, en, es)