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" ); }