/* funcion manu */ function normalizeBrands(brands) { var normalizedBrands = []; var unwanted_array = { 'Á': 'A', 'É': 'E', 'Í': 'I', 'Ó': 'O', 'Ú': 'U', 'á': 'a', 'é': 'e', 'í': 'i', 'ó': 'o', 'ú': 'u' }; brands.forEach(function (brand) { brand = brand.toLowerCase(); // Convertir a minúsculas brand = brand.replace(/[ÁÉÍÓÚ]/gi, function (c) { return unwanted_array[c]; }); // Eliminar tildes brand = brand.trim(); // Eliminar espacios en blanco brand = brand.replace("scheu iberia", "scheuiberia"); normalizedBrands.push(brand); }); return normalizedBrands; }
// Función para normalizar las ubicaciones function normalizeLocations(locations) { var normalizedLocations = []; var unwanted_array = { 'Á': 'A', 'É': 'E', 'Í': 'I', 'Ó': 'O', 'Ú': 'U', 'á': 'a', 'é': 'e', 'í': 'i', 'ó': 'o', 'ú': 'u' }; locations.forEach(function (location) { location = location.toLowerCase(); // Convertir a minúsculas location = location.replace(/[ÁÉÍÓÚ]/gi, function (c) { return unwanted_array[c]; }); // Eliminar tildes location = location.trim(); // Eliminar espacios en blanco location = location.replace("a coruña", "coruna"); // Reemplazar "a coruña" con "coruña" location = location.replace("ciudad real", "ciudadreal"); // Reemplazar "ciudad real" con "ciudadreal" location = location.replace("gerona", "girona"); // Reemplazar "gerona " con "girona" location = location.replace("lerida", "lleida"); normalizedLocations.push(location); }); return normalizedLocations; }
// Arrays para almacenar todas las marcas y ubicaciones var todasmarcas = new Array(); var todasubicaciones = new Array();
// Función para procesar los datos JSON function doData(json) { // Iterar sobre cada fila de los datos json.values.forEach(function (row) { // Extraer los datos de la fila var promotor = row[0]; var marcas = row[1]; var ubicaciones = row[2]; var telefono = row[3]; var mail = row[4]; var foto = row[5];
// Si el promotor no es "PROMOTORES" if (promotor != "PROMOTORES") { // Dividir las marcas y ubicaciones en arrays marcas = marcas.split(","); ubicaciones = ubicaciones.split(",");
// Normalizar las marcas y ubicaciones marcas = normalizeBrands(marcas); ubicaciones = normalizeLocations(ubicaciones); // Variables para almacenar las marcas y ubicaciones actuales var estamarca = ""; var estaubica = "";
// Variables para almacenar las clases CSS de las marcas y ubicaciones var cssmarca = ""; var cssubica = "";
// Iterar sobre las marcas jQuery.each(marcas, function (key, value) { if (value != "") { // Agregar la marca a la lista de marcas y a las clases CSS estamarca = estamarca + value + ""; cssmarca = cssmarca + value + " ";
// Si la marca no está en el array de todas las marcas, agregarla && !value.includes(" ") if (jQuery.inArray(value, todasmarcas) == -1) { todasmarcas.push(value); } } });
// Iterar sobre las ubicaciones jQuery.each(ubicaciones, function (key, value) { if (value != "") { // Agregar la ubicación a la lista de ubicaciones y a las clases CSS estaubica = estaubica + value + ""; cssubica = cssubica + value + " ";
// Si la ubicación no está en el array de todas las ubicaciones, agregarla if (jQuery.inArray(value, todasubicaciones) == -1) { todasubicaciones.push(value); } } }); // Agregar la información del promotor al contenedor de promotores jQuery("#promotores").append( '
" + promotor + '
Marcas: ' + estamarca.substring(0, estamarca.length - 7) + ' Ubicaciones: ' + estaubica.substring(0, estaubica.length - 7) + "
CONTACTAR:
" + telefono + '' + mail + "
" ); } });
// Cuando se hace clic en un elemento g del mapa jQuery("#map g").click(function () { // Elimina la clase activomapa de cualquier elemento que la tenga jQuery(".activomapa").removeClass("activomapa"); // Establece el valor del selector de ubicación al id del elemento g clickeado jQuery(".ubicaselec").val(jQuery(this).attr("id")); // Añade la clase activomapa al elemento g clickeado jQuery(this).addClass("activomapa"); // Oculta todos los promotores jQuery("#promotores .promotor").hide(); // Muestra los promotores que coinciden con la ubicación y marca seleccionadas jQuery( "#promotores .promotor." + jQuery(this).attr("id") + "." + jQuery(".marcaselec").val() ).show(); // Actualiza los números del mapa numeros_mapa(); });
// Función para convertir la primera letra de una cadena a mayúscula function capitalizeFirstLetter(string) { return string.charAt(0).toUpperCase() + string.slice(1); }
var selectubica = ''; todasubicaciones.sort().forEach(function (value) { selectubica = selectubica + '"; }); // Añade las opciones al selector de ubicación jQuery(".ubicaselec").html(selectubica.toString());
// Crea las opciones del selector de marca var selectmarca = ''; todasmarcas.sort().forEach(function (value) { selectmarca = selectmarca + '"; }); // Añade las opciones al selector de marca jQuery(".marcaselec").html(selectmarca.toString());
// Actualiza los números del mapa numeros_mapa();
// Cuando se cambia el valor del selector de ubicación jQuery(".ubicaselec").change(function () { // Simula un clic en el elemento g del mapa correspondiente a la ubicación seleccionada jQuery("#map g#" + jQuery(this).val()).click(); // Actualiza los números del mapa numeros_mapa(); });
// Cuando se cambia el valor del selector de marca jQuery(".marcaselec").change(function () { // Oculta todos los promotores jQuery("#promotores .promotor").hide(); // Muestra los promotores que coinciden con la ubicación y marca seleccionadas jQuery( "#promotores ." + jQuery(".ubicaselec").val() + "." + jQuery(".marcaselec").val() ).show(); // Actualiza los números del mapa numeros_mapa(); });
// Función para actualizar los números del mapa function numeros_mapa() { // Oculta todos los círculos y textos del mapa jQuery("#map g circle").hide(); jQuery("#map g text").hide(); // Si la ubicación seleccionada no es "promotor" if (jQuery(".ubicaselec").val() != "promotor") { // Muestra el círculo y texto correspondientes a la ubicación seleccionada jQuery("#map g#" + jQuery(".ubicaselec").val() + " circle").show(); jQuery("#map g#" + jQuery(".ubicaselec").val() + " text").show(); // Establece el texto al número de promotores que coinciden con la ubicación y marca seleccionadas jQuery("#map g#" + jQuery(".ubicaselec").val() + " text").text( jQuery( "#promotores .promotor." + jQuery(".ubicaselec").val() + "." + jQuery(".marcaselec").val() ).length ); } else { // Si la ubicación seleccionada es "promotor", muestra todos los círculos y textos del mapa jQuery("#map g circle").show(); jQuery("#map g text").show(); // Elimina la clase activomapa de cualquier elemento que la tenga jQuery(".activomapa").removeClass("activomapa"); // Para cada ubicación todasubicaciones .sort() .map(function (value) { return value.trim(); }) .forEach(function (value) { // Si no hay promotores que coincidan con la ubicación y marca seleccionadas if ( jQuery( "#promotores .promotor." + value + "." + jQuery(".marcaselec").val() ).length == 0 ) { // Oculta el círculo y texto correspondientes a la ubicación jQuery("#map g#" + value + " circle").hide(); jQuery("#map g#" + value + " text").hide(); } else { // Si hay promotores que coinciden, establece el texto al número de promotores jQuery("#map g#" + value + " text").text( jQuery( "#promotores .promotor." + value + "." + jQuery(".marcaselec").val() ).length ); } }); } }
// Cuando se hace clic en una ubicación en la lista de promotores jQuery("#promotores").on("click", ".ubicaclick b", function () { // Establece el valor del selector de ubicación al texto de la ubicación clickeada jQuery(".ubicaselec").val(jQuery(this).text()); // Simula un cambio en el selector de ubicación jQuery(".ubicaselec").change(); });
// Cuando se hace clic en una marca en la lista de promotores jQuery("#promotores").on("click", ".marcasclick b", function () { // Establece el valor del selector de marca al texto de la marca clickeada jQuery(".marcaselec").val(jQuery(this).text()); // Simula un cambio en el selector de marca jQuery(".marcaselec").change(); }); }
// Cuando el documento está listo jQuery(document).ready(function () { // Llama a la función doData con los datos obtenidos de la hoja de cálculo de Google doData({ "range": "Datos!A1:F1010", "majorDimension": "ROWS", "values": [ [ "PROMOTORES", "MARCAS", "UBICACIONES", "TELÉFONO", "MAIL", "FOTO" ], [ "FERNANDO LOZANO-ALVAR", "FGM,ITERO,KDM PERIOPTIX,SCHEU DENTAL, ALPRO, KDM, COLTENE-SCICAN,KOMET-CLINICA,KOMET-ENDO,LM,FRASACO,YOTUEL,ACTEON, IMES-ICORE, PRODONTO, ADITEK, ASTAR, RELIANCE", "Madrid, Valladolid, Zamora, Salamanca, Canarias, Segovia y Guadalajara", 680650926, "fernando.alvar@kalma.es", "https://kalma.es/wp-content/uploads/2023/03/Fernando-Lozano-Alvar.jpg" ], [ "JAVIER FERNÁNDEZ", "FGM,ITERO,KDM PERIOPTIX,SCHEU DENTAL, ALPRO, KDM, COLTENE-SCICAN,KOMET-CLINICA,KOMET-ENDO,LM,FRASACO,YOTUEL,ACTEON, IMES-ICORE, PRODONTO, ADITEK, ASTAR, RELIANCE", "Pais Vasco, Navarra, La Rioja, Cantabria y Burgos", 616973234, "javier.fernandez@grupokalma.com", "https://kalma.es/wp-content/uploads/2023/03/Javier-Fernandez.jpg" ], [ "FERNANDO LOZANO CABRERA", "FGM,ITERO,KDM PERIOPTIX,SCHEU DENTAL, ALPRO, KDM, COLTENE-SCICAN,KOMET-CLINICA,KOMET-ENDO,LM,FRASACO,YOTUEL,ACTEON, IMES-ICORE, PRODONTO, ADITEK, ASTAR, RELIANCE", "Sevilla, Huelva, Cádiz, Córdoba y Badajoz", 616973231, "fernando.lozano@kalma.es", "https://kalma.es/wp-content/uploads/2023/03/Fernando-Lozano.jpg" ], [ "JOSE MANUEL ITURBE", "FGM,ITERO,KDM PERIOPTIX,SCHEU DENTAL, ALPRO, KDM, COLTENE-SCICAN,KOMET-CLINICA,KOMET-ENDO,LM,FRASACO,YOTUEL,ACTEON, IMES-ICORE, PRODONTO, ADITEK, ASTAR, RELIANCE", "Asturias, León y Palencia", 660819536, "josemanuel.iturbe@kalma.es", "https://kalma.es/wp-content/uploads/2023/03/Jose-Manuel-Iturbe.jpg" ], [ "SOLEDAD GARCÍA", "FGM,ITERO,KDM PERIOPTIX,SCHEU DENTAL, ALPRO, KDM, COLTENE-SCICAN,KOMET-CLINICA,KOMET-ENDO,LM,FRASACO,YOTUEL,ACTEON, IMES-ICORE, PRODONTO, ADITEK, ASTAR, RELIANCE", "Madrid, Soria, Cáceres, Cuenca y Talavera de la Reina", 616401235, "soledad.garcia@kalma.es", "https://kalma.es/wp-content/uploads/2023/03/Soledad.jpg" ], [ "HELENA VALIENTE", "FGM,ITERO,KDM PERIOPTIX,SCHEU DENTAL, ALPRO, KDM, COLTENE-SCICAN,KOMET-CLINICA,KOMET-ENDO,LM,FRASACO,YOTUEL,ACTEON, IMES-ICORE, PRODONTO, ADITEK, ASTAR, RELIANCE", "Zona de Levante, Baleares, Albacete y Murcia", 630616677, "helena.valiente@grupokalma.com", "https://www.americanmyd.es/wp-content/uploads/2021/12/Helena-Valiente.jpg" ], [ "Miriam Gallego\r", "FGM,ITERO,KDM PERIOPTIX,SCHEU DENTAL, ALPRO, KDM, COLTENE-SCICAN,KOMET-CLINICA,KOMET-ENDO,LM,FRASACO,YOTUEL,ACTEON, IMES-ICORE, PRODONTO, ADITEK, ASTAR, RELIANCE", "Barcelona, Gerona, Zaragoza, Huesca, Tarragona, Lérida, Castellón, Teruel y Andorra", 650250041, "miriam.gallego@americandent.com", "https://kalma.es/wp-content/uploads/2025/01/Miriam.jpg" ], [ "Ignacio Calvo\r", "FGM,ITERO,KDM PERIOPTIX,SCHEU DENTAL, ALPRO, KDM, COLTENE-SCICAN,KOMET-CLINICA,KOMET-ENDO,LM,FRASACO,YOTUEL,ACTEON, IMES-ICORE, PRODONTO, ADITEK, ASTAR, RELIANCE", "Madrid, Toledo, Ciudad Real y Ávila", 722894769, "ignacio.calvo@kalma.es", "https://kalma.es/wp-content/uploads/2025/01/Ignacio.jpg" ], [ "Aurelino Barbosa\r", "FGM,ITERO,KDM PERIOPTIX,SCHEU DENTAL, ALPRO, KDM, COLTENE-SCICAN,KOMET-CLINICA,KOMET-ENDO,LM,FRASACO,YOTUEL,ACTEON, IMES-ICORE, PRODONTO, ADITEK, ASTAR, RELIANCE", "A Coruña, Pontevedra, Lugo, Ourense y Portugal", 722894670, "aurelino.barbosa@kalma.es", "https://kalma.es/wp-content/uploads/2025/01/Aurelino-Balbosa.jpg" ], [ "JOSE Mª LLADÓ", "FGM,ITERO,KDM PERIOPTIX,SCHEU DENTAL, ALPRO, KDM, COLTENE-SCICAN,KOMET-CLINICA,KOMET-ENDO,LM,FRASACO,YOTUEL,ACTEON, IMES-ICORE, PRODONTO, ADITEK, ASTAR, RELIANCE", "Málaga, Granada, Almería y Jaén", 616973225, "jose.llado@kalma.es", "https://kalma.es/wp-content/uploads/2025/01/Diseno-sin-titulo-14.png" ], [ "Mª JESÚS RUBIO - ÓPTICO OPTOMETRISTA", "PERIOPTIX", "", 690910105, "mariajesus.rubio@americandent.com", "https://www.americanmyd.es/wp-content/uploads/2021/12/Maria-Jesus-Rubio.jpg" ] ] } ); });

