Doku: README auf SSO/awlauth + Neuer-Auftrag-Flow aktualisiert [deploy]
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 14s

- Auth-Doku von JWT auf zentrales SSO (HttpOnly-Cookie awl_sso, same-origin)
  umgestellt: Stack, Feature-Login, lib-Beschreibung, /auth.php, photo.php/pdf.php
  (?jwt= entfaellt, Cookie wird same-origin auch fuer img/object mitgeschickt)
- Feature 'Neuer Auftrag' dokumentiert (Ihr Zeichen/Beschreibung/Liefertermin/Freigabe)
This commit is contained in:
Eddy 2026-07-18 14:55:34 +02:00
parent efc5cc2d29
commit f560fd3a58

View file

@ -6,16 +6,17 @@ Mobile Progressive Web App für die Baustellen-Doku — Foto-Upload, Sprachnotiz
- **Vanilla JavaScript** — kein Build, keine Framework-Abhängigkeit - **Vanilla JavaScript** — kein Build, keine Framework-Abhängigkeit
- **Service Worker** für App-Shell-Cache (Workbox-frei, eigene Implementierung) - **Service Worker** für App-Shell-Cache (Workbox-frei, eigene Implementierung)
- **IndexedDB** für JWT-Storage und Offline-Upload-Queue - **IndexedDB** für die Offline-Upload-Queue (Auth-Session steckt im HttpOnly-Cookie, nicht in IndexedDB)
- **REST API** des `bericht`-Dolibarr-Moduls unter `/custom/bericht/api/` - **REST API** des `bericht`-Dolibarr-Moduls unter `/custom/bericht/api/`
## Features ## Features
**Aufträge** **Aufträge**
- ✅ Login mit Dolibarr-Credentials → JWT (7 Tage gültig) - ✅ Login mit Dolibarr-Credentials → zentrales SSO (HttpOnly-Cookie `awl_sso`, same-origin; Single-Sign-On/-Logout über alle AWL-Apps). WebAuthn/Passkey-Login möglich
- ✅ Auftragsliste mit Suche, gefiltert auf eigene Aufträge (Multi-User) - ✅ Auftragsliste mit Suche, gefiltert auf eigene Aufträge (Multi-User)
- ✅ Toggle "Auch abgeschlossene" (Filter in localStorage persistiert) - ✅ Toggle "Auch abgeschlossene" (Filter in localStorage persistiert)
- ✅ Auftragsdetail mit Kunde, Adresse, Telefon (Click-to-Call) - ✅ Auftragsdetail mit Kunde, Adresse, Telefon (Click-to-Call)
- ✅ **Neuer Auftrag** (FAB): Kunde per Suche/Zuletzt-verwendet wählen, dann **Ihr Zeichen** (Pflicht), **Auftragsbeschreibung** (optional), **Geplanter Liefertermin** (Datum + Uhrzeit) und Checkbox **Auftrag direkt freigeben**. Kunden-Defaults (Zahlungsbedingung/Zahlart, Ansprechpartner) werden übernommen. Bei „direkt freigeben" hängt das Backend automatisch eine Std-Lohn-Zeile an (Kundenkarten-Default bzw. Fallback-Produkt, kundenspezifischer Preis) und validiert den Auftrag.
**Foto-Upload** **Foto-Upload**
- ✅ Live-Kamera-Modal (getUserMedia): bleibt für Serien-Aufnahmen offen — Auslöser + Filmstreifen mit Upload-Status je Foto (💾 gesichert → ⏳ lädt hoch → ✓ fertig), Front-/Rückkamera-Umschaltung, Fehlschuss löschbar - ✅ Live-Kamera-Modal (getUserMedia): bleibt für Serien-Aufnahmen offen — Auslöser + Filmstreifen mit Upload-Status je Foto (💾 gesichert → ⏳ lädt hoch → ✓ fertig), Front-/Rückkamera-Umschaltung, Fehlschuss löschbar
@ -84,8 +85,8 @@ baustelle-pwa/
├── app.js Hauptlogik (Routes, Views) ├── app.js Hauptlogik (Routes, Views)
├── app.css Mobile-first Styling ├── app.css Mobile-first Styling
├── lib/ ├── lib/
│ ├── idb.js IndexedDB-Wrapper (JWT + Foto-Queue) │ ├── idb.js IndexedDB-Wrapper (Foto-Queue)
│ ├── api.js REST-API-Client (JWT, JSON-Guard, Timeout) │ ├── api.js REST-API-Client (SSO-Cookie same-origin, JSON-Guard, Timeout)
│ ├── offline.js Offline-Queue + Sync (Persist-First) │ ├── offline.js Offline-Queue + Sync (Persist-First)
│ ├── router.js Hash-Router │ ├── router.js Hash-Router
│ ├── pdf.min.js PDF.js (Lieferschein-Vorschau) │ ├── pdf.min.js PDF.js (Lieferschein-Vorschau)
@ -100,7 +101,7 @@ baustelle-pwa/
Die App spricht die Bericht-API unter `/custom/bericht/api/`: Die App spricht die Bericht-API unter `/custom/bericht/api/`:
**Auth** **Auth**
- `POST /auth.php` — Login mit Dolibarr-Credentials → JWT - `POST /auth.php` — Login mit Dolibarr-Credentials → setzt HttpOnly-Cookie `awl_sso` (zentrales SSO via awlauth). Folge-Requests authentisieren same-origin über das Cookie (kein Bearer-Token)
**Aufträge** **Aufträge**
- `GET /orders.php` — Aufträge des Users (Filter: `?open=1`, `?q=suche`) - `GET /orders.php` — Aufträge des Users (Filter: `?open=1`, `?q=suche`)
@ -137,11 +138,11 @@ Die App spricht die Bericht-API unter `/custom/bericht/api/`:
- `POST /shipments.php?id=X&action=confirm` — Kunden-Unterschrift einstempeln (FormData mit signature_png, signer_name, gps_lat, gps_lon, signed_at). Backend setzt signed_status=1 und schließt die Expedition - `POST /shipments.php?id=X&action=confirm` — Kunden-Unterschrift einstempeln (FormData mit signature_png, signer_name, gps_lat, gps_lon, signed_at). Backend setzt signed_status=1 und schließt die Expedition
**Medien** **Medien**
- `GET /photo.php?relpath=X&jwt=Y` — Foto abrufen (mit Thumbnail: `&size=thumb`) - `GET /photo.php?relpath=X` — Foto abrufen (mit Thumbnail: `&size=thumb`); Auth über `awl_sso`-Cookie (same-origin, auch für `<img>`-Tags — kein `?jwt=` mehr nötig)
- `POST /delete_photo.php` — Foto löschen - `POST /delete_photo.php` — Foto löschen
- `POST /voice.php?order_id=X` — Sprachnotiz hochladen - `POST /voice.php?order_id=X` — Sprachnotiz hochladen
- `POST /transcribe.php` — Whisper-Transkription anfordern - `POST /transcribe.php` — Whisper-Transkription anfordern
- `GET /pdf.php?id=X&jwt=Y` — PDF abrufen (Final oder Preview) - `GET /pdf.php?id=X` — PDF abrufen (Final oder Preview); Auth über `awl_sso`-Cookie (same-origin)
**Templates** **Templates**
- `GET /templates.php` — Bericht-Vorlagen - `GET /templates.php` — Bericht-Vorlagen