Actualizar usuarios.html

This commit is contained in:
2026-03-16 08:19:50 +00:00
parent 95ad3401ab
commit 08783c8aae

View File

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