From 2c0eab9366f5463354cb1a424edc277ed9187d13 Mon Sep 17 00:00:00 2001 From: Dave Richer Date: Fri, 14 Mar 2025 11:27:28 -0400 Subject: [PATCH] IO-3096-GlobalNotifications - Correct time zone from footer in notification email --- server/email/generateTemplate.js | 5 +++++ server/notifications/queues/emailQueue.js | 14 +++++++++----- server/notifications/scenarioBuilders.js | 1 + 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/server/email/generateTemplate.js b/server/email/generateTemplate.js index 9d2815851..2887b2fd2 100644 --- a/server/email/generateTemplate.js +++ b/server/email/generateTemplate.js @@ -20,6 +20,11 @@ const defaultFooter = () => { const now = () => moment().format("MM/DD/YYYY @ hh:mm a"); +/** + * Generate the email template + * @param strings + * @returns {string} + */ const generateEmailTemplate = (strings) => { return ( ` diff --git a/server/notifications/queues/emailQueue.js b/server/notifications/queues/emailQueue.js index 823dff5ea..ff6702635 100644 --- a/server/notifications/queues/emailQueue.js +++ b/server/notifications/queues/emailQueue.js @@ -5,6 +5,7 @@ const { InstanceEndpoints } = require("../../utils/instanceMgr"); const { registerCleanupTask } = require("../../utils/cleanupManager"); const getBullMQPrefix = require("../../utils/getBullMQPrefix"); const devDebugLogger = require("../../utils/devDebugLogger"); +const moment = require("moment-timezone"); const EMAIL_CONSOLIDATION_DELAY_IN_MINS = (() => { const envValue = process.env?.EMAIL_CONSOLIDATION_DELAY_IN_MINS; @@ -59,7 +60,7 @@ const loadEmailQueue = async ({ pubClient, logger }) => { emailAddWorker = new Worker( "emailAdd", async (job) => { - const { jobId, jobRoNumber, bodyShopName, body, recipients } = job.data; + const { jobId, jobRoNumber, bodyShopName, bodyShopTimezone, body, recipients } = job.data; devDebugLogger(`Adding email notifications for jobId ${jobId}`); const redisKeyPrefix = `email:${devKey}:notifications:${jobId}`; @@ -72,6 +73,7 @@ const loadEmailQueue = async ({ pubClient, logger }) => { const detailsKey = `email:${devKey}:recipientDetails:${jobId}:${user}`; await pubClient.hsetnx(detailsKey, "firstName", firstName || ""); await pubClient.hsetnx(detailsKey, "lastName", lastName || ""); + await pubClient.hsetnx(detailsKey, "bodyShopTimezone", bodyShopTimezone); await pubClient.expire(detailsKey, NOTIFICATION_EXPIRATION / 1000); await pubClient.sadd(`email:${devKey}:recipients:${jobId}`, user); devDebugLogger(`Stored message for ${user} under ${userKey}: ${body}`); @@ -82,7 +84,7 @@ const loadEmailQueue = async ({ pubClient, logger }) => { if (flagSet) { await emailConsolidateQueue.add( "consolidate-emails", - { jobId, jobRoNumber, bodyShopName }, + { jobId, jobRoNumber, bodyShopName, bodyShopTimezone }, { jobId: `consolidate:${jobId}`, delay: EMAIL_CONSOLIDATION_DELAY, @@ -125,9 +127,11 @@ const loadEmailQueue = async ({ pubClient, logger }) => { const firstName = details.firstName || "User"; const multipleUpdateString = messages.length > 1 ? "Updates" : "Update"; const subject = `${multipleUpdateString} for job ${jobRoNumber || "N/A"} at ${bodyShopName}`; + const timezone = moment.tz.zone(details?.bodyShopTimezone) ? details.bodyShopTimezone : "UTC"; const emailBody = generateEmailTemplate({ header: `${multipleUpdateString} for Job ${jobRoNumber || "N/A"}`, subHeader: `Dear ${firstName},`, + dateLine: moment().tz(timezone).format("MM/DD/YYYY hh:mm a"), body: `

There have been updates to job ${jobRoNumber || "N/A"} at ${bodyShopName}: