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

@ -110,6 +110,8 @@ const Finance: React.FC = () => {
dataPgto: "",
pgtoOk: false,
});
const isEditInitializing = useRef(false);
// Auto-fill state
const [fotLoading, setFotLoading] = useState(false);
@ -180,6 +182,7 @@ const Finance: React.FC = () => {
const mapped = (Array.isArray(data) ? data : []).map((item: any) => ({
id: item.id,
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"}) : "",
dataRaw: item.data_cobranca ? item.data_cobranca.split("T")[0] : "",
curso: item.curso_nome || "",
@ -430,11 +433,19 @@ const Finance: React.FC = () => {
const fetchPrice = async () => {
if (!formData.tipoEvento || !formData.tipoServico) return;
// If editing existing transaction, maybe don't overwrite unless user changes something?
// But for "Nova Transação", strictly overwrite.
// Let's assume overwrite if price is 0 or user changed inputs.
// Simplified: always fetch if inputs present.
// Skip auto-pricing if we are initializing the edit form
if (isEditInitializing.current) {
isEditInitializing.current = false;
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");
if (!token) return;
@ -456,7 +467,7 @@ const Finance: React.FC = () => {
}
};
fetchPrice();
}, [formData.tipoEvento, formData.tipoServico]);
}, [formData.tipoEvento, formData.tipoServico, selectedTransaction]);
const handleProSearch = async (query: string) => {
setProQuery(query);
@ -521,6 +532,7 @@ const Finance: React.FC = () => {
};
const handleEdit = async (t: FinancialTransaction) => {
isEditInitializing.current = true;
setSelectedTransaction(t);
setFormData({
id: t.id,
@ -713,16 +725,19 @@ const Finance: React.FC = () => {
setTimeout(() => setSuccessMessage(""), 3000);
// Reload list background
loadTransactions();
await loadTransactions();
} catch (err) {
alert("Erro ao salvar: " + err);
}
};
// Calculations
// Calculations
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]);
const handleExportCSV = () => {