"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; }); }; /** * 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) { 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; } ]); }());