import { prisma } from "../config/database"; import { Honorario, FormaPagamento, StatusPagamento } from "@prisma/client"; export class HonorarioRepository { async create(dados: any): Promise { 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 { return await prisma.honorario.update({ where: { id }, data, include: { parcelas: true }, }); } async updateParcela(id: string, data: any): Promise { 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 { await prisma.honorario.delete({ where: { id } }); } async findByProcesso(processoId: string): Promise { return await prisma.honorario.findMany({ where: { processoId }, include: { parcelas: true }, }); } }