132 lines
4.0 KiB
TypeScript
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 },
|
|
});
|
|
}
|
|
}
|