KOKINIO - MANAGER
Edit File: venta.js
$(function() { $("#vendedor").select2({ placeholder:"Selecciona el Vendedor", allowClear: true, ajax: { url: main_path+'/cliente/clientes', dataType: 'json', data: function (params) { var query = { search: params.term, } return query }, processResults: function (data) { const dataResult = data.map(res => { return { id: res.id, text: `${res.registro} ${res.nombre} ${res.ape_p ?? ""} ${res.ape_m ?? ""}` } }) return { results: dataResult }; } }, }); $('#fecha_venta').datepicker({ format: 'yyyy-mm-dd' }); }); var count = 0; var flavorActive = false var Venta = { guardar:function(e){ var id = $(e).data('id'); var vendedor = $('#vendedor').val(); var comentario = $('#comentario').val(); var fecha_venta = $("#fecha_venta").val(); var token = $('#token').val(); var cliente_comision_1 = $("#cliente-select2").val(); var cantidad_comision_1 = $("#cantidad_comision_1").val(); var cliente_comision_2 = $("#cliente-select3").val(); var cantidad_comision_2 = $("#cantidad_comision_2").val(); var cliente_comision_3 = $("#cliente-select4").val(); var cantidad_comision_3 = $("#cantidad_comision_3").val(); const folioVenta = $("#folio_venta").val(); const contactoVenta = $("#contacto_venta").val(); const tipoPago = $("#tpago").val(); const tipoPago2 = $("#tpago2").val(); const tipoPagoName = $("#tpago :selected").text(); const estatus = $("#estatus").val(); const banco = $("#banco").val(); const banco2 = $("#banco2").val(); const transferencia = $("#transferencia").val(); const transferencia2 = $("#transferencia2").val(); const pedimento = $("#pedimento").val(); const pedimento2 = $("#pedimento2").val(); const cantidadPago = $("#cantidad-pago").val(); const cantidadPago2 = $("#cantidad-pago2").val(); const vainilla = $('#vainilla').val() ? parseFloat($('#vainilla').val()) : 0 const chocolate = $('#chocolate').val() ? parseFloat($('#chocolate').val()) : 0 const fresa = $('#fresa').val() ? parseFloat($('#fresa').val()) : 0 const natural = $('#natural').val() ? parseFloat($('#natural').val()) : 0 const eucament = $('#eucament').val() ? parseFloat($('#eucament').val()) : 0 let flavors = {} if (flavorActive) { flavors = { vainilla, chocolate, fresa, natural, eucament, } } var venta = {}; for(var i = 0; i <= count; i++){ venta[i] = { 'cantidad' : $('#cantidad'+i).val(), 'producto' : $('#producto'+i).val() } } if(vendedor == ""){ swal("", "El vendedor no pude ir vacio", "warning"); $('#vendedor').css('border','1px solid red'); }else if(fecha_venta == ""){ swal("", "La fecha no pude ir vacia", "warning"); $('#fecha_venta').css('border','1px solid red'); }else if(folioVenta === ""){ swal("", "El Folio no pude ir vacio", "warning"); $('#folio_venta').css('border','1px solid red'); }else if(contactoVenta === ""){ swal("", "El Contacto no pude ir vacio", "warning"); $('#contacto_venta').css('border','1px solid red'); }else if(tipoPago === '0' && tipoPago2 === '0'){ swal("", "Seleccione el tipo de pago", "warning"); $('#tpago').css('border','1px solid red'); }else if(estatus === '0'){ swal("", "Selecciona un estatus", "warning"); $('#estatus').css('border','1px solid red'); }else if(flavorActive && (vainilla === 0 && fresa === 0 && chocolate === 0 && natural === 0 && eucament === 0)){ swal("", "Necesitas agregar cantidad en los sabores", "warning"); }else if(flavorActive && Venta.validateQuantityProduct(flavors)){ swal("", "Necesitas agregar cantidad en los sabores", "warning"); }else if(Venta.validateTotalPayment()){ swal("", Venta.validateTotalPayment(), "warning"); }else if($('#cantidad0').val() === "" || $('#producto0').val() === ""){ swal("", "Se requieren los datos de una venta", "warning"); $('#cantidad0').css('border','1px solid red'); $('#producto0').css('border','1px solid red'); }else{ var data = { 'id': id, 'vendedor': vendedor, 'comentario': comentario, 'fecha_venta': fecha_venta, 'venta': venta, '_token': token, cliente_comision_1, cantidad_comision_1, cliente_comision_2, cantidad_comision_2, cliente_comision_3, cantidad_comision_3, folioVenta, contactoVenta, tipoPago, tipoPago2, estatus, banco, banco2, transferencia, transferencia2, pedimento, pedimento2, cantidadPago, cantidadPago2, flavorActive, flavors }; Venta.send(data); } }, send:function(data){ $.ajax({ url:main_path+'/venta/guardar', data:data, type:"POST", dataType:"json", success:function(serv){ if(serv.status){ swal({ title: "", text: serv.message, icon: "success" }); // window.setTimeout(function(){window.location.href = main_path+'/venta/index'},2000); Venta.cleanModal() $("#modal-venta").modal('hide'); Menu.menuLayout('venta/index') }else{ var error = ""; if (serv.message.lenght > 1) { $.each(serv.message,function(i,val){ error += val+", "; }); } else { error += serv.message; } swal("",error, "error"); } }, error:function(serv){ console.log("Error"+serv); } }); }, update:function(e){ var id = $(e).data('id'); this.cleanModal(); //AJAX para ir a la DB y traer los datos especificos del ID $.get(main_path+'/venta/update',{'id':id},function(serv){ const selecteClient = new Option(`${serv.ventas[0].registro} ${serv.ventas[0].cliente}`, serv.ventas[0].cliente_id, false, false); $('#vendedor').append(selecteClient).trigger('change'); $('#fecha_venta').val(serv.ventas[0].fecha_venta); $('#comentario').val(serv.ventas[0].comentario); $('#cantidad0').val(serv.ventas[0].cantidad); $('#producto0').val(serv.ventas[0].producto_id); $('#total0').val(serv.ventas[0].total); $('#tantidad').val(serv.ventas[0].cantidad); $('#gtotal').val(serv.ventas[0].total); let i = 1; for(comisionPago of serv.comisionPago) { const selecteClient = new Option(`${comisionPago.registro} ${comisionPago.nombre} ${comisionPago.ape_p} ${comisionPago.ape_m}`, comisionPago.cliente_id, false, false); $('#cliente-select'+(i+1)).append(selecteClient).trigger('change'); $('#cantidad_comision_'+i).val(comisionPago.cantidad); $('#deletePago_'+i).attr('data-id', comisionPago.id); i++; } $('#addVenta').attr("disabled",true); $("#btn-update").attr("data-id",serv.ventas[0].id); $("#btn-update").text("Actualizar"); $(".modal-title").text("Editar Venta del Cliente :"+serv.ventas[0].registro); $("#modal-venta").modal('show'); }); }, warning:function(e){ swal({ title: "¿Estás seguro que quieres eliminar la venta ?", text: "Una vez que lo borres, no lo podrás recuperar", icon: "warning", buttons: true, dangerMode: true, }) .then((willDelete) => { if (willDelete) { Venta.delete(e); } else { swal("La venta no ha sido eliminado."); } }); }, delete:function(e){ var id = $(e).data('id'); $.get(main_path+'/venta/delete',{'id':id},function(serv){ if(serv.status){ swal({ title: "", text: serv.message, icon: "success" }); // window.setTimeout(function(){window.location.href = main_path+'/venta/index'},2000); Menu.menuLayout('venta/index') } }); }, add:function(e){ this.cleanModal(); Venta.getTipoPago() Venta.estatus() Venta.getFolio() $('#cliente-select').select2({ placeholder:"Selecciona el Cliente", allowClear: true, ajax: { url: main_path+'/cliente/clientes', dataType: 'json', data: function (params) { var query = { search: params.term, } return query }, processResults: function (data) { const dataResult = data.map(res => { return { id: res.id, text: `${res.registro} ${res.nombre} ${res.ape_p ?? ""} ${res.ape_m ?? ""}` } }) return { results: dataResult }; } }, }); $('#cliente-select2').select2({ placeholder:"Selecciona el Cliente", allowClear: true, ajax: { url: main_path+'/cliente/clientes', dataType: 'json', data: function (params) { var query = { search: params.term, } return query }, processResults: function (data) { const dataResult = data.map(res => { return { id: res.id, text: `${res.registro} ${res.nombre} ${res.ape_p ?? ""} ${res.ape_m ?? ""}` } }) return { results: dataResult }; } }, }); $('#cliente-select3').select2({ placeholder:"Selecciona el Cliente", allowClear: true, ajax: { url: main_path+'/cliente/clientes', dataType: 'json', data: function (params) { var query = { search: params.term, } return query }, processResults: function (data) { const dataResult = data.map(res => { return { id: res.id, text: `${res.registro} ${res.nombre} ${res.ape_p ?? ""} ${res.ape_m ?? ""}` } }) return { results: dataResult }; } }, }); $('#cliente-select4').select2({ placeholder:"Selecciona el Cliente", allowClear: true, ajax: { url: main_path+'/cliente/clientes', dataType: 'json', data: function (params) { var query = { search: params.term, } return query }, processResults: function (data) { const dataResult = data.map(res => { return { id: res.id, text: `${res.registro} ${res.nombre} ${res.ape_p ?? ""} ${res.ape_m ?? ""}` } }) return { results: dataResult }; } }, }); $(".modal-title").text("Agregar Nueva Venta"); $("#btn-update").text("Agregar"); $('#addVenta').removeAttr("disabled"); $("#modal-venta").modal('show'); }, cleanModal:function(e){ $('.modal-body').find('input[type=text],input[type=number],select').each(function (index, element) { $(element).val(''); }); $('#cliente-select').val('').trigger('change'); $('#cliente-select2').val('').trigger('change'); $('#cliente-select3').val('').trigger('change'); $('#cliente-select4').val('').trigger('change'); $("#btn-update").attr("data-id",0); }, total: function(e){ var count = $(e).data('count'); var cantidad = $(`#cantidad${count}`).val(); var producto = $(`#producto${count}`).val(); Venta.addSavores($(`#producto${count} :selected`).text()) // if(cantidad === "" || producto == ""){ // swal("", "Producto o Cantidad no debe ir vacio", "warning") // }else{ var costo = $('#producto'+count+' :selected').data('costo-mx'); var cantidad = $("#cantidad"+count).val(); var total = cantidad * costo; $("#total"+count).val(total); let tcantidad = 0; let gtotal = 0; for(var i = 0; i<=count; i++){ tcantidad += parseFloat($("#cantidad"+i).val()); gtotal += parseFloat($("#total"+i).val()); } $("#tcantidad").val(tcantidad); $("#gtotal").val(gtotal); // } }, addSection:function(e){ var cantidad = $(`#cantidad${count}`).val(); var producto = $(`#producto${count}`).val(); if(cantidad == ""){ swal("","Necesitas Agregar la cantidad para agregar un nuevo campo","warning"); $('#cantidad'+count).css('border','1px solid red'); }else if(producto == ""){ swal("","Necesitas Agregar la cantidad para agregar un nuevo campo","warning"); $('#cantidad'+count).css('border','1px solid red'); }else{ count ++; $.get(main_path+'/venta/sectionVenta',{count :count},function(section){ $('#venta-productos').append(section); }); } }, show:function(e){ var id = $(e).data("id"); $.get(main_path+'/venta/update',{'id': id}, function(serv){ $('#no_registro_span').text(serv.ventas[0].registro); $('#cliente_span').text(serv.ventas[0].cliente); $('#fecha_span').text(serv.ventas[0].fecha_venta); $('#comentario_span').text(serv.ventas[0].comentario); $('#producto_span').text(serv.ventas[0].descripcion); $('#cantidad_span').text(serv.ventas[0].cantidad); $('#total_span').text(serv.ventas[0].total); $(".modal-title").text("ver Venta de Cliente: "+serv.ventas[0].registro); $("#modal-venta-ver").modal("show"); }); }, getVentas:function(e, limit){ var cliente = $("#cliente-select").val(); var token = $("#token").val(); var month = $("#month").val(); var year = $("#year").val(); const loader = `<div id='loader-ventas' style="position: absolute;top: 10%;left: 50%"><img style="width: 40%" src="${main_path}/img/Loading_2.gif" /></div>` $(".content-wrapper").append(loader) $.post(main_path+"/venta/getVentas",{'_token':token, 'cliente':cliente, 'month':month, 'year':year, limit: limit}, function(html){ $('#loader-ventas').remove() $("#table-venta").html('').append(html); var txtyear, txtmonth; if(year == ""){ txtyear = (new Date()).getFullYear(); }else{ txtyear = $("#year :selected").text(); } if(month == ""){ txtmonth = (new Date()).getMonth(); }else{ txtmonth = $("#month :selected").text(); } $('#date-ventas').text(txtmonth+" "+txtyear) }); }, print:function(e){ var id = $(e).data('id'); window.open(main_path+"/report/venta/"+id,"_blank"); }, selected:function(e){ var count = parseInt($("#print-more").text()); if($(e).attr('data-selected') == '0'){ if(count >= 2){ return false; } $(e).attr('data-selected',1).css('background-color','#378cbe'); count++; $("#print-more").attr('data-id'+count,$(e).attr('data-id')); }else if($(e).attr('data-selected') == '1'){ $(e).attr('data-selected',0).css('background-color','white'); $("#print-more").attr('data-id'+count,''); count--; } $("#print-more").text(count); }, print2:function(e){ var count = parseInt($("#print-more").text()); if(count == 0){ return false; } var id = $('#print-more').attr('data-id1'); var id2 = $('#print-more').attr('data-id2'); window.open(main_path+"/report/venta/"+id+"/"+id2,"_blank"); }, approve: function(e) { const data = { _token: $('#table-venta').data('token'), venta_id: $(e).data('id') }; $.ajax({ url: main_path+'/venta/approve', data, type: "POST", dataType: "JSON", success:function(serv){ if(serv.status) { swal({ title: "", text: serv.message, icon: "success" }); $($(e).parent()).html('').text('aprovado'); }else { var error = ""; $.each(serv.message,function(i,val){ error += val+", "; }); swal("",error, "error"); } }, error:function(serv){ console.log("Error"+serv); } }); }, getMonths: (e) => { $.get(main_path+'/red/getMonths', {year: $(e).val()}, (resp) => { $('#month').html('').html(resp); }); }, pagination: function(i) { const token = $('#token').val(); let limit = '0, 100'; if (i !== 1) { const limit1 = parseInt(i * 100); const limit2 = (parseInt(limit1) - (100)); limit = `${limit2}, ${limit1}`; } // window.location.href = main_path+"/venta/index/"+limit; // Venta.getVentas(null, limit) Menu.menuLayout(`/venta/index/${limit}`) }, pagination2: function(i) { const token = $('#token').val(); let limit = '0, 100'; if (i !== 1) { const limit1 = parseInt(i * 100); const limit2 = (parseInt(limit1) - (100)); limit = `${limit2}, ${limit1}`; } Venta.getVentas(null, limit) }, getTipoPago: () => { $.get(`${main_path}/tipoPago/tipoPago`, (resp) => { $("#tpago").empty() $("#tpago2").empty() const select = '<option value="0">Selecciona</option>' $("#tpago").append(select) $("#tpago2").append(select) resp.map((tipoPago) => { const option = `<option value='${tipoPago.id}'>${tipoPago.tipo_pago}</option>` $("#tpago").append(option) $("#tpago2").append(option) }) }) }, onChangeTipoPago: (e) => { const tipo = $(e).data('tipo') const addTipo = tipo === 2 ? '2' : '' const tipoPago = $(`#tpago${addTipo} :selected`).text() const tipoDetalle = $(`#tipo_detalle${addTipo}`) tipoDetalle.empty() switch (tipoPago) { case 'Tarjeta': case 'Transferencia': case 'Deposito': Venta.tarjeta(tipoDetalle, addTipo); break; case 'Pedimento': Venta.pedimento(tipoDetalle, addTipo); break; case 'Efectivo': Venta.efectivo(tipoDetalle, addTipo); break; default: break; } }, tarjeta: (tipoDetalle, addTipo) => { const tipoBanco = `<div class="form-group col-md-4"> <label class="control-label" for="banco${addTipo}">Banco: </label> <select id="banco${addTipo}" name="banco${addTipo}" class="form-control"> <option>Selecciona</option> </select> </div> <div class="form-group col-md-4"> <label class="control-label" for="transferencia${addTipo}">Transferencia: </label> <input type="text" class="form-control pull-right" id="transferencia${addTipo}"/> </div> <div class="form-group col-md-4"> <label class="control-label" for="cantidad-pago${addTipo}">Cantidad: </label> <input type="number" class="form-control pull-right" id="cantidad-pago${addTipo}"/> </div>` tipoDetalle.append(tipoBanco) $.get(`${main_path}/banco/banco`, (resp) => { resp.map((banco) => { const option = `<option value='${banco.id}'>${banco.banco}</option>` $(`#banco${addTipo}`).append(option) }) }) }, pedimento: (tipoDetalle, addTipo) => { const tipoPedimento = `<div class="form-group col-md-5"> <label class="control-label" for="pedimento${addTipo}">Pedimento: </label> <select id="pedimento${addTipo}" class="form-control select2" style="width: 100%;" tabindex="-1" aria-hidden="true"> </select> </div> <div class="form-group col-md-5 col-md-offset-2"> <label class="control-label" for="cantidad${addTipo}">Cantidad: </label> <input type="number" class="form-control pull-right" id="cantidad-pago${addTipo}"/> </div>` tipoDetalle.append(tipoPedimento) $(`#pedimento${addTipo}`).select2({ placeholder:"Selecciona el Cliente", allowClear: true, ajax: { url: main_path+'/cliente/clientes', dataType: 'json', data: function (params) { var query = { search: params.term, } return query }, processResults: function (data) { const dataResult = data.map(res => { return { id: res.id, text: `${res.registro} ${res.nombre} ${res.ape_p ?? ""} ${res.ape_m ?? ""}` } }) return { results: dataResult }; } }, }); }, efectivo: (tipoDetalle, addTipo) => { const tipoEfectivo = `<div class="form-group col-md-4"> <label class="control-label" for="cantidad${addTipo}">Cantidad: </label> <input type="number" class="form-control pull-right" id="cantidad-pago${addTipo}"/> </div>` tipoDetalle.append(tipoEfectivo) }, estatus: () => { const estatusInput = $("#estatus") estatusInput.empty() $.get(`${main_path}/estatus/estatus`, (resp) => { resp.map((estatus) => { const option = `<option value='${estatus.id}'>${estatus.estatus}</option>` estatusInput.append(option) }) }) }, addSavores: (element) => { $('#producto_detalle').empty() flavorActive = false const flavors = `<div class="form-group col-md-2 col-md-offset-1"> <label class="control-label" for="vainilla">Vainilla: </label> <input class="form-control" type="number" id="vainilla" name="vainilla" min=0 placeholder="" /> </div> <div class="form-group col-md-2"> <label class="control-label" for="fresa">Fresa: </label> <input class="form-control" type="number" id="fresa" name="fresa" min=0 placeholder="" /> </div> <div class="form-group col-md-2"> <label class="control-label" for="natural">Natural: </label> <input class="form-control" type="number" id="natural" name="natural" min=0 placeholder="" /> </div> <div class="form-group col-md-2"> <label class="control-label" for="chocolate">Chocolate: </label> <input class="form-control" type="number" id="chocolate" name="chocolate" min=0 placeholder="" /> </div> <div class="form-group col-md-2"> <label class="control-label" for="eucament">Eucament: </label> <input class="form-control" type="number" id="eucament" name="eucament" min=0 placeholder="" /> </div>` if (element.trim() === 'Caja con 24 Botes Dulet' || element.trim() === 'Caja con 12 Botes Dulet') { $('#producto_detalle').append(flavors) flavorActive = true } }, getFolio: () => { $.get(`${main_path}/venta/getFolio`, (folio) => { $('#folio_venta').val(folio) }) }, validateQuantityProduct: (flavors) => { const eucament = flavors.eucament > 0 ? flavors.eucament / 2 : 0 delete flavors.eucament let totalFlavors = Object.values(flavors).reduce((a, b) => a + b) totalFlavors += eucament Venta.getQuantityProduct(totalFlavors).then((resp) => { if (!resp.status) { swal("", `La cantidad de los sabores no coincide con la caja seleccionada con total de ${resp.data} y tu tienes ${totalFlavors}`, "warning"); } }) }, getQuantityProduct: (total) => { return new Promise( (resolve) => { const producto = $('#producto0 :selected').text(); const cantidad = parseInt($('#cantidad0').val()) $.get(`${main_path}/producto/getQuantityProduct`, {producto: producto.trim(), cantidad, total }, (cantidad) => { return resolve(cantidad) }) }, (reject) => { console.log('None') } ) }, validateTotalPayment: () => { const total = $('#total0').val() ? parseFloat($('#total0').val()) : 0 const payment = $('#cantidad-pago').val() ? parseFloat($('#cantidad-pago').val()) : 0 const payment2 = $('#cantidad-pago2').val() ? parseFloat($('#cantidad-pago2').val()) : 0 const comision = $('#cantidad_comision_1').val() ? parseFloat($('#cantidad_comision_1').val()) : 0 const comision2 = $('#cantidad_comision_2').val() ? parseFloat($('#cantidad_comision_2').val()) : 0 const comision3 = $('#cantidad_comision_3').val() ? parseFloat($('#cantidad_comision_3').val()) : 0 const sumPayment = payment + payment2 + comision + comision2 + comision3 if (sumPayment < total) { return `El pago $${sumPayment} no puede ser menor al total $${total}` } else { return false } } }