Dolibarr-Modul: Arbeitsberichte aus Anhängen erstellen, annotieren, als PDF an Rechnungen anhängen
Find a file
Eduard Wisch 344f884a0f
All checks were successful
Deploy bericht / deploy (push) Successful in 1s
feat: Bericht-Vorlagen + Whisper-Transkription + Cron-Fix
Bericht-Vorlagen (Phase 5.5):
- DB: is_template, template_label in llx_bericht
- Bericht::fetchAllTemplates() und createFromTemplate()
- fetchAllForElement() blendet Vorlagen aus
- ajax/save_as_template.php erzeugt Vorlage aus aktuellem Bericht
- Desktop-Editor: '📋 Als Vorlage' Button im Action-Bereich
- Bericht-Übersicht: Vorlagen-Dropdown beim + Neu Button
- api/templates.php: GET list + POST create_from_template

Schnell-Bericht (Phase 4.a/4.i):
- api/reports.php?action=create POST-Endpoint: Titel, Format,
  Orientation, ODT-Template, optional template_id
- api/odt_templates.php: Liste der Deckblatt-Vorlagen

Whisper-Transkription (Phase 5.7):
- api/transcribe.php: POST mit relpath, nutzt externen Whisper-
  HTTP-Endpoint (whisper.cpp server ODER OpenAI-kompatibel)
- Konfiguration im Admin: BERICHT_WHISPER_URL/MODE/API_KEY/LANG
- Sprache default 'de'

Cron-Fix:
- BerichtUploadToken::cleanupExpired() ist jetzt Instanz-Methode
  (Dolibarr ruft new Klasse($db) bei jobtype=method auf)
- Returnwert für Cron-Success/Failure
- Statische Variante als cleanupExpiredStatic() für direkte Aufrufe
- Damit läuft der tägliche Cron 'Expired Upload-Tokens bereinigen'
  nicht mehr hängend

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
[deploy]
2026-04-09 08:27:45 +02:00
.forgejo/workflows feat: Initiales Release Bericht-Modul v1.0.0 [deploy] 2026-04-08 15:18:59 +02:00
admin feat: Bericht-Vorlagen + Whisper-Transkription + Cron-Fix 2026-04-09 08:27:45 +02:00
ajax feat: Bericht-Vorlagen + Whisper-Transkription + Cron-Fix 2026-04-09 08:27:45 +02:00
api feat: Bericht-Vorlagen + Whisper-Transkription + Cron-Fix 2026-04-09 08:27:45 +02:00
class feat: Bericht-Vorlagen + Whisper-Transkription + Cron-Fix 2026-04-09 08:27:45 +02:00
core/modules feat: Bericht-Vorlagen + Whisper-Transkription + Cron-Fix 2026-04-09 08:27:45 +02:00
css feat: Unterschriften-Verifikation + Seiten-Reorder API 2026-04-09 08:18:51 +02:00
js feat: Bericht-Vorlagen + Whisper-Transkription + Cron-Fix 2026-04-09 08:27:45 +02:00
langs feat: Initiales Release Bericht-Modul v1.0.0 [deploy] 2026-04-08 15:18:59 +02:00
lib feat: Phase 1.4 + 1.5 — Multi-Image Grids und Bildgröße komplett 2026-04-08 22:33:44 +02:00
sql feat: Phase 2.1 + 2.2 — Mobile-Upload mit QR-Code 2026-04-08 22:38:33 +02:00
.gitignore feat: Initiales Release Bericht-Modul v1.0.0 [deploy] 2026-04-08 15:18:59 +02:00
bericht_card.php feat: Bericht-Vorlagen + Whisper-Transkription + Cron-Fix 2026-04-09 08:27:45 +02:00
bericht_thirdparty.php feat: Phase 1.3 + 1.7 + Schema 1.4/1.5 — Format/Orient + Kunden-Tab 2026-04-08 22:20:09 +02:00
ChangeLog.md feat: Phase 1.3 + 1.7 + Schema 1.4/1.5 — Format/Orient + Kunden-Tab 2026-04-08 22:20:09 +02:00
CLAUDE.md feat: Unterschriften-Härtung + Kundenkarten-API 2026-04-09 08:06:21 +02:00
mobile_upload.php feat: Phase 2.1 + 2.2 — Mobile-Upload mit QR-Code 2026-04-08 22:38:33 +02:00
modulebuilder.txt fix: modulebuilder.txt Marker hinzugefügt — Modul erscheint jetzt im Module Builder [deploy] 2026-04-08 15:23:05 +02:00
README.md feat: Initiales Release Bericht-Modul v1.0.0 [deploy] 2026-04-08 15:18:59 +02:00

Bericht — Arbeitsberichte für Dolibarr

Erstellt aus den Anhängen einer Rechnung (oder eines Auftrags / Angebots) einen Arbeitsbericht als PDF. Bilder und PDFs lassen sich im Browser annotieren (Pfeile, Kreise, Rechtecke, Text, Freihand) — der fertige Bericht wird unter Verknüpfte Dokumente der Rechnung abgelegt.

Funktionen

  • Reiter „Bericht" auf Rechnungen, Aufträgen und Angeboten (jeweils per Konstante deaktivierbar)
  • Anhänge-Browser zeigt alle Dateien des aktuellen Dokuments und der direkt verknüpften Objekte (z. B. der Auftrag zur Rechnung)
  • Auswahl per Checkbox — markierte Dateien werden als Seiten in den Bericht übernommen
  • Browser-Editor mit PDF.js + Fabric.js: Pfeile, Kreise, Rechtecke, Freihand, Text, Farbe, Strichstärke, Undo/Redo
  • Seiten-Verwaltung per Drag&Drop (SortableJS): umordnen, löschen, drehen, neue Seiten hochladen
  • Notizen pro Seite — werden im finalen PDF unten auf der Seite gedruckt
  • Deckblatt aus ODT-Vorlage mit Platzhaltern ({auftragsnummer}, {kunde_name}, {datum}, …)
  • ODT-Templates im Admin-Bereich verwaltbar (mehrere Vorlagen, Standard wählbar)
  • Auftragsnummer wird automatisch aus dem Extrafield options_auftragsnummer der Rechnung gezogen
  • Mehrere Berichte pro Dokument möglich
  • Berichte als Entwurf speichern (jederzeit wieder editierbar) oder finalisieren (PDF erzeugen)

Voraussetzungen

  • Dolibarr ≥ 19.0
  • PHP ≥ 7.4
  • TCPDF (in Dolibarr enthalten)
  • FPDI (für PDF-Anhänge in den Bericht zu mergen) — empfohlen, optional
  • LibreOffice headless (für ODT→PDF Konvertierung der Deckblätter)
  • Optional: pdfinfo oder imagick für PDF-Seitenanzahl-Erkennung

Installation

  1. Modul-Verzeichnis nach dolibarr/htdocs/custom/bericht/ (oder per Symlink aus dem Module-Mount-Pfad) kopieren
  2. In Dolibarr unter Konfiguration → Module/Anwendungen das Modul Bericht aktivieren
  3. Beim Aktivieren werden die SQL-Tabellen llx_bericht und llx_bericht_page angelegt
  4. Vorhandene Extrafields auf llx_facture_extrafields (auftragsnummer, angebotsnummer, …) werden erkannt und nicht überschrieben — fehlende werden angelegt
  5. Im Admin-Bereich (/bericht/admin/setup.php) die ODT-Templates hochladen und Standard-Template setzen

Verwendung

  1. Eine Rechnung öffnen (/compta/facture/card.php?id=…)
  2. Reiter Bericht auswählen
  3. + Neuer Bericht klicken — die Auftragsnummer wird automatisch übernommen
  4. Im Editor links die gewünschten Anhänge ankreuzen → Auswahl in Bericht übernehmen
  5. Im mittleren Editor mit den Werkzeugen Pfeile, Texte etc. zeichnen
  6. Seiten rechts per Drag&Drop sortieren, einzelne Seiten löschen, neue Dateien hochladen
  7. Bericht finalisieren — PDF wird erzeugt, Deckblatt aus der ODT-Vorlage gerendert und unter den verknüpften Dokumenten der Rechnung abgelegt

ODT-Template Platzhalter

Platzhalter Inhalt
{auftragsnummer} Aus extrafield options_auftragsnummer der Rechnung
{angebotsnummer} Aus extrafield options_angebotsnummer
{rechnungsnummer} ref der Rechnung
{kunde_name} Name des Kunden (Société)
{kunde_adresse} Adresse des Kunden, mehrzeilig
{datum} Heutiges Datum
{beschreibung} extrafield options_beschreibung
{hinweis} extrafield options_hinweis
{bericht_titel} Titel des Berichts
{ersteller} Login-Name des erstellenden Users

Architektur

bericht/
├── core/modules/modBericht.class.php   Modul-Descriptor, Tabs, Extrafields-Init
├── class/bericht.class.php             Bericht + BerichtPage CRUD
├── lib/bericht.lib.php                 Helper (Anhänge sammeln, Auftragsnr., Templates)
├── bericht_card.php                    Editor-Seite (Tab-Inhalt)
├── admin/setup.php                     Admin: ODT-Templates, Konstanten
├── ajax/                               Endpoints (Token-geschützt)
│   ├── _inc.php                        Gemeinsamer Header
│   ├── add_attachment.php              Anhang als Seite hinzufügen
│   ├── upload_extra.php                Direkter Upload
│   ├── save_annotations.php            Fabric-JSON speichern
│   ├── page_meta.php                   Annotationen + Notiz laden
│   ├── page_image.php                  Seitenbild/PDF ausliefern
│   ├── delete_page.php
│   ├── reorder_pages.php
│   └── generate_pdf.php                Finalisierung: TCPDF + FPDI + ODT-Deckblatt
├── js/
│   ├── editor.js                       PDF.js + Fabric.js Integration
│   └── lib/                            PDF.js, Fabric.js, SortableJS (lokal)
├── css/bericht.css
├── sql/
│   ├── llx_bericht.sql
│   ├── llx_bericht.key.sql
│   ├── llx_bericht_page.sql
│   └── llx_bericht_page.key.sql
└── langs/{de_DE,en_US}/bericht.lang

Lizenz

GPL v3+