const navText = [ '', '' ]; const datepickerES = { clearText: 'Borrar', clearStatus: '', closeText: 'Cerrar', closeStatus: 'Cerrar sin modificar', prevText: '<Ant', prevStatus: 'Ver el mes anterior', nextText: 'Sig>', nextStatus: 'Ver el mes siguiente', currentText: 'Hoy', currentStatus: 'Ver el mes actual', monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'], monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'], monthStatus: 'Ver otro mes', yearStatus: 'Ver otro año', weekHeader: 'Sm', weekStatus: '', dayNames: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'], dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb'], dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sá'], dayStatus: 'Usar DD como primer día de la semana', dateStatus: 'Seleccionar DD, MM de', dateFormat: 'dd/mm/yy', firstDay: 1, initStatus: 'Seleccionar fecha', isRTL: false }; class Web { static inputImporteClass = ".input-importe:not(.input-importe-carrito-crm):not(.input-importe-ticket-devolucion)"; static init() { $(document).ready(function (e) { Web.markUIReady(); Web.initPasswordToggles(); Web.initImporteInputs(); Web.initBotonesToggle(); $.datepicker.setDefaults(datepickerES); $(".tooltipStandardHTML").not(".tooltipstered").tooltipster({animation: 'grow',interactive:true, position:'bottom', contentAsHTML: true}); $('.bootstrap-select').on('changed.bs.select', function (e, clickedIndex, isSelected, previousValue) { if (isSelected === null) return; $(this).find("select").removeClass("error"); }); $("body").on("click", ".inp-button-editable + button", function (e) { $(this).parent().find("input, select").prop("disabled", false).prop("readonly", false).focus(); }); $("body").on("click", ".btn-abre-menu, #btn-cerrar-menu-web", function (e) { $("#wrapper > aside").toggleClass("open"); }); }); } static markUIReady() { const enableTransitions = function () { $("body").addClass("ui-ready"); }; if (window.requestAnimationFrame) { window.requestAnimationFrame(function () { window.requestAnimationFrame(enableTransitions); }); return; } setTimeout(enableTransitions, 30); } static notify(msg, error = false) { const type = error ? "danger" : "success"; $.notify({ message: msg, }, { type: type, placement: { from: "bottom", align: "right" }, delay: 2000 }); } static initPedidosNuevosWeb(url, urlTicketsWeb) { if (Web.pedidosNuevosWebInicializado) { return; } Web.pedidosNuevosWebInicializado = true; $(document).ready(function () { const aviso = $("#aviso-pedidos-nuevos-web"); const contadorMenu = $("#num-pedidos-nuevos-web-menu"); const textoAviso = $("#aviso-pedidos-nuevos-web-texto"); const texto = aviso.data("texto") || ""; const pintar = function (numPedidos) { const num = parseInt(numPedidos, 10) || 0; contadorMenu.text(num).toggleClass("d-none", num === 0); textoAviso.text(texto + ": " + num); aviso.toggleClass("d-none", num === 0); }; const consultar = function () { if (Web.pedidosNuevosWebConsultando) { return; } Web.pedidosNuevosWebConsultando = true; $.ajax({ url: url, type: "GET", dataType: "json", data: {accion: "consultar", CSRF: CSRF} }).done(function (response) { if (response && response.error_number >= 0) { pintar(response.numPedidos); } }).always(function () { Web.pedidosNuevosWebConsultando = false; }); }; $("body").on("click", ".nav-item-tickets, #aviso-pedidos-nuevos-web", function (event) { if (contadorMenu.hasClass("d-none")) { return; } event.preventDefault(); if (Web.pedidosNuevosWebMarcando) { return; } Web.pedidosNuevosWebMarcando = true; $.ajax({ url: url, type: "POST", dataType: "json", data: {accion: "marcarVistos", CSRF: CSRF} }).done(function (response) { if (response && response.error_number >= 0) { pintar(0); window.location.href = urlTicketsWeb; } }).always(function () { Web.pedidosNuevosWebMarcando = false; }); }); consultar(); window.setInterval(consultar, 30000); }); } static limpiarImporte(valor) { let valorLimpio = (valor || "").replace(/€/g, "").replace(/\s+/g, ""); valorLimpio = valorLimpio.replace(/[^0-9,]/g, ""); const partes = valorLimpio.split(","); if (partes.length > 1) { const parteEntera = partes.shift(); const parteDecimal = partes.join("").substring(0, 2); valorLimpio = parteEntera + "," + parteDecimal; } return valorLimpio; } static formatearImporte(valor) { const valorLimpio = Web.limpiarImporte(valor); return valorLimpio ? valorLimpio + "€" : ""; } static limpiarComaFinalImporte(valor) { const valorLimpio = Web.limpiarImporte(valor); return valorLimpio.endsWith(",") ? valorLimpio.slice(0, -1) : valorLimpio; } static formatearImporteConEspacio(valor) { const valorFormateado = Web.formatearImporte(valor); if (!valorFormateado) { return ""; } return valorFormateado.replace(/(\S)(€)$/, "$1 $2"); } static formatearImporteConEspacioSinComaFinal(valor) { const valorLimpio = Web.limpiarComaFinalImporte(valor); return Web.formatearImporteConEspacio(valorLimpio); } static posicionarCursorImporte(input) { if (!input || typeof input.setSelectionRange !== "function") { return; } const posicionCursor = Web.limpiarImporte(input.value).length; input.setSelectionRange(posicionCursor, posicionCursor); } static corregirCursorImporte(input) { if (!input || typeof input.setSelectionRange !== "function") { return; } const posicionMaxima = Web.limpiarImporte(input.value).length; const posicionActual = input.selectionStart ?? posicionMaxima; if (posicionActual > posicionMaxima) { input.setSelectionRange(posicionMaxima, posicionMaxima); } } static initImporteInputs() { if (Web.importeInputsEventsBound) { return; } Web.importeInputsEventsBound = true; $("body").on("keydown", Web.inputImporteClass, function (event) { const teclasPermitidas = [ "Backspace", "Delete", "Tab", "Enter", "Escape", "ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown", "Home", "End" ]; if (event.ctrlKey || event.metaKey) { return; } if (teclasPermitidas.includes(event.key)) { return; } if (/^[0-9]$/.test(event.key)) { return; } if (event.key === ",") { const valorLimpio = Web.limpiarImporte($(this).val()); if (!valorLimpio.includes(",")) { return; } } event.preventDefault(); }); $("body").on("input", Web.inputImporteClass, function () { $(this).val(Web.formatearImporteConEspacio($(this).val())); Web.posicionarCursorImporte(this); }); $("body").on("focus", Web.inputImporteClass, function () { $(this).val(Web.formatearImporteConEspacio($(this).val())); Web.posicionarCursorImporte(this); }); $("body").on("click", Web.inputImporteClass, function () { Web.corregirCursorImporte(this); }); $("body").on("blur", Web.inputImporteClass, function () { $(this).val(Web.formatearImporteConEspacioSinComaFinal($(this).val())); }); } static initBotonesToggle() { if (Web.botonesToggleEventsBound) return; Web.botonesToggleEventsBound = true; $("body").on("click", ".btn-toggle-active", function () { const boton = $(this); const activo = !boton.hasClass("active"); boton.toggleClass("active", activo).attr("aria-pressed", activo ? "true" : "false"); const idInput = boton.attr("data-input"); if (idInput) $(idInput.charAt(0) === "#" ? idInput : "#" + idInput).val(activo ? "1" : "0"); }); } static initPasswordToggles(scope) { const showLabel = "Mostrar contrase\u00f1a"; const hideLabel = "Ocultar contrase\u00f1a"; const $scope = scope ? $(scope) : $(document); $scope.find("input.password-toggle").each(function (index, element) { const $input = $(element); if (!$input.is('[type="password"], [type="text"]')) { return; } if (!$input.attr("id")) { $input.attr("id", "password-toggle-" + index + "-" + Date.now()); } if (!$input.parent().hasClass("password-toggle-wrap")) { $input.wrap('
'); } let $button = $input.siblings(".password-toggle-button"); if (!$button.length) { $button = $(''); $input.after($button); } const isVisible = $input.attr("type") === "text"; $button .toggleClass("is-visible", isVisible) .attr("aria-controls", $input.attr("id")) .attr("aria-label", isVisible ? hideLabel : showLabel) .attr("aria-pressed", isVisible ? "true" : "false") .attr("title", isVisible ? hideLabel : showLabel); }); if (!Web.passwordToggleEventsBound) { Web.passwordToggleEventsBound = true; $(document).on("click", ".password-toggle-button", function (event) { event.preventDefault(); const $button = $(this); const $input = $button.siblings("input.password-toggle").first(); if (!$input.length) { return; } const isVisible = $input.attr("type") === "text"; const nextType = isVisible ? "password" : "text"; const nextLabel = isVisible ? showLabel : hideLabel; $input.attr("type", nextType).trigger("focus"); $button .toggleClass("is-visible", !isVisible) .attr("aria-label", nextLabel) .attr("aria-pressed", !isVisible ? "true" : "false") .attr("title", nextLabel); }); if (window.MutationObserver) { Web.passwordToggleObserver = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { $(mutation.addedNodes).each(function () { if (this.nodeType === 1) { Web.initPasswordToggles(this); } }); }); }); Web.passwordToggleObserver.observe(document.body, { childList: true, subtree: true }); } } } static refrescaTabla(idTabla) { $(".tooltipStandard").not(".tooltipstered").tooltipster({ animation: 'grow', interactive: true, position: 'bottom', contentAsHTML: true }); $(".inputIconLupa, .inputMostrar, #filtros").removeClass("d-none"); $(".form-control").removeClass().addClass("form-control-b"); const elementFiltros = $("#filtros-tabla.d-none"); if (elementFiltros.length > 0) { $(".table-header-btns").append(elementFiltros).removeClass("d-none"); elementFiltros.removeClass("d-none"); } else { if ($(".table-header-btns #filtros-tabla").length == 0) $(".table-header-btns").addClass("d-none"); } const elementTabs = $("#tabs-tabla.d-none"); if (elementTabs.length) { const columns = $("#" + idTabla + " thead tr th").length; $("#" + idTabla + " thead") .removeClass("d-none") .prepend( $("").append( $("", { colspan: columns, class: "th-tabs-tabla" }).append( elementTabs.removeClass("d-none") ) ) ); } var numItems = 0; let tabla = eval("tabla" + idTabla); if (typeof tabla != "undefined") { numItems = tabla.page.info().recordsDisplay; } else if ($.fn.dataTable.isDataTable('#' + idTabla)) { tabla = $('#' + idTabla).DataTable(); numItems = tabla.page.info().recordsDisplay; } let itemsMostrando = $("#" + idTabla + "_length select").length > 0 ? $("#" + idTabla + "_length select").val() : 10; if (numItems > itemsMostrando) { $("#" + idTabla + "_wrapper .pagination-footer").removeClass("opacity-0"); } else { $("#" + idTabla + "_wrapper .pagination-footer").addClass("opacity-0"); } $("#"+idTabla+" tbody [data-parent-class]:not([data-parent-class=''])").each(function () { $(this).closest("tr").addClass($(this).data("parent-class")); }); Web.aplicaTablaCustomResponsive(idTabla); //Formato movil const numColumnaMv = 1; const numColumnas = tabla.columns()[0].length; if ($("#" + idTabla).hasClass("tablaMovil")) { const w = $(window).outerWidth(); if (w <= 767) //Ocultar { for (let i = 0; i < numColumnas; i++) { tabla.column(i).visible((numColumnaMv == i ? true : false)); } } else //Mostrar { for (let i = 0; i < numColumnas; i++) { let txt = $(tabla.columns(i).header()).text(); tabla.column(i).visible((txt == "oculto" || numColumnaMv == i ? false : true)); } } } } static aplicaTablaCustomResponsive(idTabla) { const tabla = $("#" + idTabla + ".tabla-custom-responsive"); if (!tabla.length) { return; } const etiquetas = tabla.find("thead tr").last().children("th").map(function () { return $.trim($(this).text()); }).get(); tabla.find("tbody tr:not(.child)").each(function () { $(this).children("td").each(function (indice) { const celda = $(this); celda.attr("data-label", etiquetas[indice] || ""); if (!celda.children(".tabla-custom-responsive-valor").length) { celda.contents().wrapAll("
"); } }); }); tabla.find("tbody tr.child").remove(); } static initTabs(elementId, callback) { const element = $("#"+elementId); element.find("button").on("click", function () { element.find("button.active").removeClass("active"); $(this).addClass("active"); if (callback) { callback($(this).attr("data-id")); } }); } } function findPos(obj) { var curtop = 0; if (obj.offsetParent) { do { curtop += obj.offsetTop; } while (obj = obj.offsetParent); return [curtop]; } } function isEmail(email) { var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; return regex.test(email); } $(document).ready(function () { if ($.fn.dataTable != undefined) { $.fn.dataTable.ext.errMode = function (settings, helpPage, message) { $.notify( { title: "Error: ", message: "Se ha producido un error inesperado", }, { type: 'danger', placement: { from: "top", align: "center" }, delay: 10000 }); }; $.extend($.fn.dataTable.defaults, { "language": { "colvis": "", "sProcessing": "Procesando...", "sLengthMenu": "Filas por página: _MENU_", "sZeroRecords": "No se han encontrado resultados", "sEmptyTable": "Sin datos todavía", "sInfo": "Mostrando de la entrada _START_ a la _END_ de un total de _TOTAL_ entradas", "sInfoEmpty": "Todavía no hay datos", "sInfoFiltered": "()", "sSearchPlaceholder": "Buscar", "sInfoPostFix": "", "sSearch": "", "sUrl": "", "oPaginate": { //"sFirst": " ", "sPrevious": '', "sNext": '', //"sLast": " " } } }); } }); function preparaLugar(pais, provincia, poblacion, idInputPais, idInputProvincia, idInputLocalidad) { if (pais > 0) { actualizaProvincias(idInputLocalidad, idInputProvincia, idInputPais, provincia, pais, provincia, poblacion, undefined); } $('#' + idInputPais).on('changed.bs.select', function (e, clickedIndex, isSelected, previousValue) { //console.log(e, clickedIndex, isSelected, previousValue, $(this).val(), $('#frmServicioProvincia').val(), $('#frmServicioProvincia').selectpicker("val")); actualizaProvincias(idInputLocalidad, idInputProvincia, idInputPais, provincia, undefined, undefined, undefined, undefined, undefined, undefined, true); }); /*$("body").on("change", "#"+idInputPais, function() { actualizaProvincias(idInputLocalidad,idInputProvincia, idInputPais, provincia); });*/ if (provincia > 0) { actualizaCiudades(idInputLocalidad, idInputProvincia, idInputPais, poblacion, pais, provincia, poblacion, $("#" + idInputProvincia).val() * 1); } $('#' + idInputProvincia).on('changed.bs.select', function (e, clickedIndex, isSelected, previousValue) { //console.log(e, clickedIndex, isSelected, previousValue, $(this).val(), $('#frmServicioProvincia').val(), $('#frmServicioProvincia').selectpicker("val")); if (isSelected === null) return; $('#' + idInputProvincia).removeClass("error"); actualizaCiudades(idInputLocalidad, idInputProvincia, idInputPais, undefined, $("#" + idInputPais).val() * 1, $("#" + idInputProvincia).val() * 1); }); $('#' + idInputLocalidad).on('changed.bs.select', function (e, clickedIndex, isSelected, previousValue) { if (isSelected === null) return; $('#' + idInputLocalidad).removeClass("error"); }); } function actualizaProvincias(idCampoLocalidad, idCampoRegion, idCampoPais, idRegionPreEstablecida, forceIdPais, forceIdRegion, forceIdLocalidad, onFinish, textoSelect, textoLoading, actualizarLocalidad) { if (forceIdPais == undefined) { forceIdPais = $("#" + idCampoPais).val(); } if (forceIdRegion == undefined) { forceIdRegion = $("#" + idCampoRegion).val(); } if (forceIdLocalidad == undefined) { forceIdLocalidad = $("#" + idCampoLocalidad).val(); } if (textoSelect == undefined) { //textoSelect = ""; textoSelect = ""; } //var textoSelectLoc = "Localidad"; var textoSelectLoc = ""; if (textoLoading == undefined) { textoLoading = ""; } var data = {idPais: forceIdPais}; $("#" + idCampoRegion).empty(); $("#" + idCampoRegion).append(""); $("#" + idCampoRegion).selectpicker("refresh"); $("#" + idCampoRegion).selectpicker('val', 0); if (actualizarLocalidad) { $("#" + idCampoLocalidad).empty(); $("#" + idCampoLocalidad).append(""); $("#" + idCampoLocalidad).selectpicker("refresh"); $("#" + idCampoLocalidad).selectpicker('val', 0); } var returned = $.ajax( { url: "https://gestion.elositodeclaudia.com/ajax/ubicacion/Ubicacion.listadoRegiones.php?CSRF=" + CSRF, type: "POST", dataType: "json", data: data, error: function (XMLHttpRequest, textStatus, errorThrown) { //ClassBlockUI.abrirBlockUIEstandarMensaje(XMLHttpRequest.responseText, true); }, success: function (data) { $("#" + idCampoRegion).empty(); $("#" + idCampoRegion).append(""); for (var index in data) { $("#" + idCampoRegion).append(""); } $("#" + idCampoRegion).selectpicker("refresh"); if (idRegionPreEstablecida != undefined && idRegionPreEstablecida != "") { $("#" + idCampoRegion).val(idRegionPreEstablecida); } else { $("#" + idCampoRegion).val(0); } $("#" + idCampoRegion).selectpicker("refresh"); if (actualizarLocalidad) { $("#" + idCampoLocalidad).empty(); $("#" + idCampoLocalidad).append(""); $("#" + idCampoLocalidad).val(0); $("#" + idCampoLocalidad).selectpicker("refresh"); } if (onFinish != undefined && typeof (onFinish) == "function") { onFinish(); } } }); } function actualizaCiudades(idCampoLocalidad, idCampoRegion, idCampoPais, idLocalidadPreEstablecida, forceIdPais, forceIdRegion, forceIdLocalidad, onFinish, textoSelect, textoLoading) { if (forceIdPais == undefined) { forceIdPais = $("#" + idCampoPais).val(); } if (forceIdRegion == undefined) { forceIdRegion = $("#" + idCampoRegion).val(); } if (forceIdLocalidad == undefined) { forceIdLocalidad = $("#" + idCampoLocalidad).val(); } if (textoSelect == undefined) { //textoSelect = ""; textoSelect = ""; } if (textoLoading == undefined) { textoLoading = ""; } var data = { idPais: forceIdPais, idRegion: forceIdRegion }; $("#" + idCampoLocalidad).empty(); $("#" + idCampoLocalidad).append(""); $("#" + idCampoLocalidad).selectpicker("refresh"); $("#" + idCampoLocalidad).selectpicker('val', 0); var returned = $.ajax( { url: "https://gestion.elositodeclaudia.com/ajax/ubicacion/Ubicacion.listadoCiudades.php?CSRF=" + CSRF, type: "POST", dataType: "json", data: data, error: function (XMLHttpRequest, textStatus, errorThrown) { //ClassBlockUI.abrirBlockUIEstandarMensaje(XMLHttpRequest.responseText, true); }, success: function (data) { $("#" + idCampoLocalidad).empty(); $("#" + idCampoLocalidad).append(""); for (var index in data) { $("#" + idCampoLocalidad).append(""); } $("#" + idCampoLocalidad).selectpicker("refresh"); if (idLocalidadPreEstablecida != undefined) { $("#" + idCampoLocalidad).val(idLocalidadPreEstablecida); } else { $("#" + idCampoLocalidad).val(0); } $("#" + idCampoLocalidad).selectpicker("refresh"); if (onFinish != undefined && typeof (onFinish) == "function") { onFinish(); } } }); } /* ClassBlockUI.abrirBlockUIEstandar(contenedorIDAMostrar[, accionCerrar, headerText, extraClass, restaurarElemento]); ClassBlockUI.abrirBlockUIEstandarMensaje(mensaje[, isAlertOrButtons, onClose]); ClassBlockUI.abrirBlockUIConfirm(mensaje, textoBotonAceptar, accionBotonAceptar, textoBotonCancelar[, accionBotonCancelar]); //accionBotonCancelar="close" ClassBlockUI.abrirBlockUIEsperePorFavor:([mensaje]); */ var ClassBlockUI = { restaurarElemento: function(data) { var body = $("body"); var history = body.data('blockUIEstandar.history'); data = data || history; if (!data || data.restaurado) return; data.restaurado = true; data.el.style.display = data.display; data.el.style.position = data.position; if (data.parent) data.parent.appendChild(data.el); if (history === data) { var previous = data.previous; while (previous && previous.restaurado) previous = previous.previous; if (previous) body.data('blockUIEstandar.history', previous); else body.removeData('blockUIEstandar.history'); } $("#"+data.generatedId).remove(); }, abrirBlockUIEstandar: function(contenedorIDAMostrar, accionCerrar, headerText, extraClass, restaurarElemento) { if(restaurarElemento || restaurarElemento == undefined) { while ($("body").data('blockUIEstandar.history')) ClassBlockUI.restaurarElemento(); } $(".modalAutoHide").modal("hide"); if($(".modal").length>0){$("body").addClass("modal-open")} if(contenedorIDAMostrar == undefined || $("#"+contenedorIDAMostrar).length == 0){return;} var blockUIId="blockUI_"+contenedorIDAMostrar; if ($("#"+blockUIId).length) { ClassBlockUI.blockUIEstandarCounter = (ClassBlockUI.blockUIEstandarCounter || 0) + 1; blockUIId += "_" + ClassBlockUI.blockUIEstandarCounter; } extraClass = extraClass == undefined ? "" : extraClass; //modal-lg var object = $("#"+contenedorIDAMostrar); var node = object[0]; var data = {}; data.previous = $("body").data('blockUIEstandar.history'); $("body").data('blockUIEstandar.history', data); data.el = node; data.parent = node.parentNode; data.display = node.style.display; data.position = node.style.position; data.generatedId = blockUIId; data.object = object; if (data.parent) data.parent.removeChild(node); var header = headerText != undefined ? headerText : ""; var message = ''+ ''; $("body").append(message); var modal = $("#"+blockUIId); modal.find(".modal-body").append(node); modal.find(".modal-dialog").addClass("fadeIn"); modal.on('hidden.bs.modal', function () { ClassBlockUI.restaurarElemento(data); }) var myModal = new bootstrap.Modal($(modal)[0], { keyboard: false }) myModal.show(); if(accionCerrar==undefined) //boton cerrar tiene accion por defecto { $("#"+blockUIId+" .btnCerrarModalEquis").click(function(){ myModal.hide(); if($(".modal").length>0){$("body").addClass("modal-open")} }); } else if(accionCerrar==false) //oculta el boton cerrar { $("#"+blockUIId+" .btnCerrarModalEquis").hide(); } else //boton cerrar con accion especial { $("#"+blockUIId+" .btnCerrarModalEquis").click(accionCerrar); } return modal; }, abrirBlockUIEstandarMensaje: function(mensaje, isAlertOrButtons, onClose, extraClass, title) { $(".modalAutoHide").modal("hide"); if($(".modal").length>0){$("body").addClass("modal-open")} var blockUIId="blockUI_"+new Date().getTime(); extraClass = extraClass == null || extraClass == undefined ? "" : extraClass; //modal-lg title = title == null || title == undefined ? "Aviso" : title; if(isAlertOrButtons==undefined) isAlertOrButtons=false; if(onClose==undefined) onClose=false; var botonera = ""; var botoneraEspecial = false; if(isAlertOrButtons === false) { botonera = ""; } else if (isAlertOrButtons === true) { let textoBoton = "Aceptar"; botonera = `
`; } else { botoneraEspecial = true; botonera = "
"; for(var index in isAlertOrButtons) { botonera += " "+isAlertOrButtons[index]["text"]+" "; } botonera += "
"; } var message = ''; message += ''; $("body").append(message); var modal = $("#"+blockUIId); modal.find(".modal-dialog").css("animation-duration", "500ms").addClass("zoomIn"); modal.on('hidden.bs.modal', function () { modal.remove(); }) var myModal = new bootstrap.Modal($(modal)[0], { keyboard: false }); myModal.show(); //Acciones de los botones especiales if(botoneraEspecial) { for(var index in isAlertOrButtons) { if(isAlertOrButtons[index]["action"] == "close") { isAlertOrButtons[index]["action"] = function(){ myModal.hide(); if($(".modal").length>0){$("body").addClass("modal-open")} }; } $("#"+blockUIId+" ."+index).unbind("click").click(isAlertOrButtons[index]["action"]); } } var fnOnClose; if(onClose==false) { fnOnClose = function(){ myModal.hide(); if($(".modal").length>0){$("body").addClass("modal-open")} }; } else if (typeof onClose === "function") { fnOnClose = function(){onClose()}; } else if (onClose == "location") { fnOnClose = function(){window.location.reload()}; } else if (onClose == "back") { fnOnClose = function(){history.go(-1);}; } else { fnOnClose = function(){window.location = onClose}; } $("#"+blockUIId+" .btnCerrarBlockUIAlert, #"+blockUIId+" .btnCerrarModalEquis").unbind("click").click(fnOnClose); return modal; }, abrirBlockUIConfirm: function(mensaje, textoAceptar, accionAceptar, textoCancelar, accionCancelar, extraClass, title) { accionCancelar = accionCancelar == undefined ? "close" : accionCancelar; extraClass = extraClass == null || extraClass == undefined ? "" : extraClass; var buttons = { "btnAceptarBUI_CONFIRM": { "text": textoAceptar, "action": accionAceptar }, "btnCancelarBUI_CONFIRM": { "text": textoCancelar, "action": accionCancelar } }; return ClassBlockUI.abrirBlockUIEstandarMensaje(mensaje, buttons, false, extraClass, title); }, abrirBlockUIEsperePorFavor: function(mensaje) { if(mensaje == undefined){ mensaje = "
Espere por favor...
"; }; return ClassBlockUI.abrirBlockUIEstandarMensaje(mensaje, undefined, false, "modalEspere"); } }; class ClassUsuarios { static initLogin() { $(document).ready(function() { $("#login-contrasena, #login-usuario").pressEnter(doLogin); $("#btn-acceder").click(doLogin); }); function doLogin() { Utils.sendStandardAjax("frm-login", "https://gestion.elositodeclaudia.com/ajax/Usuarios.login.php?CSRF="+CSRF, {successCallback: "data-location"}); } } static initEstadisticas() { $(document).ready(function() { const duracion = 1000; const tiempoPorPaso = 16; const numeroPasos = Math.max(1, Math.ceil(duracion / tiempoPorPaso)); function parsearObjetivo(valorOriginal) { const texto = String(valorOriginal || "").trim(); const tieneEuro = texto.includes("\u20AC"); const textoLimpio = texto.replace(/[^\d,.-]/g, ""); const tieneComaDecimal = textoLimpio.includes(","); const textoNormalizado = tieneComaDecimal ? textoLimpio.replace(/\./g, "").replace(",", ".") : textoLimpio.replace(/^(-?\d{1,3}(?:\.\d{3})+)$/, function(match) { return match.replace(/\./g, ""); }); const valor = parseFloat(textoNormalizado); const decimales = tieneComaDecimal ? textoLimpio.split(",").pop().length : textoNormalizado.includes(".") ? textoNormalizado.split(".").pop().length : 0; return { valor: Number.isFinite(valor) ? valor : 0, decimales, tieneEuro }; } function formatearNumeroEs(valor, decimales) { const numeroFijo = valor.toFixed(decimales); const partes = numeroFijo.split("."); const parteEntera = partes[0].replace(/\B(?=(\d{3})+(?!\d))/g, "."); const parteDecimal = partes[1] ? "," + partes[1] : ""; return parteEntera + parteDecimal; } function formatearValor(valor, decimales, tieneEuro) { const numeroFormateado = formatearNumeroEs(valor, decimales); return tieneEuro ? `${numeroFormateado} \u20AC` : numeroFormateado; } $(".item-estadistica-valor[data-objetivo]").each(function () { const contador = this; const {valor: objetivo, decimales, tieneEuro} = parsearObjetivo(contador.getAttribute("data-objetivo")); const inicio = performance.now(); const incremento = objetivo / numeroPasos; if (objetivo <= 0) { contador.textContent = formatearValor(0, decimales, tieneEuro); return; } function animar(ahora) { const tiempoTranscurrido = ahora - inicio; const pasoActual = Math.floor(tiempoTranscurrido / tiempoPorPaso); const valorActual = Math.min(objetivo, pasoActual * incremento); contador.textContent = formatearValor(valorActual, decimales, tieneEuro); if (tiempoTranscurrido < duracion) { requestAnimationFrame(animar); } else { contador.textContent = formatearValor(objetivo, decimales, tieneEuro); } } requestAnimationFrame(animar); }); }); } } window.ClassUsuarios = ClassUsuarios; class ClassEstadisticas { static chartVentas = null; static chartReservas = null; static chartRankingClientes = null; static tipoVentas = "mes"; static filtrosVentas = { idCategoria: 0, idMarca: 0, tallas: [] }; static initVentas() { $(document).ready(function () { const canvas = document.getElementById("ventas-grafico"); if (!canvas || ClassEstadisticas.chartVentas) { return; } ClassEstadisticas.chartVentas = new Chart(canvas, { type: "bar", data: { labels: [], datasets: [] }, options: { responsive: true, maintainAspectRatio: false, interaction: {mode: "index", intersect: false}, scales: { x: { grid: {display: false, drawBorder: false}, border: {display: false}, ticks: { color: "#666", font: {family: "Inter, serif", size: 12, weight: "500"} } }, y: { grid: {color: "#E6E6E6", drawBorder: false}, border: {display: false}, ticks: { color: "#666", callback: function (valor) { return new Intl.NumberFormat("es-ES", { maximumFractionDigits: 0 }).format(valor) + " €"; } } } }, animations: { y: { easing: 'easeOutCubic', from: (ctx) => { if (ctx.type === 'data') { if (ctx.mode === 'default' && !ctx.dropped) { ctx.dropped = true; return ctx.chart.scales.y.getPixelForValue(0); } } } } }, plugins: { legend: { display: false }, tooltip: { callbacks: { label: function (contexto) { return contexto.dataset.label + ": " + new Intl.NumberFormat("es-ES", { style: "currency", currency: "EUR" }).format(contexto.parsed.y || 0); } } } } } }); $("#btn-abre-filtros-estadisticas, .bloque-derecha-cerrar").on("click", function () { $("#filtros-estadisticas").toggleClass("open"); }); const formularioFiltros = $("#filtros-estadisticas"); const selectCategoria = $("#frm-estadistica-categoria"); const selectMarca = $("#frm-estadistica-firma"); const selectTallas = $("#frm-estadistica-tallas"); function actualizarGraficoConFiltros() { ClassEstadisticas.actualizarFiltrosVentas({ idCategoria: selectCategoria.val(), idMarca: selectMarca.val(), tallas: selectTallas.val() }); } selectCategoria.add(selectMarca).add(selectTallas).on("change", actualizarGraficoConFiltros); formularioFiltros.on("reset", function () { window.setTimeout(function () { selectCategoria.val("").selectpicker("refresh"); selectMarca.val("").selectpicker("refresh"); selectTallas.val([]).selectpicker("refresh"); ClassEstadisticas.actualizarFiltrosVentas(); }); }); $(".custom-tabs button[data-tipo]").on("click", function () { const boton = $(this); ClassEstadisticas.tipoVentas = boton.data("tipo"); boton.closest(".custom-tabs").find("button").removeClass("active"); boton.addClass("active"); ClassEstadisticas.cargarVentas(); }); ClassEstadisticas.cargarVentas(); }); } static initRankingClientes() { $(document).ready(function () { const canvas = document.getElementById("ranking-grafico"); if (!canvas || ClassEstadisticas.chartRankingClientes) { return; } const pluginRanking = { id: "pluginRankingClientes", beforeDatasetsDraw: function (chart) { const {ctx, chartArea} = chart; const barras = chart.getDatasetMeta(0).data; ctx.save(); ctx.fillStyle = "#f8dcea"; barras.forEach(function (barra) { const alto = barra.height; ctx.beginPath(); ctx.roundRect(chartArea.left, barra.y - alto / 2, chartArea.right - chartArea.left, alto, alto / 2); ctx.fill(); }); ctx.restore(); }, afterDatasetsDraw: function (chart) { const {ctx, chartArea} = chart; const barras = chart.getDatasetMeta(0).data; const nombres = chart.data.labels || []; const valores = chart.data.datasets[0].data || []; ctx.save(); ctx.textBaseline = "bottom"; barras.forEach(function (barra, index) { const yTexto = barra.y - barra.height / 2 - 6; ctx.font = "14px Inter, serif"; ctx.textAlign = "right"; ctx.fillStyle = index < 3 ? "#d66a00" : "#98a2b3"; ctx.fillText(String(index + 1), chartArea.left - 20, yTexto); ctx.textAlign = "left"; ctx.fillStyle = "#444"; ctx.fillText(nombres[index], chartArea.left, yTexto); ctx.font = "bold 14px Inter, serif"; ctx.textAlign = "right"; ctx.fillText(ClassEstadisticas.formatearEuros(valores[index]), chartArea.right, yTexto); }); ctx.restore(); } }; ClassEstadisticas.chartRankingClientes = new Chart(canvas, { type: "bar", data: {labels: [], datasets: [{data: [], backgroundColor: [], borderRadius: 10, borderSkipped: false, barThickness: 7}]}, options: { indexAxis: "y", responsive: true, maintainAspectRatio: false, resizeDelay: 100, layout: {padding: {top: 25, right: 5, bottom: 5, left: 48}}, scales: { x: {beginAtZero: true, display: false, grid: {display: false}, border: {display: false}}, y: {display: false, offset: true, grid: {display: false}, border: {display: false}} }, plugins: { legend: {display: false}, tooltip: { callbacks: { title: function (items) { return items[0].chart.data.labels[items[0].dataIndex]; }, label: function (contexto) { return ClassEstadisticas.formatearEuros(contexto.raw); } } } } }, plugins: [pluginRanking] }); const fechasRanking = $("#fecha-desde, #fecha-hasta"); fechasRanking.datepicker({maxDate: new Date(), inline: true}).mask("99/99/9999"); fechasRanking.on("keyup change", function () { const longitud = $(this).val().length; if (longitud === 0 || longitud === 10) { ClassEstadisticas.cargarRankingClientes(); } }); fechasRanking.on("change", function () { if ($(this).val().length !== 10) { $(this).val(""); } }); ClassEstadisticas.cargarRankingClientes(); }); } static initReservas() { $(document).ready(function () { const canvas = document.getElementById("canvas-reservas"); if (!canvas || ClassEstadisticas.chartReservas) { return; } ClassEstadisticas.chartReservas = new Chart(canvas, { type: "doughnut", data: { labels: [], datasets: [{ data: [], backgroundColor: [], borderColor: "#FFFFFF", borderWidth: 5, hoverOffset: 0 }] }, options: { responsive: true, maintainAspectRatio: false, cutout: "62%", plugins: { legend: {display: false}, tooltip: {enabled: false} } } }); $("#frm-estadistica-reserva-temporada").on("change", function () { ClassEstadisticas.cargarReservas(); }); ClassEstadisticas.cargarReservas(); }); } static cargarReservas() { if (!ClassEstadisticas.chartReservas) { return; } const temporadaSeleccionada = $("#frm-estadistica-reserva-temporada option:selected"); const fechaInicio = Number(temporadaSeleccionada.data("inicio")) || 0; const fechaFin = Number(temporadaSeleccionada.data("fin")) || 0; $.getJSON("https://gestion.elositodeclaudia.com/ajax/estadisticas/Estadisticas.reservas.php", { CSRF: CSRF, fechaInicio: fechaInicio, fechaFin: fechaFin }).done(function (respuesta) { if (!respuesta || respuesta.error_number < 0) { return; } ClassEstadisticas.actualizarGraficoReservas(respuesta); }); } static actualizarGraficoReservas(respuesta) { const completadas = Number(respuesta.completadas) || 0; const pendientes = Number(respuesta.pendientes) || 0; const total = Number(respuesta.total) || 0; const dataset = ClassEstadisticas.chartReservas.data.datasets[0]; if (total > 0) { ClassEstadisticas.chartReservas.data.labels = ["Completadas", "Pendientes"]; dataset.data = [completadas, pendientes]; dataset.backgroundColor = ["#059669", "#E8168C"]; dataset.borderWidth = 5; } else { ClassEstadisticas.chartReservas.data.labels = []; dataset.data = [1]; dataset.backgroundColor = ["#E6E6E6"]; dataset.borderWidth = 0; } $("#estadistica-reservas-completadas").text(completadas); $("#estadistica-reservas-pendientes").text(pendientes); $("#estadistica-reservas-total").text(total); ClassEstadisticas.chartReservas.update(); } static formatearEuros(valor) { return new Intl.NumberFormat("es-ES", {style: "currency", currency: "EUR"}).format(Number(valor) || 0); } static cargarRankingClientes() { if (!ClassEstadisticas.chartRankingClientes) { return; } $.getJSON("https://gestion.elositodeclaudia.com/ajax/estadisticas/Estadisticas.rankingClientes.php", { CSRF: CSRF, fechaDesde: $("#fecha-desde").val(), fechaHasta: $("#fecha-hasta").val() }).done(function (respuesta) { if (!respuesta || respuesta.error_number < 0) { return; } const datos = respuesta.data || []; ClassEstadisticas.chartRankingClientes.data.labels = respuesta.labels || []; ClassEstadisticas.chartRankingClientes.data.datasets[0].data = datos; ClassEstadisticas.chartRankingClientes.data.datasets[0].backgroundColor = datos.map(function (_, index) { return index === 0 ? "#E8168C" : index === 1 ? "#F472B6" : "#FCA5A5"; }); ClassEstadisticas.chartRankingClientes.update(); }); } static cargarVentas() { if (!ClassEstadisticas.chartVentas) { return; } $.getJSON("https://gestion.elositodeclaudia.com/ajax/estadisticas/Estadisticas.ventas.php", { CSRF: CSRF, tipo: ClassEstadisticas.tipoVentas, idCategoria: ClassEstadisticas.filtrosVentas.idCategoria, idMarca: ClassEstadisticas.filtrosVentas.idMarca, tallas: ClassEstadisticas.filtrosVentas.tallas }).done(function (respuesta) { if (!respuesta || respuesta.error_number < 0) { return; } ClassEstadisticas.chartVentas.data.labels = respuesta.labels || []; ClassEstadisticas.chartVentas.data.datasets = respuesta.datasets || []; ClassEstadisticas.chartVentas.update(); }); } static actualizarFiltrosVentas(filtros = {}) { ClassEstadisticas.filtrosVentas = { idCategoria: Number(filtros.idCategoria) || 0, idMarca: Number(filtros.idMarca) || 0, tallas: Array.isArray(filtros.tallas) ? filtros.tallas : [] }; ClassEstadisticas.cargarVentas(); } } window.ClassEstadisticas = ClassEstadisticas; class ClassClientes { static initListado() { $(document).ready(function () { ClassClientes.initModal(function (data) { $(".modal").modal("hide"); tablatablaClientes.ajax.reload(); Web.notify(data["error_message"]); }); $("body").on("click", ".btn-baja-cliente", function () { const id = $(this).attr("data-id"); const nombre = $(this).attr("data-nombre"); ClassBlockUI.abrirBlockUIConfirm("Va a dar de baja al cliente %1%, ¿Desea continuar?".replace("%1%", nombre), "Continuar", function () { Utils.sendStandardAjax(null, "https://gestion.elositodeclaudia.com/ajax/clientes/Cliente.baja.php?id=" + id, { successCallback: function (data) { $(".modal").modal("hide"); Web.notify(data["error_message"], data["error_number"] < 0); if (data["error_number"] >= 0) tablatablaClientes.ajax.reload(); } }); }, "Cancelar"); }); }); } static initModal(callbackOnSuccessSave = null) { if (callbackOnSuccessSave) ClassClientes.callbackListado = callbackOnSuccessSave; if (ClassClientes.modalInicializado) return; ClassClientes.modalInicializado = true; preparaLugar(28, 652, 62833, undefined, ClassClientes.formId + "-provincia", ClassClientes.formId + "-localidad"); $("body").off("click.classClientes", "#btn-guardar-cliente").on("click.classClientes", "#btn-guardar-cliente", function () { ClassClientes.guardarCliente(); }); $("body").off("click.classClientes", ".btn-editar-cliente").on("click.classClientes", ".btn-editar-cliente", function () { const id = $(this).attr("data-id"); ClassClientes.callbackOnSuccessSave = ClassClientes.callbackListado; document.getElementById(ClassClientes.formId).reset(); const codigoElement = $("#" + ClassClientes.formId + "-codigo-fidelizacion"); const saldoElement = $("#" + ClassClientes.formId + "-saldo-fidelizacion"); const containerEnlaceComprasElement = $(".container-enlace-compras"); if (id > 0) { ClassClientes.cargarCliente(id, function (data) { if (data["error_number"] < 0) { ClassBlockUI.abrirBlockUIEstandarMensaje(data["error_message"], true); return; } const datos = data["datos"]; $("#" + ClassClientes.formId + "-id").val(id); codigoElement.val(datos["codigoFidelizacion"]); codigoElement.prop("readonly", true); saldoElement.val(datos["saldoDisponible"]); saldoElement.prop("readonly", true); saldoElement.trigger("input"); $("#" + ClassClientes.formId + "-nombre").val(datos["nombre"]); $("#" + ClassClientes.formId + "-email").val(datos["email"]); $("#" + ClassClientes.formId + "-nif").val(datos["nif"]); $("#" + ClassClientes.formId + "-telefono").val(datos["telefono"]); $("#" + ClassClientes.formId + "-direccion").val(datos["direccion"]); $("#" + ClassClientes.formId + "-cp").val(datos["codigoPostal"]); $("#" + ClassClientes.formId + "-provincia").val(datos["idProvincia"]); $("#" + ClassClientes.formId + "-provincia").selectpicker("refresh"); //$("#frm-cliente-localidad").val(datos["idLocalidad"]); actualizaCiudades(ClassClientes.formId + "-localidad", ClassClientes.formId + "-provincia", undefined, datos["idLocalidad"], 28, datos["idProvincia"], datos["idLocalidad"]); containerEnlaceComprasElement.removeClass("d-none"); containerEnlaceComprasElement.find("a").attr("href", "https://gestion.elositodeclaudia.com/compras-realizadas/?cliente="+id); ClassClientes.abreModal("Editar cliente"); }); } else { ClassClientes.prepararNuevoCliente(); ClassClientes.abreModal("Nuevo Cliente"); } }); } static prepararNuevoCliente(nombre = "") { document.getElementById(ClassClientes.formId).reset(); $("#" + ClassClientes.formId + "-id").val(-1); $(".container-enlace-compras").addClass("d-none"); $("#" + ClassClientes.formId + "-codigo-fidelizacion").prop("readonly", false); $("#" + ClassClientes.formId + "-saldo-fidelizacion").prop("readonly", false); $("#" + ClassClientes.formId + "-nombre").val(nombre); } static abrirNuevoCliente(nombre = "", callbackOnSuccess = null, callbackOnCancel = null) { ClassClientes.initModal(); ClassClientes.prepararNuevoCliente(nombre); let guardado = false; ClassClientes.callbackOnSuccessSave = function (data) { guardado = true; ClassClientes.cerrarModal(function () { ClassClientes.callbackOnSuccessSave = ClassClientes.callbackListado; if (callbackOnSuccess) callbackOnSuccess(data["datos"], data); }); }; const modal = ClassClientes.abreModal("Nuevo Cliente"); modal.one("hidden.bs.modal.classClientes", function () { if (guardado) return; ClassClientes.callbackOnSuccessSave = ClassClientes.callbackListado; if (callbackOnCancel) callbackOnCancel(); }); } static cerrarModal(callback) { const modal = $(".modal[id^='blockUI_modal-cliente']").last(); if (!modal.length) { if (callback) callback(); return; } modal.one("hidden.bs.modal.classClientesCerrar", callback); const instancia = bootstrap.Modal.getInstance(modal.get(0)); if (instancia) instancia.hide(); else modal.modal("hide"); } static preparaAutocompleteCliente(idInput, urlBuscarClientes, callbackOnSelect, variableId, callbackOnCreated = null, callbackOnCancel = null) { ClassClientes.initModal(); const input = $("#" + idInput); const agregarOpcionCrear = function (clientes, textoBusqueda) { clientes = Array.isArray(clientes) ? clientes : []; clientes.push({ id: ClassClientes.idCrearCliente, label: ClassClientes.textoCrearCliente, value: ClassClientes.textoCrearCliente, esCrearCliente: true, nombreInicial: textoBusqueda }); return clientes; }; const source = function (request, response) { $.ajax({ url: urlBuscarClientes, dataType: "json", data: {term: request.term} }).done(function (clientes) { response(agregarOpcionCrear(clientes, request.term)); }).fail(function () { response(agregarOpcionCrear([], request.term)); }); }; const autocomplete = Utils.preparaAutoCompleteBuscar( undefined, idInput, undefined, function (item) { if (item && item.esCrearCliente) { ClassClientes.abrirNuevoCliente(item.nombreInicial || input.val(), function (cliente) { if (callbackOnCreated) callbackOnCreated(cliente); else if (callbackOnSelect) callbackOnSelect(cliente); }, callbackOnCancel); return; } if (callbackOnSelect) callbackOnSelect(item); }, undefined, variableId, source, {mainIdItem: "id", showNoResults: false, minLength: 0, autoDisableInput: false} ); input.autocomplete("instance").menu.element.addClass("ui-autocomplete-clientes"); return autocomplete; } static guardarCliente() { ClassClientes.esperePorFavor = Utils.sendStandardAjax(ClassClientes.formId, "https://gestion.elositodeclaudia.com/ajax/clientes/Cliente.guardar.php", { successCallback: function (data) { ClassClientes.esperePorFavor.modal("hide"); if (data["error_number"] < 0) { ClassBlockUI.abrirBlockUIEstandarMensaje(data["error_message"], true); return; } if (ClassClientes.callbackOnSuccessSave) ClassClientes.callbackOnSuccessSave(data); } }); } static cargarCliente(id, callback) { ClassClientes.esperePorFavor = Utils.sendStandardAjax(null, "https://gestion.elositodeclaudia.com/ajax/clientes/Cliente.get.php?id=" + id, { successCallback: function (data) { ClassClientes.esperePorFavor.modal("hide"); callback(data) }, }); } static abreModal(title) { return ClassBlockUI.abrirBlockUIEstandar("modal-cliente", undefined, title, "modal681"); } } ClassClientes.formId = "frm-cliente"; ClassClientes.esperePorFavor = null; ClassClientes.modalInicializado = false; ClassClientes.callbackListado = null; ClassClientes.callbackOnSuccessSave = null; ClassClientes.idCrearCliente = -999999; ClassClientes.textoCrearCliente = "Crear cliente"; window.ClassClientes = ClassClientes; class ClassArticulos { static initListado(urlDatatable) { $(document).ready(function() { Web.initTabs("tabs-tabla", function (id) { tablatablaArticulos.ajax.url(urlDatatable.replace("%tab%", id)).load(); }); $("body").on("click", ".btn-eliminar-producto", function () { const id = $(this).attr("data-id"); const nombre = $(this).attr("data-nombre"); ClassBlockUI.abrirBlockUIConfirm("Va eliminar el artículo %1%, ¿Desea continuar?".replace("%1%", nombre), "Continuar", function () { Utils.sendStandardAjax(null, "https://gestion.elositodeclaudia.com/ajax/articulos/Articulo.eliminar.php?id=" + id, { successCallback: function (data) { $(".modal").modal("hide"); Web.notify(data["error_message"], data["error_number"] < 0); if (data["error_number"] >= 0) tablatablaArticulos.ajax.reload(); } }); }, "Cancelar"); }); $("body").on("click", ".btn-toggle-visible-web-articulo", function () { const id = $(this).attr("data-id"); const esperePorFavor = Utils.sendStandardAjax(null, "https://gestion.elositodeclaudia.com/ajax/articulos/Articulo.toggleVisibleEnWeb.php?id=" + id, { successCallback: function (data) { esperePorFavor.modal("hide"); Web.notify(data["error_message"], data["error_number"] < 0); if (data["error_number"] >= 0) tablatablaArticulos.ajax.reload(null, false); } }); }); $("body").on("click", "#btn-importar-articulos-csv", function () { ClassBlockUI.abrirBlockUIEstandar( "modal-importar-articulos-csv", undefined, "Importar artículos CSV", "modal500" ); }); $("body").on("click", "#btn-confirmar-importacion-articulos-csv", function () { ClassArticulos.importarArticulosCSV(); }); $("body").on("click", "#btn-cerrar-resumen-importacion-articulos-csv", function () { ClassArticulos.cerrarResumenImportacionCSV(); }); }); } static importarArticulosCSV() { let esperePorFavor = null; esperePorFavor = Utils.sendStandardAjax( "frm-importar-articulos-csv", "https://gestion.elositodeclaudia.com/ajax/articulos/Articulo.importar.php", { successCallback: function (data) { if (esperePorFavor) esperePorFavor.modal("hide"); $(".modal").modal("hide"); if (data["error_number"] >= 0) { $("#frm-importar-articulos-csv")[0].reset(); tablatablaArticulos.ajax.reload(null, false); } ClassArticulos.mostrarResumenImportacionCSV(data); } } ); } static mostrarResumenImportacionCSV(data) { const contenedor = $("#resumen-importacion-articulos-csv"); const esError = Number(data["error_number"]) < 0; contenedor.empty(); if (esError) { contenedor.append( $("
", {class: "alert alert-danger mb-3"}).text( data["error_message"] || "No se ha podido completar la importación." ) ); const errores = Array.isArray(data["errores"]) ? data["errores"] : []; if (errores.length > 0) { const listadoErrores = $("