Name
sn_customerservice.AccountTeamUtil
Description
Util API s for CS Account team responsibility module
Script
var AccountTeamUtil = Class.create();
AccountTeamUtil.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
TABLE_TEAM_MEMBER : "sn_customerservice_team_member",
TABLE_RESPONSIBILITY_DEF : "sn_customerservice_responsibility_def",
ACCOUNT : "account",
RESPONSIBILITY : "responsibility",
UNIQUE : "unique",
PREFERRED_TECHNICIAN_ID: "08b25ad1c3b20200b0449f2974d3ae05",
TABLE_SYS_USER_HAS_ROLE: "sys_user_has_role",
getUserRefQualForAccountTeamMember: function(member){
var responsibility = member.responsibility;
if(this.isSysUser(responsibility)){
return "sys_class_nameINsys_user,sn_csm_service_organization_external_staff";
}
else
return "sys_class_name=customer_contact";
},
isSysUser: function(responsibility) {
if (gs.nil(responsibility)) {
return false;
}
var gr = new GlideRecord(this.TABLE_RESPONSIBILITY_DEF);
if (!gr.canRead())
return false;
gr.get(responsibility);
var type = gr.type + '';
if (type == 'sys_user') {
return true;
}
return false;
},
hasAccountTeamResponsibility: function(account, responsibility) {
if (gs.nil(account) || gs.nil(responsibility))
return false;
var gr = new GlideRecord(this.TABLE_TEAM_MEMBER);
if (!gr.canRead())
return false;
gr.addQuery(this.ACCOUNT, account);
gr.addQuery(this.RESPONSIBILITY, responsibility);
gr.query();
if(gr.next())
return true;
return false;
},
hasUniqueResponsibility: function(responsibility) {
var gr = new GlideRecord(this.TABLE_RESPONSIBILITY_DEF);
if (gr.get(responsibility) && gr.canRead())
return gr.unique;
return false;
},
getAccountTeamUserIds: function(account, responsibility) {
var ids = [];
if (gs.nil(account) || gs.nil(responsibility))
return ids;
var gr = new GlideRecord(this.TABLE_TEAM_MEMBER);
if (!gr.canRead())
return ids;
gr.addQuery(this.ACCOUNT, account);
gr.addQuery(this.RESPONSIBILITY, responsibility);
gr.query();
while(gr.next()) {
ids.push(gr.getValue("user"));
}
return ids;
},
getPreferredTechnicianAccountForCurrent: function() {
var account = "";
var gr = new GlideRecord(this.TABLE_TEAM_MEMBER);
if (!gs.nil(current) && !gs.nil(current.account) && gr.canRead())
if (this.hasAccountTeamResponsibility(current.account, this.PREFERRED_TECHNICIAN_ID))
account = current.account;
return account;
},
getPreferredTechnicianUserIDsByAccount: function(account) {
var userIds = [];
var gr = new GlideRecord(this.TABLE_TEAM_MEMBER);
if (!gs.nil(account) && gr.canRead()) {
userIds = this.getAccountTeamUserIds(account, this.PREFERRED_TECHNICIAN_ID);
//sort the agents by least loaded
if (!gs.nil(userIds) && userIds.length > 1)
userIds = this.getAgentsByLeaseLoaded(userIds, account);
}
return userIds;
},
getAgentsByLeaseLoaded: function(agents, account) {
var ids = [];
if (gs.nil(agents))
return [];
try {
var assignCount ={};
var count = new GlideAggregate('sn_customerservice_case');
var gr = new GlideRecord('sn_customerservice_case');
if (!gr.canRead())
return ids;
count.addQuery('assigned_to', 'IN', agents);
count.addQuery('active', 'true');
count.addQuery('account', account);
count.addAggregate('COUNT', 'assigned_to');
count.orderByAggregate('COUNT', 'assigned_to', true);
count.query();
while (count.next()) {
var assigned_to = count.assigned_to;
var caseCount = count.getAggregate('COUNT', 'assigned_to');
assignCount[assigned_to] = caseCount;
//gs.info(assignCount[assigned_to] + " ,The are currently " + caseCount + " case with a category of " + count.assigned_to.getDisplayValue() +"/"+assigned_to);
}
var list = [];
for (var i = 0; i < agents.length; i++) {
var id = agents[i];
var obj = {'id' : id};
var c = assignCount[id];
if (!gs.nil(c))
obj['value'] = c;
else
obj['value'] = 0;
list.push(obj);
}
//sort the list by count
list.sort(function (a, b) {
if (a.value > b.value)
return 1;
if (a.value < b.value)
return -1;
return 0;
});
for (var index = 0; index < list.length; index++)
ids.push(list[index]['id']);
} catch (err) {
gs.error("Error in get agents by least loaded list: "+ err.message);
ids = agents;
}
return ids;
},
isCustomerContact: function(teamMember) {
var roleGr = new GlideRecord(this.TABLE_SYS_USER_HAS_ROLE);
roleGr.addQuery("user", teamMember);
roleGr.addQuery("role", "3a64fc24d7700200e5982cf65e610357"); // role - sn_customerservice.customer
roleGr.query();
if (roleGr.next())
return true;
return false;
},
type: 'AccountTeamUtil'
});
Sys ID
a262d3a0c3320200b0449f2974d3aee9