Sprint 2
This commit is contained in:
@@ -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';
|
||||
}
|
||||
@@ -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()
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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.");
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -460,7 +460,6 @@ function actualizar() {
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
function eliminar() {
|
||||
session_start();
|
||||
if (!($_SESSION['usuario_id'] ?? false)) {
|
||||
|
||||
Reference in New Issue
Block a user