Compare commits
3 Commits
T2026-01-0
...
fix/proces
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b0ac0ce06b | ||
| 80701159fb | |||
| 2fd3ab5483 |
@@ -230,6 +230,125 @@ export default function Documents() {
|
|||||||
// }
|
// }
|
||||||
// // showMessage('Error durante la descarga masiva', 'error');
|
// // showMessage('Error durante la descarga masiva', 'error');
|
||||||
// };
|
// };
|
||||||
|
|
||||||
|
// accionar pedimento completo si no se proceso
|
||||||
|
const handleEjecutarServicio = async (pedimentoId, org) => {
|
||||||
|
try {
|
||||||
|
showMessage(`Procesando pedimento ${pedimentoId}...`, 'info');
|
||||||
|
|
||||||
|
// Construir el body de la petición
|
||||||
|
const body = {
|
||||||
|
organizacion: org, // Ajusta según tu organización, puede ser string o número
|
||||||
|
pedimento: pedimentoId.toString() // Convertir a string si es necesario
|
||||||
|
};
|
||||||
|
|
||||||
|
// Endpoint para pedimento completo
|
||||||
|
const MICROSERVICE_URL = import.meta.env.VITE_EFC_MICROSERVICE_URL;
|
||||||
|
const endpoint = `${MICROSERVICE_URL}/services/pedimento_completo`;
|
||||||
|
|
||||||
|
const response = await postWithAuth(endpoint, body);
|
||||||
|
|
||||||
|
if (!response.ok) {
|
||||||
|
const errorData = await response.json().catch(() => ({}));
|
||||||
|
throw new Error(errorData.message || errorData.detail || `Error ${response.status}: ${response.statusText}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = await response.json();
|
||||||
|
console.log('Resultado del servicio:', result);
|
||||||
|
|
||||||
|
showMessage(`Pedimento ${pedimentoId} procesado correctamente`, 'success');
|
||||||
|
|
||||||
|
// Opcional: Refrescar la lista después de procesar
|
||||||
|
setTimeout(() => {
|
||||||
|
refetch();
|
||||||
|
}, 2000);
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error ejecutando servicio:', error);
|
||||||
|
showMessage(`Error al procesar pedimento ${pedimentoId}: ${error.message}`, 'error');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Agrega esta función después de handleEjecutarServicio
|
||||||
|
const handleProcesarMultiplesPedimentos = async () => {
|
||||||
|
const pedimentosNoProcesados = currentDocuments.filter(ped => selectedDocuments.includes(ped.id) && !ped.existe_expediente);
|
||||||
|
|
||||||
|
if (pedimentosNoProcesados.length === 0) {
|
||||||
|
showMessage('No hay pedimentos seleccionados que estén sin procesar', 'warning');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pedimentosNoProcesados.length > 200) {
|
||||||
|
showMessage(`Máximo 200 pedimentos por solicitud. Seleccionados: ${pedimentosNoProcesados.length}`, 'warning');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
showMessage(`Iniciando procesamiento de ${pedimentosNoProcesados.length} pedimentos...`, 'info');
|
||||||
|
|
||||||
|
const pedimentosData = pedimentosNoProcesados.map(ped => ({
|
||||||
|
id: ped.id,
|
||||||
|
pedimento_app: ped.pedimento_app,
|
||||||
|
aduana: ped.aduana,
|
||||||
|
patente: ped.patente,
|
||||||
|
pedimento: ped.pedimento,
|
||||||
|
organizacion: ped.organizacion
|
||||||
|
}));
|
||||||
|
|
||||||
|
const MICROSERVICE_URL = import.meta.env.VITE_EFC_MICROSERVICE_URL;
|
||||||
|
const response = await postWithAuth(`${MICROSERVICE_URL}/async/services/pedimento_completo/multiple`, {
|
||||||
|
organizacion: pedimentosNoProcesados[0].organizacion.toString(),
|
||||||
|
pedimentos: pedimentosNoProcesados.map(p => p.id.toString())
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!response.ok) {
|
||||||
|
const errorData = await response.json().catch(() => ({}));
|
||||||
|
throw new Error(errorData.message || errorData.detail || `Error ${response.status}: ${response.statusText}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = await response.json();
|
||||||
|
|
||||||
|
showMessage(
|
||||||
|
`Tarea iniciada: ${result.total_pedimentos} pedimentos encolados. Task ID: ${result.task_id}`,
|
||||||
|
'success'
|
||||||
|
);
|
||||||
|
|
||||||
|
setSelectedDocuments([]);
|
||||||
|
setIsSelectAll(false);
|
||||||
|
|
||||||
|
// Opcional: Iniciar polling para monitorear el progreso
|
||||||
|
// const intervalId = setInterval(async () => {
|
||||||
|
// const statusResponse = await fetchWithAuth(`${MICROSERVICE_URL}/async/task-status/${result.task_id}`);
|
||||||
|
|
||||||
|
// if (statusResponse.ok) {
|
||||||
|
// const status = await statusResponse.json();
|
||||||
|
|
||||||
|
// if (status.status === 'SUCCESS') {
|
||||||
|
// clearInterval(intervalId);
|
||||||
|
// const { success_count, failed_count, elapsed_seconds } = status.result;
|
||||||
|
// showMessage(
|
||||||
|
// `Procesamiento completado: ${success_count} exitosos, ${failed_count} fallidos. Tiempo: ${elapsed_seconds}s`,
|
||||||
|
// failed_count > 0 ? 'warning' : 'success'
|
||||||
|
// );
|
||||||
|
// refetch(); // Refrescar la lista
|
||||||
|
// } else if (status.status === 'FAILURE') {
|
||||||
|
// clearInterval(intervalId);
|
||||||
|
// showMessage(`Error en el procesamiento: ${status.message}`, 'error');
|
||||||
|
// } else if (status.status === 'PROGRESS' && status.progress) {
|
||||||
|
// const { current, total, current_pedimento, percentage } = status.progress;
|
||||||
|
// console.log(`Progreso: ${percentage}% - ${current}/${total}: ${current_pedimento}`);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }, 5000);
|
||||||
|
|
||||||
|
setTimeout(() => clearInterval(intervalId), 600000);
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error procesando múltiples pedimentos:', error);
|
||||||
|
showMessage(`Error: ${error.message}`, 'error');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Función para descargar documentos seleccionados
|
// Función para descargar documentos seleccionados
|
||||||
const handleDownloadSelected = async () => {
|
const handleDownloadSelected = async () => {
|
||||||
if (selectedDocuments.length === 0) {
|
if (selectedDocuments.length === 0) {
|
||||||
@@ -945,6 +1064,21 @@ const downloadExpediente = async (pedimentoId, pedimentoName, setSuccess, showMe
|
|||||||
</div>
|
</div>
|
||||||
<div className="px-6 py-4">
|
<div className="px-6 py-4">
|
||||||
<div className="flex flex-wrap gap-3">
|
<div className="flex flex-wrap gap-3">
|
||||||
|
{/* NUEVO BOTÓN PARA PROCESAR MÚLTIPLES */}
|
||||||
|
<button
|
||||||
|
onClick={handleProcesarMultiplesPedimentos}
|
||||||
|
className="inline-flex items-center px-4 py-2 font-medium text-white transition-colors duration-200 bg-green-600 rounded-lg shadow-sm hover:bg-green-700 hover:shadow-md"
|
||||||
|
>
|
||||||
|
<svg className="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M13 10V3L4 14h7v7l9-11h-7z" />
|
||||||
|
</svg>
|
||||||
|
Procesar seleccionados ({selectedDocuments.filter(id => {
|
||||||
|
const ped = currentDocuments.find(p => p.id === id);
|
||||||
|
return ped && !ped.existe_expediente;
|
||||||
|
}).length} pendientes)
|
||||||
|
</button>
|
||||||
|
|
||||||
|
{/* Botón existente de eliminar */}
|
||||||
<button
|
<button
|
||||||
onClick={handleDeleteSelected}
|
onClick={handleDeleteSelected}
|
||||||
className="inline-flex items-center px-4 py-2 font-medium text-white transition-colors duration-200 bg-red-600 rounded-lg shadow-sm hover:bg-red-700 hover:shadow-md"
|
className="inline-flex items-center px-4 py-2 font-medium text-white transition-colors duration-200 bg-red-600 rounded-lg shadow-sm hover:bg-red-700 hover:shadow-md"
|
||||||
@@ -1145,6 +1279,21 @@ const downloadExpediente = async (pedimentoId, pedimentoName, setSuccess, showMe
|
|||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
<td className="px-4 py-3 text-center whitespace-nowrap">
|
<td className="px-4 py-3 text-center whitespace-nowrap">
|
||||||
|
{ped.existe_expediente ? (
|
||||||
|
<>
|
||||||
|
</>
|
||||||
|
) : (
|
||||||
|
<button
|
||||||
|
className="p-2 text-green-600 transition-colors duration-200 rounded-full hover:text-green-800 hover:bg-green-50 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2"
|
||||||
|
onClick={() => handleEjecutarServicio(ped.id, ped.organizacion)}
|
||||||
|
title="Procesar"
|
||||||
|
>
|
||||||
|
<svg className="w-4 h-4 text-green-600" fill="currentColor" viewBox="0 0 24 24">
|
||||||
|
<path d="M8 5v14l11-7z" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
)}
|
||||||
|
{/* handleEjecutarServicio */}
|
||||||
<button
|
<button
|
||||||
className="p-2 text-blue-600 transition-colors duration-200 rounded-full hover:text-blue-800 hover:bg-blue-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2"
|
className="p-2 text-blue-600 transition-colors duration-200 rounded-full hover:text-blue-800 hover:bg-blue-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2"
|
||||||
onClick={() => handleDownloadTodoElExpediente(ped.id, ped.pedimento_app)}
|
onClick={() => handleDownloadTodoElExpediente(ped.id, ped.pedimento_app)}
|
||||||
|
|||||||
Reference in New Issue
Block a user