Legal Entity Compliance Calendar

Legal Entity Compliance Calendar

Track and manage important compliance deadlines for all your legal entities.

Sun
Mon
Tue
Wed
Thu
Fri
Sat

${entity.name}

${entity.state}

${entity.tasks.length} task(s)
`; entityList.appendChild(entityDiv); // Populate select dropdown const option = document.createElement('option'); option.value = entity.id; option.textContent = entity.name; taskEntitySelect.appendChild(option); }); } addEntityBtn.addEventListener('click', () => { const name = entityNameInput.value.trim(); const state = entityStateInput.value.trim(); if (name && state) { complianceData.entities.push({ id: Date.now(), name, state, tasks: [] }); entityNameInput.value = ''; entityStateInput.value = ''; renderEntityList(); renderCalendar(); } else { alert('Please provide both entity name and state of incorporation.'); } }); entityList.addEventListener('click', (e) => { if (e.target.classList.contains('delete-entity-btn')) { const entityId = Number(e.target.dataset.id); complianceData.entities = complianceData.entities.filter(entity => entity.id !== entityId); renderEntityList(); renderCalendar(); } }); addTaskBtn.addEventListener('click', () => { const entityId = Number(taskEntitySelect.value); const name = taskNameInput.value.trim(); const dueDate = taskDueDateInput.value; if (entityId && name && dueDate) { const entity = complianceData.entities.find(e => e.id === entityId); if (entity) { const date = new Date(dueDate + 'T00:00:00'); // Ensure local time entity.tasks.push({ id: Date.now(), name, dueMonth: date.getMonth(), dueDay: date.getDate() + 1 // Fix for day being off by one }); taskNameInput.value = ''; taskDueDateInput.value = ''; renderEntityList(); // To update task count renderCalendar(); } } else { alert('Please select an entity, and provide a task name and due date.'); } }); // --- PDF GENERATION --- downloadPdfBtn.addEventListener('click', () => { pdfLoader.classList.remove('hidden'); downloadPdfBtn.disabled = true; try { const { jsPDF } = window.jspdf; const doc = new jsPDF(); const year = currentDate.getFullYear(); const reportTitle = `Compliance Report for ${year}`; doc.setFontSize(18); doc.text(reportTitle, 14, 22); doc.setFontSize(11); doc.setTextColor(100); doc.text(`Generated on: ${new Date().toLocaleDateString()}`, 14, 30); const head = [['Due Date', 'Entity', 'State', 'Compliance Task']]; const body = []; complianceData.entities.forEach(entity => { entity.tasks.forEach(task => { // Format month and day with leading zeros if needed const monthStr = String(task.dueMonth + 1).padStart(2, '0'); const dayStr = String(task.dueDay).padStart(2, '0'); const dueDate = `${year}-${monthStr}-${dayStr}`; body.push([dueDate, entity.name, entity.state, task.name]); }); }); // Sort by date body.sort((a, b) => new Date(a[0]) - new Date(b[0])); doc.autoTable({ head: head, body: body, startY: 40, theme: 'striped', headStyles: { fillColor: [22, 160, 133] } }); doc.save(`Compliance-Report-${year}.pdf`); } catch (e) { console.error("PDF generation failed:", e); alert("An error occurred while generating the PDF."); } finally { pdfLoader.classList.add('hidden'); downloadPdfBtn.disabled = false; } }); // --- INITIALIZATION --- renderCalendar(); renderEntityList(); showTab(0); });
Scroll to Top