// Kanban functionality function createCard(pedido) { const card = document.createElement('div'); card.className = 'card'; if (pedido.es_urgente) { card.classList.add('urgente'); } const fechaCita = pedido.fecha_cita ? new Date(pedido.fecha_cita).toLocaleString('es-ES') : 'Sin fecha'; card.innerHTML = `
Pedido ${pedido.numero_pedido}
${pedido.cliente?.matricula_vehiculo || 'N/A'} - ${pedido.cliente?.nombre || 'N/A'}
${pedido.es_urgente ? 'URGENTE' : ''}
Cita: ${fechaCita}
${(pedido.referencias || []).map(ref => { const estadoClass = ref.estado === 'completo' ? 'completo' : ref.estado === 'parcial' ? 'parcial' : 'pendiente'; return `
${ref.referencia}
${ref.denominacion}
${ref.unidades_solicitadas} unidades
Stock: ${ref.unidades_en_stock} | Pendiente: ${ref.unidades_pendientes}
`; }).join('')}
`; return card; } function renderKanban(data) { const columns = { 'pendiente_revision': document.getElementById('col-pendiente-revision'), 'en_revision': document.getElementById('col-en-revision'), 'pendiente_materiales': document.getElementById('col-pendiente-materiales'), 'completado': document.getElementById('col-completado'), }; // Limpiar columnas Object.values(columns).forEach(col => { if (col) col.innerHTML = ''; }); // Renderizar tarjetas Object.entries(data).forEach(([estado, pedidos]) => { const column = columns[estado]; if (!column) return; if (pedidos.length === 0) { column.innerHTML = '
No hay pedidos
'; } else { pedidos.forEach(pedido => { column.appendChild(createCard(pedido)); }); } }); } async function loadKanban() { try { const data = await apiRequest('/kanban/'); renderKanban(data); } catch (error) { console.error('Error al cargar Kanban:', error); alert('Error al cargar los datos: ' + error.message); } } // Filtros document.addEventListener('DOMContentLoaded', () => { const searchInput = document.getElementById('search-input'); const estadoFilter = document.getElementById('estado-filter'); const urgenteOnly = document.getElementById('urgente-only'); if (searchInput) { searchInput.addEventListener('input', (e) => { const search = e.target.value.toLowerCase(); document.querySelectorAll('.card').forEach(card => { const text = card.textContent.toLowerCase(); card.style.display = text.includes(search) ? 'block' : 'none'; }); }); } if (estadoFilter) { estadoFilter.addEventListener('change', async (e) => { const estado = e.target.value; if (!estado) { loadKanban(); return; } try { const data = await apiRequest(`/pedidos-cliente/?estado=${estado}`); const pedidos = Array.isArray(data) ? data : (data.results || []); const grouped = { 'pendiente_revision': [], 'en_revision': [], 'pendiente_materiales': [], 'completado': [], }; grouped[estado] = pedidos; renderKanban(grouped); } catch (error) { console.error('Error al filtrar:', error); } }); } // Auto-refresh cada 30 segundos setInterval(loadKanban, 30000); // Cargar inicial loadKanban(); });