Implementação de filtros de Ano Letivo e Turma na modal de emissão e correção da query de crianças únicas para evitar erro de scalar
This commit is contained in:
+66
-8
@@ -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 = '<option value="">Selecione a criança</option>' +
|
||||
criancas.map(c => `<option value="${c}">${c}</option>`).join('');
|
||||
(Array.isArray(criancas) ? criancas : []).map(c => `<option value="${c}" ${c === activeCrianca ? 'selected' : ''}>${c}</option>`).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 = '<option value="">Todos os anos</option>' +
|
||||
(meta.anos || []).map(y => `<option value="${y}" ${y === activeAno ? 'selected' : ''}>${y}</option>`).join('');
|
||||
}
|
||||
if (emitirFilterTurma) {
|
||||
emitirFilterTurma.innerHTML = '<option value="">Todas as turmas</option>' +
|
||||
(meta.turmas || []).map(t => `<option value="${t}" ${t === activeTurma ? 'selected' : ''}>${t}</option>`).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 = '<option value="">Selecione o modelo</option>' +
|
||||
modelos.map(m => `<option value="${m.id}">${m.nome}</option>`).join('');
|
||||
(Array.isArray(modelos) ? modelos : []).map(m => `<option value="${m.id}" ${m.id == activeTemplate ? 'selected' : ''}>${m.nome}</option>`).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
|
||||
})
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user