20-02-2026
This commit is contained in:
parent
a8b395e20d
commit
a00c42e770
252 changed files with 28785 additions and 8907 deletions
15
dev/2026-02-19/Tasks.md
Normal file
15
dev/2026-02-19/Tasks.md
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
Hier beschreibe ich eine weitere Aufgabe, die umgesetzt werden muss.
|
||||
|
||||
In dem Salecenter Gibt es einen Wizzard, der für die Registrierung für Berater, Notwendig ist.
|
||||
Jeder Berater kommt über einen Link und gelangt zu einem Registrierungsnummer Art, wo er unterschiedliche Schritte Akzeptierung, der AGBs persönliche Daten hochladen von Personaldaten zu Verifizierung in den ersten Schritten umsetzen muss. Sind seine Daten vollständig angegeben sendet er über einen Button, einen request, der eine E-Mail für den Admin zur Freigabe auslöst. Die Freigabe ist beim der User Bearbeitung mit Extrafelder für den Admin versehen. Ist alles in Ordnung kann der Admin den Berater freischalten und der Berater bekommt eine E-Mail, dass er freigeschaltet ist. Nach der Freischaltung kommt er in den allerletzten Schritt des OSA des Registrierungs Wizzard, Wo er die Wahl hat, eine Bestellung auszuführen. Um diese Bestellung geht es jetzt. Diese muss angepasst werden. Unter den Produkten gibt es Anlagen, die genau für diesen Wizard gemacht sind. Hier gibt es eine Spalte Show on wo hinterlegt wird, wo das Produkt angezeigt wird. Es gibt dort die Einträge Registrierung, Berater oder on Boarding Berater dann werden die Produkte in genau diesem Prozess angezeigt und sind auswählbar.
|
||||
|
||||
Bisher ist es so, dass ein Versand Preis berechnet wird, welches mit einem Kompensation Produkt ein wenig ausgeglichen wird. Diese fällt in Zukunft weg d.h. es gibt einmal ein kleines Standardpaket das ist nur die Mitgliedschaft. Diese hat auch keine Versandkosten da sie auch ein Gewicht von null hat alles, was null hat, bekommt keine Versandkosten das ist das Paket für die reine Mitgliedschaft produkt ID 35. Handelt sich um ein Jahres Mitgliedschaft, welches dann später entsprechend kommuniziert wird.
|
||||
|
||||
zusätzlich gibt es Starter Pakete. Diese Pakete beinhalten ein umfangreiches Set an Produkten, Rabattiert und zusätzlich kann man schon mit einem Paket in den nächsten Rang aufsteigen.
|
||||
Aktuell ist es so, dass man die Jahres Mitgliedschaft buchen muss und ein Starterpaket optional buchen kann. Beim Starterpaket werden dann auch Versandkosten erhoben und genau hier kommt jetzt die Änderung. Es wird nur noch eine direkte Auswahl geben. Zwischen der reinen Mitgliedschaft und 2,3 Starterpaket und in dem Starterpaket Preis ist gleichzeitig ein Jahres Mitgliedschaft enthalten und auch die Versandkosten d.h. die Versandkosten müssen immer null sein das ist eine Ausnahme für die Berater, die sonst immer Versandkosten zahlen mit einem Kombination Produkt.
|
||||
|
||||
Jetzt gilt es, diese Änderungen so einzubauen, dass wir es einmal über die Produkte entsprechend schalten können und das auch am Ende der Wizard nur die Auswahl zwischen den Produkten erlaubt. Es soll noch etwas weiteres hinzu wird nur dass die reine Mitgliedschaft genommen soll, wenn der Button gedrückt wird vorerst eine Meldung kommen in einem moralen Fenster, in dem so etwas drin steht wie Achtung mit einem Starterpaket erhältst du ein Rabatt von XY und diese Starterpaket ist nur einmalig bei der Bestellung Registrierung möglich zu kaufen möchtest du jetzt wirklich ohne ein Starterpaket nur die reine Mitgliedschaft abschließen? Dieser Text mit in die sprach dateien resources/lang
|
||||
|
||||
Controller Wizzard -> app/Http/Controllers/WizardController.php
|
||||
Controller Produkte -> app/Http/Controllers/ProductController.php
|
||||
Controller Berater / Leads für die Admin Freigabe app/Http/Controllers/LeadController.php function released
|
||||
204
dev/2026-02-19/plan-wizard-starterpaket.md
Normal file
204
dev/2026-02-19/plan-wizard-starterpaket.md
Normal file
|
|
@ -0,0 +1,204 @@
|
|||
# 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
|
||||
|
||||
1. **Eine einzige Radio-Button-Auswahl** zwischen:
|
||||
|
||||
- Reine Jahresmitgliedschaft (Produkt-ID 35, Gewicht 0 = keine Versandkosten)
|
||||
- 2-3 Starterpakete (inkl. Mitgliedschaft + Versandkosten = 0)
|
||||
|
||||
2. **Neues DB-Feld `free_shipping_consultant`** auf der Produkttabelle
|
||||
|
||||
- Boolean-Checkbox im Admin: "Versandkostenfrei für Berater"
|
||||
- Wird in der Versandkostenberechnung (Yard) berücksichtigt
|
||||
|
||||
3. **Warn-Modal** wenn nur Mitgliedschaft gewählt wird:
|
||||
|
||||
- Hinweis auf Rabatt und Einmaligkeit des Starterpaket-Angebots
|
||||
|
||||
4. **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_consultant` mit `default(false)` nach `no_free_shipping`
|
||||
- Down-Migration entfernt die Spalte korrekt
|
||||
|
||||
#### 2. Product Model - ERLEDIGT
|
||||
|
||||
- **Datei:** `app/Models/Product.php`
|
||||
- `free_shipping_consultant` in `$casts` als `'bool'` hinzugefügt (Zeile 192)
|
||||
- `free_shipping_consultant` in `$fillable` hinzugefü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 der `update()`-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 = true` haben
|
||||
- Gibt `false` zurück wenn der Warenkorb leer ist
|
||||
- In `calculateShippingPrice()` (Zeile 260): Bedingung erweitert:
|
||||
```php
|
||||
if ($this->allItemsFreeShippingConsultant() || $this->weight() == 0) {
|
||||
```
|
||||
- Wenn alle Items `free_shipping_consultant` haben ODER Gewicht = 0 -> Versandkosten = 0
|
||||
|
||||
#### 6. WizardController - ERLEDIGT
|
||||
|
||||
- **Datei:** `app/Http/Controllers/WizardController.php`
|
||||
- In `storePayment()` (Zeile 607): `free_shipping_consultant` wird beim Hinzufügen zum Warenkorb als Cart-Option übergeben:
|
||||
```php
|
||||
'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 `#starterWarningModal` mit 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`
|
||||
- **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-price` und `calculate_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`, default `false`, nach `free_shipping_consultant`
|
||||
- **Product Model:** `$casts` + `$fillable` ergä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 == 35` ersetzt 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-dark` mit `fa-exclamation-triangle` Icon
|
||||
- **Border:** `border-warning` am Modal-Content
|
||||
- **Body:** Inhalt in `alert alert-warning` Box mit `fa-info-circle` Icon
|
||||
- **Footer:** "Zurück"-Button als `btn-warning` (auffällig), "Bestätigen" als `btn-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-info` Box mit `fa-info-circle` Icon
|
||||
- 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 @endif` wurde 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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue