100 lines
2.7 KiB
TypeScript
100 lines
2.7 KiB
TypeScript
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;
|