fix: saldo caixa via dados JSON + coluna cancelamento + diferenca correta
This commit is contained in:
+25
-10
@@ -2175,14 +2175,26 @@ function buildConsultaModal(recentList) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Calcula saldo de caixa real (mesma fórmula do relatório)
|
// Calcula saldo de caixa real (mesma fórmula do relatório)
|
||||||
const calcSaldoCaixa = item => (parseFloat(item.saldo_troco)||0)
|
// Lê tanto do top-level quanto do JSON dados (old records compatibility)
|
||||||
+ (parseFloat(item.saldo_credito)||0)
|
const calcSaldoCaixa = item => {
|
||||||
+ (parseFloat(item.saldo_debito)||0)
|
const dados = item.dados || {};
|
||||||
+ (parseFloat(item.saldo_alimentacao)||0)
|
return (parseFloat(item.saldo_troco)||0)
|
||||||
+ (parseFloat(item.saldo_vales)||0)
|
+ (parseFloat(item.saldo_credito)||0)
|
||||||
+ (parseFloat(item.saldo_areceber)||0)
|
+ (parseFloat(item.saldo_debito)||0)
|
||||||
+ (parseFloat(item.total_pixcnpj)||0)
|
+ (parseFloat(item.saldo_alimentacao)||0)
|
||||||
+ (parseFloat(item.total_cartao_pix)||0);
|
+ (parseFloat(item.saldo_vales)||0)
|
||||||
|
+ (parseFloat(item.saldo_areceber)||0)
|
||||||
|
+ (parseFloat(item.total_pixcnpj)||0)
|
||||||
|
+ (parseFloat(item.total_cartao_pix)||0)
|
||||||
|
+ (parseFloat(dados.total_pixcnpj)||0)
|
||||||
|
+ (parseFloat(dados.total_cartao_pix)||0);
|
||||||
|
};
|
||||||
|
const calcCancelamentos = item => {
|
||||||
|
const dados = item.dados || {};
|
||||||
|
return (parseFloat(item.total_cancelamentos)||0)
|
||||||
|
+ (parseFloat(dados.total_cancelamentos)||0)
|
||||||
|
+ (parseFloat(dados.cancelamentos)||0); // old format: array of cancelamentos
|
||||||
|
};
|
||||||
|
|
||||||
// Ordena por data desc e pega os últimos 5 dias distintos
|
// Ordena por data desc e pega os últimos 5 dias distintos
|
||||||
const sortedDesc = [...recentList].sort((a,b) => b.data.localeCompare(a.data));
|
const sortedDesc = [...recentList].sort((a,b) => b.data.localeCompare(a.data));
|
||||||
@@ -2193,11 +2205,12 @@ function buildConsultaModal(recentList) {
|
|||||||
|
|
||||||
function renderRows(list) {
|
function renderRows(list) {
|
||||||
if (!list || list.length === 0) {
|
if (!list || list.length === 0) {
|
||||||
return `<tr><td colspan="7" style="padding:20px;text-align:center;color:#888;font-size:13px">Nenhum registro encontrado.</td></tr>`;
|
return `<tr><td colspan="8" style="padding:20px;text-align:center;color:#888;font-size:13px">Nenhum registro encontrado.</td></tr>`;
|
||||||
}
|
}
|
||||||
return list.map((item, i) => {
|
return list.map((item, i) => {
|
||||||
const saldoCaixa = calcSaldoCaixa(item);
|
const saldoCaixa = calcSaldoCaixa(item);
|
||||||
const diff = saldoCaixa - (parseFloat(item.saldo_esperado)||0);
|
const canc = calcCancelamentos(item);
|
||||||
|
const diff = saldoCaixa - (parseFloat(item.saldo_esperado)||0) - canc;
|
||||||
const diffClass = diff === 0 ? '#2e7d32' : diff > 0 ? '#e65100' : '#c0272d';
|
const diffClass = diff === 0 ? '#2e7d32' : diff > 0 ? '#e65100' : '#c0272d';
|
||||||
const diffLabel = diff === 0 ? '✓ OK' : diff > 0 ? `+R$ ${diff.toFixed(2).replace('.',',')}` : `-R$ ${Math.abs(diff).toFixed(2).replace('.',',')}`;
|
const diffLabel = diff === 0 ? '✓ OK' : diff > 0 ? `+R$ ${diff.toFixed(2).replace('.',',')}` : `-R$ ${Math.abs(diff).toFixed(2).replace('.',',')}`;
|
||||||
return `<tr data-idx="${recentList.indexOf(item)}" style="background:${i%2===0?'#fff':'#fafafa'}" onmouseover="this.style.background='#fff3e0'" onmouseout="this.style.background='${i%2===0?'#fff':'#fafafa'}'">
|
return `<tr data-idx="${recentList.indexOf(item)}" style="background:${i%2===0?'#fff':'#fafafa'}" onmouseover="this.style.background='#fff3e0'" onmouseout="this.style.background='${i%2===0?'#fff':'#fafafa'}'">
|
||||||
@@ -2206,6 +2219,7 @@ function buildConsultaModal(recentList) {
|
|||||||
<td style="padding:6px 8px;border-bottom:1px solid #eee;font-size:12px;cursor:pointer" onclick="openConsultaRegistro(${recentList.indexOf(item)})">${item.turno||'?'}</td>
|
<td style="padding:6px 8px;border-bottom:1px solid #eee;font-size:12px;cursor:pointer" onclick="openConsultaRegistro(${recentList.indexOf(item)})">${item.turno||'?'}</td>
|
||||||
<td style="padding:6px 8px;border-bottom:1px solid #eee;font-size:12px;text-align:right;cursor:pointer" onclick="openConsultaRegistro(${recentList.indexOf(item)})">${fmtMoney(saldoCaixa)}</td>
|
<td style="padding:6px 8px;border-bottom:1px solid #eee;font-size:12px;text-align:right;cursor:pointer" onclick="openConsultaRegistro(${recentList.indexOf(item)})">${fmtMoney(saldoCaixa)}</td>
|
||||||
<td style="padding:6px 8px;border-bottom:1px solid #eee;font-size:12px;text-align:right;cursor:pointer" onclick="openConsultaRegistro(${recentList.indexOf(item)})">${fmtMoney(item.saldo_esperado)}</td>
|
<td style="padding:6px 8px;border-bottom:1px solid #eee;font-size:12px;text-align:right;cursor:pointer" onclick="openConsultaRegistro(${recentList.indexOf(item)})">${fmtMoney(item.saldo_esperado)}</td>
|
||||||
|
<td style="padding:6px 8px;border-bottom:1px solid #eee;font-size:12px;text-align:right;cursor:pointer" onclick="openConsultaRegistro(${recentList.indexOf(item)})">${fmtMoney(canc)}</td>
|
||||||
<td style="padding:6px 8px;border-bottom:1px solid #eee;font-size:12px;text-align:center;cursor:pointer;color:${diffClass};font-weight:bold" onclick="openConsultaRegistro(${recentList.indexOf(item)})">${diffLabel}</td>
|
<td style="padding:6px 8px;border-bottom:1px solid #eee;font-size:12px;text-align:center;cursor:pointer;color:${diffClass};font-weight:bold" onclick="openConsultaRegistro(${recentList.indexOf(item)})">${diffLabel}</td>
|
||||||
<td style="padding:4px 6px;border-bottom:1px solid #eee;text-align:center">
|
<td style="padding:4px 6px;border-bottom:1px solid #eee;text-align:center">
|
||||||
<button onclick="event.stopPropagation();window.abrirEditaFechamentoIndex(${recentList.indexOf(item)})" style="background:#e65100;color:#fff;border:none;border-radius:4px;padding:4px 10px;cursor:pointer;font-size:11px;white-space:nowrap">✏️ Editar</button>
|
<button onclick="event.stopPropagation();window.abrirEditaFechamentoIndex(${recentList.indexOf(item)})" style="background:#e65100;color:#fff;border:none;border-radius:4px;padding:4px 10px;cursor:pointer;font-size:11px;white-space:nowrap">✏️ Editar</button>
|
||||||
@@ -2234,6 +2248,7 @@ function buildConsultaModal(recentList) {
|
|||||||
<th style="padding:6px 8px;text-align:left;font-size:11px;color:#888">TURNO</th>
|
<th style="padding:6px 8px;text-align:left;font-size:11px;color:#888">TURNO</th>
|
||||||
<th style="padding:6px 8px;text-align:right;font-size:11px;color:#888">SALDO CAIXA</th>
|
<th style="padding:6px 8px;text-align:right;font-size:11px;color:#888">SALDO CAIXA</th>
|
||||||
<th style="padding:6px 8px;text-align:right;font-size:11px;color:#888">ESPERADO</th>
|
<th style="padding:6px 8px;text-align:right;font-size:11px;color:#888">ESPERADO</th>
|
||||||
|
<th style="padding:6px 8px;text-align:right;font-size:11px;color:#888">CANCEL.</th>
|
||||||
<th style="padding:6px 8px;text-align:center;font-size:11px;color:#888">DIFERENÇA</th>
|
<th style="padding:6px 8px;text-align:center;font-size:11px;color:#888">DIFERENÇA</th>
|
||||||
<th style="padding:4px 6px;text-align:center;font-size:11px;color:#888">AÇÃO</th>
|
<th style="padding:4px 6px;text-align:center;font-size:11px;color:#888">AÇÃO</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
Reference in New Issue
Block a user