Merge pull request 'feature/production' (#40) from feature/production into development

Reviewed-on: ADUANASOFT/anexo76#40
This commit is contained in:
2026-01-02 19:52:11 +00:00
25 changed files with 114 additions and 455 deletions

View File

@@ -113,7 +113,7 @@ export const clientsProvidersApi = {
}
return api.get<ClientProviderListResponse>(
`/v1/a76/clients-providers?${params.toString()}`
`/v1/a76/clients-providers/?${params.toString()}`
);
},
@@ -141,7 +141,7 @@ export const clientsProvidersApi = {
* @param data - Datos del cliente/proveedor a crear
*/
create: (companyId: number, data: CreateClientProviderData) =>
api.post<ClientProvider>(`/v1/a76/clients-providers?company_id=${companyId}`, data),
api.post<ClientProvider>(`/v1/a76/clients-providers/?company_id=${companyId}`, data),
/**
* Actualiza un cliente/proveedor existente
@@ -159,7 +159,7 @@ export const clientsProvidersApi = {
*/
toggleStatus: (id: number, companyId: number) =>
api.put<ClientProvider>(
`/v1/a76/clients-providers/${id}/toggle-status?company_id=${companyId}`,
`/v1/a76/clients-providers/${id}/toggle-status/?company_id=${companyId}`,
{}
),

View File

@@ -89,7 +89,7 @@ export const customsBrokersApi = {
* Lista todos los agentes aduanales
*/
list: (companyId: string) => {
return api.get<CustomsBroker[]>(`/v1/a76/customs-brokers?company_id=${companyId}`);
return api.get<CustomsBroker[]>(`/v1/a76/customs-brokers/?company_id=${companyId}`);
},
/**
@@ -104,7 +104,7 @@ export const customsBrokersApi = {
*/
create: (data: CreateCustomsBrokerData) => {
const companyId = data.company_id;
return api.post<CustomsBroker>(`/v1/a76/customs-brokers?company_id=${companyId}`, data);
return api.post<CustomsBroker>(`/v1/a76/customs-brokers/?company_id=${companyId}`, data);
},
/**

View File

@@ -25,30 +25,23 @@ export interface ExchangeRateListResponse {
* Get exchange rate by date
*/
export async function getExchangeRateByDate(date: string, companyId: number): Promise<ExchangeRate | null> {
try {
console.log('📡 [API] Solicitando tipos de cambio para company_id:', companyId);
try {
// Get all exchange rates and filter by date on client side
const response = await api.get<ExchangeRateListResponse>(`/v1/a76/exchange-rate/?company_id=${companyId}`);
console.log('📡 [API] Respuesta recibida:', response.data?.total, 'tipos de cambio');
const response = await api.get<ExchangeRateListResponse>(`/v1/a76/exchange-rate/?company_id=${companyId}`);
if (response.data && response.data.items && response.data.items.length > 0) {
// Filter by date and find USD exchange rate
const dateOnly = date.split('T')[0]; // Get YYYY-MM-DD part
console.log('🔍 [API] Buscando fecha:', dateOnly, 'en', response.data.items.length, 'registros');
const dateOnly = date.split('T')[0]; // Get YYYY-MM-DD part
const matchingRates = response.data.items.filter(rate => {
const rateDate = rate.date.split('T')[0];
const matches = rateDate === dateOnly && rate.foreign_currency === 'USD';
console.log(' - Comparando:', rateDate, '===', dateOnly, '&& USD ===', rate.foreign_currency, '→', matches);
const matches = rateDate === dateOnly && rate.foreign_currency === 'USD';
return matches;
});
console.log('✅ [API] Encontrados', matchingRates.length, 'tipos de cambio que coinciden');
return matchingRates.length > 0 ? matchingRates[0] : null;
}
console.log('⚠️ [API] No hay datos en la respuesta');
return null;
} catch (error) {
console.error('❌ [API] Error fetching exchange rate:', error);

View File

@@ -76,7 +76,7 @@ export const itemsApi = {
const params = new URLSearchParams({
company_id: companyId.toString()
});
return api.get<ItemListResponse>(`/v1/a76/items/invoice/${invoiceId}/items?${params.toString()}`);
return api.get<ItemListResponse>(`/v1/a76/items/invoice/${invoiceId}/items/?${params.toString()}`);
},
/**
@@ -86,7 +86,7 @@ export const itemsApi = {
const params = new URLSearchParams({
company_id: companyId.toString()
});
return api.get<Item>(`/v1/a76/items/${itemId}?${params.toString()}`);
return api.get<Item>(`/v1/a76/items/${itemId}/?${params.toString()}`);
},
/**
@@ -106,7 +106,7 @@ export const itemsApi = {
const params = new URLSearchParams({
company_id: companyId.toString()
});
return api.put<Item>(`/v1/a76/items/${itemId}?${params.toString()}`, data);
return api.put<Item>(`/v1/a76/items/${itemId}/?${params.toString()}`, data);
},
/**
@@ -116,6 +116,6 @@ export const itemsApi = {
const params = new URLSearchParams({
company_id: companyId.toString()
});
return api.delete(`/v1/a76/items/${itemId}?${params.toString()}`);
return api.delete(`/v1/a76/items/${itemId}/?${params.toString()}`);
}
};

View File

@@ -276,7 +276,7 @@ export const pedimentosApi = {
* @param companyId - ID de la compañía (por defecto 1)
*/
list: (page = 1, pageSize = 50, filters?: PedimentoFilters, companyId = 1) => {
let url = `/v1/a76/pedimentos?company_id=${companyId}&page=${page}&page_size=${pageSize}`;
let url = `/v1/a76/pedimentos/?company_id=${companyId}&page=${page}&page_size=${pageSize}`;
if (filters?.status) {
url += `&status=${encodeURIComponent(filters.status)}`;
@@ -296,7 +296,7 @@ export const pedimentosApi = {
* @param id - ID del pedimento
* @param companyId - ID de la compañía (por defecto 1)
*/
get: (id: number, companyId = 1) => api.get<Pedimento>(`/v1/a76/pedimentos/${id}?company_id=${companyId}`),
get: (id: number, companyId = 1) => api.get<Pedimento>(`/v1/a76/pedimentos/${id}/?company_id=${companyId}`),
/**
* Crea un nuevo pedimento
@@ -304,7 +304,7 @@ export const pedimentosApi = {
* @param companyId - ID de la compañía (por defecto 1)
*/
create: (data: CreatePedimentoData, companyId = 1) =>
api.post<Pedimento>(`/v1/a76/pedimentos?company_id=${companyId}`, data),
api.post<Pedimento>(`/v1/a76/pedimentos/?company_id=${companyId}`, data),
/**
* Actualiza un pedimento existente
@@ -313,12 +313,12 @@ export const pedimentosApi = {
* @param companyId - ID de la compañía (por defecto 1)
*/
update: (id: number, data: UpdatePedimentoData, companyId = 1) =>
api.put<Pedimento>(`/v1/a76/pedimentos/${id}?company_id=${companyId}`, data),
api.put<Pedimento>(`/v1/a76/pedimentos/${id}/?company_id=${companyId}`, data),
/**
* Elimina un pedimento
* @param id - ID del pedimento a eliminar
* @param companyId - ID de la compañía (por defecto 1)
*/
delete: (id: number, companyId = 1) => api.delete(`/v1/a76/pedimentos/${id}?company_id=${companyId}`)
delete: (id: number, companyId = 1) => api.delete(`/v1/a76/pedimentos/${id}/?company_id=${companyId}`)
};