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;