Name
sn_hr_core.hr_SysUser
Description
Handler for HR functionality on sys_user records
Script
var hr_SysUser = Class.create();
hr_SysUser.rpToUserMap = {
"personal_email": "email",
"work_email": "email",
"work_phone": "phone",
"work_mobile": "mobile_phone",
"address": "ignore",
"city": "ignore",
"state": "ignore",
"zip": "ignore"
};
hr_SysUser.userProfileWhitelist = {
"first_name" : "",
"middle_name":"",
"last_name":"" ,
"employee_number":"",
"introduction":"",
"gender":"",
"department":"",
"manager":"",
"location":"",
"phone":"",
"email":"",
"home_phone":"",
"mobile_phone":""
};
hr_SysUser.userProfileLabelsMap = {
"work_email": "Work email",
"work_phone": "Work phone",
"work_mobile": "Work mobile"
};
hr_SysUser.prototype = {
initialize: function(_gr, _gs) {
this._gr = _gr;
this._gs = _gs || gs;
},
createUserRecordFromParameters: function(parameters, setUserCredentials) {
// (0) Adjust the data by dereferencing fields to get at the right column
parameters['title'] = hr_Utils.instance.dereferenceField(parameters['position'], 'sn_hr_core_position', 'position');
parameters['country_code'] = hr_Utils.instance.dereferenceField(parameters['country'], 'core_country', 'iso3166_2');
// (1) Create a new user record
var grUser = new GlideRecord(hr.TABLE_USER);
grUser.initialize();
// (2) Store questions/answers in user record
hr_Utils.instance.fillInFromMap(grUser, parameters, hr_SysUser.rpToUserMap);
// (3) parameters[country_code] has the code we want to put into 'country' field
// and country also has sys_id of country (needed elsewhere), adjust manually.
if(parameters['country_code'])
grUser.country = parameters['country_code'];
if(setUserCredentials) {
// (4) Generate an appropriate username for the user
grUser.user_name = this.generateUserName(grUser.first_name, grUser.last_name);
// (5) Indicate that the user password needs a reset
grUser.password_needs_reset = "true";
//(6) Set the password to user's email
var glideElement = grUser.getElement("user_password");
glideElement.setDisplayValue(parameters['personal_email'] + "");
}
// (7) Return sys_id of user record
return grUser.insert();
},
updateUserRecordFromParameters: function(user, parameters) {
var grUser = new GlideRecord(hr.TABLE_USER);
grUser.get(user);
// (1) Store questions/answers in user record
hr_Utils.instance.fillInFromMap(grUser, parameters, hr_SysUser.rpToUserMap);
// (2) parameters[country_code] has the code we want to put into 'country' field
// and country also has sys_id of country (needed elsewhere), adjust manually.
if(parameters['country_code'])
grUser.setValue('country', parameters['country_code']);
// (3) Return sys_id of user record
return grUser.update();
},
generateUserName: function(first_name, last_name) {
var userName = first_name + "." + last_name;
var record = new GlideRecord(hr.TABLE_USER);
if (!record.get("user_name", userName))
return userName.toLowerCase();
var count = (gs.getProperty("sn_hr_core.profile.max.tries", 50));
for (var suffix = 0; suffix < count; ++suffix) {
record = new GlideRecord("sys_user");
userName = first_name + "." + last_name + suffix;
if (!record.get("user_name", userName))
return userName.toLowerCase();
}
gs.debug("[hr_SysUser] Cannot generate user name for " + first_name + ", " + last_name);
return null;
},
getDisplayValue: function(userId, fieldName, display) {
var user = new GlideRecord(hr.TABLE_USER);
if (!user.get(userId))
return '';
var translatedField = hr_SysUser.rpToUserMap[fieldName] || fieldName;
var userDisplayValue = (display) ?
user.getDisplayValue(translatedField) :
user.getValue(translatedField);
return userDisplayValue || '';
},
// returns a comma separated list of user sys_ids of direct reports to a manager
getDirectReports: function(managerId) {
var users = '';
var gr = new GlideRecord(hr.TABLE_USER);
gr.addQuery('manager', managerId);
gr.addActiveQuery();
gr.query();
while (gr.next()) {
if (users == '')
users += gr.sys_id;
if (users.indexOf(gr.sys_id) == -1)
users += ',' + gr.sys_id;
}
return users;
},
// returns a comma separated list of sys_ids of users under a manager (all reports)
getAllReports: function(managerId) {
var managers = [managerId];
var users = '';
while (managers.length) {
managerId = managers.shift();
var gr = new GlideRecord(hr.TABLE_USER);
gr.addQuery('manager', managerId);
gr.addActiveQuery();
gr.query();
while (gr.next()) {
if (users == '') {
users += gr.sys_id;
managers.push(users);
}
if (users.indexOf(gr.sys_id) == -1) {
users += ',' + gr.sys_id;
managers.push(gr.sys_id + '');
}
}
}
return users;
},
getRPFieldsFromId: function(userId) {
var rpFields = {};
var grUser = new GlideRecordSecure(hr.TABLE_USER);
if (grUser.get(userId)) {
if (!hr_SysUser.userToRPMap)
hr_SysUser.userToRPMap = hr_Utils.instance.invertMap(hr_SysUser.rpToUserMap);
if (!hr_SysUser.tableFields)
hr_SysUser.tableFields = hr_Utils.instance.getFieldsFromTable(hr.TABLE_USER);
for(var field in hr_SysUser.tableFields) {
var translatedField = hr_SysUser.userToRPMap[field] || field;
var value = grUser.getValue(field);
if (value == null || value === 'null')
continue;
rpFields[translatedField] = {};
rpFields[translatedField].value = value;
rpFields[translatedField].displayValue = grUser.getDisplayValue(field);
}
}
return rpFields;
},
getUserProfileFields: function() {
if (!hr_SysUser.userProfileFields) {
var fields = hr_Utils.instance.getFieldsFromTable(hr.TABLE_USER, hr_SysUser.userProfileWhitelist);
hr_SysUser.userProfileFields = hr_Utils.instance.translateFieldFromMap(fields, hr_SysUser.rpToUserMap, hr_SysUser.userProfileLabelsMap);
}
return hr_SysUser.userProfileFields;
},
getSysUserRecordFromNames : function(firstName, lastName) {
var grUser = new GlideRecord(sn_hr_core.hr.TABLE_USER);
grUser.addQuery('first_name',firstName);
grUser.addQuery('last_name',lastName);
grUser.query();
return grUser.next() ? grUser : null;
},
getSysUser : function(userSysId){
var grUser = new GlideRecord(sn_hr_core.hr.TABLE_USER);
grUser.get(userSysId);
return grUser;
},
updateSysUserFromParams : function(userSysId, jsonParams){
var grUser = new GlideRecord(sn_hr_core.hr.TABLE_USER);
grUser.get(userSysId);
for (var prop in jsonParams)
grUser[prop] = jsonParams[prop];
grUser.update();
},
updateSysUser: function(caseId, userId) {
var grUser = new GlideRecord(sn_hr_core.hr.TABLE_USER);
if (grUser.get(userId)) {
var qa = new GlideRecord('question_answer');
qa.addQuery("table_name", 'IN', hr.TABLE_CASE_EXTENSIONS);
qa.addQuery('table_sys_id', caseId);
qa.query();
while (qa.next()) {
var translatedField = hr_SysUser.rpToUserMap[qa.question.name] || qa.question.name;
if (translatedField!='country' && grUser.isValidField(translatedField)) {
//Is the new value is changed
if (grUser.getValue(translatedField) != qa.getValue("value")) {
//Query fails if newValue is null
var newValue = qa.getValue("value")? qa.getValue("value") : "";
grUser.setValue(translatedField, newValue);
}
}
}
grUser.update();
}
},
generatePassword: function() {
var utils = new global.HRSecurityUtils();
var pwd = utils.generatePassword();
return pwd;
},
type: 'hr_SysUser'
};
hr_SysUser.instance = new hr_SysUser();
Sys ID
365370019f22120047a2d126c42e7000