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() {