Files
Webklar-Kundenbereich/test/support/knFunktionenDaten.js
T

75 lines
4.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.
// Testdaten für P3 (Funktionen-Rahmen der Kundenansicht neu). Form laut GET /api/funktionen im Abo-Modell
// (server/routes/funktionen.js, server/services/aboKatalog.js, featureRegistry.js consentAbo, siteFeatures.js featureView).
// Beträge und Preise gibt es hier nicht: der Katalog trägt keinen Preis.
const KEYS = ['news', 'termine', 'shop', 'unterkunft', 'zeiten', 'analyse']
const NAMEN = { news: 'News-Pinnwand', termine: 'Terminplaner', shop: 'Webshop', unterkunft: 'Buchungskalender', zeiten: 'Öffnungszeiten live', analyse: 'Analyse' }
const EINRICHTUNG = { termine: 'meist in 1–2 Wochen', unterkunft: 'meist in 1–2 Wochen', shop: 'meist in 2–3 Wochen' }
// Hinweis ohne Haken (N17): nur Webshop, Buchungskalender und Terminplaner; Texte wie config.aboFunktionen.texte.hinweis
const HINWEISE = {
shop: 'Du verkaufst in eigenem Namen und bist für deine Produkte, Preise und Rechtstexte verantwortlich. Die Zahlungen deiner Käufer laufen über dein eigenes Stripe-Konto.',
unterkunft: 'Du vermietest in eigenem Namen und bist für Preise, Stornobedingungen, Rechnungen und Meldepflichten verantwortlich. Online-Zahlungen deiner Gäste laufen über dein eigenes Stripe-Konto.',
termine: 'Der Terminplaner ist nicht für den Gesundheitsbereich gedacht. Das fragen wir im Fragebogen ab.',
}
const BEGINN = 'Bitte beginnt sofort mit der Einrichtung. Mir ist klar: Mit der vollständigen Einrichtung erlischt mein Widerrufsrecht, und wenn ich vorher widerrufe, zahle ich den bis dahin erbrachten Teil.'
/** Ein Katalogeintrag mit den Standardwerten des Schlüssels; edit überschreibt Felder. */
export function katalogEintrag(key, edit = {}) {
const hinweis = HINWEISE[key] ?? null
const items = [{ id: 'einschalten-zeile', text: 'Es gelten Leistungsbeschreibung und Auftragsverarbeitung (Fassung 2026-10-05).', haken: false }]
if (hinweis) items.push({ id: 'hinweis', text: hinweis, haken: false })
items.push({ id: 'beginn', text: BEGINN, haken: true, nurPrivatInFrist: true })
return {
key,
name: NAMEN[key],
beschreibung: `Beschreibung ${NAMEN[key]}.`,
bild: `/neu/bilder/${key}.webp`,
enthaltenIn: key === 'analyse' ? 'hosting' : 'wartung',
verfuegbar: true,
ablauf: key === 'termine' ? 'fragebogen' : (key === 'shop' || key === 'unterkunft') ? 'anfrage' : 'direkt',
einrichtung: EINRICHTUNG[key] ?? 'meist in wenigen Tagen',
unterlagen: {
leistungsbeschreibung: { version: '2026-10-05', url: `/rechtliches/leistungsbeschreibung-${key}-2026-10-05.html` },
avv: { version: '2026-10-05', url: `/rechtliches/avv-${key}-2026-10-05.html` },
},
nurBetrieb: key === 'shop',
consent: key === 'analyse' ? null : { version: '2026-10-20', knopf: 'Einschalten', items },
hinweis: key === 'analyse' ? null : hinweis,
...edit,
}
}
/** Zustand einer Funktion an einer Website (featureView). */
export function feature(state = 'off', extra = {}) {
return { state, siteKey: null, ticketWoid: null, activatedAt: null, disabledReason: null, loeschungAm: null, ...extra }
}
/** Eine Website mit den Zuständen der Funktionen; Webshop und Buchungskalender tragen den Anfragestatus (N18). */
export function projekt(projectId, projectName, features = {}, analyse = { state: 'off' }) {
return {
projectId,
projectName,
liveUrl: '',
features: {
news: feature('off'),
termine: feature('off'),
shop: feature('off', { anfrageStatus: '' }),
unterkunft: feature('off', { anfrageStatus: '' }),
zeiten: feature('off'),
...features,
},
analyse,
}
}
/** Antwort von GET /api/funktionen im Abo-Modell. katalogEdit: { <key>: { …Felder… } } wird über den Eintrag gelegt. */
export function daten({ abo = {}, kundenart = 'unternehmen', projekte, katalogEdit = {} } = {}) {
return {
modell: 'abo',
kundenart,
abo: { produkt: 'wartung', laeuft: true, gekuendigt: false, widerrufsfristBis: null, ...abo },
katalog: KEYS.map((key) => katalogEintrag(key, katalogEdit[key])),
projects: projekte ?? [projekt('p1', 'Bäckerei Sonnenschein')],
}
}