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

-
-
-
-
Transportes
-

Gestiona y carga tus unidades de transporte.

- - Ver transportes - -
+ +
+ +
+
+
+ +
+

+ + + + + +
+
+
- -
-
-
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 + +
+ + + +
+
+
+ +
+

+ + + + + Función básica + +
+
+
- -
-
-
Proveedores
-

Agrega tus proveedores.

- - Nuevo proveedor - -
-
- -
-
-
Configuración
-

Administra los datos de tu empresa y preferencias.

- - Configurar - -
-
- -
-
-
Locaciones
-

Visualiza las locaciones registradas.

- - Ver locaciones - -
-
- -
-
-
Vinculaciones
-

Visualiza o establece nuevas vinculaciones con agencias aduanales.

- - Ver vinculaciones - -
-
- -
-
-
Cerrar sesión
-

Salir del sistema de forma segura.

- Logout -
-
-
+
diff --git a/views/partials/sidebar_configuracion.php b/views/partials/sidebar_configuracion.php index 5728c8f..d8812d8 100644 --- a/views/partials/sidebar_configuracion.php +++ b/views/partials/sidebar_configuracion.php @@ -233,7 +233,7 @@ function obtenerUrlPermiso($permiso) { role="button" aria-expanded="true" aria-controls="submenuPreferencias" onclick=""> ✅ Preferencias - 1 + 2 ✅ Preferencias - 1 + 2 @@ -377,7 +381,7 @@ function obtenerUrlPermiso($permiso) { role="button" aria-expanded="true" aria-controls="submenuPreferencias" onclick=""> ✅ Preferencias - 1 + 2 ✅ Preferencias - 1 + 2 diff --git a/views/partials/sidebar_importador.php b/views/partials/sidebar_importador.php index 0b67921..2794077 100644 --- a/views/partials/sidebar_importador.php +++ b/views/partials/sidebar_importador.php @@ -70,7 +70,7 @@