dolibarr.handybarcodescanner/README.md
data c97540e6f6 v9.1: OCR-Feature Bug-Fix - zusammenhängende Zahlenblöcke
extractDigitSequences() Fix:
- VORHER: Alle Ziffern zusammengefasst → Datensalat bei Subsequenzen
- JETZT: Nur isolierte N-stellige Zahlenblöcke (filter auf length === N)
- Beispiel: "Artikel 1234567 Datum 20250311" → nur "1234567" (nicht "2025031" etc.)

Artikelnummer-Suche:
- findproduct.php sucht in: barcode, ref_fourn (Lieferanten-Artikelnummer!), ref
- OCR-erkannte Nummern funktionieren wenn ref_fourn in Dolibarr gepflegt ist

Dokumentation:
- README.md aktualisiert: ZXing-JS, OCR-Feature, Versionierung
- Barcode-Unterstützung erweitert: Code 128, QR, DataMatrix, OCR
- Bibliotheken: ZXing-JS v0.21.3, Tesseract.js v5.1.0

Versionen synchron erhöht:
- pwa.php: ?v=91 (CSS + JS)
- sw.js: scanner-v9.1
- modHandyBarcodeScanner.class.php: 9.1

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-03-11 20:20:16 +01:00

263 lines
10 KiB
Markdown
Executable file

# HANDYBARCODESCANNER FOR [DOLIBARR ERP & CRM](https://www.dolibarr.org)
Mobiler Barcode-Scanner für Dolibarr - optimiert für die Verwendung auf Smartphones.
## Features
Das Modul bietet drei Modi für die mobile Barcode-Erfassung:
### 1. Bestellmodus (Order)
- Produkt per Barcode scannen oder manuell suchen (Lupe-Button)
- Alle verfügbaren Lieferanten mit Einkaufspreisen werden angezeigt
- Günstigster Lieferant ist vorausgewählt
- Produkt wird zu einer lieferantenspezifischen Entwurfsbestellung hinzugefügt
- Bestellungen werden automatisch als "Direkt" erstellt (dauerhafte Direktbestellung pro Lieferant)
- Falls kein Lieferant zugewiesen: Manuelle Auswahl aller verfügbaren Lieferanten
- **Freitext-Positionen**: Plus-Button für Artikel ohne Produktstamm
- **Bestellübersicht**: Nach links swipen zeigt alle offenen Bestellungen
- **Zeilen bearbeiten**: Klick auf Bestellzeile öffnet Dialog zum Ändern/Löschen
- **Bestellungen löschen**: Entwürfe können direkt aus der Übersicht gelöscht werden
### 2. Shop-Modus
- Produkt per Barcode scannen
- Zeigt Links zu den Webshops der Lieferanten
- Schneller Zugriff auf Lieferanten-Onlineshops
### 3. Inventur-Modus
- Produkt per Barcode scannen
- Aktueller Lagerbestand wird angezeigt
- Neuen Bestand eingeben und mit Bestätigungsdialog speichern
- Lagerbewegungen werden korrekt protokolliert
### 4. Barcode-Druck
- **Druck-Button** auf Produktkarte oder via Produktsuche
- Barcode-Vorschau mit Produkt-Referenz, Barcode-Strichen und Barcode-Wert
- Code128-Format, optimiert für 24mm Etikettendrucker
**Zwei Druck-Optionen:**
#### Browser-Druck
- Standard Browser-Druckfunktion für Desktop-Drucker
- Unterstützt alle gängigen Drucker und PDF-Export
#### Brother PT-E560BT (Android App)
- **Native Android App** für direkten Bluetooth-Druck auf Brother P-touch E560BT
- Intent-basierte Integration: PWA startet App automatisch mit Barcode-Daten
- Druckt Barcode **längs auf 24mm TZe-Band** mit Produkt-Referenz (fett), Barcode und Wert
- Automatischer Halbschnitt zwischen Labels, Vollschnitt am Ende
- App verfügbar in `android-app/BrotherPrintHelper/`
- Installation: APK auf Android-Gerät installieren, PT-E560BT in Bluetooth-Settings paaren
## Barcode-Unterstützung
Das Modul sucht Barcodes/Artikelnummern in folgender Reihenfolge:
1. Produkt-Barcode (`llx_product.barcode`)
2. Lieferanten-Barcode (`llx_product_fournisseur_price.barcode`)
3. **Lieferanten-Artikelnummer** (`llx_product_fournisseur_price.ref_fourn`) ← **NEU ab v9.0**
4. Produkt-Referenz (`llx_product.ref`)
### Barcode-Formate (ZXing-JS, ab v8.3)
**Unterstützte Formate - wählbar per Dropdown:**
- **Code 128** - alphanumerisch (1D-Barcode)
- **QR-Code** - 2D-Matrix-Code
- **DataMatrix** - 2D-Matrix-Code
**Typ-Umschaltung ohne Kamera-Neustart:**
Der Barcode-Typ kann während des Scannens gewechselt werden. Die Kamera bleibt aktiv, nur der Decoder wird neu initialisiert. Die Auswahl wird persistent in localStorage gespeichert.
### OCR-Modus für Artikelnummern (ab v8.5, optimiert in v9.1)
**Für Etiketten OHNE Barcode:**
- Foto-basierte Texterkennung mit Tesseract.js
- Variable Ziffern-Anzahl (5-12 stellig) per Dropdown wählbar
- Erkennt **zusammenhängende** N-stellige Zahlen (z.B. 7-stellige Artikelnummer)
- Mehrere Treffer → Auswahl-Dialog
- Keine Treffer → Fallback auf manuelle Produktsuche
**Wichtig:** OCR erkennt nur **isolierte** Zahlenblöcke mit exakt N Ziffern. Keine Subsequenzen oder Zusammensetzungen aus längeren Zahlen!
## Installation
### Voraussetzungen
- Dolibarr ERP & CRM (Version 14.0 oder höher empfohlen)
- Aktiviertes Modul "Lieferanten" (Fournisseur/Supplier)
- Aktiviertes Modul "Lager" (Stock) für Inventur-Modus
- HTTPS-Verbindung (erforderlich für Kamerazugriff im Browser)
### Installation via Git
```bash
cd /path/to/dolibarr/htdocs/custom
git clone https://git.data-it-solution.de/data/dolibarr.handybarcodescanner.git handybarcodescanner
```
### Installation via ZIP
1. ZIP-Datei herunterladen
2. In Dolibarr: `Home > Setup > Modules > Deploy external module`
3. ZIP-Datei hochladen
### Aktivierung
1. Als Administrator in Dolibarr einloggen
2. Gehe zu `Setup > Modules`
3. Suche nach "HandyBarcodeScanner"
4. Modul aktivieren
## Konfiguration
Die Einstellungen sind unter `Setup > Modules > HandyBarcodeScanner > Settings` verfügbar:
### Allgemein
- **Bestellpräfix**: Präfix für automatisch erstellte Bestellungen (Standard: "Direktbestellung")
- **Standard-Lager**: Standard-Lager für Inventur-Bewegungen
### Aktivierte Modi
- **Bestellmodus aktivieren**: Ein/Aus
- **Shop-Modus aktivieren**: Ein/Aus
- **Inventur-Modus aktivieren**: Ein/Aus
### Feedback
- **Vibration aktivieren**: Vibriert bei erfolgreichem Scan (auf unterstützten Geräten)
- **Ton aktivieren**: Akustisches Signal bei erfolgreichem Scan
### QR-Code für mobilen Zugriff
Auf der Einstellungsseite wird ein QR-Code angezeigt, der mit dem Smartphone gescannt werden kann, um direkt zur Scanner-Seite zu gelangen.
## Berechtigungen
Das Modul definiert folgende Berechtigungen:
| Berechtigung | Beschreibung |
|-------------|--------------|
| `handybarcodescanner->use` | Scanner verwenden |
| `handybarcodescanner->order->create` | Bestellungen erstellen |
| `handybarcodescanner->inventory->write` | Lagerbestand ändern |
## Verwendung
Der Scanner ist im linken Menü unter **Produkte > Scanner** erreichbar.
### Moduswechsel ohne Unterbrechung
Die Modi (Bestellen/Shop/Inventur) können per Tab gewechselt werden, ohne dass die Kamera stoppt. Bereits gescannte Produkte werden im neuen Modus direkt angezeigt.
### Im mobilen Browser / PWA
1. QR-Code von der Admin-Seite scannen oder URL direkt eingeben
2. Kamerazugriff erlauben (HTTPS erforderlich!)
3. Gewünschten Modus wählen und "Scannen" tippen
4. Barcode vor die Kamera halten
### Gesten-Steuerung
- **Nach links swipen**: Bestellübersicht öffnen (Order-Mode)
- **Nach rechts swipen**: Barcode-Druck (Produktsuche öffnet sich)
## Technische Details
### Dateistruktur
```
handybarcodescanner/
├── admin/
│ ├── about.php
│ └── setup.php
├── ajax/
│ ├── addtoorder.php # Produkt zu Bestellung hinzufügen
│ ├── addfreetextline.php # Freitext-Position hinzufügen
│ ├── deleteorder.php # Bestellung löschen
│ ├── findproduct.php # Produkt per Barcode suchen
│ ├── getorders.php # Bestellungen abrufen
│ ├── getorderlines.php # Bestellzeilen abrufen
│ ├── getsuppliers.php # Alle Lieferanten abrufen
│ ├── searchproduct.php # Produktsuche
│ ├── updateorderline.php # Bestellzeile bearbeiten
│ └── updatestock.php # Lagerbestand aktualisieren
├── android-app/
│ └── BrotherPrintHelper/ # Native Android App für Brother PT-E560BT
│ ├── app/
│ │ ├── src/main/java/de/data_it_solution/brotherprinthelper/
│ │ │ └── MainActivity.kt
│ │ ├── libs/
│ │ │ └── brlmprinterkit-release.aar
│ │ └── build.gradle.kts
│ └── build.gradle.kts
├── core/modules/
│ └── modHandyBarcodeScanner.class.php
├── css/
│ └── scanner.css
├── js/
│ ├── barcodezoom.js.php # Barcode-Zoom Feature
│ └── scanner.js # Hauptlogik Scanner + PWA
├── langs/
│ ├── de_DE/handybarcodescanner.lang
│ └── en_US/handybarcodescanner.lang
├── lib/
│ └── handybarcodescanner.lib.php
├── pwa.php # PWA Hauptseite
├── sw.js # Service Worker für PWA
├── manifest.json # PWA Manifest
└── handybarcodescannerindex.php
```
### Verwendete Bibliotheken
- [ZXing-JS](https://github.com/zxing-js/library) v0.21.3 - Browser-basierte Barcode-Erkennung (1D + 2D)
- [Tesseract.js](https://github.com/naptha/tesseract.js) v5.1.0 - OCR (Optical Character Recognition) für Artikelnummern
- [JsBarcode](https://github.com/lindell/JsBarcode) v3.11.6 - Barcode-Generierung für Druck
- [ZXing](https://github.com/zxing/zxing) - Barcode-Generierung in Android App
### PWA (Progressive Web App)
Das Modul ist als PWA konzipiert mit:
- **Service Worker** (`sw.js`) für Offline-Funktionalität und Performance
- **Web App Manifest** (`manifest.json`) für Installation auf Startbildschirm
- **localStorage** für persistente Einstellungen (letzte Lieferanten, letzte Bestellung)
- **Cache-Strategie**: Network-First für eigene Assets, Cache-First für CDN-Bibliotheken
**Browser-Kompatibilität:**
- Chrome/Edge auf Android: Vollständiger PWA-Standalone-Modus ✅
- Firefox auf Android: Nur Shortcuts, kein echter Standalone-Modus ⚠️
- Safari auf iOS: PWA-Unterstützung mit Einschränkungen
**Versionsverwaltung:** Bei Updates IMMER synchron erhöhen:
- `CACHE_NAME` in `sw.js` (z.B. `scanner-v9.1`)
- `?v=` Parameter in `pwa.php` für CSS und JS (z.B. `?v=91`)
- `$this->version` in `modHandyBarcodeScanner.class.php` (z.B. `9.1`)
**Aktuelle Version: 9.1**
- v9.1: OCR-Feature Bug-Fix (extractDigitSequences: nur zusammenhängende Zahlenblöcke)
- v9.0: OCR-Feature für Artikelnummern-Erkennung
- v8.3: ZXing-JS Integration (Code 128, QR, DataMatrix)
### Brother PT-E560BT Android App
Native Kotlin-App für Bluetooth-Druck auf Brother P-touch E560BT:
- **SDK:** Brother Print SDK v4.x (brlmprinterkit-release.aar)
- **Intent-Schema:** `brotherprint://print?barcode=VALUE&ref=PRODUCTREF`
- **Features:**
- Auto-Discovery von gepaartem Drucker
- 90° Rotation für Längs-Druck auf 24mm TZe-Band
- Produkt-Referenz (fett), Barcode-Strichen, Barcode-Wert
- Erweiterte Error-Handling (SetLabelsizeError, NoCoverError, etc.)
- **Build:** Gradle 9.3.1, Kotlin 2.1.0, Android SDK 34
## Changelog
Siehe [ChangeLog.md](ChangeLog.md)
## Lizenz
### Hauptcode
GPLv3 oder (nach Wahl) jede spätere Version. Siehe Datei [COPYING](COPYING) für weitere Informationen.
### Dokumentation
Alle Texte und READMEs sind unter [GFDL](https://www.gnu.org/licenses/fdl-1.3.en.html) lizenziert.
## Autor
Eduard Wisch - [DATA IT-Solution](https://data-it-solution.de)
## Support
Bei Fragen oder Problemen:
- Issue erstellen: https://git.data-it-solution.de/data/dolibarr.handybarcodescanner/issues
- E-Mail: data@data-it-solution.de