SmartIT_Extensions/BMC/smart-it-full/scripts/app/asset/add-people-controller.js

261 lines
13 KiB
JavaScript

"use strict";
(function () {
'use strict';
angular.module('assetModule')
.controller('AddPeopleController', ['$scope', 'assetModel', 'configurationModel', 'userService', 'searchService', 'userModel', '$q', 'searchModel', 'events', 'systemAlertService', 'i18nService', '$filter', '$timeout',
function ($scope, assetModel, configurationModel, userService, searchService, userModel, $q, searchModel, events, systemAlertService, i18nService, $filter, $timeout) {
function init() {
$scope.state = {
dataIsLoading: false,
isPeopleRelationsLoading: false,
tooManyCompanies: false,
tooManySupportgroups: false
};
$scope.chunkInfo = {
startIndex: 0,
chunkSize: 80
};
$scope.showMore = false;
$scope.peopleTypes = _.find(configurationModel.get('link')[EntityVO.TYPE_PERSON], { type: EntityVO.TYPE_PEOPLETYPE }).relations;
$scope.peopleRelationshipTypes = _.find(configurationModel.get('link')[EntityVO.TYPE_PERSON], { type: EntityVO.TYPE_PERSON }).relations;
$scope.selectedType = $scope.peopleTypes[0];
$scope.selectedRelationshipType = $scope.peopleRelationshipTypes[0];
$scope.searchPeople = {
results: [],
filter: ''
};
$scope.company = {};
$scope.companyList = [];
$scope.addPeopleData = {
relationshipType: $scope.selectedRelationshipType,
type: EntityVO.TYPE_PERSON,
subType: $scope.selectedType,
selectedPerson: undefined
};
$scope.pauseInterval = 2000;
$scope.timerPromise;
$scope.dataSearching = false;
}
$scope.onSearchTextChange = function () {
if ($scope.selectedType === EntityVO.TYPE_SUPPORTGROUP) {
$timeout.cancel($scope.timerPromise);
if ($scope.searchPeople.filter.length > 1 && $scope.state.tooManySupportgroups) {
$scope.state.dataSearching = true;
$scope.searchPeople.results = [];
$scope.showMore = false;
$scope.chunkInfo.startIndex = 0;
$scope.timerPromise = $timeout(function () {
$scope.doSearch();
}, $scope.pauseInterval);
}
else if ($scope.searchPeople.filter.length === 0 && $scope.state.tooManySupportgroups) {
$scope.chunkInfo.startIndex = 0;
$scope.doSearch();
}
}
};
$scope.selectPeopleType = function (type) {
$scope.searchPeople.text = '';
$scope.searchPeople.results = [];
$scope.chunkInfo.startIndex = 0;
$scope.selectedType = type;
$scope.addPeopleData.subType = $scope.selectedType;
if (type !== EntityVO.TYPE_PEOPLE) {
$scope.doSearch();
}
};
$scope.selectRelationshipType = function (type) {
$scope.selectedRelationshipType = type;
$scope.addPeopleData.relationshipType = $scope.selectedRelationshipType;
};
$scope.selectPerson = function (person) {
$scope.selectedPerson = person;
$scope.addPeopleData.selectedPerson = $scope.selectedPerson;
};
$scope.addPeopleToAsset = function () {
$scope.state.isPeopleRelationsLoading = true;
var personData = getPersonData();
assetModel.addPeople(personData).then(function () {
$scope.state.isPeopleRelationsLoading = false;
$scope.modalInstance.close();
}).catch(function (response) {
if (response.data.results && response.data.results.error) {
systemAlertService.error({
text: response.data.results.error,
clear: false
});
}
$scope.state.isPeopleRelationsLoading = false;
$scope.modalInstance.close({ error: true });
});
};
$scope.changeCompany = function (newCompany) {
$scope.company = newCompany;
$scope.doSearch();
};
$scope.doSearch = function () {
$scope.state.isPeopleRelationsLoading = true;
var companiesPromise, searchPromise = $q.when(1);
if ($scope.selectedType === EntityVO.TYPE_PEOPLE) {
companiesPromise = $q.when(1);
}
else {
companiesPromise = searchModel.getOperatingCompanies(null, -1);
}
companiesPromise.then(function (results) {
if ($scope.selectedType !== EntityVO.TYPE_PEOPLE) {
$scope.companyList = results.companies;
$scope.state.tooManyCompanies = results.exceedsChunkSize;
if (!$scope.company.name) {
$scope.company.name = assetModel.assetDetails.company.name ? assetModel.assetDetails.company.name : results[0].name;
}
}
if ($scope.selectedType === EntityVO.TYPE_PEOPLE) {
searchPromise = userService.searchUserByName(trimSearchedText($scope.searchPeople.text));
}
else if ($scope.selectedType === EntityVO.TYPE_ORGANIZATION) {
searchPromise = searchModel.getOrganizationsByCompany($scope.company.name, $scope.chunkInfo);
}
else if ($scope.selectedType === EntityVO.TYPE_SUPPORTGROUP) {
searchPromise = searchService.getSupportGroupsList({
companyName: $scope.company.name,
chunkInfo: $scope.chunkInfo,
searchText: $scope.searchPeople.filter
});
}
else if ($scope.selectedType === EntityVO.TYPE_DEPARTMENT) {
searchPromise = searchService.getDepartmentsByCompany($scope.company.name, $scope.chunkInfo);
}
else if ($scope.selectedType === EntityVO.TYPE_COMPANY) {
searchPromise = userModel.getOperatingCompanies($scope.chunkInfo);
}
return searchPromise.then(function (data) {
var exceedsChunkSize = data.exceedsChunkSize;
if ($scope.selectedType === EntityVO.TYPE_SUPPORTGROUP) {
data = $scope.searchPeople.results = data.supportGroups;
if (!$scope.searchPeople.filter) {
$scope.state.tooManySupportgroups = exceedsChunkSize;
}
}
else if ($scope.selectedType === EntityVO.TYPE_COMPANY) {
data = $scope.searchPeople.results = data.companies;
}
else if ($scope.selectedType === EntityVO.TYPE_DEPARTMENT) {
data = $scope.searchPeople.results = data.organizations;
}
else {
$scope.searchPeople.results = data;
}
if (data.length) {
$scope.selectedPerson = data[0];
$scope.addPeopleData.selectedPerson = $scope.selectedPerson;
}
if ($scope.selectedType !== EntityVO.TYPE_PEOPLE) {
$scope.showMore = exceedsChunkSize;
}
$scope.state.dataSearching = false;
});
}).finally(function () {
$scope.state.isPeopleRelationsLoading = false;
});
};
$scope.loadMore = function () {
$scope.state.isPeopleRelationsLoading = true;
$scope.showMore = false;
$scope.chunkInfo.startIndex += $scope.chunkInfo.chunkSize;
var searchPromise = $q.when(1);
if ($scope.selectedType === EntityVO.TYPE_ORGANIZATION) {
searchPromise = searchModel.getOrganizationsByCompany($scope.company.name, $scope.chunkInfo);
}
else if ($scope.selectedType === EntityVO.TYPE_SUPPORTGROUP) {
searchPromise = searchService.getSupportGroupsList({
companyName: $scope.company.name,
chunkInfo: $scope.chunkInfo,
searchText: $scope.searchPeople.filter
});
}
else if ($scope.selectedType === EntityVO.TYPE_DEPARTMENT) {
searchPromise = searchService.getDepartmentsByCompany($scope.company.name, $scope.chunkInfo);
}
else if ($scope.selectedType === EntityVO.TYPE_COMPANY) {
searchPromise = userModel.getOperatingCompanies($scope.chunkInfo);
}
searchPromise.then(function (data) {
if ($scope.selectedType === EntityVO.TYPE_SUPPORTGROUP) {
$scope.searchPeople.results = _.union($scope.searchPeople.results, data.supportGroups);
if (!$scope.searchPeople.filter) {
$scope.state.tooManySupportgroups = exceedsChunkSize;
}
}
else if ($scope.selectedType === EntityVO.TYPE_COMPANY) {
$scope.searchPeople.results = _.union($scope.searchPeople.results, data.companies);
}
else if ($scope.selectedType === EntityVO.TYPE_DEPARTMENT) {
$scope.searchPeople.results = _.union($scope.searchPeople.results, data.organizations);
}
else {
$scope.searchPeople.results = data;
}
if ($scope.selectedType !== EntityVO.TYPE_PEOPLE) {
$scope.showMore = data.exceedsChunkSize;
}
$scope.state.isPeopleRelationsLoading = false;
});
};
$scope.getCompaniesByName = function (name) {
return searchModel.getCompaniesByText(name).then(function (response) {
return response.companies;
});
};
function trimSearchedText(text) {
return text ? text.trim() : '';
}
function getPersonData() {
var personData = {
relationshipType: $scope.selectedRelationshipType,
type: EntityVO.TYPE_PERSON,
subType: $scope.selectedType
};
if ($scope.selectedType === EntityVO.TYPE_PEOPLE) {
personData.id = $scope.selectedPerson.displayId;
}
else {
personData.id = $scope.selectedPerson.id;
}
personData.relationshipType = $scope.selectedRelationshipType;
return personData;
}
init();
$scope.close = function () {
if ($scope.searchPeople && $scope.searchPeople.results && $scope.searchPeople.results.length) {
var modalInstance = systemAlertService.modal({
title: i18nService.getLocalizedString('common.notification.dirty.title'),
text: i18nService.getLocalizedString('common.notification.dirty.message'),
buttons: [
{
text: i18nService.getLocalizedString('common.labels.yes'),
data: true
},
{
text: i18nService.getLocalizedString('common.labels.no'),
data: false
}
]
});
modalInstance.result.then(function (data) {
if (data) {
$scope.modalInstance.dismiss();
}
});
}
else {
$scope.modalInstance.dismiss();
}
};
function handleModalBackdropClick() {
$scope.close();
}
$scope.$on(events.MODAL_BACKDROP_CLICK_PROPOGATE, handleModalBackdropClick);
}]);
})();