"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(_.pluck(_.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; } }); } ]); })();