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 = "";
}