${panels}
`;
}
function addDim(key){
const input = document.getElementById('dim-input-'+key);
const val = input.value.trim();
if(!val) return;
if(DB.dimensions[key].includes(val)){ toast('Value already exists','err'); return; }
DB.dimensions[key].push(val);
saveDB(); render(); toast('Dimension updated','ok');
}
function removeDim(key, idx){
DB.dimensions[key].splice(idx, 1);
saveDB(); render(); toast('Dimension updated','ok');
}
window.addDim = addDim;
window.removeDim = removeDim;
function backupJSON(){
const str = JSON.stringify(DB, null, 2);
const blob = new Blob([str], {type:'application/json'});
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `delta_invest_backup_${todayISO()}.json`;
a.click();
}
function restoreJSON(e){
const file = e.target.files[0];
if(!file) return;
const r = new FileReader();
r.onload = function(evt){
try{
const parsed = JSON.parse(evt.target.result);
if(!parsed.counters || !parsed.inventory){ toast('Invalid backup file format','err'); return; }
if(confirm('Are you sure you want to replace all current browser data with this backup file?')){
DB = parsed; saveDB(); render(); toast('System restored successfully','ok');
}
}catch(err){ toast('Error parsing file','err'); }
};
r.readAsText(file);
}
function clearAllData(){
if(confirm('CRITICAL WARNING: This will permanently delete all records, items, transactions, and settings stored in this browser. Are you absolutely sure?')){
DB = seedData(); saveDB(); render(); toast('System cleared completely','ok');
}
}
window.backupJSON = backupJSON;
window.restoreJSON = restoreJSON;
window.clearAllData = clearAllData;
/* =========================================================================
EXCEL & VIEW EXPORT FUNCTION
========================================================================= */
function exportView(viewKey){
let rows = [];
let name = '';
if(viewKey==='inventory'){ rows = DB.inventory; name = 'Inventory'; }
else if(viewKey==='suppliers'){ rows = DB.suppliers; name = 'Suppliers'; }
else if(viewKey==='customers'){ rows = DB.customers; name = 'Customers'; }
else if(viewKey==='purchaseOrders'){
rows = DB.purchaseOrders.map(p=>({
...p,
supplierName: supplierName(p.supplierId)
}));
name = 'Purchase_Orders';
}
else if(viewKey==='salesOrders'){
rows = DB.salesOrders.map(s=>({
...s,
customerName: customerName(s.customerId)
}));
name = 'Sales_Orders';
}
else if(viewKey==='receipts'){
rows = DB.receipts.map(r=>({ ...r, customerName: customerName(r.customerId) }));
name = 'Receipts';
}
else if(viewKey==='payments'){
rows = DB.payments.map(p=>({ ...p, supplierName: supplierName(p.supplierId, p.supplierNameFree) }));
name = 'Payments';
}
else if(viewKey==='workOrders'){
rows = DB.workOrders.map(w=>({ ...w, supplierName: supplierName(w.supplierId, w.supplierNameFree) }));
name = 'Work_Orders';
}
else if(viewKey==='pgTracking'){
rows = DB.pgTracking.map(p=>({ ...p, supplierName: supplierName(p.supplierId, p.supplierNameFree) }));
name = 'PG_Tracking';
}
if(!rows.length){ toast('No records available to export','err'); return; }
const ws = XLSX.utils.json_to_sheet(rows);
const wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, name);
XLSX.writeFile(wb, `delta_invest_${name.toLowerCase()}_${todayISO()}.xlsx`);
}
function exportAllExcel(){
const wb = XLSX.utils.book_new();
const addSheet = (data, name, mapFn) => {
const list = mapFn ? data.map(mapFn) : data;
const ws = XLSX.utils.json_to_sheet(list.length ? list : [{Message:'No records found'}]);
XLSX.utils.book_append_sheet(wb, ws, name);
};
addSheet(DB.inventory, 'Inventory Master');
addSheet(DB.suppliers, 'Suppliers');
addSheet(DB.customers, 'Customers');
addSheet(DB.purchaseOrders, 'Purchase Orders', p=>({ ...p, supplierName: supplierName(p.supplierId) }));
addSheet(DB.poDetails, 'PO Line Details');
addSheet(DB.salesOrders, 'Sales Orders', s=>({ ...s, customerName: customerName(s.customerId) }));
addSheet(DB.soDetails, 'SO Line Details');
addSheet(DB.receipts, 'Receipts', r=>({ ...r, customerName: customerName(r.customerId) }));
addSheet(DB.payments, 'Payments', p=>({ ...p, supplierName: supplierName(p.supplierId, p.supplierNameFree) }));
addSheet(DB.workOrders, 'Work Orders', w=>({ ...w, supplierName: supplierName(w.supplierId, w.supplierNameFree) }));
addSheet(DB.pgTracking, 'PG Tracking', p=>({ ...p, supplierName: supplierName(p.supplierId, p.supplierNameFree) }));
XLSX.writeFile(wb, `delta_invest_full_system_${todayISO()}.xlsx`);
toast('Full Excel database workbook downloaded','ok');
}
window.exportAllExcel = exportAllExcel;
/* =========================================================================
BOOTSTRAP
========================================================================= */
window.onload = function(){
loadDB();
render();
};