Zum Hauptinhalt springen

Kunden — Kontakte (Sub-Route)

Zweck

Diese Seite dokumentiert die Sub-Route /customers/:id/contacts — eine Liste aller Ansprechpartner eines Kunden. Pflege erfolgt direkt im Kunden-Kontext; Kontakte sind über das polymorphe ContactParent an den Kunden gehaengt.

Der zentrale Kontakt-Stamm liegt unter Kontakte; die hier gezeigten Einträge sind dieselben Datensaetze, gefiltert auf parentType = Customer und parentId = :id.

Voraussetzungen

- Berechtigung `view:Customer` (zum Aufrufen der Kunden-Detailseite). - Berechtigung `view:Contact` und `view:ContactParent`. - Für Anlegen: `create:Contact` und `create:ContactParent`.

Berechtigungen (CASL)

ActionSubjectWirkungKeycloak-Rolle
viewFE_Customer, CustomerDetail aufrufbar
view/create/update/deleteContactKontakte pflegenAPP_SPEAMCORE_VIEW/CREATE/UPDATE/DELETE_CONTACT
view/create/deleteContactParentVerknuepfung pflegenAPP_SPEAMCORE_VIEW/CREATE/DELETE_CONTACT_PARENT

Schritt-für-Schritt-Anleitung

  1. Kunde (/customers/:id) öffnen → Tab Kontakte.
  2. + Neu öffnet einen ContactButton-Auswahl-Workflow (NICHT direktes Anlegen) — Anwender entscheidet:
    • Neuen Kontakt anlegen → erzeugt Contact + ContactParent mit parentType = Customer, parentId = :id.
    • Bestehenden Kontakt verknuepfen → erzeugt nur einen neuen ContactParent-Eintrag, der auf den bestehenden Contact zeigt. Sinnvoll, wenn ein Ansprechpartner mehrere Kunden betreut (z. B. Architekt für mehrere Projekte).
  3. Nach Bestätigung wird automatisch auf das Detail navigiert: /customers/:id/contacts/:contactParentId.
**Polymorphe N:M-Relation**: Ein `Contact` (Stammdatensatz) ist mehrfach mit beliebigen Parents (`Customer`, `Location`, `Supplier`, ...) über `ContactParent` verbunden. Das Löschen eines `ContactParent` entfernt nur die Verknuepfung, nicht den Kontakt selbst. Der Kontakt-Stamm bleibt für andere Verknuepfungen erhalten. Siehe [Polymorpher Parent-Pattern](/konzepte/parent-pattern).

Listenansicht — customers-contacts

Wiederverwendbare Konzepte

Verknuepfungen zu anderen Modulen

API/Schnittstellen

MethodeEndpointZweckCASL
GET/api/contacts?filter[parentType=Customer&parentId=:id]Liste für Kundenview Contact
POST/api/contactsAnlegencreate Contact
POST/api/contact-parentsVerknuepfung anlegencreate ContactParent
GET/api/contact-parents?filter[parentType=Customer]Verknuepfungenview ContactParent

Versionshinweise

  • 2026-04-30: Initiale Veroeffentlichung als Sub-Route-Doku.