diff --git a/servicios.html b/servicios.html index 7e71e3f..8e10a93 100644 --- a/servicios.html +++ b/servicios.html @@ -313,9 +313,10 @@

Operario Asignado

-
+
-

+ +
@@ -668,13 +669,33 @@ lucide.createIcons(); } + // NUEVA FUNCIÓN: Carga los operarios para poder reasignar sobre la marcha + async function loadOpsForReassign(gid, currentWorkerId) { + const sel = document.getElementById('detWorkerSelect'); + if(!sel) return; + sel.innerHTML = ''; + try { + const endpoint = gid ? `${API_URL}/operators?guild_id=${gid}` : `${API_URL}/operators`; + const res = await fetch(endpoint, { headers: { "Authorization": `Bearer ${localStorage.getItem("token")}` } }); + const data = await res.json(); + if(data.ok) { + data.operators.forEach(op => { + const isSelected = String(op.id) === String(currentWorkerId) ? 'selected' : ''; + sel.innerHTML += ``; + }); + } + } catch(e) {} + } + function buildGridCard(s) { const raw = s.raw_data || {}; const name = raw["Nombre Cliente"] || raw["CLIENTE"] || "Asegurado Sin Nombre"; const addr = raw["Dirección"] || raw["DOMICILIO"] || "---"; const pop = raw["Población"] || raw["POBLACION-PROVINCIA"] || ""; const fullAddr = `${addr} ${pop}`.trim(); - const cita = raw.scheduled_date ? `${raw.scheduled_date.split('-').reverse().slice(0,2).join('/')} | ${raw.scheduled_time}` : 'Pte. Cita'; + // FIX: Evitamos el 'undefined' + const timeStr = raw.scheduled_time ? raw.scheduled_time : '--:--'; + const cita = raw.scheduled_date ? `${raw.scheduled_date.split('-').reverse().slice(0,2).join('/')} | ${timeStr}` : 'Pte. Cita'; const companyName = raw['Compañía'] || raw['COMPAÑIA'] || raw['Procedencia'] || (s.provider === 'MANUAL' ? 'PARTICULAR' : 'ASEGURADORA'); const isUrgent = s.is_urgent === true || (raw['Urgente'] && raw['Urgente'].toLowerCase() === 'sí') || (raw['URGENTE'] && raw['URGENTE'].toLowerCase() === 'si'); @@ -809,7 +830,10 @@ document.getElementById('panelAsignado').classList.remove('hidden'); document.getElementById('panelSinAsignar').classList.add('hidden'); - document.getElementById('detWorker').innerText = s.assigned_name; + // CARGAMOS EL DESPLEGABLE EN VEZ DEL TEXTO FIJO + const rawGuildId = s.guild_id || raw['guild_id'] || raw.guild_id; + loadOpsForReassign(rawGuildId, s.assigned_to); + document.getElementById('dateInput').value = raw.scheduled_date || ""; document.getElementById('timeInput').value = raw.scheduled_time || ""; document.getElementById('detStatusMap').value = stateInfo.id; @@ -864,6 +888,11 @@ const time = document.getElementById('timeInput').value; const statusMap = document.getElementById('detStatusMap').value; + // 🚨 CAPTURAMOS AL NUEVO TÉCNICO SI LO HAS CAMBIADO + const newWorkerSelect = document.getElementById('detWorkerSelect'); + const newWorkerId = newWorkerSelect ? newWorkerSelect.value : null; + const newWorkerName = (newWorkerSelect && newWorkerId) ? newWorkerSelect.options[newWorkerSelect.selectedIndex].text : ""; + const selectedSt = systemStatuses.find(st => String(st.id) === String(statusMap)); if (selectedSt && !selectedSt.is_final && !date && !selectedSt.name.toLowerCase().includes('pausa') && !selectedSt.name.toLowerCase().includes('asignar')) { @@ -879,12 +908,19 @@ await fetch(`${API_URL}/services/set-appointment/${id}`, { method: 'PUT', headers: { "Content-Type": "application/json", "Authorization": `Bearer ${localStorage.getItem("token")}` }, - body: JSON.stringify({ date, time, status_operativo: statusMap }) + // ENVIAMOS LOS DATOS DEL NUEVO TÉCNICO + body: JSON.stringify({ + date, + time, + status_operativo: statusMap, + assigned_to: newWorkerId || "", + assigned_to_name: newWorkerName + }) }); closeDetailModal(); showToast("Estado actualizado"); refreshPanel(); } catch (e) { alert("Error"); } - finally { btn.innerHTML = originalContent; btn.disabled = false; } + finally { btn.innerHTML = originalContent; btn.disabled = false; lucide.createIcons(); } } async function sendToAutomate() {