- Werkzeug-Klarnamen statt interner IDs: "IP-Scanner — 46 Geräte im Netz …"
statt "[netzwerk] ipscan — …". Bewusst eine kurze Zuordnung in
netdiagToolName() statt eines zweiten Satzes Sprachschlüssel — die
kanonischen Namen stehen in der App, doppelte Pflege wäre eine Fehlerquelle.
Enthält auch dhcpcheck/wifiscan: in der App gibt es sie nicht mehr, in der
PRODUKTIONSDATENBANK stehen dazu aber noch Messungen (4 bzw. 2). Die
Gegenprüfung hielt den Punkt für gegenstandslos, hatte dabei aber nur die
Testdatenbank angesehen.
- Messparameter anzeigen (Prod-Messung #126): unter jeder Messung steht jetzt
"Ziel: 192.168.1.1 · Dauer (s): 300" in Karte und PDF. Vorher stand das
Ergebnis ohne Bezugspunkt da — man sah nicht, wogegen gemessen wurde.
- Listenseite: Ampel je Protokoll (schlechteste Einzelmessung) plus Anzahl,
dazu ein Filter "nur mit Befund". Status 3 "nicht messbar" geht bewusst
NICHT ins Maximum ein — er ist keine Aussage über das Kundennetz — sondern
wird separat als "n.m." ausgewiesen. Im Browser geprüft: der Filter liefert
ausschließlich Protokolle mit Warnung oder Fehler.
- N+1-Queries behoben: fetchAllByProtocol() las nur die rowids und setzte je
Zeile ein eigenes fetch() ab. Jetzt eine Abfrage mit setVarsFromFetchObj(),
zusätzlich mit Entity-Filter (fehlte bisher ganz). Nachgemessen über
SHOW SESSION STATUS: 46 Geräte + 7 Messungen brauchen statt 55 Abfragen
noch eine.
- Standort aus der Kundenadresse vorbelegen, wenn der Techniker nichts
eingetragen hat; eine vorhandene Angabe wird nie überschrieben. Über die
echte API geprüft.
Offen bleibt aus Phase 5 nur der Vergleich zweier Protokolle (Geräte-Diff
nach MAC) — eigenes Feature mit eigener Ansicht.
protocols.php (POST) gab bei JEDEM Sync HTTP 500 zurueck — 0 Protokolle
wurden je gespeichert.
Ursache: protocol/device/measurement-Klassen deklarierten das tms-Feld im
$fields-Array als 'notnull' => 1. Dolibarrs createCommon() bricht ab (-1),
wenn ein notnull-Feld den Wert NULL hat und kein 'default' gesetzt ist.
tms wird von der App nie gesetzt (die DB fuellt es per CURRENT_TIMESTAMP),
also schlug jedes Insert fehl, bevor es ueberhaupt an die DB ging.
Fix: tms auf 'notnull' => 0 — so wie es der Dolibarr-Modul-Builder auch
generiert. Die DB-Spalte bleibt NOT NULL DEFAULT CURRENT_TIMESTAMP.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Netzwerk-Diagnose-Modul mit JSON-API für die NetDiag-App:
- 3 Tabellen (protocol/device/measurement), generisches JSON-result
- JSON-API: auth, customers, orders, protocols (idempotenter Sync), pdf
- JWT-Auth (HS256), CORS für die Capacitor-App
- Tabs an Thirdparty + Auftrag, Protokoll-Card, PDF-Generator
- QR-Code zum App-Download in der Modul-Konfiguration
- de_DE + en_US, Rechtesystem netdiag->protocol read/write/delete
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>