PWA Mobile App für Schaltschrank-Dokumentation vor Ort: - Token-basierte Authentifizierung (15 Tage gültig) - Kundensuche mit Offline-Cache - Anlagen-Auswahl und Offline-Laden - Felder/Hutschienen/Automaten erfassen - Automatische Synchronisierung wenn wieder online - Installierbar auf dem Smartphone Home Screen - Touch-optimiertes Dark Mode Design - Quick-Select für Automaten-Werte (B16, C32, etc.) Schaltplan-Editor Verbesserungen: - Block Hover-Tooltip mit show_in_hover Feldern - Produktinfo mit Icon im Tooltip - Position und Breite in TE Neue Dateien: - pwa.php, pwa_auth.php - PWA Einstieg & Auth - ajax/pwa_api.php - PWA AJAX API - js/pwa.js, css/pwa.css - PWA App & Styles - sw.js, manifest.json - Service Worker & Manifest - img/pwa-icon-192.png, img/pwa-icon-512.png Version: 5.2.0 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5.6 KiB
Executable file
CLAUDE_CODE_DISABLE_AUTO_MEMORY=0
KundenKarte Module - Entwicklungshinweise
Dolibarr App Navigation (Vor/Zurück Pfeile)
Problem
Die Dolibarr Mobile App hat eigene Navigations-Pfeile (vorheriger/nächster Kunde), die zwischen Datensätzen navigieren. Diese verwenden andere Parameter als unsere Module erwarten:
- Kunden-Navigation: Dolibarr verwendet
socid, Module erwarten oftid - Kontakt-Navigation: Dolibarr verwendet
contactid, Module erwarten oftid
Wenn man diese Pfeile auf einem Modul-Tab verwendet, verliert das Modul die ID und zeigt einen Fehler oder leere Seite.
Lösung: Beide Parameter akzeptieren
In JEDEM Tab-PHP-File muss am Anfang beide Parameter akzeptiert werden:
Für Kunden-Tabs (thirdparty):
// Get parameters
// Support both 'id' and 'socid' for compatibility with Dolibarr's customer navigation arrows
$id = GETPOSTINT('id');
if ($id <= 0) {
$id = GETPOSTINT('socid');
}
Für Kontakt-Tabs (contact):
// Get parameters
// Support both 'id' and 'contactid' for compatibility with Dolibarr's contact navigation arrows
$id = GETPOSTINT('id');
if ($id <= 0) {
$id = GETPOSTINT('contactid');
}
Betroffene Dateien in diesem Modul
tabs/anlagen.php- Kunden-Anlagen (socid)tabs/favoriteproducts.php- Kunden-Favoriten (socid)tabs/contact_anlagen.php- Kontakt-Anlagen (contactid)tabs/contact_favoriteproducts.php- Kontakt-Favoriten (contactid)
Best Practices für zukünftige Module
- IMMER beide Parameter akzeptieren -
idUNDsocid/contactid - Tab-Definition in modXxx.class.php verwendet
?id=__ID__- das ist korrekt - Dolibarr's
dol_banner_tab()generiert die Navigationspfeile mitsocid/contactid - Fallback bei fehlender ID - zur Liste weiterleiten, nicht Fehler zeigen:
if ($id <= 0) {
header('Location: '.DOL_URL_ROOT.'/societe/list.php');
exit;
}
Mobile Ansicht - Einheitliche Button-Größen
Problem
Auf mobilen Geräten haben die Buttons (Kompakt, Aufklappen, Einklappen, PDF Export) unterschiedliche Größen.
Lösung
CSS Media Queries für einheitliche Button-Größen:
@media (max-width: 768px) {
.kundenkarte-tree-controls {
justify-content: center !important;
flex-wrap: wrap !important;
gap: 8px !important;
}
.kundenkarte-tree-controls .button {
flex: 1 1 auto !important;
min-width: 80px !important;
max-width: 150px !important;
padding: 10px 8px !important;
font-size: 12px !important;
text-align: center !important;
}
}
@media (max-width: 480px) {
/* 2x2 Grid auf sehr kleinen Bildschirmen */
.kundenkarte-tree-controls {
display: grid !important;
grid-template-columns: 1fr 1fr !important;
}
}
Migrationen
Alle Datenbankänderungen werden als idempotente Migrationen in modKundenKarte.class.php implementiert:
runMigrations()wird bei jeder Modulaktivierung aufgerufen- Jede Migration prüft zuerst, ob die Änderung bereits existiert
- Später werden Migrationen entfernt und Tabellen direkt korrekt erstellt
Dateistruktur
tabs/anlagen.php- Hauptansicht für Anlagen auf Kundenebenetabs/contact_anlagen.php- Anlagen für Kontaktetabs/favoriteproducts.php- Lieblingsprodukte auf Kundenebenetabs/contact_favoriteproducts.php- Lieblingsprodukte für Kontakteadmin/anlage_types.php- Verwaltung der Element-Typenajax/- AJAX-Endpunkte für dynamische Funktionenjs/kundenkarte.js- Alle JavaScript-Komponentencss/kundenkarte.css- Alle Styles (Dark Mode)
Wichtige Hinweise
FontAwesome Icons
- Dolibarr verwendet FontAwesome 4.x Format:
fa fa-icon-name - NICHT:
fas fa-icon-nameoderfar fa-icon-name
Badge-Farben
- Können pro Feld in Admin > Element-Typen konfiguriert werden
- Spalte
badge_colorinllx_kundenkarte_anlage_type_field - Hex-Format:
#RRGGBB
Datei-Vorschau Tooltip
- AJAX-Endpoint:
ajax/file_preview.php - Zeigt Thumbnails für Bilder, Icons für Dokumente
- Hover über Datei-Badge im Baum
PWA Mobile App
Übersicht
Offline-fähige Progressive Web App für Elektriker zur Schaltschrank-Dokumentation vor Ort.
Dateien
pwa.php- Haupteinstieg (HTML/CSS/JS Container)pwa_auth.php- Token-basierte Authentifizierung (15 Tage gültig)ajax/pwa_api.php- Alle AJAX-Endpoints für die PWAjs/pwa.js- Komplette App-Logik (vanilla JS, kein jQuery)css/pwa.css- Mobile-First Dark Mode Designsw.js- Service Worker für Offline-Cachemanifest.json- Web App Manifest für Installation
Workflow
- Login mit Dolibarr-Credentials → Token wird lokal gespeichert
- Kunde suchen → Anlagen werden gecached
- Anlage mit Schaltplan-Editor auswählen → Daten werden gecached
- Offline arbeiten: Felder, Hutschienen, Automaten hinzufügen
- Änderungen werden in lokaler Queue gespeichert
- Bei Internetverbindung: Automatische Synchronisierung
Token-Authentifizierung
- Tokens enthalten: user_id, login, created, expires, hash
- Hash = MD5(user_id + login + MAIN_SECURITY_SALT)
- Gültigkeit: 15 Tage
- Gespeichert in localStorage
Offline-Sync
- Alle Änderungen werden in
offlineQueue(localStorage) gespeichert - Badge zeigt Anzahl ungesyncte Änderungen
- Sync-Button oder automatisch bei Online-Event
- Bei Sync werden Aktionen der Reihe nach ausgeführt
Installation auf Smartphone
- PWA im Browser öffnen:
https://domain/dolibarr/custom/kundenkarte/pwa.php - Browser-Menü → "Zum Startbildschirm hinzufügen"
- App öffnet sich als Standalone ohne Browser-UI