+ ${inProgressBadge}
- ${isBlocked ? `` : ``}
+
${stateInfo.name}
${isUrgent ? `
🔥 URGENTE` : `
#${s.service_ref}`}
@@ -546,7 +562,7 @@
${s.assigned_name || 'Sin asignar'}
- ${raw.scheduled_date && !isBlocked ? `
+ ${raw.scheduled_date ? `
${cita}
@@ -616,17 +632,23 @@
const stateInfo = s._stateInfo;
- // Mostrar u ocultar paneles de asignación dependiendo del estado
- if (s.assigned_name && stateInfo.id !== 'bolsa' && !stateInfo.name.toLowerCase().includes('asignar') && !stateInfo.name.toLowerCase().includes('desasignado')) {
+ // --- LÓGICA DE VISIBILIDAD DE PANELES MODIFICADA ---
+ if (s.automation_status === 'in_progress') {
+ document.getElementById('panelEnBolsa').classList.remove('hidden');
+ document.getElementById('panelAsignado').classList.add('hidden');
+ document.getElementById('panelSinAsignar').classList.add('hidden');
+ }
+ else if (s.assigned_name && stateInfo.id !== 'bolsa' && !stateInfo.name.toLowerCase().includes('asignar') && !stateInfo.name.toLowerCase().includes('desasignado')) {
+ document.getElementById('panelEnBolsa').classList.add('hidden');
document.getElementById('panelAsignado').classList.remove('hidden');
document.getElementById('panelSinAsignar').classList.add('hidden');
document.getElementById('detWorker').innerText = s.assigned_name;
document.getElementById('dateInput').value = raw.scheduled_date || "";
document.getElementById('timeInput').value = raw.scheduled_time || "";
-
document.getElementById('detStatusMap').value = stateInfo.id;
} else {
+ document.getElementById('panelEnBolsa').classList.add('hidden');
document.getElementById('panelAsignado').classList.add('hidden');
document.getElementById('panelSinAsignar').classList.remove('hidden');
@@ -644,6 +666,24 @@
lucide.createIcons();
}
+ async function stopAutomation() {
+ const id = document.getElementById('detId').value;
+ if(!confirm("¿Deseas cancelar la búsqueda del robot para asignar este servicio manualmente?")) return;
+
+ try {
+ await fetch(`${API_URL}/providers/scraped/${id}`, {
+ method: 'PUT',
+ headers: { "Content-Type": "application/json", "Authorization": `Bearer ${localStorage.getItem("token")}` },
+ body: JSON.stringify({ automation_status: 'manual' })
+ });
+ showToast("Bolsa detenida. Ya puedes asignar el servicio.");
+ closeDetailModal();
+ refreshPanel();
+ } catch (e) {
+ alert("Error al detener el automatismo.");
+ }
+ }
+
async function saveAppointment() {
const id = document.getElementById('detId').value;
const date = document.getElementById('dateInput').value;
@@ -711,19 +751,31 @@
const name = select.options[select.selectedIndex].text;
const estadoAsignado = systemStatuses.find(st => st.name.toLowerCase() === 'asignado') || systemStatuses[1];
+ // 1. PRIMERA LLAMADA: Detenemos la bolsa de trabajo automática
+ await fetch(`${API_URL}/providers/scraped/${id}`, {
+ method: 'PUT',
+ headers: { "Content-Type": "application/json", "Authorization": `Bearer ${localStorage.getItem("token")}` },
+ body: JSON.stringify({ automation_status: 'completed' })
+ });
+
+ // 2. SEGUNDA LLAMADA: Guardamos el operario y el estado "Asignado"
await fetch(`${API_URL}/providers/scraped/${id}`, {
method: 'PUT',
headers: { "Content-Type": "application/json", "Authorization": `Bearer ${localStorage.getItem("token")}` },
body: JSON.stringify({
- automation_status: 'completed',
assigned_to: assigned_to,
- assigned_name: name,
+ assigned_to_name: name,
guild_id: guild_id,
status_operativo: estadoAsignado ? String(estadoAsignado.id) : 'asignado_operario'
})
});
- closeDetailModal(); showToast("Asignado correctamente"); refreshPanel();
- } catch (e) { alert("Error"); }
+
+ closeDetailModal();
+ showToast("Asignado y notificado correctamente");
+ refreshPanel();
+ } catch (e) {
+ alert("Error en la asignación manual");
+ }
}
async function saveNewService(e) {