Office Event Planning & Coordination Tool

Office Event Planning & Coordination Tool

Streamline your event planning from start to finish.

Select an event to see its details or add a new event in the configuration tab.

Manage Events

Manage Master Checklist

$${totalSpent.toLocaleString()}

Remaining

$${budgetRemaining.toLocaleString()}

`; if (charts.budget) charts.budget.destroy(); const budgetCtx = document.getElementById('budget-chart').getContext('2d'); charts.budget = new Chart(budgetCtx, { type: 'doughnut', data: { labels: Object.keys(event.budget), datasets: [{ data: Object.values(event.budget), backgroundColor: ['#60A5FA', '#34D399', '#FBBF24', '#A78BFA', '#F87171'], }] }, options: { responsive: true, plugins: { legend: { position: 'bottom' } } } }); } function renderEventList() { eventList.innerHTML = events.map(event => `
${event.name} (${event.date})
`).join(''); } function renderMasterTaskList() { taskList.innerHTML = masterTasks.map(task => `
${task.name}
`).join(''); } // --- EVENT HANDLERS --- function handleAddEvent(e) { e.preventDefault(); const name = document.getElementById('event-name').value; const date = document.getElementById('event-date').value; const totalBudget = parseFloat(document.getElementById('event-budget').value); if (name && date && totalBudget >= 0) { const newEvent = { id: Date.now(), name, date, totalBudget, tasks: masterTasks.map(t => ({ id: t.id, done: false })), budget: {} }; events.push(newEvent); addEventForm.reset(); renderAll(); } } function handleDeleteEvent(e) { if (e.target.classList.contains('delete-event-btn')) { const eventId = parseInt(e.target.dataset.id); events = events.filter(ev => ev.id !== eventId); renderAll(); } } function handleAddTask(e) { e.preventDefault(); const nameInput = document.getElementById('task-name'); const name = nameInput.value.trim(); if (name) { masterTasks.push({ id: Date.now(), name }); nameInput.value = ''; renderAll(); } } function handleDeleteTask(e) { if (e.target.classList.contains('delete-task-btn')) { const taskId = parseInt(e.target.dataset.id); masterTasks = masterTasks.filter(t => t.id !== taskId); renderAll(); } } function handleTaskToggle(e) { if (e.target.type === 'checkbox') { const selectedEventId = eventSelect.value; const event = events.find(ev => ev.id == selectedEventId); if (event) { const taskId = parseInt(e.target.dataset.taskId); const task = event.tasks.find(t => t.id === taskId); if (task) { task.done = e.target.checked; } } } } function generatePdf() { const { jsPDF } = window.jspdf; const pdfContent = document.getElementById('pdf-content'); const pdfTitleEl = document.getElementById('pdf-title'); if (!pdfContent || !eventSelect.value) return; const event = events.find(e => e.id == eventSelect.value); pdfTitleEl.textContent = `Event Plan: ${event.name} - ${event.date}`; html2canvas(pdfContent, { scale: 2, useCORS: true, logging: false }) .then(canvas => { const imgData = canvas.toDataURL('image/png'); const pdf = new jsPDF({ orientation: 'p', unit: 'mm', format: 'a4' }); const pdfWidth = pdf.internal.pageSize.getWidth(); const ratio = canvas.width / canvas.height; const imgHeight = (pdfWidth - 20) / ratio; pdf.addImage(imgData, 'PNG', 10, 10, pdfWidth - 20, imgHeight); pdf.save(`Event-Plan-${event.name}.pdf`); pdfTitleEl.textContent = ''; }); } // --- EVENT LISTENERS --- function addEventListeners() { tabButtons.forEach(button => { button.addEventListener('click', () => { const tab = button.dataset.tab; tabButtons.forEach(btn => btn.classList.toggle('active', btn.dataset.tab === tab)); tabContents.forEach(content => content.classList.toggle('active', content.id.startsWith(tab))); }); }); eventSelect.addEventListener('change', (e) => renderDashboard(e.target.value)); addEventForm.addEventListener('submit', handleAddEvent); eventList.addEventListener('click', handleDeleteEvent); addTaskForm.addEventListener('submit', handleAddTask); taskList.addEventListener('click', handleDeleteTask); eventDashboardContent.addEventListener('change', handleTaskToggle); downloadPdfBtn.addEventListener('click', generatePdf); } initialize(); });
Scroll to Top