From 2b8e8c2d50bd3b538ddbdcd225f4b1d0f01836cb Mon Sep 17 00:00:00 2001 From: marsalva Date: Sat, 14 Mar 2026 16:37:06 +0000 Subject: [PATCH] Actualizar proveedores.html --- proveedores.html | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/proveedores.html b/proveedores.html index f81250a..b396c7a 100644 --- a/proveedores.html +++ b/proveedores.html @@ -316,6 +316,41 @@ return 1; } + // Función inteligente para filtrar los estados según si hay operario o no + function filterStatusOptions() { + const statusSelect = document.getElementById('impStatus'); + const operatorSelect = document.getElementById('impOperator'); + + const hasOperator = operatorSelect.value !== ""; + const currentSelected = statusSelect.value; // Guardamos lo que estaba seleccionado + + statusSelect.innerHTML = ''; + + systemStatuses.forEach(st => { + const nameLow = st.name.toLowerCase(); + + // Detectamos qué estados EXIGEN tener un trabajador físico + const requiresWorker = + (nameLow.includes('asignado') && !nameLow.includes('pendiente') && !nameLow.includes('desasignado')) || + nameLow.includes('esperando') || + nameLow.includes('citado') || + nameLow.includes('camino') || + nameLow.includes('trabajando'); + + // Si el estado exige trabajador y NO hay ninguno seleccionado, lo saltamos + if (requiresWorker && !hasOperator) return; + + statusSelect.innerHTML += ``; + }); + + // Intentamos restaurar el valor que había (si sigue siendo válido tras el filtro) + if (Array.from(statusSelect.options).some(opt => opt.value === currentSelected)) { + statusSelect.value = currentSelected; + } else { + statusSelect.value = ""; + } + } + async function loadStatuses() { try { const res = await fetch(`${API_URL}/statuses`, { headers: { "Authorization": `Bearer ${localStorage.getItem("token")}` } });