diff --git a/src/api/procesos.ts b/src/api/procesos.ts index 1170831..9ba64d7 100644 --- a/src/api/procesos.ts +++ b/src/api/procesos.ts @@ -1,4 +1,4 @@ -import { fetchWithAuth } from '../fetchWithAuth'; +import { fetchWithAuth, postWithAuth } from '../fetchWithAuth'; // Tipos para la respuesta y registros export interface Task { @@ -51,3 +51,61 @@ export async function fetchTasks( throw error; } } + +// Interfaz para la respuesta del comando +export interface ComandoResponse { + message?: string; + error?: string; +} + +// Interfaz para los parámetros de ejecución +export interface EjecutarComandoParams { + procesamiento?: string; + todos?: boolean; +} + +// API para ejecutar comando de procesamiento +export async function ejecutarComando( + params: EjecutarComandoParams +): Promise { + try { + const API_URL = (import.meta as any).env.VITE_EFC_API_URL; + + console.log('API_URL:', API_URL); + // Preparar los datos para la petición POST + const requestData: any = {}; + + if (params.procesamiento !== undefined) { + requestData.procesamiento = params.procesamiento; + } + + if (params.todos !== undefined) { + requestData.todos = params.todos; + } + + // const res = await fetchWithAuth(`${API_URL}/customs/procesamientopedimentos-ejecutar-comando/`, { + // method: 'POST', + // headers: { + // 'Content-Type': 'application/json', + // }, + // body: JSON.stringify(requestData), + // }); + + const res = await postWithAuth(`${API_URL}/customs/procesamientopedimentos-ejecutar-comando/`, requestData); + + if (!res.ok) { + // Intentar obtener el mensaje de error del servidor + try { + const errorData = await res.json(); + throw new Error(errorData.message || errorData.error || `Error ${res.status}: ${res.statusText}`); + } catch { + throw new Error(`Error ${res.status}: ${res.statusText}`); + } + } + + return await res.json(); + } catch (error) { + // console.error('Error in ejecutarComando:', error); + throw error; + } +} diff --git a/src/pages/Procesos.jsx b/src/pages/Procesos.jsx index 1a7cbb1..8d45914 100644 --- a/src/pages/Procesos.jsx +++ b/src/pages/Procesos.jsx @@ -1,8 +1,9 @@ import React, { useEffect, useState, useRef } from 'react'; import { Link } from 'react-router-dom'; -import { fetchTasks } from '../api/procesos.ts'; +import { fetchTasks, ejecutarComando } from '../api/procesos.ts'; import { fetchWithAuth } from '../fetchWithAuth'; +import { useNotification } from '../context/NotificationContext'; // Modal para mostrar detalles del task const TaskDetailsModal = ({ task, onClose }) => { @@ -42,9 +43,9 @@ const TaskDetailsModal = ({ task, onClose }) => { }; return ( -
+
-
+

Detalles de la Tarea

+ + {/* Dropdown de opciones de procesamiento */} + {showProcesosDropdown && ( +
+
+ {/* Encabezado del dropdown */} +
+

Selecciona un proceso

+

Se ejecutará para tu organización

+
+ + {/* Opción "Todos" */} + + +
+ + {/* Opciones específicas */} + {[ + { id: 'procesamiento_pedimento', label: 'Procesamiento Inicial', desc: 'Procemiento Inicial de consulta a VU' }, + { id: 'pedimentos_completos', label: 'Pedimento Completo', desc: 'Procesar pedimentos completos' }, + { id: 'remesas', label: 'Remesas', desc: 'Procesar remesas' }, + { id: 'partidas', label: 'Partidas', desc: 'Procesar partidas' }, + { id: 'coves', label: 'Coves', desc: 'Procesar coves' }, + { id: 'edocs', label: 'Edocuments', desc: 'Procesar edocuments' }, + { id: 'acuse_coves', label: 'Acuses COVE', desc: 'Procesar acuses COVE' }, + { id: 'acuses', label: 'Acuses', desc: 'Procesar acuses' } + ].map((proceso) => ( + + ))} +
+
+ )} +
+
{/* Estados de carga y error mejorados */} {loading ? (
-
-
+
+
-

Cargando procesos...

+

Cargando procesos...

) : error ? ( -
-
+
+
-

Error al cargar

+

Error al cargar

{error}

) : ( <> {/* Vista de tabla para pantallas grandes */} -
- - + - - - - - - + {procesos.length === 0 ? ( - @@ -701,17 +843,17 @@ export default function Procesos() { - - - -
{ setSortField('task_id'); setSortOrder(sortField === 'task_id' && sortOrder === 'asc' ? 'desc' : 'asc'); @@ -638,7 +780,7 @@ export default function Procesos() { Task ID {sortField === 'task_id' && (sortOrder === 'asc' ? '▲' : '▼')} { setSortField('pedimento_app'); setSortOrder(sortField === 'pedimento_app' && sortOrder === 'asc' ? 'desc' : 'asc'); @@ -648,7 +790,7 @@ export default function Procesos() { Pedimento {sortField === 'pedimento_app' && (sortOrder === 'asc' ? '▲' : '▼')} { setSortField('status'); setSortOrder(sortField === 'status' && sortOrder === 'asc' ? 'desc' : 'asc'); @@ -658,7 +800,7 @@ export default function Procesos() { Estado {sortField === 'status' && (sortOrder === 'asc' ? '▲' : '▼')} { setSortField('timestamp'); setSortOrder(sortField === 'timestamp' && sortOrder === 'asc' ? 'desc' : 'asc'); @@ -668,7 +810,7 @@ export default function Procesos() { Fecha de creación {sortField === 'timestamp' && (sortOrder === 'asc' ? '▲' : '▼')} { setSortField('servicio'); setSortOrder(sortField === 'servicio' && sortOrder === 'asc' ? 'desc' : 'asc'); @@ -680,18 +822,18 @@ export default function Procesos() {
+
-
+
-

No hay procesos disponibles

-

Intenta ajustar los filtros de búsqueda

+

No hay procesos disponibles

+

Intenta ajustar los filtros de búsqueda

+ {proc.pedimento_app || '-'} + {(() => { const estado = proc.status?.toLowerCase() === 'pending' ? { text: 'En Espera', color: 'bg-yellow-100 text-yellow-800 border-yellow-200' } : proc.status?.toLowerCase() === 'running' ? { text: 'Procesando', color: 'bg-blue-100 text-blue-800 border-blue-200' } @@ -725,7 +867,7 @@ export default function Procesos() { ); })()} + {new Date(proc.timestamp).toLocaleString('es-MX', { day: '2-digit', month: '2-digit', @@ -735,7 +877,7 @@ export default function Procesos() { hour12: true })} + {(() => { const services = { '1': 'Estado de pedimento', @@ -763,29 +905,29 @@ export default function Procesos() { {/* Vista de tarjetas para pantallas pequeñas y medianas */} -
+
{procesos.length === 0 ? ( -
-
+
+
-

No hay procesos disponibles

-

Intenta ajustar los filtros de búsqueda

+

No hay procesos disponibles

+

Intenta ajustar los filtros de búsqueda

) : ( procesos.map((proc) => ( -
+
-
+
-
+

Proceso #{proc.task_id}

{proc.organizacion_name || 'Sin organización'}

@@ -804,10 +946,10 @@ export default function Procesos() { })()}
-
+
Pedimento: - + {proc.pedimento_app || '-'}
@@ -854,7 +996,7 @@ export default function Procesos() { {/* Paginación compartida mejorada */} {count > 0 && ( -
+
{(() => { const totalPages = Math.max(1, Math.ceil(count / itemsPerPage)); const maxPagesToShow = 5; @@ -871,12 +1013,12 @@ export default function Procesos() { return ( <>
- +