feat(api): add Units of Measure API client with CRUD operations

- Implemented interfaces for UnitOfMeasure, UnitOfMeasureListResponse, CreateUnitOfMeasureData, and UpdateUnitOfMeasureData.
- Added API methods for listing, retrieving, creating, updating, and deleting units of measure.
- Included pagination support for the list method.
This commit is contained in:
Galindo97
2026-01-12 10:36:43 -06:00
parent c2d1961994
commit 0aea981cf1
12 changed files with 1693 additions and 147 deletions

View File

@@ -0,0 +1,101 @@
/**
* API Client para Units of Measure
* Gestiona las operaciones CRUD para unidades de medida
*/
import { api } from '$lib/api';
export interface UnitOfMeasure {
id: number;
code: string;
description: string | null;
description_en: string | null;
customs_code: string | null;
american_code: string | null;
ace_code: string | null;
oma_code: string | null;
}
export interface UnitOfMeasureListResponse {
items: UnitOfMeasure[];
total: number;
page: number;
page_size: number;
}
export interface CreateUnitOfMeasureData {
code: string;
description?: string | null;
description_en?: string | null;
customs_code?: string | null;
american_code?: string | null;
ace_code?: string | null;
oma_code?: string | null;
}
export interface UpdateUnitOfMeasureData {
code?: string;
description?: string | null;
description_en?: string | null;
customs_code?: string | null;
american_code?: string | null;
ace_code?: string | null;
oma_code?: string | null;
}
/**
* API para Units of Measure
*/
export const unitsOfMeasureApi = {
/**
* Lista todas las unidades de medida con paginación
* @param companyId - ID de la compañía
* @param page - Número de página (por defecto 1)
* @param pageSize - Tamaño de página (por defecto 50)
*/
list: (companyId: number, page = 1, pageSize = 50) => {
const params = new URLSearchParams({
company_id: companyId.toString(),
page: page.toString(),
page_size: pageSize.toString()
});
return api.get<UnitOfMeasureListResponse>(
`/v1/a76/units-of-measure?${params.toString()}`
);
},
/**
* Obtiene una unidad de medida por ID
* @param companyId - ID de la compañía
* @param id - ID de la unidad de medida
*/
get: (companyId: number, id: number) =>
api.get<UnitOfMeasure>(`/v1/a76/units-of-measure/${id}?company_id=${companyId}`),
/**
* Crea una nueva unidad de medida
* @param companyId - ID de la compañía
* @param data - Datos de la unidad de medida a crear
*/
create: (companyId: number, data: CreateUnitOfMeasureData) =>
api.post<UnitOfMeasure>(`/v1/a76/units-of-measure?company_id=${companyId}`, data),
/**
* Actualiza una unidad de medida existente
* @param companyId - ID de la compañía
* @param id - ID de la unidad de medida a actualizar
* @param data - Datos a actualizar
*/
update: (companyId: number, id: number, data: UpdateUnitOfMeasureData) =>
api.put<UnitOfMeasure>(
`/v1/a76/units-of-measure/${id}?company_id=${companyId}`,
data
),
/**
* Elimina una unidad de medida
* @param companyId - ID de la compañía
* @param id - ID de la unidad de medida a eliminar
*/
delete: (companyId: number, id: number) =>
api.delete(`/v1/a76/units-of-measure/${id}?company_id=${companyId}`)
};

View File

@@ -48,7 +48,7 @@ export const materialTypesApi = {
params.append('type', type);
}
return api.get<MaterialTypeListResponse>(
`/v1/public/refrence_data/material-types?${params.toString()}`
`/v1/public/refrence_data/material-types/?${params.toString()}`
);
},
@@ -56,14 +56,14 @@ export const materialTypesApi = {
* Obtiene un tipo de material por key
* @param key - Clave del tipo de material
*/
get: (key: string) => api.get<MaterialType>(`/v1/public/refrence_data/material-types/${key}`),
get: (key: string) => api.get<MaterialType>(`/v1/public/refrence_data/material-types/${key}/`),
/**
* Crea un nuevo tipo de material
* @param data - Datos del tipo de material a crear
*/
create: (data: CreateMaterialTypeData) =>
api.post<MaterialType>('/v1/public/refrence_data/material-types', data),
api.post<MaterialType>('/v1/public/refrence_data/material-types/', data),
/**
* Actualiza un tipo de material existente
@@ -71,11 +71,11 @@ export const materialTypesApi = {
* @param data - Datos a actualizar
*/
update: (key: string, data: UpdateMaterialTypeData) =>
api.put<MaterialType>(`/v1/public/refrence_data/material-types/${key}`, data),
api.put<MaterialType>(`/v1/public/refrence_data/material-types/${key}/`, data),
/**
* Elimina un tipo de material
* @param key - Clave del tipo de material a eliminar
*/
delete: (key: string) => api.delete(`/v1/public/refrence_data/material-types/${key}`)
delete: (key: string) => api.delete(`/v1/public/refrence_data/material-types/${key}/`)
};