From 86aa7468af16d3cd543fd43c6e37a19d9b2aa55d Mon Sep 17 00:00:00 2001 From: Sascha Wolf Date: Mon, 21 Sep 2026 11:34:59 +0200 Subject: [PATCH] feat(opportunities): Neue Opportunity auf den angemeldeten Benutzer Beim Anlegen stand als Zustaendiger bisher der erste Benutzer der Liste (in der Praxis "Administrator"). Jetzt ist es - wie im Kontaktformular - der angemeldete Benutzer, mit users[0] als Rueckfallebene. Beim Bearbeiten bleibt die gespeicherte Zustaendigkeit unangetastet. Co-Authored-By: Claude Opus 5 (1M context) --- docs/07-anleitung-benutzer.md | 4 ++++ docs/09-quellcode.md | 1 + src/components/opportunities/OpportunityModal.tsx | 11 ++++++++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/07-anleitung-benutzer.md b/docs/07-anleitung-benutzer.md index b56323c..83560ee 100644 --- a/docs/07-anleitung-benutzer.md +++ b/docs/07-anleitung-benutzer.md @@ -408,6 +408,10 @@ Spalte steht ihr Volumen; eine Karte wird per Maus in die nächste Phase gezogen ![Pipeline-Ansicht mit den Phasen von Neu bis Absage](bilder/opportunities-pipeline.png) +Beim Anlegen einer neuen Opportunity steht **Zuständig** schon auf dem +angemeldeten Benutzer; beim Bearbeiten bleibt die gespeicherte Zuständigkeit +unverändert. + ### Für einen anderen Berater kopieren Eine Opportunity läuft immer für **einen** Berater. Passt dasselbe Projekt auch diff --git a/docs/09-quellcode.md b/docs/09-quellcode.md index 63d40ca..255bded 100644 --- a/docs/09-quellcode.md +++ b/docs/09-quellcode.md @@ -375,6 +375,7 @@ Warum genau diese Konstanten festgelegt sind, steht in | Datei | Inhalt | | --- | --- | +| `components/opportunities/OpportunityModal.tsx` | Formular der Opportunity. Beim Neuanlegen ist der angemeldete Benutzer *Zuständig* (`useAuth()`, Rückfallebene `users[0]`) - beim Bearbeiten bleibt die gespeicherte Zuständigkeit stehen. Beraterliste kommt aus der Akquise (`acquisitionOptionsApi`) | | `components/opportunities/OpportunityCopyDialog.tsx` | Kopie für andere Berater: Auswahl aus der Beraterliste der Akquise (ohne den eigenen), Phase der Kopie | | `components/opportunities/OpportunityTrash.tsx` | Papierkorb der Opportunities: wiederherstellen, leeren, Restlaufzeit je Eintrag | | `components/opportunities/opportunityUi.tsx` | `STAGE_LABELS` (Anzeige, mit Umlaut), `STAGE_HINTS` (Erläuterung als Titelhinweis), `STAGE_STYLES`, `STAGE_COLORS`, `StageBadge` | diff --git a/src/components/opportunities/OpportunityModal.tsx b/src/components/opportunities/OpportunityModal.tsx index 60dad48..2154600 100644 --- a/src/components/opportunities/OpportunityModal.tsx +++ b/src/components/opportunities/OpportunityModal.tsx @@ -6,6 +6,7 @@ import { Avatar, inputClass, labelClass, labelRowClass, labelTextClass } from '. import { STAGE_COLORS, STAGE_HINTS, STAGE_LABELS } from './opportunityUi'; import { useToast } from '../Toast'; import { acquisitionOptionsApi, opportunitiesApi } from '../../lib/api'; +import { useAuth } from '../../lib/auth'; import { OPPORTUNITY_STAGES, contactFullName, @@ -90,7 +91,15 @@ export const OpportunityModal: React.FC = ({ onCopy, }) => { const { addToast } = useToast(); - const [form, setForm] = useState(() => toFormState(opportunity, users[0]?.id ?? null)); + const { user: currentUser } = useAuth(); + /* + * Beim Neuanlegen ist der angemeldete Benutzer zustaendig - das trifft fast + * immer zu und laesst sich im Feld "Zustaendig" aendern. Beim Bearbeiten + * bleibt die gespeicherte Zustaendigkeit unangetastet. + */ + const [form, setForm] = useState(() => + toFormState(opportunity, currentUser?.id ?? users[0]?.id ?? null) + ); const [contacts, setContacts] = useState( () => opportunity?.contacts.map((c) => ({ lead_id: c.lead_id, role: c.role ?? '' })) ?? [] );