Fix: restore and force amount recovery bugfix to run even for JSON values, preventing the Portal UI from double-discounting corrupted historical payments
This commit is contained in:
parent
55c0a06a93
commit
cf1ad968ca
|
|
@ -0,0 +1,6 @@
|
|||
import { pool } from '../services/database.js';
|
||||
pool.query("SELECT data FROM app_state WHERE id = 'school_data'").then(r => {
|
||||
const p = r.rows[0].data.payments.find(p => p.asaasPaymentId === 'pay_iipssljwa9df3fsq');
|
||||
console.log('JSON AMOUNT:', p.amount, 'JSON DISCOUNT:', p.discount);
|
||||
process.exit(0);
|
||||
}).catch(e => console.error(e));
|
||||
|
|
@ -288,11 +288,17 @@ app.get('/api/portal/financeiro', authMiddleware, async (req, res) => {
|
|||
}
|
||||
}
|
||||
|
||||
// [ATENÇÃO]: Priorizando o JSON (jsonP) sobre o banco (db) para igualar o comportamento do Manager.
|
||||
// O Manager lê exclusivamente de school_data.payments, garantindo os valores corretos.
|
||||
// [Bugfix Crítico]: O webhook do Asaas sobrescreveu o JSON e o banco com o valor LÍQUIDO.
|
||||
// Ou seja, jsonP.amount e db.valor estão iguais (ex: 150), mas o correto é 170.
|
||||
// Se detectarmos essa corrupção (amountOriginal == db.valor) e houver desconto, restauramos o valor bruto.
|
||||
let amountOriginal = jsonP.amount !== undefined ? Number(jsonP.amount) : (Number(db.amount_original) || Number(db.valor) || 0);
|
||||
const discount = jsonP.discount !== undefined ? Number(jsonP.discount) : (Number(db.discount) || 0);
|
||||
|
||||
// Aplica a recuperação matemática INDEPENDENTE de onde veio (SQL ou JSON)
|
||||
if (amountOriginal > 0 && amountOriginal === Number(db.valor) && discount > 0) {
|
||||
amountOriginal += discount;
|
||||
}
|
||||
|
||||
finalPayments.push({
|
||||
id: jsonP.id || asaasId,
|
||||
studentId: req.user.studentId,
|
||||
|
|
|
|||
|
|
@ -278,11 +278,17 @@ app.get('/api/portal/financeiro', authMiddleware, async (req, res) => {
|
|||
}
|
||||
}
|
||||
|
||||
// [ATENÇÃO]: Priorizando o JSON (jsonP) sobre o banco (db) para igualar o comportamento do Manager.
|
||||
// O Manager lê exclusivamente de school_data.payments, garantindo os valores corretos.
|
||||
// [Bugfix Crítico]: O webhook do Asaas sobrescreveu o JSON e o banco com o valor LÍQUIDO.
|
||||
// Ou seja, jsonP.amount e db.valor estão iguais (ex: 150), mas o correto é 170.
|
||||
// Se detectarmos essa corrupção (amountOriginal == db.valor) e houver desconto, restauramos o valor bruto.
|
||||
let amountOriginal = jsonP.amount !== undefined ? Number(jsonP.amount) : (Number(db.amount_original) || Number(db.valor) || 0);
|
||||
const discount = jsonP.discount !== undefined ? Number(jsonP.discount) : (Number(db.discount) || 0);
|
||||
|
||||
// Aplica a recuperação matemática INDEPENDENTE de onde veio (SQL ou JSON)
|
||||
if (amountOriginal > 0 && amountOriginal === Number(db.valor) && discount > 0) {
|
||||
amountOriginal += discount;
|
||||
}
|
||||
|
||||
finalPayments.push({
|
||||
id: jsonP.id || asaasId,
|
||||
studentId: req.user.studentId,
|
||||
|
|
|
|||
Loading…
Reference in New Issue