fix: bulk attendance fill — accept string user_ids, skip holidays
- 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) <noreply@anthropic.com>
This commit is contained in:
@@ -39,7 +39,9 @@ export const AttendanceBalancesSchema = z.object({
|
|||||||
|
|
||||||
export const AttendanceBulkSchema = z.object({
|
export const AttendanceBulkSchema = z.object({
|
||||||
month: z.string().regex(/^\d{4}-\d{2}$/, "Měsíc je povinný (formát YYYY-MM)"),
|
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"),
|
arrival_time: z.string().optional().default("08:00"),
|
||||||
departure_time: z.string().optional().default("16:30"),
|
departure_time: z.string().optional().default("16:30"),
|
||||||
break_start_time: z.string().optional().default("12:00"),
|
break_start_time: z.string().optional().default("12:00"),
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { attendance_leave_type, Prisma } from "@prisma/client";
|
import { attendance_leave_type, Prisma } from "@prisma/client";
|
||||||
import prisma from "../config/database";
|
import prisma from "../config/database";
|
||||||
import { getBusinessDaysInMonth } from "../utils/czech-holidays";
|
import { getBusinessDaysInMonth, isHoliday } from "../utils/czech-holidays";
|
||||||
import { localDateStr } from "../utils/date";
|
import { localDateStr } from "../utils/date";
|
||||||
import { getSystemSettings } from "./system-settings";
|
import { getSystemSettings } from "./system-settings";
|
||||||
|
|
||||||
@@ -1087,6 +1087,7 @@ export async function bulkCreateAttendance(data: BulkAttendanceData) {
|
|||||||
const dow = date.getDay();
|
const dow = date.getDay();
|
||||||
|
|
||||||
if (dow === 0 || dow === 6) continue;
|
if (dow === 0 || dow === 6) continue;
|
||||||
|
if (isHoliday(dateStr)) continue;
|
||||||
|
|
||||||
if (existingSet.has(`${userId}:${dateStr}`)) {
|
if (existingSet.has(`${userId}:${dateStr}`)) {
|
||||||
skipped++;
|
skipped++;
|
||||||
|
|||||||
Reference in New Issue
Block a user