Fix: Anrede per Du/Sie wird nicht gespeichert

Das useInformalAddress-Feld war:
1. Im Frontend-Submit-Handler nicht in submitData enthalten (wurde bei jedem Update rausgefiltert)
2. Im Service-Type nicht definiert (TypeScript-mäßig unbekannt)
3. Beim Laden im Edit-Mode: Boolean aus DB matchte nicht das String-value des <select>

Fixes:
- Frontend: submitData enthält jetzt useInformalAddress (String oder Boolean → sauberes Boolean)
- Frontend: beim reset() wird Boolean zu 'true'/'false' konvertiert für <select>
- Backend: Service-Type erweitert um useInformalAddress, autoBirthdayGreeting, autoBirthdayChannel
- Backend: Audit-Feldlabels für die neuen Felder

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
duffyduck 2026-04-23 13:10:03 +02:00
parent 2879bd64d6
commit b78afce43c
3 changed files with 11 additions and 0 deletions

View File

@ -88,6 +88,9 @@ export async function updateCustomer(req: Request, res: Response): Promise<void>
salutation: 'Anrede', firstName: 'Vorname', lastName: 'Nachname', email: 'E-Mail',
phone: 'Telefon', mobile: 'Mobil', birthDate: 'Geburtsdatum', birthPlace: 'Geburtsort',
companyName: 'Firma', type: 'Typ', taxNumber: 'Steuernummer', notes: 'Notizen',
useInformalAddress: 'Anrede per',
autoBirthdayGreeting: 'Autom. Geburtstagsgruß',
autoBirthdayChannel: 'Kanal für Geburtstagsgruß',
};
for (const [key, value] of Object.entries(data)) {
// Technische/interne Felder überspringen

View File

@ -136,6 +136,7 @@ export async function updateCustomer(
data: {
type?: CustomerType;
salutation?: string;
useInformalAddress?: boolean;
firstName?: string;
lastName?: string;
companyName?: string;
@ -148,6 +149,8 @@ export async function updateCustomer(
businessRegistration?: string;
commercialRegister?: string;
notes?: string;
autoBirthdayGreeting?: boolean;
autoBirthdayChannel?: string | null;
}
) {
return prisma.customer.update({

View File

@ -39,6 +39,8 @@ export default function CustomerForm() {
if (data.foundingDate) {
data.foundingDate = data.foundingDate.split('T')[0] as any;
}
// Boolean → String für <select>-Wert ('true'/'false')
(data as any).useInformalAddress = data.useInformalAddress === true ? 'true' : 'false';
reset(data);
}
}, [customer, reset]);
@ -65,6 +67,9 @@ export default function CustomerForm() {
const submitData: any = {
type: data.type,
salutation: data.salutation || '',
useInformalAddress:
data.useInformalAddress === true ||
(data.useInformalAddress as any) === 'true',
firstName: data.firstName,
lastName: data.lastName,
companyName: data.companyName || '',