feat(akquise): Auswahllisten statt Freitext, Felder abgesetzt
"Von", "Anbieter", "Kanal" und "Berater" sind Dropdowns. Ihre Inhalte stehen in crm_acquisition_options und werden im neuen Reiter Einstellungen -> Akquise gepflegt. Freitext hat aus "Hays", "hays" und "Hays AG" drei Anbieter gemacht; der Unique-Schluessel greift ueber die Kollation auch bei abweichender Gross-/Kleinschreibung. Eine Tabelle mit Feldkennzeichen statt vier Tabellen: die Felder verhalten sich gleich, also ist jede weitere Liste ein Wert im ENUM statt einer neuen Route und einer neuen Oberflaeche. Zwei Entscheidungen dabei: - Pflegen darf jeder Angemeldete, nicht nur ein Administrator. Eine Liste, die nur ein Admin ergaenzen kann, blockiert die Eingabe genau dann, wenn ein neuer Anbieter auftaucht. - Die Eintraege halten den Text, keinen Fremdschluessel. Umbenennen zieht sie darum ausdruecklich mit (in einer Transaktion), Loeschen nicht: eine Liste aufzuraeumen darf keine Daten aendern. Ein Wert, der nicht mehr in der Liste steht, wird im Dropdown weiter angeboten und als solcher gekennzeichnet - sonst wuerde das Bearbeiten eines alten Eintrags ihn stillschweigend ueberschreiben. Das Backend prueft beim Speichern eines Eintrags nur noch die Laenge und nicht mehr die Zugehoerigkeit zur Liste - aus demselben Grund. Dazu: die Felder der Akquise-Eingabe sind abgesetzt (getoente Flaeche, deutlicherer Rahmen, beim Hineinklicken weiss). Auf der weissen Karte gingen sie unter, und im Formular stehen bis zu fuenfzehn davon nebeneinander. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
b8a78f609c
commit
05cc261900
+15
-1
@@ -25,6 +25,7 @@ erDiagram
|
||||
crm_opportunities ||--o{ crm_opportunity_contacts : hat
|
||||
crm_users ||--o{ crm_acquisitions : created_by
|
||||
crm_acquisitions |o--o| crm_opportunities : "wird zu"
|
||||
crm_acquisition_options ||--o{ crm_acquisitions : "fuellt Von, Anbieter, Kanal, Berater"
|
||||
|
||||
crm_users {
|
||||
int id PK
|
||||
@@ -88,6 +89,11 @@ erDiagram
|
||||
datetime converted_at "uebernommen -> raus aus der Liste"
|
||||
int opportunity_id FK
|
||||
}
|
||||
crm_acquisition_options {
|
||||
int id PK
|
||||
enum field "sender | provider | channel | consultant"
|
||||
varchar value "Inhalt des Dropdowns"
|
||||
}
|
||||
crm_events {
|
||||
int id PK
|
||||
varchar title
|
||||
@@ -103,7 +109,7 @@ erDiagram
|
||||
}
|
||||
```
|
||||
|
||||
Fünf Eigenheiten, die man kennen muss:
|
||||
Sechs Eigenheiten, die man kennen muss:
|
||||
|
||||
- **`crm_leads` führt zwei Bestände.** `mail_pool = 0` ist der gepflegte
|
||||
Kontaktbestand, `mail_pool = 1` der Vorbereich „Aus Mails" mit den Funden des
|
||||
@@ -120,6 +126,14 @@ Fünf 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.
|
||||
- **Die Dropdowns der Akquise stehen in einer Tabelle, nicht in vier.**
|
||||
`crm_acquisition_options` unterscheidet die Listen über die Spalte `field`. Die
|
||||
vier Felder verhalten sich gleich, also ist jede weitere Liste ein Wert im
|
||||
ENUM statt einer neuen Tabelle samt Route und Oberfläche. Der Unique-Schlüssel
|
||||
auf `(field, value)` greift über die Kollation `utf8mb4_unicode_ci` auch bei
|
||||
abweichender Groß-/Kleinschreibung - „hays" ist neben „Hays" kein neuer Wert.
|
||||
Die Akquise-Einträge halten den **Text**, keinen Fremdschlüssel: wird ein Wert
|
||||
aus der Liste entfernt, bleiben die Einträge lesbar und änderbar.
|
||||
- **`crm_acquisitions` hat keine Zustandsspalte.** Eingang, Archiv und Löschung
|
||||
ergeben sich aus `found_at` (14 bzw. 90 Tage) und `converted_at`. Eine Spalte,
|
||||
die ein Job umsetzen müsste, kann von der Wirklichkeit abweichen - eine
|
||||
|
||||
Reference in New Issue
Block a user