intval($_GET['draw'] ?? 0), "recordsTotal" => 0, "recordsFiltered" => 0, "data" => [], "error" => "Error al consultar información del importador" ]); exit; } $importador = sqlsrv_fetch_array($stmtImportador, SQLSRV_FETCH_ASSOC); if (!$importador) { echo json_encode([ "draw" => intval($_GET['draw'] ?? 0), "recordsTotal" => 0, "recordsFiltered" => 0, "data" => [] ]); exit; } // Parámetros de DataTables $draw = intval($_GET['draw'] ?? 0); $start = intval($_GET['start'] ?? 0); $length = intval($_GET['length'] ?? 10); $search = $_GET['search']['value'] ?? ''; // Total registros sin filtro $sqlTotal = "SELECT COUNT(*) AS total FROM PREVIOS_COMPARTIDOS_WS WHERE ClienteRFC = ?"; $stmt = sqlsrv_query($conn, $sqlTotal, [$importador['rfc']]); if ($stmt === false) { echo json_encode([ "draw" => $draw, "recordsTotal" => 0, "recordsFiltered" => 0, "data" => [], "error" => "Error al contar registros totales" ]); exit; } $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC); $recordsTotal = (int)($row['total'] ?? 0); // Construir condiciones de filtro $where = "ClienteRFC = ?"; $params = [$importador['rfc']]; if ($search !== '') { $where .= " AND (Pedimento LIKE ? OR ClienteNombre LIKE ? OR ClavePed LIKE ?)"; $like = "%{$search}%"; $params = array_merge($params, [$like, $like, $like]); } // Total registros filtrados $sqlFiltered = "SELECT COUNT(*) AS total FROM PREVIOS_COMPARTIDOS_WS WHERE $where"; $stmtF = sqlsrv_query($conn, $sqlFiltered, $params); if ($stmtF === false) { echo json_encode([ "draw" => $draw, "recordsTotal" => $recordsTotal, "recordsFiltered" => 0, "data" => [], "error" => "Error al contar registros filtrados" ]); exit; } $rowF = sqlsrv_fetch_array($stmtF, SQLSRV_FETCH_ASSOC); $recordsFiltered = (int)($rowF['total'] ?? 0); // Datos de la página $sqlData = "SELECT IdPrevio, Pedimento, ClienteRFC, ClienteNombre, Timestamp, Status FROM PREVIOS_COMPARTIDOS_WS WHERE $where ORDER BY Timestamp DESC OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; $params[] = $start; $params[] = $length; $stmtD = sqlsrv_query($conn, $sqlData, $params); $data = []; if ($stmtD !== false) { while ($r = sqlsrv_fetch_array($stmtD, SQLSRV_FETCH_ASSOC)) { $timestamp = $r['Timestamp'] instanceof DateTime ? $r['Timestamp']->format('Y-m-d H:i:s') : ''; $status_text = $r['Status'] == 1 ? 'Activo' : 'Inactivo'; $data[] = [ $r['IdPrevio'], $r['Pedimento'], $r['ClienteRFC'], $r['ClienteNombre'], $timestamp, $status_text ]; } } $response = [ "draw" => $draw, "recordsTotal" => $recordsTotal, "recordsFiltered" => $recordsFiltered, "data" => $data ]; header('Content-Type: application/json; charset=UTF-8'); echo json_encode($response, JSON_UNESCAPED_UNICODE); exit; } function buscar_pedimentos() { if (!($_SESSION['usuario_id'] ?? false)) { http_response_code(403); echo json_encode([]); exit; } $id_usuario = $_SESSION['usuario_id']; $query = trim($_GET['q'] ?? ''); $limit = intval($_GET['limit'] ?? 10); // ✅ NUEVO: Parámetro limit con valor por defecto // ✅ MODIFICADO: Para el panel de referencia, si no hay query, traer los más recientes if (empty($query)) { // Si no hay query, obtener los pedimentos más recientes para el panel de referencia $whereCondition = "ClienteRFC = ? AND Status = 1"; $searchParams = []; } else { // Si hay query, mantener la lógica original de búsqueda if (strlen($query) < 3) { echo json_encode([]); exit; } $whereCondition = "ClienteRFC = ? AND (Pedimento LIKE ? OR ClienteNombre LIKE ? OR ClavePed LIKE ?) AND Status = 1"; $like = "%{$query}%"; $searchParams = [$like, $like, $like]; } $conn = getConnection(); // Obtener RFC del usuario para filtrar solo sus pedimentos $sqlImportador = "SELECT rfc FROM informacion_general WHERE id_usuario = ?"; $stmtImportador = sqlsrv_query($conn, $sqlImportador, [$id_usuario]); if ($stmtImportador === false) { echo json_encode([]); exit; } $importador = sqlsrv_fetch_array($stmtImportador, SQLSRV_FETCH_ASSOC); if (!$importador) { echo json_encode([]); exit; } // ✅ MODIFICADO: Query dinámico con límite configurable $sql = "SELECT TOP {$limit} IdPrevio, Pedimento, ClienteRFC, ClienteNombre, ClavePed, Timestamp FROM PREVIOS_COMPARTIDOS_WS WHERE {$whereCondition} ORDER BY Timestamp DESC"; $params = array_merge([$importador['rfc']], $searchParams); $stmt = sqlsrv_query($conn, $sql, $params); $pedimentos = []; if ($stmt !== false) { while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { $fecha_formateada = ''; if ($row['Timestamp'] instanceof DateTime) { $fecha_formateada = $row['Timestamp']->format('d/m/Y'); } $pedimentos[] = [ 'IdPrevio' => $row['IdPrevio'], 'Pedimento' => $row['Pedimento'], 'ClienteRFC' => $row['ClienteRFC'], 'ClienteNombre' => $row['ClienteNombre'], 'ClavePed' => $row['ClavePed'], 'fecha_formateada' => $fecha_formateada ]; } } header('Content-Type: application/json; charset=UTF-8'); echo json_encode($pedimentos, JSON_UNESCAPED_UNICODE); exit; }