feat: Interviews, Mail-Papierkorb, Kontaktart

Drei Aenderungen aus dem Alltagsgebrauch:

- Der Kalender heisst jetzt "Interviews" - dafuer wird er benutzt. Der Wert in
  ViewState wandert mit, damit Menue und Kopfzeile nicht auseinanderlaufen.
  Sichtbare Reste ("Kalenderfarbe") heissen jetzt Terminfarbe.

- Mails haben einen Papierkorb, der unter dem Menuepunkt aufklappt. Loeschen
  heisst dabei ausschliesslich: im CRM. Im Postfach crm@perinco.de bleibt die
  Mail unberuehrt - Schreibrechte darauf hat die Anwendung nicht. Damit der
  Delta-Abgleich geloeschte Mails nicht wieder einliest, bleibt nach dem Leeren
  eine leere Zeile als Merker stehen (crm_purged); runMailSync() ueberspringt
  alles, was im CRM geloescht ist. Zurueckholen und Leeren darf jeder
  Angemeldete, Leeren nach einer Warnung.

- Der Kontaktstatus (Neu .. Verloren) wird zur Kontaktart: Recruiter, Partner,
  Endkunde. Die Spalte heisst jetzt kind, weil "Status" das Feld falsch
  benannte. migrateLeadKind() stellt bestehende Datenbanken um und setzt alle
  vorhandenen Kontakte auf Recruiter - welche Art jemand ist, sagt der alte
  Status nicht (so mit dem Nutzer entschieden).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sascha Wolf
2026-08-18 11:12:49 +02:00
co-authored by Claude Opus 5
parent 025390e18a
commit 8741a9ae0c
39 changed files with 719 additions and 199 deletions
+1 -1
View File
@@ -9,7 +9,7 @@ interface ColorPickerProps {
fallback: string;
}
/** Auswahl der persoenlichen Kalenderfarbe. */
/** Auswahl der persoenlichen Terminfarbe. */
export const ColorPicker: React.FC<ColorPickerProps> = ({ value, onChange, fallback }) => (
<div className="space-y-3">
<div className="flex flex-wrap items-center gap-2">
+2 -2
View File
@@ -111,7 +111,7 @@ const AccountTab: React.FC = () => {
</dl>
<div className="mt-6 border-t border-ink-100 pt-5">
<h4 className="text-sm font-extrabold text-ink-900">Meine Kalenderfarbe</h4>
<h4 className="text-sm font-extrabold text-ink-900">Meine Terminfarbe</h4>
<p className="mb-3 text-xs text-ink-400">
Mit dieser Farbe erscheinen die von dir angelegten Termine im Teamkalender.
</p>
@@ -119,7 +119,7 @@ const AccountTab: React.FC = () => {
<ColorPicker
value={user?.color ?? null}
fallback={userColor(user ? { id: user.id, color: null } : null)}
onChange={(color) => saveProfile({ color }, 'Kalenderfarbe gespeichert.')}
onChange={(color) => saveProfile({ color }, 'Terminfarbe gespeichert.')}
/>
</div>
</div>
+1 -1
View File
@@ -330,7 +330,7 @@ export const UserManagement: React.FC = () => {
/>
</div>
<div>
<label className={labelClass}>Kalenderfarbe</label>
<label className={labelClass}>Terminfarbe</label>
<ColorPicker
value={form.color}
fallback={userColor(editingUser ? { id: editingUser.id, color: null } : { id: 0 })}