Value of Approved Returns
${formatCurrency(totalRefundValue)}
Approved Exchanges
${approvedExchanges}
Return Window
${appData.policy.returnWindowDays} Days
All Requests
| Order ID | Customer |
Product | Type |
Date | Status | |
${requestsHtml}
`;
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); });
});