Commit graph

13 commits

Author SHA1 Message Date
848232c5a6 feat(schematic): Wire-Dragging, Farbpropagierung, Busbar-Typen
- Wire-Segment-Dragging: Shift+Klick/Mittlere Maustaste zum Verschieben
  - Horizontale Segmente nur vertikal, vertikale nur horizontal
  - Grid-Snapping, Live-Vorschau, Start/End-Segmente fixiert
- PWA: Automatische Farbpropagierung bei Einspeisung (L1/L2/L3/N/PE)
  - N-Phase als Input hinzugefuegt
  - propagateInputColor() aktualisiert Abgaenge
- Busbar-Typen aus Datenbank statt hardcodiert
- ChangeLog aktualisiert

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-04 15:46:46 +01:00
95e1860940 Anschlusspunkt Fix 2026-03-04 15:35:25 +01:00
6b3b6d7e95 feat(schematic): Terminal-Farben, Leitungen hinter Blöcken, Zeichenmodus v11.0
Terminal-Farben nach Verbindung:
- Terminals zeigen Farbe der angeschlossenen Leitung
- Grau = keine Verbindung, farbig = Leitung angeschlossen
- Neue Hilfsfunktion getTerminalConnectionColor()

Leitungen hinter Blöcken:
- Layer-Reihenfolge geändert: connections vor blocks
- Professionelleres Erscheinungsbild

Zeichenmodus-Verbesserungen:
- Rechtsklick/Escape bricht nur Linie ab, nicht Modus
- Crosshair-Cursor überall im SVG während Zeichenmodus
- 30px Hit-Area für bessere Klickbarkeit

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-04 13:44:52 +01:00
4540b8c595 feat(schematic): Junction-Verbindungen Terminal zu Leitung
- Terminal zu Leitung Verbindungen (Junction) implementiert
- Snap zum nächsten Punkt auf der Leitung
- Cleanup von überflüssigen Pfad-Punkten (cleanupPathPoints)
- Terminal-Position nutzt jetzt col-Property aus terminals_config
- Einheitlicher Dialog für alle Verbindungstypen
- Kleinere Hit-Area für Terminals (verhindert Überlappen)
- SQL für anlage_accessory Tabelle hinzugefügt

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-04 12:57:25 +01:00
be3a53e77e fix(schematic): Orthogonale Pfade erzwingen
Beim Zeichnen werden jetzt automatisch Zwischenpunkte eingefügt,
um sicherzustellen dass alle Liniensegmente horizontal oder
vertikal sind (90°-Winkel, keine Diagonalen).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-04 12:24:36 +01:00
89a4db4d21 fix(schematic): Grid-Punkte exakt auf Terminal-Positionen
Das Wire-Grid wird jetzt direkt aus den Equipment-Terminal-Positionen
berechnet, identisch zu getTerminalPosition():

- X: eq._x + teIndex * TE_WIDTH + TE_WIDTH/2
- Y: eq._y - 5 (top) / eq._y + height + 5 (bottom)

Vorher wurden Grid-Punkte aus TE-Slots berechnet, was nicht den
+2px Equipment-Offset berücksichtigte.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-04 08:41:03 +01:00
5f23727202 fix(schematic): Manuelles Zeichnen - Koordinaten und Raster korrigiert
Problem: Linien verschoben sich während des Zeichnens und waren nicht
korrekt an Start-/Endpunkten ausgerichtet. Raster fehlte außerhalb
der Hutschienen.

Ursache:
- setupMagneticSnap() verwendete getBoundingClientRect() (DOM-Pixel)
  statt SVG-Koordinaten über createSVGPoint().matrixTransform()
- Raster wurde nur aus Hutschienen-TE berechnet, keine Randlinien

Lösung:
- Korrekte SVG-Koordinaten in setupMagneticSnap() via matrixTransform
- Erweitertes Raster: Links/rechts Rand (alle 20px), mehr Y-Linien
  ober- und unterhalb der Blöcke (alle 15px statt 20px)
- Snap-Radius von 20 auf 25 SVG-Einheiten erhöht

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-04 08:34:01 +01:00
7de0349808 fix(select): Leerzeichen in Pipe-getrennten Select-Optionen trimmen
field_options wie "Ferris|Digital 1 Richtung| Digital 2 Richtung" führten
zu Leerzeichen nach split('|'), wodurch der Vergleich mit dem gespeicherten
Wert fehlschlug und das Select-Feld beim Editieren leer blieb.

Fix: opt.trim() in JS bei allen Select-Renderings (DynamicFields,
SchematicEditor, PWA) + automatisches Trimmen beim Speichern in Admin.
DB-Werte in Produktion bereinigt.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 21:34:00 +01:00
aa67a77d16 fix: AJAX-URL-Pfade für Ausbauen-Funktion korrigiert
KundenKarte.ajaxUrl/token existiert nicht - ersetze durch
baseUrl + '/custom/kundenkarte/ajax/...' (wie alle anderen
AJAX-Aufrufe im Modul).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:03:34 +01:00
fd8d11e764 feat: Ausgebaut-Status für Anlagen-Elemente
Elemente können als "ausgebaut" markiert werden mit Datum.
Bleiben in der DB für Nachvollziehbarkeit, werden ausgegraut
dargestellt und können per Toggle ein-/ausgeblendet werden.

- DB: decommissioned + date_decommissioned Spalten
- Dialog mit Datumsauswahl beim Ausbauen
- Toggle-Button in Baum- und Graph-Toolbar
- Ausgebaute Elemente ausgegraut (opacity 0.4, durchgestrichen)
- Badge mit Ausbau-Datum im Baum
- Kontextmenü im Graph für Ausbauen/Einbauen

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 19:49:31 +01:00
20fb9d3b05 feat: Dezimal-TE, Equipment-Kategorien, Schaltplan-Fixes
- Dezimal-TE (0.1 Schritte): DB DECIMAL(4,1), JS parseFloat statt parseInt,
  Drag&Drop mit 0.1-Snap, SVG-Markierungen (ganzzahlig deutlich, 0.5er subtil)
- Equipment-Kategorien: automat/schutz/steuerung/klemme im Typ-Editor und Dialog
- Hutschiene löschen Fix: showConfirmDialog → KundenKarte.showConfirm() (3 Stellen)
- terminals_config JSON-Sanitizer: PHP beim Speichern + JS-Fallback
  (Dolibarr GETPOST konvertiert Newlines zu literal \r\n → ungültiges JSON)
- Equipment duplizieren: Label-Inkrement, Feldwerte werden mitkopiert
- Statusleiste Größen-Sprung behoben (min-height statt dynamisch)
- Duplikat-Docblock in equipmentcarrier.class.php bereinigt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 14:04:17 +01:00
da4ed40ad2 feat(pwa): Anlagen-Übersicht Redesign, TE-Lücken, Feld-Badges
- Anlagen-Screen: Kontakte/Adressen oben als vertikale Liste mit Chevron
- Anlagen-Cards: Horizontales Layout (Icon + Titel + Pfeil), volle Breite
- Feld-Badges aus Admin-Einstellungen (show_in_tree) auf Anlagen-Cards
- Kunden-Adresse als Trennlabel bei Anlagen ohne Kontaktzuweisung
- Back-Navigation Fix: Anlagen werden nachgeladen falls leer (Refresh→Back)
- TE-Lücken-Berechnung: getMaxGap() für zusammenhängende freie Slots
- Typ-Buttons gefiltert: Nur Typen die in verfügbare Lücke passen
- Equipment-Blöcke: 80px Höhe, Sicherungsautomat-Optik
- PHP 8.1: trim() null-safe mit ?? ''
- Cache-Versionen synchronisiert auf v2.7
- equipmentconnection: source/target_terminal_id im UPDATE SQL ergänzt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 11:46:09 +01:00
844e6060c6 feat(pwa): Offline-fähige Progressive Web App für Elektriker
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>
2026-02-23 15:27:06 +01:00