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:
parent
8730a8f5a3
commit
003d51baff
1 changed files with 22 additions and 7 deletions
|
|
@ -111,6 +111,8 @@ const Finance: React.FC = () => {
|
|||
pgtoOk: false,
|
||||
});
|
||||
|
||||
const isEditInitializing = useRef(false);
|
||||
|
||||
// Auto-fill state
|
||||
const [fotLoading, setFotLoading] = useState(false);
|
||||
const [fotFound, setFotFound] = 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,10 +433,18 @@ 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 = () => {
|
||||
|
|
|
|||
Loading…
Reference in a new issue