Email N8n invoice
by Paweł Niemczyk
JavaScript
// function buildInvoiceReport(data) {
// const style = `
// <style>
// table{font-family:Arial,sans-serif;border-collapse:collapse;width:100%;margin-bottom:16px}
// th,td{padding:4px 8px;border:1px solid #ddd;text-align:left}
// th{background:#f7f7f7}
// .ok{color:green;font-weight:bold}
// .fail{color:red;font-weight:bold}
// </style>`;
// /* ---------- summary ---------- */
// const elementsArr = [];
// if (data.count.pdfs > 0) elementsArr.push(`${data.count.pdfs} PDF${data.count.pdfs>1?'s':''}`);
// if (data.count.images> 0) elementsArr.push(`${data.count.images} image${data.count.images>1?'s':''}`);
// const totalsByCurrency = {};
// let allOrigOk = true, allJsonOk = true;
// data.items.forEach(it => {
// const inv = it.source?.invoice || {};
// const cur = inv.currency;
// const tot = Number(inv.total) || 0;
// if (cur) totalsByCurrency[cur] = (totalsByCurrency[cur]||0)+tot;
// if (it.original_file_uploaded_successfully === false) allOrigOk = false;
// if (it.invoice_json_uploaded_successfully === false) allJsonOk = false;
// });
// let statusSummary, statusClass;
// if (allOrigOk && allJsonOk) {
// statusSummary = '✔ all uploaded'; statusClass='ok';
// } else if (!allOrigOk && allJsonOk) {
// statusSummary = '✖ some originals failed'; statusClass='fail';
// } else if (allOrigOk && !allJsonOk) {
// statusSummary = '✖ some JSONs failed'; statusClass='fail';
// } else {
// statusSummary = '✖ some originals & JSONs failed'; statusClass='fail';
// }
// const totalsRows = Object.entries(totalsByCurrency)
// .map(([c,a])=>`<tr><th>Total</th><td>${a.toFixed(2)} ${c}</td></tr>`).join('');
// const summaryTable = `
// <table>
// ${totalsRows}
// <tr><th>Status</th><td class="${statusClass}">${statusSummary}</td></tr>
// <tr><th>S3</th><td>Bucket: ${data.drop.bucket}<br>Path:...