diff --git a/public/app.js b/public/app.js index 81a68ee..a8c867a 100644 --- a/public/app.js +++ b/public/app.js @@ -2672,6 +2672,8 @@ const initApp = () => { const btnEmitirRelatorio = document.getElementById('btnEmitirRelatorio'); const btnCloseEmitirModal = document.getElementById('btnCloseEmitirModal'); + const emitirFilterAno = document.getElementById('emitirFilterAno'); + const emitirFilterTurma = document.getElementById('emitirFilterTurma'); const emitirFilterCrianca = document.getElementById('emitirFilterCrianca'); const emitirFilterDataInicio = document.getElementById('emitirFilterDataInicio'); const emitirFilterDataFim = document.getElementById('emitirFilterDataFim'); @@ -2727,22 +2729,57 @@ const initApp = () => { }); } - // Carregar dados de filtros (crianças e templates) - async function loadFiltersData() { + // Buscar crianças com base nos filtros de Ano e Turma selecionados + async function loadChildrenList() { try { - const res = await fetch('/api/observacoes/criancas'); + const activeAno = emitirFilterAno ? emitirFilterAno.value : ''; + const activeTurma = emitirFilterTurma ? emitirFilterTurma.value : ''; + const activeCrianca = emitirFilterCrianca ? emitirFilterCrianca.value : ''; + + let url = '/api/observacoes/criancas'; + const params = []; + if (activeAno) params.push(`ano=${activeAno}`); + if (activeTurma) params.push(`turma=${encodeURIComponent(activeTurma)}`); + if (params.length > 0) url += '?' + params.join('&'); + + const res = await fetch(url); const criancas = await res.json(); emitirFilterCrianca.innerHTML = '' + - criancas.map(c => ``).join(''); + (Array.isArray(criancas) ? criancas : []).map(c => ``).join(''); } catch (err) { - console.error('Erro ao buscar crianças para filtros:', err); + console.error('Erro ao carregar lista de crianças:', err); + } + } + + // Carregar dados de filtros (anos, turmas, crianças e templates) + async function loadFiltersData() { + try { + const activeAno = emitirFilterAno ? emitirFilterAno.value : ''; + const activeTurma = emitirFilterTurma ? emitirFilterTurma.value : ''; + + const res = await fetch('/api/observacoes/metadata'); + const meta = await res.json(); + + if (emitirFilterAno) { + emitirFilterAno.innerHTML = '' + + (meta.anos || []).map(y => ``).join(''); + } + if (emitirFilterTurma) { + emitirFilterTurma.innerHTML = '' + + (meta.turmas || []).map(t => ``).join(''); + } + } catch (err) { + console.error('Erro ao buscar metadados de filtros:', err); } + await loadChildrenList(); + try { + const activeTemplate = emitirFilterTemplate ? emitirFilterTemplate.value : ''; const res = await fetch('/api/modelos'); const modelos = await res.json(); emitirFilterTemplate.innerHTML = '' + - modelos.map(m => ``).join(''); + (Array.isArray(modelos) ? modelos : []).map(m => ``).join(''); } catch (err) { console.error('Erro ao buscar modelos para filtros:', err); } @@ -2750,7 +2787,20 @@ const initApp = () => { updateObservationsCount(); } - // Ouvintes para atualizar contagem + // Ouvintes para atualizar contagem e filtros de criança + if (emitirFilterAno) { + emitirFilterAno.addEventListener('change', async () => { + await loadChildrenList(); + updateObservationsCount(); + }); + } + if (emitirFilterTurma) { + emitirFilterTurma.addEventListener('change', async () => { + await loadChildrenList(); + updateObservationsCount(); + }); + } + [emitirFilterCrianca, emitirFilterDataInicio, emitirFilterDataFim, emitirFilterTag, emitirFilterTemplate].forEach(el => { if (el) el.addEventListener('change', updateObservationsCount); }); @@ -2765,6 +2815,8 @@ const initApp = () => { const dataFim = emitirFilterDataFim ? emitirFilterDataFim.value : ''; const tag = emitirFilterTag ? emitirFilterTag.value : ''; const modeloId = emitirFilterTemplate ? emitirFilterTemplate.value : ''; + const ano = emitirFilterAno ? emitirFilterAno.value : ''; + const turma = emitirFilterTurma ? emitirFilterTurma.value : ''; if (!crianca || !modeloId) { emitirObsCountInfo.textContent = 'Escolha uma criança e um modelo para prosseguir.'; @@ -2779,6 +2831,8 @@ const initApp = () => { if (dataInicio) url += `&dataInicio=${dataInicio}`; if (dataFim) url += `&dataFim=${dataFim}`; if (tag) url += `&tags=${encodeURIComponent(tag)}`; + if (ano) url += `&ano=${ano}`; + if (turma) url += `&turma=${encodeURIComponent(turma)}`; const res = await fetch(url); const data = await res.json(); @@ -2808,6 +2862,8 @@ const initApp = () => { const dataFim = emitirFilterDataFim.value; const tag = emitirFilterTag.value; const modeloId = emitirFilterTemplate.value; + const ano = emitirFilterAno ? emitirFilterAno.value : ''; + const turma = emitirFilterTurma ? emitirFilterTurma.value : ''; if (!crianca || !modeloId) return; @@ -2829,7 +2885,9 @@ const initApp = () => { dataInicio, dataFim, tags: tag || undefined, - modeloId + modeloId, + ano, + turma }) }); diff --git a/public/index.html b/public/index.html index a82ba16..e1ea5e6 100644 --- a/public/index.html +++ b/public/index.html @@ -543,6 +543,20 @@
+
+ + +
+ +
+ + +
+