diff --git a/README.md b/README.md index c42ac06..aa5afef 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,8 @@ Mobile Progressive Web App für die Baustellen-Doku — Foto-Upload, Sprach- und **Aufträge** - ✅ 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 +- ✅ **„Heute"-Ansicht**: offene Aufträge des Tages, gefiltert aus der normalen Auftragsliste, mit Route + für alle Termine auf einen Blick (öffnet Google Maps mit allen Adressen als Wegpunkten) - ✅ Auftragsliste mit Suche, gefiltert auf eigene Aufträge (Multi-User) - ✅ Toggle "Auch abgeschlossene" (Filter in localStorage persistiert) - ✅ Auftragsdetail mit Kunde, Adresse, Telefon (Click-to-Call) @@ -74,13 +76,11 @@ Mobile Progressive Web App für die Baustellen-Doku — Foto-Upload, Sprach- und - ✅ Android-Hardware-Back-Button schließt Modale/Ansichten sauber (History-Modal-Stack), bricht Mehrfachauswahl ab statt App zu verlassen - ✅ „Nochmal drücken zum Beenden"-Toast auf Top-Level-Routen - ✅ PIN-Schutz (optional) +- ✅ **Push-Benachrichtigungen via ntfy** (statt klassischem Web-Push): eigener Server/Topic in den + Einstellungen, Browser-Notification-Permission, Reconnect bei Verbindungsabbruch - ✅ **Bild-Cache** `baustelle-media` (cache-first, LRU 300): schon angesehene Fotos sind auch ohne Netz da; überlebt Deploys, wird beim Abmelden geleert - ✅ **Keine Browser-Dialoge** — `confirm`/`alert`/`prompt` sind durch eigene Modale ersetzt (`confirmDialog`, `alertDialog`, `inputDialog`); der Hardware-Zurück-Button schließt sie als Abbruch -## Geplant - -- Push-Notifications für neue Aufträge - ## Hosting Deploy per Forgejo-Pipeline (Commit-Tag `[deploy]`) nach `/mnt/appdata/firma/dolibarr-202509/modules/baustelle/`. Erreichbar unter `https://awl.data-it-solution.de/custom/baustelle/`. Cache-Busting automatisch via `filemtime()` in `index.php` (`?v=` an JS/CSS) — kein manuelles Versions-Hochzählen nötig, die PWA aktualisiert sich beim nächsten Laden. @@ -114,12 +114,15 @@ Die App spricht die Bericht-API unter `/custom/bericht/api/`: **Auth** - `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) +- `GET /verify.php` — prüft das Cookie und verlängert die Session (sliding renewal); läuft bei jedem Routenwechsel (`ensureAuth()`) und ist der Weg, wie `share.html` prüft, ob eine Anmeldung nötig ist +- `POST /logout.php` — löscht das `awl_sso`-Cookie (Single-Logout über alle AWL-Apps) **Aufträge** - `GET /orders.php` — Aufträge des Users (Filter: `?open=1`, `?q=suche`) - `GET /orders.php?id=X` — Auftrag-Detail inkl. verknüpfte Berichte - `GET /orders.php?id=X&action=photos` — Anhang-Liste (je Datei `taken_at` = EXIF-Aufnahmezeit, danach sortiert) - `POST /orders.php?id=X&action=upload_photo` — Foto-Upload (multipart) +- `POST /orders.php?action=create` — Neuen Auftrag anlegen (Kunde, Ihr Zeichen, Beschreibung, Liefertermin, optional direkt freigeben) **Kunden** - `GET /customers.php` — Kundenliste (Filter: `?q=suche`) @@ -168,6 +171,9 @@ Die App spricht die Bericht-API unter `/custom/bericht/api/`: - `GET /templates.php` — Bericht-Vorlagen - `GET /odt_templates.php` — ODT-Deckblatt-Vorlagen +**Konfiguration** +- `GET /config.php` — Admin-Vorgaben zur Fotoqualität (`photo_maxside`, `photo_quality`); wird beim Start und nach jedem Login neu geladen, zwischengespeichert in `localStorage` für den Offline-Fall + ## Lizenz GPL v3+