let scanner = null;
let modelo = null;
let deferredPrompt = null;
window.addEventListener('beforeinstallprompt', (e) => {
e.preventDefault();
deferredPrompt = e;
document.getElementById('btnInstallPwa').style.display = 'block';
});
async function installPwa() {
if (!deferredPrompt) return;
deferredPrompt.prompt();
await deferredPrompt.userChoice;
deferredPrompt = null;
document.getElementById('btnInstallPwa').style.display = 'none';
}
$(function(){
modelo = $('#modelo').val()
// $('#modalFrete').modal('show')
})
function print(){
var disp_setting="toolbar=yes,location=no,";
disp_setting+="directories=yes,menubar=yes,";
disp_setting+="scrollbars=yes,width=850, height=600, left=100, top=25";
var docprint=window.open(path_url+"pedidos-cardapio-print/"+$('#pedido_id').val(),"",disp_setting);
docprint.focus();
}
$("#btnFrete").on("click", function () {
$('#modalFinalizar').modal('hide')
$('#modalFrete').modal('show')
})
$("#btnConfirmarFrete").on("click", function () {
$('#modalFrete').modal('hide')
$('#modalFinalizar').modal('show')
atualizarResumoPagamento()
})
$("#btn-dark-mode").on("click", function () {
$("body").toggleClass("dark-mode");
if ($("body").hasClass("dark-mode")) {
localStorage.setItem("pdv_dark", "1");
$("#btn-dark-mode i")
.removeClass("ri-moon-line")
.addClass("ri-sun-line");
$("#btn-dark-mode").contents().last()[0].textContent = " Modo Claro";
} else {
localStorage.setItem("pdv_dark", "0");
$("#btn-dark-mode i")
.removeClass("ri-sun-line")
.addClass("ri-moon-line");
$("#btn-dark-mode").contents().last()[0].textContent = " Modo Escuro";
}
});
$(document).ready(function() {
if (localStorage.getItem("pdv_dark") === "1") {
document.body.classList.add("dark-mode");
$("#btn-dark-mode i").removeClass("ri-moon-line").addClass("ri-sun-line");
$("#btn-dark-mode").contents().last()[0].textContent = " Modo Claro";
}
$('.produto-item').show().addClass('show');
$('#btn-menu').on('click', function() {
$('#pdv-sidebar').addClass('open');
$('.pdv-sidebar-overlay').fadeIn(150);
});
$('#close-sidebar').on('click', function() {
$('#pdv-sidebar').removeClass('open');
$('.pdv-sidebar-overlay').fadeOut(150);
});
$('.pdv-sidebar-overlay').on('click', function() {
$('#pdv-sidebar').removeClass('open');
$(this).fadeOut(150);
});
$('#btn-sangria').on('click', function() {
$('#sangriaValor').val('');
$('#sangriaObs').val('');
$('#modalSangria').modal('show');
});
$('#btn-suprimento').on('click', function() {
$('#suprimentoValor').val('');
$('#suprimentoObs').val('');
$('#modalSuprimento').modal('show');
});
$('#btn-comandas').on('click', function() {
$('.loader').css('display', 'flex')
$('.loader-text').text('Buscando comandas...')
$.get(path_url + "api/pdv-mobo/comandas",
{
empresa_id: $('#empresa_id').val(),
})
.done((data) => {
$('#modalComandas').modal('show');
$('#modalComandas .modal-body').html(data);
// console.log(data)
})
.fail((e) => {
console.log(e);
toastr.error("Não foi possivel buscar as comandas!")
})
.always(() => {
$('.loader').css('display', 'none')
});
});
$('#btn-vendas-diaria').on('click', function() {
$('.loader').css('display', 'flex')
$('.loader-text').text('Buscando vendas...')
$.get(path_url + "api/pdv-mobo/vendas-diaria",
{
empresa_id: $('#empresa_id').val(),
usuario_id: $('#usuario_id').val()
})
.done((data) => {
$('#modalVendasDiaria').modal('show');
$('#modalVendasDiaria .modal-title').text('Vendas Diárias PDV');
$('#modalVendasDiaria #vendasDiaria').html(data);
})
.fail((e) => {
console.log(e);
toastr.error("Não foi possivel buscar as vendas do dia!")
})
.always(() => {
$('.loader').css('display', 'none')
});
});
$('#btn-vendas-diaria-nfe').on('click', function() {
$('.loader').css('display', 'flex')
$('.loader-text').text('Buscando vendas...')
$.get(path_url + "api/pdv-mobo/vendas-diaria-nfe",
{
empresa_id: $('#empresa_id').val(),
usuario_id: $('#usuario_id').val()
})
.done((data) => {
$('#modalVendasDiaria').modal('show');
$('#modalVendasDiaria .modal-title').text('Vendas Diárias Pedido');
$('#modalVendasDiaria #vendasDiaria').html(data);
})
.fail((e) => {
console.log(e);
toastr.error("Não foi possivel buscar as vendas do dia!")
})
.always(() => {
$('.loader').css('display', 'none')
});
});
$('#btn-vendas-suspensas').on('click', function() {
$('.loader').css('display', 'flex')
$('.loader-text').text('Buscando vendas...')
$.get(path_url + "api/pdv-mobo/vendas-suspensa",
{
empresa_id: $('#empresa_id').val(),
})
.done((data) => {
$('#modalVendasSuspensa').modal('show');
$('#modalVendasSuspensa #vendasSuspensa').html(data);
})
.fail((e) => {
console.log(e);
toastr.error("Não foi possivel buscar as vendas suspensas!")
}).always(() => {
$('.loader').css('display', 'none')
});
});
$('#btn-reiniciar').on('click', function() {
swal({
title: "Reiniciar",
text: "Deseja realmente reiniciar a venda?",
icon: "warning",
buttons: true,
buttons: ["Não", "Sim"],
dangerMode: true,
}).then((isConfirm) => {
if (isConfirm) {
resetForm()
$('#pdv-sidebar').removeClass('open');
$('.pdv-sidebar-overlay').fadeOut(150);
}
});
});
$('#btn-suspender').on('click', function() {
let total = $('#btnTotal').text();
if(convertMoedaToFloat(total) <= 0){
toastr.error("Não é possível suspender sem nenhum item!");
return;
}
swal({
title: "Suspender",
text: "Deseja realmente suspender a venda?",
icon: "warning",
buttons: true,
buttons: ["Não", "Sim"],
dangerMode: true,
}).then((isConfirm) => {
if (isConfirm) {
suspender = 1
salvarVenda()
$('#pdv-sidebar').removeClass('open');
$('.pdv-sidebar-overlay').fadeOut(150);
}
});
});
let hoje = new Date().toISOString().split("T")[0];
$('#vencimentoForma').val(hoje);
});
$(document).on("focus", ".moeda", function () {
$(this).mask("00000000,00", { reverse: true })
});
$(document).on("focus", ".peso", function () {
$(this).mask("00000000.000", { reverse: true })
});
$(document).on("focus", ".placa", function () {
$(this).mask("AAA-AAAA", { reverse: true })
});
$(".cpf_cnpj").inputmask({
mask: ["999.999.999-99", "99.999.999/9999-99"], // CPF ou CNPJ
keepStatic: true, // escolhe automaticamente baseado no tamanho do valor
showMaskOnHover: false,
showMaskOnFocus: true,
clearIncomplete: true // limpa se não digitar todos os dígitos
});
function convertMoedaToFloat(value) {
if (!value) {
return 0;
}
var number_without_mask = value.replaceAll(".", "").replaceAll(",", ".");
return parseFloat(number_without_mask.replace(/[^0-9\.]+/g, ""));
}
function convertFloatToMoeda(value) {
value = parseFloat(value)
return value.toLocaleString("pt-BR", {
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
}
$('.pdv-cat').on('click', function() {
$('.pdv-cat').removeClass('active')
$(this).addClass('active')
let cat = $(this).data('cat')
})
$(document).on("click", ".pdv-card", function () {
let p = $(this).data('produto');
abrirModalProduto(p);
})
$('.pdv-cat').on('click', function () {
$('.pdv-cat').removeClass('active');
$(this).addClass('active');
let cat = $(this).data('cat');
$('#pdvLoader').show();
$('.row.g-1').html(""); // limpa a tela
$.get(path_url + "api/pdv-mobo/produtos-categoria", {empresa_id: $('#empresa_id').val(), categoria_id: cat}, function(produtos) {
$('#pdvLoader').hide();
if(!produtos.length){
$('.row.g-1').html('
Nenhum produto encontrado
');
return;
}
let html = "";
produtos.forEach(p => {
let img = p.imgApp;
html += `
${p.nome}
R$ ${ convertFloatToMoeda(p.valor_unitario)}
`;
});
$('.row.g-1').html(html);
// animação suave
setTimeout(() => {
$('.produto-item').addClass('show');
}, 30);
}).fail(() => {
toastr.error("Erro ao carregar produtos");
$('#pdvLoader').hide();
});
});
// FILTRAR POR NOME
$('#buscarProduto').on('keyup', function () {
$('.pdv-cat').removeClass('active')
$('.pdv-cat').first().addClass('active')
let pesquisa = $(this).val().toLowerCase().trim();
if(pesquisa){
$.get(path_url + "api/pdv-mobo/produtos-categoria", {empresa_id: $('#empresa_id').val(), categoria_id: 0, pesquisa: pesquisa}, function(produtos) {
$('#pdvLoader').hide();
if(!produtos.length){
$('.row.g-1').html('Nenhum produto encontrado
');
return;
}
let html = "";
produtos.forEach(p => {
let img = p.imgApp;
html += `
${p.nome}
R$ ${ convertFloatToMoeda(p.valor_unitario)}
`;
});
$('.row.g-1').html(html);
setTimeout(() => {
$('.produto-item').addClass('show');
}, 30);
}).fail(() => {
toastr.error("Erro ao carregar produtos");
$('#pdvLoader').hide();
});
}
});
var carrinho = [];
$('#modalAdicionar').on('click', function () {
let p = $(this).data('produto');
let qtd = parseFloat($('#modalQtd').val());
let valor = $('#modalValor').val().replace(',', '.');
if(!valor){
toastr.warning("Informe o valor unitário para continuar!");
return;
}
let observacao = $('#modalObservacao').val();
if(produto != null && produto.categoria && produto.categoria.tipo_pizza == 1 && !tamanho_id){
toastr.warning("Informe o tamanho para este produto!");
$('#btnEscolherAdicionais').trigger('click')
return;
}
// if(produto != null && produto.valor_com_adicional > 0){
// valor = produto.valor_com_adicional
// }
let item = {
id: p.id,
nome: p.nome,
valor_unitario: parseFloat(valor),
quantidade: qtd,
observacao: observacao,
subtotal: qtd * parseFloat(valor),
referencia: p.referencia,
codigo_barras: p.codigo_barras,
categoria_id: p.categoria_id,
img: p.imgApp,
adicionais_escolhidos: produto != null ? produto.adicionais_escolhidos : [],
adicionais_escolhidos_str: produto != null ? produto.adicionais_escolhidos_str : [],
sabores_escolhidos: produto != null ? produto.sabores_escolhidos : [],
sabores_escolhidos_str: produto != null ? produto.sabores_escolhidos_str : [],
tamanho_id: tamanho_id,
};
carrinho.push(item);
produto = null;
atualizarBotaoCarrinho();
$('#modalProduto').modal('hide');
$('#buscarProduto').val('');
$('.produto-item').show();
setTimeout(() => {
$('.produto-item').addClass('show');
}, 10);
});
function atualizarBotaoCarrinho() {
let totalItens = carrinho.reduce((sum, it) => sum + it.quantidade, 0);
let totalGeral = carrinho.reduce((sum, it) => sum + parseFloat(it.subtotal), 0);
$('#cartCount').text(totalItens);
if (totalItens > 0) {
$('#btnCarrinho').fadeIn(150);
$('#cartCount').addClass('cart-pulse');
setTimeout(() => {
$('#cartCount').removeClass('cart-pulse');
}, 1000);
} else {
$('#btnCarrinho').fadeOut(150);
}
$('#btnTotal').text("R$ " + convertFloatToMoeda(totalGeral));
}
$('#btnCarrinho').on('click', function () {
montarCarrinho();
$('#modalCarrinho').modal('show');
});
function montarCarrinho() {
let html = '';
carrinho.forEach((item, i) => {
let adicionaisHtml = "";
if (item.adicionais_escolhidos_str && item.adicionais_escolhidos_str.length > 0) {
adicionaisHtml = `
+ ${item.adicionais_escolhidos_str.join(', ')}
`;
}
let saboresHtml = "";
if (item.sabores_escolhidos_str && item.sabores_escolhidos_str.length > 0) {
saboresHtml = `
- 1/${item.sabores_escolhidos_str.length} ${item.sabores_escolhidos_str.join(', ')}
`;
}
html += `
${item.nome}
${item.quantidade} × R$ ${ convertFloatToMoeda(item.valor_unitario) }
${adicionaisHtml}
${saboresHtml}
R$ ${ convertFloatToMoeda(item.subtotal) }
`;
});
$('#carrinhoLista').html(html);
}
$('#btnQtdMais').on('click', function() {
let qtd = parseInt($('#modalQtd').val());
$('#modalQtd').val(qtd + 1);
});
$('#btnQtdMenos').on('click', function() {
let qtd = parseInt($('#modalQtd').val());
if (qtd > 1) {
$('#modalQtd').val(qtd - 1);
}
});
function removerItem(index) {
carrinho.splice(index, 1);
montarCarrinho();
atualizarBotaoCarrinho();
}
$('.escolherCliente').on('click', function () {
$('#modalClientes').modal('show');
});
function montarListaClientes(filtro = "") {
let html = "";
clientes.forEach(c => {
let nome = c.razao_social.toLowerCase();
let doc = (c.cpf_cnpj ?? "").toLowerCase();
if (nome.includes(filtro.toLowerCase()) || doc.includes(filtro.toLowerCase())) {
html += `
${c.razao_social}
${c.cpf_cnpj ?? ''}
${c.telefone ?? ''}
`;
}
});
$('#listaClientes').html(html);
}
$('#buscarCliente').on('keyup', function () {
montarListaClientes($(this).val());
});
var clienteSelecinado = null
function selecionarCliente(id) {
let cliente = clientes.find(c => c.id === id);
clienteSelecinado = id
$('#clienteNome').text(cliente.razao_social);
$('#modalClientes').modal('hide');
}
let pagamentos = [];
let formaSelecionada = null;
// ABRIR MODAL
$('#btnTotal').click(function () {
let total = $('#btnTotal').text();
if(convertMoedaToFloat(total) <= 0){
toastr.error("Adicione pelo menos 1 item para vender.");
return;
}
if(modelo == 'pedido'){
if(clienteSelecinado == null){
toastr.error("Selecione o cliente para esta venda.");
$('.escolherCliente').trigger('click')
return;
}
}
// zera pagamentos/inputs ao abrir
pagamentos = [];
formaSelecionada = null;
$('#finalizarDesconto').val('');
$('#valorForma').val('');
$('#listaPagamentos').html('');
$('#cpfNota').val('')
if(clienteSelecinado){
$('.div-cpf_cnpj').hide()
}else{
$('.div-cpf_cnpj').show()
}
$('#finalizarTotal').text(total);
atualizarResumoPagamento();
$('#modalFinalizar').modal('show');
});
function atualizarResumoPagamento() {
$('.finalizar-label').text('Falta')
let total = convertMoedaToFloat($('#btnTotal').text())
let desconto = parseFloat($('#finalizarDesconto').val().replace('.', '').replace(',', '.') || 0);
let acrescimo = parseFloat($('#finalizarAcrescimo').val().replace('.', '').replace(',', '.') || 0);
let frete = parseFloat($('#freteValor').val().replace('.', '').replace(',', '.') || 0);
let totalAPagar = total - desconto + acrescimo + frete;
if (totalAPagar < 0) totalAPagar = 0;
let pago = pagamentos.reduce((s, p) => s + p.valor, 0);
let falta = totalAPagar - pago;
$('#resumoTotal').text("R$ " + totalAPagar.toFixed(2).replace('.', ','));
$('#resumoPago').text("R$ " + pago.toFixed(2).replace('.', ','));
$('#resumoFalta').text("R$ " + falta.toFixed(2).replace('.', ','));
if(falta < 0){
$('.finalizar-label').text('Troco')
}
}
$('.pg-btn').on('click', function() {
$('.pg-btn').removeClass('pg-active');
$(this).addClass('pg-active');
formaSelecionada = $(this).data('pg');
let nome = $(this).text().trim();
$('#valorForma').attr('placeholder', "Valor em " + nome);
});
$('#btnAdicionarForma').on('click', function() {
if (!formaSelecionada) {
toastr.error("Selecione a forma de pagamento.");
return;
}
let valorStr = convertMoedaToFloat($('#valorForma').val());
let data = $('#vencimentoForma').val();
let valor = parseFloat(valorStr || 0);
if (isNaN(valor) || valor <= 0) {
toastr.error("Informe um valor válido.");
return;
}
pagamentos.push({
forma: formaSelecionada,
data: data,
valor: valor
});
$('#valorForma').val('');
renderizarPagamentos();
atualizarResumoPagamento();
});
function renderizarPagamentos() {
let html = '';
pagamentos.forEach((pg, i) => {
let label = '';
switch(pg.forma) {
case '01': label = 'Dinheiro'; break;
case '02': label = 'Cheque'; break;
case '03': label = 'Crédito'; break;
case '04': label = 'Débito'; break;
case '05': label = 'Crédito Loja'; break;
case '06': label = 'Crediário'; break;
case '10': label = 'Vale Alimentação'; break;
case '11': label = 'Vale Refeição'; break;
case '12': label = 'Vale Presente'; break;
case '13': label = 'Vale Combustível'; break;
case '14': label = 'Duplicata Mercantil'; break;
case '15': label = 'Boleto Bancário'; break;
case '16': label = 'Depósito Bancário'; break;
case '17': label = 'PIX'; break;
default: label = 'Outros'; break;
}
html += `
${label} ${ dataBR(pg.data) }
R$ ${pg.valor.toFixed(2).replace('.', ',')}
`;
});
$('#listaPagamentos').html(html);
}
function dataBR(dataISO) {
if (!dataISO) return "";
let partes = dataISO.split("-");
return partes[2] + "/" + partes[1] + "/" + partes[0];
}
function removerPagamento(index) {
pagamentos.splice(index, 1);
renderizarPagamentos();
atualizarResumoPagamento();
}
$('#finalizarDesconto').on('keyup change', function() {
atualizarResumoPagamento();
});
$('#finalizarAcrescimo').on('keyup change', function() {
atualizarResumoPagamento();
});
$('#finalizarRecebido').on('keyup', function () {
let total = convertMoedaToFloat($('#btnTotal').text())
let recebido = parseFloat($(this).val().replace(',', '.') || 0);
let desconto = parseFloat($('#finalizarDesconto').val().replace(',', '.') || 0);
let pagar = total - desconto;
let troco = recebido - pagar;
$('#finalizarTroco').text("R$ " + convertFloatToMoeda(troco));
});
var suspender = 0
$('#btnFinalizarVenda').click(function () {
$('#modalCarrinho').modal('hide');
$('#btnTotal').trigger('click')
})
$('#btnConfirmarVenda').click(function () {
salvarVenda()
})
function salvarVenda(){
let total = convertMoedaToFloat($('#btnTotal').text())
let desconto = parseFloat($('#finalizarDesconto').val().replace('.', '').replace(',', '.') || 0);
let acrescimo = parseFloat($('#finalizarAcrescimo').val().replace('.', '').replace(',', '.') || 0);
let valor_frete = parseFloat($('#freteValor').val().replace('.', '').replace(',', '.') || 0);
let totalAPagar = total - desconto + acrescimo + valor_frete;
if (totalAPagar < 0) totalAPagar = 0;
let pago = pagamentos.reduce((s, p) => s + p.valor, 0);
if (pagamentos.length === 0) {
// toastr.error("Adicione ao menos uma forma de pagamento.");
// return;
pago = totalAPagar
}
let troco = 0
if(suspender == 0 && modelo != 'pedido'){
if(formaSelecionada == null){
toastr.error("Selecione o tipo de pagamento para esta venda.");
return;
}
if (pago + 0.001 < totalAPagar) {
toastr.error("Total pago menor que o valor da venda.");
return;
}
let falta = parseFloat($('#resumoFalta').text().replace("R$", "").replace(",", ".").trim())
if(falta < 0){
troco = falta*-1
}
}
let frete = null
if($('#freteValor').val() != ''){
frete = {
valor: $('#freteValor').val(),
qtd_volumes: $('#freteQtdVolumes').val(),
numeracao_volumes: $('#freteNumVolumes').val(),
peso_bruto: $('#fretePresoBruto').val(),
peso_liquido: $('#fretePresoLiquido').val(),
especie: $('#freteEspecie').val(),
transportadora_id: $('#freteTransportadora').val(),
tipo: $('#freteTipo').val(),
placa: $('#fretePlaca').val(),
uf: $('#freteUf').val(),
}
}
let venda = {
itens: carrinho,
total: total,
desconto: desconto,
acrescimo: acrescimo,
valor_total: totalAPagar,
total_pago: pago,
tipo_pagamento: formaSelecionada,
troco: troco,
fatura: pagamentos,
cliente_id: clienteSelecinado,
observacao: $('#finalizarObs').val(),
data_atual: new Date().toLocaleString("pt-BR"),
empresa_id: $('#empresa_id').val(),
usuario_id: $('#usuario_id').val(),
venda_suspensa_id: $('#venda_suspensa_id').val(),
pedido_id: $('#pedido_id').val(),
cliente_cpf_cnpj: $('#cpfNota').val(),
natureza_id: $('#naturezaOperacao').length ? $('#naturezaOperacao').val() : null
};
if (frete != null) {
venda.frete = frete;
}
console.log("Venda Final:", venda);
// return;
let url = path_url + 'api/pdv-mobo/store'
if(suspender == 1){
url = path_url + 'api/pdv-mobo/suspender'
}
if(modelo == 'pedido'){
url = path_url + 'api/pdv-mobo/store-nfe'
$.post(url, venda)
.done((success) => {
// console.log(success)
swal({
title: "Sucesso",
text: "Venda finalizada com sucesso, deseja emitir a NFe?",
icon: "success",
buttons: true,
buttons: ["Não", "Sim"],
dangerMode: true,
}).then((isConfirm) => {
if (isConfirm) {
gerarNfe(success)
}else{
resetForm()
$('#modalFinalizar').modal('hide');
}
})
}).fail((err) => {
swal("Erro", "Algo deu errado ao salvar venda!", "error")
console.log(err)
});
}else{
$.post(url, venda)
.done((success) => {
if(suspender == 0){
swal({
title: "Sucesso",
text: "Venda finalizada com sucesso, deseja emitir a NFCe?",
icon: "success",
buttons: true,
buttons: ["Não", "Sim"],
dangerMode: true,
}).then((isConfirm) => {
if (isConfirm) {
gerarNfce(success)
}else{
resetForm()
$('#modalFinalizar').modal('hide');
}
})
}else{
swal("Sucesso", "Venda suspensa", "success")
.then(() => {
resetForm()
})
}
}).fail((err) => {
if(suspender == 1){
swal("Erro", "Algo deu errado ao suspender venda!", "error")
}else{
swal("Erro", "Algo deu errado ao salvar venda!", "error")
}
console.log(err)
});
}
}
function gerarNfce(venda) {
$('.loader').css('display', 'flex')
$('.loader-text').text('Emitindo NFCe..')
$.post(path_url + "api/nfce_painel/emitir", {
id: venda.id,
})
.done((success) => {
swal("Sucesso", "NFCe emitida " + success.recibo + " - chave: [" + success.chave + "]", "success")
.then(() => {
window.open(path_url + 'nfce/imprimir/' + venda.id, "_blank")
setTimeout(() => {
resetForm()
}, 100)
})
})
.fail((err) => {
console.log(err)
swal("Algo deu errado", err.responseJSON, "error")
})
.always(() => {
$('.loader').css('display', 'none')
resetForm()
$('#modalFinalizar').modal('hide')
});
}
function gerarNfe(venda) {
$('.loader').css('display', 'flex')
$('.loader-text').text('Emitindo NFe..')
$.post(path_url + "api/nfe_painel/emitir", {
id: venda.id,
})
.done((success) => {
swal("Sucesso", "NFe emitida " + success.recibo + " - chave: [" + success.chave + "]", "success")
.then(() => {
window.open(path_url + 'nfe/imprimir/' + venda.id, "_blank")
setTimeout(() => {
resetForm()
}, 100)
})
})
.fail((err) => {
console.log(err)
swal("Algo deu errado", err.responseJSON, "error")
})
.always(() => {
$('.loader').css('display', 'none')
resetForm()
$('#modalFinalizar').modal('hide')
});
}
function resetForm(){
if ($('.comanda-tag').length > 0) {
location.href = '/pdv-mobo'
}
$('.pg-btn').removeClass('pg-active');
suspender = 0
carrinho = []
formaSelecionada = null
atualizarBotaoCarrinho()
$('#buscarProduto').val('');
$('#buscarCliente').val('');
$('.produto-item').show();
setTimeout(() => {
$('.produto-item').addClass('show');
}, 10);
$('.pdv-cat').first().trigger('click')
$('#clienteNome').text('Cliente não selecionado');
clienteSelecinado = null
$('#cpfNota').val('');
$('#finalizarDesconto').val('');
$('#finalizarAcrescimo').val('');
$('#finalizarObs').val('');
$('#modalFrete').find('input').val('');
$('#modalFrete').find('select').val('').change();
}
$('#btnConfirmarSangria').on('click', function () {
let valor = convertMoedaToFloat($('#sangriaValor').val());
let obs = $('#sangriaObs').val().trim();
if (isNaN(valor) || valor <= 0) {
toastr.error("Informe um valor válido para a sangria.");
return;
}
let data = {
empresa_id: $('#empresa_id').val(),
usuario_id: $('#usuario_id').val(),
valor: valor,
observacao: obs
};
$.post(path_url + 'api/frenteCaixa/store-sangria', data)
.done((success) => {
toastr.success("Sangria realizada!")
$('#modalSangria').modal('hide');
$('#pdv-sidebar').removeClass('open');
$('.pdv-sidebar-overlay').fadeOut(150);
})
.fail((err) => {
toastr.error("Erro ao realizar sangria!")
})
})
$('#btnConfirmarSuprimento').on('click', function () {
let valor = convertMoedaToFloat($('#suprimentoValor').val());
let obs = $('#suprimentoObs').val().trim();
let tipo_pagamento = $('#suprimentoTipoPagamento').val();
if (isNaN(valor) || valor <= 0 || !tipo_pagamento) {
toastr.error("Informe um valor válido para o suprimento.");
return;
}
let data = {
empresa_id: $('#empresa_id').val(),
usuario_id: $('#usuario_id').val(),
valor: valor,
tipo_pagamento: tipo_pagamento,
observacao: obs
};
$.post(path_url + 'api/frenteCaixa/store-suprimento', data)
.done((success) => {
toastr.success("Suprimento realizado!")
$('#modalSuprimento').modal('hide');
$('#pdv-sidebar').removeClass('open');
$('.pdv-sidebar-overlay').fadeOut(150);
})
.fail((err) => {
toastr.error("Erro ao realizar suprimento!")
})
})
$(document).on("click", ".cs-btn-remover", function () {
let id = $(this).data("id");
let card = $(this).closest(".card-suspensa");
swal({
title: "Remover venda?",
text: "Essa ação não pode ser desfeita.",
icon: "warning",
buttons: ["Cancelar", "Remover"],
dangerMode: true,
})
.then((confirmou) => {
if (!confirmou) return;
$.ajax({
url: "/frontbox/destroy-suspensa/" + id,
method: "GET",
beforeSend: function () {
// loader opcional
}
})
.done(function () {
// Remover o card da tela suavemente
card.fadeOut(300, function () {
$(this).remove();
});
toastr.success("Venda suspensa removida!");
})
.fail(function (err) {
console.log(err);
toastr.error("Erro ao remover venda.");
});
});
});
$('#btnScan').on('click', function () {
$('#reader').show();
$('.pdv-produtos-container').hide();
$('.btn-close-scanner').removeClass('d-none')
scanner = new Html5Qrcode("reader");
scanner.start({ facingMode: "environment" },
{
fps: 10,
qrbox: { width: 250, height: 120 }
},
decodedText => {
$.get(path_url + 'api/pdv-mobo/produtos-codigo-barras', {empresa_id: $('#empresa_id').val(), codigo_barras: decodedText})
.done(function(produto) {
beepSucesso();
abrirModalProduto(produto);
})
.fail(function() {
toastr.error("Produto não encontrado ["+decodedText+"]");
});
},
errorMessage => {
}).catch(err => {
console.error(err);
toastr.error("Não foi possível acessar a câmera");
fecharScanner();
});
});
function beepSucesso(){
var audio = new Audio('/audio/beep.mp3');
audio.addEventListener('canplaythrough', function() {
audio.play();
});
}
function fecharScanner() {
if (scanner) {
scanner.stop().then(() => {
scanner.clear();
});
}
$('#reader').hide();
$('.pdv-produtos-container').show();
}
$(document).on("click", "#btnCloseScanner", function () {
fecharScanner();
$('.btn-close-scanner').addClass('d-none')
});
$(document).on('click', function (e) {
// se scanner não estiver visível, ignora
if (!$('#reader').is(':visible')) return;
// se clicou dentro do reader ou no botão de scan, não fecha
if ($(e.target).closest('#reader, #btnScan').length) return;
$("#btnCloseScanner").trigger('click')
});
var produto = null
var tamanho_id = null
var adicionaisEscolhidos = []
var saboresEscolhidos = []
var saboresEscolhidosStr = []
function abrirModalProduto(p) {
// console.log(p)
$('#btnEscolherAdicionais').addClass('d-none')
$('#modalNome').val(p.nome);
$('#modalValor').val(convertFloatToMoeda(p.valor_unitario))
$('#modalQtd').val(1);
$('#modalObservacao').val('')
$('#modalImagem').attr('src', p.imgApp ?? '/noimg.png');
if (p.gerenciar_estoque == 1) {
$('.estoque-box').show();
$('#modalEstoque').text(parseInt(p.estoque_atual));
} else {
$('.estoque-box').hide();
}
if(p.categoria && p.categoria.tipo_pizza == 1){
$('#btnEscolherAdicionais').text('Escolher Adicionais/Sabores')
$('#modalValor').val('')
$('#modalValor').prop('disabled', 1)
}else{
$('#btnEscolherAdicionais').text('Escolher Adicionais')
$('#modalValor').prop('disabled', 0)
}
if(p.adicionais && p.adicionais.length > 0){
produto = p
adicionaisEscolhidos = []
produto.valor_com_adicional = 0
produto.adicionais_escolhidos = []
produto.adicionais_escolhidos_str = []
produto.sabores_escolhidos = []
produto.sabores_escolhidos_str = []
$('#btnEscolherAdicionais').removeClass('d-none')
}
$('#modalAdicionar').data('produto', p);
$('#modalProduto').modal('show');
}
$('#btnEscolherAdicionais').on('click', function () {
$('#modalProduto').modal('hide');
setTimeout(() => {
$('#modalEscolherAdicionais').modal('show');
$('#modalEscolherAdicionais .modal-title').text(`Adicionais ${produto.nome}`);
$('#modalEscolherAdicionais .valor_unitario').html(`Valor unitário: R$ ${convertFloatToMoeda(produto.valor_unitario)}`);
$('#modalEscolherAdicionais #totalAdicionais').text(convertFloatToMoeda(produto.valor_unitario));
let html = '';
produto.adicionais.forEach(item => {
let checked = "";
if (produto.adicionais_escolhidos.includes(item.adicional.id)) {
checked = "checked";
}
html += `
`;
});
if(produto.categoria && produto.categoria.tipo_pizza == 1){
// console.log("Buscar sabores e tamanhos ...")
$('.total-adicional-card').hide()
$('#modalEscolherAdicionais .valor_unitario').hide()
$('.loader').css('display', 'flex')
$('.loader-text').text('Buscando sabores...')
$.get(path_url + "api/pdv-mobo/sabores-tamanhos",
{
empresa_id: $('#empresa_id').val(),
produto_id: produto.id,
sabores_escolhidos: JSON.stringify(produto.sabores_escolhidos)
})
.done((data) => {
// console.clear()
// console.log("sabores_escolhidos", produto.sabores_escolhidos)
saboresEscolhidos = produto.sabores_escolhidos
calcularValorPizza()
$('#modalEscolherAdicionais .sabores').html(data)
setTimeout(() => {
if(produto.tamanho_id){
$('#tamanhoPizza').val(produto.tamanho_id).change()
}
}, 100)
})
.fail((e) => {
console.log(e);
toastr.error("Não foi possivel buscar tamanhos e sabores!")
})
.always(() => {
$('.loader').css('display', 'none')
});
}
$('#modalEscolherAdicionais .adicionais').html(html);
atualizarTotalAdicionais()
}, 300);
});
function atualizarTotalAdicionais() {
let total = convertMoedaToFloat($('#modalEscolherAdicionais .valor_unitario').text());
$('.chk-adicional:checked').each(function () {
total += parseFloat($(this).data('valor'));
});
$('#totalAdicionais').text(convertFloatToMoeda(total));
calcularValorPizza()
}
$(document).on('click', '#btnConfirmarAdicionais', function () {
adicionaisEscolhidos = []
adicionaisEscolhidosStr = []
$('.chk-adicional:checked').each(function () {
adicionaisEscolhidos.push(parseInt($(this).val()))
adicionaisEscolhidosStr.push($(this).next().text())
});
if ($("#tamanhoPizza").length && saboresEscolhidos.length == 0) {
toastr.warning("Selecione o tamanho!");
return;
}
$('#modalEscolherAdicionais').modal('hide');
setTimeout(() => {
$('#modalProduto').modal('show');
let valorComAdicional = 0
if ($("#tamanhoPizza").length > 0) {
valorComAdicional = convertMoedaToFloat($('#valorPizza').text())
$('#modalValor').val(convertFloatToMoeda(valorComAdicional))
// console.log("fechando", saboresEscolhidos)
produto.sabores_escolhidos = saboresEscolhidos
produto.sabores_escolhidos_str = saboresEscolhidosStr
produto.tamanho_id = $('#tamanhoPizza').val()
}else{
valorComAdicional = convertMoedaToFloat($('#totalAdicionais').text())
$('#modalValor').val(convertFloatToMoeda(valorComAdicional))
produto.tamanho_id = null
}
produto.valor_com_adicional = valorComAdicional
produto.adicionais_escolhidos = adicionaisEscolhidos
produto.adicionais_escolhidos_str = adicionaisEscolhidosStr
}, 300);
});
$(document).on('click', '#btnSalvarComanda', function () {
let pedido_id = $('#pedido_id').val()
if(!pedido_id){
toastr.error("Não é possível salvar comanda sem referência!");
return;
}
let total = $('#btnTotal').text();
let data = {
pedido_id: pedido_id,
itens: carrinho,
total: convertMoedaToFloat(total),
cliente_id: clienteSelecinado
}
// console.log("comanda", data)
$.post(path_url + "api/pdv-mobo/update-comanda", data)
.done((success) => {
// console.log(success)
}).fail((err) => {
console.log(err)
});
});
$(document).on("keyup", "#filtrarSabores", function () {
let filtro = $(this).val().toLowerCase().trim();
$(".sabor-item").each(function () {
let texto = $(this).text().toLowerCase();
if (texto.includes(filtro)) {
$(this).show();
} else {
$(this).hide();
}
});
});
$(document).on('click', '#btnCancelarAdicionais', function () {
adicionaisEscolhidos = []
adicionaisEscolhidosStr = []
$('#modalEscolherAdicionais').modal('hide');
setTimeout(() => {
$('#modalProduto').modal('show');
}, 200)
});
var maximoSabores = null
$(document).on('change', '#tamanhoPizza', function () {
tamanho_id = $(this).val()
maximoSabores = $('#tamanhoPizza option:selected').data('max_sabores');
if(saboresEscolhidos.length == 0){
saboresEscolhidos.push(produto.id)
saboresEscolhidosStr.push(produto.nome);
}
calcularValorPizza();
if(tamanho_id){
$('.containerSabores').removeClass('d-none')
}else{
$('.containerSabores').addClass('d-none')
}
})
$(document).on('change', '.chk-adicional', function () {
atualizarTotalAdicionais();
});
$(document).on("keyup", "#filtrarComandas", function () {
let filtro = $(this).val().toLowerCase().trim();
$(".grid-comandas a").each(function () {
let texto = $(this).text().toLowerCase();
if (texto.includes(filtro)) {
$(this).show();
} else {
$(this).hide();
}
});
});
$(document).on("click", ".sabor-item", function () {
let id = $(this).data("id");
if (saboresEscolhidos.includes(id)) {
saboresEscolhidos = saboresEscolhidos.filter(s => s !== id);
$(this).removeClass("selecionado");
} else {
if(saboresEscolhidos.length+1 <= maximoSabores){
saboresEscolhidos.push(id);
saboresEscolhidosStr.push($(this).find('.sabor-nome').text());
$(this).addClass("selecionado");
}else{
toastr.warning(`Escolha até ${maximoSabores} sabor(es)!`)
return
}
}
calcularValorPizza();
});
function calcularValorPizza() {
if (!tamanho_id) return;
if (saboresEscolhidos.length === 0) {
return;
}
let valoresSabores = [];
let somaSabores = 0
let maiorValor = 0
let tipo_divisao_pizza = $('#tipo_divisao_pizza').val()
saboresEscolhidos.forEach(id => {
let elemento = $('.sabores-wrapper').find('.sabor_'+id)
// console.log(elemento)
// console.log(elemento.data('valores'))
valores = elemento.data('valores')
// let sabor = saboresPizza.find(s => s.id == id);
let t = valores.find(v => v.tamanho_id == tamanho_id);
let valor = parseFloat(t.valor)
if(valor > maiorValor){
maiorValor = valor
}
somaSabores += valor
});
let somaAdicionais = 0
$('.chk-adicional:checked').each(function () {
somaAdicionais += parseFloat($(this).data('valor'));
});
let valorFinal = maiorValor;
if(tipo_divisao_pizza == 'divide'){
valorFinal = somaSabores/saboresEscolhidos.length
}
$('#valorPizza').text(convertFloatToMoeda(valorFinal+somaAdicionais));
}
function abrirPopupImpressao(url) {
window.open(
url,
"popupCupom",
"width=400,height=600,scrollbars=yes,resizable=yes"
);
}