SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/user/user-model.js

192 lines
8.8 KiB
JavaScript

"use strict";
(function () {
'use strict';
angular.module('userModule')
.factory('userModel', ['authService', 'localStorageService', 'userService', '$q', '$log', '$rootScope', 'events', 'searchService',
function (authService, localStorageService, userService, $q, $log, $rootScope, events, searchService) {
var self = {
userConfig: {},
followCount: null,
isAccessibleUser: false,
isAccessibleUserPreferenceId: null,
bcmConfig: {
"integrated": false,
"usermapped": false,
"configLoaded": false
},
userIdEncoded: false,
userId: localStorageService.get('user.userId'),
decodedUserId: localStorageService.get('user.userId')
};
/**
* Gets need user data
*/
self.getUserDataForCurrentSession = function () {
self.userId = localStorageService.get('user.userId');
self.getFullCurrentUserData();
};
/**
* Loads full user's data
*
* @returns {Promise}
*/
self.getFullCurrentUserData = function () {
if (!_.isUndefined(self.userFullData) && !_.isUndefined(self.userFullData.loginId) && self.userFullData.loginId !== self.userId) {
self.userFullData = null;
}
//Some race condition is causing self.userid to be null resulting in null for /smartit/restapi/person/supportgroupperson/:userid call
//So login user icon and search icon disappears so adding a check if empty get the userid from localstorage
if (!self.userId) {
self.userId = localStorageService.get('user.userId');
}
if (!self.userFullData && !_.isUndefined(self.userId)) {
if (self.userId && !self.userIdEncoded) {
self.decodedUserId = angular.copy(self.userId);
self.userId = encodeURIComponent(self.userId);
self.userIdEncoded = true;
}
self.userFullData = userService.getFullUserData(self.userId)
.then(function (result) {
self.userFullData = result;
if (!self.userFullData.id) {
self.userFullData.id = self.userId;
}
return result;
})
.catch(function () {
$log.error('Error while getting full user data');
});
}
return $q.when(self.userFullData);
};
/**
* Get list of companies that current user is operating
* @returns {promise}
*/
self.getOperatingCompanies = function (chunkInfo) {
if (self.operatingCompanies && !chunkInfo) {
return $q.when({ companies: self.operatingCompanies, exceedsChunkSize: self.exceedsChunkSizeOperatingCompanies });
}
if (chunkInfo) {
chunkInfo = { chunkInfo: chunkInfo };
}
return searchService.getCompaniesByText('', chunkInfo).then(function (response) {
if (!chunkInfo) {
self.operatingCompanies = response.companies;
self.exceedsChunkSizeOperatingCompanies = response.exceedsChunkSize;
}
return response;
});
};
self.getOperatingCompaniesByText = function (searchText) {
return searchService.getCompaniesByText(searchText).then(function (response) {
return response;
});
};
/**
* Get user preferences
*/
var populateUserPreferences = function (preferenceGroup, userProps) {
userProps = _.filter(userProps, 'id');
if (userProps.length) {
_.map(userProps, function (property) {
property.value = !_.isEmpty(property.value) ? angular.fromJson(property.value) : '';
});
}
_.forEach(userProps, function (property) {
var idx = _.findIndex(self.userConfig[preferenceGroup], { id: property.id });
if (idx > -1) {
self.userConfig[preferenceGroup][idx] = property;
}
else {
self.userConfig[preferenceGroup].push(property);
}
});
};
self.getUserPreferences = function (preferenceGroup) {
if (self.userConfig[preferenceGroup]) {
return $q.when(self.userConfig[preferenceGroup]);
}
self.userConfig[preferenceGroup] = [];
var prop = {
preferenceGroup: preferenceGroup,
user: self.userIdEncoded ? decodeURIComponent(self.userId) : self.userId
};
return userService.getUserPreferences(prop).then(function (userProps) {
populateUserPreferences(preferenceGroup, userProps);
return self.userConfig[preferenceGroup];
});
};
self.updateUserPreferences = function (preferenceGroup, details, args) {
var prefDetail = details.id && _.find(self.userConfig[preferenceGroup], { id: details.id }) || {}, prop = {
preferenceGroup: preferenceGroup,
user: self.userIdEncoded ? decodeURIComponent(self.userId) : self.userId
};
if (details.value !== null) {
if (_.isPlainObject(details.value)) {
if (args && args.updateColumns) {
prefDetail.value = details.value;
}
else {
prefDetail.value = _.merge(prefDetail.value || {}, details.value);
}
}
else {
prefDetail.value = details.value;
}
}
prop.preferenceDetails = [
{
id: prefDetail.id || null,
name: prefDetail.name || details.name,
defaultpreset: details.defaultpreset,
systemgenerated: details.systemgenerated,
label: details.label
}
];
if (details.value || details.name === "accessibility") {
prop.preferenceDetails[0].value = angular.toJson(prefDetail.value);
}
if (details.systemgenerated) {
prop.preferenceDetails[0].value = "[{}]";
}
return userService.updateUserPreferences(prop).then(function (userProps) {
populateUserPreferences(preferenceGroup, userProps);
return userProps;
});
};
self.removeUserPreferences = function (preferenceGroup, details) {
self.userConfig[preferenceGroup].splice(_.findIndex(self.userConfig[preferenceGroup], { id: details.id }), 1);
return userService.removeUserPreferences(details.id);
};
//get BCM config
self.getBCMIntegrationConfig = function () {
if (self.bcmConfig.configLoaded) {
return $q.when(self.bcmConfig);
}
else {
return userService.getBCMIntegrationConfig().then(function (data) {
self.bcmConfig = {
"configLoaded": true,
"integrated": data.integrated,
"usermapped": data.usermapped
};
return self.bcmConfig;
});
}
};
self.doBCMLogin = function (username, password) {
return userService.doBCMLogin(username, password).then(function (data) {
self.bcmConfig = {
"configLoaded": true,
"integrated": data.integrated,
"usermapped": data.usermapped
};
return self.bcmConfig;
});
};
return self;
}
]);
}());