172 lines
4.8 KiB
TypeScript
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,
|
|
};
|
|
};
|