Private Equity Deal Structuring Simulator

Private Equity Deal Structuring Simulator

Acquisition & Funding
Operational Assumptions
Exit Assumptions
Financing & Fees
Results

Acquisition & Funding Details

Operational Assumptions

Exit Assumptions

Note: This should typically align with or be less than 'Projection Years' from the previous tab.

Financing & Transaction Fees

Simulation Results

Enter your deal parameters in the previous tabs and click 'Simulate Deal' to see the results.

Generated on: ${new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' })}

${resultsOutputDiv.innerHTML}
`; // Temporarily hide the main tool container to avoid layout issues during PDF generation peSimulatorContainer.style.display = 'none'; html2pdf().from(pdfContent).set({ margin: [20, 20, 20, 20], // Top, Left, Bottom, Right filename: 'PE_Deal_Simulation_Report.pdf', image: { type: 'jpeg', quality: 0.98 }, html2canvas: { scale: 2, logging: true, dpi: 192, letterRendering: true }, jsPDF: { unit: 'mm', format: 'a4', orientation: 'landscape' } // Landscape for better table fit }).save().then(() => { // Restore visibility of the main tool container after PDF generation is complete peSimulatorContainer.style.display = 'flex'; pdfContent.remove(); // Clean up temporary element }).catch(error => { console.error("Error generating PDF:", error); showCustomModal('PDF Generation Error', 'There was an issue generating the PDF. Please try again.'); peSimulatorContainer.style.display = 'flex'; pdfContent.remove(); }); } // --- Event Listeners --- tabButtons.forEach(button => { button.addEventListener('click', handleTabButtonClick); }); if (nextButton) { nextButton.addEventListener('click', handleNextButtonClick); } if (prevButton) { prevButton.addEventListener('click', handlePrevButtonClick); } if (downloadPdfButton) { downloadPdfButton.addEventListener('click', downloadPDF); } // Slider value updates if (revenueGrowthSlider) revenueGrowthSlider.addEventListener('input', () => updateSliderValue(revenueGrowthSlider, revenueGrowthValue, '%')); if (ebitdaMarginSlider) ebitdaMarginSlider.addEventListener('input', () => updateSliderValue(ebitdaMarginSlider, ebitdaMarginValue, '%')); if (capexPercentRevenueSlider) capexPercentRevenueSlider.addEventListener('input', () => updateSliderValue(capexPercentRevenueSlider, capexPercentRevenueValue, '%')); if (workingCapitalPercentRevenueSlider) workingCapitalPercentRevenueSlider.addEventListener('input', () => updateSliderValue(workingCapitalPercentRevenueSlider, workingCapitalPercentRevenueValue, '%')); if (projectionYearsSlider) projectionYearsSlider.addEventListener('input', () => updateSliderValue(projectionYearsSlider, projectionYearsValue, '')); if (exitMultipleSlider) exitMultipleSlider.addEventListener('input', () => updateSliderValue(exitMultipleSlider, exitMultipleValue, 'x')); if (holdingPeriodSlider) holdingPeriodSlider.addEventListener('input', () => updateSliderValue(holdingPeriodSlider, holdingPeriodValue, '')); if (interestRateSlider) interestRateSlider.addEventListener('input', () => updateSliderValue(interestRateSlider, interestRateValue, '%')); if (transactionFeesPercentSlider) transactionFeesPercentSlider.addEventListener('input', () => updateSliderValue(transactionFeesPercentSlider, transactionFeesPercentValue, '%')); // Custom modal close button if (modalCloseButton) { modalCloseButton.addEventListener('click', hideCustomModal); } // Close modal if clicking outside (on overlay) if (customModalOverlay) { customModalOverlay.addEventListener('click', (e) => { if (e.target === customModalOverlay) { hideCustomModal(); } }); } // --- Initial Setup --- showTab(0); // Show the first tab on load });
Scroll to Top