Shop Review B I-8: Webshop ohne Zahlung nur mit Zustimmung in Textform aktivieren
Das Textform-Formular (Haken, Datum, Weg, Chat-Vorlage) gilt wie beim Terminplaner auch fuer den Webshop, wenn das Portal im Feld shop textformNoetig meldet. Kaestchentext und Chat-Vorlage nennen die Unterlagen des Webshops, die Fassung und die Erklaerungen, die das Portal im Nachweis speichert. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
0a2eab85d5
commit
00fa229235
4 files changed
+112
-23
No files matched your search
+32
-11
@@ -174,10 +174,16 @@ export function mergeFunktion(projects, projectId, key, aktualisiert) {
|
||||
return projects.map((p) => (p.projectId === projectId ? { ...p, features: { ...p.features, [key]: view } } : p))
|
||||
}
|
||||
|
||||
// --- Aktivieren (ohne Zahlung) mit Zustimmung in Textform (Modus on des Terminplaners; Portal: GET /funktionen/:customerId => termine) ---
|
||||
// --- Aktivieren (ohne Zahlung) mit Zustimmung in Textform (Modus on des Terminplaners und des Webshops; Portal: GET /funktionen/:customerId => termine, shop) ---
|
||||
|
||||
/** true, wenn diese Aktion die Zustimmung in Textform braucht: nur "Aktivieren (ohne Zahlung)" des Terminplaners und nur, wenn das Portal es verlangt (termine.textformNoetig === true). */
|
||||
export const textformNoetig = (key, action, termine) => key === 'termine' && action === 'activate' && termine?.textformNoetig === true
|
||||
/** Funktionen, deren Aktivierung durch das Team die Zustimmung des Kunden in Textform brauchen kann (Portal: TEXTFORM_KEYS). */
|
||||
export const TEXTFORM_FUNKTIONEN = ['termine', 'shop']
|
||||
|
||||
/**
|
||||
* true, wenn diese Aktion die Zustimmung in Textform braucht: nur "Aktivieren (ohne Zahlung)" des Terminplaners oder des Webshops und nur, wenn das
|
||||
* Portal es verlangt (feld = Portal-Feld dieser Funktion, termine bzw. shop, feld.textformNoetig === true).
|
||||
*/
|
||||
export const textformNoetig = (key, action, feld) => TEXTFORM_FUNKTIONEN.includes(key) && action === 'activate' && feld?.textformNoetig === true
|
||||
|
||||
/** Kaestchentext (wie im Portal-Nachweis, ohne Datum und Weg); die beiden Links setzt die Komponente. */
|
||||
export const termineTextformLabel = (version) => ({
|
||||
@@ -188,10 +194,23 @@ export const termineTextformLabel = (version) => ({
|
||||
after: ` (Fassung ${version}) in Textform zugestimmt und bestätigt, dass sein Angebot nicht im Gesundheitsbereich liegt.`,
|
||||
})
|
||||
|
||||
/** Kaestchentext des Webshops; die Erklaerungen entsprechen den Bestelltexten "unterlagen", "verantwortung" und "stripe", die das Portal im Nachweis speichert. */
|
||||
export const shopTextformLabel = (version) => ({
|
||||
before: 'Der Kunde hat der ',
|
||||
lb: 'Leistungsbeschreibung Webshop',
|
||||
between: ' und dem ',
|
||||
avv: 'Auftragsverarbeitungsvertrag Webshop',
|
||||
after: ` (Fassung ${version}) in Textform zugestimmt und bestätigt, dass er als Unternehmer in eigenem Namen verkauft, für seine Produkte, Preise, Produktangaben und Rechtstexte selbst verantwortlich ist, keine der in der Leistungsbeschreibung ausgeschlossenen Waren verkauft und die Zahlungen seiner Käufer über sein eigenes Stripe-Konto laufen.`,
|
||||
})
|
||||
|
||||
/** Textvorlage fuer den Chat (Kopierknopf); links = die versionierten Adressen aus dem Portal (termine.links). */
|
||||
export const termineChatTemplate = (version, links) =>
|
||||
`Damit wir den Terminplaner für Dich einschalten können, brauchen wir Deine Zustimmung in Textform. Es gelten die Leistungsbeschreibung Terminplaner und der Auftragsverarbeitungsvertrag Terminplaner in der Fassung ${version}: ${links.lb} · ${links.avv}. Bitte antworte hier mit „Ich stimme zu“ und bestätige, dass Dein Angebot nicht im Gesundheitsbereich liegt.`
|
||||
|
||||
/** Textvorlage fuer den Chat beim Webshop; links = shop.links. Die Bestaetigung deckt dieselben Erklaerungen wie shopTextformLabel. */
|
||||
export const shopChatTemplate = (version, links) =>
|
||||
`Damit wir den Webshop für Dich einschalten können, brauchen wir Deine Zustimmung in Textform. Es gelten die Leistungsbeschreibung Webshop und der Auftragsverarbeitungsvertrag Webshop in der Fassung ${version}: ${links.lb} · ${links.avv}. Bitte antworte hier mit „Ich stimme zu“ und bestätige, dass Du als Unternehmer in eigenem Namen verkaufst, für Deine Produkte, Preise, Produktangaben und Rechtstexte selbst verantwortlich bist, keine der in der Leistungsbeschreibung ausgeschlossenen Waren verkaufst und Deine Zahlungen über Dein eigenes Stripe-Konto laufen.`
|
||||
|
||||
/** Nur geprüfte https-Adressen werden Links; alles andere ''. */
|
||||
const httpsUrl = (wert) => {
|
||||
if (typeof wert !== 'string') return ''
|
||||
@@ -203,23 +222,25 @@ const httpsUrl = (wert) => {
|
||||
}
|
||||
|
||||
/**
|
||||
* Alles, was der Bestaetigungsdialog zeigt, aus dem Portal-Feld termine: { version, links { lb, avv } (nur https, sonst ''), label, vorlage }.
|
||||
* Alles, was der Bestaetigungsdialog zeigt, aus dem Portal-Feld der Funktion (feld = termine bzw. shop, key = 'termine' | 'shop'):
|
||||
* { version, links { lb, avv } (nur https, sonst ''), label, vorlage }.
|
||||
* vorlage nur, wenn Fassung und beide Adressen da sind (eine Vorlage mit leeren Adressen geht nie an den Kunden), sonst ''.
|
||||
*/
|
||||
export function textformAnsicht(termine) {
|
||||
const version = typeof termine?.avvVersion === 'string' ? termine.avvVersion : ''
|
||||
const links = { lb: httpsUrl(termine?.links?.lb), avv: httpsUrl(termine?.links?.avv) }
|
||||
export function textformAnsicht(feld, key = 'termine') {
|
||||
const shop = key === 'shop'
|
||||
const version = typeof feld?.avvVersion === 'string' ? feld.avvVersion : ''
|
||||
const links = { lb: httpsUrl(feld?.links?.lb), avv: httpsUrl(feld?.links?.avv) }
|
||||
return {
|
||||
version,
|
||||
links,
|
||||
label: termineTextformLabel(version),
|
||||
vorlage: version && links.lb && links.avv ? termineChatTemplate(version, links) : '',
|
||||
label: (shop ? shopTextformLabel : termineTextformLabel)(version),
|
||||
vorlage: version && links.lb && links.avv ? (shop ? shopChatTemplate : termineChatTemplate)(version, links) : '',
|
||||
}
|
||||
}
|
||||
|
||||
/** Alle drei Pflichtangaben (Haken, Datum zwischen Fassung und heute, Weg); ohne Fassung im Portal-Feld nie bereit. */
|
||||
export function textformBereit({ confirmed, date, channel, today }, termine) {
|
||||
const minDate = typeof termine?.avvVersion === 'string' ? termine.avvVersion : ''
|
||||
export function textformBereit({ confirmed, date, channel, today }, feld) {
|
||||
const minDate = typeof feld?.avvVersion === 'string' ? feld.avvVersion : ''
|
||||
if (!minDate) return false
|
||||
return canSubmitTextform({ confirmed, date, channel, today, minDate })
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user