fix: all item/sub-object schemas accept string numbers from form inputs

Fixed offers, orders, attendance, scope-templates schemas — quantity,
unit_price, position, hours, minutes now use z.union([z.number(), z.string()])
with transform instead of bare z.number().

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
BOHA
2026-03-23 18:42:41 +01:00
parent a8a28d8472
commit aeac76687b
4 changed files with 11 additions and 11 deletions

View File

@@ -42,8 +42,8 @@ export const AttendanceLeaveSchema = z.object({
const ProjectLogSchema = z.object({ const ProjectLogSchema = z.object({
project_id: z.union([z.number(), z.string()]).transform(v => Number(v)), project_id: z.union([z.number(), z.string()]).transform(v => Number(v)),
hours: z.number().optional().default(0), hours: z.union([z.number(), z.string()]).transform(v => Number(v) || 0).optional().default(0),
minutes: z.number().optional().default(0), minutes: z.union([z.number(), z.string()]).transform(v => Number(v) || 0).optional().default(0),
}); });
export const AttendancePunchSchema = z.object({ export const AttendancePunchSchema = z.object({

View File

@@ -3,18 +3,18 @@ import { z } from 'zod';
const QuotationItemSchema = z.object({ const QuotationItemSchema = z.object({
description: z.string().nullish(), description: z.string().nullish(),
item_description: z.string().nullish(), item_description: z.string().nullish(),
quantity: z.number().optional().default(1), quantity: z.union([z.number(), z.string()]).transform(v => Number(v) || 1).optional().default(1),
unit: z.string().nullish(), unit: z.string().nullish(),
unit_price: z.number().optional().default(0), unit_price: z.union([z.number(), z.string()]).transform(v => Number(v) || 0).optional().default(0),
is_included_in_total: z.any().optional().default(true), is_included_in_total: z.any().optional().default(true),
position: z.number().optional(), position: z.union([z.number(), z.string()]).transform(v => Number(v)).optional(),
}); });
const ScopeSectionSchema = z.object({ const ScopeSectionSchema = z.object({
title: z.string().nullish(), title: z.string().nullish(),
title_cz: z.string().nullish(), title_cz: z.string().nullish(),
content: z.string().nullish(), content: z.string().nullish(),
position: z.number().optional(), position: z.union([z.number(), z.string()]).transform(v => Number(v)).optional(),
}); });
export const CreateQuotationSchema = z.object({ export const CreateQuotationSchema = z.object({

View File

@@ -3,18 +3,18 @@ import { z } from 'zod';
const OrderItemSchema = z.object({ const OrderItemSchema = z.object({
description: z.string().nullish(), description: z.string().nullish(),
item_description: z.string().nullish(), item_description: z.string().nullish(),
quantity: z.number().optional().default(1), quantity: z.union([z.number(), z.string()]).transform(v => Number(v) || 1).optional().default(1),
unit: z.string().nullish(), unit: z.string().nullish(),
unit_price: z.number().optional().default(0), unit_price: z.union([z.number(), z.string()]).transform(v => Number(v) || 0).optional().default(0),
is_included_in_total: z.any().optional().default(true), is_included_in_total: z.any().optional().default(true),
position: z.number().optional(), position: z.union([z.number(), z.string()]).transform(v => Number(v)).optional(),
}); });
const OrderSectionSchema = z.object({ const OrderSectionSchema = z.object({
title: z.string().nullish(), title: z.string().nullish(),
title_cz: z.string().nullish(), title_cz: z.string().nullish(),
content: z.string().nullish(), content: z.string().nullish(),
position: z.number().optional(), position: z.union([z.number(), z.string()]).transform(v => Number(v)).optional(),
}); });
export const CreateOrderFromQuotationSchema = z.object({ export const CreateOrderFromQuotationSchema = z.object({

View File

@@ -4,7 +4,7 @@ const ScopeSectionSchema = z.object({
title: z.string().nullish(), title: z.string().nullish(),
title_cz: z.string().nullish(), title_cz: z.string().nullish(),
content: z.string().nullish(), content: z.string().nullish(),
position: z.number().optional(), position: z.union([z.number(), z.string()]).transform(v => Number(v)).optional(),
}); });
export const CreateScopeTemplateSchema = z.object({ export const CreateScopeTemplateSchema = z.object({