diff --git a/app/controllers/administrador.php b/app/controllers/administrador.php
index 19d840c..81225c9 100644
--- a/app/controllers/administrador.php
+++ b/app/controllers/administrador.php
@@ -106,9 +106,9 @@ function aprobar_usuario()
$email_encrypt = encrypt($email);
// Insertar en usuarios_sistema y obtener ID en la misma consulta
- $sqlInsert = "INSERT INTO usuarios_sistema (nombre, email, password_hash, tipo_usuario, activo, creado_en, dos_factores, creado_por)
+ $sqlInsert = "INSERT INTO usuarios_sistema (nombre, email, password_hash, tipo_usuario, activo, creado_en, dos_factores, creado_por, preferencias_catalogos)
OUTPUT INSERTED.id_usuario
- VALUES (?, ?, ?, ?, 1, GETDATE(), 0, ?)";
+ VALUES (?, ?, ?, ?, 1, GETDATE(), 0, ?, 1)";
$stmtInsert = sqlsrv_query($conn, $sqlInsert, [
$nombre_encrypt, $email_encrypt, $password_hash, $tipo, $_SESSION['usuario_id']
@@ -140,6 +140,17 @@ function aprobar_usuario()
throw new Exception("Error al insertar información general: " . print_r(sqlsrv_errors(), true));
}
+ // Insertar en preferencias de catalogos
+ $sqlPref = "INSERT INTO preferencias_catalogos_usuario
+ (id_usuario, locaciones, vinculacion, transportistas, transportes, choferes, proveedores,
+ productos_frecuentes, solicitudes_importacion, expediente_electronico, configuracion, cerrar_sesion)
+ VALUES (?, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)";
+ $stmtPref = sqlsrv_query($conn, $sqlPref, [$id_usuario]);
+
+ if (!$stmtPref) {
+ throw new Exception("Error al insertar preferencias de catalogos: " . print_r(sqlsrv_errors(), true));
+ }
+
// Actualizar solicitud
$sqlUpdate = "UPDATE solicitudes_importadores
SET request_status = 'approved', approval_date = GETDATE(), approved_by = ?
@@ -283,6 +294,7 @@ function guardar_usuario()
// 4. Insertar usuario
$sqlInsert = "INSERT INTO usuarios_sistema (nombre, email, password_hash, tipo_usuario, activo, creado_en, dos_factores, creado_por)
+ OUTPUT INSERTED.id_usuario
VALUES (?, ?, ?, ?, 1, GETDATE(), 0, ?)";
$params = [$nombre_encrypted, $email_encrypted, $password_hash, $tipo, $_SESSION['usuario_id']];
$stmtInsert = sqlsrv_query($conn, $sqlInsert, $params);
@@ -293,12 +305,31 @@ function guardar_usuario()
}
// 5. Obtener ID del nuevo usuario (para posibles tablas relacionadas)
- $sqlGetId = "SELECT SCOPE_IDENTITY() AS id_usuario";
- $stmtGetId = sqlsrv_query($conn, $sqlGetId);
- $idUsuarioRow = sqlsrv_fetch_array($stmtGetId, SQLSRV_FETCH_ASSOC);
+ $idUsuarioRow = sqlsrv_fetch_array($stmtInsert, SQLSRV_FETCH_ASSOC);
$id_usuario = $idUsuarioRow['id_usuario'] ?? null;
- // 6. Enviar correo de bienvenida
+ // 6. Insertar en informacion_general
+ $sqlInfo = "INSERT INTO informacion_general
+ (id_usuario, nombre, correo)
+ VALUES (?, ?, ?)";
+ $stmtInfo = sqlsrv_query($conn, $sqlInfo, [$id_usuario, $nombre, $email]);
+
+ if (!$stmtInfo) {
+ throw new Exception("Error al insertar información general: " . print_r(sqlsrv_errors(), true));
+ }
+
+ // 7. Insertar en preferencias de catalogos
+ $sqlPref = "INSERT INTO preferencias_catalogos_usuario
+ (id_usuario, locaciones, vinculacion, transportistas, transportes, choferes, proveedores,
+ productos_frecuentes, solicitudes_importacion, expediente_electronico, configuracion, cerrar_sesion)
+ VALUES (?, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)";
+ $stmtPref = sqlsrv_query($conn, $sqlPref, [$id_usuario]);
+
+ if (!$stmtPref) {
+ throw new Exception("Error al insertar preferencias de catalogos: " . print_r(sqlsrv_errors(), true));
+ }
+
+ // 8. Enviar correo de bienvenida
$mail = new PHPMailer(true);
try {
$mail->isSMTP();
diff --git a/app/controllers/importadores.php b/app/controllers/importadores.php
index 0051f3a..b34802a 100644
--- a/app/controllers/importadores.php
+++ b/app/controllers/importadores.php
@@ -3,15 +3,166 @@ require_once __DIR__ . '/../helpers/session.php';
require_once __DIR__ . '/../../config/database.php';
require_once __DIR__ . '/../helpers/crypto.php';
+// Función para obtener catálogos visibles del usuario
+function obtenerCatalogosVisibles($idUsuario) {
+ $conn = getConnection();
+
+ // Obtener configuración general y tipo de usuario
+ $query = "SELECT preferencias_catalogos, tipo_usuario FROM usuarios_sistema WHERE id_usuario = ?";
+ $stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
+ if (!$stmt || !sqlsrv_execute($stmt)) {
+ sqlsrv_close($conn);
+ return ['catalogos_activos' => false, 'catalogos' => []];
+ }
+
+ $usuario = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
+ if (!$usuario) {
+ sqlsrv_close($conn);
+ return ['catalogos_activos' => false, 'catalogos' => []];
+ }
+
+ $catalogos_general = $usuario['preferencias_catalogos'] ?? 0;
+ $tipoUsuario = $usuario['tipo_usuario'] ?? 'importador';
+ sqlsrv_free_stmt($stmt);
+
+ // Si los catálogos están desactivados, solo mostrar obligatorios
+ if (!$catalogos_general) {
+ // Obtener solo catálogos obligatorios
+ $query = "SELECT nombre, descripcion, color, ruta, accion
+ FROM tipos_catalogos
+ WHERE tipo_usuario = ? AND nombre IN ('Configuración', 'Cerrar sesión')
+ ORDER BY id";
+ $stmt = sqlsrv_prepare($conn, $query, [$tipoUsuario]);
+
+ if (!$stmt || !sqlsrv_execute($stmt)) {
+ sqlsrv_close($conn);
+ return ['catalogos_activos' => false, 'catalogos' => []];
+ }
+
+ $catalogos = [];
+ while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
+ $catalogos[] = [
+ 'nombre' => $row['nombre'],
+ 'descripcion' => $row['descripcion'],
+ 'color' => $row['color'],
+ 'ruta' => $row['ruta'],
+ 'accion' => $row['accion'],
+ 'visible' => true,
+ 'obligatorio' => true
+ ];
+ }
+
+ sqlsrv_free_stmt($stmt);
+ sqlsrv_close($conn);
+
+ return ['catalogos_activos' => false, 'catalogos' => $catalogos];
+ }
+
+ // Obtener todos los catálogos para este tipo de usuario
+ $query = "SELECT nombre, descripcion, color, ruta, accion
+ FROM tipos_catalogos
+ WHERE tipo_usuario = ?
+ ORDER BY id";
+ $stmt = sqlsrv_prepare($conn, $query, [$tipoUsuario]);
+
+ if (!$stmt || !sqlsrv_execute($stmt)) {
+ sqlsrv_close($conn);
+ return ['catalogos_activos' => false, 'catalogos' => []];
+ }
+
+ // Crear array de catálogos disponibles
+ $catalogos_disponibles = [];
+ while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
+ $catalogos_disponibles[] = [
+ 'nombre' => $row['nombre'],
+ 'descripcion' => $row['descripcion'],
+ 'color' => $row['color'],
+ 'ruta' => $row['ruta'],
+ 'accion' => $row['accion'],
+ 'campo_bd' => strtolower(str_replace([' ', 'ó', 'ú', 'á', 'é', 'í'], ['_', 'o', 'u', 'a', 'e', 'i'], $row['nombre']))
+ ];
+ }
+ sqlsrv_free_stmt($stmt);
+
+ // Obtener preferencias específicas del usuario
+ $preferencias = [];
+ switch ($tipoUsuario) {
+ case 'importador':
+ $query = "SELECT * FROM preferencias_catalogos_usuario WHERE id_usuario = ?";
+ $stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
+ if ($stmt && sqlsrv_execute($stmt)) {
+ $preferenciasRow = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
+ if ($preferenciasRow) {
+ $preferencias = $preferenciasRow;
+ }
+ sqlsrv_free_stmt($stmt);
+ }
+ break;
+ // Aquí agregarías otros casos cuando implementes otros tipos de usuario
+ }
+
+ // Determinar qué catálogos mostrar
+ $catalogos_visibles = [];
+ foreach ($catalogos_disponibles as $catalogo) {
+ $campo = $catalogo['campo_bd'];
+ $esObligatorio = in_array($catalogo['nombre'], ['Configuración', 'Cerrar sesión']);
+
+ if ($esObligatorio) {
+ // Catálogos obligatorios siempre visibles
+ $catalogo['visible'] = true;
+ $catalogo['obligatorio'] = true;
+ } else {
+ // Verificar si está activado en preferencias
+ $catalogo['visible'] = isset($preferencias[$campo]) && $preferencias[$campo] == 1;
+ $catalogo['obligatorio'] = false;
+ }
+
+ if ($catalogo['visible']) {
+ $catalogos_visibles[] = $catalogo;
+ }
+ }
+
+ sqlsrv_close($conn);
+
+ return [
+ 'catalogos_activos' => true,
+ 'catalogos' => $catalogos_visibles,
+ 'tipo_usuario' => $tipoUsuario
+ ];
+}
+
+// Función para obtener icono según el nombre del catálogo
+function obtenerIconoCatalogo($nombre) {
+ $iconos = [
+ 'Locaciones' => '📍',
+ 'Vinculación' => '🔗',
+ 'Transportistas' => '🚚',
+ 'Transportes' => '🚛',
+ 'Choferes' => '👨✈️',
+ 'Proveedores' => '🏭',
+ 'Productos frecuentes' => '⭐',
+ 'Solicitudes importación' => '📄',
+ 'Expediente electrónico' => '📁',
+ 'Configuración' => '⚙️',
+ 'Cerrar sesión' => '🚪'
+ ];
+
+ return $iconos[$nombre] ?? '📁';
+}
+
+// Función para el dashboard del importador
function dashboard()
{
- if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'importador') {
- header('Location: /IMPORTADORES/login');
+ $idUsuario = $_SESSION['usuario_id'] ?? null;
+
+ if (!$idUsuario) {
+ header("Location: /IMPORTADORES/login");
exit;
}
-
- $nombreImportador = $_SESSION['usuario_nombre'];
-
+
+ // Obtener catálogos visibles
+ $catalogosData = obtenerCatalogosVisibles($idUsuario);
+
include __DIR__ . '/../../views/importadores/dashboard_importador.php';
}
diff --git a/app/controllers/preferencias.php b/app/controllers/preferencias.php
index 3461d87..e4f95e4 100644
--- a/app/controllers/preferencias.php
+++ b/app/controllers/preferencias.php
@@ -540,4 +540,297 @@ function esDiaResumen($config_dias)
return in_array($dia_letra, array_map('trim', $dias_activos));
}
}
-?>
\ No newline at end of file
+
+function catalogos()
+{
+ $conn = getConnection();
+ $idUsuario = $_SESSION['usuario_id'] ?? null;
+
+ if (!$idUsuario) {
+ header("Location: /IMPORTADORES/login");
+ exit;
+ }
+
+ // Obtener configuración general de catalogos y tipo de usuario
+ $query = "SELECT preferencias_catalogos, tipo_usuario FROM usuarios_sistema WHERE id_usuario = ?";
+ $stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
+ if (!$stmt || !sqlsrv_execute($stmt)) {
+ die("Error al obtener configuración: " . print_r(sqlsrv_errors(), true));
+ }
+ $usuario = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
+ if (!$usuario) {
+ die("Usuario no encontrado");
+ }
+
+ $catalogos = $usuario['preferencias_catalogos'] ?? 0;
+ $tipoUsuario = $usuario['tipo_usuario'] ?? 'importador';
+ sqlsrv_free_stmt($stmt);
+
+ // Obtener preferencias específicas según el tipo de usuario
+ switch ($tipoUsuario) {
+ case 'importador':
+ $query = "SELECT * FROM preferencias_catalogos_usuario WHERE id_usuario = ?";
+ $stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
+ if ($stmt && sqlsrv_execute($stmt)) {
+ $preferenciasRow = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
+ sqlsrv_free_stmt($stmt);
+ } else {
+ $preferenciasRow = false;
+ }
+
+ // Si no existe registro, crear valores por defecto para importador
+ if (!$preferenciasRow) {
+ $preferencias = [
+ 'locaciones' => 0,
+ 'vinculacion' => 0,
+ 'transportistas' => 0,
+ 'transportes' => 0,
+ 'choferes' => 0,
+ 'proveedores' => 0,
+ 'productos_frecuentes' => 0,
+ 'solicitudes_importacion' => 0,
+ 'expediente_electronico' => 0,
+ 'configuracion' => 0,
+ 'cerrar_sesion' => 0
+ ];
+ } else {
+ $preferencias = $preferenciasRow;
+ }
+ break;
+
+ // case 'agente_aduanal':
+ // $query = "SELECT * FROM preferencias_catalogos_agente WHERE id_usuario = ?";
+ // $stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
+ // if ($stmt && sqlsrv_execute($stmt)) {
+ // $preferenciasRow = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
+ // sqlsrv_free_stmt($stmt);
+ // } else {
+ // $preferenciasRow = false;
+ // }
+
+ // Si no existe registro, crear valores por defecto para agente aduanal
+ // if (!$preferenciasRow) {
+ // $preferencias = [
+ // Aquí se definirán los campos específicos para agente aduanal
+ // cuando se creen las tablas correspondientes
+ // 'configuracion' => 0,
+ // 'cerrar_sesion' => 0
+ // ];
+ // } else {
+ // $preferencias = $preferenciasRow;
+ // }
+ // break;
+
+ // case 'admin_agencia':
+ // $query = "SELECT * FROM preferencias_catalogos_agencia WHERE id_usuario = ?";
+ // $stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
+ // if ($stmt && sqlsrv_execute($stmt)) {
+ // $preferenciasRow = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
+ // sqlsrv_free_stmt($stmt);
+ // } else {
+ // $preferenciasRow = false;
+ // }
+
+ // Si no existe registro, crear valores por defecto para admin agencia
+ // if (!$preferenciasRow) {
+ // $preferencias = [
+ // Aquí se definirán los campos específicos para admin agencia
+ // cuando se creen las tablas correspondientes
+ // 'configuracion' => 0,
+ // 'cerrar_sesion' => 0
+ // ];
+ // } else {
+ // $preferencias = $preferenciasRow;
+ // }
+ // break;
+
+ // case 'super_admin':
+ // $query = "SELECT * FROM preferencias_catalogos_admin WHERE id_usuario = ?";
+ // $stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
+ // if ($stmt && sqlsrv_execute($stmt)) {
+ // $preferenciasRow = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
+ // sqlsrv_free_stmt($stmt);
+ // } else {
+ // $preferenciasRow = false;
+ // }
+
+ // Si no existe registro, crear valores por defecto para super admin
+ // if (!$preferenciasRow) {
+ // $preferencias = [
+ // Aquí se definirán los campos específicos para super admin
+ // cuando se creen las tablas correspondientes
+ // 'configuracion' => 0,
+ // 'cerrar_sesion' => 0
+ // ];
+ // } else {
+ // $preferencias = $preferenciasRow;
+ // }
+ // break;
+
+ default:
+ // Tipo de usuario no reconocido, usar valores por defecto mínimos
+ $preferencias = [
+ 'configuracion' => 0,
+ 'cerrar_sesion' => 0
+ ];
+ break;
+ }
+
+ // Obtener tipos de catalogos disponibles según el tipo de usuario
+ $query = "SELECT nombre, descripcion, color FROM tipos_catalogos WHERE tipo_usuario = ? ORDER BY id";
+ $stmt = sqlsrv_prepare($conn, $query, [$tipoUsuario]);
+ if (!$stmt || !sqlsrv_execute($stmt)) {
+ die("Error al obtener tipos: " . print_r(sqlsrv_errors(), true));
+ }
+
+ // Crear array asociativo para la vista
+ $tipos = [];
+ while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
+ $tipos[$row['nombre']] = [
+ 'descripcion' => $row['descripcion'],
+ 'color' => $row['color']
+ ];
+ }
+ sqlsrv_free_stmt($stmt);
+ sqlsrv_close($conn);
+
+ include __DIR__ . '/../../views/preferencias/catalogos.php';
+}
+
+function guardarCatalogosAjax()
+{
+ // Verificar que sea una petición AJAX
+ if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) ||
+ $_SERVER['HTTP_X_REQUESTED_WITH'] !== 'XMLHttpRequest') {
+ http_response_code(400);
+ echo json_encode(['success' => false, 'message' => 'Petición no válida']);
+ exit;
+ }
+
+ // Obtener datos JSON del cuerpo de la petición
+ $input = json_decode(file_get_contents('php://input'), true);
+
+ if (!$input || !isset($input['tipo'])) {
+ http_response_code(400);
+ echo json_encode(['success' => false, 'message' => 'Datos no válidos']);
+ exit;
+ }
+
+ $conn = getConnection();
+ $idUsuario = $_SESSION['usuario_id'] ?? null;
+
+ if (!$idUsuario) {
+ http_response_code(401);
+ echo json_encode(['success' => false, 'message' => 'Usuario no autenticado']);
+ exit;
+ }
+
+ // Obtener tipo de usuario
+ $query = "SELECT tipo_usuario FROM usuarios_sistema WHERE id_usuario = ?";
+ $stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
+ if (!$stmt || !sqlsrv_execute($stmt)) {
+ http_response_code(500);
+ echo json_encode(['success' => false, 'message' => 'Error al obtener información del usuario']);
+ exit;
+ }
+ $usuario = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
+ $tipoUsuario = $usuario['tipo_usuario'] ?? 'importador';
+ sqlsrv_free_stmt($stmt);
+
+ try {
+ $tipo = $input['tipo'];
+
+ switch ($tipo) {
+ case 'catalogos_general':
+ // Actualizar preferencias generales de catálogos
+ $valor = isset($input['valor']) && $input['valor'] ? 1 : 0;
+
+ $query = "UPDATE usuarios_sistema SET preferencias_catalogos = ? WHERE id_usuario = ?";
+ $stmt = sqlsrv_prepare($conn, $query, [$valor, $idUsuario]);
+
+ if (!$stmt || !sqlsrv_execute($stmt)) {
+ throw new Exception('Error al actualizar preferencias generales');
+ }
+ sqlsrv_free_stmt($stmt);
+ break;
+
+ case 'tipo_catalogo':
+ // Actualizar preferencia específica de catálogo
+ if (!isset($input['nombre']) || !isset($input['valor'])) {
+ throw new Exception('Datos incompletos para tipo de catálogo');
+ }
+
+ $nombre = $input['nombre'];
+ $valor = $input['valor'] ? 1 : 0;
+
+ // Determinar la tabla según el tipo de usuario
+ $tabla = '';
+ switch ($tipoUsuario) {
+ case 'importador':
+ $tabla = 'preferencias_catalogos_usuario';
+ break;
+ case 'agente_aduanal':
+ $tabla = 'preferencias_catalogos_agente';
+ break;
+ case 'admin_agencia':
+ $tabla = 'preferencias_catalogos_agencia';
+ break;
+ case 'super_admin':
+ $tabla = 'preferencias_catalogos_admin';
+ break;
+ default:
+ throw new Exception('Tipo de usuario no válido');
+ }
+
+ // Verificar si existe un registro para este usuario
+ $query = "SELECT id_preferencia FROM $tabla WHERE id_usuario = ?";
+ $stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
+ if (!$stmt || !sqlsrv_execute($stmt)) {
+ throw new Exception('Error al verificar preferencias existentes');
+ }
+
+ $existe = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
+ sqlsrv_free_stmt($stmt);
+
+ if ($existe) {
+ // Actualizar registro existente
+ $query = "UPDATE $tabla SET [$nombre] = ? WHERE id_usuario = ?";
+ $stmt = sqlsrv_prepare($conn, $query, [$valor, $idUsuario]);
+ } else {
+ // Crear nuevo registro
+ $query = "INSERT INTO $tabla (id_usuario, [$nombre]) VALUES (?, ?)";
+ $stmt = sqlsrv_prepare($conn, $query, [$idUsuario, $valor]);
+ }
+
+ if (!$stmt || !sqlsrv_execute($stmt)) {
+ throw new Exception('Error al actualizar preferencia de catálogo');
+ }
+ sqlsrv_free_stmt($stmt);
+ break;
+
+ default:
+ throw new Exception('Tipo de operación no válido');
+ }
+
+ // Confirmar transacción
+ sqlsrv_commit($conn);
+
+ // Respuesta exitosa
+ echo json_encode([
+ 'success' => true,
+ 'message' => 'Preferencias actualizadas correctamente'
+ ]);
+
+ } catch (Exception $e) {
+ // Revertir transacción en caso de error
+ sqlsrv_rollback($conn);
+
+ http_response_code(500);
+ echo json_encode([
+ 'success' => false,
+ 'message' => $e->getMessage()
+ ]);
+ } finally {
+ sqlsrv_close($conn);
+ }
+}
\ No newline at end of file
diff --git a/catalogos.txt b/catalogos.txt
new file mode 100644
index 0000000..7929d2c
--- /dev/null
+++ b/catalogos.txt
@@ -0,0 +1,61 @@
+CREATE TABLE preferencias_catalogos_usuario (
+ id_preferencia INT IDENTITY(1,1) NOT NULL,
+ id_usuario INT NOT NULL,
+ locaciones BIT DEFAULT 0,
+ vinculacion BIT DEFAULT 0,
+ transportistas BIT DEFAULT 0,
+ transportes BIT DEFAULT 0,
+ choferes BIT DEFAULT 0,
+ proveedores BIT DEFAULT 0,
+ productos_frecuentes BIT DEFAULT 0,
+ solicitudes_importacion BIT DEFAULT 0,
+ expediente_electronico BIT DEFAULT 0,
+ configuracion BIT DEFAULT 0,
+ cerrar_sesion BIT DEFAULT 0,
+ FOREIGN KEY (id_usuario) REFERENCES usuarios_sistema(id_usuario)
+);
+
+ALTER TABLE usuarios_sistema
+ADD [preferencias_catalogos] BIT DEFAULT 1;
+
+CREATE TABLE tipos_catalogos (
+ id INT PRIMARY KEY IDENTITY,
+ tipo_usuario VARCHAR(20) NOT NULL,
+ nombre VARCHAR(255) NOT NULL,
+ descripcion VARCHAR(500) NULL,
+ color VARCHAR(20) NOT NULL,
+ ruta VARCHAR(100) NOT NULL,
+ accion VARCAHR(50) NOT NULL
+);
+
+INSERT INTO tipos_catalogos (tipo_usuario, nombre, descripcion, color, ruta, accion) VALUES
+('importador', 'Locaciones', 'Visualiza las locaciones registradas.', 'lime', '/IMPORTADORES/importadores/lista', 'Ver locaciones'),
+('importador', 'Vinculación', 'Visualiza o establece nuevas vinculaciones con agencias aduanales.', 'teal', '/IMPORTADORES/viculaciones/vinculacionesUsuario', 'Ver vinculaciones'),
+('importador', 'Transportistas', 'Agrega o consulta los choferes que colaboran contigo.', 'success', '/IMPORTADORES/transportistas/lista', 'Ver transportistas'),
+('importador', 'Transportes', 'Gestiona y carga tus unidades de transporte.', 'info', '/IMPORTADORES/transportes/lista', 'Ver transportes'),
+('importador', 'Choferes', 'Gestiona y carga a tus choferes.', 'cyan', '/IMPORTADORES/choferes/lista', 'Ver choferes'),
+('importador', 'Proveedores', 'Agrega tus proveedores.', 'primary', '/IMPORTADORES/proveedores/crear', 'Nuevo proveedor'),
+('importador', 'Productos frecuentes', 'Agrega productos frecuentes de tu interez.', 'violet', '/IMPORTADORES/productos_frecuentes/alta', 'Nuevo producto'),
+('importador', 'Solicitudes importación', 'Inicia nuevas solicitudes de pedimentos.', 'indigo', '/IMPORTADORES/solicitud_importacion/crear', 'Nueva solicitud'),
+('importador', 'Expediente electrónico', 'Revisa el expediente electrónico para tus solicitudes.', 'orange', '/IMPORTADORES/expediente/index', 'Ver expediente'),
+('importador', 'Configuración', 'Administra los datos de tu empresa y preferencias.', 'warning', '/IMPORTADORES/configuracion', 'Ir a configuración'),
+('importador', 'Cerrar sesión', 'Salir del sistema de forma segura.', 'danger', '/IMPORTADORES/sistemas/logout', 'Cerrar sesión');
+
+
+
+UPDATE usuarios_sistema
+SET preferencias_catalogos = 1
+WHERE preferencias_catalogos IS NULL OR preferencias_catalogos = 0;
+
+-- 2. Insertar en preferencias_catalogos_usuario solo para los que aún no tienen registro
+INSERT INTO preferencias_catalogos_usuario (
+ id_usuario, locaciones, vinculacion, transportistas, transportes, choferes, proveedores,
+ productos_frecuentes, solicitudes_importacion, expediente_electronico, configuracion, cerrar_sesion
+)
+SELECT u.id_usuario, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+FROM usuarios_sistema u
+WHERE u.tipo_usuario = 'importador'
+ AND NOT EXISTS (
+ SELECT 1 FROM preferencias_catalogos_usuario p
+ WHERE p.id_usuario = u.id_usuario
+ );
\ No newline at end of file
diff --git a/views/importadores/dashboard_importador.php b/views/importadores/dashboard_importador.php
index 2ac5af0..d5c7dff 100644
--- a/views/importadores/dashboard_importador.php
+++ b/views/importadores/dashboard_importador.php
@@ -25,6 +25,15 @@
.btn-teal { background-color: #20c997; color: white; }
.btn-teal:hover { background-color: #4dd4ac; color: black; }
.text-teal { color: #20c997; }
+ .btn-lime { background-color: #84cc16; color: white; }
+ .text-lime { color: #84cc16; }
+ .btn-lime:hover { background-color: #65a30d; color: white; }
+ .btn-cyan { background-color: #06b6d4; color: white; }
+ .text-cyan { color: #06b6d4; }
+ .btn-cyan:hover { background-color: #0891b2; color: white; }
+ .btn-violet { background-color: #8b5cf6; color: white; }
+ .text-violet { color: #8b5cf6; }
+ .btn-violet:hover { background-color: #7c3aed; color: white; }
/* A partir de dispositivos medianos (>=768px), deja espacio lateral */
@media (min-width: 768px) { .content { margin-left: 250px; /* Ancho del sidebar */ } }
/* En móviles, sin margen lateral */
@@ -42,92 +51,73 @@
📦 Panel del Importador
-
-
-
+
+
+
+
+
+
+ = obtenerIconoCatalogo($catalogo['nombre']) ?> = $catalogo['nombre'] ?>
+
+
= $catalogo['descripcion'] ?>
+
+ = $catalogo['accion'] ?>
+
+
+
+
+
+
-
-
-
-
Transportistas
-
Agrega o consulta los choferes que colaboran contigo.
-
- Ver transportistas
-
+
+
+
+
+
+
💡 Consejo
+
Parece que no tienes catálogos activados. Puedes activar los que necesites desde tus preferencias.
+
+ Configurar Catálogos
+
+
+
-
-
-
-
-
Solicitudes de Importación
-
Inicia nuevas solicitudes de pedimentos.
-
- Nueva solicitud
-
+
+
+
+
+
+
+
+
🔒 Catálogos Desactivados
+
Los catálogos están desactivados en tus preferencias. Solo tienes acceso a las funciones básicas del sistema.
+
+ Activar Catálogos
+
+
+
+
+
+
+
+
+ = obtenerIconoCatalogo($catalogo['nombre']) ?> = $catalogo['nombre'] ?>
+
+
= $catalogo['descripcion'] ?>
+
+ = $catalogo['accion'] ?>
+
+
+ Función básica
+
+
+
+
-
-
-
-
-
-
Configuración
-
Administra los datos de tu empresa y preferencias.
-
- Configurar
-
-
-
-
-
-
-
-
-
Vinculaciones
-
Visualiza o establece nuevas vinculaciones con agencias aduanales.
-
- Ver vinculaciones
-
-
-
-
-
-
-
Cerrar sesión
-
Salir del sistema de forma segura.
-
Logout
-
-
-
+