Kundenansicht P5: Katalog, Abo-Stand und Anfragestatus in GET /api/funktionen
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e30318a470
commit
b6f2df0d4a
3 files changed
+263
-2
No files matched your search
@@ -26,6 +26,7 @@ import { einschaltenDeps, einschaltenZeiten, zeitenProjektAnsicht } from '../ser
|
||||
import { starteBehalten } from '../services/zeiten/behalten.js'
|
||||
import { aboMemo } from '../services/aboStatus.js'
|
||||
import { aboProdukt } from '../services/aboFunktionen.js'
|
||||
import { anfrageStatusJeProjekt, katalogFuerKunde } from '../services/aboKatalog.js'
|
||||
import { datumDe, einschalten, EINSCHALTEN_TEXTE, pruefeAboDeckung, pruefeEinschaltZustand } from '../services/funktionEinschalten.js'
|
||||
import { kundenartWirksam, NUR_BETRIEB_TEXT } from '../services/kundenart.js'
|
||||
import { neueAnsicht } from '../services/kundenansicht/schalter.js'
|
||||
@@ -226,7 +227,7 @@ router.get('/', requireSession, async (req, res) => {
|
||||
)
|
||||
// Der Abo-Stand wird fuer Terminplaner und Oeffnungszeiten nur einmal gelesen
|
||||
const abos = aboMemo()
|
||||
res.json({
|
||||
const antwort = {
|
||||
projects,
|
||||
// Preise und Bestelltexte je Funktion aus dem Register (nur die oeffentliche Ansicht, auch wenn der Terminplaner
|
||||
// dem Kunden noch nicht freigegeben ist); setupEstimate und consentText bleiben als News-Alias fuer aeltere Clients
|
||||
@@ -248,7 +249,23 @@ router.get('/', requireSession, async (req, res) => {
|
||||
// Oeffnungszeiten live: Schalter ZEITEN_ENABLED (off | pilot | on); nur wenn verfuegbar zeigt das Portal die Kachel, dann mit
|
||||
// dem Abo-Stand (inklusive, grund), dem Preis und den Texten des Gratisweges "Einschalten"
|
||||
zeiten: await zeitenAngebot(req.session.email, customerId, abos),
|
||||
})
|
||||
}
|
||||
// Kundenansicht neu (V5): Abo-Modell mit Kundenart, Abo-Stand, Katalog und Anfragestatus von Webshop und Buchungskalender je Projekt.
|
||||
// Ohne neue Ansicht bleibt die Antwort wie sie war. Ein Lesefehler beim Abo-Stand ist ein Fehler der Liste (nie ein erfundenes "kein Abo").
|
||||
if (neueAnsicht(req)) {
|
||||
const [kunde, abo, katalog, anfrageStatus] = await Promise.all([
|
||||
kundenDokument(customerId),
|
||||
aboProdukt(customerId, { now: jetzt }),
|
||||
katalogFuerKunde({ email: req.session.email }),
|
||||
anfrageStatusJeProjekt({ docs, projects }),
|
||||
])
|
||||
for (const p of projects) {
|
||||
p.features.shop.anfrageStatus = anfrageStatus.get(p.projectId)?.shop ?? ''
|
||||
p.features.unterkunft.anfrageStatus = anfrageStatus.get(p.projectId)?.unterkunft ?? ''
|
||||
}
|
||||
Object.assign(antwort, { modell: 'abo', kundenart: kundenartWirksam(kunde), abo, katalog })
|
||||
}
|
||||
res.json(antwort)
|
||||
} catch (err) {
|
||||
fail(res, err, 'Die Funktionen konnten gerade nicht geladen werden. Bitte lade die Seite gleich noch einmal.')
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user