v1.3.14b: campos Clientes e Frango Assado no formulário, reports e modal
This commit is contained in:
+34
-2
@@ -427,6 +427,21 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- CONTADORES -->
|
||||||
|
<div class="section">
|
||||||
|
<div class="section-header">👥 Clientes & Frango Assado</div>
|
||||||
|
<div style="display:flex;gap:12px">
|
||||||
|
<div style="flex:1">
|
||||||
|
<label style="font-size:12px;color:#666">Clientes</label>
|
||||||
|
<input type="number" id="f-clientes" min="0" placeholder="0" style="width:100%;padding:8px;border:1px solid var(--border);border-radius:var(--radius);font-size:15px" />
|
||||||
|
</div>
|
||||||
|
<div style="flex:1">
|
||||||
|
<label style="font-size:12px;color:#666">Frango Assado</label>
|
||||||
|
<input type="number" id="f-frango" min="0" placeholder="0" style="width:100%;padding:8px;border:1px solid var(--border);border-radius:var(--radius);font-size:15px" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- OBS -->
|
<!-- OBS -->
|
||||||
<div class="section" style="flex:1;display:flex;flex-direction:column">
|
<div class="section" style="flex:1;display:flex;flex-direction:column">
|
||||||
<div class="section-header">📝 Observações</div>
|
<div class="section-header">📝 Observações</div>
|
||||||
@@ -578,6 +593,7 @@ let estado = {
|
|||||||
despesas: [], sangrias: [], pixcnpj: [], vales: [], receber: [], cancelamentos: [],
|
despesas: [], sangrias: [], pixcnpj: [], vales: [], receber: [], cancelamentos: [],
|
||||||
cartoes: { credito: [], debito: [], alimentacao: [], pix: [] },
|
cartoes: { credito: [], debito: [], alimentacao: [], pix: [] },
|
||||||
fechamento_contado: { dinheiro: 0, cartoes: 0, receber: 0 },
|
fechamento_contado: { dinheiro: 0, cartoes: 0, receber: 0 },
|
||||||
|
clientes: 0, frango: 0, // contadores
|
||||||
observacoes: '', id_local: null, sync_status: 'local'
|
observacoes: '', id_local: null, sync_status: 'local'
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1068,6 +1084,8 @@ function buildEstadoForBackend() {
|
|||||||
pix: estado.cartoes.pix.map(r => r.valor || 0),
|
pix: estado.cartoes.pix.map(r => r.valor || 0),
|
||||||
},
|
},
|
||||||
observacoes: estado.observacoes,
|
observacoes: estado.observacoes,
|
||||||
|
clientes: estado.clientes,
|
||||||
|
frango: estado.frango,
|
||||||
sync_status: estado.sync_status,
|
sync_status: estado.sync_status,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -1084,6 +1102,8 @@ function saveState() {
|
|||||||
cartoes: parseNum(val('f-fech-cartoes')),
|
cartoes: parseNum(val('f-fech-cartoes')),
|
||||||
receber: parseNum(val('f-fech-receber')),
|
receber: parseNum(val('f-fech-receber')),
|
||||||
};
|
};
|
||||||
|
estado.clientes = parseInt(document.getElementById('f-clientes').value) || 0;
|
||||||
|
estado.frango = parseInt(document.getElementById('f-frango').value) || 0;
|
||||||
estado.updatedAt = new Date().toISOString();
|
estado.updatedAt = new Date().toISOString();
|
||||||
try { localStorage.setItem(LS_KEY, JSON.stringify(estado)); } catch(e) {}
|
try { localStorage.setItem(LS_KEY, JSON.stringify(estado)); } catch(e) {}
|
||||||
}
|
}
|
||||||
@@ -1103,6 +1123,8 @@ function loadState() {
|
|||||||
estado.saldo_esperado = saved.saldo_esperado || 0;
|
estado.saldo_esperado = saved.saldo_esperado || 0;
|
||||||
estado.fechamento = saved.fechamento || 0;
|
estado.fechamento = saved.fechamento || 0;
|
||||||
estado.observacoes = saved.observacoes || '';
|
estado.observacoes = saved.observacoes || '';
|
||||||
|
estado.clientes = saved.clientes || 0;
|
||||||
|
estado.frango = saved.frango || 0;
|
||||||
estado.sync_status = saved.sync_status || 'local';
|
estado.sync_status = saved.sync_status || 'local';
|
||||||
// Restore tables (always as arrays of objects)
|
// Restore tables (always as arrays of objects)
|
||||||
estado.despesas = Array.isArray(saved.despesas) ? saved.despesas : [];
|
estado.despesas = Array.isArray(saved.despesas) ? saved.despesas : [];
|
||||||
@@ -1395,6 +1417,10 @@ ${cancelamentos_arr.map(c => `<div class="row"><span>${c.numero ? `Nº ${c.numer
|
|||||||
<div class="row"><span>À Receber:</span><span>${fmt(frec)}</span></div>
|
<div class="row"><span>À Receber:</span><span>${fmt(frec)}</span></div>
|
||||||
<div class="row total-row"><span>TOTAL:</span><span>${fmt(ftotal)}</span></div>
|
<div class="row total-row"><span>TOTAL:</span><span>${fmt(ftotal)}</span></div>
|
||||||
|
|
||||||
|
<div class="section-title">CONTADORES</div>
|
||||||
|
<div class="row"><span>Clientes:</span><span>${data.clientes || 0}</span></div>
|
||||||
|
<div class="row"><span>Frango Assado:</span><span>${data.frango || 0}</span></div>
|
||||||
|
|
||||||
${data.observacoes ? `<div class="obs">${data.observacoes}</div>` : ''}
|
${data.observacoes ? `<div class="obs">${data.observacoes}</div>` : ''}
|
||||||
|
|
||||||
<div class="footer">Gerado em ${new Date().toLocaleString('pt-BR')}</div>
|
<div class="footer">Gerado em ${new Date().toLocaleString('pt-BR')}</div>
|
||||||
@@ -1669,6 +1695,8 @@ function buildReportHTML(data) {
|
|||||||
<div class="row"><span>💳 Débito:</span><span class="val">${fmt(cartDeb)}</span></div>
|
<div class="row"><span>💳 Débito:</span><span class="val">${fmt(cartDeb)}</span></div>
|
||||||
<div class="row"><span>💳 Alimentação:</span><span class="val">${fmt(cartAli)}</span></div>
|
<div class="row"><span>💳 Alimentação:</span><span class="val">${fmt(cartAli)}</span></div>
|
||||||
<div class="row"><span>❌ Cancelamentos:</span><span class="val">${fmt(cancelamentos)}</span></div>
|
<div class="row"><span>❌ Cancelamentos:</span><span class="val">${fmt(cancelamentos)}</span></div>
|
||||||
|
<div class="row"><span>👥 Clientes:</span><span class="val">${data.clientes || 0}</span></div>
|
||||||
|
<div class="row"><span>🍗 Frango Assado:</span><span class="val">${data.frango || 0}</span></div>
|
||||||
<hr>
|
<hr>
|
||||||
<div class="row"><span>📋 Fechamento (contado):</span><span class="val">${fmt(fechamento)}</span></div>
|
<div class="row"><span>📋 Fechamento (contado):</span><span class="val">${fmt(fechamento)}</span></div>
|
||||||
<div class="row"><span>🖥️ Total Sistema:</span><span class="val">${fmt(sysTotal)}</span></div>
|
<div class="row"><span>🖥️ Total Sistema:</span><span class="val">${fmt(sysTotal)}</span></div>
|
||||||
@@ -1821,6 +1849,8 @@ function buildReciboData() {
|
|||||||
cartoes_alimentacao: estado.cartoes.alimentacao.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),
|
cartoes_pix: estado.cartoes.pix.map(r => r.valor || 0),
|
||||||
observacoes: estado.observacoes,
|
observacoes: estado.observacoes,
|
||||||
|
clientes: estado.clientes,
|
||||||
|
frango: estado.frango,
|
||||||
sync_status: estado.sync_status,
|
sync_status: estado.sync_status,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -1887,6 +1917,8 @@ function openConfirmModal() {
|
|||||||
<div>💳 Débito: <strong>${fmt(cartDeb)}</strong></div>
|
<div>💳 Débito: <strong>${fmt(cartDeb)}</strong></div>
|
||||||
<div>💳 Alimentação: <strong>${fmt(cartAli)}</strong></div>
|
<div>💳 Alimentação: <strong>${fmt(cartAli)}</strong></div>
|
||||||
<div>❌ Cancelamentos: <strong>${fmt(cancelamentos)}</strong></div>
|
<div>❌ Cancelamentos: <strong>${fmt(cancelamentos)}</strong></div>
|
||||||
|
<div>👥 Clientes: <strong>${estado.clientes || 0}</strong></div>
|
||||||
|
<div>🍗 Frango Assado: <strong>${estado.frango || 0}</strong></div>
|
||||||
<div>📋 Fechamento (contado): <strong>${fmt(fechamento)}</strong></div>
|
<div>📋 Fechamento (contado): <strong>${fmt(fechamento)}</strong></div>
|
||||||
<div>🖥️ Total Sistema: <strong>${fmt(sysTotal)}</strong></div>
|
<div>🖥️ Total Sistema: <strong>${fmt(sysTotal)}</strong></div>
|
||||||
<hr style="border:none;border-top:1px dashed #b3d9f7;margin:6px 0">
|
<hr style="border:none;border-top:1px dashed #b3d9f7;margin:6px 0">
|
||||||
@@ -1950,6 +1982,8 @@ document.getElementById('confirm-send').addEventListener('click', async () => {
|
|||||||
|
|
||||||
// ─── Buttons ───────────────────────────────────────────────────────────────
|
// ─── Buttons ───────────────────────────────────────────────────────────────
|
||||||
document.getElementById('f-obs').addEventListener('input', e => { estado.observacoes = e.target.value; scheduleSave(); });
|
document.getElementById('f-obs').addEventListener('input', e => { estado.observacoes = e.target.value; scheduleSave(); });
|
||||||
|
document.getElementById('f-clientes').addEventListener('input', e => { estado.clientes = parseInt(e.target.value) || 0; scheduleSave(); });
|
||||||
|
document.getElementById('f-frango').addEventListener('input', e => { estado.frango = parseInt(e.target.value) || 0; scheduleSave(); });
|
||||||
|
|
||||||
document.getElementById('btn-recibo').addEventListener('click', async () => {
|
document.getElementById('btn-recibo').addEventListener('click', async () => {
|
||||||
const btn = document.getElementById('btn-recibo');
|
const btn = document.getElementById('btn-recibo');
|
||||||
@@ -2238,8 +2272,6 @@ async function salvarEdicaoSupabase() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
document.getElementById('f-obs').addEventListener('input', e => { estado.observacoes = e.target.value; scheduleSave(); });
|
|
||||||
|
|
||||||
// ─── Boot ─────────────────────────────────────────────────────────────────
|
// ─── Boot ─────────────────────────────────────────────────────────────────
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
loadConfig();
|
loadConfig();
|
||||||
|
|||||||
Reference in New Issue
Block a user