Files
app/src/schemas/settings.schema.ts
2026-06-09 19:31:36 +02:00

57 lines
2.3 KiB
TypeScript

import { z } from "zod";
import {
nonNegativeNumberFromForm,
numberInRange,
emailOrEmpty,
} from "./common";
export const UpdateCompanySettingsSchema = z.object({
company_name: z.string().nullish(),
street: z.string().nullish(),
city: z.string().nullish(),
postal_code: z.string().nullish(),
country: z.string().nullish(),
company_id: z.string().nullish(),
vat_id: z.string().nullish(),
quotation_prefix: z.string().nullish(),
default_currency: z.string().nullish(),
order_type_code: z.string().nullish(),
invoice_type_code: z.string().nullish(),
default_vat_rate: numberInRange(0, 100).optional(),
require_2fa: z
.preprocess((v) => v === true || v === 1 || v === "1", z.boolean())
.optional(),
break_threshold_hours: nonNegativeNumberFromForm.optional(),
break_duration_short: nonNegativeNumberFromForm.optional(),
break_duration_long: nonNegativeNumberFromForm.optional(),
clock_rounding_minutes: numberInRange(0, 1440).optional(),
invoice_alert_email: emailOrEmpty.nullish(),
leave_notify_email: emailOrEmpty.nullish(),
smtp_from: emailOrEmpty.nullish(),
smtp_from_name: z.string().nullish(),
offer_number_pattern: z.string().nullish(),
order_number_pattern: z.string().nullish(),
invoice_number_pattern: z.string().nullish(),
issued_order_number_pattern: z.string().nullish(),
issued_order_type_code: z.string().nullish(),
project_number_pattern: z.string().nullish(),
project_type_code: z.string().nullish(),
warehouse_receipt_prefix: z.string().nullish(),
warehouse_receipt_number_pattern: z.string().nullish(),
warehouse_issue_prefix: z.string().nullish(),
warehouse_issue_number_pattern: z.string().nullish(),
warehouse_inventory_prefix: z.string().nullish(),
warehouse_inventory_number_pattern: z.string().nullish(),
max_login_attempts: numberInRange(1, 100).optional(),
lockout_minutes: numberInRange(1, 1440).optional(),
max_requests_per_minute: numberInRange(1, 100000).optional(),
available_vat_rates: z.array(numberInRange(0, 100)).max(50).optional(),
available_currencies: z.array(z.string()).optional(),
custom_fields: z.array(z.unknown()).max(200).optional(),
supplier_field_order: z.array(z.unknown()).max(200).optional(),
});
export type UpdateCompanySettingsInput = z.infer<
typeof UpdateCompanySettingsSchema
>;