bericht/ChangeLog.md
Eduard Wisch 52810b2b91
All checks were successful
Deploy bericht / deploy (push) Successful in 18s
Doku: Modul-Version 1.3.1 + ChangeLog (customers.php-Uebersetzung, PWA-Layout) [deploy]
- modBericht.class.php: version 1.1.0 -> 1.3.1 (war seit 1.1.0 nie nachgezogen)
- ChangeLog 1.3.1: Zahlart/Zahlungsbedingung-Uebersetzung + PWA-Formular-Layout-Fix
2026-07-18 14:55:31 +02:00

8.1 KiB

Changelog

1.3.1 — 2026-07-18

Fixes rund um die PWA-Auftragsanlage

  • api/customers.php: Zahlart und Zahlungsbedingung im Kunden-Detail werden jetzt übersetzt — über die Dolibarr-Sprachkeys PaymentTypeShort<code> / PaymentConditionShort<code> (Sprachdatei bills) statt der rohen englischen libelle-Werte aus c_paiement/c_payment_term. Behebt die Anzeige „💳 Payment Condition · 🏦 Credit transfer" in der „Übernommen"-Zeile. Fallback auf libelle, wenn kein Sprachkey existiert (z. B. Custom-Einträge ohne code).
  • Baustelle-PWA (Repo baustelle-pwa): „Neuer Auftrag"-Formular saß vertikal zu weit unten (der gemeinsame .fs-body erbte justify-content:center, was bei flex-direction:column vertikal zentriert) und wurde von der Bildschirmtastatur verdeckt → justify-content:flex-start im Modal + scrollIntoView({block:'center'}) beim Feld-Fokus.

1.3.0 — 2026-07-18

PWA Auftrag-Anlegen überarbeitet (Formular + Freigabe)

Formular (Baustelle-PWA, openNewOrderModal)

  • Feld-Reihenfolge/Beschriftung angepasst: „Ihr Zeichen" (= ref_client) steht jetzt an erster Stelle und ist Pflicht; „Auftragsbeschreibung" (= Extrafield options_auftragsbeschreibung) an zweiter Stelle und optional. (Vorher genau umgekehrt: Titel Pflicht, Kunden-Referenz optional.)
  • Neues Feld „Geplanter Liefertermin" (datetime-local, Datum + Uhrzeit in einem Feld) → Auftrag-Spalte date_livraison.
  • Neue Checkbox „Auftrag direkt freigeben".

Backend (api/orders.php?action=create)

  • ref_client ist jetzt serverseitig Pflicht (Geschäftsregel — Dolibarr-Core verlangt nur den Kunden).
  • Neuer Parameter date_livraison (Unix-TS) → Commande->delivery_date.
  • Neuer Parameter validate: legt vor der Freigabe automatisch eine Std-Lohn-Zeile an und ruft dann Commande::valid().
    • Produkt: Kundenkarten-Default options_stundenzettel_default_service, sonst Fallback-Produkt über Ref BERICHT_ORDER_DEFAULT_SERVICE_REF (Default ELEK-STD-M, „Stundenlohn Meister" 45 €).
    • Preis: kundenspezifischer Preis (PRODUIT_CUSTOMER_PRICES) hat Vorrang, sonst Produkt-Standardpreis. Menge 1.
  • Response erweitert um ref_client, date_livraison, validated, added_line, validate_warning.

1.2.0 — 2026-05-27

Phase 1.8 Lieferschein-Bestätigung in der PWA

Neuer element_type='shipment'

  • Bericht-Modul unterstützt jetzt element_type='shipment' mit fk_element = llx_expedition.rowid
  • Tab "Bericht" erscheint auf der Lieferung-Card (Konstante BERICHT_TAB_ON_SHIPMENT)
  • bericht_fetch_parent() und bericht_fetch_shipment_with_order() laden Expedition + verknüpften Auftrag

Signatur auf Lieferschein-PDF stempeln

  • Neue Tabelle llx_bericht_signature_box: Pro PDF-Template (merou/rouget/espadon/...) konfigurierbare Box-Geometrie (x/y/w/h in mm, Seite first/last, Label)
  • Konstante BERICHT_SIGNATURE_BOX_DEFAULT als JSON-Default ({"page":"last","x_mm":120,"y_mm":230,"w_mm":70,"h_mm":35,"label":"Unterschrift Kunde"})
  • bericht_stamp_signature_on_pdf(): FPDI importiert Original-Lieferschein, TCPDF stempelt PNG + Name + Datum + GPS in die konfigurierte Box

Visueller Admin-Editor (admin/signature_box_editor.php)

  • PDF.js rendert ein Beispiel-Lieferschein-PDF
  • Fabric.js-Rechteck zum Drag&Resize der Signatur-Box auf dem Canvas
  • Eingabefelder für X/Y/W/H/Label/Seite werden live synchronisiert
  • "Speichern" persistiert via AJAX (ajax/save_signature_box.php) in llx_bericht_signature_box (UPSERT auf template_name)
  • Reset-Button setzt zurück auf Default-Konstante

Neue PWA-Route (Baustelle-App)

  • Order-Detail bekommt Button "🚚 Lieferungen"
  • #/orders/:id/shipments zeigt Liste aller verknüpften Expeditionen mit Status- und Signed-Badge
  • #/shipments/:id zeigt Lieferschein-PDF inline (PDF.js Canvas) + großen Button "Lieferung unterschreiben lassen"

Vollbild-Querformat-Signatur (openShipmentSignatureModal)

  • requestFullscreen() + screen.orientation.lock('landscape') (Best-Effort)
  • 2-Spalten-Layout: links Lieferschein-Info + Namens-Input + GPS-Toggle, rechts Vollbild-Canvas
  • HiDPI-aware Canvas (devicePixelRatio), Pointer/Touch-Events mit quadratischer Glättung
  • Beim Bestätigen: PNG → POST /api/shipments.php?action=confirm → Backend stempelt in PDF und legt es in documents/expedition/<ref>/<ref>-signed.pdf

Auto-Workflow auf der Expedition

  • signed_status=1 (via CommonSignedObject::setSignedStatus)
  • Wenn Expedition noch Draft (Status 0): erst valid(), dann setClosed()
  • Bericht-Record (element_type='shipment') wird angelegt/aktualisiert mit final_pdf_path zum signierten PDF
  • <sig>.meta.json neben der PNG mit voller Audit-Spur (signer, user, GPS, IP, Box, Template, signed_at)

Neue API-Endpoints

  • GET /api/shipments.php?order_id=<id> — Liste der Lieferungen zu einem Auftrag
  • GET /api/shipments.php?id=<id> — Detail einer Lieferung + Bericht-ID falls vorhanden
  • GET /api/shipments.php?id=<id>&action=pdf — PDF-Stream (Original oder gestempelt)
  • POST /api/shipments.php?id=<id>&action=confirm — Unterschrift einstempeln + Status-Workflow

1.1.0 — 2026-04-08

Phase 1 Bericht-Modul Erweiterungen

1.6 Verknüpfte Sicht Auftrag↔Rechnung

  • Bericht-Übersicht zeigt drei Sektionen: direkt zugeordnet, zusätzlich verknüpft, aus verknüpften Aufträgen
  • "→ Übernehmen"-Button erstellt llx_element_element-Eintrag (n:m-Verknüpfung)
  • "Lösen"-Button entfernt Verknüpfung
  • Beim Finalisieren landet das PDF auch unter den verknüpften Elementen im ECM

1.1 Live-PDF-Vorschau

  • 👁️ Vorschau-Button im Editor → Modal mit eingebettetem PDF
  • Neuer Endpoint ajax/preview_pdf.php (kein ECM-Insert, kein Status-Wechsel)
  • ESC oder Klick auf Backdrop schließt das Modal

1.2 Anhänge löschen

  • 🗑️ Icon neben jedem Anhang in der linken Spalte
  • Confirm-Dialog mit Auftrags-/Rechnungs-Referenz
  • Path-Whitelist (nur facture/, commande/, propal/), Thumbs + ECM-Eintrag werden mitgelöscht

1.3 Seitengröße A4/A3/A5/Letter + Hoch/Quer

  • Format und Orientation in der Bericht-Meta wählbar
  • Auto-Save bei Änderung
  • Bilder werden dynamisch auf die Seitengröße skaliert

1.4 + 1.5 Mehrere Bilder pro Seite (DB-Schema)

  • Neue Tabelle llx_bericht_page_image für Multi-Image-Seiten
  • Spalten layout, image_scale, image_align in llx_bericht_page
  • Grid-Rendering im Editor + PDF folgt im nächsten Commit

1.7 Tab „Berichte" auf Kundenkarte

  • Read-only Übersicht aller Berichte des Kunden
  • Flache Tabelle sortiert nach Datum
  • Springt zum Bericht oder zur Quelle (Auftrag/Rechnung/Angebot)
  • Konstante BERICHT_TAB_ON_THIRDPARTY zum Aktivieren

Sonstiges

  • DB-Migrationen im init() für bestehende Installationen (ALTER TABLE mit Error-Suppress)
  • bericht_burn_annotations und bericht_render_cover_internal in lib/bericht.lib.php zentralisiert (gemeinsam von generate_pdf + preview_pdf genutzt)
  • Modal-CSS für Vorschau im Dolibarr Dark-Theme

1.0.0 — 2026-04-08

Initiales Release.

  • Modul-Scaffold mit Reiter „Bericht" auf Rechnungen, Aufträgen und Angeboten
  • CRUD für Bericht und BerichtPage (Tabellen llx_bericht, llx_bericht_page)
  • Browser-Editor mit PDF.js + Fabric.js: Pfeile, Kreise, Rechtecke, Freihand, Text, Undo/Redo
  • Anhänge-Browser zeigt eigene Anhänge + Anhänge verknüpfter Objekte
  • Datei-Upload direkt in den Bericht
  • Seiten-Verwaltung mit Drag&Drop (SortableJS), Löschen, Drehen
  • Notizen pro Seite (werden im PDF gedruckt)
  • Admin-Setup mit ODT-Template-Verwaltung (Upload, Löschen, Standard wählen)
  • Platzhalter-System für ODT-Templates ({auftragsnummer}, {kunde_name}, …)
  • PDF-Finalisierung mit TCPDF + FPDI, ODT→PDF Konvertierung des Deckblatts via LibreOffice
  • Annotationen werden beim Export ins PDF eingebrannt
  • Auftragsnummer wird automatisch aus dem vorhandenen Extrafield options_auftragsnummer geholt
  • Beim Aktivieren werden fehlende Extrafields auf llx_facture_extrafields angelegt, vorhandene NICHT überschrieben
  • Mehrere Berichte pro Dokument möglich
  • Forgejo-Workflow für Deploy nach Dolibarr (Tag [deploy])