Business Immigration Law Compliance Tracker

Business Immigration Compliance Tracker

Monitor key immigration deadlines for all personnel.

Compliance Dashboard

Employee Name Visa Type Petition End Date Status / Days Remaining

No records to display.

`; } else { employeeData.forEach(emp => { const card = `

${emp.name}

${emp.visa} - Petition Ends: ${new Date(emp.petitionEnd+'T00:00:00').toLocaleDateString()}

`; employeeListContainer.innerHTML += card; }); } } // --- FORM HANDLING & CRUD OPERATIONS --- employeeForm.addEventListener('submit', (e) => { e.preventDefault(); const formData = new FormData(e.target); const employee = { name: document.getElementById('employee-name').value, visa: document.getElementById('visa-type').value, petitionEnd: document.getElementById('petition-end-date').value, i94End: document.getElementById('i94-end-date').value, }; if (editingEmployeeId) { // Update const index = employeeData.findIndex(emp => emp.id === editingEmployeeId); employeeData[index] = { ...employeeData[index], ...employee }; } else { // Add new employee.id = Date.now(); employeeData.push(employee); } resetForm(); renderAll(); }); const resetForm = () => { employeeForm.reset(); editingEmployeeId = null; employeeIdInput.value = ''; formTitle.textContent = 'Add New Employee Record'; submitBtn.textContent = 'Add Record'; cancelEditBtn.classList.add('hidden'); }; cancelEditBtn.addEventListener('click', resetForm); employeeListContainer.addEventListener('click', (e) => { const id = parseInt(e.target.dataset.id); if (e.target.classList.contains('delete-btn')) { employeeData = employeeData.filter(emp => emp.id !== id); if(editingEmployeeId === id) resetForm(); renderAll(); } else if (e.target.classList.contains('edit-btn')) { const employee = employeeData.find(emp => emp.id === id); editingEmployeeId = id; document.getElementById('employee-id').value = employee.id; document.getElementById('employee-name').value = employee.name; document.getElementById('visa-type').value = employee.visa; document.getElementById('petition-end-date').value = employee.petitionEnd; document.getElementById('i94-end-date').value = employee.i94End; formTitle.textContent = 'Edit Employee Record'; submitBtn.textContent = 'Save Changes'; cancelEditBtn.classList.remove('hidden'); window.scrollTo({ top: employeeForm.offsetTop, behavior: 'smooth' }); } }); // --- PDF GENERATION --- downloadPdfBtn.addEventListener('click', () => { pdfLoader.classList.remove('hidden'); downloadPdfBtn.disabled = true; try { const { jsPDF } = window.jspdf; const doc = new jsPDF(); const reportTitle = "Business Immigration Compliance Report"; 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 = [['Employee Name', 'Visa Type', 'Petition End Date', 'I-94 End Date', 'Status']]; const body = employeeData.map(emp => { const { days } = calculateDaysRemaining(emp.petitionEnd); const status = getStatusIndicator(days); return [ emp.name, emp.visa, new Date(emp.petitionEnd+'T00:00:00').toLocaleDateString(), emp.i94End ? new Date(emp.i94End+'T00:00:00').toLocaleDateString() : 'N/A', days < 0 ? `Expired` : `${days} days remaining` ]; }); doc.autoTable({ head: head, body: body, startY: 40, theme: 'striped', headStyles: { fillColor: [41, 128, 185] } }); doc.save('Compliance-Report.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 --- renderAll(); showTab(0); });
Scroll to Top