# Migration zu Multi-Dokumenttyp-Unterstützung ## Übersicht Diese Migration erweitert das SubtotalTitle-Modul von der ausschließlichen Unterstützung für Rechnungen auf: - ✅ **Rechnungen** (invoice/facture) - ✅ **Angebote** (propal) - ✅ **Kundenaufträge** (order/commande) ## Durchgeführte Änderungen ### 1. Datenbank-Schema (✅ Erledigt) **Datei:** `sql/llx_facture_lines_manager.sql` Neue Spalten zur Tabelle `llx_facture_lines_manager`: - `document_type` VARCHAR(20) - Art des Dokuments ('invoice', 'propal', 'order') - `fk_propal` INT(11) - Referenz auf Angebot - `fk_commande` INT(11) - Referenz auf Kundenauftrag - `fk_propaldet` INT(11) - Referenz auf Angebots-Zeile - `fk_commandedet` INT(11) - Referenz auf Auftrags-Zeile **Indizes** für bessere Performance hinzugefügt. ### 2. Modul-Konfiguration (✅ Erledigt) **Datei:** `core/modules/modSubtotalTitle.class.php` - Hooks erweitert: `invoicecard`, `propalcard`, `ordercard` - Beschreibung aktualisiert ### 3. Helper-Klasse (✅ Neu erstellt) **Datei:** `class/DocumentTypeHelper.class.php` Zentrale Klasse zur Verwaltung verschiedener Dokumenttypen: - `getTypeFromContext()` - Erkennt Typ aus Hook-Context - `getTypeFromObject()` - Erkennt Typ aus Dolibarr-Objekt - `getTableNames()` - Liefert DB-Tabellennamen für jeden Typ - `getContext()` - Liefert Hook-Context für jeden Typ ### 4. Hook-Implementierung (✅ Teilweise erledigt) **Datei:** `class/actions_subtotaltitle.class.php` Angepasste Methoden: - `formObjectOptions()` - Unterstützt alle 3 Dokumenttypen - `printObjectLine()` - Generisch für alle Typen - `formAddObjectLine()` - Generisch für alle Typen - `syncManagerTable()` - Generisch für alle Typen - `renderSectionDropdown()` - Generisch für alle Typen - `getNextLineOrder()` - Generisch für alle Typen **WICHTIG:** Die Methode `renderAllPendingSections()` wurde teilweise angepasst, benötigt aber noch weitere Überprüfung. ### 5. JavaScript (⚠️ Teilweise erledigt) **Datei:** `js/subtotaltitle.js` Hinzugefügt: - `getDocumentType()` - Erkennt Dokumenttyp aus URL **TODO:** JavaScript-Code muss noch vollständig generisch gemacht werden. ### 6. AJAX-Dateien (❌ Noch zu erledigen) Alle AJAX-Dateien im Verzeichnis `ajax/` müssen angepasst werden: - `create_section.php` - `move_section.php` - `delete_section.php` - `rename_section.php` - `create_textline.php` - `edit_textline.php` - `delete_textline.php` - `assign_last_product.php` - `move_product.php` - `remove_from_section.php` - `reorder_all.php` - `toggle_subtotal.php` - `mass_delete.php` - `sync_to_facturedet.php` - `get_sections.php` - `get_textlines.php` - `get_line_orders.php` **Anpassung:** Jede Datei muss: 1. `document_type` Parameter empfangen/erkennen 2. `DocumentTypeHelper` verwenden 3. Korrekte FK-Spalten verwenden (fk_facture/fk_propal/fk_commande) ## Installationsschritte ### Schritt 1: Datenbank Migration ```bash mysql -u root -p dolibarr < /srv/http/dolibarr/custom/subtotaltitle/sql/llx_facture_lines_manager.sql ``` ### Schritt 2: Modul neu laden 1. In Dolibarr: Home → Setup → Modules 2. SubtotalTitle Modul deaktivieren 3. SubtotalTitle Modul aktivieren ### Schritt 3: Cache leeren ```bash rm -rf /srv/http/dolibarr/documents/admin/temp/* ``` ## Testen ### Test-Checkliste #### Rechnungen (Bestand - sollte weiter funktionieren) - [ ] Section erstellen - [ ] Produkte zur Section hinzufügen - [ ] Textzeilen erstellen - [ ] Zwischensummen anzeigen - [ ] Drag & Drop - [ ] Sync zu facturedet #### Angebote (NEU) - [ ] Section erstellen - [ ] Produkte zur Section hinzufügen - [ ] Textzeilen erstellen - [ ] Zwischensummen anzeigen - [ ] Drag & Drop #### Kundenaufträge (NEU) - [ ] Section erstellen - [ ] Produkte zur Section hinzufügen - [ ] Textzeilen erstellen - [ ] Zwischensummen anzeigen - [ ] Drag & Drop ## Bekannte Probleme / TODOs 1. **AJAX-Dateien noch nicht angepasst** - Alle AJAX-Calls verwenden noch `facture_id` statt generischem `document_id` 2. **JavaScript teilweise angepasst** - Viele Funktionen verwenden noch `facture_id` statt `document_id` + `document_type` 3. **Sync-Funktionalität** - Die Sync-zu-PDF-Funktionalität (`in_facturedet`) muss für Angebote und Aufträge getestet werden 4. **PDF-Templates** - Eventuell müssen auch PDF-Templates angepasst werden 5. **Substitutions** - Die Substitutions-Funktionen müssen eventuell erweitert werden ## Nächste Schritte (Priorität) 1. **AJAX-Dateien anpassen** (HOCH) - Template-Beispiel erstellen - Alle AJAX-Dateien nach Template anpassen 2. **JavaScript vollständig generisch machen** (HOCH) - `facture_id` durch `document_id` ersetzen - `document_type` überall hinzufügen 3. **Testen** (MITTEL) - Mit Angeboten testen - Mit Kundenaufträgen testen 4. **renderAllPendingSections überprüfen** (MITTEL) - SQL-Queries auf Korrektheit prüfen - Alle `$doc_key` vs `$document_id` Verwendungen überprüfen ## Support Bei Fragen oder Problemen: - Dokumentation: `/srv/http/dolibarr/custom/subtotaltitle/README.md` - Code-Review empfohlen für: `class/actions_subtotaltitle.class.php` --- **Version:** 1.1.0 **Datum:** 2026-01-23 **Autor:** Eduard Wisch