- CHANGELOG und README für Version 5.7 aktualisiert - Dokumentiert: PDF-Pfad-Fix und Fallback für alte Pfade Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
145 lines
7 KiB
Markdown
Executable file
145 lines
7 KiB
Markdown
Executable file
# Changelog
|
||
|
||
Alle wesentlichen Änderungen an diesem Projekt werden in dieser Datei dokumentiert.
|
||
|
||
## [5.7] - 2026-03-04
|
||
|
||
### Behoben
|
||
- **PDF-Pfad bei Cron/Batch-Import**: PDFs werden jetzt korrekt nach `/imports/{id}/{filename}` gespeichert
|
||
- Problem: Cron speicherte nach `/imports/{ref}_{filename}`, aber beim Erstellen der Rechnung wurde nach `/imports/{id}/{filename}` gesucht
|
||
- Lösung: Einheitlicher Pfad für manuellen und Cron-Import
|
||
- **Fallback für alte PDF-Pfade**: Beim Anhängen an Lieferantenrechnung wird auch im alten Pfadformat gesucht
|
||
- Ermöglicht korrekte Verarbeitung von Imports die vor dem Fix erstellt wurden
|
||
- Sucht zuerst `/imports/{id}/{filename}`, dann `/imports/{ref}_{filename}`
|
||
|
||
## [5.5] - 2026-03-03
|
||
|
||
### Behoben
|
||
- **Kupferzuschlag-Skalierung in Massenaktualisierung**: Kupferzuschlag wird jetzt korrekt skaliert wenn Dolibarr-Mindestmenge von Datanorm-Preiseinheit abweicht
|
||
- Problem: Cu für 50m wurde direkt zu Datanorm-Preis für 100m addiert
|
||
- Lösung: Cu wird erst auf Stückpreis umgerechnet (`cu_per_unit = Cu / quantity`), dann auf Datanorm-PE skaliert
|
||
- **Steuersatz bei Preisübernahme**: `tva_tx` wird jetzt korrekt beibehalten statt auf 0 gesetzt
|
||
- Direktes SQL-UPDATE statt `update_buyprice()` um alle Felder zu erhalten
|
||
- **Preise auf 2 Dezimalstellen**: Gesamtpreis und Stückpreis werden auf 2 Nachkommastellen gerundet
|
||
|
||
### Hinzugefügt
|
||
- **Filter für Preisrichtung**: Neue Checkboxen "Preise rauf" und "Preise runter" in Massenaktualisierung
|
||
- Ermöglicht gezieltes Filtern nach Preiserhöhungen oder -senkungen
|
||
- **Filter-Persistenz**: Alle Filter (inkl. hide_cables, filter_price_up, filter_price_down) bleiben nach Preisübernahme erhalten
|
||
- **Alternative Datanorm-Preise verbessert**: Beim Import von Rechnungen mit alternativen Datanorm-Katalogen werden jetzt übernommen:
|
||
- Mindestmenge vom vorhandenen/Hauptpreis
|
||
- Verpackungseinheit vom vorhandenen/Hauptpreis
|
||
- Steuersatz vom vorhandenen/Hauptpreis
|
||
- kaufmenge-Extrafield (nur wenn numerisch und > 0)
|
||
- **Extrafield kaufmenge sichtbar**: Feld wird jetzt in Formularen angezeigt (`list = 1`)
|
||
|
||
### Geändert
|
||
- **Kupferzuschlag nicht automatisch gesetzt**: Bei Datanorm-Import wird kupferzuschlag NICHT mehr gesetzt - wird von separatem Modul berechnet
|
||
|
||
### Technisch
|
||
- Kupferzuschlag-Berechnung: `cu_for_price_unit = (kupferzuschlag / effective_quantity) * price_unit`
|
||
- kaufmenge-Validierung: `trim() !== '' && is_numeric() && (int) > 0`
|
||
|
||
## [4.2] - 2026-03-02
|
||
|
||
### Behoben
|
||
- **PDF-Anhänge**: ZUGFeRD-PDFs werden jetzt korrekt an Lieferantenrechnungen angehängt
|
||
- Problem: PDF wurde nur ins Dateisystem kopiert, nicht in ECM-Datenbank registriert
|
||
- Lösung: `EcmFiles`-Eintrag wird erstellt für korrekte Verknüpfung mit Rechnung
|
||
- Wichtig: Bei Rechnungsvalidierung wird PDF automatisch mitverschoben
|
||
|
||
### Hinzugefügt
|
||
- **Bezeichnung in Rechnungsliste**: Teuerster Artikel wird als Bezeichnung der Lieferantenrechnung gesetzt
|
||
- Erleichtert schnelle Identifikation in der Rechnungsliste
|
||
- Spalte "Bezeichnung" muss in Liste aktiviert sein
|
||
|
||
## [4.0] - 2026-03-01
|
||
|
||
### Behoben
|
||
- **Verschachtelte HTML-Forms**: "Ausgewählte Preise hinzufügen" funktionierte nicht, weil Browser verschachtelte `<form>`-Elemente nicht unterstützen. Lösung: HTML5 `form`-Attribut
|
||
- **Stückpreis-Anzeige**: Einkaufspreise zeigen jetzt den Stückpreis statt Gesamtpreis (z.B. 0,16 statt 16,32 bei 100 Stk.)
|
||
- **Preisvergleich**: Fehlende Lieferantenpreise werden korrekt auf Stückpreis-Basis verglichen
|
||
- **DATPREIS-Kommentare**: Feld korrekt als Rabattkennzeichen dokumentiert (war fälschlich als PE-Code beschrieben)
|
||
|
||
### Verbessert
|
||
- **Feedback bei Preishinzufügen**: Zeigt Erfolgs- und Fehlermeldungen nach dem Hinzufügen von Lieferantenpreisen
|
||
- **Mengenkontext**: Bei Mengenstaffel wird zusätzlich der Gesamtpreis mit Stückzahl angezeigt (z.B. "0,16 (16,32/100Stk.)")
|
||
|
||
### Hinweis
|
||
- `uk_product_barcode` UNIQUE KEY auf `product_fournisseur_price` muss entfernt werden falls vorhanden (mehrere Lieferanten dürfen gleichen EAN haben)
|
||
|
||
## [3.8] - 2026-02-25
|
||
|
||
### Hinzugefügt
|
||
- **Kabel-Preisberechnung**: Zentrale Funktion `calculateCablePricing()` für einheitliche Preislogik
|
||
- **Kupfergehalt-Berechnung**: Automatische Berechnung aus Aderanzahl × Querschnitt × 8.9
|
||
- **Ringgröße-Erkennung**: Unterstützt Ri100, Tr500, Fol.25m, "Ring 100m", "Trommel 500m"
|
||
- **Extrafield "produktpreis"**: Speichert reinen Materialpreis ohne Kupferzuschlag (nur Kabel)
|
||
- **EAN-Auto-Update**: Barcodes aus ZUGFeRD-Rechnungen werden automatisch in Lieferantenpreise übernommen
|
||
|
||
### Verbessert
|
||
- **Lieferanten-Formate**: Korrekte Unterscheidung zwischen Sonepar (price_unit=1, Ring im Namen) und Kluxen/Witte (price_unit=100)
|
||
- **Cross-Catalog-Suche**: Nur noch über EAN, nicht mehr über Artikelnummern (verhindert Fehlzuordnungen)
|
||
- **EAN-Barcode-Typ**: Automatische Erkennung (EAN8, EAN13, UPC-A) statt hardcoded EAN13
|
||
- **Error-Handling**: Besseres Logging bei Extrafield-Fehlern
|
||
|
||
### Behoben
|
||
- Division durch Null bei Preisberechnung abgesichert
|
||
- Mindestbestellmenge und Verpackungseinheit werden von existierenden Lieferantenpreisen übernommen
|
||
|
||
## [3.7] - 2026-02-23
|
||
|
||
### Hinzugefügt
|
||
- **GlobalNotify Integration**: Benachrichtigungen über das zentrale GlobalNotify-Modul
|
||
- Import-Fehler: Warnung bei fehlgeschlagenen Importen
|
||
- Rechnungen zur Prüfung: Aktion wenn neue Rechnungen warten
|
||
- IMAP-Fehler: Warnung wenn E-Mail Postfach nicht erreichbar
|
||
- Exception/Fatal: Sofortige Benachrichtigung bei Abstürzen
|
||
- **Helper-Funktion**: `notify()` für sichere GlobalNotify-Nutzung mit Fallback
|
||
|
||
### Hinweis
|
||
GlobalNotify ist optional. Ohne das Modul werden Benachrichtigungen ins Dolibarr-Log geschrieben.
|
||
|
||
## [3.6] - 2026-02-23
|
||
|
||
### Behoben
|
||
- **Cron-Job Fix**: Fehlendes `require_once` für `admin.lib.php` hinzugefügt - verhinderte das Speichern des letzten Laufzeitpunkts
|
||
- Cron-Job lief in Endlosschleife weil `dolibarr_set_const()` nicht gefunden wurde
|
||
|
||
### Hinzugefügt
|
||
- **Dediziertes Cron-Logging**: Separate Log-Datei unter `/documents/importzugferd/logs/cron_importzugferd.log`
|
||
- **Shutdown Handler**: Fängt fatale PHP-Fehler ab und protokolliert sie
|
||
- **Detailliertes Logging**: Zeigt jeden Schritt des Import-Prozesses (Ordner-Zugriff, PDF-Scan, IMAP-Status)
|
||
|
||
### Verbessert
|
||
- Robustere Fehlerbehandlung mit try/catch für Exceptions und Throwables
|
||
- IMAP-Import wird nur ausgeführt wenn tatsächlich konfiguriert
|
||
|
||
## [3.5] - 2026-02-15
|
||
|
||
### Hinzugefügt
|
||
- Automatischer Cron-Import aus Watch-Folder
|
||
- IMAP-Mailbox-Unterstützung für E-Mail-Rechnungen
|
||
- Konfigurierbare Import-Frequenz (stündlich, täglich, wöchentlich)
|
||
- Archiv- und Fehler-Ordner für verarbeitete Dateien
|
||
|
||
## [3.0] - 2026-02-01
|
||
|
||
### Hinzugefügt
|
||
- ZUGFeRD/Factur-X PDF-Parsing
|
||
- Automatische Lieferanten-Erkennung
|
||
- Rechnungsvorschau vor Import
|
||
- Datanorm-Integration für Artikelpreise
|
||
|
||
## [2.0] - 2026-01-15
|
||
|
||
### Hinzugefügt
|
||
- Basis-Import von ZUGFeRD-Rechnungen
|
||
- Manuelle Datei-Auswahl
|
||
- Integration in Lieferantenrechnungen
|
||
|
||
## [1.0] - 2026-01-01
|
||
|
||
### Erste Version
|
||
- Grundlegende ZUGFeRD-Erkennung
|
||
- XML-Extraktion aus PDF
|