seccion expediente electronico
This commit is contained in:
221
app/controllers/expediente.php
Normal file
221
app/controllers/expediente.php
Normal file
@@ -0,0 +1,221 @@
|
||||
<?php
|
||||
session_start();
|
||||
require_once __DIR__ . '/../../config/database.php';
|
||||
|
||||
// Mostrar tabla de expedientes
|
||||
function index() {
|
||||
if (!isset($_SESSION['usuario_id'])) {
|
||||
header('Location: /IMPORTADORES/login');
|
||||
exit;
|
||||
}
|
||||
$conn = getConnection();
|
||||
$id_importador = $_SESSION['usuario_id'];
|
||||
|
||||
$sql = "
|
||||
SELECT
|
||||
sif.id_solicitud,
|
||||
sif.numero_pedimento,
|
||||
sif.fecha_factura,
|
||||
sif.aduana,
|
||||
sif.proveedor_clave,
|
||||
COUNT(ea.id) AS total_archivos,
|
||||
ISNULL(SUM(ea.tamano_archivo), 0) AS total_tamano
|
||||
FROM solicitud_importacion_factura sif
|
||||
LEFT JOIN expediente_archivos ea ON ea.id_solicitud = sif.id_solicitud
|
||||
WHERE sif.numero_pedimento IS NOT NULL AND sif.id_importador = ?
|
||||
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'];
|
||||
$archivos = [];
|
||||
|
||||
$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]);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ function lista() {
|
||||
LEFT JOIN dbo.choferes c
|
||||
ON f.chofer_id = c.id_chofer
|
||||
WHERE f.id_importador = ?
|
||||
AND f.status = 1
|
||||
AND f.status >= 1
|
||||
ORDER BY f.created_at DESC
|
||||
";
|
||||
$stmt = sqlsrv_query($conn, $sql, [$id_importador]);
|
||||
@@ -169,6 +169,7 @@ function guardar() {
|
||||
$transportista_id = $_POST['transportista_id'] ?? null;
|
||||
$chofer_id = $_POST['chofer_id'] ?? null;
|
||||
$status = isset($_POST['status']) ? 1 : 0;
|
||||
$proveedor_clave = trim($_POST['proveedor_id'] ?? '');
|
||||
|
||||
if (empty($num_factura) || empty($fecha) || empty($transportista_id) || empty($chofer_id)) {
|
||||
die("❌ Faltan campos obligatorios.");
|
||||
@@ -187,7 +188,7 @@ function guardar() {
|
||||
|
||||
$conn = getConnection();
|
||||
|
||||
$params=[
|
||||
$params = [
|
||||
$id_importador,
|
||||
$aduana_seccion,
|
||||
$aduana_seccion,
|
||||
@@ -201,15 +202,19 @@ function guardar() {
|
||||
(int)$transportista_id,
|
||||
(int)$chofer_id,
|
||||
$fotoUrl,
|
||||
$status
|
||||
];
|
||||
$status,
|
||||
$proveedor_clave
|
||||
];
|
||||
|
||||
|
||||
$sql = "INSERT INTO dbo.solicitud_importacion_factura
|
||||
(id_importador, aduana, anexo22_apendice, numero_factura, fecha_factura,
|
||||
numero_pedimento, incoterm, pais_proveedor, tipo_moneda,
|
||||
valor_factura, vinculacion, transportista_id, chofer_id, foto_solicitud_url, status)
|
||||
OUTPUT INSERTED.id_solicitud
|
||||
VALUES (?, ?, ?, ?, ?, NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||
$sql = "INSERT INTO dbo.solicitud_importacion_factura
|
||||
(id_importador, aduana, anexo22_apendice, numero_factura, fecha_factura,
|
||||
numero_pedimento, incoterm, pais_proveedor, tipo_moneda,
|
||||
valor_factura, vinculacion, transportista_id, chofer_id,
|
||||
foto_solicitud_url, status, proveedor_clave)
|
||||
OUTPUT INSERTED.id_solicitud
|
||||
VALUES(?, ?, ?, ?, ?, NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||
;
|
||||
|
||||
$stmt = sqlsrv_query($conn, $sql, $params, ['Scrollable' => SQLSRV_CURSOR_KEYSET]);
|
||||
if ($stmt === false) {
|
||||
@@ -461,3 +466,29 @@ function ajax_lista()
|
||||
}
|
||||
|
||||
|
||||
function update_status() {
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
if (!($_SESSION['usuario_id'] ?? false)) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['error'=>'No autorizado']);
|
||||
exit;
|
||||
}
|
||||
$id = intval($_POST['id'] ?? 0);
|
||||
$status = intval($_POST['status'] ?? 0);
|
||||
$conn = getConnection();
|
||||
$sql = "UPDATE dbo.solicitud_importacion_factura
|
||||
SET status=?
|
||||
WHERE id_solicitud=? AND id_importador=?";
|
||||
$params = [$status, $id, $_SESSION['usuario_id']];
|
||||
$stmt = sqlsrv_query($conn, $sql, $params);
|
||||
if ($stmt === false) {
|
||||
http_response_code(500);
|
||||
echo json_encode(['error'=>'Error al actualizar status']);
|
||||
exit;
|
||||
}
|
||||
echo json_encode(['success'=>true]);
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user