61 lines
1.7 KiB
TypeScript
61 lines
1.7 KiB
TypeScript
import {
|
|
CountryCodeSchema,
|
|
CurrencyCodeSchema,
|
|
LandPhoneSchema,
|
|
LanguageCodeSchema,
|
|
MobilePhoneSchema,
|
|
PostalCodeSchema,
|
|
TinSchema,
|
|
URLSchema,
|
|
} from "@erp/core";
|
|
import { z } from "zod/v4";
|
|
|
|
/**
|
|
* Este esquema es para validar los datos del formulario de actualización de cliente.
|
|
* No tiene por qué coincidir con el shape de la entidad ni con el de la API.
|
|
* Solo define los campos que se muestran en el formulario y sus validaciones.
|
|
*
|
|
* Reglas:
|
|
* - no meter transformaciones silenciosas raras en el esquema (ej: .toUpperCase())
|
|
* - nombres en camelCase
|
|
* - acepta "" en campos opcionales
|
|
* - tipos orientados a UI/form
|
|
* - sin campos de solo lectura que no se editen
|
|
* - sin shape DTO
|
|
* - sin detalles impuestos por el widget
|
|
*/
|
|
|
|
export const CustomerUpdateFormSchema = z.object({
|
|
reference: z.string(),
|
|
isCompany: z.boolean(),
|
|
|
|
name: z.string().min(1, "El nombre es obligatorio"),
|
|
tradeName: z.string(),
|
|
tin: TinSchema,
|
|
|
|
defaultTaxes: z.array(z.string()),
|
|
|
|
street: z.string(),
|
|
street2: z.string(),
|
|
city: z.string(),
|
|
province: z.string(),
|
|
postalCode: PostalCodeSchema.or(z.literal("")),
|
|
country: CountryCodeSchema.or(z.literal("")),
|
|
|
|
primaryEmail: z.email("Email inválido").or(z.literal("")),
|
|
secondaryEmail: z.email("Email inválido").or(z.literal("")),
|
|
|
|
primaryPhone: LandPhoneSchema.or(z.literal("")),
|
|
secondaryPhone: LandPhoneSchema.or(z.literal("")),
|
|
primaryMobile: MobilePhoneSchema.or(z.literal("")),
|
|
secondaryMobile: MobilePhoneSchema.or(z.literal("")),
|
|
|
|
fax: LandPhoneSchema.or(z.literal("")).or(z.literal("")),
|
|
website: URLSchema.or(z.literal("")).or(z.literal("")),
|
|
|
|
legalRecord: z.string().or(z.literal("")),
|
|
|
|
languageCode: LanguageCodeSchema,
|
|
currencyCode: CurrencyCodeSchema,
|
|
});
|