1488 lines
42 KiB
JavaScript
1488 lines
42 KiB
JavaScript
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"
|
||
);
|
||
}
|
||
|
||
|
||
|