printshopcreator/.mimocode/plans/1783597417429-calm-comet.md
Thomas Peterson 77968d24fc
Some checks failed
Gitea Actions / Run-Tests-On-Amd64 (push) Failing after 17m53s
Gitea Actions / Merge (push) Failing after 1s
Gitea Actions / Run-Tests-On-Arm64 (push) Has been cancelled
auftragsdetails
2026-07-14 17:04:29 +02:00

179 lines
8.2 KiB
Markdown

# Plan: ContactBundle Tailwind-Migration + Passwort-Reset
## Übersicht
Das ContactBundle (Kundenbereich) wird von Bootstrap 5 auf Tailwind CSS umgestellt, analog zur SettingsBundle-Referenz. Das Passwort-Feld wird aus dem Edit-Formular entfernt (bleibt im Create-Formular) und durch eine separate "Passwort neu setzen"-Seite ersetzt.
## Aktueller Stand
- **Bereits Tailwind**: `list/index.html.twig`, `edit/delete.html.twig`
- **Noch Bootstrap**: `edit/edit.html.twig`, `edit/create.html.twig`, `edit/anonymisieren.html.twig`, `addressdetail/*`, `addressimport/*`, `upload/deleteAll.html.twig`
- **Base Template**: `backend_tailwind_base.html.twig` (Tailwind) statt `backend_base.html.twig` (Bootstrap)
- **Form Theme**: `tailwind_formtheme.html.twig`
---
## Phase 1: Passwort-Feld entfernen + Reset-Seite erstellen
### 1.1 Passwort-Feld nur aus Edit-Template entfernen
- **Edit-Template**: `Resources/views/backend/edit/edit.html.twig` (Zeilen ~91-107) - Passwort-Block mit data-pw-wrap entfernen
- **Create-Template**: Passwort-Feld BLEIBT erhalten (Neuanlage mit Passwort möglich)
- **ContactType.php**: `->add('password', ...)` bleibt (wird von Create noch benötigt)
### 1.2 Passwort-Logik im EditController
- Bestehende Logik bleibt: `if ($form->get('password')->getData() !== null) { ... }` (Zeilen ~347-349)
- Wird nur noch beim Create aufgerufen, da Edit das Feld nicht mehr hat
### 1.3 Neue "Passwort neu setzen"-Seite erstellen
#### Controller-Action in EditController hinzufügen
**Datei**: `Controller/Backend/EditController.php`
- Neue Action `resetPasswordAction(Request $request, Contact $contact, DocumentManager $dm)`
- Route: `/backend/contact/edit/reset-password/{uuid}`
- Name: `psc_shop_contact_backend_reset_password`
- **GET**: Zeigt Formular mit Passwort-Eingabefeld (mit Show/Hide Toggle)
- **POST**: Hasht das eingegebene Passwort mit `password_hash(PASSWORD_DEFAULT)` und speichert es
- Zeigt nach erfolgreichem Speichern eine Bestätigung
#### Neues Template erstellen
**Datei**: `Resources/views/backend/edit/reset_password.html.twig`
- Extends `backend_tailwind_base.html.twig`
- Formular mit Passwort-Eingabefeld (mit Show/Hide Toggle)
- Speichern-Button
- Bestätigungsmeldung nach erfolgreichem Speichern
- Zurück-Button zum Kunden
- Styling analog zu `delete.html.twig` (Karte mit Kopfzeile)
### 1.4 "Passwort neu setzen"-Button in Edit-Formular
**Datei**: `Resources/views/backend/edit/edit.html.twig` (nach Tailwind-Migration)
- Statt Passwort-Feld: Button "Passwort neu setzen" der zur Reset-Seite führt
- Styling: `inline-flex items-center gap-1.5 px-3 py-2 rounded-sm text-sm font-medium text-gray-700 bg-white border border-gray-300 hover:bg-gray-50 shadow-sm`
---
## Phase 2: edit.html.twig Tailwind-Migration (1746 Zeilen)
### 2.1 Base-Template wechseln
- `{% extends 'backend_base.html.twig' %}``{% extends 'backend_tailwind_base.html.twig' %}`
- Form-Theme: `{% form_theme form ... %}` auf `tailwind_formtheme.html.twig` setzen
### 2.2 Seitenstruktur
```
{% block header %}
Titel + Aktionsbuttons (Speichern, Löschen, Anonymisieren)
{% endblock %}
{% block body %}
<div class="w-full">
Tab-Navigation (sidebar links) + Tab-Inhalte (rechts)
</div>
{% endblock %}
```
### 2.3 Tab-System (aus SettingsBundle übernehmen)
- Tab-Sidebar: `tab-group flex-none md:flex w-full`
- Tab-Links: `tab-link flex items-center text-sm px-4 py-2 relative`
- Tab-Inhalte: `tab-content w-full text-stone-500 text-sm hidden/block`
### 2.4 Tabs die migriert werden müssen
1. **Allgemein** - Username, Email, Enable, Level, Shops, PriceFactor
2. **Adressdaten** - Adresstabelle (existierende Tailwind-Tabelle nutzen)
3. **Individualisierung** - Custom fields
4. **Kalkulationsvariablen** - Preisanpassungen
5. **Variablenfelder** - basketfield1/2, Freefields
6. **Zugriffsrechte** - Rollen, Berechtigungen
7. **Erweitert** - Zusätzliche Einstellungen
8. **Plugin-Tabs** - Dynamisch aus Plugin-System
### 2.5 Bootstrap → Tailwind Klassen-Mapping
| Bootstrap | Tailwind |
|-----------|----------|
| `panel panel-default > header/body` | `rounded-md border bg-white px-7.5 py-6 shadow-lg` |
| `row > col-md-*` | `flex flex-wrap > w-full lg:w-6/12 px-4` |
| `form-control` | `border-1 px-3 py-3 bg-white rounded text-sm shadow` |
| `form-control-label` | `block uppercase text-xs font-bold mb-2` |
| `btn btn-primary` | `bg-psc-500 hover:bg-psc-600 text-white rounded-sm px-4 py-1` |
| `btn btn-danger` | `bg-red-600 hover:bg-red-700 text-white rounded-sm px-4 py-2` |
| `btn btn-info` | `bg-blue-600 hover:bg-blue-700 text-white rounded-sm px-4 py-2` |
| `nav nav-pills > nav-item > nav-link` | `tab-link flex items-center text-sm px-4 py-2 relative` |
| `table table-striped` | `min-w-full text-sm` mit `hover:bg-gray-50` |
| `badge bg-success/danger` | `text-green-600` / `text-red-600` |
| `collapse` | Alpine.js `x-show` oder `hidden` Klasse |
### 2.6 JavaScript anpassen
- AJAX Username-Check: Muss weiter funktionieren
- Tab-Switching: Bereits in `backend_tailwind_base.html.twig` implementiert
- jQuery durch Vanilla JS/Alpine.js ersetzen wo nötig
---
## Phase 3: create.html.twig Tailwind-Migration (1617 Zeilen)
- Fast identisch zu edit.html.twig
- Keine Adresstabelle, kein Change-Log
- Keine Plugin-Tabs
- Preis-Tab (priceFactor) vorhanden
- Gleiche Bootstrap → Tailwind Konvertierung
---
## Phase 4: Weitere Templates migrieren
### 4.1 anonymisieren.html.twig (38 Zeilen)
- Analog zu `delete.html.twig` (bereits Tailwind)
- Bestätigungsdialog mit Ja/Nein Buttons
### 4.2 addressdetail/edit.html.twig (320 Zeilen)
- Formularfelder: type, UUID, homepage, sort, email, KundenNr, company, salutation, name, street, zip, phone, fax, mobile, ustid, steuerid, lid, zusatz1/2
- Change-Log Tabelle
- 2-Spalten Layout mit `flex flex-wrap`
### 4.3 addressdetail/create.html.twig (296 Zeilen)
- Wie edit aber ohne Change-Log
### 4.4 addressdetail/delete.html.twig (40 Zeilen)
- Analog zu bestehender delete.html.twig
### 4.5 addressimport/step1-3.html.twig (39+86+41 Zeilen)
- Step 1: Datei-Upload
- Step 2: Spalten-Mapping
- Step 3: Bestätigung
### 4.6 upload/deleteAll.html.twig (74 Zeilen)
- Tabelle mit Uploads + Bestätigung
---
## Betroffene Dateien (Zusammenfassung)
### Zu bearbeiten:
1. `src/PSC/Shop/ContactBundle/Controller/Backend/EditController.php` - Reset-Action hinzufügen
2. `src/PSC/Shop/ContactBundle/Resources/views/backend/edit/edit.html.twig` - Tailwind + Passwort-Button statt Passwort-Feld
3. `src/PSC/Shop/ContactBundle/Resources/views/backend/edit/create.html.twig` - Tailwind (Passwort-Feld bleibt)
4. `src/PSC/Shop/ContactBundle/Resources/views/backend/edit/anonymisieren.html.twig` - Tailwind
5. `src/PSC/Shop/ContactBundle/Resources/views/backend/addressdetail/edit.html.twig` - Tailwind
6. `src/PSC/Shop/ContactBundle/Resources/views/backend/addressdetail/create.html.twig` - Tailwind
7. `src/PSC/Shop/ContactBundle/Resources/views/backend/addressdetail/delete.html.twig` - Tailwind
8. `src/PSC/Shop/ContactBundle/Resources/views/backend/addressimport/step1.html.twig` - Tailwind
9. `src/PSC/Shop/ContactBundle/Resources/views/backend/addressimport/step2.html.twig` - Tailwind
10. `src/PSC/Shop/ContactBundle/Resources/views/backend/addressimport/step3.html.twig` - Tailwind
11. `src/PSC/Shop/ContactBundle/Resources/views/backend/upload/deleteAll.html.twig` - Tailwind
### Neu erstellen:
12. `src/PSC/Shop/ContactBundle/Resources/views/backend/edit/reset_password.html.twig` - Neue Reset-Seite
### NICHT bearbeiten:
- `src/PSC/Shop/ContactBundle/Form/Backend/General/ContactType.php` - bleibt unverändert (Passwort-Feld für Create benötigt)
---
## Verifikation
1. **Kundenliste**: `/backend/contact/list/index` laden - funktioniert bereits
2. **Kunde bearbeiten**: `/backend/contact/edit/edit/{uuid}` - Tailwind-Layout prüfen
3. **Kunde anlegen**: `/backend/contact/edit/create` - Tailwind-Layout prüfen
4. **Passwort-Reset**: "Passwort neu setzen" Button klicken → Reset-Seite → Neues Passwort anzeigen
5. **Adresse bearbeiten**: `/backend/contact/address/detail/edit/{uuid}` - Tailwind prüfen
6. **Adresse anlegen**: `/backend/contact/address/detail/create/{uuid}` - Tailwind prüfen
7. **Löschen/Anonymisieren**: Bestätigungsdialoge prüfen
8. **Tabs**: Alle Tabs durchklicken, Inhalte sichtbar/versteckt korrekt
9. **Formulare speichern**: Alle Formulare testweise absenden