Improve family invitations and absence management flows

This commit is contained in:
t.indorf
2026-10-09 22:59:36 +02:00
parent 4702bf5abb
commit 8915fe7df6
29 changed files with 2803 additions and 617 deletions
+37
View File
@@ -0,0 +1,37 @@
// Absences are calendar dates stored as UTC dates, independent of the server timezone.
export function absenceDate(value: string) {
if (!/^\d{4}-\d{2}-\d{2}$/.test(value)) throw new Error("Ungültiges Datum.");
const date = new Date(`${value}T00:00:00.000Z`);
if (Number.isNaN(date.getTime()) || date.toISOString().slice(0, 10) !== value)
throw new Error("Ungültiges Datum.");
return date;
}
export function isAbsenceDate(value: string) {
try {
absenceDate(value);
return true;
} catch {
return false;
}
}
export function absenceToday(now = new Date()) {
const parts = new Intl.DateTimeFormat("en-CA", {
timeZone: "Europe/Berlin",
year: "numeric",
month: "2-digit",
day: "2-digit",
}).formatToParts(now);
const part = (type: string) =>
parts.find((item) => item.type === type)!.value;
return `${part("year")}-${part("month")}-${part("day")}`;
}
export function canManageKitaAbsences(role: string) {
return ["ADMIN", "KOORDINATOR", "ERZIEHER"].includes(role);
}
export function canEditOwnAbsence(startDate: string, today: string) {
return startDate > today;
}