Name
global.AgentScheduleAjax
Description
No description available
Script
var AgentScheduleAjax = Class.create();
var AGENT_CONFIG = "agent_schedule_user_pref";
var AGENT_CONFIG_REL_TASK_CONFIG = "agent_schedule_task_config_rel_user_pref";
var TASK_CONFIG = "agent_schedule_task_config";
var PERSONAL_SCHEDULE = "agent_events";
var WORK_SCHEDULE = "agent_work_schedule";
AgentScheduleAjax.prototype = Object.extendsObject(AbstractAjaxProcessor, {
initialize: function(request, responseXML, gc) {
this.request = request;
this.responseXML = responseXML;
this.gc = gc;
this.configSwitches = {};
},
updateAgentEventTime: function(){
var result = {};
var startDateNum = this.getParameter("sysparm_start_date");
var endDateNum = this.getParameter("sysparm_end_date");
var eventID = this.getParameter("sysparm_event_id");
if(JSUtil.nil(startDateNum) && JSUtil.nil(endDateNum) && JSUtil.nil(eventID)){
result.success = false;
result.info = "Start Date or End Date or Event ID is not present";
}else{
var startDate = new GlideDateTime();
startDate.setValue(startDateNum);
var endDate = new GlideDateTime();
endDate.setValue(endDateNum);
var user = gs.getUserID();
if(!gs.hasRole('agent_schedule_user')){
gs.error(gs.getMessage("AgentScheduleAjax:updateAgentEventTime Security check failed. "));
return;
}
var agentEventGR = new GlideRecord("agent_events");
agentEventGR.addQuery("user",user);
agentEventGR.query();
while(agentEventGR.next()){
var personal_schedule = agentEventGR.getValue("personal_schedule");
var scheduleEntryGR = new GlideRecord("cmn_schedule_span");
scheduleEntryGR.addQuery("schedule",personal_schedule);
scheduleEntryGR.addQuery("sys_id",eventID);
scheduleEntryGR.query();
if(scheduleEntryGR.canWrite() && scheduleEntryGR.getRowCount()>0){
while(scheduleEntryGR.next()){
scheduleEntryGR.start_date_time = startDate.getValue();
scheduleEntryGR.end_date_time = endDate.getValue();
scheduleEntryGR.update();
}
result.success = true;
}else{
result.success = false;
result.info = "Event is not found";
}
}
}
return new JSON().encode(result);
},
getAgentEvents : function(){
var startDateNum = this.getParameter("sysparm_start_date");
var startDate = null;
if(!JSUtil.nil(startDateNum))
{
startDate = new GlideDateTime();
startDate.setDisplayValue(startDateNum);
}
var endDateNum = this.getParameter("sysparm_end_date");
var endDate = null;
if(!JSUtil.nil(endDateNum))
{
endDate = new GlideDateTime();
endDate.setDisplayValue(endDateNum);
}
var user = gs.getUserID();
var agentScheduleUtil = new AgentScheduleUtil();
var scheduleData = agentScheduleUtil.getTimeOffSpans(user, startDate, endDate);
var timeoffSpans = [];
for(var i =0 ;i < scheduleData.length; i++){
var timeoffData = scheduleData[i];
var timeOffObj = {};
timeOffObj.name = timeoffData.name;
timeOffObj.table_name = "cmn_schedule_span";
timeOffObj.sys_id = timeoffData.sys_id;
timeOffObj.event_id = timeoffData.event_id;
timeOffObj.text = SNC.GlideHTMLSanitizer.sanitize(timeoffData.name);
timeOffObj.start_date = timeoffData.start_date.convertTimeZone(timeoffData.timezone, GlideSession.get().getTimeZoneName());
timeOffObj.end_date = timeoffData.end_date.convertTimeZone(timeoffData.timezone, GlideSession.get().getTimeZoneName());
timeOffObj.color = "#d6d6d6";
timeOffObj.textColor = "black";
timeOffObj.type = "event";
timeOffObj.headerLabel = gs.getMessage("Event");
timeOffObj.headerName = gs.getMessage("Event");
timeOffObj.selected = false;
timeOffObj.bordercolorVal = "#848484";
timeOffObj.backGrdcolorVal = "#d6d6d6";
timeOffObj.theme = "Gray";
timeoffSpans.push(timeOffObj);
}
var agentTasks = this.getAgentTasks(user, startDate, endDate);
for( i =0 ;i < agentTasks.length; i++){
var timeoffData = agentTasks[i];
var timeOffObj = {};
timeOffObj.name = timeoffData.number;
timeOffObj.table_name = timeoffData.table;
timeOffObj.table_name_display = timeoffData.tableName;
timeOffObj.sys_id = timeoffData.sys_id;
timeOffObj.event_id = timeoffData.sys_id;
timeOffObj.text = SNC.GlideHTMLSanitizer.sanitize(timeoffData.number);
timeOffObj.desc = timeoffData.desc;
timeOffObj.start_date = timeoffData.start_date;
timeOffObj.end_date = timeoffData.end_date;
timeOffObj.theme = timeoffData.theme;
timeOffObj.bordercolorVal = timeoffData.bordercolorVal;
timeOffObj.backGrdcolorVal = timeoffData.backGrdcolorVal;
timeOffObj.color = timeoffData.backGrdcolorVal;
timeOffObj.textColor = "black";
timeOffObj.type = "task";
timeOffObj.headerLabel = SNC.GlideHTMLSanitizer.sanitize(timeoffData.label);
timeOffObj.headerName = SNC.GlideHTMLSanitizer.sanitize(timeoffData.name);
timeOffObj.read_only = true;
timeOffObj.selected = false;
timeoffSpans.push(timeOffObj);
}
var result = {};
result.timeoffSpans = timeoffSpans;
result.configSwitches = this.configSwitches;
result.personalSchedule = {};
var personalScheduleGR = agentScheduleUtil.getAgentPersonalSchedule(user);
if(personalScheduleGR.getRowCount() == 0){
var personalScheduleID = this.createPersonalSchedule(user);
if(personalScheduleID){
var agentPersonalScheduleConfigID = this.createPersonalScheduleConfig(user,personalScheduleID);
if(agentPersonalScheduleConfigID){
var agentEventGR = new GlideRecord("agent_events");
agentEventGR.addQuery("user",user);
agentEventGR.query();
if(agentEventGR.next() && agentEventGR.canRead()){
result.personalSchedule["name"] = agentEventGR.getDisplayValue("personal_schedule");
result.personalSchedule["sys_id"] = agentEventGR.getValue("sys_id");
}
}
}else{
result.personalSchedule["success"] = false;
result.personalSchedule["info"] = "Personal Schedule was not created";
}
}else{
personalScheduleGR.next();
result.personalSchedule["name"] = personalScheduleGR.getDisplayValue("personal_schedule");
result.personalSchedule["sys_id"] = personalScheduleGR.getValue("sys_id");
}
return new JSON().encode(result);
},
createPersonalSchedule:function(user){
var personalScheduleID = "";
if(user){
var userGR = new GlideRecord("sys_user");
userGR.addQuery('sys_id',user);
userGR.query();
if(userGR.canRead() && userGR.next()){
var personalScheduleGR = new GlideRecord('cmn_schedule');
personalScheduleGR.initialize();
personalScheduleGR.setValue('name',userGR.getValue('name')+" Personal Schedule");
if(personalScheduleGR.canCreate()) {
personalScheduleID = personalScheduleGR.insert();
}else{
gs.error(gs.getMessage("AgentScheduleAjax:createPersonalSchedule Security check failed. cmn_schedule"));
}
}else{
gs.error(gs.getMessage("AgentScheduleAjax:createPersonalSchedule Security check failed. sys_user "));
}
}
return personalScheduleID;
},
createPersonalScheduleConfig:function(user,personalScheduleID){
var agentPersonalScheduleConfigID = "";
if(user && personalScheduleID){
var agentEventGR = new GlideRecord('agent_events');
agentEventGR.initialize();
agentEventGR.setValue('user',user);
agentEventGR.setValue('personal_schedule',personalScheduleID);
if(agentEventGR.canCreate()){
agentPersonalScheduleConfigID = agentEventGR.insert();
}else{
gs.error(gs.getMessage("AgentScheduleAjax:createPersonalScheduleConfig Security check failed. agent_events"));
}
}
return agentPersonalScheduleConfigID;
},
getAgentCalendarConfig : function(user) {
var configGR = new GlideRecordSecure("agent_schedule_user_pref");
var agentCond = configGR.addQuery("user",user);
//agentCond.addOrCondition("user","6816f79cc0a8016401c5a33be04be441");
configGR.query();
if(configGR.getRowCount() == 0){
var configId = this.createAgentConfig(user);
if(configId){
//this.createAgentConfigTaskConfigRel(configId);
configGR = new GlideRecordSecure("agent_schedule_user_pref");
configGR.addQuery('sys_id',configId);
configGR.query();
}
}
var config = {};
while(configGR.next()){
if(configGR.user != gs.getUserID() && configGR.getRowCount() > 1)
continue;
this.createAgentConfigTaskConfigRel(configGR.getValue("sys_id"));
config.name = configGR.getValue('name');
config.sys_id = configGR.getValue("sys_id");
config.tasks = [];
var configTaskGR = new GlideRecordSecure("agent_schedule_task_config_rel_user_pref");
configTaskGR.addQuery("config", configGR.getValue("sys_id"));
configTaskGR.query();
while(configTaskGR.next()){
var taskConfigRecord = new GlideRecord("agent_schedule_task_config");
//taskConfigRecord.get(configTaskGR.getValue("task_config"));
if(taskConfigRecord.canRead() && taskConfigRecord.get(configTaskGR.getValue("task_config"))){
if((taskConfigRecord.getValue("task_table") != 'agent_work_schedule' && taskConfigRecord.getValue("task_table") != 'cmn_schedule_span')){
var taskConfig = {};
taskConfig.name = taskConfigRecord.getValue("name");
taskConfig.user_field = taskConfigRecord.getValue("task_user_field");
taskConfig.display_field = taskConfigRecord.getValue("display_field");
taskConfig.table = taskConfigRecord.getValue("task_table");
taskConfig.filter = taskConfigRecord.getValue("task_filter");
taskConfig.start_date_field = taskConfigRecord.getValue("start_date_field");
taskConfig.end_date_field = taskConfigRecord.getValue("end_date_field");
taskConfig.label = taskConfigRecord.getValue("label");
taskConfig.active = configTaskGR.getValue("active");
taskConfig.relID = configTaskGR.getValue('sys_id');
taskConfig.theme = taskConfigRecord.getDisplayValue('color_theme');
taskConfig.bordercolorVal = taskConfigRecord.getValue('border_color');
taskConfig.backGrdcolorVal = taskConfigRecord.getValue('background_color');
config.tasks.push(taskConfig);
}
}
}
if(configGR.user == gs.getUserID())
this.configSwitches = config;
break;
}
return config;
},
// creating a user config should run as admin process
createAgentConfig:function(userID){
var configId = "";
if(userID){
var userGR = new GlideRecord("sys_user");
userGR.addQuery('sys_id',userID);
userGR.query();
if(userGR.canRead() && userGR.next()){
var userConfigGR = new GlideRecord('agent_schedule_user_pref');
userConfigGR.initialize();
userConfigGR.setValue('name',userGR.getValue('name')+" Schedule Config");
userConfigGR.setValue('user',userID);
if(userConfigGR.canCreate()){
configId = userConfigGR.insert();
}else{
gs.error(gs.getMessage("AgentScheduleAjax:createAgentConfig Security check failed. agent_schedule_user_pref"));
}
}else{
gs.error(gs.getMessage("AgentScheduleAjax:createAgentConfig Security check failed. sys_user"));
}
}
return configId;
},
//creating a relationship entry should run as admin process
createAgentConfigTaskConfigRel:function(configID){
var relIDarr = [];
if(configID){
var taskConfigGR = new GlideRecord(TASK_CONFIG);
taskConfigGR.query();
while(taskConfigGR.canRead() && taskConfigGR.next()){
//check wether logged in user has access to task table in task Config
var taskTableGR = new GlideRecordSecure(taskConfigGR.getDisplayValue('task_table'));
//check TaskConfig entry for user config
var relGREntryPresent = false;
var relGREntry = new GlideRecord(AGENT_CONFIG_REL_TASK_CONFIG);
relGREntry.addQuery('config',configID);
relGREntry.addQuery('task_config',taskConfigGR.getValue('sys_id'));
relGREntry.query();
if(relGREntry.next() && relGREntry.canRead()){
relGREntryPresent = true;
}
if(taskTableGR.canRead() && !relGREntryPresent){
var relGR = new GlideRecord(AGENT_CONFIG_REL_TASK_CONFIG);
relGR.initialize();
relGR.setValue('config',configID);
relGR.setValue('task_config',taskConfigGR.getValue('sys_id'));
var relID = relGR.insert();
if(relID)
relIDarr.push(relID);
}else if(!taskTableGR.canRead() && relGREntryPresent){
relGREntry.deleteRecord();
}
}
}
return relIDarr;
},
getAgentTasks : function(user, startDate, endDate) {
var tasks = [];
var config = this.getAgentCalendarConfig(user);
if(!config.tasks)
return [];
for(var i = 0; i < config.tasks.length; i++) {
var taskConfig = config.tasks[i];
if(taskConfig.active == "1" && ((taskConfig.table != 'agent_work_schedule' && taskConfig.table != 'cmn_schedule_span'))){
var taskGR = new GlideRecord(taskConfig.table);
taskGR.addActiveQuery();
var query = taskConfig.start_date_field+">=" + startDate + "^"+taskConfig.start_date_field+"<=" + endDate;
query += "^NQ"+taskConfig.end_date_field+">=" + startDate + "^"+taskConfig.end_date_field+"<=" + endDate;
query += "^NQ"+taskConfig.start_date_field+"<=" + startDate + "^"+taskConfig.end_date_field+">=" + endDate;
taskGR.addEncodedQuery(query);
taskGR.addEncodedQuery(taskConfig.user_field + "=" + user);
taskGR.addEncodedQuery(taskConfig.filter);
taskGR.query();
while(taskGR.next()){
var task = {};
task.table = taskGR.getTableName();
task.sys_id = taskGR.getValue("sys_id");
task.number = taskGR.getDisplayValue(taskConfig.display_field);
task.desc = taskGR.getDisplayValue("short_description");
task.start_date = taskGR.getDisplayValue(taskConfig.start_date_field);
task.end_date = taskGR.getDisplayValue(taskConfig.end_date_field);
task.theme = taskConfig.theme;
task.bordercolorVal = taskConfig.bordercolorVal;
task.backGrdcolorVal = taskConfig.backGrdcolorVal;
task.label = taskConfig.label;
task.name = taskConfig.name;
tasks.push(task);
}
}
}
return tasks;
},
getAgentWorkSchedule: function(){
var startDateNum = this.getParameter("sysparm_start_date");
var startDate = null;
if(!JSUtil.nil(startDateNum))
{
startDate = new GlideDateTime();
startDate.setDisplayValue(startDateNum);
}
var endDateNum = this.getParameter("sysparm_end_date");
var endDate = null;
if(!JSUtil.nil(endDateNum))
{
endDate = new GlideDateTime();
endDate.setDisplayValue(endDateNum);
endDate.addDaysUTC(1);
}
var user = gs.getUserID();
if(new CSMUtil().isDebugOn())
gs.log("getAgentWorkSchedule: " + startDate + " endDate=" + endDate + " user=" + user);
var agentScheduleUtil = new AgentScheduleUtil();
var scheduleData = agentScheduleUtil.getWorkSchedule(user, startDate, endDate);
var availSpans = [];
while(!JSUtil.nil(scheduleData) && scheduleData.hasNext()){
var schedObj = {};
var timeSpan = scheduleData.next();
schedObj.timezone = agentScheduleUtil.getUserTZ(user);
schedObj.startMS = timeSpan.getStart().getMS();
schedObj.endMS = timeSpan.getEnd().getMS();
schedObj.startDisplay = timeSpan.getStart().convertTimeZone(schedObj.timezone, GlideSession.get().getTimeZoneName());
schedObj.endDisplay = timeSpan.getEnd().convertTimeZone(schedObj.timezone, GlideSession.get().getTimeZoneName());
availSpans.push(schedObj);
}
return new JSON().encode(availSpans);
},
updateConfigFlag : function(){
var result = {};
var relId = this.getParameter('sysparm_rel_ID');
var value = this.getParameter('sysparm_active_flag_value');
var configTaskGR = new GlideRecord("agent_schedule_task_config_rel_user_pref");
configTaskGR.addQuery("sys_id", relId);
configTaskGR.query();
if(configTaskGR.next() && configTaskGR.canWrite()){
configTaskGR.setValue("active",value);
configTaskGR.update();
result.success = true;
result.info = "Config is updated";
}else{
result.success = false;
result.info = "Config is not found";
}
return new JSON().encode(result);
},
updateNavStack : function(){
var result = {};
var mode = this.getParameter('sysparm_mode');
var date = this.getParameter('sysparm_date');
var selectedGroupId = this.getParameter('sysparm_selectedgroupid');
var app = this.getParameter('sysparm_app');
var sessionObj = gs.getSession();
var navStack = sessionObj.getStack();
var agentScheduleUrl = navStack.pop();
var navStackPushUrl = '$'+app+'.do?sysparm_mode='+mode+'&sysparm_date='+date;
if(selectedGroupId){
navStackPushUrl += '&sysparm_selectedgroupid='+selectedGroupId;
}
navStack.push(navStackPushUrl);
return new JSON().encode(result);
},
type: 'AgentScheduleAjax'
});
Sys ID
0328a950c37312001c845cb981d3ae5c