Uecko_ERP/modules/customers/src/web/shared/adapters/get-customer-by-id.adapter.ts
2026-04-04 19:38:09 +02:00

65 lines
2.0 KiB
TypeScript

import type { CreateCustomerResponseDTO } from "@erp/customers/common";
import type { GetCustomerByIdResult, UpdateCustomerByIdResult } from "../api";
import type { Customer } from "../entities";
/**
* Adaptador para transformar los datos de la API de GetCustomerByIdResult, CustomerCreationResponseDTO o UpdateCustomerByIdResult
* a la entidad Customer utilizada en la aplicación.
* Reglas de adaptación:
* - id, company_id, reference se asignan directamente.
* - is_company se convierte a booleano (true si es "1", false si es "0").
* - default_taxes se divide por ";" y se filtran los valores vacíos o "#".
*
* @params dto - datos del cliente desde la API.
* @param context - Contexto adicional opcional para la adaptación.
* @returns {Customer} Objeto adaptado a Customer.
*/
export const GetCustomerByIdAdapter = {
fromDTO(
dto: GetCustomerByIdResult | CreateCustomerResponseDTO | UpdateCustomerByIdResult,
context?: unknown
): Customer {
const taxesAdapter = (taxes: string) =>
taxes.split(";").filter((item) => item !== "#" && item.trim() !== "");
const defaultTaxes = taxesAdapter(dto.default_taxes);
return {
id: dto.id,
companyId: dto.company_id,
reference: dto.reference,
isCompany: dto.is_company === "1",
name: dto.name,
tradeName: dto.trade_name,
tin: dto.tin,
street: dto.street,
street2: dto.street2,
city: dto.city,
province: dto.province,
postalCode: dto.postal_code,
country: dto.country,
primaryEmail: dto.email_primary,
secondaryEmail: dto.email_secondary,
primaryPhone: dto.phone_primary,
secondaryPhone: dto.phone_secondary,
primaryMobile: dto.mobile_primary,
secondaryMobile: dto.mobile_secondary,
fax: dto.fax,
website: dto.website,
legalRecord: dto.legal_record,
defaultTaxes: defaultTaxes,
status: dto.status,
languageCode: dto.language_code,
currencyCode: dto.currency_code,
};
},
};