Uecko_ERP/modules/customers/src/web/create/utils/build-customer-create-params.ts

63 lines
2.0 KiB
TypeScript

import { UniqueID } from "@repo/rdx-ddd";
import type { CreateCustomerParams } from "../../shared";
import type { CustomerCreateForm } from "../entities";
/**
* Construye un payload de creación de cliente a partir de los datos
* del formulario y los campos sucios.
*
* Reglas:
* - el payload debe ser un objeto con solo las propiedades que han cambiado (campos sucios).
* - no debe incluir campos que no han cambiado.
* - el shape del payload debe coincidir con el de CustomerCreatePayload,
* es decir, orientado a la API.
* - no debe tener transformaciones ni campos adicionales, solo los que vienen del
* formulario y están sucios.
*
* @param formData - Los datos del formulario de creación de cliente.
* @returns Un objeto que se puede enviar a la API para crear un cliente,
*
*/
export const buildCreateCustomerParams = (formData: CustomerCreateForm): CreateCustomerParams => {
// La API de creación de cliente requiere un ID único para el nuevo cliente
const id = UniqueID.generateNewID().toString();
return {
id,
data: {
id,
reference: formData.reference,
is_company: formData.isCompany ? "1" : "0",
name: formData.name,
trade_name: formData.tradeName,
tin: formData.tin,
default_taxes: formData.defaultTaxes.join(";"),
street: formData.street,
street2: formData.street2,
city: formData.city,
province: formData.province,
postal_code: formData.postalCode,
country: formData.country,
email_primary: formData.primaryEmail,
email_secondary: formData.secondaryEmail,
phone_primary: formData.primaryPhone,
phone_secondary: formData.secondaryPhone,
mobile_primary: formData.primaryMobile,
mobile_secondary: formData.secondaryMobile,
fax: formData.fax,
website: formData.website,
legal_record: formData.legalRecord,
language_code: formData.languageCode,
currency_code: formData.currencyCode,
},
};
};