Automated Return & Exchange Request Manager

Automated Return & Exchange Request Manager

Streamline and manage customer return and exchange requests efficiently.

${pendingRequests.length}

Value of Approved Returns

${formatCurrency(totalRefundValue)}

Approved Exchanges

${approvedExchanges}

Return Window

${appData.policy.returnWindowDays} Days

All Requests

${requestsHtml}
Order IDCustomer ProductType DateStatus
`; lucide.createIcons(); document.getElementById('download-pdf-btn').addEventListener('click', generatePdf); document.getElementById('requests-table-body').addEventListener('click', handleRequestAction); }; const handleRequestAction = (e) => { const button = e.target.closest('button'); if (!button) return; const requestId = parseInt(button.dataset.id); if (button.classList.contains('approve-btn')) { const request = appData.requests.find(r => r.id === requestId); if (request) request.status = 'Approved'; } else if (button.classList.contains('reject-btn')) { const request = appData.requests.find(r => r.id === requestId); if (request) request.status = 'Rejected'; } renderDashboard(); }; const renderConfiguration = () => { const configContent = document.getElementById('content-config'); if (!configContent) return; const productsHtml = appData.products.map(p => `
${p.name}
`).join(''); configContent.innerHTML = `

Return Policy

Returnable Products

${productsHtml}
`; document.getElementById('save-config-btn').addEventListener('click', handleConfigSave); }; const handleConfigSave = () => { appData.policy.returnWindowDays = parseInt(document.getElementById('return-window').value); document.querySelectorAll('#product-list input[type="checkbox"]').forEach(checkbox => { const productId = parseInt(checkbox.dataset.productId); const product = appData.products.find(p => p.id === productId); if (product) product.returnable = checkbox.checked; }); alert('Configuration saved!'); renderDashboard(); }; const generatePdf = () => { loadingOverlay.style.display = 'flex'; const { jsPDF } = window.jspdf; const pdf = new jsPDF({ orientation: 'p', unit: 'pt', format: 'a4' }); let y = 40; pdf.setFontSize(18).setFont('helvetica', 'bold').text('Returns & Exchanges Report', pdf.internal.pageSize.getWidth() / 2, y, { align: 'center' }); y += 30; pdf.autoTable({ startY: y, head: [['Order ID', 'Customer', 'Product', 'Type', 'Date', 'Status']], body: appData.requests.map(req => { const product = appData.products.find(p => p.id === req.productId); return [req.orderId, req.customerName, product ? product.name : 'N/A', req.requestType, formatDate(req.requestDate), req.status]; }), theme: 'grid', headStyles: { fillColor: [37, 99, 235] } // Blue header }); pdf.save(`Returns-Report.pdf`); loadingOverlay.style.display = 'none'; }; const switchTab = (tabIndex) => { activeTabIndex = tabIndex; document.querySelectorAll('.tab-btn').forEach((btn, i) => btn.classList.toggle('active', i === tabIndex)); document.querySelectorAll('.tab-content').forEach((content, i) => content.classList.toggle('hidden', i !== tabIndex)); updateNavButtons(); }; const updateNavButtons = () => { prevTabBtn.disabled = activeTabIndex === 0; nextTabBtn.disabled = activeTabIndex === tabIdentifiers.length - 1; }; const initializeUI = () => { const tabs = [ { name: 'Returns Dashboard', id: 'dashboard' }, { name: 'Policy Configuration', id: 'config' } ]; tabIdentifiers = tabs.map(t => t.id); tabsContainer.innerHTML = tabs.map(tab => ``).join(''); mainContent.innerHTML = tabs.map(tab => `
`).join(''); tabs.forEach((tab, index) => { document.getElementById(`tab-${tab.id}`).addEventListener('click', () => switchTab(index)); }); renderDashboard(); renderConfiguration(); switchTab(0); lucide.createIcons(); }; initializeUI(); prevTabBtn.addEventListener('click', () => { if (activeTabIndex > 0) switchTab(activeTabIndex - 1); }); nextTabBtn.addEventListener('click', () => { if (activeTabIndex < tabIdentifiers.length - 1) switchTab(activeTabIndex + 1); }); });
Scroll to Top