Total Stock Value (Cost)
โ
Variants
โ
Never Counted
โ
Overdue
โ
Up To Date
โ
| PRODUCT | SKU | UNITS ON HAND | COST/EA | STOCK VALUE | LAST COUNTED | STATUS | HISTORY |
|---|
Connecting...
๐ท SNAPSHOT HISTORY
โ COMPARE SNAPSHOTS
๐ ITEM AUDIT HISTORY
โ SHOPIFY CONNECTION
This will redirect you to Shopify to authorise the app and return a fresh token automatically.
MANUAL OVERRIDE
days
โ GOOGLE SHEETS SYNC
Setup: New Google Sheet โ Extensions โ Apps Script โ paste script โ Save โ Deploy โ New deployment โ Web app โ Execute as Me โ Anyone โ Deploy โ copy URL.
Apps Script to paste:
Apps Script to paste:
function doPost(e) {
var data = JSON.parse(e.postData.contents);
var ss = SpreadsheetApp.getActiveSpreadsheet();
if (data.type === 'snapshot') {
var name = (data.label + ' - ' + data.date).substring(0, 100);
var sheet = ss.getSheetByName(name) || ss.insertSheet(name);
sheet.clearContents();
sheet.appendRow(['SNAPSHOT', data.label]);
sheet.appendRow(['DATE', data.date]);
sheet.appendRow(['TOTAL VALUE', data.summary.totalValue]);
sheet.appendRow(['VARIANTS', data.summary.totalVariants]);
sheet.appendRow(['NEVER', data.summary.never]);
sheet.appendRow(['OVERDUE', data.summary.overdue]);
sheet.appendRow(['OK', data.summary.ok]);
sheet.appendRow([]);
sheet.appendRow(['Product','Variant','SKU','Units','Cost','Value','Last Count','Days Since','Status']);
data.rows.forEach(function(r) {
sheet.appendRow([r.product,r.variant,r.sku,r.units,r.cost,r.value,r.countDate||'',r.daysSince||'',r.status]);
});
}
if (data.type === 'history_event') {
var h = ss.getSheetByName('Item History') || ss.insertSheet('Item History');
if (h.getLastRow() === 0) {
h.appendRow(['Timestamp','SKU','Product','Variant','Change Type','Old Value','New Value','Delta','Notes']);
}
var ev = data.event;
h.appendRow([ev.timestamp,ev.sku,ev.product,ev.variant,ev.type,ev.oldVal,ev.newVal,ev.delta,ev.notes||'']);
}
return ContentService.createTextOutput(JSON.stringify({ok:true})).setMimeType(ContentService.MimeType.JSON);
}