diff --git a/servicios.html b/servicios.html index b82a02b..f1415b1 100644 --- a/servicios.html +++ b/servicios.html @@ -458,7 +458,7 @@ const searchTerm = document.getElementById('searchFilter').value.toLowerCase(); const selectedOp = document.getElementById('opFilter').value; - const weekValue = document.getElementById('weekFilter').value; // Ej: "2023-W12" + const weekValue = document.getElementById('weekFilter').value; let kpiUnassigned = 0; let kpiScheduled = 0; @@ -479,55 +479,54 @@ const stateInfo = getServiceStateInfo(s); s._stateInfo = stateInfo; - // --- NUEVO REPARTO DE KPIs --- + // --- CÁLCULO DE KPIs (Solo para los bloques de colores superiores) --- const stName = stateInfo.name.toLowerCase(); - // 1. SIN ASIGNAR if (stateInfo.id === 'bolsa' || stName.includes('pendiente de asignar') || stName.includes('desasignado')) { kpiUnassigned++; - } - // 2. INCIDENCIA (Roba prioridad a Terminados en el dashboard) - else if (stName.includes('incidencia') || stName.includes('pausa')) { + } else if (stName.includes('incidencia') || stName.includes('pausa')) { kpiIncident++; - } - // 3. AGENDADOS (Debe tener fecha) - else if (dateRaw !== "") { + } else if (dateRaw !== "") { kpiScheduled++; - } - // 4. ESPERA CLIENTE / EN CURSO (Tiene operario pero no fecha) - else if (!stateInfo.is_final && !stName.includes('terminado')) { + } else if (!stateInfo.is_final && !stName.includes('terminado')) { kpiWaiting++; } - // --- FILTROS VISUALES (Buscador, Operario, Semana, Estado) --- + // --- FILTROS DE BÚSQUEDA --- const matchesSearch = searchTerm === "" || name.includes(searchTerm) || ref.includes(searchTerm) || addr.includes(searchTerm) || pop.includes(searchTerm) || phone.includes(searchTerm) || comp.includes(searchTerm); const matchesOp = selectedOp === "ALL" || assigned === selectedOp; + // --- FILTRO DE SEMANAS --- let matchesWeek = true; if (weekValue !== "") { - // Si hemos filtrado por semana, mostramos los de esa semana O los que no tengan fecha para no perderlos de vista if (dateRaw) { matchesWeek = isDateInWeekString(dateRaw, weekValue); + } else { + matchesWeek = false; // Si hay filtro de semana y no tiene fecha, lo ocultamos } } + // --- FILTRO DE ESTADOS (El culpable arreglado) --- let matchesStatus = false; - // 👇 ESTA ES LA REGLA CAMBIADA 👇 + if (activeStatusFilter === "ALL") { - matchesStatus = true; // AHORA MUESTRA ABSOLUTAMENTE TODO SIN EXCEPCIÓN + // MODO DIOS: Si estás en "TODOS", muestra TODO. + matchesStatus = true; } else { + // Si pinchas un filtro concreto, comprueba que el ID coincida matchesStatus = String(stateInfo.id) === activeStatusFilter; } return matchesSearch && matchesOp && matchesWeek && matchesStatus; }); - // Actualizamos Dashboards Superiores + // Pintar contadores document.getElementById('kpi-unassigned').innerText = kpiUnassigned; document.getElementById('kpi-scheduled').innerText = kpiScheduled; document.getElementById('kpi-waiting').innerText = kpiWaiting; document.getElementById('kpi-incident').innerText = kpiIncident; + // Pintar Tarjetas const grid = document.getElementById('servicesGrid'); grid.innerHTML = filteredData.length > 0 ? filteredData.map(s => buildGridCard(s)).join('')