From 313c7404704d817c69aefa002aefbd9c0c7fcb06 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 1 Jul 2026 16:21:29 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20buildReciboData=20l=C3=AA=20do=20estado?= =?UTF-8?q?=20quando=20DOM=20vazio=20(registro=20anterior)=20+=20totaisInf?= =?UTF-8?q?o=20calcula=20dos=20dados=20reais=20no=20modal=20de=20edi=C3=A7?= =?UTF-8?q?=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.html | 70 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 49 insertions(+), 21 deletions(-) diff --git a/src/index.html b/src/index.html index 4827ba6..067b004 100644 --- a/src/index.html +++ b/src/index.html @@ -1871,12 +1871,28 @@ function buildReciboData() { const valesTotal = estado.vales.reduce((s,r) => s+(parseNum(r.valor||0)||0), 0); const receberTotal = estado.receber.reduce((s,r) => s+(parseNum(r.valor||0)||0), 0); const cancelTotal = estado.cancelamentos.reduce((s,r) => s+(parseNum(r.valor||0)||0), 0); - const fechamentoCounted = parseNum(val('f-fech-dinheiro')) + parseNum(val('f-fech-cartoes')) + parseNum(val('f-fech-receber')); - const saldoEsp = parseNum(val('f-saldo-esperado')); + + // Lê do DOM — mas se estiver vazio usa estado (registro anterior) + const trocoDom = parseNum(val('sys-troco')); + const saldoTroco = trocoDom || estado.saldo_troco || 0; + const saldoCred = parseNum(val('sys-credito')) || cartCred; + const saldoDeb = parseNum(val('sys-debito')) || cartDeb; + const saldoAli = parseNum(val('sys-alimentacao')) || cartAli; + const saldoPixCartao = parseNum(val('sys-pix')) || cartPix; + const saldoPixCnpj = parseNum(val('sys-pixcnpj')) || pixCnpjTotal; + const saldoVales = parseNum(val('sys-vales')) || valesTotal; + const saldoReceber = parseNum(val('sys-receber')) || receberTotal; + + const fechamentoDinheiro = parseNum(val('f-fech-dinheiro')) || estado.fechamento_contado?.dinheiro || 0; + const fechamentoCartoes = parseNum(val('f-fech-cartoes')) || estado.fechamento_contado?.cartoes || 0; + const fechamentoReceber = parseNum(val('f-fech-receber')) || estado.fechamento_contado?.receber || 0; + const fechamentoCounted = fechamentoDinheiro + fechamentoCartoes + fechamentoReceber; + const saldoEsperado = parseNum(val('f-saldo-esperado')) || estado.saldo_esperado || 0; + // Saldo de Caixa (Sistema) = troco + crédito + débito + alimentação + voucher pix + pixcnpj + vales + receber - const sysTotal = parseNum(val('sys-troco')) + cartCred + cartDeb + cartAli + cartPix + pixCnpjTotal + valesTotal + receberTotal; + const sysTotal = saldoTroco + cartCred + cartDeb + cartAli + cartPix + pixCnpjTotal + valesTotal + receberTotal; // Diferença = saldo de caixa (sistema) - saldo_esperado - cancelamentos - const diferenca = sysTotal - saldoEsp - cancelTotal; + const diferenca = sysTotal - saldoEsperado - cancelTotal; return { uuid: estado.uuid, id_local: estado.id_local, @@ -1885,14 +1901,14 @@ function buildReciboData() { data: estado.data, operador: estado.operador, turno: estado.turno, - saldo_troco: parseNum(val('sys-troco')), - saldo_esperado: saldoEsp, + saldo_troco: saldoTroco, + saldo_esperado: saldoEsperado, fechamento: fechamentoCounted, diferenca: diferenca, sys_total: sysTotal, - fechamento_dinheiro: parseNum(val('f-fech-dinheiro')), - fechamento_cartoes: parseNum(val('f-fech-cartoes')), - fechamento_receber: parseNum(val('f-fech-receber')), + fechamento_dinheiro: fechamentoDinheiro, + fechamento_cartoes: fechamentoCartoes, + fechamento_receber: fechamentoReceber, // Flat totals for ReciboData struct (Rust) — must be numbers credito: cartCred, debito: cartDeb, @@ -2762,20 +2778,32 @@ function openEditModal(full) { const receber_rows = (dados.receber || []).map(r => [r.nome||'', r.valor||0]); const receberHTML = editTableHTML('receber', ['Nome', 'Valor (R$)'], receber_rows.length ? receber_rows : [['','']], [1]); - // --- Totais (só leitura formatado) --- - const totaisInfo = ` + // --- Totais (só leitura formatado) — calcula dos dados reais --- + const totaisInfo = (() => { + const calcCred = (dados.cartoes?.credito || full.cartoes_credito || []).reduce((s,r) => s+(parseFloat(typeof r==='object'?r.valor:r)||0), 0); + const calcDeb = (dados.cartoes?.debito || full.cartoes_debito || []).reduce((s,r) => s+(parseFloat(typeof r==='object'?r.valor:r)||0), 0); + const calcAli = (dados.cartoes?.alimentacao || full.cartoes_alimentacao || []).reduce((s,r) => s+(parseFloat(typeof r==='object'?r.valor:r)||0), 0); + const calcPix = (dados.cartoes?.pix || full.cartoes_pix || []).reduce((s,r) => s+(parseFloat(typeof r==='object'?r.valor:r)||0), 0); + const calcSang = (dados.sangrias || []).reduce((s,r) => s+(parseFloat(r.retirada||r.valor||0)||0), 0); + const calcDesp = (dados.despesas || []).reduce((s,r) => s+(parseFloat(r.valor||0)||0), 0); + const calcVales = (dados.vales || []).reduce((s,r) => s+(parseFloat(r.valor||0)||0), 0); + const calcPixCnpj = (dados.pixcnpj || []).reduce((s,r) => s+(parseFloat(r.valor||0)||0), 0); + const calcRecv = (dados.receber || []).reduce((s,r) => s+(parseFloat(r.valor||0)||0), 0); + const calcCanc = (dados.cancelamentos || []).reduce((s,r) => s+(parseFloat(r.valor||0)||0), 0); + return `
-
Total Crédito: ${fmtMR(full.total_cartao_credito||0)}
-
Total Débito: ${fmtMR(full.total_cartao_debito||0)}
-
Total Alimentação: ${fmtMR(full.total_cartao_alimentacao||0)}
-
Total PIX: ${fmtMR(full.total_cartao_pix||0)}
-
Total Sangrias: ${fmtMR(full.total_sangrias||0)}
-
Total Despesas: ${fmtMR(full.total_despesas||0)}
-
Total Vales: ${fmtMR(full.total_vales||0)}
-
Total PIX CNPJ: ${fmtMR(full.total_pixcnpj||0)}
-
Total Receber: ${fmtMR(full.total_areceber||0)}
-
Total Cancel: ${fmtMR(full.total_cancelamentos||0)}
+
Total Crédito: ${fmtMR(calcCred)}
+
Total Débito: ${fmtMR(calcDeb)}
+
Total Alimentação: ${fmtMR(calcAli)}
+
Total PIX: ${fmtMR(calcPix)}
+
Total Sangrias: ${fmtMR(calcSang)}
+
Total Despesas: ${fmtMR(calcDesp)}
+
Total Vales: ${fmtMR(calcVales)}
+
Total PIX CNPJ: ${fmtMR(calcPixCnpj)}
+
Total Receber: ${fmtMR(calcRecv)}
+
Total Cancel: ${fmtMR(calcCanc)}
`; + })(); const overlay = document.createElement('div'); overlay.id = 'modal-edit';