feat(akquise): mehrere Berater je Eintrag, je Berater eine Opportunity
Ein gefundenes Projekt passt oft zu mehr als einem Berater, und fuer jeden geht eine eigene Bewerbung heraus. Das Feld "Berater" liess bisher nur einen Namen zu. Gespeichert wird eine kommagetrennte Liste in crm_acquisitions.consultant (auf VARCHAR(500) erweitert, Migration in db.js) und keine eigene Zuordnungstabelle: die Namen sind reiner Text, die Auswahlliste in crm_acquisition_options ist eine Pflegehilfe und kein Fremdschluessel. Suche, Sortierung und Anzeige der Liste arbeiten damit weiter auf einem Feld. Die Funktionen zum Zerlegen stehen in acquisitionRules.js, das Gegenstueck fuer das Frontend in src/types.ts, geprueft von server/test/acquisition.test.mjs. Zerlegt wird an vier Stellen: - Uebernahme: je Berater eine Opportunity, alle in einer Transaktion. Ihre Titel tragen den Namen in Klammern, weil die Opportunity kein eigenes Feld fuer den Berater hat und in Pipeline und Liste sonst identische Zeilen stehen; bei einem einzigen Berater bleibt der Titel unveraendert. In den Notizen steht neben dem eigenen Berater auch, mit wem er sich das Projekt teilt. Der Eintrag merkt sich die erste Opportunity - sie entscheidet nur darueber, ob er wieder im Eingang auftaucht. - Verlauf (crm_acquisition_history): ein Berater je Zeile. Ein Eintrag mit drei Beratern sind drei Bewerbungen, "Nico, Lisa" waere sonst ein eigener Schluessel neben "Nico" und "Lisa". - Dashboard: dieselbe Zaehlung. Die Summe der Balken liegt damit ueber der Gesamtzahl "Bewerbungen", die weiter die Eintraege zaehlt. - Auswahlliste pflegen: Umbenennen ersetzt den Namen innerhalb der Liste, Loeschen zaehlt auch, wer nur einer von mehreren ist. Ein Gleichheitsvergleich uebersah beides. In der Oberflaeche haengt das Auswahlfeld jeweils einen Namen an, die Gewaehlten stehen als Plaketten darunter und lassen sich einzeln entfernen; ein bereits gewaehlter Berater verschwindet aus der Liste. Bewusst kein <select multiple>: Strg-Klick ist mit der Maus unauffindbar und mit einer Beruehrung gar nicht bedienbar. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
a866cd9a52
commit
62dce64739
+14
-1
@@ -86,7 +86,7 @@ erDiagram
|
||||
varchar provider "Anbieter"
|
||||
varchar channel "Mail | Telefon | Portal | ..."
|
||||
varchar title "Projekttitel"
|
||||
varchar consultant "Berater"
|
||||
varchar consultant "Berater, mehrere kommagetrennt"
|
||||
varchar link "macht den Titel klickbar"
|
||||
datetime converted_at "uebernommen -> raus aus der Liste"
|
||||
int opportunity_id FK
|
||||
@@ -133,6 +133,19 @@ Acht Eigenheiten, die man kennen muss:
|
||||
- **`avatar` ist eine Data-URL in der Datenbank.** Der Browser verkleinert jedes
|
||||
Bild vor dem Upload auf 256 px (`src/lib/imageCompress.ts`), aus 2,9 MB werden
|
||||
wenige Kilobyte.
|
||||
- **Mehrere Berater stehen in einem Feld.** `crm_acquisitions.consultant`
|
||||
nimmt eine kommagetrennte Liste auf (`VARCHAR(500)`), keine eigene
|
||||
Zuordnungstabelle: die Namen sind reiner Text, die Auswahlliste in
|
||||
`crm_acquisition_options` ist eine Pflegehilfe und kein Fremdschlüssel. Suche,
|
||||
Sortierung und Anzeige der Liste arbeiten damit weiter auf einem Feld.
|
||||
Zerlegt wird an drei Stellen - im Verlauf, in der Auswertung und bei der
|
||||
Übernahme; die Funktionen dafür stehen in `server/src/acquisitionRules.js`,
|
||||
das Gegenstück fürs Frontend in `src/types.ts`.
|
||||
- **Der Verlauf zählt je Berater.** `crm_acquisition_history` hält einen Berater
|
||||
pro Zeile (Primärschlüssel `found_on, consultant`), auch wenn der Eintrag drei
|
||||
hatte: ein Fund für drei Berater sind drei versendete Profile. Die Summe im
|
||||
Balkendiagramm liegt deshalb über der Gesamtzahl *Bewerbungen*, die weiter die
|
||||
Einträge zählt.
|
||||
- **Das Dashboard rechnet aus zwei Quellen.** Jeder Eintrag in
|
||||
`crm_acquisitions` ist eine versendete Bewerbung. Weil die Akquise nach 90
|
||||
Tagen löscht, sichert der Aufräumlauf vorher Tag, Berater und Anzahl in
|
||||
|
||||
Reference in New Issue
Block a user