Sidebars - animaciones
This commit is contained in:
@@ -1390,27 +1390,4 @@ function suspenderAgencia()
|
||||
|
||||
header("Location: /IMPORTADORES/administrador/agenciasActivas?success=status_$accion");
|
||||
exit;
|
||||
}
|
||||
|
||||
function configuracion()
|
||||
{
|
||||
$conn = getConnection();
|
||||
|
||||
$id_usuario = $_SESSION['usuario_id'] ?? null;
|
||||
|
||||
if (!$id_usuario) {
|
||||
die("ID de usuario no disponible en la sesión.");
|
||||
}
|
||||
|
||||
$sql = "SELECT * FROM informacion_general WHERE id_usuario = ?";
|
||||
$params = [$id_usuario];
|
||||
$stmt = sqlsrv_query($conn, $sql, $params);
|
||||
|
||||
if ($stmt === false) {
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
|
||||
$datos = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
|
||||
|
||||
include __DIR__ . '/../../views/configuracion/dashboard_configuracion.php';
|
||||
}
|
||||
@@ -18,6 +18,8 @@ function dashboard()
|
||||
exit;
|
||||
}
|
||||
|
||||
$idUsuario = $_SESSION['usuario_id'] ?? null;
|
||||
|
||||
include __DIR__ . '/../../views/agencias/dashboard_agencias.php';
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ function dashboard()
|
||||
exit;
|
||||
}
|
||||
|
||||
$nombreAgente = $_SESSION['usuario_nombre'];
|
||||
$idUsuario = $_SESSION['usuario_id'] ?? null;
|
||||
|
||||
include __DIR__ . '/../../views/agentes/dashboard_agentes.php';
|
||||
}
|
||||
|
||||
@@ -124,18 +124,17 @@ function guardar()
|
||||
}
|
||||
|
||||
// Captura los datos del formulario
|
||||
$campos = [
|
||||
'clave', 'tipo_identificador', 'curp', 'calle', 'num_exterior', 'num_interior',
|
||||
'ciudad', 'colonia', 'pais', 'codigo_postal', 'municipio', 'estado', 'telefono', 'fax', 'observaciones'
|
||||
];
|
||||
|
||||
$campos = [
|
||||
'clave', 'tipo_identificador', 'curp', 'calle', 'num_exterior', 'num_interior',
|
||||
'ciudad', 'colonia', 'pais', 'codigo_postal', 'municipio', 'estado', 'telefono', 'fax', 'observaciones'
|
||||
];
|
||||
$sql_parts = [];
|
||||
$params = [];
|
||||
|
||||
foreach ($campos as $campo) {
|
||||
if (isset($_POST[$campo]) && $_POST[$campo] !== '') {
|
||||
$sql_parts[] = "$campo = ?";
|
||||
$params[] = $_POST[$campo];
|
||||
$params[] = $_POST[$campo];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -218,7 +217,7 @@ function guardar()
|
||||
// Confirmar transacción
|
||||
sqlsrv_commit($conn);
|
||||
|
||||
header("Location: /IMPORTADORES/configuracion/index");
|
||||
header("Location: /IMPORTADORES/configuracion/index?updated=ok");
|
||||
exit;
|
||||
|
||||
} catch (Exception $e) {
|
||||
|
||||
@@ -733,22 +733,22 @@ function actualizar()
|
||||
$id_agencia
|
||||
];
|
||||
$sqlU = "UPDATE dbo.solicitud_importacion_factura SET
|
||||
aduana = ?,
|
||||
anexo22_apendice = ?,
|
||||
numero_factura = ?,
|
||||
fecha_factura = ?,
|
||||
incoterm = ?,
|
||||
pais_proveedor = ?,
|
||||
tipo_moneda = ?,
|
||||
valor_factura = ?,
|
||||
vinculacion = ?,
|
||||
transportista_id = ?,
|
||||
chofer_id = ?,
|
||||
foto_solicitud_url = ?,
|
||||
status = ?,
|
||||
proveedor_clave = ?,
|
||||
patente_id = ?,
|
||||
updated_at = GETDATE()
|
||||
aduana = ?,
|
||||
anexo22_apendice = ?,
|
||||
numero_factura = ?,
|
||||
fecha_factura = ?,
|
||||
incoterm = ?,
|
||||
pais_proveedor = ?,
|
||||
tipo_moneda = ?,
|
||||
valor_factura = ?,
|
||||
vinculacion = ?,
|
||||
transportista_id = ?,
|
||||
chofer_id = ?,
|
||||
foto_solicitud_url = ?,
|
||||
status = ?,
|
||||
proveedor_clave = ?,
|
||||
patente_id = ?,
|
||||
updated_at = GETDATE()
|
||||
WHERE id_solicitud = ?
|
||||
AND id_importador = ?
|
||||
AND id_agencia = ?
|
||||
@@ -1056,11 +1056,11 @@ function ajax_lista()
|
||||
|
||||
$dataList[] = [
|
||||
$clave,
|
||||
htmlspecialchars($p['Nombre'] ?? '', ENT_QUOTES),
|
||||
htmlspecialchars($p['RFC'] ?? '', ENT_QUOTES),
|
||||
htmlspecialchars($p['Ciudad'] ?? '', ENT_QUOTES),
|
||||
htmlspecialchars($p['Telefono']?? '', ENT_QUOTES),
|
||||
htmlspecialchars($direccion ?? '', ENT_QUOTES),
|
||||
htmlspecialchars($p['Nombre'] ?? '', ENT_QUOTES),
|
||||
htmlspecialchars($p['RFC'] ?? '', ENT_QUOTES),
|
||||
htmlspecialchars($p['Ciudad'] ?? '', ENT_QUOTES),
|
||||
htmlspecialchars($p['Telefono'] ?? '', ENT_QUOTES),
|
||||
htmlspecialchars($direccion ?? '', ENT_QUOTES),
|
||||
// Acciones
|
||||
"<a href=\"/IMPORTADORES/proveedores/editar?clave=" . rawurlencode($clave) . "\" class=\"btn btn-sm btn-primary\">✏️</a>
|
||||
<button class=\"btn btn-sm btn-danger\" onclick=\"confirmDelete('{$clave}')\">🗑️</button>"
|
||||
@@ -1300,27 +1300,27 @@ function update_status()
|
||||
|
||||
// 4.5) Construir el arreglo PHP con la misma estructura JSON que envías
|
||||
$payload = [
|
||||
"id_solicitud" => intval($solicitud['id_solicitud']),
|
||||
"id_importador" => intval($solicitud['id_importador']),
|
||||
"aduana" => strval($solicitud['aduana']),
|
||||
"patente" => strval($solicitud['patente']),
|
||||
"anexo22_apendice" => strval($solicitud['anexo22_apendice']),
|
||||
"numero_factura" => strval($solicitud['numero_factura']),
|
||||
"fecha_factura" => $fechaFactura,
|
||||
"numero_pedimento" => "", // La API lo rellenará
|
||||
"incoterm" => strval($solicitud['incoterm']),
|
||||
"pais_proveedor" => strval($solicitud['pais_proveedor']),
|
||||
"tipo_moneda" => strval($solicitud['tipo_moneda']),
|
||||
"valor_factura" => floatval($solicitud['valor_factura']),
|
||||
"vinculacion" => intval($solicitud['vinculacion']),
|
||||
"transportista_id" => intval($solicitud['transportista_id']),
|
||||
"created_at" => $createdAt,
|
||||
"updated_at" => $updatedAt,
|
||||
"transporte_id" => null,
|
||||
"chofer_id" => intval($solicitud['chofer_id']),
|
||||
"foto_solicitud_url"=> strval($solicitud['foto_solicitud_url']),
|
||||
"proveedor_clave" => strval($solicitud['proveedor_clave']),
|
||||
"partidas" => $partidas
|
||||
"id_solicitud" => intval($solicitud['id_solicitud']),
|
||||
"id_importador" => intval($solicitud['id_importador']),
|
||||
"aduana" => strval($solicitud['aduana']),
|
||||
"patente" => strval($solicitud['patente']),
|
||||
"anexo22_apendice" => strval($solicitud['anexo22_apendice']),
|
||||
"numero_factura" => strval($solicitud['numero_factura']),
|
||||
"fecha_factura" => $fechaFactura,
|
||||
"numero_pedimento" => "", // La API lo rellenará
|
||||
"incoterm" => strval($solicitud['incoterm']),
|
||||
"pais_proveedor" => strval($solicitud['pais_proveedor']),
|
||||
"tipo_moneda" => strval($solicitud['tipo_moneda']),
|
||||
"valor_factura" => floatval($solicitud['valor_factura']),
|
||||
"vinculacion" => intval($solicitud['vinculacion']),
|
||||
"transportista_id" => intval($solicitud['transportista_id']),
|
||||
"created_at" => $createdAt,
|
||||
"updated_at" => $updatedAt,
|
||||
"transporte_id" => null,
|
||||
"chofer_id" => intval($solicitud['chofer_id']),
|
||||
"foto_solicitud_url" => strval($solicitud['foto_solicitud_url']),
|
||||
"proveedor_clave" => strval($solicitud['proveedor_clave']),
|
||||
"partidas" => $partidas
|
||||
];
|
||||
$jsonPayload = json_encode($payload);
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">✅ Agencias Activas</h4>
|
||||
<!-- TABLA DE AGENCIAS -->
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-hover align-middle" id="tabla-agencias-activas">
|
||||
<thead>
|
||||
|
||||
@@ -129,7 +129,7 @@
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">🏪 Alta de Agencias Aduanales</h4>
|
||||
|
||||
<!-- FORMULARIO -->
|
||||
<div class="card p-4 mb-5 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-4 mb-5 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<form action="/IMPORTADORES/administrador/guardar_agencia" method="POST" id="formAltaAgencias">
|
||||
<h5 class="mb-3">➕ Nueva Agencia Aduanal</h5>
|
||||
<div class="row g-3">
|
||||
|
||||
@@ -163,7 +163,7 @@
|
||||
<div class="content">
|
||||
<h3 class="mb-4 animate__animated animate__fadeInDown title_glow">👥 Alta de Usuarios</h3>
|
||||
<!-- FORMULARIO -->
|
||||
<div class="card p-4 mb-4 shadow-sm bg-white card-hover position-relative h-auto">
|
||||
<div class="card p-4 mb-4 shadow-sm bg-white card-hover position-relative h-auto fade-in-up">
|
||||
<form action="/IMPORTADORES/administrador/guardar_usuario" method="POST" id="formAltaUsuarios">
|
||||
<h5 class="mb-3">➕ Nuevo Usuario</h5>
|
||||
<div class="row g-3">
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">✅ Aprobación de Agencias Aduanales</h4>
|
||||
|
||||
<!-- TABLA DE AGENCIAS -->
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<h5 class="mb-3">🏪 Agencias Solicitantes</h5>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-hover align-middle" id="tabla-agencias-pendientes">
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">✅ Aprobación de Usuarios</h4>
|
||||
<!-- TABLA DE USUARIOS -->
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<h5 class="mb-3">👥 Usuarios Solicitantes</h5>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-hover align-middle" id="tabla-usuarios-pendientes">
|
||||
|
||||
@@ -38,6 +38,9 @@
|
||||
.btn-violet { background-color: #8b5cf6; color: white; }
|
||||
.text-violet { color: #8b5cf6; }
|
||||
.btn-violet:hover { background-color: #7c3aed; color: white; }
|
||||
.btn-lila { background-color: #c4b5fd; /* violeta claro */ color: white; border: none; }
|
||||
.btn-lila:hover { background-color: #a78bfa; /* tono ligeramente más fuerte */ color: white; }
|
||||
.text-lila { color: #c4b5fd; }
|
||||
/* 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 */
|
||||
@@ -49,22 +52,39 @@
|
||||
}
|
||||
.card { border-radius: 12px; }
|
||||
/* Animaciones personalizadas */
|
||||
.card-hover { transition: all 0.3s ease; }
|
||||
.card-hover:hover { transform: translateY(-5px); box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; }
|
||||
.card-hover { transition: all 0.3s ease; cursor: pointer; }
|
||||
.card-hover:hover { transform: translateY(-8px) saqcle(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.6s ease-out; }
|
||||
.fade-in-up { animation: fadeInUp 0.8s ease-out; }
|
||||
@keyframes fadeInUp {
|
||||
from { opacity: 0; transform: translateY(30px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
.loading-spinner { display: none; }
|
||||
/* Botón con efecto de loading */
|
||||
.btn-loading { position: relative; color: transparent !important; pointer-events: none; }
|
||||
.btn-loading::after { content: ''; position: absolute; width: 20px; height: 20px; top: 50%; left: 50%; margin-left: -10px;
|
||||
margin-top: -10px; border: 2px solid #fff; border-radius: 50%; border-top-color: transparent; animation: spin 1s linear infinite; }
|
||||
.btn-loading .loading-spinner { display: inline-block; }
|
||||
.btn-loading .btn-text { display: none; }
|
||||
@keyframes spin { to { transform: rotate(360deg); } }
|
||||
/* 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%; }
|
||||
/* Animación para alertas */
|
||||
.alert-animated { animation: slideInDown 0.5s ease-out; }
|
||||
@keyframes slideInDown {
|
||||
@@ -76,7 +96,7 @@
|
||||
@keyframes borderGlow {
|
||||
from { border-color: #ffc107; box-shadow: 0 0 5px rgba(255, 193, 7, 0.5); }
|
||||
to { border-color: #ffcd39; box-shadow: 0 0 20px rgba(255, 193, 7, 0.8); }
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -87,70 +107,110 @@
|
||||
|
||||
<!-- <?php // if ($catalogosData['catalogos_activos']): ?> -->
|
||||
<div class="row g-4">
|
||||
<!-- <?php
|
||||
// $delay = 0;
|
||||
<?php
|
||||
$delay = 0;
|
||||
// foreach ($catalogosData['catalogos'] as $catalogo):
|
||||
// $delay += 0.1; // Incrementar el retraso para cada catálogo
|
||||
?> -->
|
||||
<div class="col-md-4">
|
||||
<div class="card shadow-sm p-3">
|
||||
<h5 class="text-teal">Aprobar agencias</h5>
|
||||
<p>Aprueba las agencias que solicitaron un registro.</p>
|
||||
<a href="/IMPORTADORES/administrador/aprobarAgencias"
|
||||
class="btn btn-teal btn-sm mt-2 <?= $_SERVER['REQUEST_URI'] === '/IMPORTADORES/sistemas/aprobarAgencias' ? 'active' : '' ?>">
|
||||
Ver agencias solicitantes</a>
|
||||
$delay += 0.1; // Incrementar el retraso para cada catálogo
|
||||
?>
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: <?= $delay ?>s;">
|
||||
<div class="card shadow-sm p-3 card-hover position-relative h-100">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-teal mb-3">Aprobar agencias</h5>
|
||||
<p class="text-muted small flex-grow-1 mb-4">Aprueba las agencias que solicitaron un registro.</p>
|
||||
<div class="mt-auto">
|
||||
<button class="btn btn-teal btn-sm mt-2 mt-auto w-100 btn-animated"
|
||||
onclick="navigateWithAnimation(this, '/IMPORTADORES/administrador/aprobarAgencias')"
|
||||
data-url="/IMPORTADORES/administrador/aprobarAgencias">
|
||||
<span class="loading-spinner spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
|
||||
<span class="btn-text">Ver agencias solicitantes</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="card shadow-sm p-3">
|
||||
<h5 class="text-lime">Alta de agencias</h5>
|
||||
<p>Da de alta manualmente una agencia.</p>
|
||||
<a href="/IMPORTADORES/administrador/altaAgencias"
|
||||
class="btn btn-lime btn-sm mt-2 <?= $_SERVER['REQUEST_URI'] === '/IMPORTADORES/sistemas/altaAgencias' ? 'active' : '' ?>">
|
||||
Nueva agencia
|
||||
</a>
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: <?= $delay ?>s;">
|
||||
<div class="card shadow-sm p-3 card-hover position-relative h-100">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-lime mb-3">Alta de agencias</h5>
|
||||
<p class="text-muted small flex-grow-1 mb-4">Da de alta manualmente una agencia.</p>
|
||||
<div class="mt-auto">
|
||||
<button class="btn btn-lime btn-sm mt-auto w-100 btn-animated"
|
||||
onclick="navigateWithAnimation(this, '/IMPORTADORES/administrador/altaAgencias')"
|
||||
data-url="/IMPORTADORES/administrador/altaAgencias">
|
||||
<span class="loading-spinner spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
|
||||
<span class="btn-text">Nueva agencia</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="card shadow-sm p-3">
|
||||
<h5 class="text-success">Aprobar de usuarios</h5>
|
||||
<p>Aprueba los usuarios que solicitaron un registro.</p>
|
||||
<a href="/IMPORTADORES/administrador/aprobarUsuarios"
|
||||
class="btn btn-success btn-sm mt-2 <?= $_SERVER['REQUEST_URI'] === '/IMPORTADORES/sistemas/aprobarUsuarios' ? 'active' : '' ?>">
|
||||
Ver usuarios solicitantes
|
||||
</a>
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: <?= $delay ?>s;">
|
||||
<div class="card shadow-sm p-3 card-hover position-relative h-100">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-success mb-3">Aprobar de usuarios</h5>
|
||||
<p class="text-muted small flex-grow-1 mb-4">Aprueba los usuarios que solicitaron un registro.</p>
|
||||
<div class="mt-auto">
|
||||
<button class="btn btn-success btn-sm mt-auto w-100 btn-animated"
|
||||
onclick="navigateWithAnimation(this, '/IMPORTADORES/administrador/aprobarUsuarios')"
|
||||
data-url="/IMPORTADORES/administrador/aprobarUsuarios">
|
||||
<span class="loading-spinner spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
|
||||
<span class="btn-text">Ver usuarios solicitantes</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="card shadow-sm p-3">
|
||||
<h5 class="text-info">Alta de usuarios</h5>
|
||||
<p>Da de alta manualmente a un usuario.</p>
|
||||
<a href="/IMPORTADORES/administrador/altaUsuarios"
|
||||
class="btn btn-info btn-sm mt-2 <?= $_SERVER['REQUEST_URI'] === '/IMPORTADORES/sistemas/altaUsuarios' ? 'active' : '' ?>">
|
||||
Nuevo usuario
|
||||
</a>
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: <?= $delay ?>s;">
|
||||
<div class="card shadow-sm p-3 card-hover position-relative h-100">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-info mb-3">Alta de usuarios</h5>
|
||||
<p class="text-muted small flex-grow-1 mb-4">Da de alta manualmente a un usuario.</p>
|
||||
<div class="mt-auto">
|
||||
<button class="btn btn-info btn-sm mt-auto w-100 btn-animated"
|
||||
onclick="navigateWithAnimation(this, '/IMPORTADORES/administrador/altaUsuarios')"
|
||||
data-url="/IMPORTADORES/administrador/altaUsuarios">
|
||||
<span class="loading-spinner spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
|
||||
<span class="btn-text">Nuevo usuario</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="card shadow-sm p-3">
|
||||
<h5 class="text-warning">Configuración</h5>
|
||||
<p>Administra los datos de tu agencia.</p>
|
||||
<a href="/IMPORTADORES/administrador/configuracion"
|
||||
class="btn btn-warning btn-sm mt-2 <?= $_SERVER['REQUEST_URI'] === '/IMPORTADORES/sistemas/configuracion' ? 'active' : '' ?>">
|
||||
Configurar
|
||||
</a>
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: <?= $delay ?>s;">
|
||||
<div class="card shadow-sm p-3 card-hover position-relative h-100">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-warning mb-3">Configuración</h5>
|
||||
<p class="text-muted small flex-grow-1 mb-4">Administra los datos de tu empresa y preferencias.</p>
|
||||
<div class="mt-auto">
|
||||
<button class="btn btn-warning btn-sm mt-auto w-100 btn-animated"
|
||||
onclick="navigateWithAnimation(this, '/IMPORTADORES/configuracion')"
|
||||
data-url="/IMPORTADORES/configuracion">
|
||||
<span class="loading-spinner spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
|
||||
<span class="btn-text">Ir a configuración</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="card shadow-sm p-3">
|
||||
<h5 class="text-danger">Cerrar sesión</h5>
|
||||
<p>Salir del sistema de forma segura.</p>
|
||||
<a href="/IMPORTADORES/sistemas/logout" class="btn btn-danger btn-sm mt-2">Logout</a>
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: <?= $delay ?>s;">
|
||||
<div class="card shadow-sm p-3 card-hover position-relative h-100">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-danger mb-3">Cerrar sesión</h5>
|
||||
<p class="text-muted small flex-grow-1 mb-4">Salir del sistema de forma segura.</p>
|
||||
<div class="mt-auto">
|
||||
<button class="btn btn-danger btn-sm mt-auto w-100 btn-animated"
|
||||
onclick="navigateWithAnimation(this, '/IMPORTADORES/sistemas/logout')"
|
||||
data-url="/IMPORTADORES/sistemas/logout">
|
||||
<span class="loading-spinner spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
|
||||
<span class="btn-text">Cerrar sesión</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <?php // endforeach; ?> -->
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
<!-- 📄 CONTENIDO -->
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">🚷 Usuarios Inactivos</h4>
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped" id="tabla-inactivos">
|
||||
<thead class="table-dark">
|
||||
|
||||
@@ -162,7 +162,7 @@
|
||||
<div class="content px-4">
|
||||
<h3 class="mb-4 animate__animated animate__fadeInDown title_glow">👨✈️ Administración de Agentes</h3>
|
||||
<!-- FORMULARIO -->
|
||||
<div class="card p-4 mb-4 shadow-sm bg-white card-hover position-relative h-auto">
|
||||
<div class="card p-4 mb-4 shadow-sm bg-white card-hover position-relative h-auto fade-in-up">
|
||||
<form action="/IMPORTADORES/agencias/guardarAgente" method="POST" id="formAltaAgentes">
|
||||
<h5 class="mb-3">➕ Nuevo Agente</h5>
|
||||
<div class="row g-3">
|
||||
@@ -200,8 +200,8 @@
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<h4 class="mb-4">✅ Agentes Activos</h4>
|
||||
<div class="card p-3 shadow-sm">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">✅ Agentes Activos</h4>
|
||||
<div class="card p-3 shadow-sm fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-hover align-middle" id="tabla-agentes-activos">
|
||||
<thead class="table-dark">
|
||||
@@ -227,7 +227,7 @@
|
||||
<td>
|
||||
<?php if (in_array($a['tipo_usuario_sistema'], ['agente_aduanal'])): ?>
|
||||
<a href="/IMPORTADORES/vinculaciones/desvincularAgencia?id=<?= $a['id_relacion'] ?>&tipo=<?= $a['tipo_vinculacion'] ?>"
|
||||
class="btn btn-sm btn-danger"
|
||||
class="btn btn-sm btn-danger mt-auto w-auto btn-animated"
|
||||
onclick="return confirm('¿Está seguro de que desea desvincular este usuario?')">
|
||||
Desvincular
|
||||
</a>
|
||||
|
||||
@@ -38,6 +38,9 @@
|
||||
.btn-violet { background-color: #8b5cf6; color: white; }
|
||||
.text-violet { color: #8b5cf6; }
|
||||
.btn-violet:hover { background-color: #7c3aed; color: white; }
|
||||
.btn-lila { background-color: #c4b5fd; /* violeta claro */ color: white; border: none; }
|
||||
.btn-lila:hover { background-color: #a78bfa; /* tono ligeramente más fuerte */ color: white; }
|
||||
.text-lila { color: #c4b5fd; }
|
||||
/* 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 */
|
||||
@@ -49,22 +52,39 @@
|
||||
}
|
||||
.card { border-radius: 12px; }
|
||||
/* Animaciones personalizadas */
|
||||
.card-hover { transition: all 0.3s ease; }
|
||||
.card-hover:hover { transform: translateY(-5px); box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; }
|
||||
.card-hover { transition: all 0.3s ease; cursor: pointer; }
|
||||
.card-hover:hover { transform: translateY(-8px) saqcle(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.6s ease-out; }
|
||||
.fade-in-up { animation: fadeInUp 0.8s ease-out; }
|
||||
@keyframes fadeInUp {
|
||||
from { opacity: 0; transform: translateY(30px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
.loading-spinner { display: none; }
|
||||
/* Botón con efecto de loading */
|
||||
.btn-loading { position: relative; color: transparent !important; pointer-events: none; }
|
||||
.btn-loading::after { content: ''; position: absolute; width: 20px; height: 20px; top: 50%; left: 50%; margin-left: -10px;
|
||||
margin-top: -10px; border: 2px solid #fff; border-radius: 50%; border-top-color: transparent; animation: spin 1s linear infinite; }
|
||||
.btn-loading .loading-spinner { display: inline-block; }
|
||||
.btn-loading .btn-text { display: none; }
|
||||
@keyframes spin { to { transform: rotate(360deg); } }
|
||||
/* 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%; }
|
||||
/* Animación para alertas */
|
||||
.alert-animated { animation: slideInDown 0.5s ease-out; }
|
||||
@keyframes slideInDown {
|
||||
@@ -76,7 +96,7 @@
|
||||
@keyframes borderGlow {
|
||||
from { border-color: #ffc107; box-shadow: 0 0 5px rgba(255, 193, 7, 0.5); }
|
||||
to { border-color: #ffcd39; box-shadow: 0 0 20px rgba(255, 193, 7, 0.8); }
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -87,82 +107,127 @@
|
||||
|
||||
<!-- <?php // if ($catalogosData['catalogos_activos']): ?> -->
|
||||
<div class="row g-4">
|
||||
<!-- <?php
|
||||
// $delay = 0;
|
||||
<?php
|
||||
$delay = 0;
|
||||
// foreach ($catalogosData['catalogos'] as $catalogo):
|
||||
// $delay += 0.1; // Incrementar el retraso para cada catálogo
|
||||
?> -->
|
||||
<div class="col-md-4">
|
||||
<div class="card shadow-sm p-3">
|
||||
<h5 class="text-teal">Solicitudes de vinculación</h5>
|
||||
<p>Aprueba las solicitudes de vinculación de los importadores.</p>
|
||||
<a href="/IMPORTADORES/vinculaciones/solicitudesVinculacion"
|
||||
class="btn btn-teal btn-sm mt-2 <?= $_SERVER['REQUEST_URI'] === '/IMPORTADORES/vinculaciones/solicitudesVinculacion' ? 'active' : '' ?>">
|
||||
Ver solicitudes
|
||||
</a>
|
||||
$delay += 0.1; // Incrementar el retraso para cada catálogo
|
||||
?>
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: <?= $delay ?>s;">
|
||||
<div class="card shadow-sm p-3 card-hover position-relative h-100">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-teal mb-3">Solicitudes de vinculación</h5>
|
||||
<p class="text-muted small flex-grow-1 mb-4">Aprueba las solicitudes de vinculación de los importadores.</p>
|
||||
<div class="mt-auto">
|
||||
<button class="btn btn-teal btn-sm mt-auto w-100 btn-animated"
|
||||
onclick="navigateWithAnimation(this, '/IMPORTADORES/vinculaciones/solicitudesVinculacion')"
|
||||
data-url="/IMPORTADORES/vinculaciones/solicitudesVinculacion">
|
||||
<span class="loading-spinner spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
|
||||
<span class="btn-text">Ver solicitudes</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="card shadow-sm p-3">
|
||||
<h5 class="text-lime">Usuarios vinculados</h5>
|
||||
<p>Consulta los que ya fueron autorizados.</p>
|
||||
<a href="/IMPORTADORES/vinculaciones/vinculacionesAgencia"
|
||||
class="btn btn-lime btn-sm mt-2 <?= $_SERVER['REQUEST_URI'] === '/IMPORTADORES/vinculaciones/vinculacionesAgencia' ? 'active' : '' ?>">
|
||||
Ver usuarios
|
||||
</a>
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: <?= $delay ?>s;">
|
||||
<div class="card shadow-sm p-3 card-hover position-relative h-100">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-lime mb-3">Usuarios vinculados</h5>
|
||||
<p class="text-muted small flex-grow-1 mb-4">Consulta los que ya fueron autorizados.</p>
|
||||
<div class="mt-auto">
|
||||
<button class="btn btn-lime btn-sm mt-auto w-100 btn-animated"
|
||||
onclick="navigateWithAnimation(this, '/IMPORTADORES/vinculaciones/vinculacionesAgencia')"
|
||||
data-url="/IMPORTADORES/vinculaciones/vinculacionesAgencia">
|
||||
<span class="loading-spinner spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
|
||||
<span class="btn-text">Ver usuarios</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="card shadow-sm p-3">
|
||||
<h5 class="text-success">Alta de agentes</h5>
|
||||
<p>Da de alta a tus agentes aduanales.</p>
|
||||
<a href="/IMPORTADORES/agencias/alta"
|
||||
class="btn btn-success btn-sm mt-2 <?= $_SERVER['REQUEST_URI'] === '/IMPORTADORES/agencias/alta' ? 'active' : '' ?>">
|
||||
Nuevo agente
|
||||
</a>
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: <?= $delay ?>s;">
|
||||
<div class="card shadow-sm p-3 card-hover position-relative h-100">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-success mb-3">Patentes</h5>
|
||||
<p class="text-muted small flex-grow-1 mb-4">Gestiona las patentes de la agencia.</p>
|
||||
<div class="mt-auto">
|
||||
<button class="btn btn-success btn-sm mt-auto w-100 btn-animated"
|
||||
onclick="navigateWithAnimation(this, '/IMPORTADORES/patente/dashboard')"
|
||||
data-url="/IMPORTADORES/patente/dashboard">
|
||||
<span class="loading-spinner spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
|
||||
<span class="btn-text">Ver agentes</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="card shadow-sm p-3">
|
||||
<h5 class="text-info">Patentes</h5>
|
||||
<p>Gestiona las patentes de la agencia.</p>
|
||||
<a href="/IMPORTADORES/patente/dashboard"
|
||||
class="btn btn-info btn-sm mt-2 <?= $_SERVER['REQUEST_URI'] === '/IMPORTADORES/patente/dashboard' ? 'active' : '' ?>">
|
||||
Ver agentes
|
||||
</a>
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: <?= $delay ?>s;">
|
||||
<div class="card shadow-sm p-3 card-hover position-relative h-100">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-info mb-3">Locaciones</h5>
|
||||
<p class="text-muted small flex-grow-1 mb-4">Gestiona la locaciones validas para nuevos registros.</p>
|
||||
<div class="mt-auto">
|
||||
<button class="btn btn-info btn-sm mt-auto w-100 btn-animated"
|
||||
onclick="navigateWithAnimation(this, '/IMPORTADORES/locaciones/lista')"
|
||||
data-url="/IMPORTADORES/locaciones/lista">
|
||||
<span class="loading-spinner spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
|
||||
<span class="btn-text">Gestionar locaciones</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="card shadow-sm p-3">
|
||||
<h5 class="text-cyan">Locaciones</h5>
|
||||
<p>Gestiona la locaciones validas para nuevos registros.</p>
|
||||
<a href="/IMPORTADORES/locaciones/lista"
|
||||
class="btn btn-cyan btn-sm mt-2 <?= $_SERVER['REQUEST_URI'] === '/IMPORTADORES/locaciones/lista' ? 'active' : '' ?>">
|
||||
Gestionar locaciones
|
||||
</a>
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: <?= $delay ?>s;">
|
||||
<div class="card shadow-sm p-3 card-hover position-relative h-100">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-cyan mb-3">Alta de agentes</h5>
|
||||
<p class="text-muted small flex-grow-1 mb-4">Da de alta a tus agentes aduanales.</p>
|
||||
<div class="mt-auto">
|
||||
<button class="btn btn-cyan btn-sm mt-auto w-100 btn-animated"
|
||||
onclick="navigateWithAnimation(this, '/IMPORTADORES/agencias/alta')"
|
||||
data-url="/IMPORTADORES/agencias/alta">
|
||||
<span class="loading-spinner spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
|
||||
<span class="btn-text">Nuevo agente</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="card shadow-sm p-3">
|
||||
<h5 class="text-warning">Configuración</h5>
|
||||
<p>Administra tus datos y preferencias.</p>
|
||||
<a href="/IMPORTADORES/configuracion"
|
||||
class="btn btn-warning btn-sm mt-2 <?= $_SERVER['REQUEST_URI'] === '/IMPORTADORES/agencias/configuracion' ? 'active' : '' ?>">
|
||||
Configurar
|
||||
</a>
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: <?= $delay ?>s;">
|
||||
<div class="card shadow-sm p-3 card-hover position-relative h-100">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-warning mb-3">Configuración</h5>
|
||||
<p class="text-muted small flex-grow-1 mb-4">Administra los datos de tu empresa y preferencias.</p>
|
||||
<div class="mt-auto">
|
||||
<button class="btn btn-warning btn-sm mt-auto w-100 btn-animated"
|
||||
onclick="navigateWithAnimation(this, '/IMPORTADORES/configuracion')"
|
||||
data-url="/IMPORTADORES/configuracion">
|
||||
<span class="loading-spinner spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
|
||||
<span class="btn-text">Ir a configuración</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="card shadow-sm p-3">
|
||||
<h5 class="text-danger">Cerrar sesión</h5>
|
||||
<p>Salir del sistema de forma segura.</p>
|
||||
<a href="/IMPORTADORES/sistemas/logout" class="btn btn-danger btn-sm mt-2">Logout</a>
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: <?= $delay ?>s;">
|
||||
<div class="card shadow-sm p-3 card-hover position-relative h-100">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-danger mb-3">Cerrar sesión</h5>
|
||||
<p class="text-muted small flex-grow-1 mb-4">Salir del sistema de forma segura.</p>
|
||||
<div class="mt-auto">
|
||||
<button class="btn btn-danger btn-sm mt-auto w-100 btn-animated"
|
||||
onclick="navigateWithAnimation(this, '/IMPORTADORES/sistemas/logout')"
|
||||
data-url="/IMPORTADORES/sistemas/logout">
|
||||
<span class="loading-spinner spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
|
||||
<span class="btn-text">Cerrar sesión</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <?php // endforeach; ?> -->
|
||||
|
||||
@@ -41,6 +41,9 @@ include __DIR__ . '/../partials/sidebar_agente.php';
|
||||
.btn-violet { background-color: #8b5cf6; color: white; }
|
||||
.text-violet { color: #8b5cf6; }
|
||||
.btn-violet:hover { background-color: #7c3aed; color: white; }
|
||||
.btn-lila { background-color: #c4b5fd; /* violeta claro */ color: white; border: none; }
|
||||
.btn-lila:hover { background-color: #a78bfa; /* tono ligeramente más fuerte */ color: white; }
|
||||
.text-lila { color: #c4b5fd; }
|
||||
/* 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 */
|
||||
@@ -52,22 +55,39 @@ include __DIR__ . '/../partials/sidebar_agente.php';
|
||||
}
|
||||
.card { border-radius: 12px; }
|
||||
/* Animaciones personalizadas */
|
||||
.card-hover { transition: all 0.3s ease; }
|
||||
.card-hover:hover { transform: translateY(-5px); box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; }
|
||||
.card-hover { transition: all 0.3s ease; cursor: pointer; }
|
||||
.card-hover:hover { transform: translateY(-8px) saqcle(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.6s ease-out; }
|
||||
.fade-in-up { animation: fadeInUp 0.8s ease-out; }
|
||||
@keyframes fadeInUp {
|
||||
from { opacity: 0; transform: translateY(30px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
.loading-spinner { display: none; }
|
||||
/* Botón con efecto de loading */
|
||||
.btn-loading { position: relative; color: transparent !important; pointer-events: none; }
|
||||
.btn-loading::after { content: ''; position: absolute; width: 20px; height: 20px; top: 50%; left: 50%; margin-left: -10px;
|
||||
margin-top: -10px; border: 2px solid #fff; border-radius: 50%; border-top-color: transparent; animation: spin 1s linear infinite; }
|
||||
.btn-loading .loading-spinner { display: inline-block; }
|
||||
.btn-loading .btn-text { display: none; }
|
||||
@keyframes spin { to { transform: rotate(360deg); } }
|
||||
/* 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%; }
|
||||
/* Animación para alertas */
|
||||
.alert-animated { animation: slideInDown 0.5s ease-out; }
|
||||
@keyframes slideInDown {
|
||||
@@ -90,60 +110,93 @@ include __DIR__ . '/../partials/sidebar_agente.php';
|
||||
|
||||
<!-- <?php // if ($catalogosData ['catalogos_activos']): ?> -->
|
||||
<div class="row g-4">
|
||||
<!-- <?php
|
||||
// $delay = 0;
|
||||
<?php
|
||||
$delay = 0;
|
||||
// foreach ($catalogosData['catalogos'] as $catalogo):
|
||||
// $delay += 0.1; // Incrementar el retraso para cada catálogo
|
||||
?> -->
|
||||
<div class="col-md-4">
|
||||
<div class="card shadow-sm p-3">
|
||||
<h5 class="text-teal">Importadores vinculados</h5>
|
||||
<p>Consulta los que ya fueron autorizados.</p>
|
||||
<a href="/IMPORTADORES/agentes/vinculados"
|
||||
class="btn btn-teal btn-sm mt-2 <?= $_SERVER['REQUEST_URI'] === '/IMPORTADORES/agentes/vinculados' ? 'active' : '' ?>">
|
||||
Ver importadores
|
||||
</a>
|
||||
$delay += 0.1; // Incrementar el retraso para cada catálogo
|
||||
?>
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: <?= $delay ?>s;">
|
||||
<div class="card shadow-sm p-3 card-hover position-relative h-100">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-teal mb-3">Importadores vinculados</h5>
|
||||
<p class="text-muted small flex-grow-1 mb-4">Consulta los que ya fueron autorizados.</p>
|
||||
<div class="mt-auto">
|
||||
<button class="btn btn-teal btn-sm mt-auto w-100 btn-animated"
|
||||
onclick="navigateWithAnimation(this, '/IMPORTADORES/agentes/vinculados')"
|
||||
data-url="/IMPORTADORES/agentes/vinculados">
|
||||
<span class="loading-spinner spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
|
||||
<span class="btn-text">Ver importadores</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="card shadow-sm p-3">
|
||||
<h5 class="text-lime">Patentes</h5>
|
||||
<p>Gestiona las patentes de la agencia.</p>
|
||||
<a href="/IMPORTADORES/patente/dashboard"
|
||||
class="btn btn-lime btn-sm mt-2 <?= $_SERVER['REQUEST_URI'] === '/IMPORTADORES//patente/dashboard' ? 'active' : '' ?>">
|
||||
Ver solicitudes
|
||||
</a>
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: <?= $delay ?>s;">
|
||||
<div class="card shadow-sm p-3 card-hover position-relative h-100">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-lime mb-3">Patentes</h5>
|
||||
<p class="text-muted small flex-grow-1 mb-4">Gestiona las patentes de la agencia.</p>
|
||||
<div class="mt-auto">
|
||||
<button class="btn btn-lime btn-sm mt-auto w-100 btn-animated"
|
||||
onclick="navigateWithAnimation(this, '/IMPORTADORES/patente/dashboard')"
|
||||
data-url="/IMPORTADORES/patente/dashboard">
|
||||
<span class="loading-spinner spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
|
||||
<span class="btn-text">Ver patentes</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="card shadow-sm p-3">
|
||||
<h5 class="text-success">Locaciones</h5>
|
||||
<p>Gestiona la locaciones validas para nuevos registros.</p>
|
||||
<a href="/IMPORTADORES/locaciones/lista"
|
||||
class="btn btn-success btn-sm mt-2 <?= $_SERVER['REQUEST_URI'] === '/IMPORTADORES/locaciones/lista' ? 'active' : '' ?>">
|
||||
Gestionar locaciones
|
||||
</a>
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: <?= $delay ?>s;">
|
||||
<div class="card shadow-sm p-3 card-hover position-relative h-100">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-success mb-3">Locaciones</h5>
|
||||
<p class="text-muted small flex-grow-1 mb-4">Gestiona la locaciones validas para nuevos registros.</p>
|
||||
<div class="mt-auto">
|
||||
<button class="btn btn-success btn-sm mt-auto w-100 btn-animated"
|
||||
onclick="navigateWithAnimation(this, '/IMPORTADORES/locaciones/lista')"
|
||||
data-url="/IMPORTADORES/locaciones/lista">
|
||||
<span class="loading-spinner spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
|
||||
<span class="btn-text">Gestionar locaciones</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="card shadow-sm p-3">
|
||||
<h5 class="text-warning">Configuración</h5>
|
||||
<p>Administra tus datos y preferencias.</p>
|
||||
<a href="/IMPORTADORES/configuracion"
|
||||
class="btn btn-warning btn-sm mt-2 <?= $_SERVER['REQUEST_URI'] === '/IMPORTADORES/agentes/configuracion' ? 'active' : '' ?>">
|
||||
Configurar
|
||||
</a>
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: <?= $delay ?>s;">
|
||||
<div class="card shadow-sm p-3 card-hover position-relative h-100">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-warning mb-3">Configuración</h5>
|
||||
<p class="text-muted small flex-grow-1 mb-4">Administra los datos de tu empresa y preferencias.</p>
|
||||
<div class="mt-auto">
|
||||
<button class="btn btn-warning btn-sm mt-auto w-100 btn-animated"
|
||||
onclick="navigateWithAnimation(this, '/IMPORTADORES/configuracion')"
|
||||
data-url="/IMPORTADORES/configuracion">
|
||||
<span class="loading-spinner spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
|
||||
<span class="btn-text">Ir a configuración</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="card shadow-sm p-3">
|
||||
<h5 class="text-danger">Cerrar sesión</h5>
|
||||
<p>Salir del sistema de forma segura.</p>
|
||||
<a href="/IMPORTADORES/sistemas/logout" class="btn btn-danger btn-sm mt-2">Logout</a>
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: <?= $delay ?>s;">
|
||||
<div class="card shadow-sm p-3 card-hover position-relative h-100">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-danger mb-3">Cerrar sesión</h5>
|
||||
<p class="text-muted small flex-grow-1 mb-4">Salir del sistema de forma segura.</p>
|
||||
<div class="mt-auto">
|
||||
<button class="btn btn-danger btn-sm mt-auto w-100 btn-animated"
|
||||
onclick="navigateWithAnimation(this, '/IMPORTADORES/sistemas/logout')"
|
||||
data-url="/IMPORTADORES/sistemas/logout">
|
||||
<span class="loading-spinner spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
|
||||
<span class="btn-text">Cerrar sesión</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <?php // endforeach; ?> -->
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">🏪 Registro de Agencias</h4>
|
||||
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped" id="tabla-registros-agencias">
|
||||
<thead class="table-dark">
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">🔄 Cambios de Usuario</h4>
|
||||
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped align-middle" id="tabla-bitacora-usuarios">
|
||||
<thead class="table-dark">
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">👥 Acceso de Usuarios</h4>
|
||||
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped" id="tabla-logins">
|
||||
<thead class="table-dark">
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">👥 Mi Actividad</h4>
|
||||
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped" id="tabla-logins-usuario">
|
||||
<thead class="table-dark">
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">👥 Registro de Usuarios</h4>
|
||||
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped" id="tabla-registros-usuarios">
|
||||
<thead class="table-dark">
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">🔗 Vinculaciones</h4>
|
||||
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped align-middle" id="tabla-bitacora-vinculaciones">
|
||||
<thead class="table-dark">
|
||||
|
||||
@@ -48,6 +48,9 @@
|
||||
.btn-violet { background-color: #8b5cf6; color: white; }
|
||||
.text-violet { color: #8b5cf6; }
|
||||
.btn-violet:hover { background-color: #7c3aed; color: white; }
|
||||
.btn-lila { background-color: #c4b5fd; /* violeta claro */ color: white; border: none; }
|
||||
.btn-lila:hover { background-color: #a78bfa; /* tono ligeramente más fuerte */ color: white; }
|
||||
.text-lila { color: #c4b5fd; }
|
||||
/* 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; }
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">👥 Acceso de Usuarios</h4>
|
||||
|
||||
<div class="card p-3 shadow-sm">
|
||||
<div class="card p-3 shadow-sm fade-in-up">
|
||||
<div class="table-responsive card-hover position-relative h-auto">
|
||||
<table class="table table-striped" id="tabla-logins">
|
||||
<thead class="table-dark">
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">🔗 Vinculaciones</h4>
|
||||
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped align-middle" id="tabla-vinculaciones-usuario">
|
||||
<thead class="table-dark">
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">➕ Nuevo Chofer</h4>
|
||||
<div class="card p-4 shadow-sm bg-white card-hover position-relative h-auto">
|
||||
<div class="card p-4 shadow-sm bg-white card-hover position-relative h-auto fade-in-up">
|
||||
<!-- Se agrega enctype para subir archivos -->
|
||||
<form action="/IMPORTADORES/choferes/guardar" method="POST" enctype="multipart/form-data" id="formAltaChoferes">
|
||||
<div class="row mb-3">
|
||||
|
||||
@@ -178,7 +178,7 @@
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">✏️ Editar Chofer #<?= (int)$chofer['id_chofer'] ?></h4>
|
||||
<div class="card p-4 shadow-sm bg-white card-hover position-relative h-auto">
|
||||
<div class="card p-4 shadow-sm bg-white card-hover position-relative h-auto fade-in-up">
|
||||
<form action="/IMPORTADORES/choferes/actualizar" method="POST" enctype="multipart/form-data" id="formEditChoferes">
|
||||
<input type="hidden" name="id_chofer" value="<?= (int)$chofer['id_chofer'] ?>">
|
||||
|
||||
|
||||
@@ -68,8 +68,8 @@
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">👨✈️ Mis Choferes</h4>
|
||||
<a href="/IMPORTADORES/choferes/crear" class="btn btn-success mb-3 mt-auto w-auto btn-animated">➕ Nuevo Chofer</a>
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<a href="/IMPORTADORES/choferes/crear" class="btn btn-success mb-3 mt-auto w-auto btn-animated fade-in-up">➕ Nuevo Chofer</a>
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped" id="tabla-choferes">
|
||||
<thead>
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
<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 -->
|
||||
@@ -56,8 +57,29 @@
|
||||
.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;}
|
||||
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>
|
||||
@@ -66,187 +88,187 @@
|
||||
<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">
|
||||
<div class="section-header">👤 Información Personal</div>
|
||||
<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">Clave:</label>
|
||||
<div class="col-md-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">Tipo de identificador:</label>
|
||||
<div class="col-md-2">
|
||||
<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>
|
||||
<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">Nombre:</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['nombre'] ?? '') ?>" disabled>
|
||||
</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">RFC:</label>
|
||||
<div class="col-md-3">
|
||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['rfc'] ?? '') ?>" disabled>
|
||||
</div>
|
||||
<div class="col-md-1"></div>
|
||||
<label class="col-md-1 col-form-label">CURP:</label>
|
||||
<div class="col-md-5">
|
||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['curp'] ?? '') ?>" disabled>
|
||||
</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="row mb-3">
|
||||
<label class="col-md-2 col-form-label">Calle:</label>
|
||||
<div class="col-md-10">
|
||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['calle'] ?? '') ?>" 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">Núm. Exterior:</label>
|
||||
<div class="col-md-2">
|
||||
<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">Núm. Interior:</label>
|
||||
<div class="col-md-2">
|
||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['num_interior'] ?? '') ?>" disabled>
|
||||
</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">Ciudad / Localidad:</label>
|
||||
<div class="col-md-3">
|
||||
<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">Colonia:</label>
|
||||
<div class="col-md-5">
|
||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['colonia'] ?? '') ?>" disabled>
|
||||
</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">País:</label>
|
||||
<div class="col-md-3">
|
||||
<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">Código Postal:</label>
|
||||
<div class="col-md-2">
|
||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['codigo_postal'] ?? '') ?>" disabled>
|
||||
</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">Municipio:</label>
|
||||
<div class="col-md-4">
|
||||
<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">Estado:</label>
|
||||
<div class="col-md-4">
|
||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['estado'] ?? '') ?>" disabled>
|
||||
</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">Teléfono:</label>
|
||||
<div class="col-md-5">
|
||||
<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">Fax:</label>
|
||||
<div class="col-md-3">
|
||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['fax'] ?? '') ?>" disabled>
|
||||
</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">Correo:</label>
|
||||
<div class="col-md-10">
|
||||
<input type="email" class="form-control" value="<?= htmlspecialchars($datos['correo'] ?? '') ?>" disabled>
|
||||
</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">Observaciones:</label>
|
||||
<div class="col-md-10">
|
||||
<textarea class="form-control" rows="3" disabled><?= htmlspecialchars($datos['observaciones'] ?? '') ?></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display: flex; justify-content: right;">
|
||||
<a href="/IMPORTADORES/configuracion/editar" class="btn btn-success mb-3 mt-auto w-auto btn-animated">✏️ Editar Información</a>
|
||||
<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">
|
||||
<div class="section-header">🏢 Información de Agencia Aduanal</div>
|
||||
<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">Nombre Agencia:</label>
|
||||
<div class="col-md-10">
|
||||
<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">RFC:</label>
|
||||
<div class="col-md-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">Teléfono:</label>
|
||||
<div class="col-md-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">Email:</label>
|
||||
<div class="col-md-3">
|
||||
<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">Dirección:</label>
|
||||
<div class="col-md-10">
|
||||
<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">👤 Mi Información Personal</div>
|
||||
<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">Nombre:</label>
|
||||
<div class="col-md-4">
|
||||
<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">Correo:</label>
|
||||
<div class="col-md-10">
|
||||
<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">Fecha de Asignación:</label>
|
||||
<div class="col-md-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) {
|
||||
@@ -262,25 +284,25 @@
|
||||
</form>
|
||||
</div>
|
||||
<?php elseif (isset($datos['tipo_usuario']) && $datos['tipo_usuario'] === 'super_admin'): ?>
|
||||
<div class="card shadow-sm p-4 mb-4 bg-white">
|
||||
<div class="section-header">🔧 Información del Administrador</div>
|
||||
<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">Nombre:</label>
|
||||
<div class="col-md-4">
|
||||
<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">Tipo de Usuario:</label>
|
||||
<div class="col-md-3">
|
||||
<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">Correo:</label>
|
||||
<div class="col-md-11">
|
||||
<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>
|
||||
@@ -288,9 +310,9 @@
|
||||
|
||||
<!-- Información adicional específica de super_admin -->
|
||||
<div class="row mb-3">
|
||||
<label class="col-md-1 col-form-label">Privilegios:</label>
|
||||
<div class="col-md-11">
|
||||
<textarea class="form-control" rows="2" disabled>Acceso completo al sistema - Gestión de usuarios, agencias, importadores y configuración general</textarea>
|
||||
<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>
|
||||
@@ -312,5 +334,11 @@
|
||||
<?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>
|
||||
@@ -56,25 +56,48 @@
|
||||
.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;}
|
||||
label {font-weight: bold; }
|
||||
.error-msg { color: red; font-size: 0.9em; }
|
||||
.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">✏️ Editar Información</h4>
|
||||
<div class="card shadow-sm p-4 mb-4 bg-white card-hover position-relative h-auto">
|
||||
<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 id="form-edicion" method="POST" action="/IMPORTADORES/configuracion/guardar">
|
||||
<div class="row mb-3">
|
||||
<label class="col-md-2 col-form-label">Clave:</label>
|
||||
<div class="col-md-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" name="clave" maxlength="8" class="form-control" value="<?= htmlspecialchars($datos['clave'] ?? '') ?>" disabled>
|
||||
</div>
|
||||
<div class="col-md-3"></div>
|
||||
<label class="col-md-2 col-form-label">Tipo de identificador:</label>
|
||||
<div class="col-md-2">
|
||||
<select name="tipo_identificador" class="form-control" required>
|
||||
<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-select" required>
|
||||
<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>
|
||||
@@ -84,106 +107,106 @@
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label class="col-md-2 col-form-label">Nombre:</label>
|
||||
<div class="col-md-10">
|
||||
<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">RFC:</label>
|
||||
<div class="col-md-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'] ?? '') ?>" disabled>
|
||||
</div>
|
||||
<div class="col-md-1"></div>
|
||||
<label class="col-md-1 col-form-label">CURP:</label>
|
||||
<div class="col-md-5">
|
||||
<label class="col-md-1 col-form-label form-group-animated">CURP:</label>
|
||||
<div class="col-md-5 form-group-animated">
|
||||
<input type="text" name="curp" maxlength="18" class="form-control" value="<?= htmlspecialchars($datos['curp'] ?? '') ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label class="col-md-2 col-form-label">Calle:</label>
|
||||
<div class="col-md-10">
|
||||
<label class="col-md-2 col-form-label form-group-animated">Calle:</label>
|
||||
<div class="col-md-10 form-group-animated">
|
||||
<input type="text" name="calle" class="form-control" value="<?= htmlspecialchars($datos['calle'] ?? '') ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label class="col-md-2 col-form-label">Núm. Exterior:</label>
|
||||
<div class="col-md-2">
|
||||
<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" name="num_exterior" class="form-control" value="<?= htmlspecialchars($datos['num_exterior'] ?? '') ?>">
|
||||
</div>
|
||||
<div class="col-md-4"></div>
|
||||
<label class="col-md-2 col-form-label">Núm. Interior:</label>
|
||||
<div class="col-md-2">
|
||||
<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" name="num_interior" class="form-control" value="<?= htmlspecialchars($datos['num_interior'] ?? '') ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label class="col-md-2 col-form-label">Ciudad / Localidad:</label>
|
||||
<div class="col-md-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" name="ciudad" class="form-control" value="<?= htmlspecialchars($datos['ciudad'] ?? '') ?>">
|
||||
</div>
|
||||
<div class="col-md-1"></div>
|
||||
<label class="col-md-1 col-form-label">Colonia:</label>
|
||||
<div class="col-md-5">
|
||||
<label class="col-md-1 col-form-label form-group-animated">Colonia:</label>
|
||||
<div class="col-md-5 form-group-animated">
|
||||
<input type="text" name="colonia" class="form-control" value="<?= htmlspecialchars($datos['colonia'] ?? '') ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label class="col-md-2 col-form-label">País:</label>
|
||||
<div class="col-md-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" name="pais" class="form-control" value="<?= htmlspecialchars($datos['pais'] ?? '') ?>">
|
||||
</div>
|
||||
<div class="col-md-3"></div>
|
||||
<label class="col-md-2 col-form-label">Código Postal:</label>
|
||||
<div class="col-md-2">
|
||||
<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="number" name="codigo_postal" class="form-control" value="<?= htmlspecialchars($datos['codigo_postal'] ?? '') ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label class="col-md-2 col-form-label">Municipio:</label>
|
||||
<div class="col-md-4">
|
||||
<label class="col-md-2 col-form-label form-group-animated">Municipio:</label>
|
||||
<div class="col-md-4 form-group-animated">
|
||||
<input type="text" name="municipio" class="form-control" value="<?= htmlspecialchars($datos['municipio'] ?? '') ?>">
|
||||
</div>
|
||||
<div class="col-md-1"></div>
|
||||
<label class="col-md-1 col-form-label">Estado:</label>
|
||||
<div class="col-md-4">
|
||||
<label class="col-md-1 col-form-label form-group-animated">Estado:</label>
|
||||
<div class="col-md-4 form-group-animated">
|
||||
<input type="text" name="estado" class="form-control" value="<?= htmlspecialchars($datos['estado'] ?? '') ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label class="col-md-2 col-form-label">Teléfono:</label>
|
||||
<div class="col-md-5">
|
||||
<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" name="telefono" maxlength="11" class="form-control" value="<?= htmlspecialchars($datos['telefono'] ?? '') ?>">
|
||||
</div>
|
||||
<div class="col-md-1"></div>
|
||||
<label class="col-md-1 col-form-label">Fax:</label>
|
||||
<div class="col-md-3">
|
||||
<label class="col-md-1 col-form-label form-group-animated">Fax:</label>
|
||||
<div class="col-md-3 form-group-animated">
|
||||
<input type="text" name="fax" maxlength="12" class="form-control" value="<?= htmlspecialchars($datos['fax'] ?? '') ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label class="col-md-2 col-form-label">Correo:</label>
|
||||
<div class="col-md-10">
|
||||
<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">Observaciones:</label>
|
||||
<div class="col-md-10">
|
||||
<label class="col-md-2 col-form-label form-group-animated">Observaciones:</label>
|
||||
<div class="col-md-10 form-group-animated">
|
||||
<?php $valor_obs = htmlspecialchars($datos['observaciones'] ?? ''); ?>
|
||||
<textarea name="observaciones" class="form-control" rows="3"><?= $valor_obs ?></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display: flex; justify-content: right;">
|
||||
<div style="display: flex; justify-content: right;" class="form-group-animated">
|
||||
<a href="/IMPORTADORES/configuracion/index" class="btn btn-secondary ms-2 mt-auto w-auto btn-animated" style="margin-right: 10px;">Cancelar</a>
|
||||
<button type="submit" class="btn btn-primary mt-auto w-auto btn-animated">💾 Guardar Cambios</button>
|
||||
</div>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<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">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.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>
|
||||
@@ -60,7 +60,7 @@
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">📁 Expedientes Electrónicos</h4>
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover table-bordered">
|
||||
<thead class="table-dark">
|
||||
@@ -96,7 +96,5 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://kit.fontawesome.com/a076d05399.js" crossorigin="anonymous"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -51,14 +51,16 @@
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">📤 Subir Archivos al Expediente</h4>
|
||||
<div class="card p-4 bg-white shadow-sm card-hover position-relative h-auto">
|
||||
<form action="/IMPORTADORES/expediente/subir_handler" method="POST" enctype="multipart/form-data">
|
||||
<div class="card p-4 bg-white shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<form action="/IMPORTADORES/expediente/subir_handler" method="POST" enctype="multipart/form-data">
|
||||
|
||||
<input type="hidden" name="id_solicitud" value="<?= $id_solicitud ?>">
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="archivo" class="form-label">Selecciona archivo(s)</label>
|
||||
<input class="form-control" type="file" name="archivos[]" id="archivo" multiple required>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-success mt-auto w-auto btn-animated">Subir</button>
|
||||
<a href="/IMPORTADORES/expediente/index" class="btn btn-secondary ms-2 mt-auto w-auto btn-animated">Cancelar</a>
|
||||
</form>
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">📂 Archivos del Expediente</h4>
|
||||
<div class="card p-4 bg-white shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-4 bg-white shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<?php if (empty($archivos)): ?>
|
||||
|
||||
<p>No hay archivos subidos para esta solicitud.</p>
|
||||
|
||||
@@ -38,6 +38,9 @@
|
||||
.btn-violet { background-color: #8b5cf6; color: white; }
|
||||
.text-violet { color: #8b5cf6; }
|
||||
.btn-violet:hover { background-color: #7c3aed; color: white; }
|
||||
.btn-lila { background-color: #c4b5fd; /* violeta claro */ color: white; border: none; }
|
||||
.btn-lila:hover { background-color: #a78bfa; /* tono ligeramente más fuerte */ color: white; }
|
||||
.text-lila { color: #c4b5fd; }
|
||||
/* 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 */
|
||||
@@ -110,7 +113,7 @@
|
||||
?>
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: <?= $delay ?>s;">
|
||||
<div class="card shadow-sm p-3 card-hover <?= $catalogo['obligatorio'] ? 'border-warning border-warning-animated' : '' ?>">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-<?= $catalogo['color'] ?> mb-3">
|
||||
<i class="<?= obtenerIconoCatalogo($catalogo['nombre']) ?> me-2"></i><?= $catalogo['nombre'] ?>
|
||||
</h5>
|
||||
|
||||
@@ -119,7 +119,7 @@ if ($tipoUsuario === 'agente_aduanal') {
|
||||
|
||||
<!-- Nuevo Estado -->
|
||||
<div class="col-md form-group-animated">
|
||||
<div class="card p-4 bg-white shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-4 bg-white shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<form id="estadoForm">
|
||||
<h4 class="mb-4 text-dark">➕ Nuevo Estado</h4><br>
|
||||
<!-- País -->
|
||||
@@ -154,7 +154,7 @@ if ($tipoUsuario === 'agente_aduanal') {
|
||||
|
||||
<!-- Nueva Ciudad -->
|
||||
<div class="col-md form-group-animated">
|
||||
<div class="card p-4 bg-white shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-4 bg-white shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<form id="ciudadForm" action="/IMPORTADORES/locaciones/guadarCiudad" method="POST" enctype="multipart/form-data">
|
||||
<h4 class="mb-4 text-dark">➕ Nueva Ciudad</h4>
|
||||
<!-- País -->
|
||||
|
||||
@@ -79,8 +79,8 @@ if ($tipoUsuario === 'agente_aduanal') {
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">🌍 Locaciones</h4>
|
||||
<a href="/IMPORTADORES/locaciones/alta" class="btn btn-success mb-3 mt-auto w-auto btn-animated">➕ Agregar Locación</a>
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<a href="/IMPORTADORES/locaciones/alta" class="btn btn-success mb-3 mt-auto w-auto btn-animated fade-in-up">➕ Agregar Locación</a>
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped" id="tabla-locaciones">
|
||||
<thead class="table-dark">
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">🗺️ Locaciones</h4>
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped" id="tabla-locaciones">
|
||||
<thead class="table-dark">
|
||||
|
||||
@@ -35,6 +35,14 @@ $mensajeMantenimiento = $config['mensaje_mantenimiento'] ?? 'El sistema se encue
|
||||
footer { background-color: #e9ecef; padding: 20px; text-align: center; font-size: 14px; color: #666; margin-top: 60px; }
|
||||
#mensaje { transition: opacity 0.3s ease; }
|
||||
@media (max-height: 600px) { footer { position: static !important; } }
|
||||
/* Efecto de glow para elementos activos */
|
||||
.btn.active { box-shadow: 0 0 20px rgba(var(--bs-primary-rgb), 0.5); }
|
||||
/* 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%; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -86,7 +94,7 @@ $mensajeMantenimiento = $config['mensaje_mantenimiento'] ?? 'El sistema se encue
|
||||
<input type="password" name="password" class="form-control" required autocomplete="current-password" value="">
|
||||
</div>
|
||||
<div class="d-grid">
|
||||
<button type="submit" class="btn btn-primary">Iniciar sesión</button>
|
||||
<button type="submit" class="btn btn-primary btn-sm mt-auto m-100 btn-animated">Iniciar sesión</button>
|
||||
</div>
|
||||
<div class="mb-3 text-end">
|
||||
<div style="display: flex; justify-content: center;">
|
||||
@@ -108,6 +116,7 @@ $mensajeMantenimiento = $config['mensaje_mantenimiento'] ?? 'El sistema se encue
|
||||
<footer class="fixed-bottom">
|
||||
© <?= date('Y') ?> <?= htmlspecialchars($siglas) ?> · <?= htmlspecialchars($nombre) ?>
|
||||
</footer>
|
||||
<!-- I.C.M -->
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -152,7 +152,7 @@
|
||||
</li>
|
||||
<!-- CONFIGURACIÓN -->
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/administrador/configuracion" class="nav-link">
|
||||
<a href="/IMPORTADORES/configuracion" class="nav-link">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M5 5V.13a2.96 2.96 0 0 0-1.293.749L.879 3.707A2.96 2.96 0 0 0 .13 5H5Z"/>
|
||||
<path d="M6.737 11.061a2.961 2.961 0 0 1 .81-1.515l6.117-6.116A4.839 4.839 0 0 1 16 2.141V2a1.97 1.97 0 0 0-1.933-2H7v5a2 2 0 0 1-2 2H0v11a1.969 1.969 0 0 0 1.933 2h12.134A1.97 1.97 0 0 0 16 18v-3.093l-1.546 1.546c-.413.413-.94.695-1.513.81l-3.4.679a2.947 2.947 0 0 1-1.85-.227 2.96 2.96 0 0 1-1.635-3.257l.681-3.397Z"/>
|
||||
@@ -248,7 +248,7 @@
|
||||
</li>
|
||||
<!-- CONFIGURACIÓN -->
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/administrador/configuracion" class="nav-link">
|
||||
<a href="/IMPORTADORES/configuracion" class="nav-link">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M5 5V.13a2.96 2.96 0 0 0-1.293.749L.879 3.707A2.96 2.96 0 0 0 .13 5H5Z"/>
|
||||
<path d="M6.737 11.061a2.961 2.961 0 0 1 .81-1.515l6.117-6.116A4.839 4.839 0 0 1 16 2.141V2a1.97 1.97 0 0 0-1.933-2H7v5a2 2 0 0 1-2 2H0v11a1.969 1.969 0 0 0 1.933 2h12.134A1.97 1.97 0 0 0 16 18v-3.093l-1.546 1.546c-.413.413-.94.695-1.513.81l-3.4.679a2.947 2.947 0 0 1-1.85-.227 2.96 2.96 0 0 1-1.635-3.257l.681-3.397Z"/>
|
||||
@@ -270,8 +270,12 @@
|
||||
const logoutBtn = document.getElementById('logout-btn');
|
||||
|
||||
if (!esDashboard) {
|
||||
welcomeText.style.display = 'none';
|
||||
logoutBtn.style.display = 'inline-block';
|
||||
if (welcomeText) {
|
||||
welcomeText.style.display = 'none';
|
||||
}
|
||||
if (logoutBtn) {
|
||||
logoutBtn.style.display = 'inline-block';
|
||||
}
|
||||
}
|
||||
|
||||
// Manejar estados activos basados en URL actual
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
<div class="navbar-content">
|
||||
<?php
|
||||
// Verifica si estás en el dashboard principal del importador
|
||||
$esDashboard = str_contains($_SERVER['REQUEST_URI'], '/agencias/dashboard');
|
||||
$esDashboard = str_contains($_SERVER['REQUEST_URI'], '/IMPORTADORES/agencias/dashboard');
|
||||
|
||||
if ($esDashboard): ?>
|
||||
<span id="welcome-text">Bienvenido, <?= htmlspecialchars($_SESSION['usuario_nombre']) ?></span>
|
||||
@@ -107,7 +107,7 @@
|
||||
</li>
|
||||
<!-- Patentes -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuPatentes" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuPatentesDesktop" role="button" aria-expanded="false" aria-controls="submenuPatentesDesktop">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm2 6a1 1 0 011-1h6a1 1 0 110 2H7a1 1 0 01-1-1zm1 3a1 1 0 100 2h6a1 1 0 100-2H7z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
@@ -116,7 +116,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuPatentes">
|
||||
<div class="collapse" id="submenuPatentesDesktop">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/patente/lista" class="nav-link">
|
||||
@@ -133,7 +133,7 @@
|
||||
</li>
|
||||
<!-- LOCACIONES -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuLocaciones" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuLocacionesDesktop" role="button" aria-expanded="false" aria-controls="submenuLocacionesDesktop">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M10 2C6.686 2 4 4.686 4 8c0 5.25 6 12 6 12s6-6.75 6-12c0-3.314-2.686-6-6-6zm0 8c-1.105 0-2-.895-2-2s.895-2 2-2 2 .895 2 2-.895 2-2 2z"/>
|
||||
</svg>
|
||||
@@ -142,7 +142,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuLocaciones">
|
||||
<div class="collapse" id="submenuLocacionesDesktop">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/locaciones/lista" class="nav-link">
|
||||
@@ -221,7 +221,7 @@
|
||||
</li>
|
||||
<!-- Patentes -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuPatentes" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuPatentesMobile" role="button" aria-expanded="false" aria-controls="submenuPatentesMobile">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm2 6a1 1 0 011-1h6a1 1 0 110 2H7a1 1 0 01-1-1zm1 3a1 1 0 100 2h6a1 1 0 100-2H7z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
@@ -230,7 +230,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuPatentes">
|
||||
<div class="collapse" id="submenuPatentesMobile">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/patente/lista" class="nav-link">
|
||||
@@ -247,7 +247,7 @@
|
||||
</li>
|
||||
<!-- LOCACIONES -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuLocaciones" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuLocacionesMobile" role="button" aria-expanded="false" aria-controls="submenuLocacionesMobile">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M10 2C6.686 2 4 4.686 4 8c0 5.25 6 12 6 12s6-6.75 6-12c0-3.314-2.686-6-6-6zm0 8c-1.105 0-2-.895-2-2s.895-2 2-2 2 .895 2 2-.895 2-2 2z"/>
|
||||
</svg>
|
||||
@@ -256,7 +256,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuLocaciones">
|
||||
<div class="collapse" id="submenuLocacionesMobile">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/locaciones/lista" class="nav-link">
|
||||
@@ -299,13 +299,17 @@
|
||||
<script>
|
||||
// Simular lógica de dashboard
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const esDashboard = window.location.pathname.includes('/administrador/dashboard');
|
||||
const esDashboard = window.location.pathname.includes('/agencias/dashboard');
|
||||
const welcomeText = document.getElementById('welcome-text');
|
||||
const logoutBtn = document.getElementById('logout-btn');
|
||||
|
||||
if (!esDashboard) {
|
||||
welcomeText.style.display = 'none';
|
||||
logoutBtn.style.display = 'inline-block';
|
||||
if (welcomeText) {
|
||||
welcomeText.style.display = 'none';
|
||||
}
|
||||
if (logoutBtn) {
|
||||
logoutBtn.style.display = 'inline-block';
|
||||
}
|
||||
}
|
||||
|
||||
// Manejar estados activos basados en URL actual
|
||||
@@ -319,31 +323,66 @@
|
||||
}
|
||||
});
|
||||
|
||||
// Manejar collapse manualmente
|
||||
document.querySelectorAll('[data-bs-toggle="collapse"]').forEach(trigger => {
|
||||
// Desactivar Bootstrap
|
||||
trigger.removeAttribute('data-bs-toggle');
|
||||
|
||||
// Inicializar estado correcto
|
||||
const target = document.querySelector(trigger.getAttribute('href'));
|
||||
if (target) {
|
||||
target.style.transition = 'height 0.3s ease, opacity 0.2s ease';
|
||||
target.style.overflow = 'hidden';
|
||||
|
||||
if (!target.classList.contains('show')) {
|
||||
target.style.height = '0';
|
||||
target.style.opacity = '0';
|
||||
}
|
||||
}
|
||||
|
||||
trigger.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
const targetId = this.getAttribute('href');
|
||||
const targetElement = document.querySelector(targetId);
|
||||
const isExpanded = this.getAttribute('aria-expanded') === 'true';
|
||||
|
||||
if (targetElement) {
|
||||
if (isExpanded) {
|
||||
// Cerrar
|
||||
targetElement.classList.remove('show');
|
||||
this.setAttribute('aria-expanded', 'false');
|
||||
} else {
|
||||
// Abrir
|
||||
targetElement.classList.add('show');
|
||||
this.setAttribute('aria-expanded', 'true');
|
||||
}
|
||||
const target = document.querySelector(this.getAttribute('href'));
|
||||
const icon = this.querySelector('.collapse-icon');
|
||||
|
||||
if (!target) return;
|
||||
|
||||
const isExpanding = this.getAttribute('aria-expanded') !== 'true';
|
||||
|
||||
if (isExpanding) {
|
||||
// Abrir
|
||||
target.classList.add('show');
|
||||
target.style.height = '0';
|
||||
target.style.opacity = '0';
|
||||
target.style.display = 'block';
|
||||
|
||||
// Forzar reflow
|
||||
void target.offsetHeight;
|
||||
|
||||
target.style.height = target.scrollHeight + 'px';
|
||||
target.style.opacity = '1';
|
||||
|
||||
this.setAttribute('aria-expanded', 'true');
|
||||
if (icon) icon.style.transform = 'rotate(180deg)';
|
||||
} else {
|
||||
// Cerrar
|
||||
target.style.height = target.scrollHeight + 'px';
|
||||
target.style.opacity = '1';
|
||||
|
||||
// Forzar reflow
|
||||
void target.offsetHeight;
|
||||
|
||||
target.style.height = '0';
|
||||
target.style.opacity = '0';
|
||||
|
||||
setTimeout(() => {
|
||||
target.classList.remove('show');
|
||||
target.style.display = '';
|
||||
}, 300);
|
||||
|
||||
this.setAttribute('aria-expanded', 'false');
|
||||
if (icon) icon.style.transform = 'rotate(0deg)';
|
||||
}
|
||||
});
|
||||
|
||||
// Remover el atributo data-bs-toggle para evitar conflictos
|
||||
trigger.removeAttribute('data-bs-toggle');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -98,7 +98,7 @@
|
||||
</li>
|
||||
<!-- Patentes -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuPatentes" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuPatentesDesktop" role="button" aria-expanded="false" aria-controls="submenuPatentesDesktop">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm2 6a1 1 0 011-1h6a1 1 0 110 2H7a1 1 0 01-1-1zm1 3a1 1 0 100 2h6a1 1 0 100-2H7z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
@@ -107,7 +107,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuPatentes">
|
||||
<div class="collapse" id="submenuPatentesDesktop">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/patente/lista" class="nav-link">
|
||||
@@ -124,7 +124,7 @@
|
||||
</li>
|
||||
<!-- LOCACIONES -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuLocaciones" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuLocacionesDesktop" role="button" aria-expanded="false" aria-controls="submenuLocacionesDesktop">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M10 2C6.686 2 4 4.686 4 8c0 5.25 6 12 6 12s6-6.75 6-12c0-3.314-2.686-6-6-6zm0 8c-1.105 0-2-.895-2-2s.895-2 2-2 2 .895 2 2-.895 2-2 2z"/>
|
||||
</svg>
|
||||
@@ -133,7 +133,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuLocaciones">
|
||||
<div class="collapse" id="submenuLocacionesDesktop">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/locaciones/lista" class="nav-link">
|
||||
@@ -194,7 +194,7 @@
|
||||
</li>
|
||||
<!-- Patentes -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuPatentes" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuPatentesMobile" role="button" aria-expanded="false" aria-controls="submenuPatentesMobile">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm2 6a1 1 0 011-1h6a1 1 0 110 2H7a1 1 0 01-1-1zm1 3a1 1 0 100 2h6a1 1 0 100-2H7z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
@@ -203,7 +203,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuPatentes">
|
||||
<div class="collapse" id="submenuPatentesMobile">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/patente/lista" class="nav-link">
|
||||
@@ -220,7 +220,7 @@
|
||||
</li>
|
||||
<!-- LOCACIONES -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuLocaciones" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuLocacionesMobile" role="button" aria-expanded="false" aria-controls="submenuLocacionesMobile">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M10 2C6.686 2 4 4.686 4 8c0 5.25 6 12 6 12s6-6.75 6-12c0-3.314-2.686-6-6-6zm0 8c-1.105 0-2-.895-2-2s.895-2 2-2 2 .895 2 2-.895 2-2 2z"/>
|
||||
</svg>
|
||||
@@ -229,7 +229,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuLocaciones">
|
||||
<div class="collapse" id="submenuLocacionesMobile">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/locaciones/lista" class="nav-link">
|
||||
@@ -263,13 +263,17 @@
|
||||
<script>
|
||||
// Simular lógica de dashboard
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const esDashboard = window.location.pathname.includes('/administrador/dashboard');
|
||||
const esDashboard = window.location.pathname.includes('/agentes/dashboard');
|
||||
const welcomeText = document.getElementById('welcome-text');
|
||||
const logoutBtn = document.getElementById('logout-btn');
|
||||
|
||||
if (!esDashboard) {
|
||||
welcomeText.style.display = 'none';
|
||||
logoutBtn.style.display = 'inline-block';
|
||||
if (welcomeText) {
|
||||
welcomeText.style.display = 'none';
|
||||
}
|
||||
if (logoutBtn) {
|
||||
logoutBtn.style.display = 'inline-block';
|
||||
}
|
||||
}
|
||||
|
||||
// Manejar estados activos basados en URL actual
|
||||
|
||||
@@ -177,6 +177,17 @@ function obtenerUrlPermiso($permiso) {
|
||||
.permission-scope { font-size: 0.65rem; color: #6c757d; margin-left: 5px; padding: 1px 4px; background-color: rgba(108, 117, 125, 0.1); border-radius: 2px; }
|
||||
.submenu-item { font-size: 0.9rem; padding-left: 1rem !important; }
|
||||
.submenu-item:hover { background-color: rgba(73, 80, 87, 0.7) !important; }
|
||||
/* Transiciones para collapse manual */
|
||||
.collapse {
|
||||
overflow: hidden;
|
||||
transition: height 0.3s ease;
|
||||
}
|
||||
|
||||
/* Estilo para íconos */
|
||||
.collapse-icon {
|
||||
transition: transform 0.3s ease;
|
||||
margin-left: auto;
|
||||
}
|
||||
</style>
|
||||
|
||||
<!-- NAVBAR -->
|
||||
@@ -241,10 +252,10 @@ function obtenerUrlPermiso($permiso) {
|
||||
<?php if ($permisosUsuario['preferencias']): ?>
|
||||
<?php $enDashboardPreferencias = $_SERVER['REQUEST_URI'] === '/IMPORTADORES/preferencias/index'; ?>
|
||||
<a class="nav-link <?= $esVistaPreferencias ? 'active' : '' ?>"
|
||||
href="<?= $enDashboardPreferencias ? '#submenuPreferencias' : '/IMPORTADORES/preferencias/index' ?>"
|
||||
<?= $enDashboardPreferencias ? 'data-bs-toggle="collapse"' : '' ?>
|
||||
role="button" aria-expanded="false" aria-controls="submenuPreferencias"
|
||||
onclick="<?= $enDashboardPreferencias ? 'return true;' : 'event.preventDefault(); window.location.href = \'/IMPORTADORES/preferencias/index\';' ?>">
|
||||
href="<?= $enDashboardPreferencias ? '#submenuPreferenciasDesktop' : '/IMPORTADORES/preferencias/index' ?>"
|
||||
<?= $enDashboardPreferencias ? 'data-bs-toggle="collapse"' : '' ?>
|
||||
role="button" aria-expanded="false" aria-controls="submenuPreferenciasDesktop"
|
||||
onclick="<?= $enDashboardPreferencias ? 'return true;' : 'event.preventDefault(); window.location.href = \'/IMPORTADORES/preferencias/index\';' ?>">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M11.3 1.046a1 1 0 00-2.6 0L7.528 3H4a1 1 0 000 2h1v10H4a1 1 0 000 2h3.528l1.172 1.954a1 1 0 001.6 0L12.472 17H16a1 1 0 000-2h-1V5h1a1 1 0 100-2h-3.528L11.3 1.046zM9 6a1 1 0 011 1v6a1 1 0 11-2 0V7a1 1 0 011-1z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
@@ -253,7 +264,7 @@ function obtenerUrlPermiso($permiso) {
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuPreferencias">
|
||||
<div class="collapse" id="submenuPreferenciasDesktop">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/preferencias/notificaciones" class="nav-link">
|
||||
@@ -274,10 +285,10 @@ function obtenerUrlPermiso($permiso) {
|
||||
<?php if ($permisosUsuario['seguridad']): ?>
|
||||
<?php $enDashboardSeguridad = $_SERVER['REQUEST_URI'] === '/IMPORTADORES/seguridad/index'; ?>
|
||||
<a class="nav-link <?= $esVistaSeguridad ? 'active' : '' ?>"
|
||||
href="<?= $enDashboardSeguridad ? '#submenuSeguridad' : '/IMPORTADORES/seguridad/index' ?>"
|
||||
<?= $enDashboardSeguridad ? 'data-bs-toggle="collapse"' : '' ?>
|
||||
role="button" aria-expanded="false" aria-controls="submenuSeguridad"
|
||||
onclick="<?= $enDashboardSeguridad ? 'return true;' : 'event.preventDefault(); window.location.href = \'/IMPORTADORES/seguridad/index\';' ?>">
|
||||
href="<?= $enDashboardSeguridad ? '#submenuSeguridadDesktop' : '/IMPORTADORES/seguridad/index' ?>"
|
||||
<?= $enDashboardSeguridad ? 'data-bs-toggle="collapse"' : '' ?>
|
||||
role="button" aria-expanded="false" aria-controls="submenuSeguridadDesktop"
|
||||
onclick="<?= $enDashboardSeguridad ? 'return true;' : 'event.preventDefault(); window.location.href = \'/IMPORTADORES/seguridad/index\';' ?>">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M10 2a4 4 0 00-4 4v2H5a2 2 0 00-2 2v6a2 2 0 002 2h10a2 2 0 002-2v-6a2 2 0 00-2-2h-1V6a4 4 0 00-4-4zm2 6V6a2 2 0 10-4 0v2h4z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
@@ -286,7 +297,7 @@ function obtenerUrlPermiso($permiso) {
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuSeguridad">
|
||||
<div class="collapse" id="submenuSeguridadDesktop">
|
||||
<nav class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/seguridad/opciones" class="nav-link">
|
||||
@@ -302,10 +313,10 @@ function obtenerUrlPermiso($permiso) {
|
||||
<?php if (tieneAccesoBitacoras($permisosBitacoras)): ?>
|
||||
<?php $enDashboardBitacoras = $_SERVER['REQUEST_URI'] === '/IMPORTADORES/bitacoras/index'; ?>
|
||||
<a class="nav-link <?= $esVistaBitacoras ? 'active' : '' ?>"
|
||||
href="<?= $enDashboardBitacoras ? '#submenuBitacoras' : '/IMPORTADORES/bitacoras/index' ?>"
|
||||
<?= $enDashboardBitacoras ? 'data-bs-toggle="collapse"' : '' ?>
|
||||
role="button" aria-expanded="<?= $enDashboardBitacoras ? 'false' : 'false' ?>" aria-controls="submenuBitacoras"
|
||||
onclick="<?= $enDashboardBitacoras ? 'return true;' : 'event.preventDefault(); window.location.href = \'/IMPORTADORES/bitacoras/index\';' ?>">
|
||||
href="<?= $enDashboardBitacoras ? '#submenuBitacorasDesktop' : '/IMPORTADORES/bitacoras/index' ?>"
|
||||
<?= $enDashboardBitacoras ? 'data-bs-toggle="collapse"' : '' ?>
|
||||
role="button" aria-expanded="<?= $enDashboardBitacoras ? 'false' : 'false' ?>" aria-controls="submenuBitacorasDesktop"
|
||||
onclick="<?= $enDashboardBitacoras ? 'return true;' : 'event.preventDefault(); window.location.href = \'/IMPORTADORES/bitacoras/index\';' ?>">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M4 3a2 2 0 00-2 2v10a2 2 0 002 2h12a1 1 0 001-1V4a1 1 0 00-1-1H4zm0 2h11v10H4V5z"/>
|
||||
<path d="M6 7h5v1H6V7zm0 3h8v1H6v-1z"/>
|
||||
@@ -315,7 +326,7 @@ function obtenerUrlPermiso($permiso) {
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuBitacoras">
|
||||
<div class="collapse" id="submenuBitacorasDesktop">
|
||||
<nav class="nav flex-column submenu">
|
||||
<?php foreach ($permisosBitacoras as $permiso => $tienePermiso): ?>
|
||||
<li class="nav-item">
|
||||
@@ -369,7 +380,148 @@ function obtenerUrlPermiso($permiso) {
|
||||
<div class="offcanvas-body">
|
||||
<nav class="sidebar-nav">
|
||||
<ul class="nav flex-column">
|
||||
|
||||
<!-- INFORMACIÓN GENERAL -->
|
||||
<li class="nav-item">
|
||||
<?php if ($permisosUsuario['informacion_general']): ?>
|
||||
<a href="/IMPORTADORES/configuracion/index" class="nav-link">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M18 10c0 4.418-3.582 8-8 8s-8-3.582-8-8 3.582-8 8-8 8 3.582 8 8zm-8-4a1 1 0 100 2 1 1 0 000-2zm-1 4a1 1 0 000 2h1v3a1 1 0 102 0v-4a1 1 0 00-1-1h-2z" clip-rule="evenodd" />
|
||||
</svg>
|
||||
<span>Información general</span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</li>
|
||||
<!-- AUTOMATIZACIONES -->
|
||||
<li class="nav-item">
|
||||
<?php if ($permisosUsuario['automatizaciones']): ?>
|
||||
<a href="/IMPORTADORES/automatizaciones/index" class="nav-link">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M13 7H7v6h6V7z" />
|
||||
<path fill-rule="evenodd" d="M5 3a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2V9.586a1 1 0 00-.293-.707l-4.586-4.586A1 1 0 0012.414 4H5zm7 1.414L16.586 10H13a1 1 0 01-1-1V4.414z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
<span>Automatizaciones</span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</li>
|
||||
<!-- PREFERENCIAS -->
|
||||
<li class="nav-item">
|
||||
<?php if ($permisosUsuario['preferencias']): ?>
|
||||
<?php $enDashboardPreferencias = $_SERVER['REQUEST_URI'] === '/IMPORTADORES/preferencias/index'; ?>
|
||||
<a class="nav-link <?= $esVistaPreferencias ? 'active' : '' ?>"
|
||||
href="<?= $enDashboardPreferencias ? '#submenuPreferenciasMobile' : '/IMPORTADORES/preferencias/index' ?>"
|
||||
<?= $enDashboardPreferencias ? 'data-bs-toggle="collapse"' : '' ?>
|
||||
role="button" aria-expanded="false" aria-controls="submenuPreferenciasMobile"
|
||||
onclick="<?= $enDashboardPreferencias ? 'return true;' : 'event.preventDefault(); window.location.href = \'/IMPORTADORES/preferencias/index\';' ?>">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M11.3 1.046a1 1 0 00-2.6 0L7.528 3H4a1 1 0 000 2h1v10H4a1 1 0 000 2h3.528l1.172 1.954a1 1 0 001.6 0L12.472 17H16a1 1 0 000-2h-1V5h1a1 1 0 100-2h-3.528L11.3 1.046zM9 6a1 1 0 011 1v6a1 1 0 11-2 0V7a1 1 0 011-1z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
<span>Preferencias</span>
|
||||
<svg class="collapse-icon" fill="none" stroke="currentColor" viewBox="0 0 10 6">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuPreferenciasMobile">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/preferencias/notificaciones" class="nav-link">
|
||||
Gestión de Notificaciones
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/preferencias/catalogos" class="nav-link">
|
||||
Visualización de Catálogos
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</li>
|
||||
<!-- SEGURIDAD -->
|
||||
<li class="nav-item">
|
||||
<?php if ($permisosUsuario['seguridad']): ?>
|
||||
<?php $enDashboardSeguridad = $_SERVER['REQUEST_URI'] === '/IMPORTADORES/seguridad/index'; ?>
|
||||
<a class="nav-link <?= $esVistaSeguridad ? 'active' : '' ?>"
|
||||
href="<?= $enDashboardSeguridad ? '#submenuSeguridadMobile' : '/IMPORTADORES/seguridad/index' ?>"
|
||||
<?= $enDashboardSeguridad ? 'data-bs-toggle="collapse"' : '' ?>
|
||||
role="button" aria-expanded="false" aria-controls="submenuSeguridadMobile"
|
||||
onclick="<?= $enDashboardSeguridad ? 'return true;' : 'event.preventDefault(); window.location.href = \'/IMPORTADORES/seguridad/index\';' ?>">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M10 2a4 4 0 00-4 4v2H5a2 2 0 00-2 2v6a2 2 0 002 2h10a2 2 0 002-2v-6a2 2 0 00-2-2h-1V6a4 4 0 00-4-4zm2 6V6a2 2 0 10-4 0v2h4z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
<span>Seguridad</span>
|
||||
<svg class="collapse-icon" fill="none" stroke="currentColor" viewBox="0 0 10 6">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuSeguridadMobile">
|
||||
<nav class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/seguridad/opciones" class="nav-link">
|
||||
Opciones de Seguridad
|
||||
</a>
|
||||
</li>
|
||||
</nav>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</li>
|
||||
<!-- BITÁCORAS CON PERMISOS ESPECÍFICOS -->
|
||||
<li class="nav-item">
|
||||
<?php if (tieneAccesoBitacoras($permisosBitacoras)): ?>
|
||||
<?php $enDashboardBitacoras = $_SERVER['REQUEST_URI'] === '/IMPORTADORES/bitacoras/index'; ?>
|
||||
<a class="nav-link <?= $esVistaBitacoras ? 'active' : '' ?>"
|
||||
href="<?= $enDashboardBitacoras ? '#submenuBitacorasMobile' : '/IMPORTADORES/bitacoras/index' ?>"
|
||||
<?= $enDashboardBitacoras ? 'data-bs-toggle="collapse"' : '' ?>
|
||||
role="button" aria-expanded="<?= $enDashboardBitacoras ? 'false' : 'false' ?>" aria-controls="submenuBitacorasMobile"
|
||||
onclick="<?= $enDashboardBitacoras ? 'return true;' : 'event.preventDefault(); window.location.href = \'/IMPORTADORES/bitacoras/index\';' ?>">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M4 3a2 2 0 00-2 2v10a2 2 0 002 2h12a1 1 0 001-1V4a1 1 0 00-1-1H4zm0 2h11v10H4V5z"/>
|
||||
<path d="M6 7h5v1H6V7zm0 3h8v1H6v-1z"/>
|
||||
</svg>
|
||||
<span>Bitácoras</span>
|
||||
<svg class="collapse-icon" fill="none" stroke="currentColor" viewBox="0 0 10 6">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuBitacorasMobile">
|
||||
<nav class="nav flex-column submenu">
|
||||
<?php foreach ($permisosBitacoras as $permiso => $tienePermiso): ?>
|
||||
<li class="nav-item">
|
||||
<?php if ($tienePermiso): ?>
|
||||
<?php
|
||||
$url = obtenerUrlPermiso($permiso);
|
||||
$texto = obtenerTextoPermiso($permiso, $tipoUsuario);
|
||||
$esActivo = $_SERVER['REQUEST_URI'] === $url;
|
||||
|
||||
// Scope según dashboard
|
||||
$scope = '';
|
||||
if ($tipoUsuario === 'super_admin') {
|
||||
$scope = 'Global';
|
||||
} elseif ($tipoUsuario === 'admin_agencia' || $tipoUsuario === 'agente_aduanal') {
|
||||
if (in_array($permiso, ['acceso_usuarios_agencia', 'registro_vinculaciones'])) {
|
||||
$scope = 'Agencia';
|
||||
} elseif (in_array($permiso, ['mis_vinculaciones', 'mi_actividad'])) {
|
||||
$scope = 'Personal';
|
||||
}
|
||||
} elseif ($tipoUsuario === 'importador') {
|
||||
$scope = 'Personal';
|
||||
}
|
||||
?>
|
||||
<a href="<?= $url ?>"
|
||||
class="nav-link submenu-item <?= $esActivo ? 'active' : '' ?>">
|
||||
<span>
|
||||
<?= htmlspecialchars($texto) ?>
|
||||
<?php if ($scope): ?>
|
||||
<span class="permission-scope"><?= $scope ?></span>
|
||||
<?php endif; ?>
|
||||
</span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</nav>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
@@ -378,55 +530,65 @@ function obtenerUrlPermiso($permiso) {
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// Detectar la ruta actual
|
||||
const currentPath = window.location.pathname;
|
||||
|
||||
// Función para abrir collapse si la página actual está en esa sección
|
||||
function inicializarCollapses() {
|
||||
// Preferencias
|
||||
if (currentPath.includes('/preferencias/')) {
|
||||
const preferencesCollapse = document.getElementById('submenuPreferencias');
|
||||
if (preferencesCollapse) {
|
||||
preferencesCollapse.classList.add('show');
|
||||
const trigger = document.querySelector('[aria-controls="submenuPreferencias"]');
|
||||
if (trigger) trigger.setAttribute('aria-expanded', 'true');
|
||||
}
|
||||
}
|
||||
const currentPath = window.location.pathname.replace(/\/$/, '');
|
||||
|
||||
// Inicializar todos los collapses
|
||||
document.querySelectorAll('[data-bs-toggle="collapse"]').forEach(trigger => {
|
||||
const targetId = trigger.getAttribute('data-bs-target') || trigger.getAttribute('href');
|
||||
const target = document.querySelector(targetId);
|
||||
const icon = trigger.querySelector('.collapse-icon');
|
||||
|
||||
// Seguridad
|
||||
if (currentPath.includes('/seguridad/')) {
|
||||
const securityCollapse = document.getElementById('submenuSeguridad');
|
||||
if (securityCollapse) {
|
||||
securityCollapse.classList.add('show');
|
||||
const trigger = document.querySelector('[aria-controls="submenuSeguridad"]');
|
||||
if (trigger) trigger.setAttribute('aria-expanded', 'true');
|
||||
}
|
||||
}
|
||||
|
||||
// Bitácoras
|
||||
if (currentPath.includes('/bitacoras/')) {
|
||||
const bitacorasCollapse = document.getElementById('submenuBitacoras');
|
||||
if (bitacorasCollapse) {
|
||||
bitacorasCollapse.classList.add('show');
|
||||
const trigger = document.querySelector('[aria-controls="submenuBitacoras"]');
|
||||
if (trigger) trigger.setAttribute('aria-expanded', 'true');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Marcar enlaces activos
|
||||
function marcarEnlacesActivos() {
|
||||
const navLinks = document.querySelectorAll('.nav-link');
|
||||
navLinks.forEach(link => {
|
||||
const href = link.getAttribute('href');
|
||||
if (href && currentPath === href) {
|
||||
link.classList.add('active');
|
||||
}
|
||||
if (!target) return;
|
||||
|
||||
// 1. Inicialización automática basada en la ruta
|
||||
const shouldExpand = Array.from(target.querySelectorAll('a')).some(link => {
|
||||
const href = link.getAttribute('href')?.replace(/\/$/, '');
|
||||
return href && currentPath.startsWith(href);
|
||||
});
|
||||
}
|
||||
|
||||
// Inicializar todo
|
||||
inicializarCollapses();
|
||||
marcarEnlacesActivos();
|
||||
|
||||
// 2. Configurar el estado inicial
|
||||
if (shouldExpand) {
|
||||
target.classList.add('show');
|
||||
trigger.setAttribute('aria-expanded', 'true');
|
||||
if (icon) icon.style.transform = 'rotate(180deg)';
|
||||
}
|
||||
|
||||
// 3. Manejar clicks manuales
|
||||
trigger.addEventListener('click', function(e) {
|
||||
// Solo prevenir el comportamiento por defecto si es necesario
|
||||
if (this.getAttribute('href') === '#' || this.getAttribute('data-bs-target') === '#') {
|
||||
e.preventDefault();
|
||||
}
|
||||
|
||||
const isExpanded = this.getAttribute('aria-expanded') === 'true';
|
||||
|
||||
// Rotar el ícono inmediatamente
|
||||
if (icon) {
|
||||
icon.style.transform = isExpanded ? 'rotate(0deg)' : 'rotate(180deg)';
|
||||
}
|
||||
|
||||
// Actualizar atributo ARIA
|
||||
this.setAttribute('aria-expanded', !isExpanded);
|
||||
});
|
||||
|
||||
// 4. Manejar eventos de Bootstrap para sincronización
|
||||
target.addEventListener('show.bs.collapse', () => {
|
||||
trigger.setAttribute('aria-expanded', 'true');
|
||||
if (icon) icon.style.transform = 'rotate(180deg)';
|
||||
});
|
||||
|
||||
target.addEventListener('hide.bs.collapse', () => {
|
||||
trigger.setAttribute('aria-expanded', 'false');
|
||||
if (icon) icon.style.transform = 'rotate(0deg)';
|
||||
});
|
||||
});
|
||||
|
||||
// Marcar enlaces activos
|
||||
document.querySelectorAll('.nav-link').forEach(link => {
|
||||
const href = link.getAttribute('href')?.replace(/\/$/, '');
|
||||
if (href && (currentPath === href || currentPath.startsWith(href + '/'))) {
|
||||
link.classList.add('active');
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -54,12 +54,12 @@
|
||||
<button class="menu-toggle d-md-none me-3" type="button" data-bs-toggle="offcanvas" data-bs-target="#sidebarMenu">
|
||||
☰
|
||||
</button>
|
||||
<span class="navbar-brand">SIIH | Administrador</span>
|
||||
<span class="navbar-brand">SIIH | Importador</span>
|
||||
<div class="d-flex ms-auto text-white">
|
||||
<div id="navbar-content">
|
||||
<?php
|
||||
// Verifica si estás en el dashboard principal del administrador
|
||||
$esDashboard = str_contains($_SERVER['REQUEST_URI'], '/administrador/dashboard');
|
||||
$esDashboard = str_contains($_SERVER['REQUEST_URI'], '/IMPORTADORES/importadores/dashboard');
|
||||
|
||||
if ($esDashboard): ?>
|
||||
<span id="welcome-text">Bienvenido, <?= htmlspecialchars($_SESSION['usuario_nombre']) ?></span>
|
||||
@@ -97,7 +97,7 @@
|
||||
</li>
|
||||
<!-- VINCULACIONES -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuVinculaciones" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuVinculacionesDesktop" role="button" aria-expanded="false" aria-controls="submenuVinculacionesDesktop">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M12.586 4.586a2 2 0 112.828 2.828l-3 3a2 2 0 01-2.828 0 1 1 0 00-1.414 1.414 4 4 0 005.656 0l3-3a4 4 0 00-5.656-5.656l-1.5 1.5a1 1 0 101.414 1.414l1.5-1.5z"/>
|
||||
<path d="M7.414 15.414a2 2 0 01-2.828-2.828l3-3a2 2 0 012.828 0 1 1 0 001.414-1.414 4 4 0 00-5.656 0l-3 3a4 4 0 105.656 5.656l1.5-1.5a1 1 0 10-1.414-1.414l-1.5 1.5z"/>
|
||||
@@ -107,7 +107,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuVinculaciones">
|
||||
<div class="collapse" id="submenuVinculacionesDesktop">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/vinculaciones/vinculacionesUsuario" class="nav-link">
|
||||
@@ -124,7 +124,7 @@
|
||||
</li>
|
||||
<!-- TRANSPORTISTAS -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuTransportistas" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuTransportistasDesktop" role="button" aria-expanded="false" aria-controls="submenuTransportistasDesktop">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M3 4a1 1 0 011-1h12a1 1 0 011 1v2a1 1 0 01-1 1H4a1 1 0 01-1-1V4zM3 10a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H4a1 1 0 01-1-1v-6zM14 9a1 1 0 00-1 1v6a1 1 0 001 1h2a1 1 0 001-1v-6a1 1 0 00-1-1h-2z"/>
|
||||
</svg>
|
||||
@@ -133,7 +133,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuTransportistas">
|
||||
<div class="collapse" id="submenuTransportistasDesktop">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/transportistas/lista" class="nav-link">
|
||||
@@ -155,7 +155,7 @@
|
||||
</li>
|
||||
<!-- TRANSPORTES -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuTransportes" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuTransportesDesktop" role="button" aria-expanded="false" aria-controls="submenuTransportesDesktop">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M8 16.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM15 16.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0z"/>
|
||||
<path d="M3 4a1 1 0 00-1 1v10a1 1 0 001 1h1.464a1.5 1.5 0 002.072 0h6.928a1.5 1.5 0 002.072 0H17a1 1 0 001-1V5a1 1 0 00-1-1H3zM4 7h12v2H4V7zm0 4h12v2H4v-2z"/>
|
||||
@@ -165,7 +165,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuTransportes">
|
||||
<div class="collapse" id="submenuTransportesDesktop">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/transportes/lista" class="nav-link">
|
||||
@@ -187,7 +187,7 @@
|
||||
</li>
|
||||
<!-- CHOFERES -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuChoferes" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuChoferesDesktop" role="button" aria-expanded="false" aria-controls="submenuChoferesDesktop">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
@@ -196,7 +196,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuChoferes">
|
||||
<div class="collapse" id="submenuChoferesDesktop">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/choferes/lista" class="nav-link">
|
||||
@@ -213,7 +213,7 @@
|
||||
</li>
|
||||
<!-- PROVEEDORES -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuProveedores" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuProveedoresDesktop" role="button" aria-expanded="false" aria-controls="submenuProveedoresDesktop">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
||||
<path fill-rule="evenodd" d="M4 3a2 2 0 00-2 2v10a2 2 0 002 2h12a2 2 0 002-2V5a2 2 0 00-2-2H4zm12 12H4l4-8 3 6 2-4 3 6z" clip-rule="evenodd"/>
|
||||
@@ -223,7 +223,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuProveedores">
|
||||
<div class="collapse" id="submenuProveedoresDesktop">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/proveedores" class="nav-link">
|
||||
@@ -240,7 +240,7 @@
|
||||
</li>
|
||||
<!-- PRODUCTOS FRECUENTES -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuProductosFrecuentes" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuProductosFrecuentesDesktop" role="button" aria-expanded="false" aria-controls="submenuProductosFrecuentesDesktop">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
|
||||
</svg>
|
||||
@@ -249,7 +249,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuProductosFrecuentes">
|
||||
<div class="collapse" id="submenuProductosFrecuentesDesktop">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/productos_frecuentes/editar" class="nav-link">
|
||||
@@ -273,7 +273,7 @@
|
||||
</li>
|
||||
<!-- SOLICITUDES DE IMPORTACIÓN -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuSolicitudes" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuSolicitudesDesktop" role="button" aria-expanded="false" aria-controls="submenuSolicitudesDesktop">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm2 6a1 1 0 011-1h6a1 1 0 110 2H7a1 1 0 01-1-1zm1 3a1 1 0 100 2h6a1 1 0 100-2H7z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
@@ -282,7 +282,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuSolicitudes">
|
||||
<div class="collapse" id="submenuSolicitudesDesktop">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/solicitud_importacion/lista" class="nav-link">
|
||||
@@ -299,7 +299,7 @@
|
||||
</li>
|
||||
<!-- EXPEDIENTE ELECTRÓNICO -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuExpediente" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuExpedienteDesktop" role="button" aria-expanded="false" aria-controls="submenuExpedienteDesktop">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M3 4a1 1 0 011-1h3a1 1 0 011 1v3a1 1 0 01-1 1H4a1 1 0 01-1-1V4zm6 0a1 1 0 011-1h3a1 1 0 011 1v3a1 1 0 01-1 1h-3a1 1 0 01-1-1V4zm6 0a1 1 0 011-1h3a1 1 0 011 1v3a1 1 0 01-1 1h-3a1 1 0 01-1-1V4zM3 10a1 1 0 011-1h3a1 1 0 011 1v3a1 1 0 01-1 1H4a1 1 0 01-1-1v-3zm6 0a1 1 0 011-1h3a1 1 0 011 1v3a1 1 0 01-1 1h-3a1 1 0 01-1-1v-3zm6 0a1 1 0 011-1h3a1 1 0 011 1v3a1 1 0 01-1 1h-3a1 1 0 01-1-1v-3z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
@@ -308,7 +308,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuExpediente">
|
||||
<div class="collapse" id="submenuExpedienteDesktop">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/expediente/index" class="nav-link">
|
||||
@@ -363,7 +363,7 @@
|
||||
</li>
|
||||
<!-- VINCULACIONES -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuVinculaciones" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuVinculacionesMobile" role="button" aria-expanded="false" aria-controls="submenuVinculacionesMobile">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M12.586 4.586a2 2 0 112.828 2.828l-3 3a2 2 0 01-2.828 0 1 1 0 00-1.414 1.414 4 4 0 005.656 0l3-3a4 4 0 00-5.656-5.656l-1.5 1.5a1 1 0 101.414 1.414l1.5-1.5z"/>
|
||||
<path d="M7.414 15.414a2 2 0 01-2.828-2.828l3-3a2 2 0 012.828 0 1 1 0 001.414-1.414 4 4 0 00-5.656 0l-3 3a4 4 0 105.656 5.656l1.5-1.5a1 1 0 10-1.414-1.414l-1.5 1.5z"/>
|
||||
@@ -373,7 +373,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuVinculaciones">
|
||||
<div class="collapse" id="submenuVinculacionesMobile">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/vinculaciones/vinculacionesUsuario" class="nav-link">
|
||||
@@ -390,7 +390,7 @@
|
||||
</li>
|
||||
<!-- TRANSPORTISTAS -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuTransportistas" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuTransportistasMobile" role="button" aria-expanded="false" aria-controls="submenuTransportistasMobile">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M3 4a1 1 0 011-1h12a1 1 0 011 1v2a1 1 0 01-1 1H4a1 1 0 01-1-1V4zM3 10a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H4a1 1 0 01-1-1v-6zM14 9a1 1 0 00-1 1v6a1 1 0 001 1h2a1 1 0 001-1v-6a1 1 0 00-1-1h-2z"/>
|
||||
</svg>
|
||||
@@ -399,7 +399,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuTransportistas">
|
||||
<div class="collapse" id="submenuTransportistasMobile">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/transportistas/lista" class="nav-link">
|
||||
@@ -421,7 +421,7 @@
|
||||
</li>
|
||||
<!-- TRANSPORTES -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuTransportes" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuTransportesMobile" role="button" aria-expanded="false" aria-controls="submenuTransportesMobile">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M8 16.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM15 16.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0z"/>
|
||||
<path d="M3 4a1 1 0 00-1 1v10a1 1 0 001 1h1.464a1.5 1.5 0 002.072 0h6.928a1.5 1.5 0 002.072 0H17a1 1 0 001-1V5a1 1 0 00-1-1H3zM4 7h12v2H4V7zm0 4h12v2H4v-2z"/>
|
||||
@@ -431,7 +431,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuTransportes">
|
||||
<div class="collapse" id="submenuTransportesMobile">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/transportes/lista" class="nav-link">
|
||||
@@ -453,7 +453,7 @@
|
||||
</li>
|
||||
<!-- CHOFERES -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuChoferes" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuChoferesMobile" role="button" aria-expanded="false" aria-controls="submenuChoferesMobile">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
@@ -462,7 +462,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuChoferes">
|
||||
<div class="collapse" id="submenuChoferesMobile">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/choferes/lista" class="nav-link">
|
||||
@@ -479,7 +479,7 @@
|
||||
</li>
|
||||
<!-- PROVEEDORES -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuProveedores" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuProveedoresMobile" role="button" aria-expanded="false" aria-controls="submenuProveedoresMobile">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
||||
<path fill-rule="evenodd" d="M4 3a2 2 0 00-2 2v10a2 2 0 002 2h12a2 2 0 002-2V5a2 2 0 00-2-2H4zm12 12H4l4-8 3 6 2-4 3 6z" clip-rule="evenodd"/>
|
||||
@@ -489,7 +489,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuProveedores">
|
||||
<div class="collapse" id="submenuProveedoresMobile">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/proveedores" class="nav-link">
|
||||
@@ -506,7 +506,7 @@
|
||||
</li>
|
||||
<!-- PRODUCTOS FRECUENTES -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuProductosFrecuentes" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuProductosFrecuentesMobile" role="button" aria-expanded="false" aria-controls="submenuProductosFrecuentesMobile">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
|
||||
</svg>
|
||||
@@ -515,7 +515,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuProductosFrecuentes">
|
||||
<div class="collapse" id="submenuProductosFrecuentesMobile">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/productos_frecuentes/editar" class="nav-link">
|
||||
@@ -539,7 +539,7 @@
|
||||
</li>
|
||||
<!-- SOLICITUDES DE IMPORTACIÓN -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuSolicitudes" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuSolicitudesMobile" role="button" aria-expanded="false" aria-controls="submenuSolicitudesMobile">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm2 6a1 1 0 011-1h6a1 1 0 110 2H7a1 1 0 01-1-1zm1 3a1 1 0 100 2h6a1 1 0 100-2H7z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
@@ -548,7 +548,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuSolicitudes">
|
||||
<div class="collapse" id="submenuSolicitudesMobile">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/solicitud_importacion/lista" class="nav-link">
|
||||
@@ -565,7 +565,7 @@
|
||||
</li>
|
||||
<!-- EXPEDIENTE ELECTRÓNICO -->
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuExpediente" role="button" aria-expanded="false">
|
||||
<a class="nav-link" data-bs-toggle="collapse" href="#submenuExpedienteMobile" role="button" aria-expanded="false" aria-controls="submenuExpedienteMobile">
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M3 4a1 1 0 011-1h3a1 1 0 011 1v3a1 1 0 01-1 1H4a1 1 0 01-1-1V4zm6 0a1 1 0 011-1h3a1 1 0 011 1v3a1 1 0 01-1 1h-3a1 1 0 01-1-1V4zm6 0a1 1 0 011-1h3a1 1 0 011 1v3a1 1 0 01-1 1h-3a1 1 0 01-1-1V4zM3 10a1 1 0 011-1h3a1 1 0 011 1v3a1 1 0 01-1 1H4a1 1 0 01-1-1v-3zm6 0a1 1 0 011-1h3a1 1 0 011 1v3a1 1 0 01-1 1h-3a1 1 0 01-1-1v-3zm6 0a1 1 0 011-1h3a1 1 0 011 1v3a1 1 0 01-1 1h-3a1 1 0 01-1-1v-3z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
@@ -574,7 +574,7 @@
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div class="collapse" id="submenuExpediente">
|
||||
<div class="collapse" id="submenuExpedienteMobile">
|
||||
<ul class="nav flex-column submenu">
|
||||
<li class="nav-item">
|
||||
<a href="/IMPORTADORES/expediente/index" class="nav-link">
|
||||
@@ -601,15 +601,18 @@
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script>
|
||||
// Simular lógica de dashboard
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const esDashboard = window.location.pathname.includes('/administrador/dashboard');
|
||||
const esDashboard = window.location.pathname.includes('/importadores/dashboard');
|
||||
const welcomeText = document.getElementById('welcome-text');
|
||||
const logoutBtn = document.getElementById('logout-btn');
|
||||
|
||||
if (!esDashboard) {
|
||||
welcomeText.style.display = 'none';
|
||||
logoutBtn.style.display = 'inline-block';
|
||||
if (welcomeText) {
|
||||
welcomeText.style.display = 'none';
|
||||
}
|
||||
if (logoutBtn) {
|
||||
logoutBtn.style.display = 'inline-block';
|
||||
}
|
||||
}
|
||||
|
||||
// Manejar estados activos basados en URL actual
|
||||
@@ -622,32 +625,67 @@
|
||||
link.classList.add('active');
|
||||
}
|
||||
});
|
||||
|
||||
// Manejar collapse manualmente
|
||||
|
||||
document.querySelectorAll('[data-bs-toggle="collapse"]').forEach(trigger => {
|
||||
// Desactivar Bootstrap
|
||||
trigger.removeAttribute('data-bs-toggle');
|
||||
|
||||
// Inicializar estado correcto
|
||||
const target = document.querySelector(trigger.getAttribute('href'));
|
||||
if (target) {
|
||||
target.style.transition = 'height 0.3s ease, opacity 0.2s ease';
|
||||
target.style.overflow = 'hidden';
|
||||
|
||||
if (!target.classList.contains('show')) {
|
||||
target.style.height = '0';
|
||||
target.style.opacity = '0';
|
||||
}
|
||||
}
|
||||
|
||||
trigger.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
const targetId = this.getAttribute('href');
|
||||
const targetElement = document.querySelector(targetId);
|
||||
const isExpanded = this.getAttribute('aria-expanded') === 'true';
|
||||
|
||||
if (targetElement) {
|
||||
if (isExpanded) {
|
||||
// Cerrar
|
||||
targetElement.classList.remove('show');
|
||||
this.setAttribute('aria-expanded', 'false');
|
||||
} else {
|
||||
// Abrir
|
||||
targetElement.classList.add('show');
|
||||
this.setAttribute('aria-expanded', 'true');
|
||||
}
|
||||
const target = document.querySelector(this.getAttribute('href'));
|
||||
const icon = this.querySelector('.collapse-icon');
|
||||
|
||||
if (!target) return;
|
||||
|
||||
const isExpanding = this.getAttribute('aria-expanded') !== 'true';
|
||||
|
||||
if (isExpanding) {
|
||||
// Abrir
|
||||
target.classList.add('show');
|
||||
target.style.height = '0';
|
||||
target.style.opacity = '0';
|
||||
target.style.display = 'block';
|
||||
|
||||
// Forzar reflow
|
||||
void target.offsetHeight;
|
||||
|
||||
target.style.height = target.scrollHeight + 'px';
|
||||
target.style.opacity = '1';
|
||||
|
||||
this.setAttribute('aria-expanded', 'true');
|
||||
if (icon) icon.style.transform = 'rotate(180deg)';
|
||||
} else {
|
||||
// Cerrar
|
||||
target.style.height = target.scrollHeight + 'px';
|
||||
target.style.opacity = '1';
|
||||
|
||||
// Forzar reflow
|
||||
void target.offsetHeight;
|
||||
|
||||
target.style.height = '0';
|
||||
target.style.opacity = '0';
|
||||
|
||||
setTimeout(() => {
|
||||
target.classList.remove('show');
|
||||
target.style.display = '';
|
||||
}, 300);
|
||||
|
||||
this.setAttribute('aria-expanded', 'false');
|
||||
if (icon) icon.style.transform = 'rotate(0deg)';
|
||||
}
|
||||
});
|
||||
|
||||
// Remover el atributo data-bs-toggle para evitar conflictos
|
||||
trigger.removeAttribute('data-bs-toggle');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -140,7 +140,7 @@ if ($tipoUsuario === 'agente_aduanal') {
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">CONFIGURACIÓN ADUANA / PATENTE</h4>
|
||||
<div class="card p-4 shadow-sm bg-white card-hover position-relative h-auto">
|
||||
<div class="card p-4 shadow-sm bg-white card-hover position-relative h-auto fade-in-up">
|
||||
<!-- Se agrega enctype para subir archivos -->
|
||||
<form action="/IMPORTADORES/patente/guardar" method="POST" id="formAltaPatente">
|
||||
<!-- Pestañas de navegación -->
|
||||
|
||||
@@ -137,7 +137,7 @@ if ($tipoUsuario === 'agente_aduanal') {
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">CONFIGURACIÓN ADUANA / PATENTE</h4>
|
||||
<div class="card p-4 shadow-sm bg-white card-hover position-relative h-auto">
|
||||
<div class="card p-4 shadow-sm bg-white card-hover position-relative h-auto fade-in-up">
|
||||
<!-- Se agrega enctype para subir archivos -->
|
||||
<form action="/IMPORTADORES/patente/actualizar" method="POST" id="formEdicionPatente">
|
||||
<!-- Campo oculto para el ID -->
|
||||
|
||||
@@ -83,8 +83,8 @@ if ($tipoUsuario === 'agente_aduanal') {
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">📑 Registro de Patentes Aduanales</h4>
|
||||
<a href="/IMPORTADORES/patente/alta" class="btn btn-success mb-3 mt-auto w-auto btn-animated">➕ Nueva Patente</a>
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<a href="/IMPORTADORES/patente/alta" class="btn btn-success mb-3 mt-auto w-auto btn-animated fade-in-up">➕ Nueva Patente</a>
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped" id="tabla-patentes">
|
||||
<thead class="table-dark">
|
||||
|
||||
@@ -70,6 +70,11 @@
|
||||
.spinner-border { display: inline-block; width: 1rem; height: 1rem; vertical-align: text-bottom; border: 0.125em solid currentColor; border-right-color: transparent;
|
||||
border-radius: 50%; animation: spinner-border 0.75s linear infinite; }
|
||||
.spinner-border-sm { width: 0.875rem; height: 0.875rem; border-width: 0.125em; }
|
||||
.fade-in-up { animation: fadeInUp 0.8s ease-out; }
|
||||
@keyframes fadeInUp {
|
||||
from { opacity: 0; transform: translateY(30px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -91,7 +96,7 @@
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="card shadow-sm p-4 mb-4 bg-white card-hover position-relative h-auto">
|
||||
<div class="card shadow-sm p-4 mb-4 bg-white card-hover position-relative h-auto fade-in-up">
|
||||
<!-- Switch general de notificaciones -->
|
||||
<div class="section-divider">
|
||||
<div class="form-check form-switch">
|
||||
|
||||
@@ -62,6 +62,27 @@
|
||||
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); transition: left 0.5s; }
|
||||
.btn-animated:hover::before { left: 100%; }
|
||||
.alert { border: none; border-radius: 12px; background: rgba(255, 255, 255, 0.9); backdrop-filter: blur(10px); }
|
||||
.btn-indigo { background-color: #6610f2; color: white; }
|
||||
.btn-indigo:hover { background-color: #520dc2; color: white; }
|
||||
.text-indigo { color: #520dc2; }
|
||||
.btn-orange { background-color: orangeRed; color: white; }
|
||||
.btn-orange:hover { background-color: #ff3600; color: white; }
|
||||
.text-orange { color: orangeRed; }
|
||||
.btn-teal { background-color: #4dd4ac ; color: white; }
|
||||
.btn-teal:hover { background-color: #20c997; color: black; }
|
||||
.text-teal { color: #4dd4ac; }
|
||||
.btn-lime { background-color: #84cc16; color: white; }
|
||||
.text-lime { color: #84cc16; }
|
||||
.btn-lime:hover { background-color: #65a30d; color: black; }
|
||||
.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; }
|
||||
.btn-lila { background-color: #c4b5fd; /* violeta claro */ color: white; border: none; }
|
||||
.btn-lila:hover { background-color: #a78bfa; /* tono ligeramente más fuerte */ color: white; }
|
||||
.text-lila { color: #c4b5fd; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -74,14 +95,14 @@
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: 0.1s;">
|
||||
<div class="card shadow-sm p-3 card-hover position-relative h-100">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-primary mb-3">
|
||||
<h5 class="text-teal mb-3">
|
||||
<i class="fas fa-bell me-2"></i>
|
||||
Notificaciones
|
||||
</h5>
|
||||
<p class="text-muted small flex-grow-1 mb-4">
|
||||
Gestiona y configura las notificaciones del sistema para mantenerte informado.
|
||||
</p>
|
||||
<button class="btn btn-primary btn-sm mt-auto w-100 btn-animated"
|
||||
<button class="btn btn-teal btn-sm mt-auto w-100 btn-animated"
|
||||
onclick="navigateWithAnimation(this, '/IMPORTADORES/preferencias/notificaciones')">
|
||||
<i class="fas fa-cog me-2"></i>
|
||||
Configurar Notificaciones
|
||||
@@ -94,14 +115,14 @@
|
||||
<div class="col-md-4 animate__animated animate__fadeInUp" style="animation-delay: 0.2s;">
|
||||
<div class="card shadow-sm p-3 card-hover position-relative h-100">
|
||||
<div class="card-body p-0 d-flex flex-column">
|
||||
<h5 class="text-success mb-3">
|
||||
<h5 class="text-lime mb-3">
|
||||
<i class="fas fa-list me-2"></i>
|
||||
Catálogos
|
||||
</h5>
|
||||
<p class="text-muted small flex-grow-1 mb-4">
|
||||
Personaliza la visualización de tus catálogos y organiza tu contenido.
|
||||
</p>
|
||||
<button class="btn btn-success btn-sm mt-auto w-100 btn-animated"
|
||||
<button class="btn btn-lime btn-sm mt-auto w-100 btn-animated"
|
||||
onclick="navigateWithAnimation(this, '/IMPORTADORES/preferencias/catalogos')">
|
||||
<i class="fas fa-palette me-2"></i>
|
||||
Personalizar Catálogos
|
||||
|
||||
@@ -45,6 +45,11 @@
|
||||
.day-preset .btn { margin-right: 10px; margin-bottom: 5px; }
|
||||
.form-check-input:checked { background-color: #0d6efd; border-color: #0d6efd; }
|
||||
.btn-outline-primary.active { background-color: #0d6efd; border-color: #0d6efd; color: white; }
|
||||
.fade-in-up { animation: fadeInUp 0.8s ease-out; }
|
||||
@keyframes fadeInUp {
|
||||
from { opacity: 0; transform: translateY(30px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -67,7 +72,7 @@
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="card shadow-sm p-4 mb-4 bg-white card-hover position-relative h-auto">
|
||||
<div class="card shadow-sm p-4 mb-4 bg-white card-hover position-relative h-auto fade-in-up">
|
||||
<!-- Switch general de notificaciones -->
|
||||
<div class="section-divider">
|
||||
<div class="form-check form-switch">
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">➕ Alta de Producto Frecuente</h4>
|
||||
<div class="card p-4 shadow-sm bg-white card-hover position-relative h-auto">
|
||||
<div class="card p-4 shadow-sm bg-white card-hover position-relative h-auto fade-in-up">
|
||||
<form id="altaProductoFrecuenteForm" action="/IMPORTADORES/productos_frecuentes/guardar" method="POST">
|
||||
<div class="row g-3 form-group-animated">
|
||||
<!-- Sinónimo, Fracción, NICO -->
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">✏️ Editar Producto Frecuente</h4>
|
||||
<div class="card p-4 shadow-sm bg-white card-hover position-relative h-auto">
|
||||
<div class="card p-4 shadow-sm bg-white card-hover position-relative h-auto fade-in-up">
|
||||
<form id="editarProductoFrecuenteForm" action="/IMPORTADORES/productos_frecuentes/actualizar" method="POST">
|
||||
<input type="hidden" name="id_producto_frecuente" value="<?= htmlspecialchars($producto['id_producto_frecuente']) ?>">
|
||||
<div class="row g-3 form-group-animated">
|
||||
|
||||
@@ -69,8 +69,8 @@
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">📋 Productos Frecuentes</h4>
|
||||
<a href="/IMPORTADORES/productos_frecuentes/alta" class="btn btn-success mb-3 mt-auto w-auto btn-animated">➕ Nuevo Producto</a>
|
||||
<div class="card p-4 shadow-sm card-hover position-relative h-auto">
|
||||
<a href="/IMPORTADORES/productos_frecuentes/alta" class="btn btn-success mb-3 mt-auto w-auto btn-animated fade-in-up">➕ Nuevo Producto</a>
|
||||
<div class="card p-4 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table id="tablaProductosFrecuentes" class="table table-striped table-bordered">
|
||||
<thead class="table-dark">
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">➕ Registro de Proveedor</h4>
|
||||
<div class="card p-4 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-4 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<form action="/IMPORTADORES/proveedores/guardar" method="POST" enctype="multipart/form-data" id="formAltaProveedores">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-4 form-group-animated">
|
||||
|
||||
@@ -67,9 +67,9 @@
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">📄 Listado de Proveedores</h4>
|
||||
<a href="/IMPORTADORES/proveedores/crear" class="btn btn-success mb-3 mt-auto w-auto btn-animated">➕ Nuevo Proveedor</a>
|
||||
<a href="/IMPORTADORES/proveedores/crear" class="btn btn-success mb-3 mt-auto w-auto btn- fade-in-up">➕ Nuevo Proveedor</a>
|
||||
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<br>
|
||||
<table id="proveedores-table" class="table table-striped nowrap" style="width:100%">
|
||||
<thead>
|
||||
|
||||
@@ -58,6 +58,27 @@
|
||||
.btn-animated:hover::before { left: 100%; }
|
||||
.hide { display: none !important; }
|
||||
.alert { top: 75px; left: 275px; right: 50px; position: fixed; z-index: 1050; width: calc(100% - 285px); }
|
||||
/* ========== 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>
|
||||
@@ -79,25 +100,28 @@
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">➕ Nueva Solicitud de Importación</h4>
|
||||
<div class="card p-4 bg-white shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-4 bg-white shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<form id="solicitudForm" action="/IMPORTADORES/solicitud_importacion/guardar" method="POST" enctype="multipart/form-data">
|
||||
|
||||
<!-- Sección principal -->
|
||||
<div class="row">
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="col-md-3 mb-3 form-group-animated">
|
||||
<label for="numero_factura" class="form-label">Número de Factura</label>
|
||||
<input id="numero_factura" name="numero_factura" type="text" class="form-control" required>
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
|
||||
<div class="col-md-3 mb-3 form-group-animated">
|
||||
<label for="fecha_factura" class="form-label">Fecha de Factura</label>
|
||||
<input id="fecha_factura" name="fecha_factura" type="date" class="form-control" required>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 mb-3">
|
||||
<label for="proveedor_id" class="form-label">Proveedor</label>
|
||||
<select id="proveedor_id" name="proveedor_id" class="form-select searchable" required>
|
||||
<option value="">Cargando proveedores…</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 mb-3">
|
||||
<label for="anexo22_apendice" class="form-label">Anexo 22 – Apéndice</label>
|
||||
<select id="anexo22_apendice" name="anexo22_apendice" class="form-select searchable" required>
|
||||
@@ -124,6 +148,7 @@
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 mb-3">
|
||||
<label for="incoterm" class="form-label">INCOTERM</label>
|
||||
<select id="incoterm" name="incoterm" class="form-select searchable" required>
|
||||
@@ -135,6 +160,7 @@
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 mb-3">
|
||||
<label for="pais_proveedor" class="form-label">País (Proveedor)</label>
|
||||
<select id="pais_proveedor" name="pais_proveedor" class="form-select searchable" required>
|
||||
@@ -144,6 +170,7 @@
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 mb-3">
|
||||
<label for="tipo_moneda" class="form-label">Moneda</label>
|
||||
<select id="tipo_moneda" name="tipo_moneda" class="form-select searchable" required>
|
||||
@@ -156,10 +183,11 @@
|
||||
|
||||
<!-- Valor y vinculación -->
|
||||
<div class="row">
|
||||
<div class="col-md-8 mb-3">
|
||||
<div class="col-md-8 mb-3 form-group-animated">
|
||||
<label for="valor_factura" class="form-label">Valor Factura</label>
|
||||
<input id="valor_factura" name="valor_factura" type="number" step="0.01" min="0" class="form-control" required>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
<label for="vinculacion" class="form-label">Vinculación</label>
|
||||
<select id="vinculacion" name="vinculacion" class="form-select searchable">
|
||||
@@ -183,6 +211,7 @@
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
<label for="chofer_id" class="form-label">Chofer</label>
|
||||
<select id="chofer_id" name="chofer_id" class="form-select searchable" required>
|
||||
@@ -194,7 +223,8 @@
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<div class="col-md-4 mb-3 form-group-animated">
|
||||
<label for="foto_solicitud" class="form-label">Foto de la Carga (PIPA)</label>
|
||||
<input id="foto_solicitud" name="foto_solicitud" type="file" class="form-control" accept="image/*">
|
||||
</div>
|
||||
@@ -202,9 +232,9 @@
|
||||
|
||||
<!-- Partidas dinámicas -->
|
||||
<hr>
|
||||
<h5>📦 Partidas</h5>
|
||||
<h5 class="form-group-animated">📦 Partidas</h5>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm" id="tabla-partidas">
|
||||
<table class="table table-sm form-group-animated" id="tabla-partidas">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Descripción</th>
|
||||
@@ -250,12 +280,14 @@
|
||||
</td>
|
||||
<td class="hide"><input name="partidas[0][precio_unitario]" type="number" class="form-control w-auto"></td>
|
||||
<td class="hide"><input name="partidas[0][oma_factura]" class="form-control w-auto"></td>
|
||||
<td><button type="button" class="btn btn-danger btn-sm remove-row">✖️</button></td>
|
||||
<td><button type="button" class="btn btn-danger btn-sm remove-row mt-auto w-auto btn-animated">✖️</button></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<button type="button" class="btn btn-secondary btn-sm mt-auto w-auto btn-animated" id="add-partida">➕ Agregar partida</button>
|
||||
<div class="form-group-animated">
|
||||
<button type="button" class="btn btn-secondary btn-sm mt-auto w-auto btn-animated" id="add-partida">➕ Agregar partida</button>
|
||||
</div>
|
||||
|
||||
<!-- Activo -->
|
||||
<div class="form-check mt-4">
|
||||
@@ -264,8 +296,10 @@
|
||||
</div>
|
||||
|
||||
<!-- Botones finales -->
|
||||
<button type="submit" class="btn btn-success mt-3 mt-auto w-auto btn-animated">Guardar</button>
|
||||
<a href="/IMPORTADORES/solicitud_importacion/lista" class="btn btn-secondary mt-3 ms-2 mt-auto w-auto btn-animated">Cancelar</a>
|
||||
<div class="text-end mt-4 form-group-animated">
|
||||
<button type="submit" class="btn btn-success mt-3 mt-auto w-auto btn-animated">Guardar</button>
|
||||
<a href="/IMPORTADORES/solicitud_importacion/lista" class="btn btn-secondary mt-3 ms-2 mt-auto w-auto btn-animated">Cancelar</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@@ -333,9 +367,9 @@
|
||||
const row = document.createElement('tr');
|
||||
|
||||
row.innerHTML = `
|
||||
<td><input name="partidas[${idx}][descripcion]" class="form-control"></td>
|
||||
<td><input name="partidas[${idx}][cantidad_comercial]" type="number" step="0.0001" class="form-control"></td>
|
||||
<td><input name="partidas[${idx}][cantidad_tarifa]" type="number" step="0.0001" class="form-control"></td>
|
||||
<td><input name="partidas[${idx}][descripcion]" class="form-control w-auto"></td>
|
||||
<td><input name="partidas[${idx}][cantidad_comercial]" type="number" step="0.0001" class="form-control w-auto"></td>
|
||||
<td><input name="partidas[${idx}][cantidad_tarifa]" type="number" step="0.0001" class="form-control w-auto"></td>
|
||||
<td>
|
||||
<select name="partidas[${idx}][unidad_comercial_id]" class="form-select searchable">
|
||||
<option value="">-- Unidad --</option>
|
||||
@@ -344,17 +378,21 @@
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</td>
|
||||
<td><input name="partidas[${idx}][valor_factura]" type="number" step="0.01" class="form-control valor-partida"></td>
|
||||
<td><input name="partidas[${idx}][peso_bruto]" type="number" step="0.0001" class="form-control"></td>
|
||||
<td><input name="partidas[${idx}][valor_factura]" type="number" step="0.01" class="form-control valor-partida w-auto"></td>
|
||||
<td><input name="partidas[${idx}][peso_bruto]" type="number" step="0.0001" class="form-control w-auto"></td>
|
||||
<td>
|
||||
<select name="partidas[${idx}][tasa_preferencial]" class="form-select searchable">
|
||||
<option value="">-- Selecciona --</option>
|
||||
<option>General</option><option>TLC</option><option>PROSEC</option><option>ALADI</option><option>COMERCIALIZADORA</option>
|
||||
<option>General</option>
|
||||
<option>TLC</option>
|
||||
<option>PROSEC</option>
|
||||
<option>ALADI</option>
|
||||
<option>COMERCIALIZADORA</option>
|
||||
</select>
|
||||
</td>
|
||||
<td class="hide"><input name="partidas[${idx}][precio_unitario]" type="number" class="form-control"></td>
|
||||
<td class="hide"><input name="partidas[${idx}][oma_factura]" class="form-control"></td>
|
||||
<td><button type="button" class="btn btn-danger btn-sm remove-row">✖️</button></td>
|
||||
<td class="hide"><input name="partidas[${idx}][precio_unitario]" type="number" class="form-control w-auto"></td>
|
||||
<td class="hide"><input name="partidas[${idx}][oma_factura]" class="form-control w-auto"></td>
|
||||
<td><button type="button" class="btn btn-danger btn-sm remove-row mt-auto w-auto btn-animated">✖️</button></td>
|
||||
`;
|
||||
|
||||
tbody.appendChild(row);
|
||||
@@ -398,9 +436,9 @@
|
||||
if(Math.abs(sum - total) > 0.001){
|
||||
e.preventDefault();
|
||||
Swal.fire({
|
||||
icon:'error',
|
||||
title:'Error de validación',
|
||||
text:`La suma de partidas (${sum.toFixed(2)}) no coincide con Valor Factura (${total.toFixed(2)}).`
|
||||
icon: 'error',
|
||||
title: 'Error de validación',
|
||||
text: `La suma de partidas (${sum.toFixed(2)}) no coincide con Valor Factura (${total.toFixed(2)}).`
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -445,7 +483,7 @@
|
||||
// Hacer petición AJAX para obtener choferes
|
||||
fetch(`/IMPORTADORES/solicitud_importacion/obtenerChoferesPorTransportista?transportista_id=${transportistaId}`)
|
||||
.then(response => {
|
||||
console.log('Response status:', response.status);
|
||||
console.log('Response status:', response.status);
|
||||
console.log('Response headers:', response.headers.get('content-type'));
|
||||
|
||||
if (!response.ok) {
|
||||
@@ -468,15 +506,15 @@
|
||||
})
|
||||
.then(choferes => {
|
||||
const opciones = [{
|
||||
value: '',
|
||||
label: '-- Selecciona Chofer --',
|
||||
value: '',
|
||||
label: '-- Selecciona Chofer --',
|
||||
disabled: false
|
||||
}];
|
||||
|
||||
choferes.forEach(chofer => {
|
||||
opciones.push({
|
||||
value: chofer.id_chofer,
|
||||
label: chofer.nombre,
|
||||
value: chofer.id_chofer,
|
||||
label: chofer.nombre,
|
||||
disabled: false
|
||||
});
|
||||
});
|
||||
@@ -487,8 +525,8 @@
|
||||
} else {
|
||||
choferSelect.innerHTML = '';
|
||||
opciones.forEach(opcion => {
|
||||
const option = document.createElement('option');
|
||||
option.value = opcion.value;
|
||||
const option = document.createElement('option');
|
||||
option.value = opcion.value;
|
||||
option.textContent = opcion.label;
|
||||
if (opcion.disabled) option.disabled = true;
|
||||
choferSelect.appendChild(option);
|
||||
@@ -502,8 +540,8 @@
|
||||
if (choferChoices) {
|
||||
choferChoices.clearStore();
|
||||
choferChoices.setChoices([{
|
||||
value: '',
|
||||
label: errorMessage,
|
||||
value: '',
|
||||
label: errorMessage,
|
||||
disabled: true
|
||||
}], 'value', 'label', true);
|
||||
} else {
|
||||
|
||||
@@ -59,34 +59,58 @@
|
||||
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); transition: left 0.5s; }
|
||||
.btn-animated:hover::before { left: 100%; }
|
||||
.hide { display: none !important; }
|
||||
/* ========== 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">✏️ Editar Solicitud #<?= (int)$factura['id_solicitud'] ?></h4>
|
||||
<div class="card p-4 bg-white shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-4 bg-white shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<form id="solicitudForm" action="/IMPORTADORES/solicitud_importacion/actualizar" method="POST" enctype="multipart/form-data">
|
||||
<input type="hidden" name="id_solicitud" value="<?= (int)$factura['id_solicitud'] ?>">
|
||||
|
||||
<!-- Datos principales -->
|
||||
<div class="row">
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="col-md-3 mb-3 form-group-animated">
|
||||
<label for="numero_factura" class="form-label">Número de Factura</label>
|
||||
<input id="numero_factura" name="numero_factura" type="text" class="form-control" required
|
||||
value="<?= htmlspecialchars($factura['numero_factura']) ?>">
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
|
||||
<div class="col-md-3 mb-3 form-group-animated">
|
||||
<label for="fecha_factura" class="form-label">Fecha de Factura</label>
|
||||
<input id="fecha_factura" name="fecha_factura" type="date" class="form-control" required
|
||||
value="<?= htmlspecialchars($factura['fecha_factura']) ?>">
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 mb-3">
|
||||
<label for="proveedor_id" class="form-label">Proveedor</label>
|
||||
<select id="proveedor_id" name="proveedor_clave" class="form-select searchable">
|
||||
<option value="">Cargando proveedores...</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 mb-3">
|
||||
<label for="anexo22_apendice" class="form-label">Anexo 22 – Apéndice</label>
|
||||
<select id="anexo22_apendice" name="anexo22_apendice" class="form-select searchable" required>
|
||||
@@ -114,6 +138,7 @@
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 mb-3">
|
||||
<label for="incoterm" class="form-label">INCOTERM</label>
|
||||
<select id="incoterm" name="incoterm" class="form-select searchable" required>
|
||||
@@ -125,6 +150,7 @@
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 mb-3">
|
||||
<label for="pais_proveedor" class="form-label">País (Proveedor)</label>
|
||||
<select id="pais_proveedor" name="pais_proveedor" class="form-select searchable">
|
||||
@@ -136,6 +162,7 @@
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 mb-3">
|
||||
<label for="tipo_moneda" class="form-label">Moneda</label>
|
||||
<select id="tipo_moneda" name="tipo_moneda" class="form-select searchable">
|
||||
@@ -150,11 +177,12 @@
|
||||
|
||||
<!-- Valor y Vinculación -->
|
||||
<div class="row">
|
||||
<div class="col-md-8 mb-3">
|
||||
<div class="col-md-8 mb-3 form-group-animated">
|
||||
<label for="valor_factura" class="form-label">Valor Factura</label>
|
||||
<input id="valor_factura" name="valor_factura" type="number" step="0.01" min="0" class="form-control valor-total" required
|
||||
value="<?= htmlspecialchars($factura['valor_factura']) ?>">
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
<label for="vinculacion" class="form-label">Vinculación</label>
|
||||
<select id="vinculacion" name="vinculacion" class="form-select searchable">
|
||||
@@ -178,6 +206,7 @@
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
<label for="chofer_id" class="form-label">Chofer</label>
|
||||
<select id="chofer_id" name="chofer_id" class="form-select searchable" required>
|
||||
@@ -191,7 +220,8 @@
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
|
||||
<div class="col-md-4 mb-3 form-group-animated">
|
||||
<label for="foto_solicitud" class="form-label">Foto de la Carga (PIPA)</label>
|
||||
<input id="foto_solicitud" name="foto_solicitud" type="file" class="form-control" accept="image/*">
|
||||
</div>
|
||||
@@ -199,9 +229,9 @@
|
||||
|
||||
<!-- Partidas Dinámicas -->
|
||||
<hr>
|
||||
<h5>📦 Partidas</h5>
|
||||
<h5 class="form-group-animated">📦 Partidas</h5>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm" id="tabla-partidas">
|
||||
<table class="table table-sm form-group-animated" id="tabla-partidas">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Descripción</th>
|
||||
@@ -219,9 +249,9 @@
|
||||
<tbody>
|
||||
<?php if (!empty($partidas)): foreach($partidas as $i=>$p): ?>
|
||||
<tr>
|
||||
<td><input name="partidas[<?= $i ?>][descripcion]" class="form-control" value="<?= htmlspecialchars($p['descripcion']) ?>"></td>
|
||||
<td><input name="partidas[<?= $i ?>][cantidad_comercial]" type="number" step="0.0001" min="0" class="form-control" value="<?= htmlspecialchars($p['cantidad_comercial']) ?>"></td>
|
||||
<td><input name="partidas[<?= $i ?>][cantidad_tarifa]" type="number" step="0.0001" min="0" class="form-control" value="<?= htmlspecialchars($p['cantidad_tarifa']) ?>"></td>
|
||||
<td><input name="partidas[<?= $i ?>][descripcion]" class="form-control w-auto" value="<?= htmlspecialchars($p['descripcion']) ?>"></td>
|
||||
<td><input name="partidas[<?= $i ?>][cantidad_comercial]" type="number" step="0.0001" min="0" class="form-control w-auto" value="<?= htmlspecialchars($p['cantidad_comercial']) ?>"></td>
|
||||
<td><input name="partidas[<?= $i ?>][cantidad_tarifa]" type="number" step="0.0001" min="0" class="form-control w-auto" value="<?= htmlspecialchars($p['cantidad_tarifa']) ?>"></td>
|
||||
<td>
|
||||
<select name="partidas[<?= $i ?>][unidad_comercial_id]" class="form-select searchable">
|
||||
<option value="">-- Unidad --</option>
|
||||
@@ -232,8 +262,8 @@
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</td>
|
||||
<td><input name="partidas[<?= $i ?>][valor_factura]" type="number" step="0.01" min="0" class="form-control valor-partida" value="<?= htmlspecialchars($p['valor_factura']) ?>"></td>
|
||||
<td><input name="partidas[<?= $i ?>][peso_bruto]" type="number" step="0.0001" min="0" class="form-control" value="<?= htmlspecialchars($p['peso_bruto']) ?>"></td>
|
||||
<td><input name="partidas[<?= $i ?>][valor_factura]" type="number" step="0.01" min="0" class="form-control valor-partida w-auto" value="<?= htmlspecialchars($p['valor_factura']) ?>"></td>
|
||||
<td><input name="partidas[<?= $i ?>][peso_bruto]" type="number" step="0.0001" min="0" class="form-control w-auto" value="<?= htmlspecialchars($p['peso_bruto']) ?>"></td>
|
||||
<td>
|
||||
<select name="partidas[<?= $i ?>][tasa_preferencial]" class="form-select searchable">
|
||||
<option value="">-- Selecciona --</option>
|
||||
@@ -242,15 +272,15 @@
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</td>
|
||||
<td class="hide"><input name="partidas[<?= $i ?>][precio_unitario]" type="number" class="form-control" value="<?= htmlspecialchars($p['precio_unitario'] ?? '') ?>"></td>
|
||||
<td class="hide"><input name="partidas[<?= $i ?>][oma_factura]" class="form-control" value="<?= htmlspecialchars($p['oma_factura'] ?? '') ?>"></td>
|
||||
<td><button type="button" class="btn btn-danger btn-sm remove-row">✖️</button></td>
|
||||
<td class="hide"><input name="partidas[<?= $i ?>][precio_unitario]" type="number" class="form-control w-auto" value="<?= htmlspecialchars($p['precio_unitario'] ?? '') ?>"></td>
|
||||
<td class="hide"><input name="partidas[<?= $i ?>][oma_factura]" class="form-control w-auto" value="<?= htmlspecialchars($p['oma_factura'] ?? '') ?>"></td>
|
||||
<td><button type="button" class="btn btn-danger btn-sm remove-row mt-auto w-auto btn-animated">✖️</button></td>
|
||||
</tr>
|
||||
<?php endforeach; else: ?>
|
||||
<tr>
|
||||
<td><input name="partidas[0][descripcion]" class="form-control"></td>
|
||||
<td><input name="partidas[0][cantidad_comercial]" type="number" step="0.0001" class="form-control" min="0"></td>
|
||||
<td><input name="partidas[0][cantidad_tarifa]" type="number" step="0.0001" class="form-control" min="0"></td>
|
||||
<td><input name="partidas[0][descripcion]" class="form-control w-auto"></td>
|
||||
<td><input name="partidas[0][cantidad_comercial]" type="number" step="0.0001" class="form-control w-auto" min="0"></td>
|
||||
<td><input name="partidas[0][cantidad_tarifa]" type="number" step="0.0001" class="form-control w-auto" min="0"></td>
|
||||
<td>
|
||||
<select name="partidas[0][unidad_comercial_id]" class="form-select searchable">
|
||||
<option value="">-- Unidad --</option>
|
||||
@@ -259,8 +289,8 @@
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</td>
|
||||
<td><input name="partidas[0][valor_factura]" type="number" step="0.01" class="form-control valor-partida" min="0"></td>
|
||||
<td><input name="partidas[0][peso_bruto]" type="number" step="0.0001" class="form-control" min="0"></td>
|
||||
<td><input name="partidas[0][valor_factura]" type="number" step="0.01" class="form-control valor-partida w-auto" min="0"></td>
|
||||
<td><input name="partidas[0][peso_bruto]" type="number" step="0.0001" class="form-control w-auto" min="0"></td>
|
||||
<td>
|
||||
<select name="partidas[0][tasa_preferencial]" class="form-select searchable">
|
||||
<option value="">-- Selecciona --</option>
|
||||
@@ -268,15 +298,17 @@
|
||||
<option>ALADI</option><option>COMERCIALIZADORA</option>
|
||||
</select>
|
||||
</td>
|
||||
<td class="hide"><input name="partidas[0][precio_unitario]" type="number" class="form-control"></td>
|
||||
<td class="hide"><input name="partidas[0][oma_factura]" class="form-control"></td>
|
||||
<td><button type="button" class="btn btn-danger btn-sm remove-row">✖️</button></td>
|
||||
<td class="hide"><input name="partidas[0][precio_unitario]" type="number" class="form-control w-auto"></td>
|
||||
<td class="hide"><input name="partidas[0][oma_factura]" class="form-control w-auto"></td>
|
||||
<td><button type="button" class="btn btn-danger btn-sm remove-row mt-auto w-auto btn-animated">✖️</button></td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<button type="button" class="btn btn-secondary btn-sm mb-3 mt-auto w-auto btn-animated" id="add-partida">➕ Agregar partida</button>
|
||||
<div class="form-group-animated">
|
||||
<button type="button" class="btn btn-secondary btn-sm mb-3 mt-auto w-auto btn-animated" id="add-partida">➕ Agregar partida</button>
|
||||
</div>
|
||||
|
||||
<!-- Activo -->
|
||||
<div class="form-check mb-4">
|
||||
@@ -284,8 +316,10 @@
|
||||
<label for="status" class="hide form-check-label">Activo</label>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-success mt-auto w-auto btn-animated">Actualizar</button>
|
||||
<a href="/IMPORTADORES/solicitud_importacion/lista" class="btn btn-secondary ms-2 mt-auto w-auto btn-animated">Cancelar</a>
|
||||
<div class="text-end mt-4 form-group-animated">
|
||||
<button type="submit" class="btn btn-success mt-auto w-auto btn-animated">Actualizar</button>
|
||||
<a href="/IMPORTADORES/solicitud_importacion/lista" class="btn btn-secondary ms-2 mt-auto w-auto btn-animated">Cancelar</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@@ -359,9 +393,9 @@
|
||||
const row = document.createElement('tr');
|
||||
|
||||
row.innerHTML = `
|
||||
<td><input name="partidas[${idx}][descripcion]" class="form-control"></td>
|
||||
<td><input name="partidas[${idx}][cantidad_comercial]" type="number" step="0.0001" class="form-control"></td>
|
||||
<td><input name="partidas[${idx}][cantidad_tarifa]" type="number" step="0.0001" class="form-control"></td>
|
||||
<td><input name="partidas[${idx}][descripcion]" class="form-control w-auto"></td>
|
||||
<td><input name="partidas[${idx}][cantidad_comercial]" type="number" step="0.0001" class="form-control w-auto"></td>
|
||||
<td><input name="partidas[${idx}][cantidad_tarifa]" type="number" step="0.0001" class="form-control w-auto"></td>
|
||||
<td>
|
||||
<select name="partidas[${idx}][unidad_comercial_id]" class="form-select searchable">
|
||||
<option value="">-- Unidad --</option>
|
||||
@@ -370,8 +404,8 @@
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</td>
|
||||
<td><input name="partidas[${idx}][valor_factura]" type="number" step="0.01" class="form-control valor-partida"></td>
|
||||
<td><input name="partidas[${idx}][peso_bruto]" type="number" step="0.0001" class="form-control"></td>
|
||||
<td><input name="partidas[${idx}][valor_factura]" type="number" step="0.01" class="form-control valor-partida w-auto"></td>
|
||||
<td><input name="partidas[${idx}][peso_bruto]" type="number" step="0.0001" class="form-control w-auto"></td>
|
||||
<td>
|
||||
<select name="partidas[${idx}][tasa_preferencial]" class="form-select searchable">
|
||||
<option value="">-- Selecciona --</option>
|
||||
@@ -382,9 +416,9 @@
|
||||
<option>COMERCIALIZADORA</option>
|
||||
</select>
|
||||
</td>
|
||||
<td class="hide"><input name="partidas[${idx}][precio_unitario]" type="number" class="form-control"></td>
|
||||
<td class="hide"><input name="partidas[${idx}][oma_factura]" class="form-control"></td>
|
||||
<td><button type="button" class="btn btn-danger btn-sm remove-row">✖️</button></td>
|
||||
<td class="hide"><input name="partidas[${idx}][precio_unitario]" type="number" class="form-control w-auto"></td>
|
||||
<td class="hide"><input name="partidas[${idx}][oma_factura]" class="form-control w-auto"></td>
|
||||
<td><button type="button" class="btn btn-danger btn-sm remove-row mt-auto w-auto btn-animated">✖️</button></td>
|
||||
`;
|
||||
|
||||
tbody.appendChild(row);
|
||||
@@ -579,15 +613,15 @@
|
||||
// Función para cargar choferes en el select
|
||||
function cargarChoferes(choferes) {
|
||||
const opciones = [{
|
||||
value: '',
|
||||
label: '-- Selecciona Chofer --',
|
||||
value: '',
|
||||
label: '-- Selecciona Chofer --',
|
||||
disabled: false
|
||||
}];
|
||||
|
||||
choferes.forEach(chofer => {
|
||||
opciones.push({
|
||||
value: chofer.id_chofer,
|
||||
label: chofer.nombre,
|
||||
value: chofer.id_chofer,
|
||||
label: chofer.nombre,
|
||||
disabled: false
|
||||
});
|
||||
});
|
||||
|
||||
@@ -86,10 +86,10 @@
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">📄 Solicitudes de Importación</h4>
|
||||
<a href="/IMPORTADORES/solicitud_importacion/crear" class="btn btn-success mb-3 mt-auto w-auto btn-animated">➕ Nueva Solicitud</a>
|
||||
<button class="btn btn-warning mb-3 mt-auto w-auto btn-animated" id="btn-solicitar-masivo">🚚 Solicitar Importación Masiva</button>
|
||||
<a href="/IMPORTADORES/solicitud_importacion/crear" class="btn btn-success mb-3 mt-auto w-auto btn-animated fade-in-up">➕ Nueva Solicitud</a>
|
||||
<button class="btn btn-warning mb-3 mt-auto w-auto btn-animated fade-in-up" id="btn-solicitar-masivo">🚚 Solicitar Importación Masiva</button>
|
||||
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped" id="tabla-solicitudes">
|
||||
<thead>
|
||||
|
||||
@@ -170,7 +170,7 @@
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">➕ Nuevo Transporte</h4>
|
||||
<form id="formTransCrear" action="/IMPORTADORES/transportes/guardar" method="POST" enctype="multipart/form-data" class="card p-4 shadow-sm card-hover position-relative h-auto">
|
||||
<form id="formTransCrear" action="/IMPORTADORES/transportes/guardar" method="POST" enctype="multipart/form-data" class="card p-4 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="row g-3">
|
||||
|
||||
<div class="col-md-6 form-group-animated">
|
||||
|
||||
@@ -164,7 +164,7 @@
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">✏️ Editar Transporte #<?= $t['id_transporte'] ?></h4>
|
||||
<form id="formTransEdit" action="/IMPORTADORES/transportes/actualizar" method="POST" enctype="multipart/form-data" class="card p-4 shadow-sm card-hover position-relative h-auto">
|
||||
<form id="formTransEdit" action="/IMPORTADORES/transportes/actualizar" method="POST" enctype="multipart/form-data" class="card p-4 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<input type="hidden" name="id_transporte" value="<?= $t['id_transporte'] ?>">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-6 form-group-animated">
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
</script>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="card p-4 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-4 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<form action="/IMPORTADORES/transportes/importarGuardar" method="POST" enctype="multipart/form-data">
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Archivo CSV *</label>
|
||||
|
||||
@@ -67,8 +67,8 @@
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">🚛 Mis Transportes</h4>
|
||||
<a href="/IMPORTADORES/transportes/crear" class="btn btn-success mb-3 mt-auto w-auto btn-animated">➕ Nuevo Transporte</a>
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<a href="/IMPORTADORES/transportes/crear" class="btn btn-success mb-3 mt-auto w-auto btn-animated fade-in-up">➕ Nuevo Transporte</a>
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped" id="tabla-transportes">
|
||||
<thead>
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">➕ Alta de Transportista</h4>
|
||||
<form action="/IMPORTADORES/transportistas/guardar" method="POST" class="card p-4 shadow-sm card-hover position-relative h-auto" id="formAltaTransportista">
|
||||
<form action="/IMPORTADORES/transportistas/guardar" method="POST" class="card p-4 shadow-sm card-hover position-relative h-auto fade-in-up" id="formAltaTransportista">
|
||||
<!-- Hidden para persona moral -->
|
||||
<input type="hidden" name="es_persona_moral" id="es_persona_moral" value="0">
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ unset($_SESSION['import_errors'], $_SESSION['import_success']);
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">📂 Carga Masiva de Transportistas</h4>
|
||||
<div class="card p-4 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-4 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<p>1. Descarga la plantilla, complétala con tus datos y luego súbela aquí.</p>
|
||||
<a href="/IMPORTADORES/transportistas/template" class="btn btn-outline-secondary mb-4">
|
||||
📥 Descargar Plantilla CSV
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">✏️ Editar Transportista #<?= $t['id_transportista'] ?></h4>
|
||||
<form action="/IMPORTADORES/transportistas/actualizar" method="POST" class="card p-4 shadow-sm card-hover position-relative h-auto" id="formEditTransportista">
|
||||
<form action="/IMPORTADORES/transportistas/actualizar" method="POST" class="card p-4 shadow-sm card-hover position-relative h-auto fade-in-up" id="formEditTransportista">
|
||||
<input type="hidden" name="id_transportista" value="<?= $t['id_transportista'] ?>">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-4 form-group-animated">
|
||||
|
||||
@@ -64,8 +64,8 @@
|
||||
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">🚚 Mis Transportistas</h4>
|
||||
<a href="/IMPORTADORES/transportistas/alta" class="btn btn-success mb-3 mt-auto w-auto btn-animated">➕ Nuevo Transportista</a>
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<a href="/IMPORTADORES/transportistas/alta" class="btn btn-success mb-3 mt-auto w-auto btn-animated fade-in-up">➕ Nuevo Transportista</a>
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table id="transportistas-table" class="display nowrap" style="width:100%">
|
||||
<thead>
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">✅ Importadores Vinculados</h4>
|
||||
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped" id="tabla-importadores-vinculados">
|
||||
<thead>
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">➕ Nueva Vinculación</h4>
|
||||
<!-- TABLA DE AGENCIAS -->
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<h5 class="mb-3">🔗 Solicitar Vinculación con Agencias Aduanales</h5>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-hover align-middle" id="tabla-solicitar-vinculaciones">
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">🔗 Solicitudes de Vinculación</h4>
|
||||
<!-- TABLA DE SOLICITUDES DE VINCULACIÓN -->
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<h5 class="mb-3">👥 Usuarios Solicitantes</h5>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-hover align-middle" id="tabla-vinculaciones-pendientes">
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">👥 Usuarios Vinculados</h4>
|
||||
<!-- TABLA DE VINCULACIÓN AGENCIA -->
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-hover align-middle" id="tabla-vinculaciones-agencia">
|
||||
<thead>
|
||||
|
||||
@@ -68,9 +68,9 @@
|
||||
<!-- 📄 CONTENIDO -->
|
||||
<div class="content">
|
||||
<h4 class="mb-4 animate__animated animate__fadeInDown title_glow">🔗 Mis vinculaciones</h4>
|
||||
<a href="/IMPORTADORES/vinculaciones/nuevaVinculacion" class="btn btn-success mb-3 mt-auto w-auto btn-animated">➕ Nueva Vinculación</a>
|
||||
<a href="/IMPORTADORES/vinculaciones/nuevaVinculacion" class="btn btn-success mb-3 mt-auto w-auto btn-animated fade-in-up">➕ Nueva Vinculación</a>
|
||||
<!-- TABLA DE VINCULACIÓN USUARIO -->
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto">
|
||||
<div class="card p-3 shadow-sm card-hover position-relative h-auto fade-in-up">
|
||||
<h5 class="mb-3">🏪 Agencia Vinculadas</h5>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-hover align-middle" id="tabla-vinculaciones-usuario">
|
||||
|
||||
Reference in New Issue
Block a user