NEEDS REPLENISHING
`;
list.appendChild(li);
});
shoppingListContainer.appendChild(list);
};
const resetForm = () => {
itemForm.reset();
document.getElementById('item-id').value = '';
submitItemBtn.textContent = 'Add Item to Inventory';
itemForm.querySelector('h2').textContent = 'Add a New Supply Item';
};
// --- Event Handlers ---
itemForm.addEventListener('submit', (e) => {
e.preventDefault();
const id = document.getElementById('item-id').value;
const newItem = {
id: id ? parseInt(id) : Date.now(),
name: document.getElementById('item-name').value,
category: document.getElementById('item-category').value,
stock: parseInt(document.getElementById('current-stock').value),
reorder: parseInt(document.getElementById('reorder-point').value)
};
if (id) { // Editing existing item
inventory = inventory.map(item => item.id === newItem.id ? newItem : item);
} else { // Adding new item
inventory.push(newItem);
}
resetForm();
renderAll();
updateTabs(0); // Go back to dashboard
});
clearFormBtn.addEventListener('click', resetForm);
inventoryContainer.addEventListener('click', (e) => {
const target = e.target;
const id = parseInt(target.dataset.id);
if (target.classList.contains('delete-btn')) {
inventory = inventory.filter(item => item.id !== id);
renderAll();
} else if (target.classList.contains('edit-btn')) {
const item = inventory.find(i => i.id === id);
if (item) {
document.getElementById('item-id').value = item.id;
document.getElementById('item-name').value = item.name;
document.getElementById('item-category').value = item.category;
document.getElementById('current-stock').value = item.stock;
document.getElementById('reorder-point').value = item.reorder;
submitItemBtn.textContent = 'Update Item';
itemForm.querySelector('h2').textContent = 'Edit Supply Item';
updateTabs(1); // Switch to form tab
}
}
});
// --- PDF Download Logic ---
downloadPdfBtn.addEventListener('click', () => {
const toOrder = inventory.filter(item => item.stock <= item.reorder);
if (toOrder.length === 0) return;
const { jsPDF } = window.jspdf;
const doc = new jsPDF();
const pdfContent = document.createElement('div');
pdfContent.style.padding = '20px';
pdfContent.style.fontFamily = 'Helvetica, Arial, sans-serif';
pdfContent.style.color = '#333';
pdfContent.innerHTML = `
`;
document.body.appendChild(pdfContent);
html2canvas(pdfContent).then(canvas => {
const imgData = canvas.toDataURL('image/png');
const pdfWidth = doc.internal.pageSize.getWidth();
const pdfHeight = (canvas.height * pdfWidth) / canvas.width;
doc.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight);
doc.save('office-supplies-shopping-list.pdf');
document.body.removeChild(pdfContent);
});
});
// --- Initial State & Render All ---
const renderAll = () => {
renderInventory();
renderShoppingList();
};
updateTabs(0);
renderAll();
});
Office Supplies Shopping List
Generated on: ${new Date().toLocaleDateString('en-US')}
| Item Name | Category | Current Stock |
|---|---|---|
| ${item.name} | ${item.category} | ${item.stock} |
