From bf93e8f79b96251dc8da38daaacace3627abdf4d Mon Sep 17 00:00:00 2001 From: Soporte ZH Consultores Date: Thu, 9 Jul 2026 09:35:12 -0500 Subject: [PATCH] fix(tramites): buscador incluye todas las columnas visibles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Antes solo miraba nombre/tipoTramite/tipoProceso/cliente/abogado/id, así que buscar "Municipio" en la tab Administrativo no encontraba nada aunque la columna Institución tuviera "Municipio de Panamá". Nuevo rowHaystack(dept, r) concatena todos los campos que se muestran en la tabla, excluyendo abogado y estatus (tienen sus propios dropdowns al lado del buscador): - Común: id/codigo, cliente, nombre, instrucciones, fecha solicitud - adm: institución - corp: tipo documento - mig: tipo trámite, doc completa, permiso trabajo, dependientes, vencimiento - lit: tipo proceso, juzgado, circuito, esfera, instancia, doc completa, incidentes, amparo, término - Todos: involucrados (name + email) --- views/tramites.html | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/views/tramites.html b/views/tramites.html index 8ec25f0..3809a34 100644 --- a/views/tramites.html +++ b/views/tramites.html @@ -381,13 +381,28 @@ const filterState = { lit: { search:'', status:'', abog:'', esfera:'' }, }; +// Concatena todos los campos visibles de la fila (excepto abogado y estatus, +// que tienen su propio dropdown). Incluye involucrados (name+email) e +// instrucciones para que la búsqueda encuentre lo mismo que el usuario ve. +function rowHaystack(dept, r){ + const parts = [ + r.id, r.codigo, r.cliente, r.nombre, r.instrucciones, + r.fechaSolicitud, r.fecha_solicitud, + ]; + if (dept === 'adm') parts.push(r.institucion); + if (dept === 'corp') parts.push(r.tipoDocumento); + if (dept === 'mig') parts.push(r.tipoTramite, r.docCompleta, r.permisoTrabajo, r.dependientes, r.fechaVencimiento); + if (dept === 'lit') parts.push(r.tipoProceso, r.juzgado, r.circuito, r.esfera, r.instancia, r.docCompleta, r.incidentes, r.amparo, r.fechaTermino); + (r.involucrados || []).forEach(u => parts.push(u.name, u.email)); + return parts.filter(Boolean).join(' ').toLowerCase(); +} + function computeFiltered(dept){ const rows = data[dept]; const f = filterState[dept]; const q = f.search.toLowerCase(); const filtered = rows.filter(r => { - const txt = ((r.nombre||r.tipoTramite||r.tipoProceso||'')+(r.cliente||'')+(r.abogado||'')+(r.id||'')).toLowerCase(); - if (q && !txt.includes(q)) return false; + if (q && !rowHaystack(dept, r).includes(q)) return false; if (f.status && r.estatus !== f.status) return false; if (f.abog && r.abogado !== f.abog) return false; if (dept === 'lit' && f.esfera && r.esfera !== f.esfera) return false;