Shop Review B I-1: Eingangsmail G15 bei SEPA, G09 nimmt die Bestellung ausdruecklich an
G15 "Wir haben Ihre Bestellung erhalten" geht einmal raus, sobald Stripe die Sitzung abgeschlossen, die Zahlung aber noch nicht gemeldet hat (meldeEingang, Marker mailsEingangAt, aus dem Webhook und aus pruefeOffene). G09 sagt ausdruecklich, dass der Kaufvertrag mit der Mail geschlossen ist, trennt Bestell- und Zahlungsdatum und nennt die Telefonnummer des Anbieters. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
1b7aa9ebe3
commit
77fb8c8f44
11 files changed
+238
-27
No files matched your search
@@ -13,7 +13,7 @@ import { gewaehrleistungsHinweis } from './rechtstexte.js'
|
||||
* Mails des Webshops (Spezifikation 2026-10-05-webshop-design.md, Abschnitte 5.3, 5.4 und 8; Plan Task E4).
|
||||
*
|
||||
* Kaeufer (G09 Bestellbestaetigung, G10 versendet, G11 abholbereit, G12 Eingang Widerruf, G13 Erstattung, G14 Zahlung
|
||||
* fehlgeschlagen) laufen durch die Mail-Warteschlange des Terminplaners (termine/outbox.js einreihen): Absendername = Shopname,
|
||||
* fehlgeschlagen, G15 Eingang der Bestellung) laufen durch die Mail-Warteschlange des Terminplaners (termine/outbox.js einreihen): Absendername = Shopname,
|
||||
* Absenderadresse bleibt SMTP_FROM, Antworten an die E-Mail des Haendlers, nie BCC. featureId = ID des portalFeatures-Dokuments des
|
||||
* Shops, bookingId = Bestell-ID. Der Betreff steht in der Vorlage (G-Vorlagen des Shops haben keinen {{betreff}}-Wert). Die
|
||||
* Empfaenger-Kappe der Terminplaner-Mails (limits.darfEmpfaenger) gilt hier nicht: G09 ist Vertragspflicht.
|
||||
@@ -36,7 +36,7 @@ import { gewaehrleistungsHinweis } from './rechtstexte.js'
|
||||
*/
|
||||
|
||||
const LEER = '–'
|
||||
const GAST_ARTEN = Object.freeze(['G09', 'G10', 'G11', 'G12', 'G13', 'G14'])
|
||||
const GAST_ARTEN = Object.freeze(['G09', 'G10', 'G11', 'G12', 'G13', 'G14', 'G15'])
|
||||
/** Grenzen des Outbox-Schemas (html 100000, text 50000) mit etwas Luft. */
|
||||
const MAX_HTML = 95000
|
||||
const MAX_TEXT = 47000
|
||||
@@ -87,7 +87,7 @@ function anbieterZeile(a) {
|
||||
const ort = [text(a.plz), text(a.ort)].filter(Boolean).join(' ')
|
||||
const land = text(a.land) && a.land !== 'DE' ? (LANDNAMEN[a.land] ?? a.land) : ''
|
||||
const anschrift = [text(a.strasse), ort, land].filter(Boolean).join(', ')
|
||||
return [text(a.name), anschrift, text(a.email)].filter(Boolean).join(', ') || LEER
|
||||
return [text(a.name), anschrift, text(a.email), text(a.telefon) ? `Tel. ${einzeilig(a.telefon)}` : ''].filter(Boolean).join(', ') || LEER
|
||||
}
|
||||
|
||||
const siteKeyVon = (ctx) => ctx?.shop?.siteKey || ctx?.doc?.siteKey || ''
|
||||
@@ -143,9 +143,13 @@ function eingangText(eingang) {
|
||||
return `${datumKurz(d)}, ${uhrzeit(d)} Uhr`
|
||||
}
|
||||
|
||||
const datumText = (order, now) => {
|
||||
const ms = zeitMs(order?.bezahltAt || order?.erstelltAt)
|
||||
return datumKurz(Number.isFinite(ms) ? new Date(ms) : now)
|
||||
/** Datum des ersten brauchbaren Zeitpunkts (Berliner Tag), sonst des Ersatzdatums. */
|
||||
const datumVon = (now, ...zeitpunkte) => {
|
||||
for (const wert of zeitpunkte) {
|
||||
const ms = zeitMs(wert)
|
||||
if (Number.isFinite(ms)) return datumKurz(new Date(ms))
|
||||
}
|
||||
return datumKurz(now)
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------- Werte
|
||||
@@ -184,7 +188,8 @@ export function kaeuferWerte(ctx, order, now = new Date()) {
|
||||
impressum_url: text(rechtstexte.impressumUrl) || shop,
|
||||
datenschutz_url: text(rechtstexte.datenschutzUrl) || shop,
|
||||
bestellnummer: oderLeer(order?.bestellnummer),
|
||||
datum: datumText(order, now),
|
||||
datum: datumVon(now, order?.erstelltAt),
|
||||
zahlungsdatum: datumVon(now, order?.bezahltAt, order?.erstelltAt),
|
||||
positionen: positionenText(snap.positionen),
|
||||
zwischensumme: text(texte.zwischensumme) || cent(summen.zwischensummeCent),
|
||||
versand: text(texte.versand) || (lieferart === 'abholung' ? 'Abholung – kostenlos' : cent(summen.versandCent)),
|
||||
|
||||
Reference in new issue
Block a user