`;
});
} else {
highRiskList.innerHTML = `
No high-priority risks identified.
`;
}
// Update Chart
const ctx = document.getElementById('risk-breakdown-chart').getContext('2d');
const chartData = {
labels: Object.keys(categoryScores),
datasets: [{
label: 'Risk Score',
data: Object.values(categoryScores).map(cat => cat.max > 0 ? (cat.score / cat.max) * 100 : 0),
backgroundColor: ['#ef4444', '#f97316', '#eab308', '#22c55e', '#3b82f6'],
borderColor: '#ffffff',
borderWidth: 2,
}]
};
if (riskChart) {
riskChart.data = chartData;
riskChart.update();
} else {
riskChart = new Chart(ctx, {
type: 'doughnut',
data: chartData,
options: {
responsive: true,
plugins: {
legend: {
position: 'top',
},
tooltip: {
callbacks: {
label: function(context) {
return `${context.label}: ${context.raw.toFixed(1)}% Risk`;
}
}
}
}
}
});
}
}
async function downloadPDF() {
downloadPdfButton.disabled = true;
pdfLoadingMessage.classList.remove('hidden');
// Temporarily clone and prepare content for PDF
const pdfContainer = document.getElementById('pdf-clone-container');
const dashboardContent = document.getElementById('dashboard-content').cloneNode(true);
// Create a title element for the PDF
const pdfTitle = document.createElement('h2');
pdfTitle.id = 'pdf-title-clone';
pdfTitle.textContent = 'Business Mergers Compliance Risk Dashboard';
pdfContainer.innerHTML = ''; // Clear previous
pdfContainer.appendChild(pdfTitle);
pdfContainer.appendChild(dashboardContent);
pdfContainer.style.display = 'block';
// Ensure chart is rendered as an image for PDF
const chartCanvas = dashboardContent.querySelector('#risk-breakdown-chart');
const chartImage = new Image();
chartImage.src = riskChart.toBase64Image();
// Wait for image to load before replacing canvas
await new Promise(resolve => chartImage.onload = resolve);
chartCanvas.parentNode.replaceChild(chartImage, chartCanvas);
try {
const canvas = await html2canvas(pdfContainer, { scale: 2, useCORS: true });
const imgData = canvas.toDataURL('image/png');
const pdf = new jsPDF({ orientation: 'p', unit: 'px', format: 'a4' });
const pdfWidth = pdf.internal.pageSize.getWidth();
const pdfHeight = (canvas.height * pdfWidth) / canvas.width;
pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight);
pdf.save('Compliance-Risk-Dashboard.pdf');
} catch (error) {
console.error("Error generating PDF:", error);
alert("An error occurred while generating the PDF.");
} finally {
downloadPdfButton.disabled = false;
pdfLoadingMessage.classList.add('hidden');
pdfContainer.style.display = 'none'; // Hide the clone container
}
}
// Event Listeners
prevButton.addEventListener('click', () => navigateTabs(-1));
nextButton.addEventListener('click', () => navigateTabs(1));
downloadPdfButton.addEventListener('click', downloadPDF);
tabButtons.forEach(button => {
button.addEventListener('click', () => {
showTab(parseInt(button.dataset.tab, 10));
});
});
// Update dashboard on any input change
document.getElementById('merger-tool-container').addEventListener('change', (e) => {
if (e.target.matches('.checklist-item, #transaction-value')) {
if (currentTab === 1) { // Only update if dashboard is visible
updateDashboard();
}
}
});
// Initial setup
createChecklist();
showTab(1);
});
