diff --git a/app/controllers/agentes.php b/app/controllers/agentes.php index b63ee69..d509fb1 100644 --- a/app/controllers/agentes.php +++ b/app/controllers/agentes.php @@ -13,7 +13,8 @@ use PHPMailer\PHPMailer\Exception; loadEnv(); -function dashboard() { +function dashboard() +{ if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'agente_aduanal') { header("Location: /IMPORTADORES/login"); exit; @@ -28,7 +29,8 @@ function dashboard() { include __DIR__ . '/../../views/agentes/dashboard.php'; } -function importadores_activos() { +function importadores_activos() +{ if (!($_SESSION['usuario_id'] ?? false) || $_SESSION['tipo_usuario'] !== 'agente_aduanal') { header('Location: /IMPORTADORES/login'); exit; @@ -175,8 +177,8 @@ function aprobar_solicitud() exit; } -function activos() { - +function activos() +{ if (!($_SESSION['usuario_id'] ?? false)) { die("⚠️ No autorizado."); } @@ -203,9 +205,8 @@ function activos() { include __DIR__ . '/../../views/agentes/importadores_activos.php'; } -function toggle_estado() { - - +function toggle_estado() +{ if (!($_SESSION['usuario_id'] ?? false) || $_SESSION['tipo_usuario'] !== 'agente_aduanal') { die("⚠️ No autorizado."); } @@ -240,4 +241,33 @@ function toggle_estado() { header("Location: /IMPORTADORES/agentes/activos"); exit; +} + +function bitacora() +{ + $conn = getConnection(); + if (!($_SESSION['usuario_id'] ?? false)) { + header('Location: /IMPORTADORES/login'); + exit; + } + + $sql = " + SELECT u.id_usuario, u.nombre, b.email, b.ip, b.fecha, b.exito, b.detalle + FROM dbo.bitacora_login b + JOIN dbo.usuarios_sistema u ON u.id_usuario = b.id_usuario + ORDER BY b.fecha DESC + "; + + $stmt = sqlsrv_query($conn, $sql); + if ($stmt === false) { + die("Error en bitacora(): " . print_r(sqlsrv_errors(), true)); + } + + $bitacoras = []; + while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { + $row['nombre'] = decrypt($row['nombre']); // Desencripta aquí + $bitacoras[] = $row; + } + + include __DIR__ . '/../../views/agentes/bitacora.php'; } \ No newline at end of file diff --git a/app/controllers/configuracion.php b/app/controllers/configuracion.php index 08d7928..07224a7 100644 --- a/app/controllers/configuracion.php +++ b/app/controllers/configuracion.php @@ -62,7 +62,7 @@ function guardar() // Captura los datos del formulario $campos = [ 'clave', 'tipo_identificador', 'curp', 'calle', 'num_exterior', 'num_interior', - 'ciudad', 'colonia', 'pais', 'codigo_postal', 'municipio', 'estado', 'fax', 'observaciones' + 'ciudad', 'colonia', 'pais', 'codigo_postal', 'municipio', 'estado', 'telefono', 'fax', 'observaciones' ]; $sql_parts = []; @@ -75,23 +75,95 @@ function guardar() } } - // Si no hay datos que actualizar if (empty($sql_parts)) { header("Location: /IMPORTADORES/configuracion"); exit; } - $sql = "UPDATE informacion_general SET " . implode(", ", $sql_parts) . " WHERE id_usuario = ?"; - $params[] = $id_usuario; + // Iniciar transacción para asegurar consistencia + sqlsrv_begin_transaction($conn); - $stmt = sqlsrv_query($conn, $sql, $params); + try { + // 1. Actualiza la tabla informacion_general + $sql = "UPDATE informacion_general SET " . implode(", ", $sql_parts) . " WHERE id_usuario = ?"; + $params[] = $id_usuario; - if ($stmt === false) { - die(print_r(sqlsrv_errors(), true)); + $stmt = sqlsrv_query($conn, $sql, $params); + if ($stmt === false) { + throw new Exception(print_r(sqlsrv_errors(), true)); + } + + // 2. Actualiza el teléfono en solicitudes_importadores usando company_name encriptado + if (isset($_POST['telefono']) && $_POST['telefono'] !== '') { + $telefono = $_POST['telefono']; + + // Primero obtenemos el nombre de la empresa de informacion_general + $sql_get_name = "SELECT nombre FROM informacion_general WHERE id_usuario = ?"; + $params_get_name = [$id_usuario]; + $stmt_get_name = sqlsrv_query($conn, $sql_get_name, $params_get_name); + + if ($stmt_get_name === false) { + throw new Exception("Error al obtener nombre de empresa: " . print_r(sqlsrv_errors(), true)); + } + + $empresa_data = sqlsrv_fetch_array($stmt_get_name, SQLSRV_FETCH_ASSOC); + + if ($empresa_data && !empty($empresa_data['nombre'])) { + $nombre_empresa = $empresa_data['nombre']; + + // Encriptar el nombre de la empresa para comparar + $nombre_encriptado = encrypt($nombre_empresa); + + // Actualizar solicitudes_importadores usando el company_name encriptado + $sql_solicitud = "UPDATE solicitudes_importadores SET phone = ? WHERE company_name = ?"; + $params_solicitud = [$telefono, $nombre_encriptado]; + + $stmt_solicitud = sqlsrv_query($conn, $sql_solicitud, $params_solicitud); + + if ($stmt_solicitud === false) { + throw new Exception("Error al actualizar teléfono en solicitudes: " . print_r(sqlsrv_errors(), true)); + } + + // Verificar si se actualizó algún registro + $rows_affected = sqlsrv_rows_affected($stmt_solicitud); + if ($rows_affected === false || $rows_affected == 0) { + // Log para debugging + error_log("No se encontró registro en solicitudes_importadores para actualizar teléfono. Empresa: " . $nombre_empresa); + + // Opcional: Buscar por RFC como fallback + $sql_rfc = "SELECT rfc FROM informacion_general WHERE id_usuario = ?"; + $stmt_rfc = sqlsrv_query($conn, $sql_rfc, [$id_usuario]); + + if ($stmt_rfc) { + $rfc_data = sqlsrv_fetch_array($stmt_rfc, SQLSRV_FETCH_ASSOC); + if ($rfc_data && !empty($rfc_data['rfc'])) { + $sql_solicitud_rfc = "UPDATE solicitudes_importadores SET phone = ? WHERE rfc = ?"; + $params_solicitud_rfc = [$telefono, $rfc_data['rfc']]; + + $stmt_solicitud_rfc = sqlsrv_query($conn, $sql_solicitud_rfc, $params_solicitud_rfc); + + if ($stmt_solicitud_rfc === false) { + error_log("Error al actualizar por RFC: " . print_r(sqlsrv_errors(), true)); + } + } + } + } + } else { + error_log("No se pudo obtener el nombre de la empresa para el usuario: " . $id_usuario); + } + } + + // Confirmar transacción + sqlsrv_commit($conn); + + header("Location: /IMPORTADORES/configuracion/index"); + exit; + + } catch (Exception $e) { + // Revertir transacción en caso de error + sqlsrv_rollback($conn); + die("Error al actualizar datos: " . $e->getMessage()); } - - header("Location: /IMPORTADORES/configuracion/index"); - exit; } function automatizaciones() diff --git a/app/controllers/seguridad.php b/app/controllers/seguridad.php index 937b24e..6da955a 100644 --- a/app/controllers/seguridad.php +++ b/app/controllers/seguridad.php @@ -24,6 +24,17 @@ function index() function opciones() { + $conn = getConnection(); + $id_usuario = $_SESSION['usuario_id'] ?? null; + + // Asegúrate de que el usuario está autenticado + if (!$id_usuario) { + die("Usuario no autenticado."); + } + + // Obtener correos + $correos = obtenerCorreos($conn, $id_usuario); + include __DIR__ . '/../../views/seguridad/agregar.php'; } @@ -145,6 +156,35 @@ function correoExtra() } } +function modificarCorreoExtra() +{ + if (!isset($_SESSION['usuario_id']) || ($_SESSION['pendiente_confirmacion'] ?? false)) { + echo "Error: no se ha iniciado sesión o sesión incompleta."; + exit; + } + + $id_usuario = $_SESSION['usuario_id']; + $conn = getConnection(); + + $correo = $_POST['email-extra'] ?? ''; + + if (!filter_var($correo, FILTER_VALIDATE_EMAIL)) { + echo "Correo inválido."; + return; + } + + $query = "UPDATE correo_extra SET correo = ? WHERE id_usuario = ?"; + $stmt = sqlsrv_prepare($conn, $query, [$correo, $id_usuario]); + + if ($stmt && sqlsrv_execute($stmt)) { + $_SESSION['config_success'] = 'Correo adicional actualizado correctamente.'; + header('Location: /IMPORTADORES/seguridad/index'); + exit; + } else { + echo "Error al actualizar el correo extra."; + } +} + function correoRespaldo() { // CORRIGIDO: Cambiar id_usuario por usuario_id y verificar confirmación @@ -184,6 +224,35 @@ function correoRespaldo() } } +function modificarCorreoRspaldo() +{ + if (!isset($_SESSION['usuario_id']) || ($_SESSION['pendiente_confirmacion'] ?? false)) { + echo "Error: no se ha iniciado sesión o sesión incompleta."; + exit; + } + + $id_usuario = $_SESSION['usuario_id']; + $conn = getConnection(); + + $correo = $_POST['email-respaldo'] ?? ''; + + if (!filter_var($correo, FILTER_VALIDATE_EMAIL)) { + echo "Correo inválido."; + return; + } + + $query = "UPDATE correo_respaldo SET correo = ? WHERE id_usuario = ?"; + $stmt = sqlsrv_prepare($conn, $query, [$correo, $id_usuario]); + + if ($stmt && sqlsrv_execute($stmt)) { + $_SESSION['config_success'] = 'Correo de respaldo actualizado correctamente.'; + header('Location: /IMPORTADORES/seguridad/index'); + exit; + } else { + echo "Error al actualizar el correo de respaldo."; + } +} + function obtenerCorreos($conn, $id_usuario) { $correos = [ diff --git a/app/controllers/solicitud_importacion.php b/app/controllers/solicitud_importacion.php index 04bccd7..048c8e0 100644 --- a/app/controllers/solicitud_importacion.php +++ b/app/controllers/solicitud_importacion.php @@ -77,14 +77,17 @@ function lista() { f.*, tr.nombre AS transportista, (c.nombre + ' ' + c.apellido) AS chofer, + p.nombre AS nombre_pais_proveedor, f.foto_solicitud_url FROM dbo.solicitud_importacion_factura f JOIN dbo.transportistas tr - ON f.transportista_id = tr.id_transportista + ON f.transportista_id = tr.id_transportista LEFT JOIN dbo.choferes c - ON f.chofer_id = c.id_chofer + ON f.chofer_id = c.id_chofer + LEFT JOIN dbo.paises p + ON f.pais_proveedor = p.id_pais 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]); @@ -104,7 +107,8 @@ function lista() { } /** Formulario de nueva factura **/ -function crear() { +function crear() +{ if (!($_SESSION['usuario_id'] ?? false)) { header('Location: /IMPORTADORES/login'); exit; @@ -114,7 +118,7 @@ function crear() { // Carga de datos para selects $transportistas = []; - $stmtT = sqlsrv_query($conn, "SELECT id_transportista,nombre FROM dbo.transportistas WHERE id_usuario=? AND activo=1 ORDER BY nombre",[$id_importador]); + $stmtT = sqlsrv_query($conn, "SELECT id_transportista, clave_identificador, nombre FROM dbo.transportistas WHERE id_usuario=? AND activo=1 ORDER BY nombre",[$id_importador]); while ($r = sqlsrv_fetch_array($stmtT, SQLSRV_FETCH_ASSOC)) { $transportistas[] = $r; } $choferes = []; @@ -122,15 +126,15 @@ function crear() { while ($r = sqlsrv_fetch_array($stmtC, SQLSRV_FETCH_ASSOC)) { $choferes[] = $r; } $paises = []; - $stmtP = sqlsrv_query($conn, "SELECT id_pais,nombre FROM dbo.paises ORDER BY nombre"); + $stmtP = sqlsrv_query($conn, "SELECT id_pais, nombre FROM dbo.paises ORDER BY nombre"); while ($r = sqlsrv_fetch_array($stmtP, SQLSRV_FETCH_ASSOC)) { $paises[] = $r; } $aduanas = []; - $stmtA = sqlsrv_query($conn, "SELECT aduana_seccion,nombre FROM dbo.aduanas ORDER BY aduana_seccion"); + $stmtA = sqlsrv_query($conn, "SELECT DISTINCT RIGHT(REPLICATE('0', 3) + CAST(aduana_seccion AS VARCHAR), 3) AS aduana_seccion, nombre FROM dbo.aduanas ORDER BY aduana_seccion"); while ($r = sqlsrv_fetch_array($stmtA, SQLSRV_FETCH_ASSOC)) { $aduanas[] = $r; } $incoterms = []; - $stmtI = sqlsrv_query($conn, "SELECT INCOTERM,DESCESPANOL FROM dbo.gIncoterms ORDER BY INCOTERM"); + $stmtI = sqlsrv_query($conn, "SELECT INCOTERM, DESCESPANOL FROM dbo.gIncoterms ORDER BY INCOTERM"); while ($r = sqlsrv_fetch_array($stmtI, SQLSRV_FETCH_ASSOC)) { $incoterms[] = $r; } $unidades_medida = []; @@ -143,7 +147,8 @@ function crear() { } /** Procesa la creación de una nueva factura y sus partidas **/ -function guardar() { +function guardar() +{ if (!($_SESSION['usuario_id'] ?? false)) { die("⚠️ No autorizado."); } diff --git a/app/controllers/transportes.php b/app/controllers/transportes.php index 6741a92..d2216b8 100644 --- a/app/controllers/transportes.php +++ b/app/controllers/transportes.php @@ -2,9 +2,7 @@ session_start(); require_once __DIR__ . '/../../config/database.php'; -/** - * Listado de transportes (sólo activos) para el importador logueado - */ +/** Listado de transportes (sólo activos) para el importador logueado **/ function lista() { if (!($_SESSION['usuario_id'] ?? false)) { header('Location: /IMPORTADORES/login'); @@ -31,9 +29,7 @@ function lista() { include __DIR__ . '/../../views/transportes/lista.php'; } -/** - * Formulario de alta de transporte - */ +/** Formulario de alta de transporte **/ function crear() { if (!($_SESSION['usuario_id'] ?? false)) { header('Location: /IMPORTADORES/login'); @@ -44,7 +40,7 @@ function crear() { // Traer transportistas propios para el select $sql = " - SELECT id_transportista, nombre + SELECT id_transportista, clave_identificador, nombre FROM dbo.transportistas WHERE id_usuario = ? AND activo = 1 ORDER BY nombre @@ -58,9 +54,7 @@ function crear() { include __DIR__ . '/../../views/transportes/crear.php'; } -/** - * Procesa la creación de un nuevo transporte - */ +/** Procesa la creación de un nuevo transporte **/ function guardar() { if (!($_SESSION['usuario_id'] ?? false)) { @@ -101,9 +95,7 @@ function guardar() { exit; } -/** - * Formulario de edición - */ +/** Formulario de edición **/ function editar() { if (!($_SESSION['usuario_id'] ?? false)) { @@ -143,9 +135,7 @@ function editar() { include __DIR__ . '/../../views/transportes/editar.php'; } -/** - * Procesa la actualización - */ +/** Procesa la actualización **/ function actualizar() { if (!($_SESSION['usuario_id'] ?? false)) { die("⚠️ No autorizado."); @@ -206,11 +196,7 @@ function actualizar() { exit; } - - -/** - * “Soft-delete” (status = 0) - */ +/** “Soft-delete” (status = 0) **/ function eliminar() { if (!($_SESSION['usuario_id'] ?? false)) { @@ -232,9 +218,7 @@ function eliminar() { } -/** - * Formulario de importación masiva - */ +/** Formulario de importación masiva **/ function masivo() { if (!($_SESSION['usuario_id'] ?? false)) { header('Location: /IMPORTADORES/login'); @@ -243,9 +227,7 @@ function masivo() { include __DIR__ . '/../../views/transportes/importar_masivo.php'; } -/** - * Procesa la importación masiva desde CSV - */ +/** Procesa la importación masiva desde CSV **/ function importarGuardar() { if (!($_SESSION['usuario_id'] ?? false)) { die("⚠️ No autorizado."); @@ -316,4 +298,4 @@ function importarGuardar() { ]; header('Location: /IMPORTADORES/transportes/masivo'); exit; -} +} \ No newline at end of file diff --git a/app/controllers/transportistas.php b/app/controllers/transportistas.php index f66b9d8..2001c08 100644 --- a/app/controllers/transportistas.php +++ b/app/controllers/transportistas.php @@ -460,7 +460,6 @@ function actualizar() { exit; } - function eliminar() { session_start(); if (!($_SESSION['usuario_id'] ?? false)) { diff --git a/views/agentes/bitacora.php b/views/agentes/bitacora.php new file mode 100644 index 0000000..2b22ef8 --- /dev/null +++ b/views/agentes/bitacora.php @@ -0,0 +1,132 @@ + + + + + + Dashboard | Agente Aduanal + + + + + + + + + + + +
+

👥 Acceso de Usuarios

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
IDNombreCorreoIPFechaEstatusDetalles
format('Y-m-d H:i:s') ?> + +
+
+
+
+ + + + + \ No newline at end of file diff --git a/views/agentes/dashboard.php b/views/agentes/dashboard.php index 5da4940..1d9d44f 100644 --- a/views/agentes/dashboard.php +++ b/views/agentes/dashboard.php @@ -1,3 +1,7 @@ + @@ -47,40 +51,36 @@ - - -
-

Panel principal del agente

+ +
+

Panel principal del agente

-
-
-
-
Importadores activos
-

Consulta los que ya fueron autorizados.

- Ver importadores +
+
+
+
Importadores activos
+

Consulta los que ya fueron autorizados.

+ Ver importadores +
-
-
-
-
Solicitudes pendientes
-

Valida nuevas solicitudes de registro.

- Ver solicitudes +
+
+
Solicitudes pendientes
+

Valida nuevas solicitudes de registro.

+ Ver solicitudes +
-
-
-
-
Bitácora del sistema
-

Revisa los accesos y acciones recientes.

- Ver bitácora +
+
+
Bitácora del sistema
+

Revisa los accesos y acciones recientes.

+ Ver bitácora +
-
diff --git a/views/agentes/importadores_activos.php b/views/agentes/importadores_activos.php index ee146e5..86776e5 100644 --- a/views/agentes/importadores_activos.php +++ b/views/agentes/importadores_activos.php @@ -2,88 +2,95 @@ require_once __DIR__ . '/../../app/helpers/crypto.php'; include __DIR__ . '/../partials/sidebar_agente.php'; ?> - - - - + + + Dashboard | Agente Aduanal + + + + - + -
-

✅ Importadores Activos

+ +
+

✅ Importadores Activos

- - - - - - - - - - - - +
#NombreCorreoFecha RegistroAcciones
+ - - - - - + + + + + - - -
format('Y-m-d H:i') : '' ?> - - Suspender - - Activar - - #NombreCorreoFecha RegistroAcciones
-
+ + + + + + + + format('Y-m-d H:i') : '' ?> + + + Suspender + + Activar + + + + + + +
- - - + + + + + + \ No newline at end of file diff --git a/views/agentes/solicitudes_pendientes.php b/views/agentes/solicitudes_pendientes.php index a4d08d8..ace8834 100644 --- a/views/agentes/solicitudes_pendientes.php +++ b/views/agentes/solicitudes_pendientes.php @@ -2,7 +2,10 @@ require_once __DIR__ . '/../../app/helpers/crypto.php'; include __DIR__ . '/../partials/sidebar_agente.php'; ?> - + + + Dashboard | Agente Aduanal + @@ -43,43 +46,48 @@ include __DIR__ . '/../partials/sidebar_agente.php'; } -
-

📥 Solicitudes Pendientes

+ - - - - - - - - - - - - - - - +
+

📥 Solicitudes Pendientes

+ +
#EmpresaRFCCorreoTeléfonoFechaArchivo SATAcción
+ - - - - - - - - + + + + + + + + - - -
format('Y-m-d H:i') : '' ?> - - Ver PDF - - No adjunto - - - Aprobar - #EmpresaRFCCorreoTeléfonoFechaArchivo SATAcción
-
+ + + + + + + + + + format('Y-m-d H:i') : '' ?> + + + Ver PDF + + No adjunto + + + + Aprobar + + + + + +
+ + + \ No newline at end of file diff --git a/views/configuracion/dashboard_configuracion.php b/views/configuracion/dashboard_configuracion.php index aaf223e..ded5ab7 100644 --- a/views/configuracion/dashboard_configuracion.php +++ b/views/configuracion/dashboard_configuracion.php @@ -84,17 +84,22 @@ include __DIR__ . '/../partials/sidebar_configuracion.php';

ℹ️ Información General

-
+
-
+
-
- +
+
diff --git a/views/configuracion/editar.php b/views/configuracion/editar.php index a45719d..6215405 100644 --- a/views/configuracion/editar.php +++ b/views/configuracion/editar.php @@ -88,20 +88,23 @@ include __DIR__ . '/../partials/sidebar_configuracion.php';

✏️ Editar Información

-
+
-
+
-
- +
+
@@ -123,87 +126,78 @@ include __DIR__ . '/../partials/sidebar_configuracion.php';
+ class="form-control" value="">
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
@@ -211,8 +205,7 @@ include __DIR__ . '/../partials/sidebar_configuracion.php';
+ class="form-control" value="">
@@ -227,9 +220,7 @@ include __DIR__ . '/../partials/sidebar_configuracion.php';
- +
@@ -241,38 +232,44 @@ include __DIR__ . '/../partials/sidebar_configuracion.php'; - + \ No newline at end of file diff --git a/views/partials/sidebar_agente.php b/views/partials/sidebar_agente.php index 0888448..12b5fd0 100644 --- a/views/partials/sidebar_agente.php +++ b/views/partials/sidebar_agente.php @@ -8,9 +8,6 @@ if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'agente_adu $nombreAgente = $_SESSION['usuario_nombre']; ?> - - -
diff --git a/views/seguridad/agregar.php b/views/seguridad/agregar.php index 154ae26..197431b 100644 --- a/views/seguridad/agregar.php +++ b/views/seguridad/agregar.php @@ -108,15 +108,24 @@ $dos_factores_estado = obtenerEstadoDosFactores();

Recibe Notificaciones

Agrega un correo adicional para recibir notificaciones.

- -
- - -
-
- -
- + +

+
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
@@ -125,15 +134,22 @@ $dos_factores_estado = obtenerEstadoDosFactores();

Correo de Respaldo

Agrega un correo de respaldo para reuperación de tu cuenta.

-
-
- - -
-
- -
-
+ +

+
+
+ +
+ +
+ +
+
+ +
+ +
+
diff --git a/views/solicitud_importacion/crear.php b/views/solicitud_importacion/crear.php index 6d186e2..5888106 100644 --- a/views/solicitud_importacion/crear.php +++ b/views/solicitud_importacion/crear.php @@ -99,7 +99,7 @@
- @@ -108,7 +108,7 @@
- 'Peso Mexicano','USD'=>'Dólar USD','EUR'=>'Euro','CNY'=>'Yuan','GBP'=>'Libra GBP','JPY'=>'Yen'] as $code=>$label): ?> @@ -139,7 +139,9 @@
@@ -148,7 +150,9 @@
@@ -179,12 +183,12 @@ - - - + + +
- @@ -192,11 +196,11 @@
- - + +
- diff --git a/views/solicitud_importacion/editar.php b/views/solicitud_importacion/editar.php index 0c8b94d..7d3d872 100644 --- a/views/solicitud_importacion/editar.php +++ b/views/solicitud_importacion/editar.php @@ -201,8 +201,8 @@ - - + + - - + +
@@ -104,7 +104,7 @@ @@ -143,6 +143,7 @@ // Si todas las validaciones pasan, el formulario se envía. }); + diff --git a/views/transportes/importar_masivo.php b/views/transportes/importar_masivo.php index cf936b0..cf93f00 100644 --- a/views/transportes/importar_masivo.php +++ b/views/transportes/importar_masivo.php @@ -112,7 +112,7 @@ if (!($_SESSION['usuario_id'] ?? false)) {
-

Descarga la plantilla y llena las columnas: vehiculo, identificador_fiscal, id_transportista.

+

Descarga la plantilla y llena las columnas: contenedor, identificador_fiscal, id_transportista.

📥 Descargar plantilla
@@ -120,9 +120,8 @@ if (!($_SESSION['usuario_id'] ?? false)) {
- - - \ No newline at end of file + + + + \ No newline at end of file