Kundenansicht P6: Mail-Builder für K38, K39, T24 und die Zeiten-Varianten K40, K41

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-16 16:29:34 +00:00
1 parent 664043e8e9
commit 9489a70f0c
3 files changed
+184 -5

No files matched your search

+15 -5
View File
@@ -8,6 +8,7 @@ import { datumKurz, wochentag } from '../termine/zeit.js'
* K28 Feiertags-Erinnerung (eine Mail mit allen neuen Tagen, ohne BCC)
* K29 Wartungs-Abo beendet: Funktion läuft bis zur Frist, „für einmalig 30 € behalten“ (Varianten nach der Abo-Lage)
* K30 abgeschaltet: feste Zeiten auf der Seite, Eingaben noch bis zum Löschdatum
* K40, K41 dieselben Mails im Abo-Modell der Kundenansicht neu (k29Mail und k30Mail mit modell: true): ohne Preis und ohne Behalten
* Die Builder sind rein (kein Zugriff auf Appwrite, kein Versand) und liefern { template, values, blocks }, so wie
* siteFeatures.bestellMail: die Werte decken genau die Platzhalter der Vorlage ab. sendeZeitenMail verschickt sie.
*
@@ -93,24 +94,33 @@ export function k28Mail({ kunde, projekt, tage }) {
/**
* K29: Das Wartungs-Abo ist beendet, die Funktion läuft noch bis zur Frist; für einmalig `preis` behalten.
* @param {{ kunde: string | { name?: string }, projekt: string, art?: string, frist: Date, preis: string }} p
* @param {{ kunde: string | { name?: string }, projekt: string, art?: string, frist: Date, preis: string, modell?: boolean }} p
* art: Abo-Lage aus aboStatus.aboLage(): 'hosting' (das Abo ist ein Hosting-Abo), 'wechsel_widerrufen' (Wechsel ins Wartungs-Abo
* widerrufen), sonst (auch 'beendet' und Unbekanntes) 'abo_ende'. frist: Tag des Abschaltens (aboEndeAt + 30 Tage).
* modell: Abo-Modell der Kundenansicht neu (Task 10): Vorlage K40 ohne Preis und ohne Behalten, die Blöcke bleiben gleich.
*/
export function k29Mail({ kunde, projekt, art, frist, preis }) {
export function k29Mail({ kunde, projekt, art, frist, preis, modell = false }) {
const blocks = { abo_ende: art !== 'hosting' && art !== 'wechsel_widerrufen', hosting: art === 'hosting', wechsel_widerrufen: art === 'wechsel_widerrufen' }
if (modell) {
return { template: 'K40', values: { kunde_name: kundenName(kunde), projekt, frist: datum(frist, 'frist'), portal_url: portalUrl() }, blocks }
}
return {
template: 'K29',
values: { kunde_name: kundenName(kunde), projekt, frist: datum(frist, 'frist'), preis, portal_url: portalUrl() },
blocks: { abo_ende: art !== 'hosting' && art !== 'wechsel_widerrufen', hosting: art === 'hosting', wechsel_widerrufen: art === 'wechsel_widerrufen' },
blocks,
}
}
/**
* K30: Öffnungszeiten live ist abgeschaltet (Wartungs-Abo beendet, Frist zum Behalten abgelaufen).
* @param {{ kunde: string | { name?: string }, projekt: string, loeschdatum: Date, preis: string }} p
* @param {{ kunde: string | { name?: string }, projekt: string, loeschdatum: Date, preis: string, modell?: boolean }} p
* loeschdatum: Tag, ab dem die Eingaben gelöscht werden (30 Tage nach dem Abschalten); preis: Preis zum Wiedereinschalten.
* modell: Abo-Modell der Kundenansicht neu (Task 10): Vorlage K41 ohne Preis.
*/
export function k30Mail({ kunde, projekt, loeschdatum, preis }) {
export function k30Mail({ kunde, projekt, loeschdatum, preis, modell = false }) {
if (modell) {
return { template: 'K41', values: { kunde_name: kundenName(kunde), projekt, loeschdatum: datum(loeschdatum, 'loeschdatum'), portal_url: portalUrl() } }
}
return {
template: 'K30',
values: { kunde_name: kundenName(kunde), projekt, loeschdatum: datum(loeschdatum, 'loeschdatum'), preis, portal_url: portalUrl() },