# Changelog

Alle wesentlichen Änderungen an diesem Projekt werden in dieser Datei dokumentiert.

## [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
