SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/approval/approvers-dialog-controller.js

220 lines
11 KiB
JavaScript

"use strict";
(function () {
'use strict';
angular.module('myitsmApp')
.controller('ApproversDialogController', ['$scope', 'changeApprovalParams', 'approvalModel', 'systemAlertService', '$timeout', 'searchModel', '$q', 'i18nService', 'events', '$rootScope', 'configurationModel',
function ($scope, changeApprovalParams, approvalModel, systemAlertService, $timeout, searchModel, $q, i18nService, events, $rootScope, configurationModel) {
var state = {
loadingApprovers: false,
loadingApproverSearch: false,
loadingCompanies: false,
loadingOrganizations: false,
loadingGroups: false,
tooManyCompanies: false,
tooManyOrganizations: false,
tooManySupportGroups: false
}, allOrganizations = {
name: i18nService.getLocalizedString('assignBlade.organization.all'),
id: 'All'
};
$scope.state = state;
$scope.addApproverAllowed = changeApprovalParams.addApproverAllowed;
$scope.ticketType = changeApprovalParams.type;
$scope.showClosedTabDefault = changeApprovalParams.showClosedTabDefault;
$scope.approverSelected = false;
$scope.approver = {};
$scope.assigneeCompany = {};
$scope.assigneeOrganization = {};
$scope.assigneeGroup = null;
$scope.companies = [];
$scope.organizations = [];
$scope.groups = [];
$scope.showMailstopOnPersoncard = configurationModel.showMailstopOnPersoncard;
$scope.showPhoneNumOnPersonCard = configurationModel.showPhoneNumOnPersonCard;
if (!changeApprovalParams.approvalList) {
refreshApprovalList();
}
else {
$scope.closedList = processClosedList(changeApprovalParams.approvalList.closed);
$scope.openList = processOpenList(changeApprovalParams.approvalList.open);
}
$scope.$watch('approver.model', function (newValue) {
$scope.approverSelected = _.isObject(newValue);
});
$scope.enableSearchApprover = function () {
$scope.showSearchApprover = true;
$scope.showSearchApprovalGroup = false;
};
$scope.enableSearchApprovalGroup = function () {
$scope.showSearchApprover = false;
$scope.showSearchApprovalGroup = true;
$scope.getApproverSupportCompanies();
};
$scope.getApproverByText = function (searchText) {
return approvalModel.getApproverByText(searchText);
};
$scope.getApproverSupportCompanies = function () {
state.loadingCompanies = true;
return searchModel.getApproverSupportCompanies(null, null, $scope.ticketType).then(function (companies) {
state.loadingCompanies = false;
if (companies.length >= searchModel.companyChunkSize) {
$scope.companies = [];
state.tooManyCompanies = true;
}
else {
$scope.companies = _.cloneDeep(companies);
state.tooManyCompanies = false;
}
});
};
$scope.getApproverSupportCompaniesByName = function (searchText) {
return searchModel.getApproverSupportCompanies(searchText, null, $scope.ticketType).then(function (companies) {
$scope.companies = _.cloneDeep(companies);
});
};
function getApproverSupportOrganizations() {
state.loadingOrganizations = true;
return searchModel.getApproverSupportOrganizations(null, $scope.assigneeCompany.name, null, $scope.ticketType)
.then(function (organizations) {
state.loadingOrganizations = false;
if (organizations.length >= searchModel.organizationChunkSize) {
state.tooManyOrganizations = true;
return [];
}
if (organizations.length && organizations[0].id !== 'All') {
organizations.unshift(allOrganizations);
}
state.tooManyOrganizations = false;
return organizations;
});
}
$scope.getApproverSupportOrganizationsByName = function (searchText) {
return searchModel.getApproverSupportOrganizations(searchText, $scope.assigneeCompany.name, null, $scope.ticketType);
};
function getApproverSupportGroups() {
state.loadingGroups = true;
return searchModel.getApproverSupportGroups(null, $scope.assigneeCompany.name, $scope.assigneeOrganization.id === 'All' ? null : $scope.assigneeOrganization.name, null, $scope.ticketType)
.then(function (groups) {
state.loadingGroups = false;
state.tooManySupportGroups = groups.exceedsChunkSize;
return groups.supportGroups;
});
}
$scope.getApproverSupportGroupsByName = function (searchText) {
return searchModel.getApproverSupportGroups(searchText, $scope.assigneeCompany.name, $scope.assigneeOrganization.id === 'All' ? null : $scope.assigneeOrganization.name, null, $scope.ticketType)
.then(function (response) {
return response.supportGroups;
});
};
$scope.selectCompany = function (company) {
$scope.assigneeCompany = company;
$scope.organizations = [];
$scope.assigneeOrganization = allOrganizations;
$scope.groups = [];
$scope.assigneeGroup = null;
var promises = [];
if ($scope.assigneeCompany.name) {
promises.push(getApproverSupportOrganizations());
promises.push(getApproverSupportGroups());
}
$q.all(promises).then(function (results) {
$scope.organizations = results[0];
$scope.groups = results[1];
});
};
$scope.selectOrganization = function (organization) {
$scope.assigneeOrganization = organization;
$scope.groups = [];
$scope.assigneeGroup = null;
getApproverSupportGroups()
.then(function (results) {
$scope.groups = results;
});
};
$scope.selectGroup = function (group) {
$scope.assigneeGroup = group;
};
$scope.addApprover = function () {
if (!_.isObject($scope.approver.model) || !$scope.approver.model.loginId) {
return;
}
$scope.state.loadingApprovers = true;
approvalModel.addApprover('addApprover', $scope.approver.model.loginId, changeApprovalParams.id, changeApprovalParams.type, changeApprovalParams.statusValue)
.then(handleAddApprover)
.finally(function () {
$scope.state.loadingApprovers = false;
});
};
$scope.addApprovalGroup = function () {
$scope.state.loadingApprovers = true;
approvalModel.addApprover('addApproverGroup', $scope.assigneeGroup.id, changeApprovalParams.id, changeApprovalParams.type, changeApprovalParams.statusValue)
.then(handleAddApprover)
.finally(function () {
$scope.state.loadingApprovers = false;
});
};
function handleAddApprover(response) {
if (response && response.statusInfo && response.statusInfo.number === 2000) {
$timeout(function () {
refreshApprovalList();
}, 500);
}
else {
systemAlertService.error({
text: response && response.statusInfo && response.statusInfo.message,
clear: false
});
}
}
function refreshApprovalList() {
$scope.state.loadingApprovers = true;
approvalModel.getListOfApprovers(changeApprovalParams, true)
.then(function (approversList) {
if (approversList && approversList.approvalList) {
$scope.closedList = processClosedList(approversList.approvalList.closed);
$scope.openList = processOpenList(approversList.approvalList.open);
$rootScope.$broadcast(events.REFRESH_APPROVAL_LIST, { ignoreCache: false });
}
})
.finally(function () {
$scope.state.loadingApprovers = false;
});
}
function processClosedList(list) {
var closedList = [], groupedByAlternateList = {};
_.forEach(list, function (item) {
var itemCopy = _.cloneDeep(item);
if (!itemCopy.alternateApprover) {
closedList.push(itemCopy);
return;
}
if (!groupedByAlternateList[itemCopy.signatureId]) {
itemCopy.approvedFor = [itemCopy.approver.fullName];
itemCopy.approver = itemCopy.alternateApprover;
groupedByAlternateList[itemCopy.signatureId] = itemCopy;
}
else {
groupedByAlternateList[itemCopy.signatureId].approvedFor.push(itemCopy.approver.fullName);
}
});
return closedList.concat(_.values(groupedByAlternateList));
}
function processOpenList(list) {
var groupedOpenList = {
"singleApprovers": [],
"multipleApprovers": []
};
var openList = _.groupBy(list, 'signatureId');
_.forEach(openList, function (value) {
if (value.length < 2) {
groupedOpenList.singleApprovers = groupedOpenList.singleApprovers.concat(value);
}
else {
groupedOpenList.multipleApprovers.push(value);
}
});
return groupedOpenList;
}
}]);
})();