Inventory, batches & sales — backed by your Google Sheet
All-time, across every sale minus every logged expense. Sales profit still charges each £0 reward redemption its real, stored COGS — Net profit instead charges today's cheapest active tier price for each reward redemption (recalculated live, not stored), so the two figures are no longer on the same reward-cost basis.
| Sweet | Tier | Price | Stock remaining |
|---|
| Date | Sweet | Qty | Price charged | Revenue | COGS | Profit | Stock after | Customer | Actions |
|---|
A stock pool lets two or more sweets share the same physical delivery of stock (e.g. sold under two interchangeable names at the same price) — selling ANY sweet in a pool draws down the shared total. Assign a sweet to a pool from its Edit form above. Most sweets have no pool — leave "Shares stock with" set to none.
A sweet's sale price is always whatever its assigned tier currently says here — editing a tier's price only affects sales recorded from now on; past sales keep the price they were sold at.
| Order date | Sweet | Qty ordered | Remaining | Cost/unit | Supplier |
|---|
Not tied to any sweet/batch; kept separate from COGS. Delete is a real hard-delete, gated behind the admin access code — see the Delete button on each row.
| Date | Description | Amount | Actions |
|---|
Derived from the expense log above, not a separate record — nothing here is stored. Grouped by day (most recent first), plus a rollup by calendar week (Monday–Sunday, based on each expense's own date) so week-on-week cost trend is visible at a glance.
| Day | Total |
|---|
| Week | Total |
|---|
Each courier gets a short access code, generated here, that they enter once into courier.html. It's a real credential — checked server-side against this list on every single sale they record, not just at login. Flip a courier to Inactive to revoke their access immediately; their very next sale attempt will be rejected, even if they never reload the page.
| Name | Access code | Status | Added |
|---|
A REAL physical stock draw — this decrements the chosen batch's remaining stock immediately, same as any other draw. The courier then owes you the sale-price revenue for whatever they sell from it; unsold stock just stays outstanding (no "return to batch" — a future manual fix if it's ever needed). Since this shipped, a courier can ONLY sell stock they currently have an open handout for on courier.html — this replaces free selling from the whole warehouse.
Open and settled handouts both stay visible here, tagged — audit-trail style, same as voided sales. Outstanding/revenue owed are always computed fresh from the Sales log (excluding voided sales), never a stored counter.
| Courier | Sweet / Pool | Batch date | Handout date | Handed out | Sold | Outstanding | Revenue owed | Status |
|---|