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
|
|
@ -110,6 +110,8 @@ const Finance: React.FC = () => {
|
||||||
dataPgto: "",
|
dataPgto: "",
|
||||||
pgtoOk: false,
|
pgtoOk: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const isEditInitializing = useRef(false);
|
||||||
|
|
||||||
// Auto-fill state
|
// Auto-fill state
|
||||||
const [fotLoading, setFotLoading] = useState(false);
|
const [fotLoading, setFotLoading] = 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,11 +433,19 @@ 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 = () => {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue