import { z } from "zod"; import { numberFromForm, nonNegativeNumberFromForm, positiveNumberFromForm, intIdFromForm, nullableIntIdFromForm, booleanFromForm, } from "./common"; const OrderItemSchema = z.object({ description: z.string().max(500).nullish(), item_description: z.string().max(8000).nullish(), quantity: positiveNumberFromForm.default(1), unit: z.string().max(20).nullish(), unit_price: numberFromForm.default(0), is_included_in_total: booleanFromForm.optional().default(true), position: nonNegativeNumberFromForm.optional(), }); const OrderSectionSchema = z.object({ title: z.string().max(255).nullish(), title_cz: z.string().max(255).nullish(), content: z.string().max(8000).nullish(), position: nonNegativeNumberFromForm.optional(), }); export const CreateOrderFromQuotationSchema = z.object({ quotationId: intIdFromForm, customerOrderNumber: z.string().max(100).optional().default(""), }); export const CreateOrderSchema = z.object({ order_number: z.string().max(50).nullish(), customer_order_number: z.string().max(100).nullish(), quotation_id: nullableIntIdFromForm.nullish(), customer_id: nullableIntIdFromForm.nullish(), status: z .enum(["prijata", "v_realizaci", "dokoncena", "stornovana"]) .optional() .default("prijata"), currency: z.string().max(10).optional().default("CZK"), language: z.string().max(5).optional().default("cs"), exchange_rate: positiveNumberFromForm.optional().default(1.0), scope_title: z.string().max(255).nullish(), scope_description: z.string().max(8000).nullish(), notes: z.string().max(8000).nullish(), items: z.array(OrderItemSchema).optional(), sections: z.array(OrderSectionSchema).optional(), create_project: booleanFromForm.optional().default(true), }); export const UpdateOrderSchema = z.object({ customer_order_number: z.string().max(100).nullish(), status: z .enum(["prijata", "v_realizaci", "dokoncena", "stornovana"]) .optional(), currency: z.string().max(10).optional(), language: z.string().max(5).optional(), scope_title: z.string().max(255).nullish(), scope_description: z.string().max(8000).nullish(), notes: z.string().max(8000).nullish(), customer_id: nullableIntIdFromForm.optional(), items: z.array(OrderItemSchema).optional(), sections: z.array(OrderSectionSchema).optional(), }); export type CreateOrderFromQuotationInput = z.infer< typeof CreateOrderFromQuotationSchema >; export type CreateOrderInput = z.infer; export type UpdateOrderInput = z.infer;