From 0c430e993e5c44937e0365bfd2ca87b4d67a8e25 Mon Sep 17 00:00:00 2001 From: flfeders Date: Fri, 11 Sep 2026 19:31:16 +0200 Subject: [PATCH] feat: configure planning board week end --- frontend/pages/organisation/plantafel.vue | 20 +++++++++++++++++-- frontend/pages/settings/tenant.vue | 24 +++++++++++++++++++++-- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/frontend/pages/organisation/plantafel.vue b/frontend/pages/organisation/plantafel.vue index 499dc0fa..74d40edf 100644 --- a/frontend/pages/organisation/plantafel.vue +++ b/frontend/pages/organisation/plantafel.vue @@ -185,7 +185,9 @@ const resolvedPlanningBoardConfig = computed(() => { const normalizedEndTime = /^\d{2}:\d{2}$/.test(String(config.endTime || "")) ? String(config.endTime) : "21:00" const normalizedSlotMinutes = Number(config.slotMinutes) const normalizedWeekStartsOn = Number(config.weekStartsOn) + const normalizedWeekEndsOn = Number(config.weekEndsOn) const allowedSlotMinutes = [15, 30, 60, 120, 180] + const allowedWeekEndDays = [5, 6, 0] return { startTime: normalizedStartTime, @@ -193,10 +195,24 @@ const resolvedPlanningBoardConfig = computed(() => { slotMinutes: allowedSlotMinutes.includes(normalizedSlotMinutes) ? normalizedSlotMinutes : 180, weekStartsOn: Number.isInteger(normalizedWeekStartsOn) && normalizedWeekStartsOn >= 1 && normalizedWeekStartsOn <= 5 ? normalizedWeekStartsOn - : 1 + : 1, + weekEndsOn: allowedWeekEndDays.includes(normalizedWeekEndsOn) ? normalizedWeekEndsOn : 5 } }) +const planningBoardHiddenDays = computed(() => { + const visibleDays = new Set() + let day = resolvedPlanningBoardConfig.value.weekStartsOn + + for (let index = 0; index < 7; index += 1) { + visibleDays.add(day) + if (day === resolvedPlanningBoardConfig.value.weekEndsOn) break + day = (day + 1) % 7 + } + + return [0, 1, 2, 3, 4, 5, 6].filter((weekday) => !visibleDays.has(weekday)) +}) + const resolvedQuickEntryConfig = computed(() => { const config = tenantCalendarConfig.value?.quickEntry || {} @@ -358,7 +374,7 @@ const calendarOptions = computed(() => ({ buttonText: "Woche", slotDuration: { minutes: resolvedPlanningBoardConfig.value.slotMinutes }, snapDuration: { minutes: resolvedPlanningBoardConfig.value.slotMinutes }, - weekends: false, + hiddenDays: planningBoardHiddenDays.value, slotMinTime: `${resolvedPlanningBoardConfig.value.startTime}:00`, slotMaxTime: `${resolvedPlanningBoardConfig.value.endTime}:00` }, diff --git a/frontend/pages/settings/tenant.vue b/frontend/pages/settings/tenant.vue index 391fdfb0..d6dc10fd 100644 --- a/frontend/pages/settings/tenant.vue +++ b/frontend/pages/settings/tenant.vue @@ -138,11 +138,18 @@ const planningBoardWeekStartOptions = [ { label: "Freitag", value: 5 } ] +const planningBoardWeekEndOptions = [ + { label: "Freitag", value: 5 }, + { label: "Samstag", value: 6 }, + { label: "Sonntag", value: 0 } +] + const planningBoardConfig = reactive({ startTime: auth.activeTenantData?.calendarConfig?.planningBoard?.startTime || "06:00", endTime: auth.activeTenantData?.calendarConfig?.planningBoard?.endTime || "21:00", slotMinutes: auth.activeTenantData?.calendarConfig?.planningBoard?.slotMinutes || 180, - weekStartsOn: auth.activeTenantData?.calendarConfig?.planningBoard?.weekStartsOn ?? 1 + weekStartsOn: auth.activeTenantData?.calendarConfig?.planningBoard?.weekStartsOn ?? 1, + weekEndsOn: auth.activeTenantData?.calendarConfig?.planningBoard?.weekEndsOn ?? 5 }) const canManageMcpTokens = computed(() => Boolean(auth.user?.is_admin || auth.hasPermission("mcp.tokens.write"))) @@ -248,6 +255,7 @@ const setupPage = async () => { planningBoardConfig.endTime = auth.activeTenantData?.calendarConfig?.planningBoard?.endTime || "21:00" planningBoardConfig.slotMinutes = auth.activeTenantData?.calendarConfig?.planningBoard?.slotMinutes || 180 planningBoardConfig.weekStartsOn = auth.activeTenantData?.calendarConfig?.planningBoard?.weekStartsOn ?? 1 + planningBoardConfig.weekEndsOn = auth.activeTenantData?.calendarConfig?.planningBoard?.weekEndsOn ?? 5 } const features = ref({ ...defaultFeatures, ...(auth.activeTenantData?.features || {}) }) @@ -582,7 +590,8 @@ const savePlanningBoardConfig = async () => { startTime: planningBoardConfig.startTime || "06:00", endTime: planningBoardConfig.endTime || "21:00", slotMinutes: Number(planningBoardConfig.slotMinutes) || 180, - weekStartsOn: Number(planningBoardConfig.weekStartsOn) + weekStartsOn: Number(planningBoardConfig.weekStartsOn), + weekEndsOn: Number(planningBoardConfig.weekEndsOn) } } }) @@ -789,6 +798,17 @@ onMounted(() => { /> + + + +