diff --git a/asignados.html b/asignados.html index 466bde4..6f3f2dc 100644 --- a/asignados.html +++ b/asignados.html @@ -2,7 +2,7 @@ - + Pendientes de Cita - IntegraRepara @@ -234,6 +234,7 @@ let globalAllServices = []; let pendingRequests = []; let systemStatuses = []; + let systemGuilds = []; let bizHours = { m_start: '09:00', m_end: '14:00', a_start: '16:00', a_end: '19:00' }; // Variables del Agendador Inteligente @@ -270,16 +271,22 @@ } await applyTheme(); lucide.createIcons(); - loadStatuses(); + await loadStatusesAndGuilds(); refreshData(); }); - async function loadStatuses() { + async function loadStatusesAndGuilds() { try { - const res = await fetch(`${API_URL}/statuses`, { headers: { "Authorization": `Bearer ${localStorage.getItem("token")}` } }); - const data = await res.json(); - if (data.ok) systemStatuses = data.statuses; - } catch (e) { } + const headers = { "Authorization": `Bearer ${localStorage.getItem("token")}` }; + const [resSt, resG] = await Promise.all([ + fetch(`${API_URL}/statuses`, { headers }), + fetch(`${API_URL}/guilds`, { headers }) + ]); + const dataSt = await resSt.json(); + const dataG = await resG.json(); + if (dataSt.ok) systemStatuses = dataSt.statuses; + if (dataG.ok) systemGuilds = dataG.guilds; + } catch(e) {} } async function refreshData() { @@ -288,8 +295,9 @@ try { const headers = { "Authorization": `Bearer ${localStorage.getItem("token")}` }; + const myUserId = JSON.parse(atob(localStorage.getItem('token').split('.')[1])).sub; - const resActivos = await fetch(`${API_URL}/services/active`, { headers }); + const resActivos = await fetch(`${API_URL}/providers/scraped`, { headers }); const dataActivos = await resActivos.json(); const resReqs = await fetch(`${API_URL}/agenda/requests`, { headers }); @@ -299,16 +307,25 @@ globalAllServices = dataActivos.services; pendingRequests = dataReqs.requests; + // FILTRO MAESTRO CORREGIDO localServices = globalAllServices.filter(s => { - if (s.provider === 'SYSTEM_BLOCK') return false; + // 1. Descartar si no es mío, si es bloqueo o si está en la papelera + if (s.assigned_to !== myUserId || s.provider === 'SYSTEM_BLOCK' || s.status === 'archived') return false; + const raw = s.raw_data || {}; - if (raw.scheduled_date && raw.scheduled_date.trim() !== "") return false; + + // 2. Si ya está en la lista de solicitudes, no lo duplicamos if (raw.appointment_status === 'pending') return false; + // 3. SOLO PASAN LOS QUE NO TIENEN FECHA + if (raw.scheduled_date && raw.scheduled_date.trim() !== "") return false; + + // 4. Asegurarnos de que no está terminado/anulado if (raw.status_operativo) { const st = systemStatuses.find(x => String(x.id) === String(raw.status_operativo)); if (st && st.is_final) return false; } + return true; });