Digital Contract Archive & Retrieval System

Digital Contract Archive & Retrieval

Securely store, search, and manage all your digital contracts.

Contract Archive

Signed: ${new Date(contract.signingDate+'T00:00:00').toLocaleDateString()}

Expires: ${new Date(contract.expiryDate+'T00:00:00').toLocaleDateString()}

${statusText}
`; contractsList.appendChild(card); }); } // --- EVENT LISTENERS --- addContractForm.addEventListener('submit', (e) => { e.preventDefault(); const newContract = { id: Date.now(), title: document.getElementById('contract-title').value, partyA: document.getElementById('party-a').value, partyB: document.getElementById('party-b').value, signingDate: document.getElementById('signing-date').value, expiryDate: document.getElementById('expiry-date').value, content: document.getElementById('contract-content').value, }; contractData.push(newContract); addContractForm.reset(); showTab(0); renderContracts(); alert('Contract successfully archived!'); }); searchKeyword.addEventListener('input', renderContracts); filterStatus.addEventListener('change', renderContracts); contractsList.addEventListener('click', e => { if (e.target.classList.contains('view-btn')) { const contractId = parseInt(e.target.dataset.id); const contract = contractData.find(c => c.id === contractId); openModal(contract); } }); // --- MODAL LOGIC --- function openModal(contract) { modalTitle.textContent = contract.title; modalBody.innerHTML = `

Parties: ${contract.partyA} and ${contract.partyB}

Signing Date: ${new Date(contract.signingDate+'T00:00:00').toLocaleDateString()}

Expiry Date: ${new Date(contract.expiryDate+'T00:00:00').toLocaleDateString()}

Contract Text

${contract.content}
`; modal.classList.remove('hidden'); setTimeout(() => { modal.classList.remove('opacity-0'); modal.querySelector('.modal-content').classList.remove('scale-95'); }, 10); } function closeModal() { modal.classList.add('opacity-0'); modal.querySelector('.modal-content').classList.add('scale-95'); setTimeout(() => modal.classList.add('hidden'), 300); } closeModalBtn.addEventListener('click', closeModal); modal.addEventListener('click', e => { if (e.target === modal) closeModal(); }); // --- PDF GENERATION --- downloadPdfBtn.addEventListener('click', () => { pdfLoader.classList.remove('hidden'); downloadPdfBtn.disabled = true; try { const { jsPDF } = window.jspdf; const doc = new jsPDF(); const reportTitle = "Contract Archive Report"; doc.setFontSize(18); doc.text(reportTitle, 14, 22); doc.setFontSize(11); doc.setTextColor(100); doc.text(`Generated on: ${new Date().toLocaleDateString()}`, 14, 30); doc.text(`Filter Status: ${filterStatus.options[filterStatus.selectedIndex].text}`, 14, 38); const head = [['Title', 'Party A', 'Party B', 'Signing Date', 'Expiry Date', 'Status']]; const body = currentFilteredData.map(c => { const isExpired = new Date(c.expiryDate) < new Date(); return [ c.title, c.partyA, c.partyB, new Date(c.signingDate+'T00:00:00').toLocaleDateString(), new Date(c.expiryDate+'T00:00:00').toLocaleDateString(), isExpired ? 'Expired' : 'Active' ]; }); doc.autoTable({ head: head, body: body, startY: 45, theme: 'striped', headStyles: { fillColor: [22, 160, 133] } }); doc.save('Contract-Archive-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 --- renderContracts(); showTab(0); });
Scroll to Top