false, 'message' => 'No autorizado']); exit; } $usuario_id = (int)$_SESSION['usuario_id']; $pedimento_id = isset($_GET['pedimento_id']) ? (int)$_GET['pedimento_id'] : 0; if ($pedimento_id <= 0) { http_response_code(400); echo json_encode(['success' => false, 'message' => 'ID inválido']); exit; } $conn = getConnection(); // Verificar propiedad del pedimento $chk = sqlsrv_query($conn, "SELECT 1 FROM pedimentos WHERE id = ? AND usuario_id = ?", [$pedimento_id, $usuario_id]); $own = $chk && sqlsrv_fetch_array($chk) ? true : false; if ($chk) sqlsrv_free_stmt($chk); if (!$own) { http_response_code(404); echo json_encode(['success' => false, 'message' => 'Pedimento no encontrado']); exit; } $sql = "SELECT f.id AS factura_id, CASE WHEN cr.id IS NULL THEN 0 ELSE 1 END AS respondido, cr.estado AS estado, cr.fecha_actualizacion AS fecha FROM pedimento_facturas f LEFT JOIN cove_respuestas cr ON cr.factura_id = f.id AND cr.usuario_id = ? WHERE f.pedimento_id = ? ORDER BY f.id"; $stmt = sqlsrv_query($conn, $sql, [$usuario_id, $pedimento_id]); if ($stmt === false) { http_response_code(500); echo json_encode(['success' => false, 'message' => 'Error de base de datos']); exit; } $data = []; while ($r = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { if (isset($r['fecha']) && $r['fecha'] instanceof DateTime) { $r['fecha'] = $r['fecha']->format('Y-m-d H:i:s'); } $data[] = $r; } sqlsrv_free_stmt($stmt); echo json_encode(['success' => true, 'data' => $data]); exit; } /** * POST /IMPORTADORES/cove/ajax_guardar_respuestas * Guarda/actualiza respuestas de COVE para una factura concreta. * Body: pedimento_id, factura_id, respuestas (JSON string), estado (opcional) */ function ajax_guardar_respuestas() { if (!($_SESSION['usuario_id'] ?? false)) { http_response_code(403); echo json_encode(['success' => false, 'message' => 'No autorizado']); exit; } $usuario_id = (int)$_SESSION['usuario_id']; $pedimento_id = isset($_POST['pedimento_id']) ? (int)$_POST['pedimento_id'] : 0; $factura_id = isset($_POST['factura_id']) ? (int)$_POST['factura_id'] : 0; $respuestas = $_POST['respuestas'] ?? '{}'; $estado = $_POST['estado'] ?? 'respondido'; if ($pedimento_id <= 0 || $factura_id <= 0) { http_response_code(400); echo json_encode(['success' => false, 'message' => 'Parámetros inválidos']); exit; } $conn = getConnection(); // Verificar propiedad del pedimento $chk = sqlsrv_query($conn, "SELECT 1 FROM pedimentos WHERE id = ? AND usuario_id = ?", [$pedimento_id, $usuario_id]); $own = $chk && sqlsrv_fetch_array($chk) ? true : false; if ($chk) sqlsrv_free_stmt($chk); if (!$own) { http_response_code(404); echo json_encode(['success' => false, 'message' => 'Pedimento no encontrado']); exit; } // Upsert manual: si existe update, si no insert $sel = sqlsrv_query($conn, "SELECT id FROM cove_respuestas WHERE factura_id = ? AND usuario_id = ?", [$factura_id, $usuario_id]); $row = $sel ? sqlsrv_fetch_array($sel, SQLSRV_FETCH_ASSOC) : null; if ($sel) sqlsrv_free_stmt($sel); if ($row) { $sql = "UPDATE cove_respuestas SET respuestas = ?, estado = ?, fecha_actualizacion = SYSDATETIME() WHERE id = ?"; $stmt = sqlsrv_query($conn, $sql, [$respuestas, $estado, $row['id']]); } else { $sql = "INSERT INTO cove_respuestas (pedimento_id, factura_id, usuario_id, respuestas, estado, fecha_creacion) VALUES (?, ?, ?, ?, ?, SYSDATETIME())"; $stmt = sqlsrv_query($conn, $sql, [$pedimento_id, $factura_id, $usuario_id, $respuestas, $estado]); } if ($stmt === false) { http_response_code(500); echo json_encode(['success' => false, 'message' => 'No se pudieron guardar las respuestas']); exit; } echo json_encode(['success' => true]); exit; } // Estado agregado por pedimento: total de facturas vs respondidas/solicitadas function ajax_estado_pedimentos() { if (!($_SESSION['usuario_id'] ?? false)) { http_response_code(403); echo json_encode(['success' => false, 'message' => 'No autorizado']); exit; } $usuario_id = (int)$_SESSION['usuario_id']; $conn = getConnection(); $sql = " SELECT p.id AS pedimento_id, COUNT(f.id) AS total_facturas, SUM(CASE WHEN cr.estado IN ('respondido','solicitado') THEN 1 ELSE 0 END) AS respondidas FROM pedimentos p LEFT JOIN pedimento_facturas f ON f.pedimento_id = p.id LEFT JOIN cove_respuestas cr ON cr.factura_id = f.id AND cr.usuario_id = p.usuario_id WHERE p.usuario_id = ? GROUP BY p.id "; $stmt = sqlsrv_query($conn, $sql, [$usuario_id]); if ($stmt === false) { http_response_code(500); echo json_encode(['success' => false, 'message' => 'Error de base de datos']); exit; } $data = []; while ($r = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { $total = (int)($r['total_facturas'] ?? 0); $resp = (int)($r['respondidas'] ?? 0); $completo = ($total > 0 && $resp >= $total) ? 1 : 0; $data[] = [ 'pedimento_id' => (int)$r['pedimento_id'], 'total_facturas' => $total, 'respondidas' => $resp, 'completo' => $completo ]; } sqlsrv_free_stmt($stmt); echo json_encode(['success' => true, 'data' => $data]); exit; }