subtotaltitle/MIGRATION_MULTITYPE.md
2026-01-26 19:48:26 +01:00

5.1 KiB

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

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

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