Name
sn_grc.FrequencyUtilsBase
Description
No description available
Script
var FrequencyUtilsBase = Class.create();
FrequencyUtilsBase.prototype = {
initialize: function() {},
setNextRunDate: function(record) {
return this._setNextRunDate(record);
},
computeNextDateTime: function(today, indicator) {
return this._computeNextDateTime(today, indicator);
},
_getNextDay: function(today) {
today.addDaysUTC(1);
return today;
},
_getNextDayWeekly: function(today, recordDayOfWeek) {
var dayOfWeek = today.getDayOfWeekUTC();
var offset;
if (dayOfWeek < recordDayOfWeek)
offset = recordDayOfWeek - dayOfWeek;
else
offset = 7 - dayOfWeek + recordDayOfWeek;
today.addDaysUTC(offset);
return today;
},
_getNextDayMonthly: function(today, recordDayOfMonth) {
var dayOfMonth = today.getDayOfMonthUTC();
var currentMonth = today.getMonthUTC();
var month = currentMonth;
var year = today.getYearUTC();
if (dayOfMonth >= recordDayOfMonth) {
month = month % 12 + 1;
if(month == 1)
year= year + 1;
}
var nextDate = new GlideDate();
nextDate.setValue(year + '-' + month + '-' + recordDayOfMonth);
return nextDate;
},
_getNextDayQuaterlyOrSemiAnnually: function(today, months, recordDay, recordMonth) {
var currentMonth = today.getMonthUTC();
var dayOfMonth = today.getDayOfMonthUTC();
var currentMonthNumber = parseInt(currentMonth % months);
var year = today.getYearUTC();
var month = '';
if (((recordMonth == months && currentMonthNumber == 0) || (recordMonth != months && currentMonthNumber == recordMonth)) && recordDay > dayOfMonth) {
month = currentMonth;
} else if (currentMonthNumber < recordMonth) {
month = currentMonth + (recordMonth - currentMonthNumber);
} else {
var offset = months - currentMonthNumber;
month = currentMonth + offset + recordMonth;
}
var nextDate = new GlideDate();
nextDate.setValue(year + '-' + month + '-' + recordDay);
return nextDate;
},
_getNextDayAnnually: function(today, recordDay, recordMonth) {
var currentMonth = today.getMonthUTC();
var dayOfMonth = today.getDayOfMonthUTC();
var year = today.getYearUTC();
var month = '';
if (currentMonth == recordMonth && recordDay > dayOfMonth) {
month = currentMonth;
} else {
month = recordMonth;
if (recordMonth <= currentMonth)
year += 1;
}
var nextDate = new GlideDate();
nextDate.setValue(year + '-' + month + '-' + recordDay);
return nextDate;
},
_setNextRunDate: function(record) {
var nextDate = '';
var today = new GlideDate();
switch (record.frequency.toString()) {
//Daily
case '1':
nextDate = this._getNextDay(today);
break;
//Weekly
case '2':
nextDate = this._getNextDayWeekly(today, parseInt(record.day_of_week));
break;
//Monthly
case '3':
nextDate = this._getNextDayMonthly(today, parseInt(record.day_of_month));
break;
//Quarterly
case '4':
case '5':
var months = '';
if (record.frequency.toString() == '4')
months = 3;
else
months = 6;
nextDate = this._getNextDayQuaterlyOrSemiAnnually(today, months, parseInt(record.day_of_month), parseInt(record.month));
break;
//Annually
case '6':
nextDate = this._getNextDayAnnually(today, parseInt(record.day_of_month), parseInt(record.month));
break;
}
record.next_run_date = nextDate;
},
_computeNextDateTime: function(today, indicator) {
switch (indicator.getValue('collection_frequency')) {
case 'daily':
return this._getNextDay(today);
case 'monthly':
return this._getNextDayMonthly(today, parseInt(indicator.day_of_month));
case 'weekly':
return this._getNextDayWeekly(today, parseInt(indicator.day_of_week));
case 'quarterly':
today.addMonthsUTC(3);
return today;
case 'semi_annually':
today.addMonthsUTC(6);
return today;
case 'annually':
return this._getNextDayAnnually(today, parseInt(indicator.day_of_month), parseInt(indicator.month));
}
},
type: 'FrequencyUtilsBase'
};
Sys ID
791c8da253832010ad9bddeeff7b1283