From b47d7766ad2438d4bb638b46d89df40ce8b95405 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 26 Jun 2026 03:24:27 +0000 Subject: [PATCH] =?UTF-8?q?v1.3.10:=20relat=C3=B3rio=20completo=20id=C3=AA?= =?UTF-8?q?ntico=20ao=20PDF=20=E2=80=94=20todas=20se=C3=A7=C3=B5es,=20tabe?= =?UTF-8?q?la=20cart=C3=B5es=204=20colunas,=20saldo=20sistema,=20fechament?= =?UTF-8?q?o=20contado,=20diff=20sys=5Ftotal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.html | 473 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 350 insertions(+), 123 deletions(-) diff --git a/src/index.html b/src/index.html index c4c2dce..82463c5 100644 --- a/src/index.html +++ b/src/index.html @@ -1230,128 +1230,90 @@ async function tauriEnviar() { } function buildConfirmHTML(data) { + // Relatório completo — mesmo layout do PDF const fmt = v => 'R$ ' + (v || 0).toFixed(2).replace('.', ','); - const sangrias = (data.sangrias_arr || data.sangrias || []).reduce((s,r) => s+(parseNum(r.retirada||r.valor||0)||0), 0); - const despesas = (data.despesas_arr || data.despesas || []).reduce((s,r) => s+(parseNum(r.valor||0)||0), 0); - const vales = (data.vales_arr || data.vales || []).reduce((s,r) => s+(parseNum(r.valor||0)||0), 0); - const receber = (data.receber_arr || data.receber || []).reduce((s,r) => s+(parseNum(r.valor||0)||0), 0); - const pixcnpj = (data.pixcnpj_arr || data.pixcnpj || []).reduce((s,r) => s+(parseNum(r.valor||0)||0), 0); - const cancelamentos = (data.cancelamentos_arr || data.cancelamentos || []).reduce((s,c) => s+(parseNum(c.valor||0)||0), 0); - const cartCred = data.credito || 0; - const cartDeb = data.debito || 0; - const cartAli = data.alimentacao || 0; - const cartPix = data.voucher || data.pix || 0; - const fechamento = data.fechamento || 0; - const saldoEsp = data.saldo_esperado || 0; - const diferenca = fechamento - saldoEsp; - const diffClass = diferenca === 0 ? '#2e7d32' : (diferenca > 0 ? '#e65100' : '#c0272d'); - - return ` - - -Relatório de Fechamento - - -
-

${data.loja}

-

Fechamento de Caixa

-
-
📅 Data: ${data.data}   👤 Operador: ${data.operador}   ⏰ Turno: ${data.turno}
-
-
💸 Sangrias: ${fmt(sangrias)}
-
📝 Despesas: ${fmt(despesas)}
-
💰 Vales: ${fmt(vales)}
-
👥 À Receber: ${fmt(receber)}
-
🔵 PIX CNPJ: ${fmt(pixcnpj)}
-
💳 Crédito: ${fmt(cartCred)}
-
💳 Débito: ${fmt(cartDeb)}
-
💳 Alimentação: ${fmt(cartAli)}
-
❌ Cancelamentos: ${fmt(cancelamentos)}
-
📋 Fechamento: ${fmt(fechamento)}
-
-
🎯 Saldo Esperado: ${fmt(saldoEsp)}
-
📐 Diferença: ${fmt(diferenca)}
-
ID: ${data.loja}_${data.data}_${data.operador}
- -`; -} - -// ─── Print Preview Window ────────────────────────────────────────────────── -function buildPrintHTML(data) { - const fmt = v => 'R$ ' + (v || 0).toFixed(2).replace('.', ','); - // Usa a diferenca ja calculada pelo tauriRecibo (sys_total - saldo_esperado), - // igual ao modal de confirmacao — nao recalcula de fechamento. + const fmtNeg = v => (v < 0 ? '-' : '') + 'R$ ' + Math.abs(v || 0).toFixed(2).replace('.', ','); const diferenca = data.diferenca !== undefined ? data.diferenca : ((data.sys_total || 0) - (data.saldo_esperado || 0)); - const diffStr = diferenca >= 0 ? `+${fmt(diferenca)}` : fmt(diferenca); - const diffColor = diferenca === 0 ? '#2e7d32' : (diferenca > 0 ? '#e65100' : '#c0272d'); + const diffStr = diferenca >= 0 ? `+${fmt(diferenca)}` : fmtNeg(diferenca); + const diffOk = diferenca === 0; - let rows = ''; - // Cancelamentos (sum the array first — single cancelamentos is a float total, array is from confirm-print) - const cancelTotal = Array.isArray(data.cancelamentos) - ? data.cancelamentos.reduce((s, c) => s + (parseNum(c.valor || 0) || 0), 0) - : (data.cancelamentos || 0); - // PIX total (flat number from tauriRecibo; pixcnpj is also flat total) - const pixTotal = data.pix || data.voucher || 0; - const pixCnpjTotal = typeof data.pixcnpj === 'number' ? data.pixcnpj : 0; - // Sangrias - if (data.sangrias && data.sangrias.length > 0) { - data.sangrias.forEach(s => { if (s.hora || s.retirada) rows += `${s.hora||''}${fmt(s.retirada)}${s.gerente||''}`; }); - } - // Despesas - if (data.despesas && data.despesas.length > 0) { - data.despesas.forEach(d => { if (d.desc || d.valor) rows += `${d.desc||''}${fmt(d.valor)}${d.obs||''}`; }); - } - // Vales - if (data.vales && data.vales.length > 0) { - data.vales.forEach(v => { if (v.nome || v.valor) rows += `${v.nome||''}${fmt(v.valor)}${v.obs||''}`; }); - } - // Receber - if (data.receber && data.receber.length > 0) { - data.receber.forEach(r => { if (r.nome || r.valor) rows += `${r.nome||''}${fmt(r.valor)}`; }); - } - // PIX CNPJ (flat total, not array) - if (pixCnpjTotal > 0) { - rows += `PIX CNPJ${fmt(pixCnpjTotal)}`; - } - // Cancelamentos - if (cancelTotal > 0) { - rows += `Cancelamentos${fmt(cancelTotal)}`; + const sangrias_arr = Array.isArray(data.sangrias_arr) ? data.sangrias_arr : []; + const despesas_arr = Array.isArray(data.despesas_arr) ? data.despesas_arr : []; + const pixcnpj_arr = Array.isArray(data.pixcnpj_arr) ? data.pixcnpj_arr : []; + const vales_arr = Array.isArray(data.vales_arr) ? data.vales_arr : []; + const receber_arr = Array.isArray(data.receber_arr) ? data.receber_arr : []; + const cancelamentos_arr = Array.isArray(data.cancelamentos_arr) ? data.cancelamentos_arr : []; + + 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 totalSangrias = sangrias_arr.reduce((s,r) => s+(r.retirada||0)+(r.valor||0), 0); + const totalDespesas = despesas_arr.reduce((s,r) => s+(r.valor||0), 0); + const totalPixCnpj = pixcnpj_arr.reduce((s,r) => s+(r.valor||0), 0); + const totalVales = vales_arr.reduce((s,r) => s+(r.valor||0), 0); + const totalReceber = receber_arr.reduce((s,r) => s+(r.valor||0), 0); + const totalCancel = cancelamentos_arr.reduce((s,r) => s+(r.valor||0), 0); + + const cartCred = cartCred_arr.reduce((s,v) => s+(v||0), 0); + const cartDeb = cartDeb_arr.reduce((s,v) => s+(v||0), 0); + const cartAli = cartAli_arr.reduce((s,v) => s+(v||0), 0); + const cartPix = cartPix_arr.reduce((s,v) => s+(v||0), 0); + const totalCartoes = cartCred + cartDeb + cartAli + cartPix; + + const fdin = data.fechamento_dinheiro || 0; + const fcarts = data.fechamento_cartoes || 0; + const frec = data.fechamento_receber || 0; + const ftotal = data.fechamento || (fdin + fcarts + frec); + const sysTotal = data.sys_total || 0; + const saldoEsperado = data.saldo_esperado || 0; + + // Cartoes table + const maxRows = Math.max(cartCred_arr.length, cartDeb_arr.length, cartAli_arr.length, cartPix_arr.length); + let cartTableRows = ''; + for (let i = 0; i < maxRows; i++) { + const cr = cartCred_arr[i] || 0; + const db = cartDeb_arr[i] || 0; + const al = cartAli_arr[i] || 0; + const px = cartPix_arr[i] || 0; + cartTableRows += ` + ${cr > 0 ? fmt(cr) : ''} + ${db > 0 ? fmt(db) : ''} + ${al > 0 ? fmt(al) : ''} + ${px > 0 ? fmt(px) : ''} + `; } + cartTableRows += ` + ${cartCred > 0 ? fmt(cartCred) : '-'} + ${cartDeb > 0 ? fmt(cartDeb) : '-'} + ${cartAli > 0 ? fmt(cartAli) : '-'} + ${cartPix > 0 ? fmt(cartPix) : '-'} + `; return ` -Relatório de Fechamento +Fechamento de Caixa + +
+

${data.loja}

+

Fechamento de Caixa

+
+
+
Data:${data.data}
+
Operador:${data.operador}
+
Turno:${data.turno}
+ +${sangriaLines.length > 0 ? `
SANGRIAS
+${sangriaLines.map(l => `
${l.label}${fmt(l.valor)}
`).join('')} +
TOTAL SANGRIAS:${fmt(totalSangrias)}
` : ''} + +${despLines.length > 0 ? `
DESPESAS
+${despLines.map(l => `
${l.label}${fmt(l.valor)}
`).join('')} +
TOTAL DESPESAS:${fmt(totalDespesas)}
` : ''} + +${pixLines.length > 0 ? `
PIX CNPJ
+${pixLines.map(l => `
${l.label}${fmt(l.valor)}
`).join('')} +
TOTAL PIX CNPJ:${fmt(totalPixCnpj)}
` : ''} + +${valesLines.length > 0 ? `
VALES
+${valesLines.map(l => `
${l.label}${fmt(l.valor)}
`).join('')} +
TOTAL VALES:${fmt(totalVales)}
` : ''} + +${recLines.length > 0 ? `
A RECEBER
+${recLines.map(l => `
${l.label}${fmt(l.valor)}
`).join('')} +
TOTAL A RECEBER:${fmt(totalReceber)}
` : ''} + +${cancLines.length > 0 ? `
CANCELAMENTOS
+${cancLines.map(l => `
${l.label}${fmt(l.valor)}
`).join('')} +
TOTAL:${fmt(totalCancel)}
` : ''} + +
DETALHAMENTO DE CARTÕES
+ + + + + + + + ${cartTableRows} + +
CRÉDITODÉBITOALIMENT.PIX
+
Soma Cartões:${fmt(totalCartoes)}
+ +
SALDO DE CAIXA (SISTEMA) — RESUMO
+
Troco${fmt(data.saldo_troco||0)}
+
Crédito${fmt(cartCred)}
+
Débito${fmt(cartDeb)}
+
Alimentação${fmt(cartAli)}
+
Vales${fmt(totalVales)}
+
À Receber${fmt(totalReceber)}
+
PIX Cartão${fmt(cartPix)}
+
PIX CNPJ${fmt(totalPixCnpj)}
+
TOTAL SISTEMA${fmt(sysTotal)}
+
Saldo Esperado${fmt(saldoEsperado)}
+
DIFERENÇA${diffStr}${diffOk ? ' ✓ OK' : ''}
+ +
FECHAMENTO (CONTADO)
+
Dinheiro:${fmt(fdin)}
+
Cartões:${fmt(fcarts)}
+
À Receber:${fmt(frec)}
+
TOTAL:${fmt(ftotal)}
+ +${data.observacoes ? `
${data.observacoes}
` : ''} + + +`; + + return html; +} + function openPrintPreview(data, mode) { const html = mode === 'confirm' ? buildConfirmHTML(data) : buildPrintHTML(data); // Remove preview anterior se existir @@ -1608,12 +1825,18 @@ document.getElementById('confirm-print').addEventListener('click', async () => { const cartPix = estado.cartoes.pix.reduce((s,r) => s+(r.valor||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')); + const sysTotal = (parseNum(val('sys-troco')) || 0) + cartCred + cartDeb + cartAli + cartPix + vales + receber + pixcnpj; + const diferenca = sysTotal - saldoEsp; const data = { loja: estado.loja, data: estado.data, operador: estado.operador, turno: estado.turno, saldo_troco: parseNum(val('sys-troco')) || 0, saldo_esperado: saldoEsp, + fechamento_dinheiro: parseNum(val('f-fech-dinheiro')), + fechamento_cartoes: parseNum(val('f-fech-cartoes')), + fechamento_receber: parseNum(val('f-fech-receber')), fechamento: fechamentoCounted, - diferenca: fechamentoCounted - saldoEsp, + diferenca: diferenca, + sys_total: sysTotal, despesas_arr: estado.despesas.map(r => ({ desc: r.desc||'', obs: r.obs||'', valor: r.valor||0 })), sangrias_arr: estado.sangrias.map(r => ({ hora: r.hora||'', retirada: parseNum(r.retirada)||0, gerente: r.gerente||'' })), pixcnpj_arr: estado.pixcnpj.map(r => ({ nome: r.nome||'', valor: r.valor||0 })), @@ -1622,6 +1845,10 @@ document.getElementById('confirm-print').addEventListener('click', async () => { cancelamentos_arr: estado.cancelamentos.map(r => ({ numero: r.numero||'', valor: r.valor||0, motivo: r.motivo||'' })), credito: cartCred, debito: cartDeb, alimentacao: cartAli, voucher: cartPix, + cartoes_credito: estado.cartoes.credito.map(r => r.valor || 0), + cartoes_debito: estado.cartoes.debito.map(r => r.valor || 0), + cartoes_alimentacao: estado.cartoes.alimentacao.map(r => r.valor || 0), + cartoes_pix: estado.cartoes.pix.map(r => r.valor || 0), observacoes: estado.observacoes, }; openPrintPreview(data, 'confirm');