Fix: la burbuja de "Solicitar Servicios" ahora cuenta también los avisos sin gremio

El contador de menu.html (badgeBolsa) solo contaba avisos con gremio coincidente, igual que antes de la regla nueva de solicitar.html que deja ver los avisos sin gremio a cualquiera. Ahora usa el mismo criterio (guildOk) y la burbuja muestra "X servicios y X sin gremio" en vez de solo "X libres", para que cuadre con lo que se ve al entrar en Solicitar Servicios.
This commit is contained in:
2026-09-06 20:41:39 +00:00
parent 629692dcdb
commit ab9414e2a9

View File

@@ -237,22 +237,32 @@
const dataScraped = await resScraped.json(); const dataScraped = await resScraped.json();
if (dataScraped.ok) { if (dataScraped.ok) {
let bolsaCount = 0; let bolsaCount = 0;
let sinGremioCount = 0;
dataScraped.services.forEach(s => { dataScraped.services.forEach(s => {
if(s.assigned_to || s.provider === 'SYSTEM_BLOCK') return; if(s.assigned_to || s.provider === 'SYSTEM_BLOCK') return;
const raw = s.raw_data || {}; const raw = s.raw_data || {};
const dbStatus = raw.status_operativo; const dbStatus = raw.status_operativo;
if(s.status === 'archived' || (dbStatus && ['anulado', 'terminado', 'finalizado'].includes(dbStatus.toLowerCase()))) return; if(s.status === 'archived' || (dbStatus && ['anulado', 'terminado', 'finalizado'].includes(dbStatus.toLowerCase()))) return;
const sGuild = String(s.guild_id || raw.guild_id); // 🆕 Mismo criterio que solicitar.html: si el aviso no tiene gremio asignado
// de verdad, es visible para cualquier operario (antes esto no se contaba aquí,
// por eso el número de la burbuja no cuadraba con lo que salía en la lista).
const rawGuildId = s.guild_id ?? raw.guild_id;
const hasGuild = rawGuildId !== undefined && rawGuildId !== null && String(rawGuildId).trim() !== "" && String(rawGuildId) !== "0";
const sGuild = String(rawGuildId);
const sCp = String(raw['Código Postal'] || raw['CP'] || "").trim(); const sCp = String(raw['Código Postal'] || raw['CP'] || "").trim();
const matchGuild = userGuilds.includes(Number(sGuild)) || userGuilds.includes(String(sGuild)); const matchGuild = hasGuild && (userGuilds.includes(Number(sGuild)) || userGuilds.includes(String(sGuild)));
const matchZone = userZones.some(z => sCp.startsWith(z)); const matchZone = userZones.some(z => sCp.startsWith(z));
if((userGuilds.length === 0 || matchGuild) && (userZones.length === 0 || matchZone)) { const guildOk = !hasGuild || userGuilds.length === 0 || matchGuild;
if(guildOk && (userZones.length === 0 || matchZone)) {
bolsaCount++; bolsaCount++;
if (!hasGuild) sinGremioCount++;
} }
}); });
if (bolsaCount > 0) { if (bolsaCount > 0) {
const b2 = document.getElementById('badgeBolsa'); const b2 = document.getElementById('badgeBolsa');
b2.innerText = `${bolsaCount} libre${bolsaCount > 1 ? 's' : ''}`; let texto = `${bolsaCount} servicio${bolsaCount > 1 ? 's' : ''}`;
if (sinGremioCount > 0) texto += ` y ${sinGremioCount} sin gremio`;
b2.innerText = texto;
b2.classList.remove('hidden'); b2.classList.remove('hidden');
} }
} }