Use PDIs? Take our 5-minute survey to help shape the PDI roadmap.

Scheduled report execution ignoring conditions.

RiyasA685076547
Tera Contributor

Hi

 

I am trying to scheduled a report, my condition is: report should be send via email on 1st and 14 of every month. If the 1st or 14th is falls under weekends it should send on next working day. Below is my script

function sendReport() {
    var gdt = new GlideDateTime();
    var day = gdt.getDayOfMonth();
    var weekDay = gdt.getDayOfWeek();

    if (weekDay === 6 || weekDay === 7) {
        return false;
    }

    if (day === 1 && weekDay >= 1 && weekDay <= 5) {
        return true;
    }

    if ((day === 2 || day === 3) && weekDay === 1) {
        var prev = new GlideDateTime(gdt);
        prev.addDaysLocalTime(-1);
        if (prev.getDayOfMonth() === 1 && (prev.getDayOfWeek() === 6 || prev.getDayOfWeek() === 7)){
            return true;
		}

        if (day === 3) {
            var prev2 = new GlideDateTime(gdt);
            prev2.addDaysLocalTime(-2);
            if (prev.getDayOfMonth() === 1 && prev.getDayOfWeek() === 7){
                return true;
			}
        }
    }

    /* ---------------- */
    if (day === 14 && weekDay >= 1 && weekDay <= 5) {
        return true;
    }

    if ((day === 15 || day === 16) && weekDay === 1) {
        var prev14 = new GlideDateTime(gdt);
        prev14.addDaysLocalTime(-1);
        if (prev14.getDayOfMonth() === 1 && (prev14.getDayOfWeek() === 6 || prev14.getDayOfWeek() === 7)){
            return true;
		}

        if (day === 16) {
            var prev14_2 = new GlideDateTime(gdt);
            prev14_2.addDaysLocalTime(-2);
            if (prev14_2.getDayOfMonth() === 14 && prev14_2.getDayOfWeek() === 7){
                return true;
			}
        }
    }

    return false;
}
answer = sendReport();

When I try with the above condition system is not validating, email get triggered.


I tried with the below sample also still email is triggers

function sendReport() {
    var gdt = new GlideDateTime();
    var day = gdt.getDayOfMonth();
    var weekDay = gdt.getDayOfWeek();
    if (day === 22 && (weekDay >= 1 && weekDay <= 5)) {
        return true;
    }
    return false;
}
answer = sendReport();

 I am executing the script on 21st, by I used "day === 22" is next day's date(IST) actually it should not trigger, but triggers.

 

Thanks,

2 REPLIES 2

ousmanek
Tera Contributor

Hello @RiyasA685076547 ,

 

try with getDayOfLocalTime() and getDayOfMonthLocalTime()

 

Thanks.

getDayOfWeekLocalTime

Vishal Jaswal
Tera Sage

Hello @RiyasA685076547 

Here is the corrected code:

function sendReport() {
    var gdt = new GlideDateTime();
    var day = gdt.getDayOfMonth();
    var weekDay = gdt.getDayOfWeek();  // 1=Mon, 2=Tue, ..., 6=Sat, 7=Sun

    // Skip weekends
    if (weekDay === 6 || weekDay === 7) {
        gs.info('Send Report -  Weekend, skipping');
        return false;
    }

    // Check if today is a valid send day for target date 1 or 14
    return isValidSendDay(gdt, day, weekDay, 1) || 
           isValidSendDay(gdt, day, weekDay, 14);
}

//Function to determine if today is the correct day to send the report for a given target date (1 or 14).

function isValidSendDay(today, day, weekDay, targetDay) {
    
    // Scenario 1: Today is the target day and it's a weekday
    if (day === targetDay) {
        gs.info('Send Report - Today is the ' + targetDay + 'th (weekday)');
        return true;
    }

    // Scenario 2: Today is Monday - check if target day was Sat/Sun
    if (weekDay === 1) {
        // Check Saturday (2 days ago)
        var twoDaysAgo = new GlideDateTime(today);
        twoDaysAgo.addDaysLocalTime(-2);
        if (twoDaysAgo.getDayOfMonth() === targetDay) {
            gs.info('Send Report -  Target ' + targetDay + 'th was Saturday, sending today (Mon)');
            return true;
        }

        // Check Sunday (1 day ago)
        var oneDayAgo = new GlideDateTime(today);
        oneDayAgo.addDaysLocalTime(-1);
        if (oneDayAgo.getDayOfMonth() === targetDay) {
            gs.info('Send Report -  Target ' + targetDay + 'th was Sunday, sending today (Mon)');
            return true;
        }
    }

    return false;
}

answer = sendReport();

 


Hope that helps!