const path = require("path"); const moment = require("moment"); require("dotenv").config({ path: path.resolve( process.cwd(), `.env.${process.env.NODE_ENV || "development"}` ), }); var _ = require("lodash"); const Handlebars = require("handlebars"); const phone = require("phone"); var Dinero = require("dinero.js"); Dinero.defaultCurrency = "CAD"; Dinero.globalLocale = "en-CA"; //Usage: {{moment appointments_by_pk.start format="dddd, DD MMMM YYYY"}} Handlebars.registerHelper("round", function (context, block) { if (context && context.hash) { block = _.cloneDeep(context); context = undefined; } try { return context.toFixed(2); } catch { return context; } }); Handlebars.registerHelper("dinerof", function (context, block) { if (context && context.hash) { block = _.cloneDeep(context); context = undefined; } var amount = Dinero(context); if (context) { return amount.toFormat(); } return ""; }); Handlebars.registerHelper("phonef", function (context, block) { if (context && context.hash) { block = _.cloneDeep(context); context = undefined; } var ph = phone(context)[0]; if (context) { return ph; } return ""; }); Handlebars.registerHelper("partType", function (context, block) { if (!context) return ""; switch (context.toUpperCase()) { case "PAA": return "Aftermarket"; case "PAE": return "Existing"; case "PAN": return "OEM"; case "PAO": return "Other"; case "PAS": return "Sublet"; case "PASL": return "Sublet"; case "PAL": return "LKQ"; case "PAM": return "Remanufactured"; case "PAC": return "Chrome"; case "PAP": return "OEM Partial"; case "PAR": return "Record"; default: return context; } }); Handlebars.registerHelper("lbrType", function (context, block) { if (!context) return ""; switch (context.toUpperCase()) { case "LAA": return "Aluminum"; case "LAB": return "Body"; case "LAD": return "Diagnostic"; case "LAF": return "Frame"; case "LAG": return "Glass"; case "LAM": return "Mechanical"; case "LAR": return "Refinish"; case "LAS": return "Structural"; case "LAU": return "Detail"; default: return context; } }); Handlebars.registerHelper("objectKeys", function (obj, block) { var accum = ""; obj && Object.keys(obj).map((key) => { accum += block.fn({ key, value: obj[key] }); }); return accum; }); Handlebars.registerHelper("dinero", function (context, block) { if (context && context.hash) { block = _.cloneDeep(context); context = undefined; } var amount = Dinero({ amount: Math.round((context || 0) * 100), currency: "CAD", }); return amount.toFormat(); }); Handlebars.registerHelper("moment", function (context, block) { if (context && context.hash) { block = _.cloneDeep(context); context = undefined; } if (!!!context) return ""; var date = moment(context); if (block.hash.timezone) { date.tz(block.hash.timezone); } var hasFormat = false; // Reset the language back to default before doing anything else date.locale("en"); for (var i in block.hash) { if (i === "format") { hasFormat = true; } else if (date[i]) { date = date[i](block.hash[i]); } else { console.log('moment.js does not support "' + i + '"'); } } if (hasFormat) { date = date.format(block.hash.format); } return date; }); Handlebars.registerHelper("duration", function (context, block) { if (context && context.hash) { block = _.cloneDeep(context); context = 0; } var duration = moment.duration(context); var hasFormat = false; // Reset the language back to default before doing anything else duration = duration.lang("en"); for (var i in block.hash) { if (i === "format") { hasFormat = true; } else if (duration[i]) { duration = duration[i](block.hash[i]); } else { console.log('moment.js duration does not support "' + i + '"'); } } if (hasFormat) { duration = duration.format(block.hash.format); } return duration; }); exports.render = (req, res) => { //Perform request validation let view; console.log("[HJS Render] New Render Request."); //console.log("[HJS Render] Context", req.body.context); if (req.body.context.bodyshop.template_header) { console.log("[HJS Render] Including Header"); //view = req.body.view; view = `${req.body.context.bodyshop.template_header}${req.body.view}`; } else { console.log("[HJS Render] No header to include."); view = req.body.view; } var template = Handlebars.compile(view); res.send(template(req.body.context)); };