import { z } from "zod"; export const AttendanceNotesSchema = z.object({ notes: z.string().nullish(), }); export const AttendanceUpdateAddressSchema = z.object({ address: z.string().max(500).nullish(), punch_action: z.string().optional().default("arrival"), }); export const AttendanceSwitchProjectSchema = z.object({ project_id: z .union([z.number(), z.string()]) .transform((v) => Number(v)) .nullish(), }); export const AttendanceBalancesSchema = z.object({ user_id: z.union([z.number(), z.string()]).transform((v) => Number(v)), year: z .union([z.number(), z.string()]) .transform((v) => Number(v)) .optional(), action_type: z.string(), vacation_total: z .union([z.number(), z.string()]) .transform((v) => Number(v)) .optional(), vacation_used: z .union([z.number(), z.string()]) .transform((v) => Number(v)) .optional(), sick_used: z .union([z.number(), z.string()]) .transform((v) => Number(v)) .optional(), }); 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.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"), break_end_time: z.string().optional().default("12:30"), }); export const AttendanceLeaveSchema = z.object({ user_id: z .union([z.number(), z.string()]) .transform((v) => Number(v)) .optional(), date_from: z.string().min(1, "Datum je povinné"), date_to: z.string().optional(), leave_type: z.string().optional().default("vacation"), leave_hours: z .union([z.number(), z.string()]) .transform((v) => Number(v)) .optional(), notes: z.string().nullish(), }); const ProjectLogSchema = z.object({ project_id: z.union([z.number(), z.string()]).transform((v) => Number(v)), hours: z .union([z.number(), z.string()]) .transform((v) => Number(v) || 0) .optional() .default(0), minutes: z .union([z.number(), z.string()]) .transform((v) => Number(v) || 0) .optional() .default(0), }); export const AttendancePunchSchema = z.object({ punch_action: z.string(), latitude: z.union([z.number(), z.string(), z.null()]).optional(), longitude: z.union([z.number(), z.string(), z.null()]).optional(), accuracy: z.union([z.number(), z.string(), z.null()]).optional(), address: z.string().max(500).nullish(), }); export const CreateAttendanceSchema = z.object({ user_id: z .union([z.number(), z.string()]) .transform((v) => Number(v)) .optional(), shift_date: z.string(), arrival_time: z.string().nullish(), arrival_lat: z .union([z.number(), z.string()]) .transform((v) => Number(v)) .nullish(), arrival_lng: z .union([z.number(), z.string()]) .transform((v) => Number(v)) .nullish(), arrival_accuracy: z .union([z.number(), z.string()]) .transform((v) => Number(v)) .nullish(), arrival_address: z.string().nullish(), departure_time: z.string().nullish(), departure_lat: z .union([z.number(), z.string()]) .transform((v) => Number(v)) .nullish(), departure_lng: z .union([z.number(), z.string()]) .transform((v) => Number(v)) .nullish(), departure_accuracy: z .union([z.number(), z.string()]) .transform((v) => Number(v)) .nullish(), departure_address: z.string().nullish(), notes: z.string().nullish(), project_id: z .union([z.number(), z.string()]) .transform((v) => Number(v)) .nullish(), leave_type: z.string().optional().default("work"), leave_hours: z .union([z.number(), z.string()]) .transform((v) => Number(v)) .nullish(), project_logs: z.array(ProjectLogSchema).optional(), }); export const UpdateAttendanceSchema = z.object({ arrival_time: z.union([z.string(), z.null()]).optional(), departure_time: z.union([z.string(), z.null()]).optional(), break_start: z.union([z.string(), z.null()]).optional(), break_end: z.union([z.string(), z.null()]).optional(), notes: z.string().nullish(), project_id: z.union([z.number(), z.string(), z.null()]).optional(), leave_type: z.string().optional(), leave_hours: z.union([z.number(), z.string(), z.null()]).optional(), project_logs: z.array(ProjectLogSchema).optional(), }); export type AttendanceNotesInput = z.infer; export type AttendanceUpdateAddressInput = z.infer< typeof AttendanceUpdateAddressSchema >; export type AttendanceSwitchProjectInput = z.infer< typeof AttendanceSwitchProjectSchema >; export type AttendanceBalancesInput = z.infer; export type AttendanceBulkInput = z.infer; export type AttendanceLeaveInput = z.infer; export type AttendancePunchInput = z.infer; export type CreateAttendanceInput = z.infer; export type UpdateAttendanceInput = z.infer;