Wine & Collectibles Investment Profitability Estimator
Estimate the potential financial outcome of investing in alternative assets like fine wine, art, or other collectibles.
** IMPORTANT - PLEASE READ **
- This estimator is for **illustrative and educational purposes ONLY**.
- Investing in wine and collectibles is often speculative and carries significant risks including authenticity, damage, changing market tastes, illiquidity, and high transaction/holding costs.
- Valuations can be subjective and require expert appraisal. This tool relies on **your inputted values**.
- This tool **DOES NOT provide financial or investment advice** and its results are not guarantees of future performance.
- Always conduct thorough due diligence, consult with experts in the specific collectible field, and consider seeking advice from a qualified financial advisor before investing in such assets.
Investment & Cost Details
$
$
Annual Holding Costs
$
$
$
Sale Details
$
Profitability Estimation
Total ROI is (Net Profit / Total Initial Investment Outlay). Annualized ROI (CAGR) reflects the compounded annual growth rate considering all costs over the holding period.
${this.formatPercent(annualizedRoiCagr)}
Collectible Investment Profitability Report
`; pdfHtml += `Reminder: This is an illustrative estimation based on your inputs. Investing in collectibles is speculative and carries risks. This is NOT financial advice. DYOR and consult experts.
`;
pdfHtml += `Item: ${i.itemName}
`;
pdfHtml += `
`;
pdfHtml += `Inputs:
`; pdfHtml += `Purchase Price: ${this.formatCurrency(i.purchasePrice, false)}
`;
pdfHtml += `Initial Acquisition Costs: ${this.formatCurrency(i.acquisitionCosts, false)}
`;
pdfHtml += `Holding Period: ${i.holdingPeriodYears} years
`;
pdfHtml += `Annual Storage Cost: ${this.formatCurrency(i.annualStorage, false)}
`;
pdfHtml += `Annual Insurance Cost: ${this.formatCurrency(i.annualInsurance, false)}
`;
pdfHtml += `Avg. Annual Maintenance: ${this.formatCurrency(i.annualMaintenance, false)}
`;
pdfHtml += `Expected/Actual Sale Price: ${this.formatCurrency(i.salePrice, false)}
`;
pdfHtml += `Selling Costs: ${i.sellingCostType === 'percent' ? this.formatPercent(i.sellingCostVal).replace(' %','') + '% of Sale Price' : this.formatCurrency(i.sellingCostVal, false) + ' Fixed'}
`;
pdfHtml += `Profitability Estimation:
`;
pdfHtml += `
`; pdfHtml += `
`;
pdfExportContainer.innerHTML = pdfHtml;
document.body.appendChild(pdfExportContainer);
try {
const canvas = await html2canvas(pdfExportContainer, { scale: 1.5, useCORS: true, logging: false, windowWidth: pdfExportContainer.scrollWidth });
document.body.removeChild(pdfExportContainer);
const imgData = canvas.toDataURL('image/png');
const { jsPDF } = window.jspdf;
const pdf = new jsPDF({ orientation: 'p', unit: 'pt', format: 'a4' });
const pdfWidth = pdf.internal.pageSize.getWidth();
const pdfHeight = pdf.internal.pageSize.getHeight();
const imgProps = pdf.getImageProperties(imgData);
let imgFinalWidth = pdfWidth - 40;
let imgFinalHeight = (imgProps.height * imgFinalWidth) / imgProps.width;
if (imgFinalHeight > pdfHeight - 40) {
imgFinalHeight = pdfHeight - 40;
imgFinalWidth = (imgProps.width * imgFinalHeight) / imgProps.height;
}
let currentY = 20;
let heightProcessed = 0;
const pageMargin = 20;
const pageHeightAvailable = pdfHeight - 2 * pageMargin;
while(heightProcessed < canvas.height) {
let pageSegmentHeightOnCanvas = Math.min(canvas.height - heightProcessed, (pageHeightAvailable / imgFinalHeight) * canvas.height );
if (pageSegmentHeightOnCanvas <=0) break;
const segmentCanvas = document.createElement('canvas');
segmentCanvas.width = canvas.width;
segmentCanvas.height = pageSegmentHeightOnCanvas;
const sctx = segmentCanvas.getContext('2d');
sctx.drawImage(canvas, 0, heightProcessed, canvas.width, pageSegmentHeightOnCanvas, 0, 0, canvas.width, pageSegmentHeightOnCanvas);
const segmentImgData = segmentCanvas.toDataURL('image/png');
const segmentImgPropsPdf = pdf.getImageProperties(segmentImgData);
let segmentRenderWidth = pdfWidth - 2 * pageMargin;
let segmentRenderHeight = (segmentImgPropsPdf.height * segmentRenderWidth) / segmentImgPropsPdf.width;
if(segmentRenderHeight > pageHeightAvailable) {
segmentRenderHeight = pageHeightAvailable;
segmentRenderWidth = (segmentImgPropsPdf.width * segmentRenderHeight) / segmentImgPropsPdf.height;
}
if(heightProcessed > 0) pdf.addPage();
pdf.addImage(segmentImgData, 'PNG', pageMargin, pageMargin, segmentRenderWidth, segmentRenderHeight);
heightProcessed += pageSegmentHeightOnCanvas;
}
pdf.save('Collectible_Profitability_Estimation.pdf');
} catch (error) {
console.error("Error generating PDF:", error);
alert("An error occurred while generating PDF.");
if (document.body.contains(pdfExportContainer)) document.body.removeChild(pdfExportContainer);
}
}
};
document.addEventListener('DOMContentLoaded', function() {
cpeApp.init();
});
Total Initial Investment Outlay: ${this.formatCurrency(c.totalInitialOutlay, false)}
`;
pdfHtml += `Total Holding Costs (over period): ${this.formatCurrency(c.totalHoldingCostsOverPeriod, false)}
`;
pdfHtml += `Selling Costs Amount: ${this.formatCurrency(c.sellingCostsAmount, false)}
`;
pdfHtml += `Net Proceeds from Sale: ${this.formatCurrency(c.netProceedsFromSale, false)}
`;
pdfHtml += ``; pdfHtml += `
Total Net Profit: ${this.formatCurrency(c.netProfit, false)}
`;
pdfHtml += `Total ROI: ${this.formatPercent(c.totalRoi).replace(' %','')}
`;
pdfHtml += `Annualized ROI (CAGR): ${this.formatPercent(c.annualizedRoiCagr).replace(' %','')}
`;
pdfHtml += `