Improve family invitations and absence management flows
This commit is contained in:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user