0 GROUP BY sif.id_solicitud, sif.numero_pedimento, sif.fecha_factura, sif.aduana, sif.proveedor_clave ORDER BY sif.fecha_factura DESC "; $stmt = sqlsrv_query($conn, $sql, [$id_importador]); $expedientes = []; if ($stmt) { while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { $expedientes[] = $row; } } include __DIR__ . '/../../views/expediente/index.php'; } function subir($id_solicitud) { include __DIR__ . '/../../views/expediente/subir.php'; } function subir_handler() { if (!isset($_POST['id_solicitud']) || !isset($_FILES['archivos']) || !isset($_SESSION['usuario_id'])) { die("❌ Solicitud inválida."); } $conn = getConnection(); $id_solicitud = (int) $_POST['id_solicitud']; $id_importador = $_SESSION['usuario_id']; // Validar propiedad de la solicitud $validStmt = sqlsrv_query($conn, "SELECT 1 FROM solicitud_importacion_factura WHERE id_solicitud = ? AND id_importador = ?", [$id_solicitud, $id_importador]); if (!sqlsrv_fetch($validStmt)) { die("❌ No tienes permisos para esta solicitud."); } $archivos = $_FILES['archivos']; $usuario = $_SESSION['usuario_nombre'] ?? 'sistema'; $uploadDir = __DIR__ . '/../../uploads/expedientes/' . $id_solicitud; if (!is_dir($uploadDir)) { mkdir($uploadDir, 0775, true); } for ($i = 0; $i < count($archivos['name']); $i++) { if ($archivos['error'][$i] !== 0) continue; $nombreOriginal = basename($archivos['name'][$i]); $nombreSeguro = uniqid() . '_' . preg_replace('/[^A-Za-z0-9._-]/', '_', $nombreOriginal); $rutaFinal = $uploadDir . '/' . $nombreSeguro; move_uploaded_file($archivos['tmp_name'][$i], $rutaFinal); $rutaDb = "uploads/expedientes/$id_solicitud/$nombreSeguro"; $tamanoKb = round(filesize($rutaFinal) / 1024, 2); $tipoArchivo = mime_content_type($rutaFinal); $sql = "INSERT INTO expediente_archivos (id_solicitud, nombre_archivo, ruta_archivo, tipo_archivo, tamano_archivo, creado_por) VALUES (?, ?, ?, ?, ?, ?) "; $params = [$id_solicitud, $nombreOriginal, $rutaDb, $tipoArchivo, $tamanoKb, $usuario]; sqlsrv_query($conn, $sql, $params); } header("Location: /IMPORTADORES/expediente/ver/$id_solicitud"); exit; } function ver($id_solicitud) { if (!isset($_SESSION['usuario_id'])) { header('Location: /IMPORTADORES/login'); exit; } $conn = getConnection(); $id_importador = $_SESSION['usuario_id']; $sql = "SELECT * FROM expediente_archivos WHERE id_solicitud = ? AND id_solicitud IN (SELECT id_solicitud FROM solicitud_importacion_factura WHERE id_importador = ?) ORDER BY creado_en DESC"; $stmt = sqlsrv_query($conn, $sql, [$id_solicitud, $id_importador]); $archivos = []; if ($stmt) { while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { if (is_string($row['creado_en'])) { $row['creado_en'] = new DateTime($row['creado_en']); } $archivos[] = $row; } } include __DIR__ . '/../../views/expediente/ver.php'; } function ver_archivo($id_archivo) { if (!isset($_SESSION['usuario_id'])) { header('Location: /IMPORTADORES/login'); exit; } $conn = getConnection(); $sql = "SELECT ea.*, sif.id_importador FROM expediente_archivos ea JOIN solicitud_importacion_factura sif ON sif.id_solicitud = ea.id_solicitud WHERE ea.id = ?"; $stmt = sqlsrv_query($conn, $sql, [$id_archivo]); $archivo = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC); if (!$archivo || $archivo['id_importador'] != $_SESSION['usuario_id']) { http_response_code(403); echo "Archivo no autorizado o no encontrado."; exit; } $ruta = __DIR__ . '/../../' . $archivo['ruta_archivo']; if (!file_exists($ruta)) { http_response_code(404); echo "El archivo no existe físicamente."; exit; } $tipo = $archivo['tipo_archivo'] ?? mime_content_type($ruta); $nombre = $archivo['nombre_archivo']; header('Content-Type: ' . $tipo); header('Content-Length: ' . filesize($ruta)); header("Content-Disposition: inline; filename=\"" . basename($nombre) . "\""); readfile($ruta); exit; } function descargar_zip($id_solicitud) { if (!isset($_SESSION['usuario_id'])) { http_response_code(403); echo "No autorizado."; exit; } $conn = getConnection(); $id_importador = $_SESSION['usuario_id']; $sql = "SELECT ea.nombre_archivo, ea.ruta_archivo FROM expediente_archivos ea JOIN solicitud_importacion_factura sif ON sif.id_solicitud = ea.id_solicitud WHERE ea.id_solicitud = ? AND sif.id_importador = ? "; $stmt = sqlsrv_query($conn, $sql, [$id_solicitud, $id_importador]); if (!$stmt) { http_response_code(500); echo "Error al consultar archivos."; exit; } $archivos = []; while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { $ruta_absoluta = __DIR__ . '/../../' . $row['ruta_archivo']; if (file_exists($ruta_absoluta)) { $archivos[] = [ 'ruta' => $ruta_absoluta, 'nombre' => $row['nombre_archivo'] ]; } } if (empty($archivos)) { http_response_code(404); echo "No hay archivos válidos para comprimir."; exit; } $zip_file = tempnam(sys_get_temp_dir(), 'expediente_') . '.zip'; $zip = new ZipArchive(); if ($zip->open($zip_file, ZipArchive::CREATE) !== true) { http_response_code(500); echo "No se pudo crear el archivo ZIP."; exit; } foreach ($archivos as $a) { $zip->addFile($a['ruta'], $a['nombre']); } $zip->close(); header('Content-Type: application/zip'); header('Content-Disposition: attachment; filename="expediente_' . $id_solicitud . '.zip"'); header('Content-Length: ' . filesize($zip_file)); readfile($zip_file); unlink($zip_file); exit; }