Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7e57d30863 | |||
| 7a93a30c22 | |||
| 230304e878 | |||
| d185f82bd5 | |||
| 2253d45d00 |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+119
-50
@@ -1022,7 +1022,9 @@ function init() {
|
|||||||
const today = new Date().toISOString().split('T')[0];
|
const today = new Date().toISOString().split('T')[0];
|
||||||
setVal('f-data', today);
|
setVal('f-data', today);
|
||||||
estado.data = today;
|
estado.data = today;
|
||||||
setVal('f-loja', estado.loja);
|
setVal('f-loja', estado.loja || 'União');
|
||||||
|
setVal('f-operador', estado.operador || '');
|
||||||
|
setVal('f-turno', estado.turno || '');
|
||||||
syncHeader();
|
syncHeader();
|
||||||
PRE_FILL_TABLES.forEach(ensureOneRow);
|
PRE_FILL_TABLES.forEach(ensureOneRow);
|
||||||
Object.keys(TABLES).forEach(renderTable);
|
Object.keys(TABLES).forEach(renderTable);
|
||||||
@@ -1045,7 +1047,6 @@ function buildEstadoForBackend() {
|
|||||||
saldo_troco: parseNum(val('sys-troco')), // troco do sistema
|
saldo_troco: parseNum(val('sys-troco')), // troco do sistema
|
||||||
saldo_esperado: parseNum(val('f-saldo-esperado')),
|
saldo_esperado: parseNum(val('f-saldo-esperado')),
|
||||||
fechamento: parseNum(val('f-fech-dinheiro')) + parseNum(val('f-fech-cartoes')) + parseNum(val('f-fech-receber')),
|
fechamento: parseNum(val('f-fech-dinheiro')) + parseNum(val('f-fech-cartoes')) + parseNum(val('f-fech-receber')),
|
||||||
diferenca: parseNum(val('f-saldo-esperado')) - (parseNum(val('f-fech-dinheiro')) + parseNum(val('f-fech-cartoes')) + parseNum(val('f-fech-receber'))),
|
|
||||||
despesas: estado.despesas.map(r => ({ desc: r.desc || '', obs: r.obs || '', valor: r.valor || 0 })),
|
despesas: estado.despesas.map(r => ({ desc: r.desc || '', obs: r.obs || '', valor: r.valor || 0 })),
|
||||||
sangrias: estado.sangrias.map(r => ({ hora: r.hora || '', retirada: r.retirada || 0, gerente: r.gerente || '' })),
|
sangrias: estado.sangrias.map(r => ({ hora: r.hora || '', retirada: r.retirada || 0, gerente: r.gerente || '' })),
|
||||||
pixcnpj: estado.pixcnpj.map(r => ({ nome: r.nome || '', valor: r.valor || 0 })),
|
pixcnpj: estado.pixcnpj.map(r => ({ nome: r.nome || '', valor: r.valor || 0 })),
|
||||||
@@ -1083,8 +1084,44 @@ function loadState() {
|
|||||||
const raw = localStorage.getItem(LS_KEY);
|
const raw = localStorage.getItem(LS_KEY);
|
||||||
if (!raw) return false;
|
if (!raw) return false;
|
||||||
const saved = JSON.parse(raw);
|
const saved = JSON.parse(raw);
|
||||||
// Merge carefully (cartoes may be in old format)
|
// Restore simple fields
|
||||||
Object.assign(estado, saved);
|
estado.uuid = saved.uuid || estado.uuid;
|
||||||
|
estado.id_local = saved.id_local !== undefined ? saved.id_local : null;
|
||||||
|
estado.loja = saved.loja || estado.loja;
|
||||||
|
estado.data = saved.data || estado.data;
|
||||||
|
estado.operador = saved.operador || estado.operador;
|
||||||
|
estado.turno = saved.turno || estado.turno;
|
||||||
|
estado.saldo_troco = saved.saldo_troco || 0;
|
||||||
|
estado.saldo_esperado = saved.saldo_esperado || 0;
|
||||||
|
estado.fechamento = saved.fechamento || 0;
|
||||||
|
estado.observacoes = saved.observacoes || '';
|
||||||
|
estado.sync_status = saved.sync_status || 'local';
|
||||||
|
// Restore tables (always as arrays of objects)
|
||||||
|
estado.despesas = Array.isArray(saved.despesas) ? saved.despesas : [];
|
||||||
|
estado.sangrias = Array.isArray(saved.sangrias) ? saved.sangrias : [];
|
||||||
|
estado.pixcnpj = Array.isArray(saved.pixcnpj) ? saved.pixcnpj : [];
|
||||||
|
estado.vales = Array.isArray(saved.vales) ? saved.vales : [];
|
||||||
|
estado.receber = Array.isArray(saved.receber) ? saved.receber : [];
|
||||||
|
estado.cancelamentos = Array.isArray(saved.cancelamentos) ? saved.cancelamentos : [];
|
||||||
|
// Restore cartoes — each entry must be { valor: number }
|
||||||
|
if (saved.cartoes) {
|
||||||
|
estado.cartoes.credito = Array.isArray(saved.cartoes.credito)
|
||||||
|
? saved.cartoes.credito.map(v => ({ valor: typeof v === 'object' && v !== null ? (v.valor || 0) : (parseNum(v) || 0) }))
|
||||||
|
: [];
|
||||||
|
estado.cartoes.debito = Array.isArray(saved.cartoes.debito)
|
||||||
|
? saved.cartoes.debito.map(v => ({ valor: typeof v === 'object' && v !== null ? (v.valor || 0) : (parseNum(v) || 0) }))
|
||||||
|
: [];
|
||||||
|
estado.cartoes.alimentacao = Array.isArray(saved.cartoes.alimentacao)
|
||||||
|
? saved.cartoes.alimentacao.map(v => ({ valor: typeof v === 'object' && v !== null ? (v.valor || 0) : (parseNum(v) || 0) }))
|
||||||
|
: [];
|
||||||
|
estado.cartoes.pix = Array.isArray(saved.cartoes.pix)
|
||||||
|
? saved.cartoes.pix.map(v => ({ valor: typeof v === 'object' && v !== null ? (v.valor || 0) : (parseNum(v) || 0) }))
|
||||||
|
: [];
|
||||||
|
}
|
||||||
|
// Restore fechamento_contado
|
||||||
|
if (saved.fechamento_contado) {
|
||||||
|
estado.fechamento_contado = saved.fechamento_contado;
|
||||||
|
}
|
||||||
setVal('f-data', estado.data || '');
|
setVal('f-data', estado.data || '');
|
||||||
setVal('f-operador', estado.operador || '');
|
setVal('f-operador', estado.operador || '');
|
||||||
setVal('f-turno', estado.turno || '');
|
setVal('f-turno', estado.turno || '');
|
||||||
@@ -1092,9 +1129,10 @@ function loadState() {
|
|||||||
setVal('f-obs', estado.observacoes || '');
|
setVal('f-obs', estado.observacoes || '');
|
||||||
setVal('f-saldo-esperado', estado.saldo_esperado === 0 ? '' : fmtNum(estado.saldo_esperado));
|
setVal('f-saldo-esperado', estado.saldo_esperado === 0 ? '' : fmtNum(estado.saldo_esperado));
|
||||||
setVal('sys-troco', estado.saldo_troco === 0 ? '' : fmtNum(estado.saldo_troco));
|
setVal('sys-troco', estado.saldo_troco === 0 ? '' : fmtNum(estado.saldo_troco));
|
||||||
setVal('f-fech-dinheiro', estado.fechamento_contado && estado.fechamento_contado.dinheiro ? fmtNum(estado.fechamento_contado.dinheiro) : '');
|
const fc = estado.fechamento_contado || {};
|
||||||
setVal('f-fech-cartoes', estado.fechamento_contado && estado.fechamento_contado.cartoes ? fmtNum(estado.fechamento_contado.cartoes) : '');
|
setVal('f-fech-dinheiro', fc.dinheiro ? fmtNum(fc.dinheiro) : '');
|
||||||
setVal('f-fech-receber', estado.fechamento_contado && estado.fechamento_contado.receber ? fmtNum(estado.fechamento_contado.receber) : '');
|
setVal('f-fech-cartoes', fc.cartoes ? fmtNum(fc.cartoes) : '');
|
||||||
|
setVal('f-fech-receber', fc.receber ? fmtNum(fc.receber) : '');
|
||||||
syncHeader();
|
syncHeader();
|
||||||
PRE_FILL_TABLES.forEach(ensureOneRow);
|
PRE_FILL_TABLES.forEach(ensureOneRow);
|
||||||
Object.keys(TABLES).forEach(renderTable);
|
Object.keys(TABLES).forEach(renderTable);
|
||||||
@@ -1194,11 +1232,18 @@ async function tauriEnviar() {
|
|||||||
// ─── Print Preview Window ──────────────────────────────────────────────────
|
// ─── Print Preview Window ──────────────────────────────────────────────────
|
||||||
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 diff = (data.saldo_troco - data.saldo_esperado);
|
const diferenca = (data.fechamento || 0) - (data.saldo_esperado || 0);
|
||||||
const diffStr = diff >= 0 ? `+${fmt(diff)}` : fmt(diff);
|
const diffStr = diferenca >= 0 ? `+${fmt(diferenca)}` : fmt(diferenca);
|
||||||
const diffColor = diff === 0 ? '#2e7d32' : (diff > 0 ? '#e65100' : '#c0272d');
|
const diffColor = diferenca === 0 ? '#2e7d32' : (diferenca > 0 ? '#e65100' : '#c0272d');
|
||||||
|
|
||||||
let rows = '';
|
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
|
// Sangrias
|
||||||
if (data.sangrias && data.sangrias.length > 0) {
|
if (data.sangrias && data.sangrias.length > 0) {
|
||||||
data.sangrias.forEach(s => { if (s.hora || s.retirada) rows += `<tr><td>${s.hora||''}</td><td>${fmt(s.retirada)}</td><td>${s.gerente||''}</td></tr>`; });
|
data.sangrias.forEach(s => { if (s.hora || s.retirada) rows += `<tr><td>${s.hora||''}</td><td>${fmt(s.retirada)}</td><td>${s.gerente||''}</td></tr>`; });
|
||||||
@@ -1215,13 +1260,13 @@ function buildPrintHTML(data) {
|
|||||||
if (data.receber && data.receber.length > 0) {
|
if (data.receber && data.receber.length > 0) {
|
||||||
data.receber.forEach(r => { if (r.nome || r.valor) rows += `<tr><td>${r.nome||''}</td><td>${fmt(r.valor)}</td><td></td></tr>`; });
|
data.receber.forEach(r => { if (r.nome || r.valor) rows += `<tr><td>${r.nome||''}</td><td>${fmt(r.valor)}</td><td></td></tr>`; });
|
||||||
}
|
}
|
||||||
// PIX CNPJ
|
// PIX CNPJ (flat total, not array)
|
||||||
if (data.pixcnpj && data.pixcnpj.length > 0) {
|
if (pixCnpjTotal > 0) {
|
||||||
data.pixcnpj.forEach(p => { if (p.nome || p.valor) rows += `<tr><td>PIX: ${p.nome||''}</td><td>${fmt(p.valor)}</td><td></td></tr>`; });
|
rows += `<tr><td>PIX CNPJ</td><td>${fmt(pixCnpjTotal)}</td><td></td></tr>`;
|
||||||
}
|
}
|
||||||
// Cancelamentos
|
// Cancelamentos
|
||||||
if (data.cancelamentos && data.cancelamentos.length > 0) {
|
if (cancelTotal > 0) {
|
||||||
data.cancelamentos.forEach(c => { if (c.numero || c.valor) rows += `<tr><td>${c.numero||''}</td><td>${fmt(c.valor)}</td><td>${c.motivo||''}</td></tr>`; });
|
rows += `<tr><td>Cancelamentos</td><td>${fmt(cancelTotal)}</td><td></td></tr>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
return `<!DOCTYPE html>
|
return `<!DOCTYPE html>
|
||||||
@@ -1271,11 +1316,11 @@ ${data.observacoes ? `<div class="obs">Obs: ${data.observacoes}</div>` : ''}
|
|||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
<div class="section-title">CARTÕES</div>
|
<div class="section-title">CARTÕES</div>
|
||||||
<div class="row"><span>Crédito:</span><span>${fmt(data.credito)}</span></div>
|
<div class="row"><span>Crédito:</span><span>${fmt(data.credito||0)}</span></div>
|
||||||
<div class="row"><span>Débito:</span><span>${fmt(data.debito)}</span></div>
|
<div class="row"><span>Débito:</span><span>${fmt(data.debito||0)}</span></div>
|
||||||
<div class="row"><span>Alimentação:</span><span>${fmt(data.alimentacao)}</span></div>
|
<div class="row"><span>Alimentação:</span><span>${fmt(data.alimentacao||0)}</span></div>
|
||||||
<div class="row"><span>PIX Cartão:</span><span>${fmt(data.cartoes?.pix||0)}</span></div>
|
<div class="row"><span>PIX Cartão:</span><span>${fmt(pixTotal)}</span></div>
|
||||||
<div class="row"><span>Cancelamentos:</span><span>${fmt(data.cancelamentos)}</span></div>
|
<div class="row"><span>Cancelamentos:</span><span>${fmt(cancelTotal)}</span></div>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
<div class="grand-total">DIFERENÇA: ${diffStr}</div>
|
<div class="grand-total">DIFERENÇA: ${diffStr}</div>
|
||||||
@@ -1338,7 +1383,6 @@ async function tauriRecibo() {
|
|||||||
const fechamentoCounted = parseNum(val('f-fech-dinheiro')) + parseNum(val('f-fech-cartoes')) + parseNum(val('f-fech-receber'));
|
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 saldoEsp = parseNum(val('f-saldo-esperado'));
|
||||||
const sysTroco = parseNum(val('sys-troco'));
|
const sysTroco = parseNum(val('sys-troco'));
|
||||||
|
|
||||||
const data = {
|
const data = {
|
||||||
uuid: estado.uuid,
|
uuid: estado.uuid,
|
||||||
id_local: estado.id_local,
|
id_local: estado.id_local,
|
||||||
@@ -1349,15 +1393,8 @@ async function tauriRecibo() {
|
|||||||
saldo_troco: sysTroco,
|
saldo_troco: sysTroco,
|
||||||
saldo_esperado: saldoEsp,
|
saldo_esperado: saldoEsp,
|
||||||
fechamento: fechamentoCounted,
|
fechamento: fechamentoCounted,
|
||||||
diferenca: sysTroco - saldoEsp,
|
diferenca: fechamentoCounted - saldoEsp,
|
||||||
despesas: estado.despesas.map(r => ({ desc: r.desc||'', obs: r.obs||'', valor: r.valor||0 })),
|
// Flat totals for ReciboData struct (Rust) — must be numbers
|
||||||
sangrias: estado.sangrias.map(r => ({ hora: r.hora||'', retirada: parseNum(r.retirada)||0, gerente: r.gerente||'' })),
|
|
||||||
pixcnpj: estado.pixcnpj.map(r => ({ nome: r.nome||'', valor: r.valor||0 })),
|
|
||||||
vales: estado.vales.map(r => ({ nome: r.nome||'', obs: r.obs||'', valor: r.valor||0 })),
|
|
||||||
receber: estado.receber.map(r => ({ nome: r.nome||'', valor: r.valor||0 })),
|
|
||||||
cancelamentos: estado.cancelamentos.map(r => ({ numero: r.numero||'', valor: r.valor||0, motivo: r.motivo||'' })),
|
|
||||||
cartoes: { credito: cartCred, debito: cartDeb, alimentacao: cartAli, pix: cartPix },
|
|
||||||
// Flat totals for ReciboData struct (Rust)
|
|
||||||
credito: cartCred,
|
credito: cartCred,
|
||||||
debito: cartDeb,
|
debito: cartDeb,
|
||||||
alimentacao: cartAli,
|
alimentacao: cartAli,
|
||||||
@@ -1368,6 +1405,14 @@ async function tauriRecibo() {
|
|||||||
vales: valesTotal,
|
vales: valesTotal,
|
||||||
areceber: receberTotal,
|
areceber: receberTotal,
|
||||||
cancelamentos: cancelTotal,
|
cancelamentos: cancelTotal,
|
||||||
|
// Full arrays for backend/storage
|
||||||
|
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 })),
|
||||||
|
vales_arr: estado.vales.map(r => ({ nome: r.nome||'', obs: r.obs||'', valor: r.valor||0 })),
|
||||||
|
receber_arr: estado.receber.map(r => ({ nome: r.nome||'', valor: r.valor||0 })),
|
||||||
|
cancelamentos_arr: estado.cancelamentos.map(r => ({ numero: r.numero||'', valor: r.valor||0, motivo: r.motivo||'' })),
|
||||||
|
cartoes: { credito: cartCred, debito: cartDeb, alimentacao: cartAli, pix: cartPix },
|
||||||
observacoes: estado.observacoes,
|
observacoes: estado.observacoes,
|
||||||
sync_status: estado.sync_status,
|
sync_status: estado.sync_status,
|
||||||
};
|
};
|
||||||
@@ -1446,16 +1491,19 @@ document.getElementById('modal-confirm').addEventListener('click', e => { if (e.
|
|||||||
// Print from confirm modal — abre preview no navegador
|
// Print from confirm modal — abre preview no navegador
|
||||||
document.getElementById('confirm-print').addEventListener('click', async () => {
|
document.getElementById('confirm-print').addEventListener('click', async () => {
|
||||||
closeConfirmModal();
|
closeConfirmModal();
|
||||||
// Reconstrói os mesmos dados do tauriRecibo e abre preview
|
|
||||||
const cartCred = estado.cartoes.credito.reduce((s,r) => s+(r.valor||0), 0);
|
const cartCred = estado.cartoes.credito.reduce((s,r) => s+(r.valor||0), 0);
|
||||||
const cartDeb = estado.cartoes.debito.reduce((s,r) => s+(r.valor||0), 0);
|
const cartDeb = estado.cartoes.debito.reduce((s,r) => s+(r.valor||0), 0);
|
||||||
const cartAli = estado.cartoes.alimentacao.reduce((s,r) => s+(r.valor||0), 0);
|
const cartAli = estado.cartoes.alimentacao.reduce((s,r) => s+(r.valor||0), 0);
|
||||||
const cartPix = estado.cartoes.pix.reduce((s,r) => s+(r.valor||0), 0);
|
const cartPix = estado.cartoes.pix.reduce((s,r) => s+(r.valor||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'));
|
||||||
const data = {
|
const data = {
|
||||||
loja: estado.loja, data: estado.data, operador: estado.operador, turno: estado.turno,
|
loja: estado.loja, data: estado.data, operador: estado.operador, turno: estado.turno,
|
||||||
saldo_troco: parseNum(val('sys-troco')) || 0,
|
saldo_troco: parseNum(val('sys-troco')) || 0,
|
||||||
saldo_esperado: parseNum(val('f-saldo-esperado')) || 0,
|
saldo_esperado: saldoEsp,
|
||||||
fechamento: parseNum(val('f-fech-dinheiro')) + parseNum(val('f-fech-cartoes')) + parseNum(val('f-fech-receber')),
|
fechamento: fechamentoCounted,
|
||||||
|
diferenca: fechamentoCounted - saldoEsp,
|
||||||
despesas: estado.despesas.map(r => ({ desc: r.desc||'', obs: r.obs||'', valor: r.valor||0 })),
|
despesas: estado.despesas.map(r => ({ desc: r.desc||'', obs: r.obs||'', valor: r.valor||0 })),
|
||||||
sangrias: estado.sangrias.map(r => ({ hora: r.hora||'', retirada: parseNum(r.retirada)||0, gerente: r.gerente||'' })),
|
sangrias: estado.sangrias.map(r => ({ hora: r.hora||'', retirada: parseNum(r.retirada)||0, gerente: r.gerente||'' })),
|
||||||
pixcnpj: estado.pixcnpj.map(r => ({ nome: r.nome||'', valor: r.valor||0 })),
|
pixcnpj: estado.pixcnpj.map(r => ({ nome: r.nome||'', valor: r.valor||0 })),
|
||||||
@@ -1463,7 +1511,8 @@ document.getElementById('confirm-print').addEventListener('click', async () => {
|
|||||||
receber: estado.receber.map(r => ({ nome: r.nome||'', valor: r.valor||0 })),
|
receber: estado.receber.map(r => ({ nome: r.nome||'', valor: r.valor||0 })),
|
||||||
cancelamentos: estado.cancelamentos.map(r => ({ numero: r.numero||'', valor: r.valor||0, motivo: r.motivo||'' })),
|
cancelamentos: estado.cancelamentos.map(r => ({ numero: r.numero||'', valor: r.valor||0, motivo: r.motivo||'' })),
|
||||||
credito: cartCred, debito: cartDeb, alimentacao: cartAli,
|
credito: cartCred, debito: cartDeb, alimentacao: cartAli,
|
||||||
cartoes: { pix: cartPix },
|
pix: cartPix, // flat float for buildPrintHTML
|
||||||
|
cartoes: { credito: estado.cartoes.credito, debito: estado.cartoes.debito, alimentacao: estado.cartoes.alimentacao, pix: estado.cartoes.pix },
|
||||||
observacoes: estado.observacoes,
|
observacoes: estado.observacoes,
|
||||||
};
|
};
|
||||||
openPrintPreview(data);
|
openPrintPreview(data);
|
||||||
@@ -1526,30 +1575,42 @@ document.getElementById('btn-limpar').addEventListener('click', () => {
|
|||||||
document.getElementById('btn-anterior').addEventListener('click', async () => {
|
document.getElementById('btn-anterior').addEventListener('click', async () => {
|
||||||
const loja = val('f-loja') || 'União';
|
const loja = val('f-loja') || 'União';
|
||||||
|
|
||||||
// Carrega lista de datas recentes do Supabase
|
// Carrega lista de fechamentos recentes do Supabase com uuid
|
||||||
let datas = [];
|
let recentList = [];
|
||||||
try {
|
try {
|
||||||
const lista = await window.__TAURI__.core.invoke('sb_listar_recentes', { loja, limite: 20 });
|
recentList = await window.__TAURI__.core.invoke('sb_listar_recentes', { loja, limite: 20 });
|
||||||
if (lista && lista.length > 0) {
|
|
||||||
// Extrai datas únicas e já ordenadas
|
|
||||||
datas = [...new Set(lista.map(l => l.data).filter(Boolean))].sort().reverse();
|
|
||||||
}
|
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
console.warn('sb_listar_recentes falhou:', e);
|
console.warn('sb_listar_recentes falhou:', e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Extrai datas únicas ordenadas + mapeamento data→id
|
||||||
|
const dateIdMap = {};
|
||||||
|
const dateList = [];
|
||||||
|
if (recentList && recentList.length > 0) {
|
||||||
|
recentList.forEach(item => {
|
||||||
|
if (item.data && !dateIdMap[item.data]) {
|
||||||
|
dateIdMap[item.data] = item.id;
|
||||||
|
dateList.push(item.data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
dateList.sort().reverse();
|
||||||
|
}
|
||||||
|
|
||||||
let selectedDate = null;
|
let selectedDate = null;
|
||||||
if (datas.length > 0) {
|
let selectedId = null;
|
||||||
// Mostra seletor com as datas disponíveis
|
if (dateList.length > 0) {
|
||||||
const msg = datas.map((d, i) => `${i + 1}) ${d}`).join('\n');
|
const msg = dateList.map((d, i) => `${i + 1}) ${d}`).join('\n');
|
||||||
const escolha = prompt(`Selecione o número do dia anterior:\n${msg}\n\n(Deixe em branco e clique Cancelar para ver só o dia anterior automático)`);
|
const escolha = prompt(`Selecione o número do dia anterior:\n${msg}\n\n(Deixe em branco e clique Cancelar para ver só o dia anterior automático)`);
|
||||||
if (escolha !== null && escolha.trim() !== '') {
|
if (escolha !== null && escolha.trim() !== '') {
|
||||||
const idx = parseInt(escolha) - 1;
|
const idx = parseInt(escolha) - 1;
|
||||||
if (idx >= 0 && idx < datas.length) selectedDate = datas[idx];
|
if (idx >= 0 && idx < dateList.length) {
|
||||||
|
selectedDate = dateList[idx];
|
||||||
|
selectedId = dateIdMap[selectedDate];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Se não escolheu data, usa dia anterior automático
|
// Se não escolheu data, usa dia anterior automático (sem id — carrega por data)
|
||||||
if (!selectedDate) {
|
if (!selectedDate) {
|
||||||
const d = new Date(estado.data); d.setDate(d.getDate() - 1);
|
const d = new Date(estado.data); d.setDate(d.getDate() - 1);
|
||||||
selectedDate = d.toISOString().split('T')[0];
|
selectedDate = d.toISOString().split('T')[0];
|
||||||
@@ -1562,11 +1623,19 @@ document.getElementById('btn-anterior').addEventListener('click', async () => {
|
|||||||
estado.id_local = null;
|
estado.id_local = null;
|
||||||
syncHeader();
|
syncHeader();
|
||||||
|
|
||||||
// Tenta Supabase primeiro, senão local
|
// Tenta Supabase primeiro (com id se disponível), senão local
|
||||||
let rascunho = null;
|
let rascunho = null;
|
||||||
try {
|
if (selectedId) {
|
||||||
rascunho = await window.__TAURI__.core.invoke('sb_carregar_rascunho', { loja, data: selectedDate });
|
// Usa sb_buscar_por_id para buscar por id numérico do Supabase
|
||||||
} catch(e) { console.warn('sb_carregar_rascunho falhou:', e); }
|
try {
|
||||||
|
rascunho = await window.__TAURI__.core.invoke('sb_buscar_por_id', { id: selectedId });
|
||||||
|
} catch(e) { console.warn('sb_buscar_por_id falhou:', e); }
|
||||||
|
}
|
||||||
|
if (!rascunho) {
|
||||||
|
try {
|
||||||
|
rascunho = await window.__TAURI__.core.invoke('sb_carregar_rascunho', { loja, data: selectedDate });
|
||||||
|
} catch(e) { console.warn('sb_carregar_rascunho falhou:', e); }
|
||||||
|
}
|
||||||
|
|
||||||
if (!rascunho) {
|
if (!rascunho) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user