Low-Income Housing Investment Analyzer

Low-Income Housing Investment Analyzer

Evaluate the financial viability of your next affordable housing investment.

${kpis.cashOnCash}%

`; } function updateChart(data) { const ctx = document.getElementById('analysis-chart').getContext('2d'); const chartData = { labels: ['Income', 'Expenses', 'Debt Service', 'Cash Flow'], datasets: [{ data: [data.effectiveGrossIncome, data.totalOperatingExpenses, data.annualMortgage, data.effectiveGrossIncome - data.totalOperatingExpenses - data.annualMortgage], backgroundColor: ['#22c55e', '#ef4444', '#f97316', '#3b82f6'], }] }; if (analysisChart) { analysisChart.data = chartData; analysisChart.update(); } else { analysisChart = new Chart(ctx, { type: 'doughnut', data: chartData, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'bottom' } } } }); } } function updateTabs() { tabs.forEach((tab, i) => tab.classList.toggle('active', i === currentTabIndex)); tabContents.forEach((c, i) => c.classList.toggle('active', i === currentTabIndex)); prevBtn.disabled = currentTabIndex === 0; nextBtn.disabled = currentTabIndex === tabs.length - 1; prevBtn.classList.toggle('opacity-50', currentTabIndex === 0); nextBtn.classList.toggle('opacity-50', currentTabIndex === tabs.length - 1); } function setupEventListeners() { tabsContainer.addEventListener('click', (e) => { if (e.target.classList.contains('tab')) { currentTabIndex = parseInt(e.target.dataset.index); updateTabs(); } }); prevBtn.addEventListener('click', () => { if (currentTabIndex > 0) { currentTabIndex--; updateTabs(); } }); nextBtn.addEventListener('click', () => { if (currentTabIndex < tabs.length - 1) { currentTabIndex++; updateTabs(); } }); tabContentsContainer.addEventListener('input', (e) => { if (e.target.tagName === 'INPUT') { const category = e.target.dataset.category; const key = e.target.dataset.key; if (appData[category] && appData[category][key]) { appData[category][key].value = e.target.value; calculateAll(); } } }); document.getElementById('pdf-download-btn').addEventListener('click', generatePdf); } function generatePdf() { const { jsPDF } = jspdf; const pdf = new jsPDF(); const pdfContainer = document.createElement('div'); pdfContainer.style.cssText = 'position:absolute; left:-9999px; width:800px; padding:20px; font-family:Inter,sans-serif; color:#1f2937; background:white;'; const chartCanvas = document.getElementById('analysis-chart'); const chartImgData = chartCanvas.toDataURL('image/png', 1.0); let html = `

Investment Analysis Report

`; for (const category in appData) { if (category === 'Dashboard') continue; html += `

${category}

`; for (const key in appData[category]) { const item = appData[category][key]; html += ``; } html += '
${item.label}:${item.prefix || ''}${item.value}${item.suffix || ''}
'; } pdfContainer.innerHTML = html; document.body.appendChild(pdfContainer); html2canvas(pdfContainer, { scale: 2 }).then(canvas => { const imgData = canvas.toDataURL('image/png'); const { width, height } = pdf.internal.pageSize; const imgHeight = canvas.height * width / canvas.width; pdf.addImage(imgData, 'PNG', 0, 0, width, imgHeight); pdf.save('low-income-housing-analysis.pdf'); document.body.removeChild(pdfContainer); }); } initialize(); });
Scroll to Top