Multi-Channel Inventory Sync Tool

Multi-Channel Inventory Sync Tool

Simulate and manage synchronized product inventory across all sales channels.

No products found. Add products in the 'Product Management' tab to get started.

${p.sku}

${p.stock}

`).join(''); if(state.products.length === 0) productsListEl.innerHTML = `

No products yet.

`; }; const renderChannelManagement = () => { channelsListEl.innerHTML = state.channels.map(c => `

${c}

`).join(''); }; // --- INITIALIZATION & EVENT HANDLERS --- function initialize() { addProductForm.addEventListener('submit', handleAddProduct); updateStockForm.addEventListener('submit', handleUpdateStock); addChannelForm.addEventListener('submit', handleAddChannel); downloadPdfBtn.addEventListener('click', generatePdf); renderAll(); } window.handleDeleteChannel = handleDeleteChannel; // Make accessible from inline onclick const switchTab = (tabName) => { state.currentTab = tabName; Object.values(tabButtons).forEach(b => b.classList.remove('active')); Object.values(tabContents).forEach(c => c.classList.add('hidden')); if(tabButtons[tabName]) tabButtons[tabName].classList.add('active'); if(tabContents[tabName]) tabContents[tabName].classList.remove('hidden'); }; Object.keys(tabButtons).forEach(k => tabButtons[k]?.addEventListener('click', () => switchTab(k))); // --- PDF GENERATION --- async function generatePdf() { if (state.products.length === 0) return; const { jsPDF } = window.jspdf; document.getElementById('pdf-report-date').textContent = `Generated: ${new Date().toLocaleString()}`; let tableHTML = ``; state.channels.forEach(c => { tableHTML += ``; }); tableHTML += ``; state.products.forEach(p => { tableHTML += ``; state.channels.forEach(() => { tableHTML += ``; }); tableHTML += ''; }); tableHTML += `
ProductTotal Stock${c}
${p.name} (${p.sku})${p.stock}${p.stock}
`; document.getElementById('pdf-table-container').innerHTML = tableHTML; const pdfContainer = document.getElementById('pdf-container'); pdfContainer.classList.remove('invisible', '-left-[9999px]'); try { const canvas = await html2canvas(document.getElementById('pdf-report'), { scale: 2 }); const imgData = canvas.toDataURL('image/jpeg', 0.9); const pdf = new jsPDF({ orientation: 'l', unit: 'px', format: 'a4' }); const pdfWidth = pdf.internal.pageSize.getWidth(); const pdfHeight = (canvas.height * pdfWidth) / canvas.width; pdf.addImage(imgData, 'JPEG', 0, 0, pdfWidth, pdfHeight); pdf.save('Inventory_Sync_Report.pdf'); } catch (error) { console.error("PDF generation failed:", error); } finally { pdfContainer.classList.add('invisible', '-left-[9999px]'); } } initialize(); });
Scroll to Top