{
  "version": 3,
  "sources": ["/cdn/shop/t/4/assets/ims-util-print.js?bust=20260708"],
  "sourcesContent": ["(function(){\r\n  'use strict';\r\n  const util=()=>window.SM.UTIL;\r\n  const auth=()=>window.SM.AUTH;\r\n\r\n  // \u2500\u2500\u2500 SHARED PRINT CSS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  // One stylesheet for every printed document. Centralizing this means\r\n  // a fix here (e.g. signature box alignment) applies everywhere at once.\r\n  const BASE_STYLES=`\r\n    *{box-sizing:border-box}\r\n    body{font-family:'Courier New',Courier,monospace;font-size:10pt;color:#000;margin:0;padding:12mm}\r\n    @page{margin:0;size:A4}\r\n    .ph{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:6px}\r\n    .cb{min-width:180px}.cd{font-size:8.5pt;color:#444;line-height:1.55;margin-top:3px}\r\n    .tb{text-align:center;flex:1;padding:0 16px}\r\n    .tt{font-size:15pt;font-weight:bold;text-transform:uppercase;letter-spacing:.06em}\r\n    .tn{font-size:11pt;font-weight:bold;margin-top:3px}\r\n    .db{text-align:left;min-width:180px}.dn{font-size:11pt;font-weight:bold}\r\n    .dd{font-size:8.5pt;color:#444;line-height:1.55;margin-top:2px}\r\n    hr.rule{border:none;border-top:1pt solid #000;margin:5px 0}\r\n    hr.rule-dbl{border:none;border-top:3pt double #000;margin:5px 0}\r\n    table{width:100%;border-collapse:collapse;font-size:9pt;table-layout:fixed}\r\n    th{font-weight:bold;padding:3px 5px;background:#f0f0f0;border-top:1pt solid #000;border-bottom:1pt solid #000;overflow:hidden;white-space:nowrap;font-size:8.5pt;text-align:left}\r\n    th.r{text-align:right}\r\n    th.ctr{text-align:center}\r\n    td{padding:3px 5px;vertical-align:middle;overflow:hidden;border-bottom:.4pt solid #ddd;word-break:break-word}\r\n    .r{text-align:right}.ctr{text-align:center}.ln{font-size:13pt;font-weight:bold;line-height:1}.pc{font-weight:bold}.sm{font-size:8.5pt}\r\n    .sig{display:inline-block;min-width:55px;min-height:24px;border:1pt solid #aaa;border-radius:2px}\r\n    .st{font-size:9pt;font-weight:bold;text-transform:uppercase;letter-spacing:.04em;margin:10px 0 3px;display:flex;justify-content:space-between;align-items:center}\r\n    .pg{font-size:8pt;font-weight:400;color:#666;letter-spacing:0}\r\n    .tr td{font-weight:bold;border-top:1pt solid #000;border-bottom:2pt solid #000;background:#f8f8f8}\r\n    .subtotal td{background:#fafafa;border-top:.5pt solid #bbb;font-size:8.5pt;color:#333}\r\n    .pf{font-size:8pt;color:#888;text-align:center;padding-top:5px;margin-top:6px;border-top:.5pt solid #ccc}\r\n    .pb{page-break-before:always}\r\n    .badge{display:inline-block;font-size:7pt;font-weight:bold;padding:1px 5px;border-radius:3px;letter-spacing:.03em;margin-left:4px;vertical-align:middle}\r\n    .badge--dark{background:#000;color:#fff}\r\n    .badge--neutral{background:#e0e0e0;color:#555}\r\n    .badge--warn{background:#fff3cd;color:#92700a;border:.5pt solid #d4a017}\r\n    .badge--danger{background:#fee2e2;color:#b91c1c;border:.5pt solid #dc2626}\r\n    .badge--success{background:#d1fae5;color:#047857;border:.5pt solid #059669}\r\n    .highlightrow td{background:#fcfcfc}\r\n    .summarybox{font-size:9pt;font-weight:bold;background:#f0f0f0;border:1pt solid #000;padding:6px 10px;margin:6px 0 8px}\r\n    @media print{body{padding:8mm}@page{margin:12mm 10mm;size:A4}.pb{page-break-before:always}}\r\n  `;\r\n\r\n  // \u2500\u2500\u2500 HEADER \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  // Builds the company logo/address block + document title + right-side info box.\r\n  // Company details always come from window.SM.AUTH.company \u2014 never passed in,\r\n  // so every document automatically reflects current Company Setup data.\r\n  //\r\n  // opts: {\r\n  //   title:        string  \u2014 document title, e.g. \"Delivery Manifest\", \"Pick List\"\r\n  //   docRef:       string  \u2014 reference shown under title, e.g. manifest number\r\n  //   rightLabel:   string  \u2014 small uppercase label above the right box, e.g. \"Driver / Vehicle\"\r\n  //   rightName:    string  \u2014 bold name line, e.g. driver name or customer name\r\n  //   rightLines:   array   \u2014 additional lines (already HTML-safe or pre-sanitized) joined with <br>\r\n  // }\r\n  function header(opts){\r\n    const company=auth().company;\r\n    const logoHtml=company?.logo_url\r\n      ?`<img src=\"${company.logo_url}\" style=\"height:44px;width:auto;display:block\">`\r\n      :`<div style=\"font-size:13pt;font-weight:bold;color:#1B3A6B\">${util().sanitize(company?.name||'Company name')}</div>`;\r\n    const addressLines=[\r\n      company?.address||'',\r\n      company?.city||'',\r\n      company?.postcode||'',\r\n      company?.country||''\r\n    ].filter(Boolean).join('<br>');\r\n\r\n    const rightBlock=(opts.rightLabel||opts.rightName||opts.rightLines)\r\n      ?`<div class=\"db\">\r\n          ${opts.rightLabel?`<div style=\"font-size:8.5pt;color:#555;text-transform:uppercase;letter-spacing:.05em;margin-bottom:3px\">${util().sanitize(opts.rightLabel)}</div>`:''}\r\n          ${opts.rightName?`<div class=\"dn\">${util().sanitize(opts.rightName)}</div>`:''}\r\n          ${opts.rightLines?`<div class=\"dd\">${(opts.rightLines||[]).join('<br>')}</div>`:''}\r\n        </div>`\r\n      :'';\r\n\r\n    return `\r\n      <div class=\"ph\">\r\n        <div class=\"cb\">${logoHtml}<div class=\"cd\">${addressLines}</div></div>\r\n        <div class=\"tb\"><div class=\"tt\">${util().sanitize(opts.title||'')}</div>${opts.docRef?`<div class=\"tn\">${util().sanitize(opts.docRef)}</div>`:''}</div>\r\n        ${rightBlock}\r\n      </div>\r\n      <hr class=\"rule\">`;\r\n  }\r\n\r\n  // \u2500\u2500\u2500 TABLE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  // opts: {\r\n  //   colWidths: ['5%','10%',...]                    \u2014 one per column, required\r\n  //   columns:   [{label:'Order #', align:'left'|'r'|'ctr'}, ...]\r\n  //   rows:      [['ORD-001','John',...], ...]        \u2014 plain values, auto-sanitized\r\n  //               OR pre-built <tr>...</tr> strings if rowsArePrebuilt:true\r\n  //   rowsArePrebuilt: boolean \u2014 set true if you built custom <tr> markup yourself\r\n  //   totalsRow: ['<td>...</td>...'] or html string    \u2014 optional, appended in <tr class=\"tr\">\r\n  // }\r\n  // Returns the full <table> HTML including colgroup + thead + tbody.\r\n  function table(opts){\r\n    const colgroup=`<colgroup>${(opts.colWidths||[]).map(w=>`<col style=\"width:${w}\">`).join('')}</colgroup>`;\r\n    const theadCells=(opts.columns||[]).map(c=>{\r\n      const cls=c.align==='r'?' class=\"r\"':c.align==='ctr'?' class=\"ctr\"':'';\r\n      return `<th${cls}>${util().sanitize(c.label||'')}</th>`;\r\n    }).join('');\r\n    const thead=`<tr>${theadCells}</tr>`;\r\n\r\n    let bodyRows;\r\n    if(opts.rowsArePrebuilt){\r\n      bodyRows=(opts.rows||[]).join('');\r\n    } else {\r\n      bodyRows=(opts.rows||[]).map(row=>{\r\n        const cells=row.map((val,i)=>{\r\n          const col=(opts.columns||[])[i]||{};\r\n          const cls=col.align==='r'?' class=\"r\"':col.align==='ctr'?' class=\"ctr\"':col.cellClass?` class=\"${col.cellClass}\"`:'';\r\n          return `<td${cls}>${val}</td>`;\r\n        }).join('');\r\n        return `<tr>${cells}</tr>`;\r\n      }).join('');\r\n    }\r\n\r\n    const totalsHtml=opts.totalsRow\r\n      ?(Array.isArray(opts.totalsRow)?`<tr class=\"tr\">${opts.totalsRow.join('')}</tr>`:opts.totalsRow)\r\n      :'';\r\n\r\n    return `<table>${colgroup}<thead>${thead}</thead><tbody>${bodyRows}${totalsHtml}</tbody></table>`;\r\n  }\r\n\r\n  // \u2500\u2500\u2500 PAGINATION (flat) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  // Splits a flat array of pre-built row strings into pages of n rows each.\r\n  function paginate(rows,rowsPerPage){\r\n    const pages=[];\r\n    for(let i=0;i<rows.length;i+=rowsPerPage) pages.push(rows.slice(i,i+rowsPerPage));\r\n    return pages.length?pages:[[]];\r\n  }\r\n\r\n  // \u2500\u2500\u2500 PAGINATION (grouped) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  // For documents where related rows must never split across a page break\r\n  // (e.g. a manifest stop's product lines + its subtotal row).\r\n  // groups: [{ rows: [...rowHtmlStrings], rowCount: n }, ...]\r\n  // Returns pages, where each page is a flat array of row strings.\r\n  function paginateGrouped(groups,maxRowsPerPage){\r\n    const pages=[];\r\n    let currentPage=[];\r\n    let currentCount=0;\r\n    groups.forEach(group=>{\r\n      if(currentCount+group.rowCount>maxRowsPerPage&&currentPage.length){\r\n        pages.push(currentPage);\r\n        currentPage=[];\r\n        currentCount=0;\r\n      }\r\n      currentPage.push(...group.rows);\r\n      currentCount+=group.rowCount;\r\n    });\r\n    if(currentPage.length)pages.push(currentPage);\r\n    if(!pages.length)pages.push([]);\r\n    return pages;\r\n  }\r\n\r\n  // \u2500\u2500\u2500 SMALL REUSABLE PIECES \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  function signatureBox(minWidth){\r\n    return `<span class=\"sig\"${minWidth?` style=\"min-width:${minWidth}px\"`:''}></span>`;\r\n  }\r\n\r\n  // variant: 'dark' | 'neutral' | 'warn' | 'danger' | 'success'\r\n  function badge(label,variant){\r\n    return `<span class=\"badge badge--${variant||'neutral'}\">${util().sanitize(label)}</span>`;\r\n  }\r\n\r\n  function summaryBox(text){\r\n    return `<div class=\"summarybox\">${text}</div>`;\r\n  }\r\n\r\n  // \u2500\u2500\u2500 PAGE FOOTER \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  function pageFooter(parts,pageNum,totalPages){\r\n    const segs=[...(parts||[]),`Page ${pageNum} of ${totalPages}`];\r\n    return `<div class=\"pf\">${segs.map(s=>util().sanitize(s)).join(' | ')}</div>`;\r\n  }\r\n\r\n  // \u2500\u2500\u2500 DOCUMENT WRAPPER \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  // Wraps assembled page HTML blocks with the shared stylesheet and\r\n  // calls the existing util().print() to open the print window.\r\n  // pages: array of page HTML strings (each already includes header/table/footer)\r\n  // printTitle: browser tab title for the print window\r\n  function renderDocument(pages,printTitle){\r\n    const pagesHtml=pages.map((p,i)=>`<div class=\"${i>0?'pb':''}\">${p}</div>`).join('');\r\n    util().print(`<style>${BASE_STYLES}</style>${pagesHtml}`,printTitle);\r\n  }\r\n\r\n  // \u2500\u2500\u2500 QUICK PRINT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  // The common-case composed function: one document, one table, simple\r\n  // flat pagination. Covers picklists, simple order confirmations, single\r\n  // -list reports \u2014 anything that's fundamentally \"header + one table\".\r\n  //\r\n  // For multi-section documents with grouped pagination (e.g. the delivery\r\n  // manifest's loading sheet + delivery sheet), use the primitives above\r\n  // directly instead of quickPrint.\r\n  //\r\n  // opts: {\r\n  //   title:        string   \u2014 document title, e.g. \"Pick List\"\r\n  //   docRef:       string   \u2014 optional reference line under title\r\n  //   rightLabel/rightName/rightLines \u2014 optional right-side header box (see header())\r\n  //   colWidths:    array    \u2014 passed to table()\r\n  //   columns:      array    \u2014 passed to table()\r\n  //   rows:         array    \u2014 passed to table()\r\n  //   rowsArePrebuilt: boolean\r\n  //   totalsRow:    array|string \u2014 optional\r\n  //   rowsPerPage:  number   \u2014 default 25\r\n  //   sectionLabel: string   \u2014 small bold line above the table, e.g. \"Sorted by bin location\"\r\n  //   summaryText:  string   \u2014 optional highlighted summary box under the section label\r\n  //   footerParts:  array    \u2014 strings joined into the page footer, e.g. [company name, doc ref]\r\n  //   printTitle:   string   \u2014 browser tab title\r\n  // }\r\n  function quickPrint(opts){\r\n    const rowsPerPage=opts.rowsPerPage||25;\r\n    const allRows=opts.rowsArePrebuilt\r\n      ?(opts.rows||[])\r\n      :(opts.rows||[]).map(row=>{\r\n          const cells=row.map((val,i)=>{\r\n            const col=(opts.columns||[])[i]||{};\r\n            const cls=col.align==='r'?' class=\"r\"':col.align==='ctr'?' class=\"ctr\"':col.cellClass?` class=\"${col.cellClass}\"`:'';\r\n            return `<td${cls}>${val}</td>`;\r\n          }).join('');\r\n          return `<tr>${cells}</tr>`;\r\n        });\r\n\r\n    const rowPages=paginate(allRows,rowsPerPage);\r\n    const totalPages=rowPages.length;\r\n\r\n    const pages=rowPages.map((pageRows,pi)=>{\r\n      const isLast=pi===rowPages.length-1;\r\n      const tableHtml=table({\r\n        colWidths:opts.colWidths,\r\n        columns:opts.columns,\r\n        rows:pageRows,\r\n        rowsArePrebuilt:true,\r\n        totalsRow:isLast?opts.totalsRow:null\r\n      });\r\n      return `\r\n        ${header({title:opts.title,docRef:opts.docRef,rightLabel:opts.rightLabel,rightName:opts.rightName,rightLines:opts.rightLines})}\r\n        ${opts.sectionLabel?`<div class=\"st\">${util().sanitize(opts.sectionLabel)} <span class=\"pg\">Page ${pi+1} of ${totalPages}</span></div>`:''}\r\n        ${pi===0&&opts.summaryText?summaryBox(opts.summaryText):''}\r\n        <hr class=\"rule\">\r\n        ${tableHtml}\r\n        <hr class=\"rule-dbl\">\r\n        ${pageFooter(opts.footerParts,pi+1,totalPages)}\r\n      `;\r\n    });\r\n\r\n    renderDocument(pages,opts.printTitle||opts.title||'Document');\r\n  }\r\n\r\n  // \u2500\u2500\u2500 EXPOSE GLOBAL \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  // Standardized invoice layout \u2014 the single, shared invoice-printing\r\n  // function for the whole app (Accounts and Dropship both call this;\r\n  // no module should build its own custom invoice HTML). Matches the\r\n  // MDF London commercial invoice reference format: boxed From/Sold To\r\n  // sections, Invoice No/Date/Order No/Account Ref mini-table, a full\r\n  // product-line table (Product Code, Description, Qty, HS Tariff Code,\r\n  // Country of Origin, Unit Wt, Unit Price, Net Amt), a totals box\r\n  // including a manual Carriage Net line, and a bank-details/signature\r\n  // footer alongside a packages/weight/incoterms footer.\r\n  //\r\n  // Expected `data` shape:\r\n  // {\r\n  //   company:{name,address,postcode,country,vat_number,bank_name,bank_account,bank_sort_code},\r\n  //   invoiceNumber, invoiceDate, orderNo, accountRef,\r\n  //   customer:{name,address,postcode,vatNumber,eoriNo},\r\n  //   lines:[{productCode,description,quantity,hsTariffCode,countryOfOrigin,unitWeightKg,unitPrice,netAmount}],\r\n  //   netTotal, carriageAmount, vatAmount, grossTotal,\r\n  //   totalPackages, totalNetWeightKg, incoterms\r\n  // }\r\n  function buildInvoiceHtml(data){\r\n    const S=v=>window.SM.UTIL.sanitize(v==null?'':String(v));\r\n    const money=v=>(v==null?'0.00':Number(v).toFixed(2));\r\n\r\n    const itemRowsHtml=(data.lines||[]).map(l=>`\r\n      <tr>\r\n        <td>${S(l.productCode||'\u2014')}</td>\r\n        <td>${S(l.description||'\u2014')}</td>\r\n        <td class=\"r\">${money(l.quantity)}</td>\r\n        <td>${S(l.hsTariffCode||'')}</td>\r\n        <td>${S(l.countryOfOrigin||'')}</td>\r\n        <td class=\"r\">${l.unitWeightKg!=null?money(l.unitWeightKg):''}</td>\r\n        <td class=\"r\">\u00A3${money(l.unitPrice)}</td>\r\n        <td class=\"r\">\u00A3${money(l.netAmount)}</td>\r\n      </tr>`).join('') || '<tr><td colspan=\"8\" style=\"text-align:center;color:#888;padding:12px\">No items on this invoice</td></tr>';\r\n\r\n    return `\r\n      <style>\r\n        *{box-sizing:border-box}\r\n        body{font-family:Arial,Helvetica,sans-serif;font-size:10pt;color:#000;margin:0;padding:14mm}\r\n        @page{margin:0;size:A4}\r\n        .box{border:1pt solid #000;padding:8px 10px}\r\n        .lbl{font-size:8.5pt;color:#333;margin-bottom:2px}\r\n        .row{display:flex;gap:14px;margin-bottom:10px}\r\n        .col{flex:1}\r\n        .logo{font-size:30pt;font-weight:800;letter-spacing:-1px;line-height:1;text-align:right}\r\n        .doctitle{display:flex;justify-content:space-between;align-items:flex-end;margin:6px 0 10px}\r\n        .doctitle .t{font-size:14pt;font-weight:bold}\r\n        .meta{border-collapse:collapse;width:280px}\r\n        .meta td{border:1pt solid #000;padding:4px 8px;font-size:9pt}\r\n        .meta td:first-child{background:#fafafa;width:45%}\r\n        table.items{width:100%;border-collapse:collapse;font-size:9pt;margin-top:10px}\r\n        table.items th{background:#fff;border-top:1.5pt solid #000;border-bottom:1pt solid #000;text-align:left;padding:4px 5px;font-size:8.5pt}\r\n        table.items th.r,table.items td.r{text-align:right}\r\n        table.items td{padding:4px 5px;font-size:9pt}\r\n        hr.thick{border:none;border-top:1.5pt solid #000;margin:10px 0}\r\n        .totals{width:280px;margin-left:auto;border-collapse:collapse}\r\n        .totals td{border:1pt solid #000;padding:5px 8px;font-size:9.5pt}\r\n        .totals td:first-child{background:#fafafa}\r\n        .totals td:last-child{text-align:right;width:90px}\r\n        .grid2{display:flex;gap:14px;margin-top:14px}\r\n        .footerbox{border:1pt solid #000;padding:0}\r\n        .footerbox table{width:100%;border-collapse:collapse}\r\n        .footerbox td{border-top:1pt solid #000;padding:4px 8px;font-size:9pt}\r\n        .footerbox tr:first-child td{border-top:none}\r\n        .footerbox td:first-child{width:35%;background:#fafafa}\r\n      </style>\r\n\r\n      <div class=\"row\">\r\n        <div class=\"col box\">\r\n          <div class=\"lbl\">From:</div>\r\n          <strong>${S(data.company?.name)}</strong><br>\r\n          ${S(data.company?.address)}<br>\r\n          ${S(data.company?.postcode)}<br>\r\n          ${S(data.company?.country)}<br><br>\r\n          VAT Reg No: ${S(data.company?.vat_number||'\u2014')}\r\n        </div>\r\n        <div class=\"col\"><div class=\"logo\">${S(data.company?.name||'Company')}</div></div>\r\n      </div>\r\n\r\n      <div class=\"doctitle\">\r\n        <div class=\"t\">INVOICE</div>\r\n        <table class=\"meta\">\r\n          <tr><td>Invoice No</td><td>${S(data.invoiceNumber||'\u2014')}</td></tr>\r\n          <tr><td>Invoice Date</td><td>${S(data.invoiceDate||'\u2014')}</td></tr>\r\n          <tr><td>Order No</td><td>${S(data.orderNo||'')}</td></tr>\r\n          <tr><td>Account Ref</td><td>${S(data.accountRef||'')}</td></tr>\r\n        </table>\r\n      </div>\r\n\r\n      <div class=\"box\" style=\"margin-bottom:14px\">\r\n        <div class=\"lbl\">Sold To:</div>\r\n        <strong>${S(data.customer?.name||'\u2014')}</strong><br>\r\n        ${S(data.customer?.address)}<br>\r\n        ${S(data.customer?.postcode)}<br><br>\r\n        VAT Reg No: ${S(data.customer?.vatNumber||'')}<br>\r\n        EORI No: ${S(data.customer?.eoriNo||'')}\r\n      </div>\r\n\r\n      <table class=\"items\">\r\n        <thead><tr>\r\n          <th>Product Code</th><th>Description</th><th class=\"r\">Qty</th>\r\n          <th>HS Tariff Code</th><th>Country of Origin</th><th class=\"r\">Unit Wt (Kgs)</th>\r\n          <th class=\"r\">Unit Price</th><th class=\"r\">Net Amt</th>\r\n        </tr></thead>\r\n        <tbody>${itemRowsHtml}</tbody>\r\n      </table>\r\n\r\n      <hr class=\"thick\">\r\n\r\n      <div class=\"grid2\">\r\n        <div class=\"col\"></div>\r\n        <table class=\"totals\">\r\n          <tr><td>Total Net Amount</td><td>\u00A3 ${money(data.netTotal)}</td></tr>\r\n          <tr><td>Carriage Net</td><td>\u00A3 ${money(data.carriageAmount)}</td></tr>\r\n          <tr><td>Total Tax Amount</td><td>\u00A3 ${money(data.vatAmount)}</td></tr>\r\n          <tr><td><strong>Invoice Total</strong></td><td><strong>\u00A3 ${money(data.grossTotal)}</strong></td></tr>\r\n        </table>\r\n      </div>\r\n\r\n      <div class=\"grid2\">\r\n        <div class=\"col footerbox\">\r\n          <table>\r\n            <tr><td>Bank Details:<br>Name: ${S(data.company?.bank_name||'\u2014')}</td><td></td></tr>\r\n            <tr><td>Account number: ${S(data.company?.bank_account||'\u2014')}</td><td></td></tr>\r\n            <tr><td>Sort code: ${S(data.company?.bank_sort_code||'\u2014')}</td><td></td></tr>\r\n            <tr><td>Name:</td><td></td></tr>\r\n            <tr><td>Signature:</td><td></td></tr>\r\n            <tr><td>Date:</td><td></td></tr>\r\n          </table>\r\n        </div>\r\n        <div class=\"col footerbox\">\r\n          <table>\r\n            <tr><td>Total Number of Packages:</td><td>${data.totalPackages!=null?S(data.totalPackages):''}</td></tr>\r\n            <tr><td>Total Net Weight (Kgs):</td><td>${data.totalNetWeightKg!=null?money(data.totalNetWeightKg):'0.00'}</td></tr>\r\n            <tr><td>Incoterms:</td><td>${S(data.incoterms||'')}</td></tr>\r\n          </table>\r\n        </div>\r\n      </div>\r\n    `;\r\n  }\r\n\r\n  window.PRINT = {\r\n    invoice(data, title){\r\n      window.SM.UTIL.print(buildInvoiceHtml(data), title||`Invoice ${data.invoiceNumber||''}`);\r\n    },\r\n    header,table,paginate,paginateGrouped,\r\n    signatureBox,badge,summaryBox,pageFooter,\r\n    renderDocument,quickPrint,\r\n    BASE_STYLES\r\n  };\r\n})();"],
  "mappings": "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",
  "names": []
}
