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

149 lines
3.8 KiB
TypeScript

import { useState } from "react";
import api from "../services/api";
/**
* Hook para gerenciar operações de custas processuais
*/
export const useCustasProcessuais = (processoId: string) => {
const [isLoading, setIsLoading] = useState(false);
const [error, setError] = useState<string | null>(null);
/**
* Adiciona uma nova custa processual
*/
const addCusta = async (data: any) => {
setIsLoading(true);
setError(null);
try {
// Validações
if (!data.tipo) throw new Error("Tipo da custa é obrigatório");
if (!data.descricao) throw new Error("Descrição da custa é obrigatória");
if (!data.valor) throw new Error("Valor da custa é obrigatório");
// Preparar dados
const payload = {
processoId,
tipo: data.tipo,
descricao: data.descricao,
valor: Number(data.valor),
percentual: data.percentual ? Number(data.percentual) : null,
status: data.status || "PENDENTE",
vencimento: data.vencimento || null,
dataPagamento: data.dataPagamento || null,
observacoes: data.observacoes || null,
numeroParcelas: Number(data.numeroParcelas || 1),
parcelaAtual: Number(data.parcelaAtual || 1),
comprovante: data.comprovante || null,
};
// Fazer requisição
const response = await api.post(
`/processos/${processoId}/custas`,
payload,
);
return response.data;
} catch (err: any) {
const errorMsg =
err.response?.data?.details ||
err.response?.data?.error ||
err.message ||
"Erro ao adicionar custa processual";
setError(errorMsg);
throw new Error(errorMsg);
} finally {
setIsLoading(false);
}
};
/**
* Atualiza uma custa processual existente
*/
const updateCusta = async ({ id, data }: { id: string; data: any }) => {
setIsLoading(true);
setError(null);
try {
// Preparar dados
const payload = {
tipo: data.tipo,
descricao: data.descricao,
valor: Number(data.valor),
percentual: data.percentual ? Number(data.percentual) : null,
status: data.status,
vencimento: data.vencimento,
dataPagamento: data.dataPagamento,
observacoes: data.observacoes,
numeroParcelas: Number(data.numeroParcelas || 1),
parcelaAtual: Number(data.parcelaAtual || 1),
comprovante: data.comprovante,
};
// Fazer requisição
const response = await api.put(`/custas/${id}`, payload);
return response.data;
} catch (err: any) {
const errorMsg =
err.response?.data?.error ||
err.message ||
"Erro ao atualizar custa processual";
setError(errorMsg);
throw new Error(errorMsg);
} finally {
setIsLoading(false);
}
};
/**
* Remove uma custa processual
*/
const deleteCusta = async (id: string) => {
setIsLoading(true);
setError(null);
try {
await api.delete(`/custas/${id}`);
} catch (err: any) {
const errorMsg =
err.response?.data?.error ||
err.message ||
"Erro ao excluir custa processual";
setError(errorMsg);
throw new Error(errorMsg);
} finally {
setIsLoading(false);
}
};
/**
* Busca todas as custas do processo
*/
const getCustas = async () => {
setIsLoading(true);
setError(null);
try {
const response = await api.get(`/processos/${processoId}/custas`);
return response.data;
} catch (err: any) {
const errorMsg =
err.response?.data?.error ||
err.message ||
"Erro ao buscar custas processuais";
setError(errorMsg);
throw new Error(errorMsg);
} finally {
setIsLoading(false);
}
};
return {
addCusta,
updateCusta,
deleteCusta,
getCustas,
isLoading,
error,
};
};