Files
advx/src/repositories/HonorarioRepository.ts
T
2025-04-10 23:07:21 -03:00

132 lines
4.0 KiB
TypeScript

import { prisma } from "../config/database";
import { Honorario, FormaPagamento, StatusPagamento } from "@prisma/client";
export class HonorarioRepository {
async create(dados: any): Promise<Honorario> {
try {
// Criar honorário
const honorario = await prisma.honorario.create({
data: {
processoId: dados.processoId,
formaPagamento: dados.formaPagamento,
status: dados.status || "PENDENTE",
dataVencimento: new Date(dados.dataVencimento || new Date()),
dataContrato: new Date(),
observacoes: dados.observacoes || null,
valorFixo: dados.valorFixo ? Number(dados.valorFixo) : null,
percentualCausa: dados.percentualCausa
? Number(dados.percentualCausa)
: null,
percentualExito: dados.percentualExito
? Number(dados.percentualExito)
: null,
valorEntrada: dados.valorEntrada ? Number(dados.valorEntrada) : null,
numeroParcelas: Number(dados.numeroParcelas || 1),
valorParcela: dados.valorParcela ? Number(dados.valorParcela) : null,
diaVencimento: Number(dados.diaVencimento || 10),
},
});
// Se for parcelado, criar parcelas
if (
honorario &&
(honorario.formaPagamento === "PARCELADO" ||
honorario.formaPagamento === "ENTRADA_MAIS_PARCELAS")
) {
const parcelas = [];
const numParcelas = honorario.numeroParcelas;
const valorParcela = honorario.valorParcela || 0;
for (let i = 1; i <= numParcelas; i++) {
const dataVencimento = new Date(honorario.dataVencimento);
dataVencimento.setMonth(dataVencimento.getMonth() + (i - 1));
parcelas.push({
honorarioId: honorario.id,
numeroParcela: i,
valor: valorParcela,
vencimento: dataVencimento,
status: "PENDENTE" as StatusPagamento,
});
}
if (parcelas.length > 0) {
await prisma.parcelaHonorario.createMany({
data: parcelas,
});
}
}
// Retornar honorário com parcelas
return (await prisma.honorario.findUnique({
where: { id: honorario.id },
include: { parcelas: true },
})) as Honorario;
} catch (error) {
console.error("Erro ao criar honorário:", error);
throw error;
}
}
async update(id: string, data: any): Promise<Honorario> {
return await prisma.honorario.update({
where: { id },
data,
include: { parcelas: true },
});
}
async updateParcela(id: string, data: any): Promise<void> {
try {
console.log("Dados recebidos para atualização:", { id, data });
await prisma.parcelaHonorario.update({
where: { id },
data: {
status: data.status,
valorPago: data.valorPago ? Number(data.valorPago) : null,
dataPagamento: data.dataPagamento
? new Date(data.dataPagamento)
: null,
comprovante: data.comprovante,
observacoes: data.observacoes,
},
});
} catch (error) {
console.error("Erro ao atualizar parcela:", error);
throw error;
}
}
async updateParcela(id: string, data: any) {
try {
return await prisma.parcelaHonorario.update({
where: { id },
data: {
status: data.status,
valorPago: data.valorPago ? Number(data.valorPago) : null,
dataPagamento: data.dataPagamento
? new Date(data.dataPagamento)
: null,
comprovante: data.comprovante,
observacoes: data.observacoes,
},
});
} catch (error) {
console.error("Erro ao atualizar parcela:", error);
throw error;
}
}
async delete(id: string): Promise<void> {
await prisma.honorario.delete({ where: { id } });
}
async findByProcesso(processoId: string): Promise<Honorario[]> {
return await prisma.honorario.findMany({
where: { processoId },
include: { parcelas: true },
});
}
}