arcadiasuite/plus/public/js/pdv_mobo.js

1488 lines
42 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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('<div class="text-center text-muted mt-3">Nenhum produto encontrado</div>');
return;
}
let html = "";
produtos.forEach(p => {
let img = p.imgApp;
html += `
<div class="col-4 produto-item show" data-cat="${p.categoria_id}">
<div class="pdv-card" data-produto='${JSON.stringify(p)}'>
<img src="${img}">
<div class="pdv-card-title">${p.nome}</div>
<div class="pdv-card-price">R$ ${ convertFloatToMoeda(p.valor_unitario)}</div>
</div>
</div>
`;
});
$('.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('<div class="text-center text-muted mt-3">Nenhum produto encontrado</div>');
return;
}
let html = "";
produtos.forEach(p => {
let img = p.imgApp;
html += `
<div class="col-4 produto-item show" data-cat="${p.categoria_id}">
<div class="pdv-card" data-produto='${JSON.stringify(p)}'>
<img src="${img}">
<div class="pdv-card-title">${p.nome}</div>
<div class="pdv-card-price">R$ ${ convertFloatToMoeda(p.valor_unitario)}</div>
</div>
</div>
`;
});
$('.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 = `
<div class="item-adicionais">
<small class="text-muted">
+ ${item.adicionais_escolhidos_str.join(', ')}
</small>
</div>
`;
}
let saboresHtml = "";
if (item.sabores_escolhidos_str && item.sabores_escolhidos_str.length > 0) {
saboresHtml = `
<div class="item-adicionais">
<small class="text-muted">
- 1/${item.sabores_escolhidos_str.length} ${item.sabores_escolhidos_str.join(', ')}
</small>
</div>
`;
}
html += `
<div class="item-carrinho">
<div class="item-left">
<img src="${item.img ?? '/noimg.png'}" class="item-img">
</div>
<div class="item-info flex-grow-1">
<strong>${item.nome}</strong><br>
<small>${item.quantidade} × R$ ${ convertFloatToMoeda(item.valor_unitario) }</small>
${adicionaisHtml}
${saboresHtml}
</div>
<div class="text-end">
<div class="item-valor">
R$ ${ convertFloatToMoeda(item.subtotal) }
</div>
<button class="item-remove" onclick="removerItem(${i})">Remover</button>
</div>
</div>
`;
});
$('#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 += `
<div class="card-cliente">
<div>
<strong>${c.razao_social}</strong>
<small>${c.cpf_cnpj ?? ''}</small>
<small>${c.telefone ?? ''}</small>
</div>
<button class="cliente-btn-select" onclick="selecionarCliente(${c.id})">Selecionar</button>
</div>
`;
}
});
$('#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 += `
<div class="linha-pagamento">
<div>${label} ${ dataBR(pg.data) }</div>
<div>
R$ ${pg.valor.toFixed(2).replace('.', ',')}
<button class="btn-remover-pg" onclick="removerPagamento(${i})">Remover</button>
</div>
</div>
`;
});
$('#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: <strong>R$ ${convertFloatToMoeda(produto.valor_unitario)}</strong>`);
$('#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 += `
<label class="custom-checkbox">
<input ${checked} type="checkbox" class="chk-adicional" value="${item.adicional.id}" data-valor="${item.adicional.valor}">
<b>${item.adicional.nome}</b>
<span class="ms-auto">
R$ ${ convertFloatToMoeda(item.adicional.valor) }
</span>
</label>
`;
});
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"
);
}