Kundenart in der Kunden-Uebersicht und Steuernummer in den Finanz-Einstellungen (Helfer mit Tests)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
99ab4bd47b
commit
674cce26f0
4 files changed
+185
-6
No files matched your search
@@ -0,0 +1,67 @@
|
||||
// Reine Helfer fuer zwei Felder der Auftragsbestaetigung: die Kundenart am Kunden und die Steuernummer in den
|
||||
// Finanz-Einstellungen; kein React, kein Appwrite, unter Node testbar. Texte deutsch, sachlich.
|
||||
|
||||
/** Werte der Kundenart (Vertrag V2); '' = nicht festgelegt. */
|
||||
export const KUNDENARTEN = ['unternehmen', 'privat']
|
||||
|
||||
export const KUNDENART_OPTIONEN = [
|
||||
{ value: '', label: 'Nicht festgelegt' },
|
||||
{ value: 'unternehmen', label: 'Unternehmen' },
|
||||
{ value: 'privat', label: 'Privatperson' },
|
||||
]
|
||||
|
||||
export const KUNDENART_HINWEIS = 'Für Auftragsbestätigungen: Privatpersonen bekommen die Widerrufsbelehrung.'
|
||||
|
||||
const text = (v) => (typeof v === 'string' ? v : '')
|
||||
|
||||
/** Beschriftung der Kundenart; alles Unbekannte heisst „Nicht festgelegt“. */
|
||||
export function kundenartLabel(value) {
|
||||
const treffer = KUNDENART_OPTIONEN.find((o) => o.value !== '' && o.value === value)
|
||||
return treffer ? treffer.label : KUNDENART_OPTIONEN[0].label
|
||||
}
|
||||
|
||||
/**
|
||||
* Was beim Speichern der Kundendaten zusaetzlich ins Dokument soll: nur eine geaenderte, bekannte Kundenart
|
||||
* (so scheitert das Speichern der uebrigen Stammdaten nie an einem noch nicht angelegten Attribut).
|
||||
*/
|
||||
export function kundenartAenderung(neu, gespeichert) {
|
||||
const n = text(neu)
|
||||
const alt = text(gespeichert)
|
||||
if (n !== '' && !KUNDENARTEN.includes(n)) return {}
|
||||
if (n === alt) return {}
|
||||
return { kundenart: n }
|
||||
}
|
||||
|
||||
export const STEUERNUMMER_MAX = 40
|
||||
|
||||
export const STEUERNUMMER_HINWEIS = 'Steht auf jeder Auftragsbestätigung. Für Rechnungen bitte zusätzlich im Stripe-Dashboard hinterlegen.'
|
||||
|
||||
export const STEUERNUMMER_FEHLT_HINWEIS =
|
||||
'Die Steuernummer fehlt noch – sie steht dann nicht auf der Auftragsbestätigung. Eintragen unter Finanzen → Einstellungen.'
|
||||
|
||||
const STEUERNUMMER_ZEICHEN = /^[A-Za-z0-9/ .-]*$/
|
||||
|
||||
/**
|
||||
* Steuernummer fuer PATCH /einstellungen. Der Client prueft wie der Server (Vertrag V4): getrimmt hoechstens 40 Zeichen aus
|
||||
* ASCII-Buchstaben, Ziffern, Leerzeichen, „/“, „-“ und „.“; leer loescht den Wert. Unveraendert wird nichts gesendet.
|
||||
*/
|
||||
export function steuernummerAenderung(eingabe, gespeichert) {
|
||||
const neu = text(eingabe).trim()
|
||||
const alt = text(gespeichert).trim()
|
||||
if (neu === alt) return { ok: true, payload: {} }
|
||||
if (neu.length > STEUERNUMMER_MAX) return { ok: false, fehler: `Die Steuernummer darf höchstens ${STEUERNUMMER_MAX} Zeichen lang sein.` }
|
||||
if (!STEUERNUMMER_ZEICHEN.test(neu)) {
|
||||
return { ok: false, fehler: 'Die Steuernummer darf nur Buchstaben (ohne Umlaute), Ziffern, Leerzeichen, „/“, „-“ und „.“ enthalten.' }
|
||||
}
|
||||
return { ok: true, payload: { steuernummer: neu } }
|
||||
}
|
||||
|
||||
/**
|
||||
* Fehlt die Steuernummer? Nur wahr, wenn die Einstellungen da sind (Objekt) und der Wert leer ist; „noch nicht geladen“
|
||||
* (undefined) und „nicht ladbar“ (null) behaupten nichts.
|
||||
*/
|
||||
export function steuernummerFehlt(einstellungen) {
|
||||
if (!einstellungen || typeof einstellungen !== 'object' || Array.isArray(einstellungen)) return false
|
||||
const wert = einstellungen.steuernummer
|
||||
return typeof wert !== 'string' || wert.trim() === ''
|
||||
}
|
||||
Reference in new issue
Block a user