{
  "version": 3,
  "sources": ["/cdn/shop/t/3/assets/ims-dashboard.js?bust=20260531"],
  "sourcesContent": ["// StockMaestro Dashboard v2.1 \u2014 1780216265.7762551\r\n(function () {\r\n  'use strict';\r\n\r\n  async function load() {\r\n    const { AUTH, DB, UI, UTIL } = window.SM;\r\n    let companyId = AUTH.company?.id;\r\n    // Retry up to 10x if company not loaded yet (timing issue on page load)\r\n    if (!companyId) {\r\n      for (let i = 0; i < 10; i++) {\r\n        await new Promise(r => setTimeout(r, 300));\r\n        companyId = AUTH.company?.id;\r\n        if (companyId) break;\r\n      }\r\n    }\r\n    if (!companyId) { console.warn('[Dashboard] Company not loaded after retries'); return; }\r\n\r\n    UI.loading('ims-dash-stats', 'Loading stats...');\r\n\r\n    try {\r\n      // Run all queries in parallel\r\n      // Safe query wrapper \u2014 returns empty result instead of hanging on missing tables\r\n      const safeQuery = async (table, opts) => {\r\n        try {\r\n          const timeout = new Promise(r => setTimeout(() => r({data:[], error:null}), 5000));\r\n          const query = DB.select(table, opts);\r\n          return await Promise.race([query, timeout]);\r\n        } catch(e) { return {data:[], error:e}; }\r\n      };\r\n\r\n      const [\r\n        ordersRes, stockRes, importsRes,\r\n        claimsRes, payablesRes, logisticsRes, dsOrdersRes, unpaidRes, dealsRes\r\n      ] = await Promise.all([\r\n        safeQuery('orders', {\r\n          select: 'id,status,dispatched_at,total_value,created_at,order_number,customer_name,fulfillment_type,platforms(name)',\r\n          order: { col: 'created_at', asc: false }\r\n        }),\r\n        safeQuery('stock_levels', {\r\n          select: 'quantity,reserved_qty,product_id,warehouse_id,products(name,sku,reorder_threshold)'\r\n        }),\r\n        safeQuery('imports', {\r\n          select: 'id,status,container_number,eta'\r\n        }),\r\n        safeQuery('claims', {\r\n          select: 'id,status'\r\n        }),\r\n        safeQuery('accounts_payable', {\r\n          select: 'amount,paid_amount',\r\n          neq: { status: 'paid' }\r\n        }),\r\n        safeQuery('logistics_jobs', {\r\n          select: 'id,status,job_type',\r\n          eq: { status: 'unassigned' }\r\n        }),\r\n        safeQuery('orders', {\r\n          select: 'id,status,delivery_method,fulfillment_type',\r\n          eq: { fulfillment_type: 'dropship', delivery_method: 'self_arrange' }\r\n        }),\r\n        safeQuery('orders', {\r\n          select: 'id,payment_status,unpaid_expires_at',\r\n          eq: { payment_status: 'unpaid', fulfillment_type: 'retail' }\r\n        }),\r\n        safeQuery('deals', {\r\n          select: 'id,name,valid_to,is_active',\r\n          eq: { is_active: true }\r\n        })\r\n      ]);\r\n\r\n      const orders     = ordersRes.data || [];\r\n      const stock      = stockRes.data || [];\r\n      const imports    = importsRes.data || [];\r\n      const claims     = claimsRes.data || [];\r\n      const payables   = payablesRes.data || [];\r\n      const logistics  = logisticsRes.data || [];\r\n      const dsOrders   = dsOrdersRes.data || [];\r\n      const unpaidOrders = unpaidRes.data || [];\r\n      const deals        = dealsRes.data || [];\r\n      const today2       = new Date().toISOString().split('T')[0];\r\n      const activeDeals  = deals.filter(d=>d.valid_to>=today2);\r\n      const expiringDeals= deals.filter(d=>{\r\n        const daysLeft=(new Date(d.valid_to)-new Date())/(1000*60*60*24);\r\n        return daysLeft>=0&&daysLeft<=3;\r\n      });\r\n      \r\n\r\n      // Calculate stats\r\n      const today = new Date(); today.setHours(0,0,0,0);\r\n      const tomorrow = new Date(today); tomorrow.setDate(tomorrow.getDate()+1);\r\n\r\n      const openOrders     = orders.filter(o => ['confirmed','picking','packed'].includes(o.status) && o.fulfillment_type !== 'dropship');\r\n      const delayedOrders  = orders.filter(o => {\r\n        if(o.fulfillment_type === 'dropship') return false;\r\n        if(!o.dispatched_at || o.status !== 'dispatched') return false;\r\n        // Previously hardcoded to 3 days, while Order Management's actual\r\n        // delayed filter (util().isDelayed()) uses the shared\r\n        // IMS.delayedDays constant (currently 5) \u2014 the mismatch meant\r\n        // orders 3\u20134 days out were counted here but never appeared when\r\n        // clicking through to Order Management's delayed view.\r\n        return Math.floor((new Date() - new Date(o.dispatched_at)) / 86400000) >= IMS.delayedDays;\r\n      });\r\n      const todayDispatches= orders.filter(o => {\r\n        if (!o.dispatched_at || o.fulfillment_type === 'dropship') return false;\r\n        const d = new Date(o.dispatched_at); d.setHours(0,0,0,0);\r\n        return d.getTime() === today.getTime();\r\n      });\r\n      const pendingImports = imports.filter(i => ['ordered','in_transit','customs'].includes(i.status));\r\n      const grnPending     = imports.filter(i => i.status === 'grn_pending');\r\n      const lowStock       = stock.filter(s => s.products && s.quantity > 0 && s.quantity <= (s.products.reorder_threshold || 10));\r\n      const outOfStock     = stock.filter(s => s.quantity <= 0 && s.products);\r\n      const openClaims     = claims.filter(c => ['raised','acknowledged','escalated_14','overdue_30'].includes(c.status));\r\n      const totalPayables  = payables.reduce((sum, p) => sum + ((p.amount||0) - (p.paid_amount||0)), 0);\r\n      const totalStockVal  = 0;\r\n      const unassignedJobs = logistics.length;\r\n      const selfCollection = dsOrders.filter(o => !['collected','cancelled','delivered'].includes(o.status)).length;\r\n      // Unpaid expiry stats \u2014 all unpaid orders, regardless of expiry date\r\n      const allUnpaid      = unpaidOrders.filter(o => !['cancelled','refunded'].includes(o.status));\r\n      const expiredUnpaid  = allUnpaid.filter(o => o.unpaid_expires_at && new Date(o.unpaid_expires_at) <= new Date());\r\n      const expiringToday  = allUnpaid.filter(o => o.unpaid_expires_at && new Date(o.unpaid_expires_at) <= tomorrow && new Date(o.unpaid_expires_at) > new Date());\r\n\r\n      renderStats({\r\n        openOrders, delayedOrders, todayDispatches, pendingImports,\r\n        grnPending, lowStock, outOfStock, openClaims, totalPayables,\r\n        totalStockVal, unassignedJobs, selfCollection,\r\n        expiredUnpaid, expiringToday, allUnpaid,\r\n        activeDeals, expiringDeals\r\n      });\r\n\r\n      // Update nav badges\r\n      UI.updateBadge('ims-badge-orders', openOrders.filter(o=>o.fulfillment_type!=='dropship').length + delayedOrders.filter(o=>o.fulfillment_type!=='dropship').length);\r\n      UI.updateBadge('ims-badge-imports', pendingImports.length + grnPending.length);\r\n      UI.updateBadge('ims-badge-logistics', unassignedJobs);\r\n\r\n      // Delayed orders alert banner\r\n      const alertEl = document.getElementById('ims-dash-alert');\r\n      if (alertEl) {\r\n        if (delayedOrders.length > 0) {\r\n          alertEl.innerHTML = `\r\n            <div class=\"ims__alert ims__alert--warning\">\r\n              <i class=\"ti ti-alert-triangle\" aria-hidden=\"true\"></i>\r\n              <span><strong>${delayedOrders.length} order${delayedOrders.length>1?'s':''}</strong> dispatched ${IMS.delayedDays}+ days ago \u2014 check shipment status and update tracking.</span>\r\n              <button class=\"ims__alert-action\" onclick=\"window.SM.UI.showPanel('orders');setTimeout(()=>{const s=document.getElementById('ims-orders-status');if(s){s.value='delayed';s.dispatchEvent(new Event('change'))}},200)\">View all</button>\r\n            </div>`;\r\n        } else {\r\n          alertEl.innerHTML = '';\r\n        }\r\n      }\r\n\r\n      await loadRecentOrders(orders);\r\n      loadLowStock(lowStock, outOfStock);\r\n      loadImportStatus(pendingImports, grnPending, imports);\r\n\r\n    } catch (err) {\r\n      console.error('[Dashboard]', err);\r\n      window.SM.UI.toast('Failed to load dashboard data', 'error');\r\n    }\r\n  }\r\n\r\n  function renderStats({ openOrders, delayedOrders, todayDispatches, pendingImports,\r\n    grnPending, lowStock, outOfStock, openClaims, totalPayables, totalStockVal,\r\n    unassignedJobs, selfCollection, expiredUnpaid, expiringToday, allUnpaid,\r\n    activeDeals, expiringDeals }) {\r\n    const { UTIL } = window.SM;\r\n    const el = document.getElementById('ims-dash-stats');\r\n    if (!el) return;\r\n\r\n    const stats = [\r\n      // Row 1\r\n      { label:'Total stock value',     value: UTIL.formatCurrency(totalStockVal),  sub: totalStockVal===0 ? 'Set cost prices to see value' : 'Cost value, all warehouses', type:'' },\r\n      { label:'Open orders',           value: openOrders.length,                   sub:'Awaiting dispatch',               type: openOrders.length>20?'warning':'',    click:'orders' },\r\n      { label:'Delayed orders',        value: delayedOrders.length,                sub:'5+ days, no delivery',            type: delayedOrders.length>0?'danger':'success', click:'orders-delayed' },\r\n      { label:\"Today's dispatches\",    value: todayDispatches.length,              sub:'Sent today',                      type:'success',                             click:'orders-dispatched-today' },\r\n      // Row 2\r\n      { label:'Pending imports',       value: pendingImports.length,               sub:'In transit or customs',           type: pendingImports.length>0?'warning':'', click:'imports' },\r\n      { label:'GRN pending',           value: grnPending.length,                   sub:'Arrived, awaiting check',         type: grnPending.length>0?'warning':'',     click:'imports' },\r\n      { label:'Unassigned jobs',       value: unassignedJobs,                      sub:'Not yet assigned',                type: unassignedJobs>0?'warning':'',        click:'logistics' },\r\n      { label:'Ready for collection',  value: selfCollection,                      sub:'Customer self-collection',        type: selfCollection>0?'accent':'',         click:'dropship-collection' },\r\n      // Row 3\r\n      { label:'Low stock items',       value: lowStock.length + outOfStock.length, sub:`${outOfStock.length} out of stock`, type:(lowStock.length+outOfStock.length)>0?'danger':'success', click:'inventory-lowstock' },\r\n      { label:'Outstanding payables',  value: UTIL.formatCurrency(totalPayables),  sub:'Unpaid supplier invoices',        type: totalPayables>0?'warning':'',         click:'accounts' },\r\n      { label:'Open claims',           value: openClaims.length,                   sub:'With couriers',                   type: openClaims.length>0?'warning':'',     click:'accounts' },\r\n      { label:'Unpaid orders',        value: allUnpaid.length,                        sub:'Payment not received',      type: allUnpaid.length>0?'danger':'',        click:'orders-unpaid' },\r\n      { label:'Unpaid \u2014 expiring',    value: expiringToday.length,                    sub:'Expire within 24h',         type: expiringToday.length>0?'warning':'',   click:'orders' },\r\n      { label:'Active deals',         value: activeDeals.length,                      sub: expiringDeals.length>0?`${expiringDeals.length} expiring within 3 days`:'All deals current', type: expiringDeals.length>0?'warning':'success', click:'deals' },\r\n    ];\r\n\r\n    // FIX: use statClick() for all clickable stats so the special\r\n    // 'inventory-lowstock' case (which has no matching panel ID) is\r\n    // routed through the handler that knows how to open the inventory\r\n    // panel and pre-filter the stock tab to \"low\".\r\n    el.innerHTML = stats.map(s => `\r\n      <div class=\"ims__stat${s.click?' ims__stat--clickable':''}\" ${s.click?`onclick=\"window.IMS_DASHBOARD.statClick('${s.click}')\" role=\"button\" tabindex=\"0\" style=\"cursor:pointer\"`:''}\r\n        title=\"${s.click?'Click to view':''}\" style=\"${s.click?'cursor:pointer':''}\">\r\n        <div class=\"ims__stat-label\">${s.label}</div>\r\n        <div class=\"ims__stat-value${s.type?' ims__stat-value--'+s.type:''}\">${s.value}</div>\r\n        <div class=\"ims__stat-sub\">${s.sub}</div>\r\n      </div>\r\n    `).join('');\r\n  }\r\n\r\n  async function loadRecentOrders(orders) {\r\n    const { UTIL } = window.SM;\r\n    const tbody = document.getElementById('ims-dash-orders');\r\n    if (!tbody) return;\r\n\r\n    const recent = orders.slice(0, 10);\r\n    if (!recent.length) {\r\n      tbody.innerHTML = '<tr><td colspan=\"5\" class=\"ims__table-empty\">No orders yet</td></tr>';\r\n      return;\r\n    }\r\n\r\n    tbody.innerHTML = recent.map(o => {\r\n      const isDelayed = UTIL.isDelayed(o);\r\n      const status = isDelayed ? 'delayed' : o.status;\r\n      return `\r\n        <tr class=\"${isDelayed ? 'ims__row--delayed' : ''}\" style=\"cursor:pointer\"\r\n          onclick=\"window.SM.UI.showPanel('orders');setTimeout(()=>window.IMS_ORDERS?.openOrder('${o.id}'),400)\">\r\n          <td><span class=\"ims__link\">${UTIL.sanitize(o.order_number)}</span></td>\r\n          <td>${UTIL.sanitize(o.customer_name||'\u2014')}</td>\r\n          <td>${UTIL.sanitize(o.platforms?.name||'\u2014')}</td>\r\n          <td>${UTIL.formatCurrency(o.total_value)}</td>\r\n          <td>${UTIL.pill(status)}</td>\r\n        </tr>`;\r\n    }).join('');\r\n  }\r\n\r\n  function loadLowStock(lowStock, outOfStock) {\r\n    const { UTIL } = window.SM;\r\n    const el = document.getElementById('ims-dash-lowstock');\r\n    if (!el) return;\r\n\r\n    const all = [...outOfStock, ...lowStock].slice(0, 6);\r\n    if (!all.length) {\r\n      el.innerHTML = '<div style=\"display:flex;align-items:center;gap:6px;padding:10px 0;font-size:12px;color:var(--ims-success)\"><i class=\"ti ti-circle-check\"></i>All stock levels healthy</div>';\r\n      return;\r\n    }\r\n\r\n    el.innerHTML = all.map(s => {\r\n      const threshold = s.products?.reorder_threshold || 10;\r\n      const pct = s.quantity <= 0 ? 0 : Math.min(100, Math.round((s.quantity / threshold) * 100));\r\n      return `\r\n        <div class=\"ims__stock-row\">\r\n          <div class=\"ims__stock-info\">\r\n            <div class=\"ims__stock-name\">${UTIL.sanitize(s.products?.name||'\u2014')}</div>\r\n            <div class=\"ims__stock-sku\">${UTIL.sanitize(s.products?.sku||'')}</div>\r\n          </div>\r\n          <div class=\"ims__stock-bar-wrap\"><div class=\"ims__stock-bar\" style=\"width:${pct}%\"></div></div>\r\n          <div class=\"ims__stock-qty\">${s.quantity}</div>\r\n        </div>`;\r\n    }).join('');\r\n  }\r\n\r\n  function loadImportStatus(pendingImports, grnPending, allImports) {\r\n    const { UTIL } = window.SM;\r\n    const el = document.getElementById('ims-dash-imports');\r\n    if (!el) return;\r\n\r\n    const show = [...grnPending, ...pendingImports].slice(0, 5);\r\n    if (!show.length) {\r\n      el.innerHTML = '<div style=\"display:flex;align-items:center;gap:6px;padding:10px 0;font-size:12px;color:var(--ims-success)\"><i class=\"ti ti-circle-check\"></i>No pending imports</div>';\r\n      return;\r\n    }\r\n\r\n    el.innerHTML = show.map(imp => `\r\n      <div class=\"ims__import-row\" onclick=\"window.SM.UI.showPanel('imports')\">\r\n        <div>\r\n          <div class=\"ims__import-container\">${UTIL.sanitize(imp.container_number||'\u2014')}</div>\r\n          <div class=\"ims__import-eta\">${imp.eta ? 'ETA: ' + UTIL.formatDate(imp.eta) : 'ETA: TBC'}</div>\r\n        </div>\r\n        ${UTIL.pill(imp.status)}\r\n      </div>`).join('');\r\n  }\r\n\r\n  // FIX: this function now handles all stat clicks, including the special\r\n  // 'inventory-lowstock' case which cannot use showPanel() directly\r\n  // because there is no panel with that ID \u2014 it instead navigates to the\r\n  // inventory panel and pre-filters the stock tab to low stock items.\r\n  function statClick(target) {\r\n    if (target === 'inventory-lowstock') {\r\n      window.SM.UI.showPanel('inventory');\r\n      setTimeout(() => {\r\n        if (!window.IMS_INVENTORY) return;\r\n        window.IMS_INVENTORY.initTabs();\r\n        const tabs = document.getElementById('ims-inv-tabs');\r\n        tabs?.querySelectorAll('.ims__tab').forEach(t => t.classList.remove('ims__tab--active'));\r\n        const stockTab = tabs?.querySelector('[data-tab=\"stock\"]');\r\n        if (stockTab) stockTab.classList.add('ims__tab--active');\r\n        window.IMS_INVENTORY.loadStock().then(() => {\r\n          setTimeout(() => {\r\n            const f = document.getElementById('ims-stk-filter');\r\n            if (f) { f.value = 'low'; window.IMS_INVENTORY.loadStockData(); }\r\n          }, 400);\r\n        });\r\n      }, 400);\r\n    } else if (target === 'dropship-collection') {\r\n      // Navigate to Dropship \u2192 Orders tab, pre-filtered to self-arrange pending collection\r\n      window.SM.UI.showPanel('dropship');\r\n      setTimeout(() => {\r\n        if (!window.IMS_DROPSHIP) return;\r\n        // Switch to Orders tab\r\n        const tabs = document.getElementById('ims-ds-tabs');\r\n        if (tabs) {\r\n          tabs.querySelectorAll('.ims__tab').forEach(t => t.classList.remove('ims__tab--active'));\r\n          const ordersTab = tabs.querySelector('[data-tab=\"orders\"]');\r\n          if (ordersTab) {\r\n            ordersTab.classList.add('ims__tab--active');\r\n            ordersTab.click(); // Trigger the tab click event to load the tab\r\n          }\r\n        }\r\n        // Load orders filtered to self-arrange pending\r\n        setTimeout(() => window.IMS_DROPSHIP.loadOrders('self_arrange_pending'), 200);\r\n      }, 400);\r\n    } else if (target === 'orders-delayed') {\r\n      // Order Management's default view (no filter) only shows\r\n      // confirmed/picking orders \u2014 delayed orders are status='dispatched',\r\n      // so they never appeared without explicitly setting this filter.\r\n      window.SM.UI.showPanel('orders');\r\n      setTimeout(() => {\r\n        const s = document.getElementById('ims-orders-status');\r\n        if (s) { s.value = 'delayed'; s.dispatchEvent(new Event('change')); }\r\n      }, 400);\r\n    } else if (target === 'orders-dispatched-today') {\r\n      // Same root cause as delayed \u2014 status='dispatched' never shows in\r\n      // the default confirmed/picking view. Note: Order Management's\r\n      // main list has no date-range filter, so this shows ALL currently\r\n      // dispatched orders rather than only today's \u2014 the closest match\r\n      // available given the existing UI controls.\r\n      window.SM.UI.showPanel('orders');\r\n      setTimeout(() => {\r\n        const s = document.getElementById('ims-orders-status');\r\n        if (s) { s.value = 'dispatched'; s.dispatchEvent(new Event('change')); }\r\n      }, 400);\r\n    } else if (target === 'orders-unpaid') {\r\n      // The main Order Management list has no payment-status filter at\r\n      // all \u2014 only Order History does. Routing there instead, with the\r\n      // payment filter set to 'unpaid' and the date range cleared, since\r\n      // History defaults to the current month only, which would\r\n      // otherwise silently hide older unpaid orders.\r\n      window.SM.UI.showPanel('orders');\r\n      setTimeout(() => {\r\n        if (!window.IMS_ORDERS) return;\r\n        window.IMS_ORDERS.showHistory();\r\n        setTimeout(() => {\r\n          const p = document.getElementById('ims-hist-payment');\r\n          const from = document.getElementById('ims-hist-from');\r\n          if (from) from.value = '';\r\n          if (p) { p.value = 'unpaid'; p.dispatchEvent(new Event('change')); }\r\n        }, 400);\r\n      }, 200);\r\n    } else {\r\n      window.SM.UI.showPanel(target);\r\n    }\r\n  }\r\n\r\n  window.addEventListener('ims:panel', e => {\r\n    if (e.detail.panel === 'dashboard') load();\r\n  });\r\n  window.addEventListener('ims:ready', load);\r\n\r\n  window.IMS_DASHBOARD = { load, statClick };\r\n\r\n})();\r\n"],
  "mappings": "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",
  "names": []
}
