Buchungskalender: Bestellung auf Anfrage, Freischaltung und Ticket

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
knsoandClaude Opus 5.5 committed 2026-10-07 14:44:21 +00:00
1 parent 827ee54875
commit 9d01d38a45
7 files changed
+799 -15

No files matched your search

+31 -4
View File
@@ -1,6 +1,33 @@
// Stub (Task 5): Freischaltpruefung des Buchungskalenders. Task 11 ersetzt dieses Modul.
import { preiseVollstaendig } from './preis.js'
import { ladeEinstellungen, ladePreise, listeUnterkuenfte } from './speicher.js'
/** freischaltbar-Haken (Stub, fail-closed: nie freigeben). */
export async function freischaltbar() {
return false
/**
* freischaltbar-Haken des Buchungskalenders (featureRegistry, Zustand 'setup', Ticket geschlossen): darf die Funktion jetzt aktiv
* werden? Ja, wenn der Kunde alles hinterlegt hat, was Rechnungen und Buchungen brauchen:
* - Einstellungen: firma, strasse, plz, ort, email und (steuernummer oder ustId), dazu rechnungAuftragAt (Zustimmung zur
* Rechnungsstellung im Namen des Vermieters);
* - mindestens eine aktive Unterkunft mit vollstaendigen Preisen (preiseVollstaendig) und Stornobedingungen.
* Fail-closed: bei jedem Lesefehler false.
* @param {{ $id: string }} doc portalFeatures-Dokument
* @returns {Promise<boolean>}
*/
export async function freischaltbar(doc) {
try {
const featureId = doc?.$id
if (typeof featureId !== 'string' || !featureId) return false
const einst = await ladeEinstellungen(featureId)
if (!einst) return false
const text = (wert) => typeof wert === 'string' && wert.trim() !== ''
if (!['firma', 'strasse', 'plz', 'ort', 'email'].every((k) => text(einst[k]))) return false
if (!text(einst.steuernummer) && !text(einst.ustId)) return false
if (!einst.rechnungAuftragAt) return false
const unterkuenfte = await listeUnterkuenfte(featureId, { nurAktive: true })
for (const u of unterkuenfte) {
const preise = await ladePreise(u.$id)
if (preiseVollstaendig(preise) && text(preise.stornobedingungen)) return true
}
return false
} catch {
return false
}
}