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

172 lines
4.8 KiB
TypeScript

import { useState } from "react";
import api from "../services/api";
/**
* Hook para gerenciar operações de honorários
*/
export const useHonorarios = (processoId: string) => {
const [isLoading, setIsLoading] = useState(false);
const [error, setError] = useState<string | null>(null);
/**
* Adiciona um novo honorário
*/
const addHonorario = async (data: any) => {
setIsLoading(true);
setError(null);
try {
// Validações
if (!data.formaPagamento) {
throw new Error("Forma de pagamento é obrigatória");
}
// Preparar dados
const payload = {
processoId,
formaPagamento: data.formaPagamento,
status: data.status || "PENDENTE",
dataVencimento: data.dataVencimento || new Date(),
observacoes: data.observacoes || null,
valorFixo: data.valorFixo ? Number(data.valorFixo) : null,
percentualCausa: data.percentualCausa
? Number(data.percentualCausa)
: null,
percentualExito: data.percentualExito
? Number(data.percentualExito)
: null,
valorEntrada: data.valorEntrada ? Number(data.valorEntrada) : null,
numeroParcelas: data.numeroParcelas ? Number(data.numeroParcelas) : 1,
valorParcela: data.valorParcela ? Number(data.valorParcela) : null,
diaVencimento: data.diaVencimento ? Number(data.diaVencimento) : 10,
};
// Fazer requisição
const response = await api.post(
`/processos/${processoId}/honorarios`,
payload,
);
return response.data;
} catch (err: any) {
const errorMsg =
err.response?.data?.details ||
err.response?.data?.error ||
err.message ||
"Erro ao adicionar honorário";
setError(errorMsg);
throw new Error(errorMsg);
} finally {
setIsLoading(false);
}
};
/**
* Atualiza um honorário existente
*/
const updateHonorario = async ({ id, data }: { id: string; data: any }) => {
setIsLoading(true);
setError(null);
try {
// Preparar dados
const payload = {
formaPagamento: data.formaPagamento,
status: data.status,
dataVencimento: data.dataVencimento,
observacoes: data.observacoes,
valorFixo: data.valorFixo ? Number(data.valorFixo) : null,
percentualCausa: data.percentualCausa
? Number(data.percentualCausa)
: null,
percentualExito: data.percentualExito
? Number(data.percentualExito)
: null,
valorEntrada: data.valorEntrada ? Number(data.valorEntrada) : null,
numeroParcelas: data.numeroParcelas ? Number(data.numeroParcelas) : 1,
valorParcela: data.valorParcela ? Number(data.valorParcela) : null,
diaVencimento: data.diaVencimento ? Number(data.diaVencimento) : 10,
};
// Fazer requisição
const response = await api.put(`/honorarios/${id}`, payload);
return response.data;
} catch (err: any) {
const errorMsg =
err.response?.data?.error ||
err.message ||
"Erro ao atualizar honorário";
setError(errorMsg);
throw new Error(errorMsg);
} finally {
setIsLoading(false);
}
};
/**
* Remove um honorário
*/
const deleteHonorario = async (id: string) => {
setIsLoading(true);
setError(null);
try {
await api.delete(`/honorarios/${id}`);
} catch (err: any) {
const errorMsg =
err.response?.data?.error || err.message || "Erro ao excluir honorário";
setError(errorMsg);
throw new Error(errorMsg);
} finally {
setIsLoading(false);
}
};
/**
* Busca todos os honorários do processo
*/
const getHonorarios = async () => {
setIsLoading(true);
setError(null);
try {
const response = await api.get(`/processos/${processoId}/honorarios`);
return response.data;
} catch (err: any) {
const errorMsg =
err.response?.data?.error || err.message || "Erro ao buscar honorários";
setError(errorMsg);
throw new Error(errorMsg);
} finally {
setIsLoading(false);
}
};
// Adicionar função para atualizar parcela
const updateParcela = async ({ id, data }: { id: string; data: any }) => {
setIsLoading(true);
setError(null);
try {
const response = await api.put(`/honorarios/parcelas/${id}`, data);
return response.data;
} catch (err: any) {
const errorMsg =
err.response?.data?.error || err.message || "Erro ao atualizar parcela";
setError(errorMsg);
throw new Error(errorMsg);
} finally {
setIsLoading(false);
}
};
return {
addHonorario,
updateHonorario,
deleteHonorario,
getHonorarios,
isLoading,
error,
updateParcela,
};
};