Order Packing Optimization Tool

Order Packing Optimization Tool

Efficiently plan how to pack your items into the right boxes.

Order Items

Item Name L (in) W (in) H (in) Action

Available Boxes

Box Name/Size L (in) W (in) H (in) Action

Optimized Packing Plan

Here is the recommended way to pack your order.

Note: This optimization is based on total volume and does not account for complex 3D placement or weight distribution. It's a planning guide to minimize wasted space.

Items Packed

${packedBoxes.reduce((sum, box) => sum + box.items.length, 0)}

Unpacked Items

${unpackedItems.length}

Volume Efficiency

${efficiency}%

`; // Render packed boxes packedBoxes.forEach((box, i) => { const boxHtml = `

Box ${i + 1}: ${box.original.name}

Dimensions: ${box.original.dims.join(' x ')} in

    ${box.items.map(item => `
  • ${item.name} (${item.dims.join(' x ')} in)
  • `).join('')}
`; solutionDetails.innerHTML += boxHtml; }); // Render unpacked items if (unpackedItems.length > 0) { const unpackedHtml = `

Unpacked Items

These items could not be packed, likely because they are too large for any available box.

    ${unpackedItems.map(item => `
  • ${item.name} (${item.dims.join(' x ')} in)
  • `).join('')}
`; solutionDetails.innerHTML += unpackedHtml; } } // --- Tab Logic --- function switchTab(targetTab) { tabs.forEach(tab => tab.classList.toggle('active', tab.dataset.tab === targetTab)); tabContents.forEach(content => content.classList.toggle('active', content.id === targetTab)); updateNavButtons(); } tabs.forEach(tab => { tab.addEventListener('click', () => { const target = tab.dataset.tab; if (target === 'solution') { const solution = runPackingOptimization(); if (solution) { renderSolution(solution); switchTab(target); } } else { switchTab(target); } }); }); nextBtn.addEventListener('click', () => { const solution = runPackingOptimization(); if (solution) { renderSolution(solution); switchTab('solution'); } }); prevBtn.addEventListener('click', () => switchTab('configuration')); function updateNavButtons() { const currentTabId = document.querySelector('.tab-content.active').id; if (currentTabId === 'configuration') { prevBtn.disabled = true; nextBtn.style.display = 'inline-flex'; pdfButtonContainer.style.display = 'none'; nextBtn.innerHTML = 'Calculate & See Solution'; } else { prevBtn.disabled = false; nextBtn.style.display = 'none'; pdfButtonContainer.style.display = 'block'; } } // --- 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('Order Packing Plan', 14, 22); doc.setFontSize(11); doc.setTextColor(100); doc.text(`Generated on: ${new Date().toLocaleDateString()}`, 14, 28); 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(`Packing-Plan-${new Date().toISOString().slice(0,10)}.pdf`); }); // --- Initial Load --- populateSampleData(); updateNavButtons(); });
Scroll to Top