# EPCQR - QR-Code Generator für Dolibarr Rechnungen
**Version:** 1.5
**Autor:** Eduard Wisch
**Dolibarr:** 13.x - 20.x
**Lizenz:** GPL-3.0+
---
## Übersicht
Das **EPCQR Modul** generiert automatisch **EPC-QR-Codes** (European Payments Council) für Dolibarr-Rechnungen und bietet eine **wiederverwendbare Lösung** zum Einfügen von Bildern in ODT-Dokumentvorlagen.
### Neu in Version 1.5
✅ **Lokale QR-Code-Generierung** mit Caching
✅ **Generisches Bildintegration-System** für ODT-Dokumente
✅ **{qrcode} Keyword** in ODT-Templates
✅ **Substitutionssystem** für beliebige Bilder
✅ **Hook-basierte ODT-Verarbeitung**
### Was sind EPC-QR-Codes?
EPC-QR-Codes enthalten alle relevanten Zahlungsinformationen im GiroCode-Format:
- Empfänger (Kontoinhaber)
- IBAN
- BIC
- Betrag
- Verwendungszweck (Rechnungsnummer)
---
## Features
### QR-Code Generierung
✅ **Automatische Generierung** bei Rechnungsfreigabe
✅ **Lokales Caching** (keine externe Service-Abhängigkeit mehr)
✅ **EPC/GiroCode-Standard** konform
✅ **Finale Rechnungsnummer** im QR-Code (keine PROV-Nummern)
### Bildintegration in ODT
✅ **{qrcode} Keyword** für einfache Verwendung in Templates
✅ **Generisches System** für beliebige Bilder
✅ **Automatische Bildgrößen-Anpassung**
✅ **Wiederverwendbar** für andere Module
### Technisch
✅ **Hook-System** für ODT-Verarbeitung
✅ **Substitutionsfunktionen** für Dokumente
✅ **Extra-Felder** mit `_imagepath` Suffix automatisch erkannt
✅ **Vollständige ODT-ZIP-Verarbeitung**
---
## Installation
### 1. Modul aktivieren
1. Gehe zu: **Home → Setup → Modules/Applications**
2. Suche nach "EPCQR"
3. Klicke auf **Activate**
### 2. Extra-Felder werden automatisch erstellt
Das Modul erstellt automatisch 3 Extra-Felder für Rechnungen:
| Feldname | Typ | Beschreibung |
|----------|-----|--------------|
| `qrcode` | HTML | QR-Code als `
` Tag (Kompatibilität) |
| `qrcodepfad` | Varchar(255) | QR-Code URL via viewimage.php |
| `qrcodepath` | Varchar(255) | **NEU**: Lokaler Dateipfad für ODT-Integration |
---
## Konfiguration
### Bankdaten anpassen
**WICHTIG:** Du musst deine Bankdaten im Code hinterlegen!
**Datei:** `/custom/epcqr/class/actions_epcqr.class.php`
Suche nach dieser Stelle im Trigger `BILL_VALIDATE`:
```php
// Bankdaten - HIER ANPASSEN!
$accountHolder = 'Peter Casimir';
$iban = 'DE70217625500013438147';
$bic = 'GENODEF1HUM';
```
**Ändere diese Werte auf deine Daten:**
```php
$accountHolder = 'Dein Name / Firmenname';
$iban = 'DE12345678901234567890';
$bic = 'ABCDEFGH123';
```
**Speichern und fertig!**
---
## Verwendung
### Automatische QR-Code Generierung
Der QR-Code wird **automatisch** generiert wenn du eine Rechnung freigibst:
1. Rechnung erstellen (Status: Draft)
2. **Freigeben** (Validate)
3. QR-Code wird automatisch generiert
4. Extra-Felder werden befüllt
### QR-Code in ODT-Templates einfügen
**NEU in Version 1.5: Verwenden Sie das einfache `{qrcode}` Keyword!**
**Schritt 1:** ODT-Template öffnen (z.B. in LibreOffice)
**Schritt 2:** An gewünschter Stelle einfügen:
```
{qrcode}
```
**Schritt 3:** Template speichern und hochladen
**Schritt 4:** Rechnung freigeben → QR-Code wird automatisch generiert
**Schritt 5:** Dokument als ODT generieren → QR-Code wird eingefügt
**Ergebnis:** Der QR-Code erscheint automatisch als Bild im ODT-Dokument!
**Hinweis:** Das alte Format `{invoice_options_qrcode}` funktioniert weiterhin für Kompatibilität.
### Beispiel Template-Position
```
┌─────────────────────────────────┐
│ RECHNUNG IN2601-0001 │
│ │
│ Gesamtbetrag: 1.234,56 € │
│ │
│ {invoice_options_qrcode} │ ← QR-Code hier
│ │
│ Bitte überweisen Sie... │
└─────────────────────────────────┘
```
---
## Technische Details
### Wie funktioniert das Modul?
#### 1. Trigger-System
Das Modul nutzt den Dolibarr-Trigger **BILL_VALIDATE**, der bei Rechnungsfreigabe ausgeführt wird.
**Problem:** Zu diesem Zeitpunkt hat das `$object` noch die provisorische Nummer (z.B. `PROV23`)!
**Lösung:** Das Modul lädt das Rechnungsobjekt neu aus der Datenbank:
```php
$invoice = new Facture($this->db);
$invoice->fetch($object->id);
// Jetzt hat $invoice->ref die finale Nummer (z.B. IN26-0001)
```
#### 2. QR-Code Service
Das Modul nutzt einen externen Service:
**URL:** `https://qr.data-it-solution.de/epc`
**Parameter:**
- `name` = Kontoinhaber
- `iban` = IBAN
- `bic` = BIC/SWIFT
- `amount` = Betrag (formatiert mit `price2num()`)
- `remittance` = Verwendungszweck (Rechnungsnummer)
**Beispiel-URL:**
```
https://qr.data-it-solution.de/epc?name=Eduard+Wisch&iban=DE70217625500013438147&bic=GENODEF1HUM&amount=1234.56&remittance=IN26-0001
```
#### 3. Speicherung
Der QR-Code wird in 2 Extra-Feldern gespeichert:
```php
// Als HTML-Tag für ODT
$invoice->array_options['options_qrcode'] = "
";
// Als URL für Backup/Referenz
$invoice->array_options['options_qrcodepfad'] = $qrurl;
```
---
## Workflow-Diagramm
```
┌─────────────────────┐
│ Rechnung erstellen │
│ (Status: DRAFT) │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Freigeben (Validate)│
└──────────┬──────────┘
│
▼
┌─────────────────────────────┐
│ 1. Datenbank Update │
│ → Finale Nummer vergeben │
└──────────┬──────────────────┘
│
▼
┌─────────────────────────────┐
│ 2. Trigger BILL_VALIDATE │
│ → Modul wird aufgerufen │
└──────────┬──────────────────┘
│
▼
┌─────────────────────────────┐
│ 3. Object neu laden │
│ → Finale Nummer holen │
└──────────┬──────────────────┘
│
▼
┌─────────────────────────────┐
│ 4. QR-URL generieren │
│ → Mit finaler Nummer │
└──────────┬──────────────────┘
│
▼
┌─────────────────────────────┐
│ 5. Extra-Felder speichern │
│ → options_qrcode │
│ → options_qrcodepfad │
└─────────────────────────────┘
```
---
## Troubleshooting
### Problem: QR-Code zeigt PROV-Nummer
**Symptom:** QR-Code enthält "PROV23" statt "IN26-0001"
**Ursache:** Object wurde nicht neu geladen im Trigger
**Lösung:** Prüfe in `actions_epcqr.class.php`:
```php
// FALSCH:
$ref = $object->ref;
// RICHTIG:
$invoice = new Facture($this->db);
$invoice->fetch($object->id);
$ref = $invoice->ref;
```
### Problem: Extra-Felder sind leer
**Symptom:** Nach Freigabe sind die Felder `qrcode` und `qrcodepfad` leer
**Lösung:**
1. Modul **deaktivieren**
2. Modul wieder **aktivieren**
3. Prüfe: **Setup → Dictionaries → Extra Attributes → Invoices**
4. Sollten 2 Felder da sein: `qrcode` und `qrcodepfad`
### Problem: QR-Code wird in ODT nicht angezeigt
**Symptom:** Template zeigt nur `{invoice_options_qrcode}` als Text
**Lösungen:**
1. **Feldname prüfen:** Muss exakt `{invoice_options_qrcode}` heißen
2. **Extra-Feld aktiviert?** Setup → Extra Attributes → "Printable" = Ja
3. **Template neu generieren:** Rechnung → "Generate document"
### Problem: Falscher Betrag im QR-Code
**Symptom:** Banking-App zeigt falschen Betrag
**Ursache:** Formatierung falsch
**Lösung:** Modul nutzt korrekt `price2num($invoice->total_ttc, 'MT')`
### Problem: QR-Code kann nicht gescannt werden
**Mögliche Ursachen:**
- QR-Code zu klein im PDF → Größe in ODT anpassen
- Externe URL nicht erreichbar → Internetverbindung prüfen
- Falsches Format → Service-URL prüfen
---
## Extra-Felder Details
### Feld: qrcode
- **Typ:** HTML
- **Inhalt:** `
`
- **Verwendung:** Für ODT-Templates
- **Printable:** Ja
- **Position:** 100
### Feld: qrcodepfad
- **Typ:** varchar(255)
- **Inhalt:** Vollständige QR-Code URL
- **Verwendung:** Backup, Debugging, externe Verarbeitung
- **Printable:** Nein (nur intern)
- **Position:** 101
---
## Code-Referenz
### Kompletter Trigger-Code
```php
public function runTrigger($action, $object, User $user, Translate $langs, Conf $conf)
{
if ($action == 'BILL_VALIDATE') {
dol_syslog("EPCQR: Generiere QR-Code für Rechnung ID " . $object->id);
// ⚠️ WICHTIG: Objekt neu laden für finale Rechnungsnummer!
require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
$invoice = new Facture($this->db);
$result = $invoice->fetch($object->id);
if ($result > 0) {
// Bankdaten - HIER ANPASSEN!
$accountHolder = 'Eduard Wisch';
$iban = 'DE70217625500013438147';
$bic = 'GENODEF1HUM';
$amount = price2num($invoice->total_ttc, 'MT');
$ref = $invoice->ref; // Finale Nummer
// QR-Code URL generieren
$qrurl = "https://qr.data-it-solution.de/epc?"
. "name=" . urlencode($accountHolder)
. "&iban=" . urlencode($iban)
. "&bic=" . urlencode($bic)
. "&amount=" . urlencode($amount)
. "&remittance=" . urlencode($ref);
// In Extra-Felder speichern
$invoice->array_options['options_qrcode'] = "
";
$invoice->insertExtraFields();
$invoice->array_options['options_qrcodepfad'] = $qrurl;
$invoice->insertExtraFields();
dol_syslog("EPCQR: QR-Code generiert für " . $invoice->ref);
} else {
dol_syslog("EPCQR: Fehler beim Laden der Rechnung", LOG_ERR);
return -1;
}
return 1;
}
return 0;
}
```
---
## FAQ
### Kann ich andere QR-Services nutzen?
Ja! Ändere einfach die URL in `actions_epcqr.class.php`:
```php
$qrurl = "https://dein-service.de/qr?"
. "deine_parameter=" . urlencode($value);
```
### Funktioniert das Modul mit allen Rechnungstypen?
Ja, der Trigger `BILL_VALIDATE` wird für alle Rechnungstypen aufgerufen:
- Standard-Rechnungen
- Gutschriften
- Ersatzrechnungen
- Anzahlungsrechnungen
### Kann ich die QR-Code-Größe ändern?
Ja, in 2 Varianten:
**1. Im Code:**
```php
$invoice->array_options['options_qrcode'] = "
";
```
**2. Im ODT-Template:**
Bild markieren → Rechtsklick → Eigenschaften → Größe ändern
### Werden alte Rechnungen auch mit QR-Codes versehen?
Nein, nur neue Rechnungen die nach Modulaktivierung **freigegeben** werden.
**Für alte Rechnungen:**
1. Rechnung auf "Draft" setzen
2. Erneut freigeben
3. QR-Code wird generiert
---
## Dokumentation
📖 **Ausführliche Dokumentation:** [doc/BILDER_IN_ODT.md](doc/BILDER_IN_ODT.md)
Die erweiterte Dokumentation enthält:
- Technische Details zur Bildverarbeitung
- Anleitung für eigene Bilder
- Fehlerbehebung und Debugging
- Code-Referenz und Architektur
- Erweiterte Verwendungsmöglichkeiten
---
## Support & Kontakt
**Entwickler:** Eduard Wisch
**E-Mail:** data@data-it-solution.de
### Bei Problemen
1. **Log-Dateien prüfen:** `documents/dolibarr.log`
2. **Debug aktivieren:** Setup → Other → Enable debug mode
3. **Dokumentation lesen:** [doc/BILDER_IN_ODT.md](doc/BILDER_IN_ODT.md)
---
## Changelog
### Version 1.5 (2026-01-27)
- ✅ **Lokale QR-Code-Generierung** mit Caching-System
- ✅ **{qrcode} Keyword** für ODT-Templates
- ✅ **Generisches Bildintegration-System** für beliebige Bilder
- ✅ **Substitutionssystem** aktiviert und implementiert
- ✅ **Hook-basierte ODT-Verarbeitung** (afterODTCreation)
- ✅ **Automatische Bildgrößen-Anpassung** in ODT
- ✅ **Wiederverwendbare Lösung** für andere Module
- ✅ Neue Klassen: QRCodeGenerator, ActionsEpcqr
- ✅ Neue Funktionen: epcqr_processODTImages, epcqr_insertImagesIntoODT
- ✅ Dokumentation: [doc/BILDER_IN_ODT.md](doc/BILDER_IN_ODT.md)
### Version 1.4 (2026-01-11)
- ✅ Erste stabile Version
- ✅ Automatische QR-Code Generierung
- ✅ Extra-Felder für ODT-Integration
- ✅ Externe QR-Service Integration
- ✅ Object-Reload Fix für finale Rechnungsnummer
---
## Lizenz
GPL-3.0+
Dieses Modul ist freie Software; Sie können es unter den Bedingungen der GNU General Public License Version 3 oder später weitergeben und/oder modifizieren.
---
**Viel Erfolg mit EPCQR!** 🎉