Commit graph

21 commits

Author SHA1 Message Date
Eddy
0a78d9e5d9 PWA: Dokumente (PDFs) in Mehrfachauswahl + Back-Button schließt Auswahl [deploy]
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 4s
- PDFs/Dokumente lassen sich jetzt auch im Auswahl-Modus markieren und
  mitteilen (bisher öffnete der Tap immer den Viewer)
- ☑ Auswählen-Button erscheint auch wenn nur Dokumente vorhanden sind
- Android-Zurück-Button im Select-Modus: hebt die Auswahl auf und
  beendet den Auswahl-Modus (statt die Seite zu verlassen)
- ✕ Abbrechen-Button nutzt denselben History-Back-Pfad

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 12:38:06 +02:00
Eddy
427fdeb0c0 PWA: Android-Zurück-Button-Fix + Datei-Teilen via Share-Sheet [deploy]
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 5s
- Modal-Stack mit History-API: jedes Modal pusht einen History-Eintrag,
  Android-Zurück schließt das Modal statt die App zu beenden
- Top-Level-Routen: "Nochmal drücken zum Beenden"-Toast (2s Fenster)
- shareFile()/shareFiles(): native Android-Share-Sheet für Fotos, PDFs, Dokumente
- Multi-Select in Fotogalerie: Mehrere Fotos gleichzeitig auswählen und teilen
- PDF-Teilen: auto-.pdf-Extension damit Android-Apps die Datei akzeptieren
- openPdfModal: Share-Button neben Download-Button

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 12:33:31 +02:00
Eddy
125a6302ab PWA: PDF-Viewer mit PDF.js (inline, kein Download nötig) [deploy]
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 5s
2026-04-17 12:52:47 +02:00
Eddy
a538dbb744 PWA: Weitere Dokumente anzeigen + öffnen (PDF-Viewer, Download) [deploy]
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 6s
- otherDocs-Sektion mit gestylten doc-items (Icon, Name, Größe, Datum)
- getFileBlobUrl() in api.js ohne Mime-Filter
- PDF/Bilder: Fullscreen-Modal mit iframe/img + Download-Button
- Andere Dateitypen: direkter Download
- CSS analog zu .audio-item

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-04-17 12:49:15 +02:00
Eddy
46f680039d [deploy] Layout-Fix: FAB aus #app-Flex-Container lösen + padding-bottom
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 4s
Der FAB hing als Kind im #app Flex-Layout (display:flex, column) und hat
die bottom-nav nach unten gedrängt. Jetzt sitzt er auf Body-Ebene,
beeinflusst kein Flex mehr. Zusätzlich hat #main padding-bottom:90px
damit der letzte Listeneintrag nicht vom FAB verdeckt wird.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 17:47:29 +02:00
Eddy
d4e4d09366 [deploy] Schnell-Auftrag-Erfassen via FAB + Login-Persistenz-Fix
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 5s
- FAB unten rechts (halbtransparent) öffnet Fullscreen-Modal zur
  Auftrags-Anlage: Kundensuche mit Debounce und "Zuletzt verwendet"-
  Quick-Pick aus IndexedDB → Anzeige der übernommenen Defaults →
  Titel + optional Kunden-Ref → direkter Sprung auf #/orders/<id>
  wo die Fotos aufgenommen werden können.
- appBoot() preloadet das JWT aktiv aus IndexedDB bevor der Router
  läuft — fixt "nach App-Neustart immer wieder einloggen müssen".
- setNav() steuert zusätzlich die FAB-Sichtbarkeit mit.
- api.createOrder() als neuer Wrapper für POST /orders.php?action=create.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 17:44:14 +02:00
Eddy
cb8dc396b3 Kunden-Bestellnr. in Auftragsliste anzeigen
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 5s
- ref_client wird neben Auftragsnummer angezeigt (wenn vorhanden)
- CSS-Styling für .ref-client

[deploy]

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-16 10:49:49 +02:00
Eddy
295ac82f43 Toggle "Auch abgeschlossene" für Auftragsliste + Doku aktualisiert
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 5s
PWA:
- Checkbox in /orders Route hinzugefügt
- Filter in localStorage persistiert
- CSS für .filter-toggle

Doku:
- README.md komplett aktualisiert mit allen Features
- API-Dokumentation erweitert

[deploy]

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-16 10:45:25 +02:00
Eddy
0a9c4d4db3 [deploy] Bild-Viewer mit Pinch-Zoom, Swipe und Navigation
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 0s
- Pinch-to-Zoom (2 Finger)
- Doppeltap für Zoom-Toggle
- Swipe links/rechts zum Bildwechsel
- Navigation-Buttons + Counter
- Tastatur: Pfeiltasten + Escape

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-13 13:26:56 +02:00
645624eeb6 Bericht löschen: Button + Dialog in Report-Detail, api.deleteReport() [deploy]
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 1s
- Lösch-Button (rot) unter Report-Detail
- Eigener Bestätigungs-Dialog (kein browser-confirm())
- api.deleteReport(id) → DELETE /reports.php?id=X
- CSS: .btn-danger Klasse

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 15:33:32 +02:00
54eea0fb22 feat: Block C — Seiten-Titel + api.request exposed
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 1s
- openPageActionsModal bekommt Titel-Feld (wird im PDF groß oben auf
  der Seite gedruckt, wenn gesetzt) zusätzlich zur Notiz
- Save sendet beide Felder zusammen via api.request POST
- Seiten-Thumbs zeigen Titel als Badge unten (ellipsis bei langem
  Text)
- lib/api.js exposed request() als Low-Level-Funktion für
  Spezialfälle wie dieses Update

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
[deploy]
2026-04-09 09:10:57 +02:00
31a690454c feat: PWA Schnell-Bericht + Template-Dropdown + Whisper-Transkribieren
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 1s
Schnell-Bericht-Modal (Phase 4.a + 4.i):
- '📑 Neuen Bericht anlegen…' Button im Auftrags-Detail
- openNewReportModal: Titel, Format/Orientation, Vorlage-Dropdown,
  ODT-Deckblatt-Dropdown
- Auto-Select der Default-ODT-Vorlage aus Admin-Config
- api.createReport() als Wrapper für /reports.php?action=create
- api.listTemplates() + api.listOdtTemplates()

Whisper-Transkription (Phase 5.7):
- Neuer 📝-Button je Audio-Item
- Tap → api.transcribeAudio(relpath) → Server ruft Whisper-Endpoint
- Transkribierter Text erscheint direkt unter dem Audio-Player
- Text ist wählbar und kann kopiert werden

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
[deploy]
2026-04-09 08:27:46 +02:00
0e8ebed717 feat: PIN-Schutz + Seiten-Reorder + Stamps
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 1s
4.c PIN-Schutz (optional):
- Settings → Sicherheit → Toggle aktiviert PIN
- 4-stelliger Keypad-Dialog (promptPin/promptNewPin)
- SHA256 mit random Salt, beides in IndexedDB
- appBoot() Lockscreen vor Router-Start
- PIN ändern, deaktivieren jederzeit möglich
- Logout löscht PIN-Daten

4.f Seiten umsortieren:
- Long-Press (500ms) auf Seiten-Thumb → Drag-Modus
- Touch-basierter Reorder mit elementFromPoint
- Vibrationshinweis beim Drag-Start
- Beim Release: api.reorderPages + Nummern-Badges updaten

5.1 Stamps im Sketch-Editor:
- Vier vordefinierte Stempel in der Toolbar:
  ⚠ Achtung, ✓ OK, ✗ Mangel, 🔧 Reparatur
- Ein-Klick-Platzierung, Farbe aus Color-Picker,
  weißer Outline damit sie auf jedem Bild sichtbar sind
- 96px Bold-Font

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
[deploy]
2026-04-09 08:18:53 +02:00
503d36bd09 feat: Kundenkarten-Tab + Unterschriften-Härtung im Signature-Modal
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 0s
Kundenkarten:
- Neuer Bottom-Nav Eintrag '👥 Kunden'
- /customers Route: Liste mit Suche, gefiltert über api/customers.php
- /customers/:id Route: Stammdaten mit Click-to-Call, Click-to-Mail,
  Google-Maps-Route-Button, Listen für Aufträge/Berichte/Rechnungen
  mit Mini-Card-Layout
- Mini-Cards navigieren zum jeweiligen Auftrag/Bericht
- formatDate + formatEur Helper (de-DE Locale)

Unterschriften-Härtung (Signature-Modal):
- Pflicht-Input für Signer-Name
- GPS-Checkbox (default an) — fragt navigator.geolocation ab
- Rechtstext als Hinweis
- Beim Save: Name + GPS werden an api.uploadSignature übergeben
- Server brennt Metadaten, Hash und GPS in die PNG ein

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
[deploy]
2026-04-09 08:06:22 +02:00
02ffdca57c feat: Phase 4 Block 1 — Seite bearbeiten, PDF-Vorschau, Unterschrift, Share Target
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 1s
Bericht-Detail-Ansicht:
- Tap auf Seiten-Thumb → openPageActionsModal mit:
  - Vorschaubild
  - Textarea für Seiten-Notiz (wird im PDF unter der Seite gedruckt)
  - '💾 Notiz speichern' → api.updatePageNote
  - 🗑️ im Header → api.deletePage mit Confirm
- Seiten-Thumbs haben Nummer-Badge oben links (1, 2, 3…)
- Neuer '👁 PDF-Vorschau'-Button öffnet openPdfModal (iframe mit
  Blob-URL) für Final-PDF oder on-the-fly Preview
- Neuer '✍️ Kunden-Unterschrift hinzufügen'-Button öffnet
  openSignatureModal: Touch-Canvas 2:1, Clear, Save → PNG wird als
  neue Bericht-Seite mit note='Unterschrift Kunde' angelegt

Web Share Target API:
- manifest.webmanifest: share_target mit photos array
- share.html: empfängt geteilte Fotos aus IDB (vom SW befüllt),
  zeigt Auftragsliste, Tap → Upload aller Fotos
- Service Worker v5: fängt POST /share.html ab, schreibt Files in
  IDB Key 'shared_files', redirected 303

Cache-Version bumpt damit neue Files geladen werden.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
[deploy]
2026-04-09 01:00:24 +02:00
3f1b462105 feat: Hilfe-Button in Topbar mit kompletter Anleitung
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 1s
-Button oben rechts öffnet ein Vollbild-Modal mit:
- Auftragsfindung und Suche
- Fotos aufnehmen (Kamera/Galerie), Hinweis auf Entwurf-Akkumulation
- Skizzen-Editor (Pen/Pfeil/Rect/Ellipse, Undo, speichern)
- Sprachnotizen aufnehmen + abspielen
- Berichte finalisieren + Status-Erklärung
- Offline-Modus + Status-Badge-Legende
- Installation auf Home-Screen (Android + iOS)
- Einstellungen

Service Worker v4.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
[deploy]
2026-04-09 00:46:52 +02:00
bd9580bd46 fix: Finalisieren-Button immer sichtbar + Sprachnotizen eigene Sektion
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 1s
- Bericht-Detail: Button ist jetzt immer da, bei Final heißt er
  'PDF neu erzeugen'. Bei 0 Seiten disabled statt versteckt, mit
  Hinweis-Empty-State darüber.
- Auftrags-Detail: Audio-Files (webm/mp3/ogg/m4a/wav) werden aus
  'Weitere Dokumente' rausgefiltert und in eine eigene Sektion
  '🎙 Sprachnotizen' mit Play-Button je Eintrag gelegt. Tap auf ▶
  lädt die Datei als Blob (mit JWT) und setzt einen <audio>-Player
  inline ein.
- Service Worker v3.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
[deploy]
2026-04-09 00:43:27 +02:00
a1589a7ae2 feat: Phase 4 — Bericht-Liste, Detail, Foto-Vollbild, Voice, Sketch
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 1s
Der Reports-Tab listet alle Berichte des Users mit Status-Badge,
Quell-Referenz und Seitenzahl. Klick → Bericht-Detail mit:
- Meta (Titel, Format, Status, Seiten)
- Seiten-Thumbnails
- 'Bericht finalisieren' Button (triggert PDF-Generierung via API)
- 'Im Desktop-Editor öffnen' Link

Auftrags-Detail erweitert:
- Tap auf Foto-Thumb → Vollbild-Modal mit Löschen-Button und
  'Zeichnen'-Button (öffnet Skizzen-Editor)
- '🎙 Sprachnotiz aufnehmen' Button → Voice-Modal mit MediaRecorder,
  Live-Timer, Preview, Upload

Skizzen-Editor (Touch-fähig):
- Bild wird in canvas geladen, max 1600px
- Werkzeuge: Pen, Pfeil mit Spitze, Rechteck, Ellipse
- Farbe + Linienstärke
- Undo + Clear
- Speichern → rendert als JPEG und lädt als neue Bericht-Seite hoch

Service Worker Cache-Version auf v2 gebumpt.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
[deploy]
2026-04-09 00:31:39 +02:00
720cdc446d fix: Thumb-Größe begrenzt + console.warn wenn photo.php kein Bild liefert
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 1s
- photo-grid: max-width 600px, thumb max 160px (vorher riesig auf Desktop)
- auto-fill Grid statt fixes repeat(3)
- api.getPhotoBlobUrl loggt Content-Type + Body bei Fehler, um
  API-Probleme in der Konsole sichtbar zu machen

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
[deploy]
2026-04-08 23:25:25 +02:00
a234de58c5 fix: Thumbs via api/photo.php mit Blob-URLs laden (JWT-kompatibel)
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 1s
<img src> kann keine Authorization-Header schicken. Wir holen die
Bilder jetzt via fetch() mit Bearer-Token und setzen Blob-URLs in die
Thumbnails ein (mit Cache für wiederholte Abrufe). Vorher zeigte die
PWA leere Bild-Placeholder weil document.php eine Session verlangt.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
[deploy]
2026-04-08 23:18:09 +02:00
7c0aefa793 feat: Initiales Release Baustelle PWA v1.0.0 [deploy]
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 1s
Mobile Progressive Web App für Baustellen-Doku, spricht die REST-API
des Dolibarr-Bericht-Moduls.

MVP-Features:
- Vanilla JavaScript, kein Build-Step nötig
- Login mit Dolibarr-Credentials → JWT (7 Tage)
- Auftragsliste mit Suche und Multi-User-Filter
- Auftragsdetail mit Kunde, Adresse, Click-to-Call
- Foto-Aufnahme via Kamera oder Galerie (multiple)
- Clientseitige Bildverkleinerung (max 2000px, JPEG q=0.85)
- Offline-Queue in IndexedDB für Uploads ohne Netz
- Auto-Sync bei Online-Event mit Status-Badge
- Service Worker für App-Shell-Cache
- PWA-installierbar (Manifest, Icons, Theme-Color)

Hosting: awl.data-it-solution.de/baustelle/ via Apache-Alias

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 22:50:01 +02:00