let state = { cliente_id: "", rut: "", nombre: "", apellidoPaterno: "", apellidoMaterno: "", email: "", sucursal: "", tipoBusqueda: "", especialidad: "", servicio: "", profesional: null, horaReservada: "", fecha: "", hora: "", precio: 0, comision: 0, tiempo_duracion: 0, history: [], // Array para mantener el historial de pasos }; let profesionalList = []; let especialidadList = []; let sucursalList = []; let servicioList = []; let imgServidor = "https://www.kola.cl"; var servicio_escogido; var profesionalSeleccionado; var txt_disponible = "disponible"; var txt_reservado = "reservada"; var txt_nodisponible = "no disponible"; var txt_no_se_puede_realizar = "esta hora no esta disponible para reservar"; var txt_no_hay_horas_dispobibles = "lo sentimos, el profesional no tiene disponibilidad horaria"; var txt_fecha = "fecha"; var txt_hora_inicio = "hora inicio"; var txt_hora_fin = "hora termino"; var txt_reserva_exitosa = "felicitaciones ha reservado esta hora"; var txt_aceptar = "aceptar"; var sucursalId; var usuario; var Toast; var usuario = sessionStorage.getItem("cliente"); const idioma = navigator.language || navigator.userLanguage; var id_prof; var buscarTimeout; var lafoto; var id_serv; var id_sucursal; var una_sucursal = false; var diccionarioCompleto = []; var nomenclatura = []; var configuracion; // Datos de ejemplo (simulando backend // Estado de la aplicación // Configuración de SweetAlert2 // Inicialización function init() { // Ocultar todos los pasos excepto el primero $(".step").removeClass("active previous"); $("#step1").addClass("active"); // Event listeners para botones de navegación $(".btn-next").on("click", handleNext); $(".option-btn").on("click", handleOptionSelect); $(".btn-back").on("click", handleBack); // Event listeners para filtros $("#searchProfesional").on("input", filterProfesionales); $("#filterEspecialidad").on("change", filterProfesionales); $("#filterSucursal").on("change", filterProfesionales); // console.log("Usuario:", usuario); if (usuario) { $("#loader").show(); usuario = JSON.parse(usuario); state.cliente_id = usuario.id; state.rut = usuario.rut; state.nombre = usuario.nombre; state.apellidoPaterno = usuario.apellido_paterno; state.apellidoMaterno = usuario.apellido_materno; state.email = usuario.correo; $("#step1").hide(); } const params = new URLSearchParams(window.location.search); const profesional = params.get('profesional'); const servicio = params.get('servicio'); const sucursal = params.get('sucursal'); if (profesional) { $('#filtrosProfesional').hide(); //$('#btnBackProfesionales').hide(); // Ocultar el botón console.log("Profesional:", profesional); $('#filterSucursal').val("-1"); state.sucursal = $('#filterSucursal').val(); id_prof = profesional; id_serv = servicio; id_sucursal = state.sucursal; if (usuario == null) { showStep("step1"); } else { $('#btnBackProfesionales').removeClass("btn-back"); $('#btnBackProfesionales').hide(); obtenerEspecialidad(state.sucursal); loadServicios(-1, -1, id_prof); if (id_serv && id_sucursal) { loadProfesionales(id_serv, id_sucursal, null, id_prof); } else if (id_serv) { loadProfesionales(id_serv, -1, null, id_prof); } else if (id_sucursal) { loadProfesionales(-1, id_sucursal, null, id_prof); } else { loadProfesionales(-1, -1, null, id_prof); } showStep("step5"); } } // Event listener para el botón finalizar // $(".btn-finish").on("click", handleFinish); } function diccionario(callback) { $("#loader").show(); let fechaActual = moment().format("YYYY-MM-DD"); let configuracionLocalStorage = localStorage.getItem("configuracion"); let fechaActualizacionLocalStorage = localStorage.getItem("fechaActualizacion"); configuracion = JSON.parse(configuracionLocalStorage); const fechaActualDate = new Date(fechaActual); const fechaActualizacionDate = new Date(fechaActualizacionLocalStorage); if (fechaActualDate.getTime() > fechaActualizacionDate.getTime()) { localStorage.removeItem("diccionario"); localStorage.removeItem("configuracion"); localStorage.removeItem("fechaActualizacion"); localStorage.removeItem("nomenclatura"); obtenerDiccionarioDelServidor(); } else { obtenerDiccionarioDelServidor(); } init(); } function obtenerDiccionarioDelServidor() { $.ajax({ url: "api/diccionario", type: "get", success: function (response) { if (response.code == 0) { localStorage.setItem("diccionario", JSON.stringify(response.diccionario)); localStorage.setItem("configuracion", JSON.stringify(response.configuracion)); localStorage.setItem("nomenclatura", JSON.stringify(response.nomenclatura)); localStorage.setItem("fechaActualizacion", JSON.stringify(moment().format("YYYY-MM-DD"))); diccionarioCompleto = JSON.parse(localStorage.getItem("diccionario")); nomenclatura = JSON.parse(localStorage.getItem("nomenclatura")); configuracion = JSON.parse(localStorage.getItem("configuracion")); if (typeof callback === "function") callback(); } }, }); } function traducir(texto, idioma) { const entrada = diccionarioCompleto.find(element => element.clave === texto); return entrada && entrada[idioma] ? entrada[idioma] : '$' + texto; } function obtenerNomenclatura(clave, idioma) { let entrada; if (clave.endsWith('s')) { entrada = nomenclatura.find(element => element.clave_pl === clave); } else { entrada = nomenclatura.find(element => element.clave === clave); } if (entrada) { const nomenclatura = entrada.nomenclature.find(nom => nom.idioma === idioma); if (nomenclatura) { if (clave.endsWith('s')) { // si la clave termina en 's', es plural return nomenclatura.plural; } else { return nomenclatura.singular; } } } return 'N$' + clave; } function showStep(stepId) { const $currentStep = $(".step.active"); const $nextStep = $(`#${stepId}`); // Guardar el paso actual en el historial state.history.push($currentStep.attr("id")); $currentStep.removeClass("active").addClass("previous"); $nextStep.removeClass("previous").addClass("active"); // Si estamos yendo al paso de servicios, asegurarnos de que los servicios se carguen if (stepId === "step4A" && state.especialidad) { loadServicios(state.especialidad, state.sucursal); } // Mostrar/ocultar botón de retroceso if (state.history.length > 0) { $(".btn-back").show(); } else { $(".btn-back").hide(); } } function handleNext(e) { const currentStep = $(e.target).closest(".step"); const nextStepId = $(e.target).data("next"); // Validar y guardar datos según el paso actual if (!validateStep(currentStep.attr("id"))) { return; } showStep(nextStepId); } function handleBack() { if (state.history.length > 0) { const previousStepId = state.history.pop(); const $currentStep = $(".step.active"); const $previousStep = $(`#${previousStepId}`); $currentStep.removeClass("active"); $previousStep.removeClass("previous").addClass("active"); // Mostrar/ocultar botón de retroceso if (state.history.length > 0) { $(".btn-back").show(); } else { $(".btn-back").hide(); } // Hacer scroll al elemento con ID "superior" usando jQuery const $superior = $("#superior"); if ($superior.length) { $("html, body").animate({ scrollTop: $superior.offset().top }, 500); // 500 ms de duración para animación suave } } } // Validación de pasos function validateStep(stepId) { switch (stepId) { case "step1": state.rut = $("#rut").val(); if (!state.rut) { showError(traducir("Por favor ingresa tu RUT/DNI", configuracion.idioma)); return false; } break; case "step1A": state.nombre = $("#nombre").val(); if (!state.nombre) { showError(traducir("Por favor ingresa tu nombre", configuracion.idioma)); return false; } break; case "step1B": state.apellidoPaterno = $("#apellidoPaterno").val(); if (!state.apellidoPaterno) { showError(traducir("Por favor ingresa tu apellido paterno", configuracion.idioma)); return false; } break; case "step1C": /* state.apellidoMaterno = $("#apellidoMaterno").val(); if (!state.apellidoMaterno) { showError(traducir("Por favor ingresa tu apellido materno", configuracion.idioma)); return false; }*/ break; case "step1D": state.email = $("#correoElectronico").val(); console.log($("#correoElectronico").val()); if (!state.email || !isValidEmail(state.email)) { showError(traducir("Por favor ingresa un email válido", configuracion.idioma)); return false; } else { crearCliente(); } break; } return true; } // Mostrar errores con SweetAlert2 function showError(message) { Toast.fire({ icon: "error", title: message, timer: 3000, showConfirmButton: false, //timerProgressBar: false,/*probando/* }); } // Validación de email function isValidEmail(email) { return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email); } // Manejador unificado para botones de opciones function handleOptionSelect(e) { const $button = $(e.target); const type = $button.data("type"); const sucursal = $button.data("sucursal-id"); const especialidad = $button.data("especialidad-id"); const servicio = $button.data("servicio"); if (sucursal) { state.sucursal = sucursal; showStep("step3"); } else if (type) { state.tipoBusqueda = type; if (type === "especialidad") { showStep("step4"); } else { showStep("step5"); const sucursalListSelect = $("#filterSucursal"); const especialidadListSelect = $("#filterEspecialidad"); const servicioListSelect = $("#filterServicio"); especialidadListSelect.val("-1"); servicioListSelect.val("-1"); var especialidadId = especialidadListSelect.val(); loadServicios(especialidadId, state.sucursal); // $sucursalList state.servicio = servicioListSelect.val(); loadProfesionales(state.servicio, state.sucursal); } } else if (especialidad) { state.especialidad = especialidad; showStep("step4A"); } else if (servicio) { state.servicio = servicio; showStep("step5"); // loadProfesionales(state.servicio, state.sucursal); } } // Filtrado de profesionales function filterProfesionales() { const searchTerm = $("#searchProfesional").val().toLowerCase(); const especialidadFilter = $("#filterEspecialidad").val(); const sucursalFilter = $("#filterSucursal").val(); $(".profesional-card").each(function () { const $card = $(this); const nombre = $card.find("h3").text().toLowerCase(); const especialidad = $card.find("p").first().text(); const sucursal = state.sucursal; const matchesSearch = nombre.includes(searchTerm); const matchesEspecialidad = !especialidadFilter || especialidad === especialidadFilter; const matchesSucursal = !sucursalFilter || sucursal === sucursalFilter; $card.toggle(matchesSearch && matchesEspecialidad && matchesSucursal); }); } // Manejadores de reserva function handleFinish() { if (usuario && id_prof) { $('#btnVolverSucursal').removeClass('btn-back'); $('#btnVolverSucursal').hide(); $(".btn-back").hide() $('#btnReservar').show() $('#confirmacionTitle').show() $('#btnVolver').show() $('#btnOtraReserva').hide() $('#otraReserva').hide() $("#searchProfesional").val(""); $("#filterEspecialidad").val("-1"); $("#filterSucursal").val("-1"); $(".servicios-grid").empty(); state = { cliente_id: usuario.id, rut: usuario.rut, nombre: usuario.nombre, apellidoPaterno: usuario.apellido_paterno, apellidoMaterno: usuario.apellido_materno, email: usuario.correo, sucursal: "", tipoBusqueda: "", especialidad: "", servicio: "", profesional: id_prof, horaReservada: "", fecha: "", hora: "", precio: 0, comision: 0, tiempo_duracion: 0, history: [], }; loadProfesionales(-1, -1, null, id_prof); showStep("step5"); } else if (usuario) { if (sucursalList.length == 1) { $('#btnVolverBusqueda').removeClass('btn-back'); $('#btnVolverBusqueda').hide(); state = { cliente_id: usuario.id, rut: usuario.rut, nombre: usuario.nombre, apellidoPaterno: usuario.apellido_paterno, apellidoMaterno: usuario.apellido_materno, email: usuario.correo, sucursal: sucursalList[0].id, tipoBusqueda: "", especialidad: "", servicio: "", profesional: null, horaReservada: "", fecha: "", hora: "", precio: 0, comision: 0, tiempo_duracion: 0, history: [], }; $("#searchProfesional").val(""); $("#filterEspecialidad").val(""); $("#filterSucursal").val(""); $(".servicios-grid").empty(); $(".profesionales-list").empty(); $("#fichaProfesionalFoto").attr("src", "").attr("alt", ""); $("#fichaProfesionalNombre").text(""); $("#fichaProfesionalEspecialidad").text(""); $("#fichaProfesionalSucursal").text(""); $("#fichaProfesionalServicios").empty(); $("#fichaProfesionalHorarios").empty(); $('#btnReservar').show() $('#confirmacionTitle').show() $('#btnVolver').show() $('#btnOtraReserva').hide() $('#otraReserva').hide() showStep("step3") } else { $('#btnVolverSucursal').removeClass('btn-back'); $('#btnVolverSucursal').hide(); state = { cliente_id: usuario.id, rut: usuario.rut, nombre: usuario.nombre, apellidoPaterno: usuario.apellido_paterno, apellidoMaterno: usuario.apellido_materno, email: usuario.correo, sucursal: "", tipoBusqueda: "", especialidad: "", servicio: "", profesional: null, horaReservada: "", fecha: "", hora: "", precio: 0, comision: 0, tiempo_duracion: 0, history: [], }; $("#searchProfesional").val(""); $("#filterEspecialidad").val(""); $("#filterSucursal").val(""); $(".servicios-grid").empty(); $(".profesionales-list").empty(); $("#fichaProfesionalFoto").attr("src", "").attr("alt", ""); $("#fichaProfesionalNombre").text(""); $("#fichaProfesionalEspecialidad").text(""); $("#fichaProfesionalSucursal").text(""); $("#fichaProfesionalServicios").empty(); $("#fichaProfesionalHorarios").empty(); $('#btnReservar').show() $('#confirmacionTitle').show() $('#btnVolver').show() $('#btnOtraReserva').hide() $('#otraReserva').hide() showStep("step2") } } else if (id_prof) { $("#rut").val(""); $("#nombre").val(""); $("#apellidoPaterno").val(""); $("#apellidoMaterno").val(""); $("#email").val(""); $("#searchProfesional").val(""); $("#filterEspecialidad").val(""); $("#filterSucursal").val("-1"); $(".servicios-grid").empty(); $("#nombreProfesional").text(""); $("#horaReservada").text(""); $("#nombrePaciente").text(""); state = { cliente_id: "", rut: "", nombre: "", apellidoPaterno: "", apellidoMaterno: "", email: "", sucursal: "", tipoBusqueda: "", especialidad: "", servicio: "", profesional: id_prof, horaReservada: "", fecha: "", hora: "", precio: 0, comision: 0, tiempo_duracion: 0, history: [], }; $('#btnReservar').show() $('#confirmacionTitle').show() $('#btnVolver').show() $('#btnOtraReserva').hide() $('#otraReserva').hide() //loadProfesionales(state.servicio, state.sucursal,id_prof); showStep("step1"); } else { // Limpiar todos los campos del formulario $("#rut").val(""); $("#nombre").val(""); $("#apellidoPaterno").val(""); $("#apellidoMaterno").val(""); $("#email").val(""); $("#searchProfesional").val(""); $("#filterEspecialidad").val(""); $("#filterSucursal").val(""); // Limpiar el grid de servicios $(".servicios-grid").empty(); // Limpiar la lista de profesionales $(".profesionales-list").empty(); // Limpiar el resumen de reserva $("#nombreProfesional").text(""); $("#horaReservada").text(""); $("#nombrePaciente").text(""); // Limpiar la ficha profesional $("#fichaProfesionalFoto").attr("src", "").attr("alt", ""); $("#fichaProfesionalNombre").text(""); $("#fichaProfesionalEspecialidad").text(""); $("#fichaProfesionalSucursal").text(""); $("#fichaProfesionalServicios").empty(); $("#fichaProfesionalHorarios").empty(); // Reiniciar el estado state = { cliente_id: "", rut: "", nombre: "", apellidoPaterno: "", apellidoMaterno: "", email: "", sucursal: "", tipoBusqueda: "", especialidad: "", servicio: "", profesional: null, horaReservada: "", fecha: "", hora: "", precio: 0, comision: 0, tiempo_duracion: 0, history: [], }; $('#btnReservar').show() $('#confirmacionTitle').show() $('#btnVolver').show() $('#btnOtraReserva').hide() $('#otraReserva').hide() // Ocultar todos los pasos showStep("step1"); } } function obtenerSucursal() { // $("#loader").show(); if (usuario) { $('#btnVolverSucursal').removeClass('btn-back'); $('#btnVolverSucursal').hide(); $('#registro').hide(); } $.ajax({ url: "api/sucursalesSite", type: "get", success: function (response) { ////console.log(response.sucursales); if (!usuario || !id_prof) { $("#loader").hide(); } if (response.sucursales) { const $sucursalList = $("#sucursales-grid"); const sucursalListSelect = $("#filterSucursal"); $sucursalList.empty().off('click', '.option-btn rectangulo'); sucursalListSelect.empty().off('change'); sucursalListSelect.append(` `); sucursalList = response.sucursales; if (response.sucursales.length == 1) { $('#step2').hide(); state.sucursal = response.sucursales[0].id; sucursalId = response.sucursales[0].id; sucursalListSelect.hide(); $('#btnVolverBusqueda').removeClass('btn-back'); $('#btnVolverBusqueda').hide(); una_sucursal = true; if (usuario && !id_prof) { $('#btnVolverBusqueda').removeClass('btn-back'); $('#btnVolverBusqueda').hide(); showStep("step3"); } obtenerEspecialidad(sucursalId); } else { showStep("step2"); response.sucursales.forEach((sucursales) => { state.sucursal = sucursales; $sucursalList.append(` `); sucursalListSelect.append(` `); }); $sucursalList.find(".option-btn").on("click", function (event) { const sucursalId = $(this).data("sucursal-id"); sucursalListSelect.val(sucursalId); if (id_prof) { obtenerEspecialidad(sucursalId); loadServicios(-1, sucursalId, id_prof); loadProfesionales(-1, sucursalId, null, id_prof); showStep("step5"); } // Si hay un usuario pero no hay profesional, se ejecuta lógica estándar else { handleOptionSelect.call(this, event); obtenerEspecialidad(sucursalId); // Puedes agregar showStep("step3"); aquí si aplica para este flujo } // 1) Primero llamas a handleOptionSelect (si necesita event o 'this') // showStep("step3"); }); sucursalListSelect.on("change", function () { state.tipoBusqueda = ''; var id_sucursal = $(this).val(); $("#filterServicio").val("-1"); var servicioId = $("#filterServicio").val(); //console.log("scursal seleccionada:", id_sucursal); loadServicios(servicioId, id_sucursal); obtenerEspecialidad(id_sucursal); loadProfesionales(servicioId, id_sucursal); }) } //console.log(state.tipoBusqueda); } }, }); } function buscarCliente() { var dni = document.getElementById("rut").value; document.getElementById("nombre").value = ""; document.getElementById("apellidoPaterno").value = ""; document.getElementById("apellidoMaterno").value = ""; document.getElementById("correoElectronico").value = ""; dni = limpiarRut(dni); $("#loader").show(); if (dni == '' || dni == null || dni == undefined) { $("#loader").hide(); validateStep("step1"); } else { $.ajax({ url: "api/buscarCliente", type: "post", data: { dni: dni }, success: function (response) { //console.log(response.cliente); $("#loader").hide(); if (response.cliente) { state.cliente_id = response.cliente.id; state.rut = response.cliente.rut; state.nombre = response.cliente.nombre; state.apellidoPaterno = response.cliente.apellido_paterno; if (id_prof) { $('.btn-back').hide(); $('#registro').hide(); obtenerEspecialidad(state.sucursal); loadServicios(-1, -1, id_prof); console.log("Servicio:", id_serv); if (id_serv != null && id_serv && id_sucursal) { loadProfesionales(id_serv, id_sucursal, null, id_prof); } else if (id_serv) { loadProfesionales(id_serv, -1, null, id_prof); } else if (id_sucursal) { loadProfesionales(-1, id_sucursal, null, id_prof); } else { loadProfesionales(-1, -1, null, id_prof); } showStep("step5"); } else if (una_sucursal) { $('#btnVolverBusqueda').addClass("btn-back"); $('#btnVolverBusqueda').show(); $('#registro').hide(); showStep("step3"); } else { $('#registro').hide(); showStep("step2"); } } else { showStep("step1A"); } }, }); } } var timeoutId = null; function buscarCorreo() { // var dni = document.getElementById("rut").value; var correo = document.getElementById("correoElectronico").value; // dni = limpiarRut(dni); //$("#loader").show(); if (timeoutId !== null) { clearTimeout(timeoutId); } timeoutId = setTimeout(function () { $.ajax({ url: "api/buscarCliente", type: "post", data: { correo: correo }, success: function (response) { //console.log(response.cliente); $("#loader").hide(); if (response.cliente) { Swal.fire('Ya existe un usuario con este correo', '', 'info'); document.getElementById("correoElectronico").value = ""; } else { // showStep("step1A"); } }, }); }, 1000); } function crearCliente() { var csrfToken = $('meta[name="csrf-token"]').attr('content'); $("#loader").show(); datos = { _token: csrfToken, dni: document.getElementById("rut").value, nombre: document.getElementById("nombre").value, apellido_paterno: document.getElementById("apellidoPaterno").value, apellido_materno: document.getElementById("apellidoMaterno").value, correo: document.getElementById("correoElectronico").value } $.ajax({ url: '/crearCliente', type: 'POST', data: JSON.stringify(datos), contentType: 'application/json', success: function (response) { if (response.code == 0) { $("#loader").hide(); state.cliente_id = response.cliente.id; state.rut = response.cliente.rut; state.nombre = response.cliente.nombre; state.apellidoPaterno = response.cliente.apellido_paterno; if (id_prof) { $('.btn-back').hide(); $('#registro').hide(); obtenerEspecialidad(state.sucursal); loadServicios(-1, -1, id_prof); loadProfesionales(-1, -1, null, id_prof); showStep("step5"); } else if (una_sucursal) { $('#btnVolverBusqueda').removeClass("btn-back"); $('#btnVolverBusqueda').hide(); $('#registro').hide(); showStep("step3"); } else { $('#btnVolverBusqueda').removeClass("btn-back"); $('#btnVolverBusqueda').hide(); $('#registro').show(); showStep("step2"); } // window.location.replace("../"); } //alert('Datos guardados con éxito:', response); }, error: function (error) { Swal.fire('Hubo un error intente mas tarde', '', 'info'); $("#loader").hide(); } }); } function limpiarRut(rut) { return rut.replace(/[\.\-]/g, "").toUpperCase(); } function obtenerEspecialidad(id_sucursal) { $.ajax({ url: "api/especialidadesSite", type: "post", data: { id_sucursal: id_sucursal }, success: function (response) { //console.log(response.especialidades); if (response.especialidades) { const $especialidadList = $("#especialidades-grid"); const especialidadListSelect = $("#filterEspecialidad"); $especialidadList.empty().off('click', '.option-btn'); especialidadListSelect.empty().off('change'); // state.rut = response.cliente.rut; especialidadListSelect.append(` `); especialidadList = response.especialidades; especialidadList.forEach((especialidades) => { state.especialidad = especialidades; $especialidadList.append(` `); especialidadListSelect.append(` `); }); $especialidadList .find(".option-btn") .on("click", function (event) { handleOptionSelect.call(this, event); var especialidadId = $(this).data("especialidad-id"); especialidadListSelect.val(especialidadId); }); $("#filterEspecialidad").on("change", function () { var especialidadId = $(this).val(); //console.log("Especialidad seleccionada:", especialidadId); var id_sucursal_seleccionada = $("#sucursalSelect").val(); //console.log("Sucursal seleccionada especialidad:", id_sucursal_seleccionada); loadServicios(especialidadId, id_sucursal, function (servicios) { if (servicios.length > 0) { const primerServicioId = servicios[0].id; $("#filterServicio").val(primerServicioId); loadProfesionales(primerServicioId, id_sucursal);// importante: disparar el evento } }); }); } }, }); } // Carga de datos function loadServicios(especialidadId, id_sucursal, callback, id_profesional) { // console.log("Cargando servicios para sucursal:", id_sucursal); if (id_profesional) { id_profesional = id_profesional; } $("#loader").show(); $.ajax({ url: "api/serviciosSite", type: "post", data: { id_especialidad: especialidadId, id_sucursal: id_sucursal, id_profesional: id_profesional }, success: function (response) { if (response.servicios) { if (state.tipoBusqueda == "especialidad") { $("#loader").hide(); } state.servicios = response.servicios; servicioList = response.servicios; const $serviciosGrid = $("#step4A .servicios-grid"); const servicioListSelect = $("#filterServicio"); // Limpiar contenido y quitar listeners anteriores $serviciosGrid.empty().off('click', '.option-btn'); servicioListSelect.empty().off('change'); servicioListSelect.append(` `); // Generar botones y opciones del select servicioList.forEach((servicio) => { const $button = $(` `); $serviciosGrid.append($button); const $option = $(` `); servicioListSelect.append($option); }); // Registrar eventos $serviciosGrid.on('click', '.option-btn', function () { const servicioId = parseInt($(this).data('servicio'), 10); const precio = parseFloat($(this).data('precio')); const comision = parseFloat($(this).data('comision')); const tiempo = parseFloat($(this).data('tiempo')); state.servicio = servicioId; state.precio = precio; state.comision = comision; state.tiempo_duracion = tiempo; // Cambia visualmente el select sin activar change servicioListSelect.val(servicioId); // Ejecuta la lógica de profesionales loadProfesionales(servicioId, id_sucursal); }); servicioListSelect.on("change", function () { const sucursalListSelect = $("#filterSucursal"); const sucursal_id = sucursalListSelect.val(); //console.log("Sucursal seleccionada servicio:", sucursal_id); const servicioId = $(this).val(); const $selectedOption = $(this).find("option:selected"); const precio = parseFloat($selectedOption.data("precio")); const comision = parseFloat($selectedOption.data("comision")); const tiempo = parseFloat($selectedOption.data("tiempo")); state.servicio = servicioId; state.precio = precio; state.comision = comision; state.tiempo_duracion = tiempo; // console.log("Servicio seleccionado:", servicioId); if (especialidadId != -1 && servicioId == -1) { const especialidadListSelect = $("#filterEspecialidad"); especialidadListSelect.val("-1"); loadServicios(especialidadListSelect.val(), sucursal_id); } id_prof = null; // console.log("pro seleccionado:", id_prof); loadProfesionales(servicioId, sucursal_id); }); if (typeof callback === "function") { callback(servicioList); } // 🟢 Seleccionar automáticamente el primer servicio (si existe) if (servicioList.length > 0) { // const firstServicio = servicioList[0]; // servicioListSelect.val(firstServicio.id).trigger("change"); // Esto activa el .on("change") } } }, }); } function loadSelectPro(servicioId, id_sucursal) { loadProfesionales(servicioId, id_sucursal); } // Evento keyup separado function loadProfesionales(id_servicio, id_sucursal, buscar, id_prof) { const $profesionalesList = $(".profesionales-list"); $profesionalesList.empty(); const servicioListSelect = $("#filterServicio"); state.fecha = moment().format("YYYY-MM-DD"); $("#loader").show(); $.ajax({ url: "api/listaProfesionalesSite", type: "post", data: { id_servicio: id_servicio, id_sucursal: id_sucursal, fecha: state.fecha, buscar: buscar, id_prof: id_prof }, success: function (response) { if (response.code == 0) { $("#loader").hide(); profesionalList = response.profesionales; if (profesionalList.length == 0) { if (id_prof) { $profesionalesList.append(`