SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/ticket/share-controller.js

114 lines
5.3 KiB
JavaScript

"use strict";
/**
* Created by viktor.shevchenko on 7/17/2014.
*/
(function () {
'use strict';
angular.module('ticketModule').controller('ShareController', ['$scope', '$modalInstance', 'shareParams', 'ticketService', '$location', '$filter', 'userModel', 'openMailClientService', 'searchModel', 'urlCreatorService',
function ($scope, $modalInstance, shareParams, ticketService, $location, $filter, userModel, openMailClientService, searchModel, urlCreatorService) {
var state = {
processing: true,
tooManySupportGroups: false,
tooManySupportPeople: false,
noSupportGroups: false
}, supportGroups = [], selected = {
group: {}
};
$scope.selectGroup = function (group) {
_.forEach(selected.group.members, function (person) {
person.isSelected = false;
});
selected.group = group;
!selected.group.members && populateGroupMembers(group);
};
$scope.isPersonSelected = function () {
return _.find(selected.group.members, 'isSelected') ? true : false;
};
$scope.share = function () {
state.processing = true;
var mailBody = selected.note ? [selected.note] : [], personsEmails = _.without(_.map(_.filter(selected.group.members, 'isSelected'), 'email'), ''), subject = userModel.userFullData.fullName + $filter('i18n')('shareBlade.emailSubject');
_.forEach(shareParams.actionItems, function (item) {
if (item.type === EntityVO.TYPE_KNOWLEDGE) {
var url = urlCreatorService.create(item);
url = url.replace(/#\//, '');
mailBody.push(url);
}
else {
mailBody.push(urlCreatorService.create(item));
}
});
openMailClientService.openMailClient(personsEmails.join('; '), subject, mailBody.join(' \r\n'));
$modalInstance.close();
};
$scope.getSupportGroupsByText = function (name) {
return searchModel.getSupportGroupsByText(name).then(function (response) {
return response.supportGroups;
});
};
$scope.onPersonSearchTextChanged = function () {
if ($scope.searchText !== userModel.userFullData.fullName) {
$scope.personLoginId = '';
}
if ($scope.selected.group.id) {
if (state.tooManySupportPeople) {
if ($scope.searchText.length > 2) {
state.processing = true;
ticketService.getAssigneeBySupportGroupId($scope.selected.group.id, $scope.searchText, $scope.personLoginId, '', '', searchModel.supportPersonChunkSize, true)
.then(function (results) {
handleMembers(results.results);
})
.finally(function () {
state.processing = false;
});
}
else {
selected.group.members = [];
}
}
else {
populateGroupMembers(selected.group);
}
}
};
function populateGroupMembers(group) {
state.processing = true;
ticketService.getPersonsBySupportGroupId(group.id, '', '', searchModel.supportPersonChunkSize)
.then(function (members) {
state.tooManySupportPeople = members.exceedsChunkSize;
handleMembers(members.results);
})
.finally(completeProcessing);
}
function handleMembers(members) {
selected.group.members = members;
}
function completeProcessing() {
state.processing = false;
}
$scope.selected = selected;
$scope.supportGroups = supportGroups;
$scope.state = state;
searchModel.getSupportGroupsForKAShare(searchModel.supportGroupChunkSize)
.then(function (groups) {
if (groups.exceedsChunkSize) {
$scope.supportGroups = groups.supportGroups;
state.processing = false;
state.tooManySupportGroups = true;
state.noSupportGroups = false;
}
else if (groups.supportGroups.length) {
$scope.supportGroups = groups.supportGroups;
selected.group = groups.supportGroups[0];
populateGroupMembers(selected.group);
state.tooManySupportGroups = false;
state.noSupportGroups = false;
}
else {
state.processing = false;
state.noSupportGroups = true;
}
});
}
]);
})();