refactor: improve filtering logic for employee time records in registro-pontos page

- Enhanced the filtering mechanism to apply location and status filters more effectively, ensuring only relevant records are displayed.
- Added checks to exclude records without location information when filters are active, improving data accuracy.
- Implemented a final filtering step to ensure only groups with valid records are shown, enhancing user experience in reviewing time records.
This commit is contained in:
2025-11-23 15:10:23 -03:00
parent 00e18e79ec
commit 51096e7aff

View File

@@ -251,6 +251,8 @@
}); });
// Filtrar registros com base nos filtros avançados // Filtrar registros com base nos filtros avançados
// Nota: Os filtros de data e funcionário são aplicados no backend através de registrosParams
// Os filtros de status e localização são aplicados aqui no frontend
const registrosFiltrados = $derived.by(() => { const registrosFiltrados = $derived.by(() => {
if (!registros || registros.length === 0) return []; if (!registros || registros.length === 0) return [];
@@ -268,6 +270,10 @@
// Filtro de localização (Dentro/Fora do Raio) // Filtro de localização (Dentro/Fora do Raio)
if (localizacaoFiltro !== 'todos') { if (localizacaoFiltro !== 'todos') {
resultado = resultado.filter(r => { resultado = resultado.filter(r => {
// Se não houver informação de localização, excluir do resultado quando filtro está ativo
if (r.dentroRaioPermitido === undefined || r.dentroRaioPermitido === null) {
return false;
}
if (localizacaoFiltro === 'dentro') return r.dentroRaioPermitido === true; if (localizacaoFiltro === 'dentro') return r.dentroRaioPermitido === true;
if (localizacaoFiltro === 'fora') return r.dentroRaioPermitido === false; if (localizacaoFiltro === 'fora') return r.dentroRaioPermitido === false;
return true; return true;
@@ -432,7 +438,17 @@
} }
} }
return resultado; // Filtrar grupos que não têm registros após aplicar os filtros
// Isso garante que apenas funcionários com registros que passam pelos filtros sejam exibidos
const resultadoFiltrado = resultado.filter(grupo => {
// Verificar se o grupo tem pelo menos um registro em alguma data
const temRegistros = Object.values(grupo.registrosPorData).some(
grupoData => grupoData.registros && grupoData.registros.length > 0
);
return temRegistros;
});
return resultadoFiltrado;
}); });
// Query para banco de horas de cada funcionário // Query para banco de horas de cada funcionário