Actualizar servicios.html

This commit is contained in:
2026-03-03 15:32:33 +00:00
parent 2f3ad04fee
commit 55ea62936f

View File

@@ -580,29 +580,31 @@
s._stateInfo = stateInfo; s._stateInfo = stateInfo;
const stName = stateInfo.name.toLowerCase(); const stName = stateInfo.name.toLowerCase();
// --- LÓGICA REVISADA DE CONTADORES --- // --- LÓGICA REVISADA Y EXACTA DE CONTADORES ---
// 1. SIN ASIGNAR: No tiene operario o está en la bolsa
if (!s.assigned_name || stateInfo.id === 'bolsa' || stName.includes('asignar') || stName.includes('desasignado')) { if (!s.assigned_name || stateInfo.id === 'bolsa' || stName.includes('asignar') || stName.includes('desasignado')) {
// Si no tiene operario, o está en bolsa, o el estado dice explícitamente sin asignar
kpiUnassigned++; kpiUnassigned++;
} }
// 2. INCIDENCIA: El estado incluye la palabra "incidencia" o "pausa"
else if (stName.includes('incidencia') || stName.includes('pausa')) { else if (stName.includes('incidencia') || stName.includes('pausa')) {
// Si hay un problema
kpiIncident++; kpiIncident++;
} }
// 3. ESPERA CLIENTE: El estado es literalmente "Esperando al cliente"
else if (stName.includes('espera')) { else if (stName.includes('espera')) {
// SOLUCIONADO: Ahora solo cuenta aquí si el estado se llama literalmente "Esperando al cliente"
kpiWaiting++; kpiWaiting++;
} }
else if (raw.scheduled_date && raw.scheduled_date !== "" && !stateInfo.is_final) { // 4. CITADO CONFIRMADO: El estado incluye la palabra "citado"
// Citados: Tiene operario (ya pasó el primer filtro) y SÍ tiene fecha else if (stName.includes('citado')) {
kpiScheduled++; kpiScheduled++;
} }
else if (!stateInfo.is_final && (!raw.scheduled_date || raw.scheduled_date === "")) { // 5. ASIGNADO SIN CITA: Tiene operario (ya pasó el primer if), el estado es "asignado" y NO tiene fecha
// Asignado sin cita: Tiene operario, no es incidencia, no es espera, y NO tiene fecha else if (stName.includes('asignado') && (!raw.scheduled_date || raw.scheduled_date === "")) {
kpiAssignedNoDate++; kpiAssignedNoDate++;
} }
// ... (El resto del código de los filtros visuales se mantiene igual)
// Filtro de búsqueda visual (esto no cambia) // Filtro de búsqueda visual (esto no cambia)
const matchesSearch = searchTerm === "" || const matchesSearch = searchTerm === "" ||
(raw["Nombre Cliente"] || "").toLowerCase().includes(searchTerm) || (raw["Nombre Cliente"] || "").toLowerCase().includes(searchTerm) ||