Kundenart: Prüfung, Texte und Segment-Schalter
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
0112c77afc
commit
45b2b145b0
4 files changed
+62
No files matched your search
@@ -0,0 +1,21 @@
|
|||||||
|
import { KUNDENART_AUSWAHL } from '../lib/kundenFelder'
|
||||||
|
|
||||||
|
/** Segment-Schalter für die Kundenart (V9): zwei Werte, nie eine Vorauswahl; der Aufrufer prüft mit kundenartPruefen. */
|
||||||
|
export default function KundenartAuswahl({ value, onChange, disabled = false }) {
|
||||||
|
return (
|
||||||
|
<div className="seg" role="group" aria-label="Kundenart">
|
||||||
|
{KUNDENART_AUSWAHL.map((o) => (
|
||||||
|
<button
|
||||||
|
key={o.value}
|
||||||
|
type="button"
|
||||||
|
className={value === o.value ? 'on' : ''}
|
||||||
|
aria-pressed={value === o.value}
|
||||||
|
disabled={disabled}
|
||||||
|
onClick={() => onChange(o.value)}
|
||||||
|
>
|
||||||
|
{o.label}
|
||||||
|
</button>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -12,6 +12,27 @@ export const KUNDENART_OPTIONEN = [
|
|||||||
|
|
||||||
export const KUNDENART_HINWEIS = 'Für Auftragsbestätigungen: Privatpersonen bekommen die Widerrufsbelehrung.'
|
export const KUNDENART_HINWEIS = 'Für Auftragsbestätigungen: Privatpersonen bekommen die Widerrufsbelehrung.'
|
||||||
|
|
||||||
|
/** Auswahl für neue Eingaben (V9): ohne den Leer-Eintrag, es gibt nie eine Vorauswahl. */
|
||||||
|
export const KUNDENART_AUSWAHL = KUNDENART_OPTIONEN.filter((o) => o.value !== '')
|
||||||
|
|
||||||
|
export const KUNDENART_FEHLT_FEHLER = 'Bitte die Kundenart wählen.'
|
||||||
|
|
||||||
|
export const KUNDENART_AUSWAHL_HINWEIS =
|
||||||
|
'Unternehmen bestellt als Betrieb, Privatperson als Verbraucher mit Widerrufsrecht. Das Portal fragt den Kunden nicht danach.'
|
||||||
|
|
||||||
|
export const KUNDENART_HOCHSTUFEN_HINWEIS =
|
||||||
|
'Bitte zuerst die Kundenart festlegen (unter „Rechnungsdaten“), dann „Zum festen Kunden machen“.'
|
||||||
|
|
||||||
|
/** Gesetzt heisst genau 'unternehmen' oder 'privat'; Gross-/Kleinschreibung, Leerzeichen, null und Zahlen gelten nicht. */
|
||||||
|
export function kundenartGesetzt(value) {
|
||||||
|
return typeof value === 'string' && KUNDENARTEN.includes(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Pflichtpruefung fuer neue Eingaben: null = in Ordnung, sonst der Fehlertext. */
|
||||||
|
export function kundenartPruefen(value) {
|
||||||
|
return kundenartGesetzt(value) ? null : KUNDENART_FEHLT_FEHLER
|
||||||
|
}
|
||||||
|
|
||||||
const text = (v) => (typeof v === 'string' ? v : '')
|
const text = (v) => (typeof v === 'string' ? v : '')
|
||||||
|
|
||||||
/** Beschriftung der Kundenart; alles Unbekannte heisst „Nicht festgelegt“. */
|
/** Beschriftung der Kundenart; alles Unbekannte heisst „Nicht festgelegt“. */
|
||||||
|
|||||||
@@ -411,6 +411,7 @@ a.list-row:hover .cell-title { color: var(--accent-ink); }
|
|||||||
.seg { display: inline-flex; padding: 2px; border-radius: var(--radius); background: var(--bg-hover); gap: 2px; }
|
.seg { display: inline-flex; padding: 2px; border-radius: var(--radius); background: var(--bg-hover); gap: 2px; }
|
||||||
.seg button { height: 28px; padding: 0 12px; border-radius: 5px; color: var(--text-2); font-weight: 500; }
|
.seg button { height: 28px; padding: 0 12px; border-radius: 5px; color: var(--text-2); font-weight: 500; }
|
||||||
.seg button.on, .seg button[aria-pressed="true"] { background: var(--bg); color: var(--text); box-shadow: 0 1px 2px rgba(26,31,54,.12), 0 0 0 1px rgba(26,31,54,.04); }
|
.seg button.on, .seg button[aria-pressed="true"] { background: var(--bg); color: var(--text); box-shadow: 0 1px 2px rgba(26,31,54,.12), 0 0 0 1px rgba(26,31,54,.04); }
|
||||||
|
.field > .seg { align-self: flex-start; }
|
||||||
|
|
||||||
.toast {
|
.toast {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import { loadModule } from './load.mjs'
|
|||||||
|
|
||||||
const {
|
const {
|
||||||
KUNDENARTEN, KUNDENART_OPTIONEN, KUNDENART_HINWEIS, kundenartLabel, kundenartAenderung,
|
KUNDENARTEN, KUNDENART_OPTIONEN, KUNDENART_HINWEIS, kundenartLabel, kundenartAenderung,
|
||||||
|
KUNDENART_AUSWAHL, KUNDENART_FEHLT_FEHLER, KUNDENART_AUSWAHL_HINWEIS, KUNDENART_HOCHSTUFEN_HINWEIS,
|
||||||
|
kundenartGesetzt, kundenartPruefen,
|
||||||
STEUERNUMMER_MAX, STEUERNUMMER_HINWEIS, steuernummerAenderung, STEUERNUMMER_FEHLT_HINWEIS, steuernummerFehlt,
|
STEUERNUMMER_MAX, STEUERNUMMER_HINWEIS, steuernummerAenderung, STEUERNUMMER_FEHLT_HINWEIS, steuernummerFehlt,
|
||||||
} = await loadModule('src/lib/kundenFelder.js')
|
} = await loadModule('src/lib/kundenFelder.js')
|
||||||
|
|
||||||
@@ -77,3 +79,20 @@ test('steuernummerFehlt: Hinweis nur, wenn die Einstellungen da sind und die Ste
|
|||||||
// noch nicht geladen oder nicht ladbar: es wird nichts behauptet
|
// noch nicht geladen oder nicht ladbar: es wird nichts behauptet
|
||||||
for (const unbekannt of [undefined, null, 'x', 5, []]) assert.equal(steuernummerFehlt(unbekannt), false, String(unbekannt))
|
for (const unbekannt of [undefined, null, 'x', 5, []]) assert.equal(steuernummerFehlt(unbekannt), false, String(unbekannt))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('KUNDENART_AUSWAHL: zwei Einträge ohne den Leer-Eintrag', () => {
|
||||||
|
assert.deepEqual(KUNDENART_AUSWAHL, [{ value: 'unternehmen', label: 'Unternehmen' }, { value: 'privat', label: 'Privatperson' }])
|
||||||
|
})
|
||||||
|
|
||||||
|
test('kundenartGesetzt und kundenartPruefen: nur exakt unternehmen oder privat', () => {
|
||||||
|
for (const ok of ['unternehmen', 'privat']) { assert.equal(kundenartGesetzt(ok), true); assert.equal(kundenartPruefen(ok), null) }
|
||||||
|
for (const bad of ['', ' ', 'Unternehmen', 'unternehmen ', ' privat', 'firma', null, undefined, 5, {}]) {
|
||||||
|
assert.equal(kundenartGesetzt(bad), false, String(bad))
|
||||||
|
assert.equal(kundenartPruefen(bad), 'Bitte die Kundenart wählen.', String(bad))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
test('Texte der Kundenart sind festgelegt', () => {
|
||||||
|
assert.equal(KUNDENART_AUSWAHL_HINWEIS, 'Unternehmen bestellt als Betrieb, Privatperson als Verbraucher mit Widerrufsrecht. Das Portal fragt den Kunden nicht danach.')
|
||||||
|
assert.equal(KUNDENART_HOCHSTUFEN_HINWEIS, 'Bitte zuerst die Kundenart festlegen (unter „Rechnungsdaten“), dann „Zum festen Kunden machen“.')
|
||||||
|
})
|
||||||
Reference in new issue
Block a user