133 lines
4.4 KiB
TypeScript
133 lines
4.4 KiB
TypeScript
import React, { useEffect, useState } from 'react';
|
|
import { useParams, useNavigate } from 'react-router-dom'; // Adicionar useNavigate
|
|
import { toast } from 'react-toastify';
|
|
import api from '../../services/api';
|
|
|
|
interface CalculoPensao {
|
|
id: string;
|
|
titulo: string;
|
|
descricao?: string;
|
|
dataInicial: string;
|
|
dataFinal?: string;
|
|
percentualSalarioMinimo: number;
|
|
multaPactuada?: number;
|
|
tipoAtualizacao: string;
|
|
valorCalculado: number;
|
|
valorMulta: number;
|
|
valorTotal: number;
|
|
observacoes?: string;
|
|
processo?: {
|
|
numero: string;
|
|
titulo: string;
|
|
};
|
|
cliente?: {
|
|
nome: string;
|
|
};
|
|
}
|
|
|
|
export function DetalhePensaoAlimenticia() {
|
|
const { id } = useParams<{ id: string }>();
|
|
const navigate = useNavigate(); // Adicionar hook de navegação
|
|
const [calculo, setCalculo] = useState<CalculoPensao | null>(null);
|
|
const [loading, setLoading] = useState(true);
|
|
|
|
useEffect(() => {
|
|
// Verificação extra para garantir que o id está definido
|
|
if (!id || id === "novo") {
|
|
setLoading(false);
|
|
setCalculo(null);
|
|
return;
|
|
}
|
|
const loadCalculo = async () => {
|
|
try {
|
|
console.log('[DetalhePensaoAlimenticia] Buscando cálculo para id:', id);
|
|
const response = await api.get(`/api/calculos/pensao-alimenticia/${id}`);
|
|
setCalculo(response.data);
|
|
} catch (error: any) {
|
|
// Log detalhado para depuração
|
|
console.error('[DetalhePensaoAlimenticia] Erro ao carregar cálculo:', error);
|
|
|
|
// Tratamento específico para erro 404 (cálculo não encontrado)
|
|
if (error?.response?.status === 404) {
|
|
toast.warn('Cálculo de pensão alimentícia não encontrado.');
|
|
} else {
|
|
toast.error(
|
|
error?.response?.data?.message ||
|
|
'Falha ao buscar cálculo de pensão alimentícia.'
|
|
);
|
|
}
|
|
setCalculo(null);
|
|
} finally {
|
|
setLoading(false);
|
|
}
|
|
};
|
|
|
|
loadCalculo();
|
|
}, [id]);
|
|
|
|
if (loading) {
|
|
return <div>Carregando...</div>;
|
|
}
|
|
|
|
if (!calculo) {
|
|
return (
|
|
<div className="bg-white shadow-md rounded-lg p-6 flex flex-col items-center">
|
|
<div className="text-lg mb-4 text-gray-700">Nenhum cálculo de pensão alimentícia encontrado.</div>
|
|
<button
|
|
className="px-4 py-2 bg-blue-600 text-white rounded-md shadow hover:bg-blue-700"
|
|
onClick={() => navigate('/pensao-alimenticia/novo')}
|
|
>
|
|
Criar novo cálculo
|
|
</button>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<div className="bg-white shadow-md rounded-lg p-6">
|
|
<h1 className="text-2xl font-bold mb-4">{calculo.titulo}</h1>
|
|
|
|
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
|
|
<div>
|
|
<h2 className="text-lg font-semibold mb-2">Dados do Cálculo</h2>
|
|
<div className="space-y-2">
|
|
<p><span className="font-medium">Data Inicial:</span> {new Date(calculo.dataInicial).toLocaleDateString()}</p>
|
|
{calculo.dataFinal && (
|
|
<p><span className="font-medium">Data Final:</span> {new Date(calculo.dataFinal).toLocaleDateString()}</p>
|
|
)}
|
|
<p><span className="font-medium">Percentual:</span> {calculo.percentualSalarioMinimo}%</p>
|
|
{calculo.multaPactuada && (
|
|
<p><span className="font-medium">Multa:</span> {calculo.multaPactuada}%</p>
|
|
)}
|
|
<p><span className="font-medium">Índice:</span> {calculo.tipoAtualizacao}</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div>
|
|
<h2 className="text-lg font-semibold mb-2">Valores</h2>
|
|
<div className="space-y-2">
|
|
<p><span className="font-medium">Valor Base:</span> R$ {calculo.valorCalculado.toFixed(2)}</p>
|
|
<p><span className="font-medium">Valor Multa:</span> R$ {calculo.valorMulta.toFixed(2)}</p>
|
|
<p><span className="font-medium">Valor Total:</span> R$ {calculo.valorTotal.toFixed(2)}</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{calculo.observacoes && (
|
|
<div className="mt-6">
|
|
<h2 className="text-lg font-semibold mb-2">Observações</h2>
|
|
<p className="text-gray-700">{calculo.observacoes}</p>
|
|
</div>
|
|
)}
|
|
|
|
<div className="mt-8 flex justify-end">
|
|
<button
|
|
className="px-4 py-2 bg-blue-600 text-white rounded-md shadow hover:bg-blue-700"
|
|
onClick={() => navigate('/pensao-alimenticia/novo')}
|
|
>
|
|
Criar novo cálculo
|
|
</button>
|
|
</div>
|
|
</div>
|
|
);
|
|
} |