Smart Restocking Alert System Smart Restocking Alert System Monitor inventory, predict stockouts, and know when to reorder. 1. Inventory Dashboard 2. Data Configuration Current Inventory Status Product Current Stock Reorder Point Days to Stockout Status Product Inventory Data Add Product Product Name SKU Current Stock Avg. Daily Sales Lead Time (Days) Safety Stock (Days) Action Previous Next Download Report Total Products${results.length} Items to Reorder Now${reorderNowCount} Items to Reorder Soon${reorderSoonCount} `; document.getElementById('dashboard-date').textContent = `Report generated on: ${new Date().toLocaleDateString()}`; } // --- Tab & Navigation Logic --- function switchTab(targetTabId) { if (targetTabId === 'dashboard') { const success = runAnalysisAndUpdadeDashboard(); if (!success) return; // Don't switch if validation fails } currentTab = targetTabId; tabs.forEach(tab => tab.classList.toggle('active', tab.dataset.tab === currentTab)); tabContents.forEach(content => content.classList.toggle('active', content.id === currentTab)); updateNavButtons(); } tabs.forEach(tab => { tab.addEventListener('click', () => switchTab(tab.dataset.tab)); }); nextBtn.addEventListener('click', () => { if (currentTab === 'dashboard') switchTab('config'); else if (currentTab === 'config') switchTab('dashboard'); }); prevBtn.addEventListener('click', () => { if (currentTab === 'config') switchTab('dashboard'); else if (currentTab === 'dashboard') switchTab('config'); }); function updateNavButtons() { if (currentTab === 'dashboard') { nextBtn.textContent = 'Edit Data'; prevBtn.style.display = 'none'; pdfButtonContainer.style.display = 'block'; } else { // config tab nextBtn.textContent = 'Update Dashboard'; prevBtn.style.display = 'inline-flex'; pdfButtonContainer.style.display = 'none'; } } // --- PDF Download --- downloadPdfBtn.addEventListener('click', async () => { const { jsPDF } = window.jspdf; const doc = new jsPDF({ orientation: 'p', unit: 'mm', format: 'a4' }); const content = document.getElementById('pdf-content'); doc.setFont('helvetica', 'bold'); doc.setFontSize(18); doc.text('Inventory Restocking Report', 14, 22); doc.setFontSize(11); doc.setTextColor(100); doc.text(`Generated on: ${new Date().toLocaleDateString()}`, 14, 28); await new Promise(resolve => setTimeout(resolve, 0)); // Allow render const canvas = await html2canvas(content, { scale: 2 }); const imgData = canvas.toDataURL('image/jpeg', 1.0); const imgProps = doc.getImageProperties(imgData); const pdfWidth = doc.internal.pageSize.getWidth() - 28; const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width; doc.addImage(imgData, 'JPEG', 14, 40, pdfWidth, pdfHeight); doc.save(`Inventory-Report-${new Date().toISOString().slice(0,10)}.pdf`); }); // --- Initial Load --- populateSampleData(); runAnalysisAndUpdadeDashboard(); // Initial run to populate dashboard switchTab('dashboard'); // Set the initial view });