Files
tickte-system/src/lib/kundenFelder.js
T

68 lines
3.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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() === ''
}