storage.js

2.49 KB
02/11/2025 07:22
JS
storage.js
const Storage = {
  saveTemplate(name, desc) {return Templates.saveCurrent(name, desc);},
  exportAll() {
    return {
      template: {
        paperSize: document.getElementById('paper-size').value,
        components: Pro.components.map(c => ({type: c.type, data: {...c.data}}))
      },
      data: Pro.data,
      items: Pro.items
    };
  },
  importAll(obj) {
    if (obj.template) {
      document.getElementById('paper-size').value = obj.template.paperSize || '80mm';
      changePaperSize();
      Pro.components = (obj.template.components || []).map(c => ({id: 'comp-' + (Pro.idCounter++), type: c.type, data: {...c.data}}));
      document.getElementById('drop-zone').innerHTML = '';
      Pro.components.forEach(renderComponent);
    }
    if (obj.data) {Pro.data = {...Pro.data, ...obj.data, store: {...Pro.data.store, ...obj.data.store}, receipt: {...Pro.data.receipt, ...obj.data.receipt}}; fillDataForm();}
    if (Array.isArray(obj.items)) Pro.items = obj.items.map(it => ({...it}));
    renderItems();
  },
  // Receipts archive (for reprint)
  saveReceipt() {
    const snapshot = {
      id: Pro.data.receipt.id || ('INV-' + Date.now()),
      ts: Date.now(),
      template: {paperSize: document.getElementById('paper-size').value, components: Pro.components.map(c => ({type: c.type, data: {...c.data}}))},
      data: JSON.parse(JSON.stringify(Pro.data)),
      items: JSON.parse(JSON.stringify(Pro.items))
    };
    const arr = JSON.parse(localStorage.getItem('pro.receipts') || '[]');
    arr.unshift(snapshot);
    localStorage.setItem('pro.receipts', JSON.stringify(arr));
    // Best-effort: also send to server storage
    try {apiSaveReceipt(snapshot).catch(() => {});} catch (e) {}
    return snapshot;
  },
  listReceipts() {return JSON.parse(localStorage.getItem('pro.receipts') || '[]');},
  loadReceipt(id) {
    const r = Storage.listReceipts().find(x => x.id === id);
    if (!r) return;
    Storage.importAll({template: r.template, data: r.data, items: r.items});
  }
};

// API placeholders (PHP/MySQL ready)
async function apiSaveReceipt(snapshot) {
  // POST to api/save_receipt.php
  try {
    const res = await fetch('api/save_receipt.php', {method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(snapshot)});
    return await res.json();
  } catch (e) {return {ok: false, error: String(e)}}
}

async function apiListReceipts() {
  try {
    const res = await fetch('api/list_receipts.php');
    return await res.json();
  } catch (e) {return {ok: false, error: String(e)}}
}