@@ -88,7 +88,7 @@ async function getDataForInterview (interview, jobCandidate, job) {
88
88
89
89
const interviewLink = `${ config . TAAS_APP_URL } /${ job . projectId } /positions/${ job . id } /candidates/interviews`
90
90
const guestName = _ . isEmpty ( interview . guestNames ) ? '' : interview . guestNames [ 0 ]
91
- const startTime = _ . isEmpty ( interview . startTimestamp ) ? '' : interview . startTimestamp . toUTCString ( )
91
+ const startTime = interview . startTimestamp ? interview . startTimestamp . toUTCString ( ) : ''
92
92
93
93
return {
94
94
jobTitle : job . title ,
@@ -182,43 +182,33 @@ async function sendCandidatesAvailableEmails () {
182
182
*/
183
183
async function sendInterviewComingUpEmails ( ) {
184
184
const currentTime = moment . utc ( )
185
- const minutesRange = 5
186
-
187
- const oneDayFromNow = currentTime . clone ( ) . add ( 24 , 'hours' )
188
- const dayEndTime = oneDayFromNow . clone ( ) . add ( minutesRange , 'minutes' )
185
+ const timestampFilter = {
186
+ [ Op . or ] : [ ]
187
+ }
188
+ const window = moment . duration ( config . INTERVIEW_COMING_UP_MATCH_WINDOW )
189
+ for ( const remindTime of config . INTERVIEW_COMING_UP_REMIND_TIME ) {
190
+ const rangeStart = currentTime . clone ( ) . add ( moment . duration ( remindTime ) )
191
+ const rangeEnd = rangeStart . clone ( ) . add ( window )
192
+
193
+ timestampFilter [ Op . or ] . push ( {
194
+ [ Op . and ] : [
195
+ {
196
+ [ Op . gt ] : rangeStart
197
+ } ,
198
+ {
199
+ [ Op . lte ] : rangeEnd
200
+ }
201
+ ]
202
+ } )
203
+ }
189
204
190
- const oneHourFromNow = currentTime . clone ( ) . add ( 1 , 'hour' )
191
- const hourEndTime = oneHourFromNow . clone ( ) . add ( minutesRange , 'minutes' )
192
205
const filter = {
193
206
[ Op . and ] : [
194
207
{
195
208
status : { [ Op . eq ] : constants . Interviews . Status . Scheduled }
196
209
} ,
197
210
{
198
- startTimestamp : {
199
- [ Op . or ] : [
200
- {
201
- [ Op . and ] : [
202
- {
203
- [ Op . gt ] : oneDayFromNow
204
- } ,
205
- {
206
- [ Op . lte ] : dayEndTime
207
- }
208
- ]
209
- } ,
210
- {
211
- [ Op . and ] : [
212
- {
213
- [ Op . gt ] : oneHourFromNow
214
- } ,
215
- {
216
- [ Op . lte ] : hourEndTime
217
- }
218
- ]
219
- }
220
- ]
221
- }
211
+ startTimestamp : timestampFilter
222
212
}
223
213
]
224
214
}
@@ -272,9 +262,9 @@ async function sendInterviewComingUpEmails () {
272
262
* Sends email reminder to the interview host after it ends to change the interview status
273
263
*/
274
264
async function sendInterviewCompletedEmails ( ) {
275
- const minutesRange = 5
276
- const hoursBeforeNow = moment . utc ( ) . subtract ( config . INTERVIEW_COMPLETED_NOTIFICATION_HOURS , 'hours' )
277
- const endTime = hoursBeforeNow . clone ( ) . add ( minutesRange , 'minutes' )
265
+ const window = moment . duration ( config . INTERVIEW_COMPLETED_MATCH_WINDOW )
266
+ const rangeStart = moment . utc ( ) . subtract ( moment . duration ( config . INTERVIEW_COMPLETED_PAST_TIME ) )
267
+ const rangeEnd = rangeStart . clone ( ) . add ( window )
278
268
const filter = {
279
269
[ Op . and ] : [
280
270
{
@@ -284,10 +274,10 @@ async function sendInterviewCompletedEmails () {
284
274
endTimestamp : {
285
275
[ Op . and ] : [
286
276
{
287
- [ Op . gte ] : hoursBeforeNow
277
+ [ Op . gte ] : rangeStart
288
278
} ,
289
279
{
290
- [ Op . lt ] : endTime
280
+ [ Op . lt ] : rangeEnd
291
281
}
292
282
]
293
283
}
@@ -396,7 +386,8 @@ async function sendPostInterviewActionEmails () {
396
386
*/
397
387
async function sendResourceBookingExpirationEmails ( ) {
398
388
const currentTime = moment . utc ( )
399
- const maxEndDate = currentTime . clone ( ) . add ( config . RESOURCE_BOOKING_EXPIRY_NOTIFICATION_WEEKS , 'weeks' )
389
+ const maxEndDate = currentTime . clone ( ) . add ( moment . duration ( config . RESOURCE_BOOKING_EXPIRY_TIME ) )
390
+
400
391
const expiringResourceBookings = await ResourceBooking . findAll ( {
401
392
where : {
402
393
endDate : {
0 commit comments