Holiday Shopping Budget Planner

Holiday Budget Setup

Recipients & Gift List

Add New Recipient & Gift Plan

Your Recipient Gift Plans

No recipients added yet.

Overall Budget: $0.00 | Total Budgeted for Gifts: $0.00 | Status: Awaiting setup...

Track Purchases

Purchase Log for Selected Recipient:

  • No purchases logged or no recipient selected.

Budget Overview & Summary

Overall Figures

Overall Holiday Budget: N/A

Total Budgeted for Gifts: N/A

Total Actually Spent: N/A

Remaining Budget / Overspend: N/A

Recipient Breakdown

No recipient data to summarize yet.

Overall Holiday Budget: $${overallBudget.toFixed(2)}

`; pdfHtml += `

Total Budgeted for Gifts: $${totalBudgetedForGifts.toFixed(2)}

`; pdfHtml += `

Total Actually Spent: $${totalActualSpent.toFixed(2)}

`; pdfHtml += `

Remaining / Overspend: $${remainingOrOverspend.toFixed(2)} ${remainingOrOverspend >= 0 ? '(Remaining)' : '(Overspent)'}

`; pdfHtml += `

Recipient Gift & Spending Details

`; if (holidayData.recipients.length > 0) { pdfHtml += ``; holidayData.recipients.forEach(r => { const spentOnRecipient = r.purchases.reduce((sum, p) => sum + p.amount, 0); const diff = r.budget - spentOnRecipient; let purchasesDetails = r.purchases.map(p => `${p.giftName} ($${p.amount.toFixed(2)}) - ${p.status}`).join('
'); if (!purchasesDetails) purchasesDetails = "No purchases logged."; pdfHtml += ``; }); pdfHtml += `
RecipientGift Idea(s)Budgeted ($)Actual Spent ($)Difference ($)Purchases & Status
${r.name} ${r.giftIdeas.replace(/\n/g, '
') || 'N/A'}
${r.budget.toFixed(2)} ${spentOnRecipient.toFixed(2)} ${diff.toFixed(2)} ${diff >=0 ? '' : '(Over)'} ${purchasesDetails}
`; } else { pdfHtml += `

No recipients planned.

`; } pdfPrintEl.innerHTML = pdfHtml; window.print(); pdfPrintEl.innerHTML = ''; }); // --- Initialization --- function setDefaultHolidayDates() { const today = new Date().toISOString().split('T')[0]; if (holidayPurchaseDateInput) holidayPurchaseDateInput.value = today; } updateHolidayTabDisplay(); setDefaultHolidayDates(); renderHolidayRecipients(); renderHolidaySummaryTab(); });
Scroll to Top