From ef891f8e012673823bb82cdf79dbcec703df589c Mon Sep 17 00:00:00 2001 From: BOHA Date: Thu, 2 Apr 2026 10:56:25 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20bulk=20attendance=20fill=20=E2=80=94=20a?= =?UTF-8?q?ccept=20string=20user=5Fids,=20skip=20holidays?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Schema now accepts both string and number user_ids (frontend sends strings) - Bulk fill now skips Czech public holidays in addition to weekends Co-Authored-By: Claude Opus 4.6 (1M context) --- src/schemas/attendance.schema.ts | 4 +++- src/services/attendance.service.ts | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/schemas/attendance.schema.ts b/src/schemas/attendance.schema.ts index 7f6578a..100f150 100644 --- a/src/schemas/attendance.schema.ts +++ b/src/schemas/attendance.schema.ts @@ -39,7 +39,9 @@ export const AttendanceBalancesSchema = z.object({ export const AttendanceBulkSchema = z.object({ month: z.string().regex(/^\d{4}-\d{2}$/, "Měsíc je povinný (formát YYYY-MM)"), - user_ids: z.array(z.number()).min(1, "Vyberte alespoň jednoho zaměstnance"), + user_ids: z + .array(z.union([z.number(), z.string()]).transform((v) => Number(v))) + .min(1, "Vyberte alespoň jednoho zaměstnance"), arrival_time: z.string().optional().default("08:00"), departure_time: z.string().optional().default("16:30"), break_start_time: z.string().optional().default("12:00"), diff --git a/src/services/attendance.service.ts b/src/services/attendance.service.ts index 9b95769..fe53c4d 100644 --- a/src/services/attendance.service.ts +++ b/src/services/attendance.service.ts @@ -1,6 +1,6 @@ import { attendance_leave_type, Prisma } from "@prisma/client"; import prisma from "../config/database"; -import { getBusinessDaysInMonth } from "../utils/czech-holidays"; +import { getBusinessDaysInMonth, isHoliday } from "../utils/czech-holidays"; import { localDateStr } from "../utils/date"; import { getSystemSettings } from "./system-settings"; @@ -1087,6 +1087,7 @@ export async function bulkCreateAttendance(data: BulkAttendanceData) { const dow = date.getDay(); if (dow === 0 || dow === 6) continue; + if (isHoliday(dateStr)) continue; if (existingSet.has(`${userId}:${dateStr}`)) { skipped++;