import { collection, onSnapshot, query, orderBy, doc, getDoc, updateDoc, serverTimestamp, getDocs, where } from "https://www.gstatic.com/firebasejs/10.7.1/firebase-firestore.js"; export function initSolicitudes(db, container) { // RESTAURACIÓN DE LA ESTRUCTURA VISUAL (CSS CLASSES) container.innerHTML = `

Solicitudes Entrantes

Cliente / Ciudad Especialidad Requerida Estado / Contacto Técnico Asignado Acciones
`; // --- ESCUCHA EN TIEMPO REAL CON DISEÑO DE FILAS RECUPERADO --- onSnapshot(query(collection(db, "solicitudes"), orderBy("creado", "desc")), (snap) => { const tbody = document.getElementById('tabla-solicitudes-body'); if(!tbody) return; tbody.innerHTML = ""; snap.forEach(docSnap => { const s = docSnap.data(); const id = docSnap.id; const nombreCli = (s.nombreCliente || 'S/N').toUpperCase(); const ciudad = (s.ciudad || 'SIN CIUDAD').toUpperCase(); const especialidad = (s.especialidad || 'GENERAL').toUpperCase(); const estado = (s.estado || 'PENDIENTE').toUpperCase(); // Restauramos las clases de Tailwind para las celdas (p-6, font-black, etc.) tbody.innerHTML += `
${nombreCli} ${ciudad}
${especialidad}
● ${estado} ${s.telefono || ''}
${s.tecnicoNombre || 'ESPERANDO ASIGNACIÓN'}
`; }); }); // --- LÓGICA DE ASIGNACIÓN (MANTIENE LAS NOTIFICACIONES) --- window.abrirAsignar = async (solicitudId, especialidad) => { const select = document.getElementById('select-tecnico'); const modal = document.getElementById('modal-asignar'); const areaTxt = document.getElementById('area-txt'); const docRef = doc(db, "solicitudes", solicitudId); const docSnap = await getDoc(docRef); const solicitudActual = docSnap.data(); areaTxt.innerText = especialidad; select.innerHTML = ''; modal.classList.remove('hidden'); try { const q = query(collection(db, "tecnicos"), where("especialidad", "==", especialidad.toUpperCase())); const querySnapshot = await getDocs(q); select.innerHTML = ''; if (querySnapshot.empty) { select.innerHTML = ``; } else { select.innerHTML = ''; querySnapshot.forEach((tDoc) => { const t = tDoc.data(); select.innerHTML += ``; }); } document.getElementById('btn-confirmar-asignacion').onclick = async () => { const valor = select.value; if (!valor) return; const [nuevoTecId, nuevoTecNombre, nuevoTecTel] = valor.split('|'); await updateDoc(docRef, { tecnicoId: nuevoTecId, tecnicoNombre: nuevoTecNombre, tecnicoTelefono: nuevoTecTel, estado: "ASIGNADO", fechaAsignacion: serverTimestamp() }); // Notificación WhatsApp const msg = `DASCORP: Nuevo servicio asignado.%0A- CLIENTE: ${solicitudActual.nombreCliente}%0A- CIUDAD: ${solicitudActual.ciudad}%0A- AREA: ${especialidad}`; window.open(`https://wa.me/${nuevoTecTel.replace(/\D/g, '')}?text=${msg}`, '_blank'); modal.classList.add('hidden'); Swal.fire({ title: '¡LISTO!', text: 'Técnico asignado correctamente', icon: 'success', confirmButtonColor: '#b30000' }); }; } catch (e) { console.error(e); } }; window.cerrarAsignacion = () => document.getElementById('modal-asignar').classList.add('hidden'); }