Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 54 additions & 14 deletions src/helpers/userHelper.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@
const playwrightLogic = require('../utilities/playwrightUtil');
const myTeam = require('./helperModels/myTeam');
const dashboardHelper = require('./dashboardhelper')();

const DEFAULT_BCC_EMAILS = [];

const reportHelper = require('./reporthelper')();
// eslint-disable-next-line no-promise-executor-return
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
Expand Down Expand Up @@ -490,7 +493,7 @@
* 3 ) Call the processWeeklySummariesByUserId(personId) to process the weeklySummaries array.
*/

const assignBlueSquareForTimeNotMet = async () => {
const assignBlueSquareForTimeNotMet = async (emailConfig = {}) => {
try {
console.log('run');
const currentFormattedDate = moment().tz('America/Los_Angeles').format();
Expand Down Expand Up @@ -518,8 +521,11 @@
let skip = 0;
// eslint-disable-next-line no-constant-condition
while (true) {
const query = emailConfig.targetUserId
? { _id: emailConfig.targetUserId }
: { isActive: true };
const users = await userProfile
.find({ isActive: true }, '_id weeklycommittedHours weeklySummaries missedHours')
.find(query, '_id weeklycommittedHours weeklySummaries missedHours')
.skip(skip)
.limit(batchSize);

Expand Down Expand Up @@ -864,13 +870,16 @@
}

emailSender(
status.email,
emailConfig.emailOverride || status.email,
'New Infringement Assigned',
emailBody,
null,
['onecommunityglobal@gmail.com', 'jae@onecommunityglobal.org'],
emailConfig.ccOverride || [
'onecommunityglobal@gmail.com',
'jae@onecommunityglobal.org',
],
status.email,
[...new Set([...emailsBCCs])],
emailConfig.bccOverride || [...new Set([...emailsBCCs])],
);
} else if (isNewUser && !timeNotMet && !hasWeeklySummary) {
usersRequiringBlueSqNotification.push(personId);
Expand Down Expand Up @@ -986,6 +995,7 @@
// function to send emails to those users who have completed hours but not submitted their summary
const completeHoursAndMissedSummary = async (emailConfig = {}) => {
try {
console.log('[completeHoursAndMissedSummary] Starting function execution');
// If targetUserId is provided (testing), use that; otherwise use all active users (production)
const query = emailConfig.targetUserId
? { _id: emailConfig.targetUserId }
Expand All @@ -994,13 +1004,17 @@
query,
'_id weeklycommittedHours weeklySummaries missedHours email firstName weeklySummaryOption weeklySummaryNotReq',
);
console.log(`[completeHoursAndMissedSummary] Found ${users.length} users to process`);

const pdtStartOfLastWeek = moment()
.tz('America/Los_Angeles')
.startOf('week')
.subtract(1, 'week');

const pdtEndOfLastWeek = moment().tz('America/Los_Angeles').endOf('week').subtract(1, 'week');
console.log(
`[completeHoursAndMissedSummary] Checking last week: ${pdtStartOfLastWeek.format('YYYY-MM-DD')} to ${pdtEndOfLastWeek.format('YYYY-MM-DD')}`,
);

let emailsBCCs;
const blueSquareBCCs = await BlueSquareEmailAssignment.find().populate('assignedTo').exec();
Expand Down Expand Up @@ -1030,13 +1044,10 @@
hasWeeklySummary = true;
}

const pdtStartOfCurrentWeek = moment().tz('America/Los_Angeles').startOf('week');
const pdtEndOfCurrentWeek = moment().tz('America/Los_Angeles').endOf('week');

const results = await dashboardHelper.laborthisweek(
user._id,
pdtStartOfCurrentWeek,
pdtEndOfCurrentWeek,
pdtStartOfLastWeek,
pdtEndOfLastWeek,
);

const timeSpent =
Expand All @@ -1059,7 +1070,13 @@
console.log('hasTimeOffRequest: ', hasTimeOffRequest);
console.log('timeNotMet: ', timeNotMet);
console.log('hasWeeklySummary: ', hasWeeklySummary);
console.log(
`[completeHoursAndMissedSummary] User ${user.firstName}: timeSpent=${timeSpent}, committed=${weeklycommittedHours}, timeNotMet=${timeNotMet}, hasWeeklySummary=${hasWeeklySummary}, hasTimeOff=${hasTimeOffRequest}`,
);
if (hasTimeOffRequest === false && timeNotMet === false && hasWeeklySummary === false) {
console.log(
`[completeHoursAndMissedSummary] ✅ Sending email to ${user.firstName} (${user.email})`,
);
await emailSender(
emailConfig.emailOverride || user.email,
`Re: New Infringement Assigned - Week of ${moment(pdtStartOfLastWeek).format('MM/DD/YYYY')}`,
Expand Down Expand Up @@ -1222,6 +1239,7 @@

const inCompleteHoursEmailFunction = async (emailConfig = {}) => {
try {
console.log('[inCompleteHoursEmailFunction] Starting function execution');
// If targetUserId is provided (testing), use that; otherwise use all active users (production)
const query = emailConfig.targetUserId
? { _id: emailConfig.targetUserId }
Expand All @@ -1230,11 +1248,15 @@
query,
'_id weeklycommittedHours missedHours email firstName infringements startDate',
);
console.log(`[inCompleteHoursEmailFunction] Found ${users.length} users to process`);

const pdtStartOfLastWeek = moment()
.tz('America/Los_Angeles')
.startOf('week')
.subtract(1, 'week');
console.log(
`[inCompleteHoursEmailFunction] Checking last week starting: ${pdtStartOfLastWeek.format('YYYY-MM-DD')}`,
);

const date = moment();
const todayDate = date.tz('America/Los_Angeles').format('YYYY-MM-DD');
Expand All @@ -1251,14 +1273,14 @@
}
console.log('emailsBCCs: ', emailsBCCs);

const pdtEndOfLastWeek = moment().tz('America/Los_Angeles').endOf('week').subtract(1, 'week');

for (let i = 0; i < users.length; i += 1) {
const user = users[i];
const pdtStartOfCurrentWeek = moment().tz('America/Los_Angeles').startOf('week');
const pdtEndOfCurrentWeek = moment().tz('America/Los_Angeles').endOf('week');
const results = await dashboardHelper.laborthisweek(
user._id,
pdtStartOfCurrentWeek,
pdtEndOfCurrentWeek,
pdtStartOfLastWeek,
pdtEndOfLastWeek,
);
const timeSpent =
Array.isArray(results) && results[0]?.timeSpent_hrs ? results[0].timeSpent_hrs : 0;
Expand All @@ -1283,6 +1305,9 @@
const todayBlueSquare = user.infringements.filter(
(infringement) => infringement.date === todayDate,
);
console.log(
`[inCompleteHoursEmailFunction] User ${user.firstName}: timeSpent=${timeSpent}, committed=${weeklycommittedHours}, todayBlueSquares=${todayBlueSquare.length}, totalInfringements=${user.infringements.length}`,
);

// Check conditions for sending blue square email
// if(timeSpent>=0.85*weeklycommittedHours && timeSpent<weeklycommittedHours && user.infringements.length<4 && todayBlueSquare.length===1){
Expand Down Expand Up @@ -1364,6 +1389,7 @@

const weeklyBlueSquareReminderFunction = async (emailConfig = {}) => {
try {
console.log('[weeklyBlueSquareReminderFunction] Starting function execution');
// If targetUserId is provided (testing), use that; otherwise use all active users (production)
const query = emailConfig.targetUserId
? { _id: emailConfig.targetUserId }
Expand All @@ -1372,6 +1398,7 @@
query,
'_id weeklycommittedHours missedHours email firstName infringements startDate',
);
console.log(`[weeklyBlueSquareReminderFunction] Found ${users.length} users to process`);

const pdtStartOfLastWeek = moment()
.tz('America/Los_Angeles')
Expand All @@ -1381,6 +1408,7 @@

const date = moment();
const todayDate = date.tz('America/Los_Angeles').format('YYYY-MM-DD');
console.log("[weeklyBlueSquareReminderFunction] Today's date for comparison:", todayDate);

// blue square email BCC's
let emailsBCCs;
Expand Down Expand Up @@ -1445,6 +1473,15 @@
const todayBlueSquare = users[i].infringements.filter(
(infringement) => infringement.date === todayDate,
);
console.log(
`[weeklyBlueSquareReminderFunction] User ${user.firstName} - Total infringements: ${users[i].infringements.length}, Today's blue squares: ${todayBlueSquare.length}, bluesquareEmailCondition: ${bluesquareEmailCondition}`,
);
if (todayBlueSquare.length > 0) {
console.log(
`[weeklyBlueSquareReminderFunction] User ${user.firstName} has blue square(s) today:`,
todayBlueSquare.map((inf) => ({ date: inf.date, description: inf.description })),
);
}
if (
bluesquareEmailCondition &&
users[i].infringements.length === 1 &&
Expand Down Expand Up @@ -1591,7 +1628,7 @@
'onecommunityglobal@gmail.com',
],
'jae@onecommunityglobal.org',
emailConfig.bccOverride || [...new Set([...emailsBCCs])],

Check warning on line 1631 in src/helpers/userHelper.js

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

`new Set(…)` accepts iterable as argument, it's unnecessary to convert to an array.

See more on https://sonarcloud.io/project/issues?id=OneCommunityGlobal_HGNRest&issues=AZ1NBzTB_cRLGSbP_a8b&open=AZ1NBzTB_cRLGSbP_a8b&pullRequest=2051
{
type: 'blue_square_assignment',
recipientUserId: String(user._id),
Expand Down Expand Up @@ -3410,6 +3447,9 @@
getTeamManagementEmail,
validateProfilePic,
assignBlueSquareForTimeNotMet,
completeHoursAndMissedSummary,
inCompleteHoursEmailFunction,
weeklyBlueSquareReminderFunction,
applyMissedHourForCoreTeam,
deleteBlueSquareAfterYear,
reactivateUser,
Expand Down
Loading