diff --git a/frontend/pages/organisation/plantafel.vue b/frontend/pages/organisation/plantafel.vue index a25dc6a..499dc0f 100644 --- a/frontend/pages/organisation/plantafel.vue +++ b/frontend/pages/organisation/plantafel.vue @@ -184,12 +184,16 @@ const resolvedPlanningBoardConfig = computed(() => { const normalizedStartTime = /^\d{2}:\d{2}$/.test(String(config.startTime || "")) ? String(config.startTime) : "06:00" 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 allowedSlotMinutes = [15, 30, 60, 120, 180] return { startTime: normalizedStartTime, endTime: normalizedEndTime, - slotMinutes: allowedSlotMinutes.includes(normalizedSlotMinutes) ? normalizedSlotMinutes : 180 + slotMinutes: allowedSlotMinutes.includes(normalizedSlotMinutes) ? normalizedSlotMinutes : 180, + weekStartsOn: Number.isInteger(normalizedWeekStartsOn) && normalizedWeekStartsOn >= 1 && normalizedWeekStartsOn <= 5 + ? normalizedWeekStartsOn + : 1 } }) @@ -295,6 +299,7 @@ const visibleDraftEventIds = computed(() => const calendarOptions = computed(() => ({ schedulerLicenseKey: "CC-Attribution-NonCommercial-NoDerivatives", locale: deLocale, + firstDay: resolvedPlanningBoardConfig.value.weekStartsOn, plugins: [resourceTimelinePlugin, interactionPlugin], initialView: calendarView.value, initialDate: calendarCurrentDate.value, @@ -349,6 +354,7 @@ const calendarOptions = computed(() => ({ resourceTimelineWeek: { type: "resourceTimeline", duration: { days: 7 }, + dateAlignment: "week", buttonText: "Woche", slotDuration: { minutes: resolvedPlanningBoardConfig.value.slotMinutes }, snapDuration: { minutes: resolvedPlanningBoardConfig.value.slotMinutes }, diff --git a/frontend/pages/settings/tenant.vue b/frontend/pages/settings/tenant.vue index 9167cf5..391fdfb 100644 --- a/frontend/pages/settings/tenant.vue +++ b/frontend/pages/settings/tenant.vue @@ -130,10 +130,19 @@ const planningBoardTimeGridOptions = [ { label: "180 Minuten", value: 180 } ] +const planningBoardWeekStartOptions = [ + { label: "Montag", value: 1 }, + { label: "Dienstag", value: 2 }, + { label: "Mittwoch", value: 3 }, + { label: "Donnerstag", value: 4 }, + { label: "Freitag", value: 5 } +] + 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 + slotMinutes: auth.activeTenantData?.calendarConfig?.planningBoard?.slotMinutes || 180, + weekStartsOn: auth.activeTenantData?.calendarConfig?.planningBoard?.weekStartsOn ?? 1 }) const canManageMcpTokens = computed(() => Boolean(auth.user?.is_admin || auth.hasPermission("mcp.tokens.write"))) @@ -238,6 +247,7 @@ const setupPage = async () => { planningBoardConfig.startTime = auth.activeTenantData?.calendarConfig?.planningBoard?.startTime || "06:00" 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 } const features = ref({ ...defaultFeatures, ...(auth.activeTenantData?.features || {}) }) @@ -571,7 +581,8 @@ const savePlanningBoardConfig = async () => { planningBoard: { startTime: planningBoardConfig.startTime || "06:00", endTime: planningBoardConfig.endTime || "21:00", - slotMinutes: Number(planningBoardConfig.slotMinutes) || 180 + slotMinutes: Number(planningBoardConfig.slotMinutes) || 180, + weekStartsOn: Number(planningBoardConfig.weekStartsOn) } } }) @@ -741,7 +752,7 @@ onMounted(() => {
Lege hier die Rahmenzeiten und den Rasterabstand für die Plantafel fest.
+Lege hier Rahmenzeiten, Rasterabstand und Wochenbeginn für die Plantafel fest.