Files
MVE/views/configuracion/dashboard_configuracion.php
2025-07-18 12:21:26 -06:00

344 lines
18 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php include __DIR__ . '/../partials/sidebar_configuracion.php'; ?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Dashboard | Configuración</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<!-- Font Awesome -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
<!-- Animate.css para animaciones adicionales -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css">
<style>
body { font-family: 'Segoe UI', sans-serif; background-color: #f4f6f9; }
.sidebar { width: 220px; height: 100vh; background-color: #343a40; position: fixed; top: 0; left: 0; padding-top: 56px; z-index: 1040; }
.sidebar .nav-link { font-weight: bold; color: white; transition: all 0.3s ease; }
.sidebar .nav-link:hover,
.sidebar .nav-link.active { background-color: #495057; color: #fff; }
.content { margin-top: 56px; padding: 40px 20px; position: relative; z-index: 1; background-color: #f4f6f9; transition: margin-left 0.3s ease; }
.navbar { position: fixed; top: 0; width: 100%; z-index: 1050; }
/* 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 */
@media (max-width: 767.98px) {
.content { margin-left: 0; }
.sidebar .nav-link { font-weight: normal; color: #343a40; background-color: transparent; }
.sidebar .nav-link:hover,
.sidebar .nav-link.active { background-color: #e9ecef; color: #212529; }
}
.card { border-radius: 12px; }
/* Animaciones personalizadas */
.card-hover { transition: all 0.3s ease; cursor: pointer; }
.card-hover:hover { transform: translateY(-8px) scale(1.02); box-shadow: 0 1rem 2rem rgba(0, 0, 0, 0.15) !important; }
.btn-pulse { animation: pulse 2s infinite; }
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.05); }
100% { transform: scale(1); }
}
.fade-in-up { animation: fadeInUp 0.8s ease-out; }
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(30px); }
to { opacity: 1; transform: translateY(0); }
}
/* Responsive animations */
@media (max-width: 768px) { .card-hover:hover { transform: translateY(-4px) scale(1.01); } }
/* Efecto de glow para elementos activos */
.btn.active { box-shadow: 0 0 20px rgba(var(--bs-primary-rgb), 0.5); }
/* Animación para el título */
.title-glow { text-shadow: 0 0 10px rgba(0, 123, 255, 0.3); }
/* Efecto para botones */
.btn-animated { transition: all 0.3s ease; position: relative; overflow: hidden; }
.btn-animated:hover { transform: translateY(-2px); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); }
.btn-animated::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); transition: left 0.5s; }
.btn-animated:hover::before { left: 100%; }
label {font-weight: bold; }
.section-header { background-color: #e9ecef; padding: 10px 15px; margin: 0 0 20px 0; border-radius: 8px 8px 0 0; font-weight: bold; color: #495057; }
/* ========== ANIMACIONES PARA INPUTS TEXTO ========== */
.form-control:not(.no-animation) { transition: all 0.3s ease; border: 2px solid #dee2e6; position: relative; }
.form-control:not(.no-animation).shake { animation: shake 0.5s ease-in-out; }
@keyframes shake {
0%, 100% { transform: translateX(0); }
25% { transform: translateX(-5px); }
75% { transform: translateX(5px); }
}
/* Animación para los campos del formulario */
.form-group-animated { opacity: 0; transform: translateY(20px); animation: slideUp 0.6s ease-out forwards; }
.form-group-animated:nth-child(1) { animation-delay: 0.1s; }
.form-group-animated:nth-child(2) { animation-delay: 0.2s; }
.form-group-animated:nth-child(3) { animation-delay: 0.3s; }
.form-group-animated:nth-child(4) { animation-delay: 0.4s; }
.form-group-animated:nth-child(5) { animation-delay: 0.5s; }
.form-group-animated:nth-child(6) { animation-delay: 0.6s; }
.form-group-animated:nth-child(7) { animation-delay: 0.7s; }
.form-group-animated:nth-child(8) { animation-delay: 0.8s; }
.form-group-animated:nth-child(9) { animation-delay: 0.9s; }
.form-group-animated:nth-child(10) { animation-delay: 1.0s; }
@keyframes slideUp { to { opacity: 1; transform: translateY(0); } }
</style>
</head>
<body>
<div class="content">
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow"> Información General</h4>
<?php if (isset($datos['tipo_usuario']) && $datos['tipo_usuario'] === 'importador'): ?>
<div class="card shadow-sm p-4 mb-4 bg-white card-hover position-relative h-auto fade-in-up">
<div class="section-header form-group-animated">👤 Información Personal</div>
<form>
<div class="row mb-3">
<label class="col-md-2 col-form-label form-group-animated">Clave:</label>
<div class="col-md-3 form-group-animated">
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['clave'] ?? '') ?>" disabled>
</div>
<div class="col-md-3"></div>
<label class="col-md-2 col-form-label form-group-animated">Tipo de identificador:</label>
<div class="col-md-2 form-group-animated">
<select name="tipo_identificador" class="form-control" disabled>
<option value="">-- Selecciona una opción --</option>
<option value="1" <?= ($datos['tipo_identificador'] ?? '') == '1' ? 'selected' : '' ?>>1 - RFC</option>
<option value="2" <?= ($datos['tipo_identificador'] ?? '') == '2' ? 'selected' : '' ?>>2 - CURP</option>
<option value="3" <?= ($datos['tipo_identificador'] ?? '') == '3' ? 'selected' : '' ?>>3 - SIN TAX ID</option>
</select>
</div>
</div>
<div class="row mb-3">
<label class="col-md-2 col-form-label form-group-animated">Nombre:</label>
<div class="col-md-10 form-group-animated">
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['nombre'] ?? '') ?>" disabled>
</div>
</div>
<div class="row mb-3">
<label class="col-md-2 col-form-label form-group-animated">RFC:</label>
<div class="col-md-3">
<input type="text" class="form-control form-group-animated" value="<?= htmlspecialchars($datos['rfc'] ?? '') ?>" disabled>
</div>
<div class="col-md-1"></div>
<label class="col-md-1 col-form-label form-group-animated">CURP:</label>
<div class="col-md-5 form-group-animated">
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['curp'] ?? '') ?>" disabled>
</div>
</div>
<div class="row mb-3">
<label class="col-md-2 col-form-label form-group-animated">Calle:</label>
<div class="col-md-10 form-group-animated">
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['calle'] ?? '') ?>" disabled>
</div>
</div>
<div class="row mb-3">
<label class="col-md-2 col-form-label form-group-animated">Núm. Exterior:</label>
<div class="col-md-2 form-group-animated">
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['num_exterior'] ?? '') ?>" disabled>
</div>
<div class="col-md-4"></div>
<label class="col-md-2 col-form-label form-group-animated">Núm. Interior:</label>
<div class="col-md-2 form-group-animated">
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['num_interior'] ?? '') ?>" disabled>
</div>
</div>
<div class="row mb-3">
<label class="col-md-2 col-form-label form-group-animated">Ciudad / Localidad:</label>
<div class="col-md-3 form-group-animated">
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['ciudad'] ?? '') ?>" disabled>
</div>
<div class="col-md-1"></div>
<label class="col-md-1 col-form-label form-group-animated">Colonia:</label>
<div class="col-md-5 form-group-animated">
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['colonia'] ?? '') ?>" disabled>
</div>
</div>
<div class="row mb-3">
<label class="col-md-2 col-form-label form-group-animated">País:</label>
<div class="col-md-3 form-group-animated">
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['pais'] ?? '') ?>" disabled>
</div>
<div class="col-md-3"></div>
<label class="col-md-2 col-form-label form-group-animated">Código Postal:</label>
<div class="col-md-2 form-group-animated">
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['codigo_postal'] ?? '') ?>" disabled>
</div>
</div>
<div class="row mb-3">
<label class="col-md-2 col-form-label form-group-animated">Municipio:</label>
<div class="col-md-4 form-group-animated">
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['municipio'] ?? '') ?>" disabled>
</div>
<div class="col-md-1"></div>
<label class="col-md-1 col-form-label form-group-animated">Estado:</label>
<div class="col-md-4 form-group-animated">
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['estado'] ?? '') ?>" disabled>
</div>
</div>
<div class="row mb-3">
<label class="col-md-2 col-form-label form-group-animated">Teléfono:</label>
<div class="col-md-5 form-group-animated">
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['telefono'] ?? '') ?>" disabled>
</div>
<div class="col-md-1"></div>
<label class="col-md-1 col-form-label form-group-animated">Fax:</label>
<div class="col-md-3 form-group-animated">
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['fax'] ?? '') ?>" disabled>
</div>
</div>
<div class="row mb-3">
<label class="col-md-2 col-form-label form-group-animated">Correo:</label>
<div class="col-md-10 form-group-animated">
<input type="email" class="form-control" value="<?= htmlspecialchars($datos['correo'] ?? '') ?>" disabled>
</div>
</div>
<div class="row mb-3">
<label class="col-md-2 col-form-label form-group-animated">Observaciones:</label>
<div class="col-md-10 form-group-animated">
<textarea class="form-control" rows="3" disabled><?= htmlspecialchars($datos['observaciones'] ?? '') ?></textarea>
</div>
</div>
<div style="display: flex; justify-content: right;" class="form-group-animated">
<a href="/IMPORTADORES/configuracion/editar" class="btn btn-success mb-3 mt-auto w-auto btn-animated">✏️ Editar Información</a>
</div>
</form>
</div>
<?php elseif (isset($datos['tipo_usuario']) && in_array($datos['tipo_usuario'], ['admin_agencia', 'agente_aduanal'])): ?>
<div class="card shadow-sm p-4 mb-4 bg-white fade-in-up">
<div class="section-header form-group-animated">🏢 Información de Agencia Aduanal</div>
<form>
<div class="row mb-3">
<label class="col-md-2 col-form-label form-group-animated">Nombre Agencia:</label>
<div class="col-md-10 form-group-animated">
<input type="text" class="form-control" value="<?= htmlspecialchars(decrypt($datos['nombre_agencia'] ?? '')) ?>" disabled>
</div>
</div>
<div class="row mb-3">
<label class="col-md-2 col-form-label form-group-animated">RFC:</label>
<div class="col-md-3 form-group-animated">
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['rfc_agencia'] ?? '') ?>" disabled>
</div>
</div>
<div class="row mb-3">
<label class="col-md-2 col-form-label form-group-animated">Teléfono:</label>
<div class="col-md-3 form-group-animated">
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['telefono_agencia'] ?? '') ?>" disabled>
</div>
<div class="col-md-3"></div>
<label class="col-md-1 col-form-label form-group-animated">Email:</label>
<div class="col-md-3 form-group-animated">
<input type="email" class="form-control" value="<?= htmlspecialchars(decrypt($datos['email_agencia'] ?? '')) ?>" disabled>
</div>
</div>
<div class="row mb-3">
<label class="col-md-2 col-form-label form-group-animated">Dirección:</label>
<div class="col-md-10 form-group-animated">
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['direccion_agencia'] ?? '') ?>" disabled>
</div>
</div><hr>
<!-- Información personal del usuario (para referencia) -->
<div class="section-header mt-4 form-group-animated">👤 Mi Información Personal</div>
<div class="row mb-3">
<label class="col-md-2 col-form-label form-group-animated">Nombre:</label>
<div class="col-md-4 form-group-animated">
<input type="text" class="form-control" value="<?= htmlspecialchars(decrypt($datos['nombre'] ?? '')) ?>" disabled>
</div>
</div>
<div class="row mb-3">
<label class="col-md-2 col-form-label form-group-animated">Correo:</label>
<div class="col-md-10 form-group-animated">
<input type="email" class="form-control" value="<?= htmlspecialchars(decrypt($datos['correo'] ?? '')) ?>" disabled>
</div>
</div>
<?php if (isset($datos['fecha_asignacion']) && $datos['fecha_asignacion']): ?>
<div class="row mb-3">
<label class="col-md-2 col-form-label form-group-animated">Fecha de Asignación:</label>
<div class="col-md-3 form-group-animated">
<?php
// Handle both DateTime objects and string dates
if ($datos['fecha_asignacion'] instanceof DateTime) {
$fecha_formateada = $datos['fecha_asignacion']->setTimezone(new DateTimeZone('America/Mexico_City'))->format('d/m/Y H:i');
} else {
$fecha_formateada = date('d/m/Y H:i', strtotime($datos['fecha_asignacion']));
}
?>
<input type="text" class="form-control" value="<?= htmlspecialchars($fecha_formateada) ?>" disabled>
</div>
</div>
<?php endif; ?>
</form>
</div>
<?php elseif (isset($datos['tipo_usuario']) && $datos['tipo_usuario'] === 'super_admin'): ?>
<div class="card shadow-sm p-4 mb-4 bg-white fade-in-up">
<div class="section-header form-group-animated">🔧 Información del Administrador</div>
<form>
<div class="row mb-3">
<label class="col-md-1 col-form-label form-group-animated">Nombre:</label>
<div class="col-md-4 form-group-animated">
<!-- Para super_admin, NO desencriptar - usar directamente -->
<input type="text" class="form-control" value="<?= htmlspecialchars(decrypt($datos['nombre'] ?? '')) ?>" disabled>
</div>
<div class="col-md-3"></div>
<label class="col-md-1 col-form-label form-group-animated">Tipo de Usuario:</label>
<div class="col-md-3 form-group-animated">
<input type="text" class="form-control" value="Super Administrador" disabled>
</div>
</div>
<div class="row mb-3">
<label class="col-md-1 col-form-label form-group-animated">Correo:</label>
<div class="col-md-11 form-group-animated">
<!-- Para super_admin, NO desencriptar - usar directamente -->
<input type="email" class="form-control" value="<?= htmlspecialchars(decrypt($datos['correo'] ?? '')) ?>" disabled>
</div>
</div>
<!-- Información adicional específica de super_admin -->
<div class="row mb-3">
<label class="col-md-1 col-form-label form-group-animated">Privilegios:</label>
<div class="col-md-11 form-group-animated">
<textarea class="form-control" rows="2" disabled>Acceso completo al sistema - Gestión de usuarios, agencias y configuración general</textarea>
</div>
</div>
</form>
</div>
<?php else: ?>
<div class="alert alert-warning">
<h5>⚠️ Información no disponible</h5>
<p>No se pudo cargar la información para el tipo de usuario:
<strong><?= htmlspecialchars($datos['tipo_usuario'] ?? 'Desconocido') ?></strong>
</p>
<p class="mb-0">
<small class="text-muted">Tipos de usuario válidos: admin_agencia, agente_aduanal, super_admin, importador</small><br>
<small class="text-muted">
Datos disponibles:
<?= is_array($datos) ? implode(', ', array_keys($datos)) : 'Sin datos' ?>
</small>
</p>
</div>
<?php endif; ?>
</div>
<script>
<?php if (isset($_GET['updated']) && $_GET['updated'] === 'ok'): ?>
Swal.fire({ icon: 'success', title: 'Información actualizada', text: 'Los datos se modificaron correctamente.', confirmButtonColor: '#198754' });
<?php endif; ?>
</script>
</body>
</html>