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:
Sascha Wolf
2026-08-18 12:13:21 +02:00
co-authored by Claude Opus 5
parent b8a78f609c
commit 05cc261900
14 changed files with 762 additions and 137 deletions
+21 -7
View File
@@ -88,16 +88,19 @@ weg.
| Feld | wofür |
| --- | --- |
| **Datum** | wann gefunden. Vorbelegt mit heute; entscheidet später über Archiv und Löschung |
| **Von** | wer es geschickt hat |
| **Anbieter** | Vermittler oder Portal, z. B. Hays |
| **Kanal** | Mail, Telefon, Portal, LinkedIn, XING, Empfehlung, Sonstiges |
| **Von** | Auswahl: wer es geschickt hat |
| **Anbieter** | Auswahl: Vermittler oder Portal, z. B. Hays |
| **Kanal** | Auswahl: auf welchem Weg es kam |
| **Projekttitel** | das einzige Pflichtfeld |
| **Berater** | für wen das Projekt passt |
| **Berater** | Auswahl: für wen das Projekt passt |
| **Link** | Adresse der Ausschreibung. Ist einer hinterlegt, wird der Titel in der Liste anklickbar und öffnet ihn in einem neuen Tab |
*Von*, *Anbieter* und *Berater* schlagen vor, was schon einmal eingetragen wurde -
antippen statt tippen. Beim Link genügt `hays.de/projekt/1`, das `https://` wird
ergänzt.
*Von*, *Anbieter*, *Kanal* und *Berater* sind **Auswahllisten**. Ihre Inhalte
stehen unter *Einstellungen → Akquise* und lassen sich dort von jedem Benutzer
pflegen - Freitext hätte aus „Hays", „hays" und „Hays AG" drei Anbieter gemacht.
Ist eine Liste noch leer, steht unter dem Feld ein Verweis dorthin.
Beim Link genügt `hays.de/projekt/1`, das `https://` wird ergänzt.
Unter **Projektdaten für die Opportunity** klappt auf, was in der Liste keine
Spalte hat, später aber in der Opportunity stehen soll: Endkunde, Projektstart
@@ -561,10 +564,21 @@ Datenbank.
| --- | --- | --- |
| **Nutzerverwaltung** | Admin | Benutzer anlegen, bearbeiten, deaktivieren, löschen |
| **Mein Konto** | alle | Foto, Terminfarbe, Passwort ändern |
| **Akquise** | alle | Inhalte der Auswahllisten *Von*, *Anbieter*, *Kanal*, *Berater* |
| **Postfach** | Admin | Verbindung zu Microsoft 365, Abgleich, Kontaktübernahme |
| **Scanner** | Admin | Suchintervall, Schwellenwerte, KI-Schlüssel, Ton, E-Mail |
| **Whisper** | alle | Spracherkennung für das Diktat einrichten |
Im Reiter **Akquise** stehen die vier Auswahllisten des Akquise-Formulars, jede
mit einem Feld zum Hinzufügen und je Eintrag einem Stift und einem Papierkorb.
Zwei Dinge sind dabei unterschiedlich:
* **Umbenennen** ändert die vorhandenen Akquise-Einträge mit. Aus „Hays" wird in
allen Einträgen „Hays AG"; die Meldung sagt, wie viele betroffen waren.
* **Entfernen** nimmt den Wert nur aus der Auswahl. Einträge, die ihn tragen,
behalten ihn und zeigen ihn im Formular als „nicht in der Liste" - so ändert
das Aufräumen einer Liste keine Daten.
Im Reiter **Scanner** steht das **Suchintervall (Minuten)** - also wie oft der
Hintergrund-Scanner die Börsen durchsucht.