ui(home): horas y admin como módulos; quitar Directorio de Clientes
- Apps.catalog() ahora recibe isSocio y emite "Reporte de Horas" (todos) y "Panel de Control" (solo socios/admin) - Eliminado el placeholder "Directorio de Clientes" - Removidos los iconos de reloj y engranaje del header en home, tramites, escrituras, calendario, horas y admin (la navegación ahora pasa por las tarjetas del portal) - Iconos clock y gear agregados a la función icon() del home
This commit is contained in:
+3
-9
@@ -6,7 +6,7 @@ require_once __DIR__ . '/../src/Apps.php';
|
|||||||
|
|
||||||
$authed = Auth::isAuthenticated();
|
$authed = Auth::isAuthenticated();
|
||||||
$user = $authed ? Auth::user() : ['email' => '', 'name' => ''];
|
$user = $authed ? Auth::user() : ['email' => '', 'name' => ''];
|
||||||
$apps = $authed ? Apps::catalog() : [];
|
$apps = $authed ? Apps::catalog(Auth::isSocio()) : [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Devuelve los eventos del día agrupados:
|
* Devuelve los eventos del día agrupados:
|
||||||
@@ -122,6 +122,8 @@ function icon(string $name): string {
|
|||||||
'briefcase' => '<rect x="2" y="7" width="20" height="14" rx="2"/><path d="M16 7V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v2"/>',
|
'briefcase' => '<rect x="2" y="7" width="20" height="14" rx="2"/><path d="M16 7V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v2"/>',
|
||||||
'calendar' => '<rect x="3" y="4" width="18" height="18" rx="2"/><line x1="16" y1="2" x2="16" y2="6"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="3" y1="10" x2="21" y2="10"/>',
|
'calendar' => '<rect x="3" y="4" width="18" height="18" rx="2"/><line x1="16" y1="2" x2="16" y2="6"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="3" y1="10" x2="21" y2="10"/>',
|
||||||
'users' => '<path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/>',
|
'users' => '<path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/>',
|
||||||
|
'clock' => '<circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/>',
|
||||||
|
'gear' => '<circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"/>',
|
||||||
];
|
];
|
||||||
return $svgs[$name] ?? $svgs['document'];
|
return $svgs[$name] ?? $svgs['document'];
|
||||||
}
|
}
|
||||||
@@ -322,14 +324,6 @@ a{color:inherit;text-decoration:none;}
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="display:flex;align-items:center;">
|
<div style="display:flex;align-items:center;">
|
||||||
<a class="btn-clock" href="/horas/" title="Reporte de horas">
|
|
||||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
|
|
||||||
</a>
|
|
||||||
<?php if (Auth::isSocio()): ?>
|
|
||||||
<a class="btn-gear" href="/admin/" title="Panel de Control">
|
|
||||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>
|
|
||||||
</a>
|
|
||||||
<?php endif; ?>
|
|
||||||
<div class="user-chip">
|
<div class="user-chip">
|
||||||
<div class="user-avatar"><?= htmlspecialchars(initials($user['name'] ?: $user['email'])) ?></div>
|
<div class="user-avatar"><?= htmlspecialchars(initials($user['name'] ?: $user['email'])) ?></div>
|
||||||
<div class="user-info">
|
<div class="user-info">
|
||||||
|
|||||||
+19
-8
@@ -2,8 +2,8 @@
|
|||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
final class Apps {
|
final class Apps {
|
||||||
public static function catalog(): array {
|
public static function catalog(bool $isSocio = false): array {
|
||||||
return [
|
$apps = [
|
||||||
[
|
[
|
||||||
'slug' => 'escrituras',
|
'slug' => 'escrituras',
|
||||||
'title' => 'Control de Escrituras',
|
'title' => 'Control de Escrituras',
|
||||||
@@ -29,13 +29,24 @@ final class Apps {
|
|||||||
'status' => 'live',
|
'status' => 'live',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'slug' => 'clientes',
|
'slug' => 'horas',
|
||||||
'title' => 'Directorio de Clientes',
|
'title' => 'Reporte de Horas',
|
||||||
'description' => 'Datos de contacto, sociedades vinculadas y matriz de KYC.',
|
'description' => 'Horas invertidas por abogado y trámite, con filtros por rango de fechas y enlace al trámite.',
|
||||||
'icon' => 'users',
|
'icon' => 'clock',
|
||||||
'href' => '#',
|
'href' => '/horas/',
|
||||||
'status' => 'coming-soon',
|
'status' => 'live',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
if ($isSocio) {
|
||||||
|
$apps[] = [
|
||||||
|
'slug' => 'admin',
|
||||||
|
'title' => 'Panel de Control',
|
||||||
|
'description' => 'Gestión de usuarios y roles, parámetros del sistema y registro de transacciones.',
|
||||||
|
'icon' => 'gear',
|
||||||
|
'href' => '/admin/',
|
||||||
|
'status' => 'live',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
return $apps;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -192,9 +192,6 @@ tr.is-me td { background:#FFFBEB; font-weight:500; }
|
|||||||
<div class="user-avatar" id="user-avatar">?</div>
|
<div class="user-avatar" id="user-avatar">?</div>
|
||||||
<span class="user-name" id="user-name">…</span>
|
<span class="user-name" id="user-name">…</span>
|
||||||
</div>
|
</div>
|
||||||
<a class="btn-clock" href="/horas/" title="Reporte de horas">
|
|
||||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
|
|
||||||
</a>
|
|
||||||
<a class="btn-logout" href="/auth/logout.php" onclick="return confirm('¿Cerrar sesión?');">Cerrar sesión</a>
|
<a class="btn-logout" href="/auth/logout.php" onclick="return confirm('¿Cerrar sesión?');">Cerrar sesión</a>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|||||||
@@ -309,12 +309,6 @@ footer.legend .pill { display:inline-block; padding:2px 8px; border-radius:20px;
|
|||||||
<div class="user-avatar" id="user-avatar">?</div>
|
<div class="user-avatar" id="user-avatar">?</div>
|
||||||
<span class="user-name" id="user-name">…</span>
|
<span class="user-name" id="user-name">…</span>
|
||||||
</div>
|
</div>
|
||||||
<a class="btn-clock" href="/horas/" title="Reporte de horas">
|
|
||||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
|
|
||||||
</a>
|
|
||||||
<a class="btn-gear" href="/admin/" id="btn-gear" title="Panel de Control" style="display:none;">
|
|
||||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>
|
|
||||||
</a>
|
|
||||||
<a class="btn-logout" href="/auth/logout.php" onclick="return confirm('¿Cerrar sesión?');">Cerrar sesión</a>
|
<a class="btn-logout" href="/auth/logout.php" onclick="return confirm('¿Cerrar sesión?');">Cerrar sesión</a>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
@@ -474,14 +468,6 @@ let search = '';
|
|||||||
let selected = null;
|
let selected = null;
|
||||||
let authUser = { email:'', name:'' };
|
let authUser = { email:'', name:'' };
|
||||||
|
|
||||||
// Gear icon solo visible para socios (window.DONNA inyectado por Bootstrap)
|
|
||||||
if (window.DONNA && window.DONNA.isSocio) {
|
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
|
||||||
const g = document.getElementById('btn-gear');
|
|
||||||
if (g) g.style.display = 'inline-flex';
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function $(id){ return document.getElementById(id); }
|
function $(id){ return document.getElementById(id); }
|
||||||
function esc(s){ return (s==null?'':String(s)).replace(/&/g,'&').replace(/"/g,'"').replace(/</g,'<').replace(/>/g,'>'); }
|
function esc(s){ return (s==null?'':String(s)).replace(/&/g,'&').replace(/"/g,'"').replace(/</g,'<').replace(/>/g,'>'); }
|
||||||
function stripTime(d){ const o=new Date(d); o.setHours(0,0,0,0); return o; }
|
function stripTime(d){ const o=new Date(d); o.setHours(0,0,0,0); return o; }
|
||||||
|
|||||||
@@ -469,12 +469,6 @@ tr.editing-row td textarea.editable {
|
|||||||
<div class="user-avatar" id="user-avatar">?</div>
|
<div class="user-avatar" id="user-avatar">?</div>
|
||||||
<span class="user-name" id="user-name">Cargando…</span>
|
<span class="user-name" id="user-name">Cargando…</span>
|
||||||
</div>
|
</div>
|
||||||
<a class="btn-clock" href="/horas/" title="Reporte de horas">
|
|
||||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
|
|
||||||
</a>
|
|
||||||
<a class="btn-gear" href="/admin/" id="btn-gear" title="Panel de Control" style="display:none;">
|
|
||||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>
|
|
||||||
</a>
|
|
||||||
<button class="btn-logout" onclick="doLogout()">Cerrar sesión</button>
|
<button class="btn-logout" onclick="doLogout()">Cerrar sesión</button>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
@@ -617,13 +611,6 @@ tr.editing-row td textarea.editable {
|
|||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
const ABOGADOS = (window.DONNA && window.DONNA.abogados) || ['Arias','Abrego','Lopez','Altafulla','Álvarez','Gutiérrez','Cedeño','Mariscal','Ávila','Agudo','Martínez','De Gracia','Góndola','González','Valdés'];
|
const ABOGADOS = (window.DONNA && window.DONNA.abogados) || ['Arias','Abrego','Lopez','Altafulla','Álvarez','Gutiérrez','Cedeño','Mariscal','Ávila','Agudo','Martínez','De Gracia','Góndola','González','Valdés'];
|
||||||
// Gear icon visible solo para socios
|
|
||||||
if (window.DONNA && window.DONNA.isSocio) {
|
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
|
||||||
const g = document.getElementById('btn-gear');
|
|
||||||
if (g) g.style.display = 'inline-flex';
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const ESTATUS = ['Solicitado','Recibido','En Proceso','Protocolizado','En Registro','Inscrito'];
|
const ESTATUS = ['Solicitado','Recibido','En Proceso','Protocolizado','En Registro','Inscrito'];
|
||||||
const API = 'api.php';
|
const API = 'api.php';
|
||||||
const POLL_MS = 15000;
|
const POLL_MS = 15000;
|
||||||
|
|||||||
@@ -145,9 +145,6 @@ tr a.tramite-link:hover{color:var(--gold-d);text-decoration:underline;}
|
|||||||
<div class="user-avatar" id="user-avatar">?</div>
|
<div class="user-avatar" id="user-avatar">?</div>
|
||||||
<span class="user-name" id="user-name">…</span>
|
<span class="user-name" id="user-name">…</span>
|
||||||
</div>
|
</div>
|
||||||
<a class="btn-gear" href="/admin/" id="btn-gear" title="Panel de Control" style="display:none;">
|
|
||||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>
|
|
||||||
</a>
|
|
||||||
<a class="btn-logout" href="/auth/logout.php" onclick="return confirm('¿Cerrar sesión?');">Cerrar sesión</a>
|
<a class="btn-logout" href="/auth/logout.php" onclick="return confirm('¿Cerrar sesión?');">Cerrar sesión</a>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
@@ -265,13 +262,6 @@ function setUserChip(){
|
|||||||
$('user-name').title = authUser.email;
|
$('user-name').title = authUser.email;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_SOCIO) {
|
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
|
||||||
const g = $('btn-gear');
|
|
||||||
if (g) g.style.display = 'inline-flex';
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function defaultDates(){
|
function defaultDates(){
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const first = new Date(now.getFullYear(), now.getMonth(), 1);
|
const first = new Date(now.getFullYear(), now.getMonth(), 1);
|
||||||
|
|||||||
@@ -166,12 +166,6 @@ tr.expanded>td{background:#fffdf5;}
|
|||||||
<div class="user-avatar" id="user-avatar">?</div>
|
<div class="user-avatar" id="user-avatar">?</div>
|
||||||
<span class="user-name" id="user-name">Cargando…</span>
|
<span class="user-name" id="user-name">Cargando…</span>
|
||||||
</div>
|
</div>
|
||||||
<a class="btn-clock" href="/horas/" title="Reporte de horas">
|
|
||||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
|
|
||||||
</a>
|
|
||||||
<a class="btn-gear" href="/admin/" id="btn-gear" title="Panel de Control" style="display:none;">
|
|
||||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>
|
|
||||||
</a>
|
|
||||||
<a class="btn-logout" href="/auth/logout.php" onclick="return confirm('¿Cerrar sesión?');">Cerrar sesión</a>
|
<a class="btn-logout" href="/auth/logout.php" onclick="return confirm('¿Cerrar sesión?');">Cerrar sesión</a>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
@@ -228,13 +222,6 @@ const CAN_CREATE = !!(window.DONNA && window.DONNA.canCreate);
|
|||||||
const CAN_DELETE = !!(window.DONNA && window.DONNA.canDelete);
|
const CAN_DELETE = !!(window.DONNA && window.DONNA.canDelete);
|
||||||
const IS_SOCIO = !!(window.DONNA && window.DONNA.isSocio);
|
const IS_SOCIO = !!(window.DONNA && window.DONNA.isSocio);
|
||||||
let currentInvIds = new Set();
|
let currentInvIds = new Set();
|
||||||
// Mostrar gear icon si el usuario es socio
|
|
||||||
if (IS_SOCIO) {
|
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
|
||||||
const g = document.getElementById('btn-gear');
|
|
||||||
if (g) g.style.display = 'inline-flex';
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const PROVINCIAS = ['Bocas del Toro','Chiriquí','Coclé','Colón','Darién','Herrera','Los Santos','Panamá','Panamá Oeste','Veraguas','Comarca Ngäbe-Buglé','Comarca Guna Yala','Comarca Emberá-Wounaan'];
|
const PROVINCIAS = ['Bocas del Toro','Chiriquí','Coclé','Colón','Darién','Herrera','Los Santos','Panamá','Panamá Oeste','Veraguas','Comarca Ngäbe-Buglé','Comarca Guna Yala','Comarca Emberá-Wounaan'];
|
||||||
const STATUS_MAP = {
|
const STATUS_MAP = {
|
||||||
adm: ['Solicitado','Recibido','En Proceso','Notificado','Recurso','Culminado','Facturado'],
|
adm: ['Solicitado','Recibido','En Proceso','Notificado','Recurso','Culminado','Facturado'],
|
||||||
|
|||||||
Reference in New Issue
Block a user