Minha Loja Sincronizada
🛒 Minha Loja
Modo Cliente
🚫 Loja temporariamente FECHADA para pedidos
🛒 Carrinho
▲
Total: R$ 0,00
×
/* ================= PRODUTOS ================= */
produtosRef.on("value",snap=>{
listaProdutos=[];
snap.forEach(i=>{
const val=i.val();
val.id=i.key;
listaProdutos.push(val);
});
filtrarProdutos();
});
function renderProdutos(lista){
produtos.innerHTML="";
lista.forEach(function(p){
const estoqueAtual=p.estoque||0;
const precoNum=Number(p.preco||0);
const bloqueado = (!LOJA_ABERTA || estoqueAtual<=0);
produtos.innerHTML+=`
${p.titulo||""}
${p.descricao||""}
R$ ${precoNum.toFixed(2)}
Estoque: ${estoqueAtual}
`;
});
}
function filtrarProdutos(){
const termo=(buscaInput.value||"").toLowerCase();
renderProdutos(listaProdutos.filter(p=>{
return (p.titulo||"").toLowerCase().includes(termo) ||
(p.descricao||"").toLowerCase().includes(termo);
}));
}
function lerImagemProduto(i){
const r=new FileReader();
r.onload=()=>imagemProduto=r.result;
r.readAsDataURL(i.files[0]);
}
function salvarProduto(){
const p={
titulo:titulo.value,
descricao:descricao.value,
preco:Number(preco.value||0),
imagem:imagemProduto,
estoque:Number(estoque.value||0)
};
if(editando){produtosRef.child(editando).set(p);}
else{produtosRef.push(p);}
cancelarEdicao();
}
function editarProduto(id){
produtosRef.child(id).once("value").then(s=>{
const p=s.val();
titulo.value=p.titulo;
descricao.value=p.descricao;
preco.value=p.preco;
estoque.value=p.estoque||0;
imagemProduto=p.imagem;
editando=id;
});
}
function removerProduto(id){
if(confirm("Remover?")) produtosRef.child(id).remove();
}
function cancelarEdicao(){
titulo.value="";descricao.value="";preco.value="";estoque.value="";
imagemProduto="";editando=null;
}
/* ================= CARRINHO ================= */
function addCarrinho(id){
if(!LOJA_ABERTA){
alert("A loja está fechada para pedidos!");
return;
}
const p = listaProdutos.find(x=>x.id===id);
if(!p) return;
if((p.estoque||0)<=0){
alert("Sem estoque");
return;
}
produtosRef.child(id).child("estoque").transaction(e=>{
if(!e || e<=0) return e;
return e-1;
});
let item=carrinho.find(x=>x.id===id);
if(item) item.qtd++;
else carrinho.push({id:p.id,titulo:p.titulo,preco:Number(p.preco||0),qtd:1});
renderCarrinho();
}
function alterarQtd(id,delta){
let item=carrinho.find(x=>x.id===id);
if(!item) return;
const prod=listaProdutos.find(p=>p.id===id);
if(delta>0){
if((prod.estoque||0)<=0) return alert("Sem estoque");
produtosRef.child(id).child("estoque").transaction(e=>{
if(!e || e<=0) return e;
return e-1;
});
item.qtd++;
}else{
if(item.qtd>1){
produtosRef.child(id).child("estoque").transaction(e=>(e||0)+1);
item.qtd--;
}else{
removerDoCarrinho(id);
return;
}
}
renderCarrinho();
}
function removerDoCarrinho(id){
let item=carrinho.find(x=>x.id===id);
if(!item) return;
produtosRef.child(id).child("estoque").transaction(e=>(e||0)+item.qtd);
carrinho=carrinho.filter(x=>x.id!==id);
renderCarrinho();
}
function renderCarrinho(){
itens.innerHTML="";
let totalValor=0;
carrinho.forEach(p=>{
totalValor+=p.preco*p.qtd;
itens.innerHTML+=`
${p.titulo}
R$ ${p.preco.toFixed(2)}
${p.qtd}
`;
});
total.innerText="Total: R$ "+totalValor.toFixed(2);
}
/* ================= REGISTRAR VENDAS ================= */
function registrarVenda() {
let total = 0;
let itensVenda = [];
carrinho.forEach(p => {
total += p.preco * p.qtd;
itensVenda.push({
id: p.id,
titulo: p.titulo,
qtd: p.qtd,
total: p.preco * p.qtd
});
});
vendasRef.push({
data: Date.now(),
total: total,
itens: itensVenda
});
}
/* ================= RELATÓRIO ================= */
function toggleRelatorio() {
const div = document.getElementById("relatoriosBox");
div.style.display = div.style.display === "none" ? "block" : "none";
}
vendasRef.on("value", snap => {
let hojeTotal = 0, mesTotal = 0, geralTotal = 0, pedidos = 0;
let contadorProdutos = {};
const agora = new Date();
const diaHoje = agora.getDate();
const mesHoje = agora.getMonth();
const anoHoje = agora.getFullYear();
snap.forEach(s => {
const v = s.val();
pedidos++;
geralTotal += v.total;
const d = new Date(v.data);
if(d.getDate() === diaHoje && d.getMonth() === mesHoje && d.getFullYear() === anoHoje) {
hojeTotal += v.total;
}
if(d.getMonth() === mesHoje && d.getFullYear() === anoHoje) {
mesTotal += v.total;
}
(v.itens || []).forEach(i => {
if(!contadorProdutos[i.titulo]) contadorProdutos[i.titulo] = 0;
contadorProdutos[i.titulo] += i.qtd;
});
});
document.getElementById("relHoje").innerText = hojeTotal.toFixed(2);
document.getElementById("relMes").innerText = mesTotal.toFixed(2);
document.getElementById("relTotal").innerText = geralTotal.toFixed(2);
document.getElementById("relPedidos").innerText = pedidos;
let topNome = "Nenhum ainda";
let maior = 0;
for(let k in contadorProdutos){
if(contadorProdutos[k] > maior){
maior = contadorProdutos[k];
topNome = k;
}
}
document.getElementById("relTop").innerText = topNome;
// alerta estoque baixo
let alerta = "";
listaProdutos.forEach(p => {
if((p.estoque || 0) <= 2){
alerta += `⚠ ${p.titulo} com estoque baixo (${p.estoque})\n`;
}
});
document.getElementById("estoqueAviso").innerText = alerta;
});
/* ================= ENVIAR WHATSAPP ================= */
function pedidoWhats(){
if(!LOJA_ABERTA){ alert("A loja está fechada para pedidos!"); return; }
if(!WHATSAPP_SALVO){ alert("Nenhum número de WhatsApp configurado!"); return; }
if(carrinho.length === 0){ alert("Carrinho vazio!"); return; }
let msg = "*Pedido realizado na loja:*%0A%0A";
let total = 0;
carrinho.forEach(p=>{
msg += `• ${p.titulo} | Qtde: ${p.qtd} | R$ ${(p.preco*p.qtd).toFixed(2)}%0A`;
total += p.preco*p.qtd;
});
msg += `%0A*Total:* R$ ${total.toFixed(2)}`;
window.open(`https://wa.me/${WHATSAPP_SALVO}?text=${msg}`);
// registrar venda
registrarVenda();
carrinho = [];
renderCarrinho();
}
/* ================= UTIL ================= */
function abrirZoom(src){ if(src){ zoomImg.src=src; zoom.style.display="flex"; } }
function fecharZoom(){ zoom.style.display="none"; }
function toggleCarrinho(){
let c=document.getElementById("carrinho");
c.classList.toggle("aberto");
document.querySelector("#carrinho .seta").innerText=
c.classList.contains("aberto")?"▼":"▲";
}
Comentários
Postar um comentário