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:
@@ -755,13 +755,30 @@ app.delete('/api/modelos/:id', requireAuth, async (req, res) => {
|
||||
|
||||
// Obter lista única de crianças já observadas
|
||||
app.get('/api/observacoes/criancas', requireAuth, async (req, res) => {
|
||||
const { ano, turma } = req.query;
|
||||
try {
|
||||
const dbRes = await dbPool.query(`
|
||||
let sql = `
|
||||
SELECT DISTINCT jsonb_array_elements_text(criancas) as nome
|
||||
FROM escola.observacoes
|
||||
WHERE criancas IS NOT NULL AND jsonb_array_length(criancas) > 0
|
||||
ORDER BY nome;
|
||||
`);
|
||||
WHERE jsonb_typeof(criancas) = 'array'
|
||||
`;
|
||||
const params = [];
|
||||
let pCount = 1;
|
||||
|
||||
if (ano) {
|
||||
sql += ` AND substring(date from 1 for 4) = $${pCount}`;
|
||||
params.push(ano);
|
||||
pCount++;
|
||||
}
|
||||
|
||||
if (turma) {
|
||||
sql += ` AND turma = $${pCount}`;
|
||||
params.push(turma);
|
||||
pCount++;
|
||||
}
|
||||
|
||||
sql += ` ORDER BY nome;`;
|
||||
const dbRes = await dbPool.query(sql, params);
|
||||
res.json(dbRes.rows.map(r => r.nome));
|
||||
} catch (err) {
|
||||
console.error('Erro ao buscar crianças únicas:', err);
|
||||
@@ -769,9 +786,34 @@ app.get('/api/observacoes/criancas', requireAuth, async (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
// Obter metadados únicos para filtros (anos letivos e turmas)
|
||||
app.get('/api/observacoes/metadata', requireAuth, async (req, res) => {
|
||||
try {
|
||||
const yearsRes = await dbPool.query(`
|
||||
SELECT DISTINCT substring(date from 1 for 4) as ano
|
||||
FROM escola.observacoes
|
||||
WHERE date IS NOT NULL AND date != ''
|
||||
ORDER BY ano DESC;
|
||||
`);
|
||||
const turmasRes = await dbPool.query(`
|
||||
SELECT DISTINCT turma
|
||||
FROM escola.observacoes
|
||||
WHERE turma IS NOT NULL AND turma != ''
|
||||
ORDER BY turma;
|
||||
`);
|
||||
res.json({
|
||||
anos: yearsRes.rows.map(r => r.ano).filter(Boolean),
|
||||
turmas: turmasRes.rows.map(r => r.turma).filter(Boolean)
|
||||
});
|
||||
} catch (err) {
|
||||
console.error('Erro ao buscar metadados de observações:', err);
|
||||
res.status(500).json({ error: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
// Contar observações baseadas em filtros
|
||||
app.get('/api/observacoes/contar', requireAuth, async (req, res) => {
|
||||
const { crianca, dataInicio, dataFim, tags } = req.query;
|
||||
const { crianca, dataInicio, dataFim, tags, ano, turma } = req.query;
|
||||
try {
|
||||
let sql = `SELECT COUNT(*) FROM escola.observacoes WHERE 1=1`;
|
||||
const params = [];
|
||||
@@ -798,6 +840,18 @@ app.get('/api/observacoes/contar', requireAuth, async (req, res) => {
|
||||
pCount++;
|
||||
}
|
||||
|
||||
if (ano) {
|
||||
sql += ` AND substring(date from 1 for 4) = $${pCount}`;
|
||||
params.push(ano);
|
||||
pCount++;
|
||||
}
|
||||
|
||||
if (turma) {
|
||||
sql += ` AND turma = $${pCount}`;
|
||||
params.push(turma);
|
||||
pCount++;
|
||||
}
|
||||
|
||||
if (tags) {
|
||||
const tagList = tags.split(',').map(t => t.trim().toLowerCase());
|
||||
sql += ` AND EXISTS (
|
||||
@@ -818,7 +872,7 @@ app.get('/api/observacoes/contar', requireAuth, async (req, res) => {
|
||||
|
||||
// Gerar relatório consolidado com IA baseado em observações e um modelo
|
||||
app.post('/api/modelos/gerar-relatorio', requireAuth, async (req, res) => {
|
||||
const { crianca, dataInicio, dataFim, tags, modeloId } = req.body;
|
||||
const { crianca, dataInicio, dataFim, tags, modeloId, ano, turma } = req.body;
|
||||
if (!modeloId) return res.status(400).json({ error: 'O ID do modelo é obrigatório' });
|
||||
|
||||
try {
|
||||
@@ -857,6 +911,18 @@ app.post('/api/modelos/gerar-relatorio', requireAuth, async (req, res) => {
|
||||
pCount++;
|
||||
}
|
||||
|
||||
if (ano) {
|
||||
sql += ` AND substring(date from 1 for 4) = $${pCount}`;
|
||||
params.push(ano);
|
||||
pCount++;
|
||||
}
|
||||
|
||||
if (turma) {
|
||||
sql += ` AND turma = $${pCount}`;
|
||||
params.push(turma);
|
||||
pCount++;
|
||||
}
|
||||
|
||||
if (tags) {
|
||||
const tagList = Array.isArray(tags) ? tags : [tags];
|
||||
sql += ` AND EXISTS (
|
||||
|
||||
Reference in New Issue
Block a user