Roaster Inventory
Snapshot & lifecycle tracking

Inventory

Track from pending → received → roasted → wholesale → closed (snapshot always works).

Total KG
Across tracked origins
Origins
Active sources
Avg USD/KG
Snapshot average
Lifecycle
Optional ledger

Inventory views

Snapshot is the current feature (stable). Ledger/Transfers are optional upgrades and won’t break your system if missing.

Snapshot This table does not publish to Marketplace. It’s your internal roaster inventory summary by origin.
Origin Total (kg) Lots Avg price (USD/kg) Notes
Loading…
© Equity Coffee
Last updated:

Roaster Inventory Snapshot

Generated: ${new Date().toLocaleString()}

${rows.map(r=>`${r.map(c=>``).join('')}`).join('')}
OriginTotal (kg)LotsAvg USD/kgNotes
${esc(c||'')}
`); w.document.close(); } $('refreshBtn')?.addEventListener('click', loadSnapshot); $('addBtn')?.addEventListener('click', ()=>openModal(null)); $('adjBtn')?.addEventListener('click', adjustSnapshot); $('closeBtn')?.addEventListener('click', closeModal); $('saveBtn')?.addEventListener('click', saveSnapshot); $('deleteBtn')?.addEventListener('click', deleteSnapshot); $('modal')?.addEventListener('click', (e)=>{ if (e.target && e.target.id==='modal') closeModal(); }); $('btnPrintSnapshot')?.addEventListener('click', printSnapshot); $('btnLogout')?.addEventListener('click', async ()=>{ if (!confirm('Logout?')) return; try { await window.ECAuth?.logout?.(); } catch {} localStorage.removeItem('ec_token'); localStorage.removeItem('ec_user'); location.href = '/login.html'; }); $('themeToggle')?.addEventListener('click', ()=>{ const isDark = document.documentElement.classList.contains('theme-dark'); setTheme(!isDark); }); document.addEventListener('DOMContentLoaded', async ()=>{ setTheme((localStorage.getItem('theme')||'light') === 'dark'); await loadSnapshot(); });