fix: cancelamentos — sempre recalcular da array em buildReportHTML/buildPrintHTML/buildConfirmHTML
This commit is contained in:
+14
-11
@@ -1323,12 +1323,13 @@ function buildConfirmHTML(data) {
|
|||||||
// Relatório completo — mesmo layout do PDF
|
// Relatório completo — mesmo layout do PDF
|
||||||
const fmt = v => 'R$ ' + (v || 0).toFixed(2).replace('.', ',');
|
const fmt = v => 'R$ ' + (v || 0).toFixed(2).replace('.', ',');
|
||||||
const fmtNeg = v => (v < 0 ? '-' : '') + 'R$ ' + Math.abs(v || 0).toFixed(2).replace('.', ',');
|
const fmtNeg = v => (v < 0 ? '-' : '') + 'R$ ' + Math.abs(v || 0).toFixed(2).replace('.', ',');
|
||||||
|
// Cancelamentos: SEMPRE recalcular da array — nunca usar o campo escalar
|
||||||
|
const cancelamentos_arr = Array.isArray(data.cancelamentos_arr) ? data.cancelamentos_arr : [];
|
||||||
|
const cancelamentosCalc = cancelamentos_arr.reduce((s, r) => s + (r.valor || 0), 0);
|
||||||
// Diferença = Total Sistema - Saldo Esperado - Cancelamentos
|
// Diferença = Total Sistema - Saldo Esperado - Cancelamentos
|
||||||
// ⚠️ buildReciboData retorna snake_case (sys_total, total_cancelamentos)
|
// ⚠️ buildReciboData retorna snake_case (sys_total, total_cancelamentos)
|
||||||
// Sempre recalcula para garantir consistência — ignora data.diferenca
|
|
||||||
const sysTotalCalc = (data.sys_total || data.sysTotal || 0);
|
const sysTotalCalc = (data.sys_total || data.sysTotal || 0);
|
||||||
const saldoEsperadoCalc = (data.saldo_esperado || 0);
|
const saldoEsperadoCalc = (data.saldo_esperado || 0);
|
||||||
const cancelamentosCalc = (data.total_cancelamentos || data.cancelamentos || 0);
|
|
||||||
const diferenca = sysTotalCalc - saldoEsperadoCalc - cancelamentosCalc;
|
const diferenca = sysTotalCalc - saldoEsperadoCalc - cancelamentosCalc;
|
||||||
const diffStr = diferenca >= 0 ? `+${fmt(diferenca)}` : fmtNeg(diferenca);
|
const diffStr = diferenca >= 0 ? `+${fmt(diferenca)}` : fmtNeg(diferenca);
|
||||||
const diffOk = diferenca === 0;
|
const diffOk = diferenca === 0;
|
||||||
@@ -1493,16 +1494,21 @@ ${data.observacoes ? `<div class="obs">${data.observacoes}</div>` : ''}
|
|||||||
function buildPrintHTML(data) {
|
function buildPrintHTML(data) {
|
||||||
const fmt = v => 'R$ ' + (v || 0).toFixed(2).replace('.', ',');
|
const fmt = v => 'R$ ' + (v || 0).toFixed(2).replace('.', ',');
|
||||||
const fmtNeg = v => (v < 0 ? '-' : '') + 'R$ ' + Math.abs(v || 0).toFixed(2).replace('.', ',');
|
const fmtNeg = v => (v < 0 ? '-' : '') + 'R$ ' + Math.abs(v || 0).toFixed(2).replace('.', ',');
|
||||||
|
// Cancelamentos: SEMPRE recalcular da array — nunca usar o campo escalar
|
||||||
|
const cancelamentos_arr = Array.isArray(data.cancelamentos_arr) ? data.cancelamentos_arr : [];
|
||||||
|
const cancelamentosCalc = cancelamentos_arr.reduce((s, r) => s + (r.valor || 0), 0);
|
||||||
// Diferença = Total Sistema - Saldo Esperado - Cancelamentos
|
// Diferença = Total Sistema - Saldo Esperado - Cancelamentos
|
||||||
// ⚠️ buildReciboData retorna snake_case (sys_total, total_cancelamentos)
|
// ⚠️ buildReciboData retorna snake_case (sys_total, total_cancelamentos)
|
||||||
const sysTotalCalc = (data.sys_total || data.sysTotal || 0);
|
const sysTotalCalc = (data.sys_total || data.sysTotal || 0);
|
||||||
const saldoEsperadoCalc = (data.saldo_esperado || 0);
|
const saldoEsperadoCalc = (data.saldo_esperado || 0);
|
||||||
const cancelamentosCalc = (data.total_cancelamentos || data.cancelamentos || 0);
|
|
||||||
const diferenca = sysTotalCalc - saldoEsperadoCalc - cancelamentosCalc;
|
const diferenca = sysTotalCalc - saldoEsperadoCalc - cancelamentosCalc;
|
||||||
const diffStr = diferenca >= 0 ? `+${fmt(diferenca)}` : fmtNeg(diferenca);
|
const diffStr = diferenca >= 0 ? `+${fmt(diferenca)}` : fmtNeg(diferenca);
|
||||||
const diffColor = diferenca === 0 ? '#2e7d32' : (diferenca > 0 ? '#e65100' : '#c0272d');
|
const diffColor = diferenca === 0 ? '#2e7d32' : (diferenca > 0 ? '#e65100' : '#c0272d');
|
||||||
|
|
||||||
// Arrays — support both array-of-objects and flat totals
|
const cartCred_arr = Array.isArray(data.cartoes_credito) ? data.cartoes_credito : [];
|
||||||
|
const cartDeb_arr = Array.isArray(data.cartoes_debito) ? data.cartoes_debito : [];
|
||||||
|
const cartAli_arr = Array.isArray(data.cartoes_alimentacao) ? data.cartoes_alimentacao : [];
|
||||||
|
const cartPix_arr = Array.isArray(data.cartoes_pix) ? data.cartoes_pix : [];
|
||||||
const sangrias_arr = Array.isArray(data.sangrias_arr) ? data.sangrias_arr : [];
|
const sangrias_arr = Array.isArray(data.sangrias_arr) ? data.sangrias_arr : [];
|
||||||
const despesas_arr = Array.isArray(data.despesas_arr) ? data.despesas_arr : [];
|
const despesas_arr = Array.isArray(data.despesas_arr) ? data.despesas_arr : [];
|
||||||
const pixcnpj_arr = Array.isArray(data.pixcnpj_arr) ? data.pixcnpj_arr : [];
|
const pixcnpj_arr = Array.isArray(data.pixcnpj_arr) ? data.pixcnpj_arr : [];
|
||||||
@@ -1511,10 +1517,7 @@ function buildPrintHTML(data) {
|
|||||||
const cancelamentos_arr = Array.isArray(data.cancelamentos_arr) ? data.cancelamentos_arr : [];
|
const cancelamentos_arr = Array.isArray(data.cancelamentos_arr) ? data.cancelamentos_arr : [];
|
||||||
|
|
||||||
// Cartoes arrays from estado
|
// Cartoes arrays from estado
|
||||||
const cartCred_arr = Array.isArray(data.cartoes_credito) ? data.cartoes_credito : [];
|
// (cartCred_arr etc. already declared above)
|
||||||
const cartDeb_arr = Array.isArray(data.cartoes_debito) ? data.cartoes_debito : [];
|
|
||||||
const cartAli_arr = Array.isArray(data.cartoes_alimentacao) ? data.cartoes_alimentacao : [];
|
|
||||||
const cartPix_arr = Array.isArray(data.cartoes_pix) ? data.cartoes_pix : [];
|
|
||||||
|
|
||||||
// Flat totals
|
// Flat totals
|
||||||
const totalSangrias = sangrias_arr.reduce((s,r) => s+(r.retirada||0)+(r.valor||0), 0);
|
const totalSangrias = sangrias_arr.reduce((s,r) => s+(r.retirada||0)+(r.valor||0), 0);
|
||||||
@@ -1728,15 +1731,15 @@ function buildReportHTML(data) {
|
|||||||
const vales = data.vales || 0;
|
const vales = data.vales || 0;
|
||||||
const receber = data.areceber || 0;
|
const receber = data.areceber || 0;
|
||||||
const pixcnpj = data.pixcnpj || 0;
|
const pixcnpj = data.pixcnpj || 0;
|
||||||
const cancelamentos = data.cancelamentos || 0;
|
// Cancelamentos: SEMPRE recalcular da array — nunca usar o campo escalar (pode estar corrompido de bug anterior)
|
||||||
|
const cancelamentos_arr = Array.isArray(data.cancelamentos_arr) ? data.cancelamentos_arr : [];
|
||||||
|
const cancelamentosCalc = cancelamentos_arr.reduce((s, r) => s + (r.valor || 0), 0);
|
||||||
const fechamento = data.fechamento || 0;
|
const fechamento = data.fechamento || 0;
|
||||||
const sysTotal = data.sys_total || 0;
|
const sysTotal = data.sys_total || 0;
|
||||||
const saldoEsp = data.saldo_esperado || 0;
|
const saldoEsp = data.saldo_esperado || 0;
|
||||||
// Diferença = Total Sistema - Saldo Esperado - Cancelamentos
|
// Diferença = Total Sistema - Saldo Esperado - Cancelamentos
|
||||||
// Sempre recalcula para garantir consistência
|
|
||||||
const sysTotalCalc = (data.sys_total || data.sysTotal || 0);
|
const sysTotalCalc = (data.sys_total || data.sysTotal || 0);
|
||||||
const saldoEspCalc = (data.saldo_esperado || 0);
|
const saldoEspCalc = (data.saldo_esperado || 0);
|
||||||
const cancelamentosCalc = (data.total_cancelamentos || data.cancelamentos || 0);
|
|
||||||
const diferenca = sysTotalCalc - saldoEspCalc - cancelamentosCalc;
|
const diferenca = sysTotalCalc - saldoEspCalc - cancelamentosCalc;
|
||||||
const diffStr = diferenca >= 0 ? `+${fmt(diferenca)}` : fmtNeg(diferenca);
|
const diffStr = diferenca >= 0 ? `+${fmt(diferenca)}` : fmtNeg(diferenca);
|
||||||
const diffColor = diferenca === 0 ? '#2e7d32' : '#c0272d';
|
const diffColor = diferenca === 0 ? '#2e7d32' : '#c0272d';
|
||||||
|
|||||||
Reference in New Issue
Block a user