Lottery & Gambling Budgeting Tool
Set Your Budget
Log Gambling/Lottery Activity
Budget Overview & Activity History
No budget set. Please set up your budget in the "Budget Setup" tab.
Transaction History (Current Period)
| Date | Type | Spent ($) | Won ($) | Net ($) | Action |
|---|
No activities logged for the current budget period.
No budget set. Please set up your budget in the "Budget Setup" tab.
'; noTransactionsMessage.style.display = 'block'; downloadButton.style.display = 'none'; return; } const budgetPeriodEndDate = lgb_calculatePeriodEndDate(settings.budgetStartDate, settings.periodType, settings.customDays); if (!budgetPeriodEndDate) { budgetDisplay.innerHTML = 'Invalid budget period. Please check your budget settings.
'; noTransactionsMessage.style.display = 'block'; downloadButton.style.display = 'none'; return; } const transactions = lgb_loadTransactions(); const periodTransactions = transactions.filter(tx => { const txDate = new Date(tx.date + "T00:00:00"); const startDate = new Date(settings.budgetStartDate + "T00:00:00"); return txDate >= startDate && txDate <= budgetPeriodEndDate; }); let totalSpentThisPeriod = 0; let totalWonThisPeriod = 0; periodTransactions.forEach(tx => { totalSpentThisPeriod += tx.spent; totalWonThisPeriod += tx.won; const row = transactionTableBody.insertRow(); row.insertCell().textContent = lgb_formatDate(tx.date); row.insertCell().textContent = tx.type; row.insertCell().textContent = lgb_formatCurrency(tx.spent); row.insertCell().textContent = lgb_formatCurrency(tx.won); row.insertCell().textContent = lgb_formatCurrency(tx.won - tx.spent); const deleteButton = document.createElement('button'); deleteButton.textContent = 'Del'; deleteButton.onclick = function() { lgb_deleteTransaction(tx.id); }; row.insertCell().appendChild(deleteButton).classList.add('action-cell'); }); if (periodTransactions.length === 0) { noTransactionsMessage.style.display = 'block'; } else { noTransactionsMessage.style.display = 'none'; } const remainingBudget = settings.budgetAmount - totalSpentThisPeriod; const netResult = totalWonThisPeriod - totalSpentThisPeriod; const percentSpent = settings.budgetAmount > 0 ? (totalSpentThisPeriod / settings.budgetAmount) * 100 : 0; budgetDisplay.innerHTML = `Budget Period: ${lgb_formatDate(settings.budgetStartDate)} - ${lgb_formatDate(budgetPeriodEndDate.toISOString().split('T')[0])}
Budget Allotment: ${lgb_formatCurrency(settings.budgetAmount)}
Total Spent: ${lgb_formatCurrency(totalSpentThisPeriod)}
${Math.round(percentSpent)}% Used
Remaining Budget: ${lgb_formatCurrency(remainingBudget)}
Total Won: ${lgb_formatCurrency(totalWonThisPeriod)}
Net Result (Win/Loss): ${lgb_formatCurrency(netResult)}
`;
downloadButton.style.display = 'block';
}
function lgb_confirmClearAllData() {
if (confirm("Are you sure you want to clear ALL your budget settings and transaction history? This action cannot be undone.")) {
localStorage.removeItem(LGB_BUDGET_SETTINGS_KEY);
localStorage.removeItem(LGB_TRANSACTIONS_KEY);
// Clear input fields in Budget Setup
document.getElementById('lgb_budgetPeriodType').value = 'weekly';
document.getElementById('lgb_budgetCustomDays').value = '';
document.getElementById('lgb_budgetAmount').value = '';
document.getElementById('lgb_budgetStartDate').value = lgb_getTodayDateString();
lgb_toggleCustomDays(); // Reset custom days visibility
alert("All data has been cleared.");
lgb_renderOverview(); // Refresh overview to show empty state
}
}
// PDF Download
function lgb_downloadPDF() {
if (typeof jspdf === 'undefined' || typeof jspdf.jsPDF === 'undefined' || typeof html2canvas === 'undefined') {
alert('PDF generation libraries not loaded. Please try again.'); return;
}
const { jsPDF } = jspdf;
const pdf = new jsPDF('p', 'pt', 'a4');
const pdfCreationTimestamp = new Date().toLocaleString();
const pdfContentEl = document.createElement('div');
// Apply styles similar to .pdf-* classes here if needed for html2canvas
pdfContentEl.style.position = 'absolute'; pdfContentEl.style.left = '-9999px';
pdfContentEl.style.width = '550px'; pdfContentEl.style.fontFamily = 'Arial, sans-serif';
const settings = lgb_loadBudgetSettings();
const transactions = lgb_loadTransactions();
const budgetPeriodEndDate = lgb_calculatePeriodEndDate(settings.budgetStartDate, settings.periodType, settings.customDays);
const periodTransactions = transactions.filter(tx => {
const txDate = new Date(tx.date + "T00:00:00");
const startDate = new Date(settings.budgetStartDate + "T00:00:00");
return txDate >= startDate && txDate <= budgetPeriodEndDate;
});
let totalSpent = 0, totalWon = 0;
periodTransactions.forEach(tx => { totalSpent += tx.spent; totalWon += tx.won; });
const remaining = settings.budgetAmount - totalSpent;
const net = totalWon - totalSpent;
let transactionsHtml = "";
periodTransactions.forEach(tx => {
transactionsHtml += `Lottery & Gambling Budget Report
Budget Summary
| Period: | ${lgb_formatDate(settings.budgetStartDate)} - ${lgb_formatDate(budgetPeriodEndDate ? budgetPeriodEndDate.toISOString().split('T')[0] : 'N/A')} |
| Budget Amount: | ${lgb_formatCurrency(settings.budgetAmount)} |
| Total Spent: | ${lgb_formatCurrency(totalSpent)} |
| Remaining Budget: | ${lgb_formatCurrency(remaining)} |
| Total Won: | ${lgb_formatCurrency(totalWon)} |
| Net Result: | ${lgb_formatCurrency(net)} |
Transaction History
| Date | Type | Spent ($) | Won ($) | Net ($) |
|---|
Generated on: ${pdfCreationTimestamp}. Please gamble responsibly.
`;
document.body.appendChild(pdfContentEl);
html2canvas(pdfContentEl, { scale: 2, useCORS: true }).then(canvas => {
const imgData = canvas.toDataURL('image/png');
const pdfWidth = pdf.internal.pageSize.getWidth();
pdf.addImage(imgData, 'PNG', 20, 20, pdfWidth - 40, 0); // Auto-height
pdf.save('Gambling_Budget_Report.pdf');
document.body.removeChild(pdfContentEl);
}).catch(err => {
console.error("PDF Error:", err); alert("Error generating PDF.");
if(document.body.contains(pdfContentEl)) document.body.removeChild(pdfContentEl);
});
}
// Initialization
document.addEventListener('DOMContentLoaded', function() {
// Set default dates
document.getElementById('lgb_budgetStartDate').value = lgb_getTodayDateString();
document.getElementById('lgb_activityDate').value = lgb_getTodayDateString();
// Load existing settings into Budget Setup tab
const settings = lgb_loadBudgetSettings();
if (settings.periodType) document.getElementById('lgb_budgetPeriodType').value = settings.periodType;
if (settings.customDays) document.getElementById('lgb_budgetCustomDays').value = settings.customDays;
if (settings.budgetAmount) document.getElementById('lgb_budgetAmount').value = settings.budgetAmount;
if (settings.budgetStartDate) document.getElementById('lgb_budgetStartDate').value = settings.budgetStartDate;
lgb_toggleCustomDays(); // Ensure custom days field visibility is correct
lgb_openTab({}, 'budgetSetupTab'); // Start on budget setup
lgb_renderOverview(); // Render initial overview based on stored data
// Null check example
if (!document.getElementById('lgb_budgetAmount')) {
console.error("Critical input 'lgb_budgetAmount' not found. Tool might not function correctly.");
}
});
