All checks were successful
Deploy bericht / deploy (push) Successful in 18s
- 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
130 lines
8.1 KiB
Markdown
130 lines
8.1 KiB
Markdown
# 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]`)
|