This commit is contained in:
2025-06-02 13:32:49 -06:00
parent c574183cee
commit 46a92a4415
19 changed files with 728 additions and 379 deletions

View File

@@ -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';
}

View File

@@ -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()

View File

@@ -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 = [

View File

@@ -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.");
}

View File

@@ -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;
}
}

View File

@@ -460,7 +460,6 @@ function actualizar() {
exit;
}
function eliminar() {
session_start();
if (!($_SESSION['usuario_id'] ?? false)) {