34 lines
1.6 KiB
JavaScript
34 lines
1.6 KiB
JavaScript
import { preiseVollstaendig } from './preis.js'
|
|
import { ladeEinstellungen, ladePreise, listeUnterkuenfte } from './speicher.js'
|
|
|
|
/**
|
|
* 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
|
|
}
|
|
}
|