fix(finance): corrige erro critico

- sobrescrita de valores na edição e refresh da lista após salvar
 - mapeia fot_id corretamente e bloqueia sobrescrita de preço na inicialização da edição
This commit is contained in:
NANDO9322 2026-02-10 18:18:48 -03:00
parent 8730a8f5a3
commit 003d51baff

View file

@ -111,6 +111,8 @@ const Finance: React.FC = () => {
pgtoOk: false, pgtoOk: false,
}); });
const isEditInitializing = useRef(false);
// Auto-fill state // Auto-fill state
const [fotLoading, setFotLoading] = useState(false); const [fotLoading, setFotLoading] = useState(false);
const [fotFound, setFotFound] = useState(false); const [fotFound, setFotFound] = useState(false);
@ -180,6 +182,7 @@ const Finance: React.FC = () => {
const mapped = (Array.isArray(data) ? data : []).map((item: any) => ({ const mapped = (Array.isArray(data) ? data : []).map((item: any) => ({
id: item.id, id: item.id,
fot: item.fot_numero || 0, fot: item.fot_numero || 0,
fot_id: item.fot_id, // Ensure fot_id is mapped!
data: item.data_cobranca ? new Date(item.data_cobranca).toLocaleDateString("pt-BR", {timeZone: "UTC"}) : "", data: item.data_cobranca ? new Date(item.data_cobranca).toLocaleDateString("pt-BR", {timeZone: "UTC"}) : "",
dataRaw: item.data_cobranca ? item.data_cobranca.split("T")[0] : "", dataRaw: item.data_cobranca ? item.data_cobranca.split("T")[0] : "",
curso: item.curso_nome || "", curso: item.curso_nome || "",
@ -430,10 +433,18 @@ const Finance: React.FC = () => {
const fetchPrice = async () => { const fetchPrice = async () => {
if (!formData.tipoEvento || !formData.tipoServico) return; if (!formData.tipoEvento || !formData.tipoServico) return;
// If editing existing transaction, maybe don't overwrite unless user changes something? // Skip auto-pricing if we are initializing the edit form
// But for "Nova Transação", strictly overwrite. if (isEditInitializing.current) {
// Let's assume overwrite if price is 0 or user changed inputs. isEditInitializing.current = false;
// Simplified: always fetch if inputs present. return;
}
// Don't overwrite if we are editing and the types haven't changed from the original
if (selectedTransaction &&
formData.tipoEvento === selectedTransaction.tipoEvento &&
formData.tipoServico === selectedTransaction.tipoServico) {
return;
}
const token = localStorage.getItem("token"); const token = localStorage.getItem("token");
if (!token) return; if (!token) return;
@ -456,7 +467,7 @@ const Finance: React.FC = () => {
} }
}; };
fetchPrice(); fetchPrice();
}, [formData.tipoEvento, formData.tipoServico]); }, [formData.tipoEvento, formData.tipoServico, selectedTransaction]);
const handleProSearch = async (query: string) => { const handleProSearch = async (query: string) => {
setProQuery(query); setProQuery(query);
@ -521,6 +532,7 @@ const Finance: React.FC = () => {
}; };
const handleEdit = async (t: FinancialTransaction) => { const handleEdit = async (t: FinancialTransaction) => {
isEditInitializing.current = true;
setSelectedTransaction(t); setSelectedTransaction(t);
setFormData({ setFormData({
id: t.id, id: t.id,
@ -713,16 +725,19 @@ const Finance: React.FC = () => {
setTimeout(() => setSuccessMessage(""), 3000); setTimeout(() => setSuccessMessage(""), 3000);
// Reload list background // Reload list background
loadTransactions(); await loadTransactions();
} catch (err) { } catch (err) {
alert("Erro ao salvar: " + err); alert("Erro ao salvar: " + err);
} }
}; };
// Calculations
// Calculations // Calculations
useEffect(() => { useEffect(() => {
setFormData((prev) => ({ ...prev, totalPagar: total })); const vFree = Number(formData.valorFree) || 0;
const vExtra = Number(formData.valorExtra) || 0;
setFormData((prev) => ({ ...prev, totalPagar: vFree + vExtra }));
}, [formData.valorFree, formData.valorExtra]); }, [formData.valorFree, formData.valorExtra]);
const handleExportCSV = () => { const handleExportCSV = () => {