63 lines
2.0 KiB
TypeScript
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,
|
|
},
|
|
};
|
|
};
|