From 08783c8aae1822460d4a3356ad67f71da4627baa Mon Sep 17 00:00:00 2001 From: marsalva Date: Mon, 16 Mar 2026 08:19:50 +0000 Subject: [PATCH] Actualizar usuarios.html --- usuarios.html | 55 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/usuarios.html b/usuarios.html index 710bb2a..53849f4 100644 --- a/usuarios.html +++ b/usuarios.html @@ -314,57 +314,72 @@ const selMun = document.getElementById('selMunicipio'); const munValue = selMun.value; const manualCityName = document.getElementById('hiddenManualCity').value; + const manualCP = document.getElementById('cpInput').value.trim(); if (!prov || !munValue) { showToast("Selecciona Provincia y Municipio", true); return; } - if (munValue === "OTRO") { - const manualCP = document.getElementById('cpInput').value.trim(); - if(!manualCP) { showToast("Escribe el CP manual en el cuadro", true); return; } - if(!manualCityName) { showToast("Falta el nombre de la poblaci贸n", true); return; } - - // 馃殌 NUEVO: Soporte real para rangos (ej: 11201-11205) + // Determinamos el nombre real de la ciudad (el de la lista o el que escribi贸 a mano) + const finalCityName = munValue === "OTRO" ? manualCityName : munValue; + + if (munValue === "OTRO" && !manualCityName) { + showToast("Falta el nombre de la poblaci贸n", true); return; + } + + // ESCENARIO 1: Ha escrito ALGO en la caja (rangos, n煤meros sueltos...) + if (manualCP !== "") { let cpsArray = []; - // Separamos por comas o espacios (quitamos el guion del split) + // Cortamos por comas o espacios const partes = manualCP.split(/[, \n]+/).filter(c => c.trim() !== ""); partes.forEach(parte => { if (parte.includes('-')) { - // Si hay un guion, calculamos todos los n煤meros que hay entre medias const [start, end] = parte.split('-'); const numStart = parseInt(start, 10); const numEnd = parseInt(end, 10); + // Si es un rango v谩lido, extraemos todos los n煤meros del medio if (!isNaN(numStart) && !isNaN(numEnd) && numStart <= numEnd) { for (let i = numStart; i <= numEnd; i++) { - // Aseguramos que siempre tengan 5 cifras (ej: 08001) - cpsArray.push(String(i).padStart(5, '0')); + cpsArray.push(String(i).padStart(5, '0')); // Mantiene los ceros a la izquierda } } else { - cpsArray.push(parte); // Fallback por si lo escriben mal + cpsArray.push(parte); // Fallback por si lo escribe mal } } else { - // Si es un n煤mero suelto, lo metemos tal cual - cpsArray.push(parte); + cpsArray.push(parte); // Si es un n煤mero normal sin guiones } }); + let addedCount = 0; cpsArray.forEach(cp => { - if (!tempUserZones.some(z => z.city === manualCityName && z.cps === cp)) { - tempUserZones.push({ province: prov, city: manualCityName, cps: cp }); + if (!tempUserZones.some(z => z.city === finalCityName && z.cps === cp)) { + tempUserZones.push({ province: prov, city: finalCityName, cps: cp }); + addedCount++; } }); - showToast(`Zonas manuales a帽adidas`); + + if(addedCount > 0) showToast(`Se han a帽adido ${addedCount} c贸digos postales`); + else showToast("Esos c贸digos ya estaban a帽adidos"); - } else { - // Modo Autom谩tico desde la lista - const cpList = JSON.parse(selMun.options[selMun.selectedIndex].dataset.cps); + } + // ESCENARIO 2: No ha escrito nada en la caja, pero eligi贸 una ciudad de la lista + else if (munValue !== "OTRO") { + const cpList = JSON.parse(selMun.options[selMun.selectedIndex].dataset.cps || "[]"); + let addedCount = 0; cpList.forEach(cp => { if (!tempUserZones.some(z => z.city === munValue && z.cps === cp)) { tempUserZones.push({ province: prov, city: munValue, cps: cp }); + addedCount++; } }); - showToast(`A帽adidos c贸digos de ${munValue}`); + + if(addedCount > 0) showToast(`A帽adidos ${addedCount} c贸digos de ${munValue}`); + else showToast("Esos c贸digos ya estaban a帽adidos"); + } + else { + showToast("Escribe el CP en el cuadro", true); return; } + renderTempZones(); document.getElementById('cpInput').value = ""; }