Öffnungszeiten: Einbau-Ticket und Ersatz-HTML für das Team
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
302b58cf72
commit
8d670ca5dc
4 files changed
+355
-7
No files matched your search
@@ -12,6 +12,9 @@ import {
|
||||
listCustomerFeatureDocs,
|
||||
listCustomerFeatures,
|
||||
} from '../../services/siteFeatures.js'
|
||||
import { ersatzHtml } from '../../services/zeiten/ersatz.js'
|
||||
import { ladeZeiten } from '../../services/zeiten/speicher.js'
|
||||
import { hauptplan, planNachKurz } from '../../services/zeiten/zeitlogik.js'
|
||||
|
||||
/**
|
||||
* Funktionen (News-Pinnwand, Terminplaner) je Kundenprojekt im Ticketsystem (Kunden-Reiter "Funktionen").
|
||||
@@ -69,6 +72,35 @@ funktionenAdminRouter.get('/:customerId', async (req, res) => {
|
||||
}
|
||||
})
|
||||
|
||||
/**
|
||||
* Ersatz-HTML (statische Wochentabelle) eines Plans von Oeffnungszeiten live fuer den Einbau (Spec 4.5): { html }.
|
||||
* Ohne Parameter plan gilt der Hauptplan; ist plan angegeben (auch leer), muss es diesen Kurznamen geben, sonst 404 und
|
||||
* kein Rueckfall auf den Hauptplan (Ruling R9). Noch keine gespeicherten Zeiten -> 409. Nur lesend, ohne Sperre.
|
||||
*/
|
||||
funktionenAdminRouter.get('/:customerId/zeiten/ersatz', async (req, res) => {
|
||||
try {
|
||||
const { customerId } = req.params
|
||||
const { projectId, plan } = req.query
|
||||
if (typeof projectId !== 'string' || !projectId) return res.status(400).json({ error: 'Projekt fehlt' })
|
||||
await assertOwnProject(customerId, projectId)
|
||||
const doc = await getFeatureDoc(customerId, projectId, 'zeiten')
|
||||
if (!doc) return res.status(404).json({ error: `Für dieses Projekt gibt es noch ${FEATURE_LABELS.zeiten.keine}` })
|
||||
const daten = (await ladeZeiten(doc.$id))?.daten
|
||||
const keineZeiten = () => res.status(409).json({ error: 'Der Kunde hat noch keine Zeiten eingetragen.' })
|
||||
if (!Array.isArray(daten?.plaene) || daten.plaene.length === 0) return keineZeiten()
|
||||
if (plan !== undefined) {
|
||||
const gewaehlt = planNachKurz(daten, plan)
|
||||
if (!gewaehlt) return res.status(404).json({ error: 'Plan nicht gefunden' })
|
||||
return res.json({ html: ersatzHtml(daten, gewaehlt) })
|
||||
}
|
||||
const haupt = hauptplan(daten)
|
||||
if (!haupt) return keineZeiten()
|
||||
res.json({ html: ersatzHtml(daten, haupt) })
|
||||
} catch (err) {
|
||||
sendError(res, err)
|
||||
}
|
||||
})
|
||||
|
||||
// Aktivieren (ohne Zahlung) und Abschalten je Funktion: /news wie bisher, /termine neu; jeder andere Schluessel -> 404
|
||||
funktionenAdminRouter.post('/:customerId/:key', async (req, res) => {
|
||||
try {
|
||||
|
||||
Reference in new issue
Block a user