Permite anular servicios sin tener que asignártelos primero
solicitar.html: botón "Anular Aviso" en la Bolsa de Trabajo. buscar.html: botón de anular en la pestaña "Sin Asignar" y en "Mis Asignados". asignados.html: botón "Anular Servicio" en la ficha de un servicio ya asignado pero sin cita. En los tres casos se cambia el estado a Anulado directamente, sin tocar assigned_to, para no disparar el WhatsApp de "servicio asignado".
This commit is contained in:
@@ -117,6 +117,11 @@
|
||||
</button>
|
||||
<p class="text-center text-[10px] font-bold text-slate-400 mt-4">Al quedártelo, el servicio pasará a tu lista de Asignados.</p>
|
||||
|
||||
<!-- 🆕 Anular sin tener que asignártelo primero (evita el WhatsApp de "asignado" al cliente) -->
|
||||
<button onclick="anularServicio()" id="btnAnularBolsa" class="w-full mt-3 bg-white text-rose-600 font-black py-3.5 rounded-2xl border border-rose-200 active:scale-95 transition-transform flex items-center justify-center gap-2 uppercase tracking-widest text-xs">
|
||||
<i data-lucide="ban" class="w-4 h-4"></i> Anular Aviso
|
||||
</button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div id="toast" class="fixed top-5 left-1/2 -translate-x-1/2 bg-slate-800 text-white px-5 py-3 rounded-full shadow-2xl z-[200] font-bold text-xs uppercase tracking-widest flex items-center gap-2 transition-all duration-300 opacity-0 pointer-events-none transform -translate-y-10">
|
||||
@@ -440,6 +445,42 @@
|
||||
lucide.createIcons();
|
||||
}
|
||||
}
|
||||
// 🆕 Anula el aviso directamente desde la bolsa, sin tener que asignártelo primero
|
||||
// (así el cliente NO recibe el WhatsApp de "servicio asignado" por algo que ni siquiera vas a coger).
|
||||
async function anularServicio() {
|
||||
const id = document.getElementById('detId').value;
|
||||
if (!confirm("¿Seguro que quieres anular este aviso? No podrás deshacerlo desde aquí.")) return;
|
||||
|
||||
const stAnulado = systemStatuses.find(st => st.name.toLowerCase().includes('anula'));
|
||||
if (!stAnulado) return alert("El sistema no tiene un estado 'Anulado' configurado. Avisa a la oficina.");
|
||||
|
||||
const btn = document.getElementById('btnAnularBolsa');
|
||||
const originalContent = btn.innerHTML;
|
||||
btn.innerHTML = `<i data-lucide="loader-2" class="w-4 h-4 animate-spin"></i> Anulando...`;
|
||||
btn.disabled = true;
|
||||
|
||||
try {
|
||||
const res = await fetch(`${API_URL}/providers/scraped/${id}`, {
|
||||
method: 'PUT',
|
||||
headers: { "Content-Type": "application/json", "Authorization": `Bearer ${localStorage.getItem("token")}` },
|
||||
body: JSON.stringify({ status_operativo: String(stAnulado.id) })
|
||||
});
|
||||
|
||||
if (res.ok) {
|
||||
showToast("Aviso anulado");
|
||||
closeModal();
|
||||
loadAvailableServices();
|
||||
} else {
|
||||
alert("Error al anular.");
|
||||
}
|
||||
} catch (e) {
|
||||
alert("Error de conexión");
|
||||
} finally {
|
||||
btn.innerHTML = originalContent;
|
||||
btn.disabled = false;
|
||||
lucide.createIcons();
|
||||
}
|
||||
}
|
||||
// 🔥 FUNCIÓN DE FILTRADO Y ORDENACIÓN 🔥
|
||||
function filterServices() {
|
||||
const query = document.getElementById('searchInput').value.toLowerCase().trim();
|
||||
|
||||
Reference in New Issue
Block a user