dashboard: reimaginacao
Signed-off-by: Rodrigo B. de Sousa Martins <rodrigo.sousa.577@gmail.com>
This commit is contained in:
1 parent
0963cab395
commit
285d829c27
2 files changed
+101
No files matched your search
@@ -8,6 +8,7 @@ import provasRoutes from './routes/provas';
|
|||||||
import calculosJudiciaisRoutes from './routes/calculosJudiciais';
|
import calculosJudiciaisRoutes from './routes/calculosJudiciais';
|
||||||
import indicesMonetariosRoutes from './routes/indicesMonetarios';
|
import indicesMonetariosRoutes from './routes/indicesMonetarios';
|
||||||
import pensaoAlimenticiaRoutes from './routes/pensaoAlimenticia';
|
import pensaoAlimenticiaRoutes from './routes/pensaoAlimenticia';
|
||||||
|
import financeiroPainelRoutes from './routes/financeiroPainel';
|
||||||
|
|
||||||
dotenv.config();
|
dotenv.config();
|
||||||
|
|
||||||
@@ -27,6 +28,7 @@ app.use('/api/provas', provasRoutes);
|
|||||||
app.use('/api/calculos', calculosJudiciaisRoutes);
|
app.use('/api/calculos', calculosJudiciaisRoutes);
|
||||||
app.use('/api/indices', indicesMonetariosRoutes);
|
app.use('/api/indices', indicesMonetariosRoutes);
|
||||||
app.use('/api/pensao-alimenticia', pensaoAlimenticiaRoutes);
|
app.use('/api/pensao-alimenticia', pensaoAlimenticiaRoutes);
|
||||||
|
app.use('/api/financeiro-painel', financeiroPainelRoutes);
|
||||||
|
|
||||||
app.use(express.static(path.join(__dirname, 'public')));
|
app.use(express.static(path.join(__dirname, 'public')));
|
||||||
app.set('trust proxy', true); // Importante para obter o IP real em ambientes com proxy
|
app.set('trust proxy', true); // Importante para obter o IP real em ambientes com proxy
|
||||||
|
|||||||
@@ -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;
|
||||||
Reference in new issue
Block a user