dashboard: reimaginacao

Signed-off-by: Rodrigo B. de Sousa Martins <rodrigo.sousa.577@gmail.com>
This commit is contained in:
rodrigo committed 2025-07-15 22:40:54 -03:00
1 parent 0963cab395
commit 285d829c27
2 files changed
+101

No files matched your search

+2
View File
@@ -8,6 +8,7 @@ import provasRoutes from './routes/provas';
import calculosJudiciaisRoutes from './routes/calculosJudiciais';
import indicesMonetariosRoutes from './routes/indicesMonetarios';
import pensaoAlimenticiaRoutes from './routes/pensaoAlimenticia';
import financeiroPainelRoutes from './routes/financeiroPainel';
dotenv.config();
@@ -27,6 +28,7 @@ app.use('/api/provas', provasRoutes);
app.use('/api/calculos', calculosJudiciaisRoutes);
app.use('/api/indices', indicesMonetariosRoutes);
app.use('/api/pensao-alimenticia', pensaoAlimenticiaRoutes);
app.use('/api/financeiro-painel', financeiroPainelRoutes);
app.use(express.static(path.join(__dirname, 'public')));
app.set('trust proxy', true); // Importante para obter o IP real em ambientes com proxy
+99
View File
@@ -0,0 +1,99 @@
import express from 'express';
import { prisma } from '../app';
const router = express.Router();
// GET /api/financeiro-painel?mes=6&ano=2024
router.get('/', async (req, res) => {
try {
const mes = parseInt(req.query.mes as string) || (new Date().getMonth() + 1);
const ano = parseInt(req.query.ano as string) || (new Date().getFullYear());
if (isNaN(mes) || isNaN(ano)) {
return res.status(400).json({ error: 'Parâmetros de mês e ano inválidos.' });
}
// Datas para filtro
const dataInicio = new Date(ano, mes - 1, 1);
const dataFim = new Date(ano, mes, 1);
// Honorários a receber: parcelas pendentes ou vencidas
const honorariosAReceber = await prisma.parcelaHonorario.aggregate({
_sum: { valor: true },
where: {
OR: [{ status: 'PENDENTE' }, { status: 'VENCIDO' }],
},
});
// Honorários recebidos no mês
const honorariosRecebidosMes = await prisma.parcelaHonorario.aggregate({
_sum: { valorPago: true },
where: {
status: 'PAGO',
dataPagamento: {
gte: dataInicio,
lt: dataFim,
},
},
});
// Detalhes das parcelas recebidas no mês
const detalhesHonorarios = await prisma.parcelaHonorario.findMany({
where: {
status: 'PAGO',
dataPagamento: {
gte: dataInicio,
lt: dataFim,
},
},
include: { honorario: true },
orderBy: { dataPagamento: 'desc' },
take: 10,
});
// Custas a pagar
const custasAPagar = await prisma.custaProcessual.aggregate({
_sum: { valor: true },
where: {
OR: [{ status: 'PENDENTE' }, { status: 'VENCIDO' }],
},
});
// Custas pagas no mês
const custasPagasMes = await prisma.custaProcessual.aggregate({
_sum: { valor: true },
where: {
status: 'PAGO',
dataPagamento: {
gte: dataInicio,
lt: dataFim,
},
},
});
// Detalhes das custas pagas no mês
const detalhesCustas = await prisma.custaProcessual.findMany({
where: {
status: 'PAGO',
dataPagamento: {
gte: dataInicio,
lt: dataFim,
},
},
orderBy: { dataPagamento: 'desc' },
take: 10,
});
res.json({
honorariosAReceber: honorariosAReceber._sum.valor || 0,
honorariosRecebidosMes: honorariosRecebidosMes._sum.valorPago || 0,
custasAPagar: custasAPagar._sum.valor || 0,
custasPagasMes: custasPagasMes._sum.valor || 0,
detalhesHonorarios,
detalhesCustas,
});
} catch (error) {
console.error('Erro no financeiroPainel:', error);
res.status(500).json({ error: 'Erro ao buscar dados financeiros.' });
}
});
export default router;