document.addEventListener('DOMContentLoaded', async () => { try { const response = await apiFetch('api/movimientos.php'); const data = await response.json(); if (data.status === 'success') { // Update balance document.getElementById('ui-balance').textContent = `$${data.balance.toFixed(2)}`; // Render movements const uiMovimientos = document.getElementById('ui-movimientos'); uiMovimientos.innerHTML = ''; data.movimientos.forEach(mov => { const isExpense = mov.tipo === 'gasto'; const sign = isExpense ? '-' : '+'; const amountColor = isExpense ? 'text-error' : 'text-primary-container'; uiMovimientos.innerHTML += `
${mov.categoria_icono || 'payments'}

${mov.notas || mov.categoria_nombre}

${mov.fecha}

${sign}$${parseFloat(mov.monto).toFixed(2)}

`; }); // Dynamize Donut Chart if (data.grafico && data.grafico.length > 0) { const totalGastos = data.grafico.reduce((sum, item) => sum + parseFloat(item.total), 0); let svgHtml = ``; let legendHtml = ''; let currentOffset = 0; data.grafico.forEach(cat => { const pct = (parseFloat(cat.total) / totalGastos) * 100; // Add SVG segment svgHtml += ``; // Add Legend entry legendHtml += `
${cat.nombre}
${pct.toFixed(1)}%
`; currentOffset += pct; }); svgHtml += `
$${totalGastos.toFixed(0)} Gastos
`; document.getElementById('ui-donut-chart').innerHTML = svgHtml; document.getElementById('ui-donut-legend').innerHTML = legendHtml; } else { document.getElementById('ui-donut-chart').innerHTML = `
Sin gastos registrados
`; document.getElementById('ui-donut-legend').innerHTML = ''; } } } catch (e) { console.error('Error cargando el dashboard:', e); } });