Commit graph

18 commits

Author SHA1 Message Date
Kundencenter
7d2b2947f4 feat: separate Absenderprofile für Kundencenter/Störungsticket/Rechnungen
Bisher gab es nur einen globalen SMTP-Absender für alle Mailvorlagen.
Jetzt kann je Bereich ein eigener Absendername/-adresse hinterlegt
werden (z. B. support@… für Tickets, rechnung@… für Rechnungen);
leer gelassene Felder fallen weiter auf den globalen SMTP-Absender
zurück. Jede Vorlage ist fest einem Bereich zugeordnet (Migration
023: mail_templates.category, neue Tabelle mail_sender_profiles mit
den drei Zeilen kundencenter/stoerungsticket/rechnungen).

Außerdem: der Testmail-Versand (SMTP-Verbindung wie auch je Vorlage)
zeigt jetzt den konkreten Fehler aus dem Mail-Protokoll an (z. B.
"535 5.7.8 authentication failed") statt nur "Fehlgeschlagen".

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 13:16:42 +02:00
Kundencenter
bbece6ca5f fix(web): SMTP-Speichern zeigte fälschlich "Server nicht erreichbar"
Das Formular griff nach dem await auf e.currentTarget zu, um das
Passwortfeld zu leeren. React setzt currentTarget nach der Event-
Verarbeitung auf null, wodurch eine normale (keine ApiError-)Exception
flog und die generische Netzwerkfehler-Meldung angezeigt wurde –
obwohl das Speichern selbst serverseitig erfolgreich war. Die
Formularreferenz wird jetzt vor dem await festgehalten.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 13:05:11 +02:00
Kundencenter
a68b4cf6ec feat: SMTP-Stack mit konfigurierbaren Mailvorlagen
Bisher gab es nur zwei fest im Code verdrahtete E-Mails (Einladung,
Passwort-Reset) und die SMTP-Verbindung kam ausschließlich aus
Umgebungsvariablen. Jetzt:

- SMTP-Verbindung unter Einstellungen > E-Mail konfigurierbar (Host,
  Port, Verschlüsselung, Zugangsdaten verschlüsselt gespeichert,
  Absender), mit Testmail-Versand. Die Mail-Logik wandert dafür nach
  @kc/platform/mail, damit API und Worker sie gemeinsam nutzen.
- Mailvorlagen-Verwaltung: jedes Ereignis hat eine feste "Definition"
  (Name, Auslöser, verfügbare Platzhalter/Daten), Betreff/Text sind
  editierbar, je Vorlage einzeln aktivierbar, mit Testversand anhand
  von Beispieldaten. Unbekannte Platzhalter werden beim Speichern
  abgelehnt.
- Neue Ereignisse verdrahtet: Ticket erstellt (Bestätigung an Kunde),
  Personal antwortet auf Ticket (Benachrichtigung an Kunde), Rechnung
  ausgestellt, sowie die zuvor zurückgestellte Funktion "Panel-
  Zugangsdaten per E-Mail senden" nach einem Passwort-Reset. Diese
  laufen über die Jobqueue (mail.template), analog zu discord.notify.
- Versandprotokoll (letzte 100 Versuche, ohne Inhalte) einsehbar unter
  Einstellungen > E-Mail.
- Migration 022, Rechte email.read (Admin+) / email.write (Superadmin).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 12:53:29 +02:00
Kundencenter
b112647ff1 feat(web): Designsystem v3 "KeyControl" + gruppierte Navigation
Löst das bisherige "Calm Cloud"-Design nach Nutzerfeedback ab: dunkle
Navy-Sidebar (#173568) als dauerhaft sichtbare, vertrauenswürdige
Navigation, klares Blau (#3B6FD8) als Primärfarbe, hellgrauer
Arbeitsbereich (#F4F6FA). Sidebar breiter mit mehr Abstand, größere
Schriftgrößen für kleine/gedämpfte Texte, größere max. Inhaltsbreite.

Navigation in aufklappbare Gruppen sortiert (Produkte / Abrechnung /
Support / Verwaltung) statt einer langen flachen Liste. Kopfbereich
zeigt bei Kunden zusätzlich den Organisationsnamen.

Ressourcenübersicht zeigt Kunden ihre Produkte jetzt als Kartenraster
statt als spärliche Tabelle (Personal behält die tabellarische Ansicht
für die höhere Datendichte).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 11:43:50 +02:00
Kundencenter
69fbad9090 Design: 'Calm Cloud' Farbwelt (Dunkelblau/Türkis, GitHub-Dark), untere Navigation auf Mobilgeräten 2026-09-28 11:23:53 +02:00
Kundencenter
2d168ff9cc Design: modernisiertes Erscheinungsbild (Schatten statt schwerer Rahmen, Inter-Schrift, Tag/Nacht/System-Umschalter) 2026-09-28 11:09:58 +02:00
Kundencenter
96df0c334a Rechnungen: Rabatt je Position 2026-09-28 11:01:19 +02:00
Kundencenter
6fec6277f5 KeyHelp: Panel-Passwort neu vergeben und verschlüsselt hinterlegen (verblurrt wie Lizenzschlüssel) 2026-09-27 21:35:15 +02:00
Kundencenter
3a2864ee76 Rechnungen: Überblick über fällige/überfällige Rechnungen und Verträge 2026-09-27 21:19:48 +02:00
Kundencenter
5efe37ecc0 Hosting-Produkte: Staffelpreise nach Laufzeit (1/3/6/12/24 Monate) 2026-09-27 18:35:34 +02:00
Kundencenter
e0fd57532d Rechnungen: Positionen auch aus der Domain-Aufstellung übernehmen (Verkaufspreis) 2026-09-27 18:23:31 +02:00
Kundencenter
6f9efb91dc Rechnungen: Positionen direkt aus Produkt oder Vertrag übernehmen 2026-09-27 16:51:19 +02:00
Kundencenter
a1472617b9 Tickets: Bezug zu Ressource oder Domain wählen, Verknüpfung direkt aus der Domain-Aufstellung 2026-09-27 16:40:14 +02:00
Kundencenter
43dc5bc827 Rechnungsmodul: Entwurf/Ausstellen/Bezahlt/Storno, PDF, Firmenstammdaten 2026-09-27 09:05:13 +02:00
Kundencenter
012f0aa0db Ticket-Anhänge: Bilder/PDF hochladen und anzeigen (geprüft anhand der Dateikennung) 2026-09-27 08:53:27 +02:00
Kundencenter
236c76b4e2 Build-Artefakt aus der Versionsverwaltung nehmen 2026-09-27 08:36:24 +02:00
Kundencenter
ca5b48ab47 Support-Tickets: Modul, Oberfläche, Discord-Benachrichtigung 2026-09-27 08:36:18 +02:00
Kundencenter
4763548bfb Stand vor Einführung des Nacht-Agenten 2026-09-27 00:51:32 +02:00