218 lines
10 KiB
JavaScript
218 lines
10 KiB
JavaScript
"use strict";
|
|
(function () {
|
|
'use strict';
|
|
angular.module('myitsmApp')
|
|
.controller('ApproversDialogController', ['$scope', 'changeApprovalParams', 'approvalModel', 'systemAlertService', '$timeout', 'searchModel', '$q', 'i18nService', 'events', '$rootScope',
|
|
function ($scope, changeApprovalParams, approvalModel, systemAlertService, $timeout, searchModel, $q, i18nService, events, $rootScope) {
|
|
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 = [];
|
|
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().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).then(function (companies) {
|
|
$scope.companies = _.cloneDeep(companies);
|
|
});
|
|
};
|
|
function getApproverSupportOrganizations() {
|
|
state.loadingOrganizations = true;
|
|
return searchModel.getApproverSupportOrganizations(null, $scope.assigneeCompany.name)
|
|
.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);
|
|
};
|
|
function getApproverSupportGroups() {
|
|
state.loadingGroups = true;
|
|
return searchModel.getApproverSupportGroups(null, $scope.assigneeCompany.name, $scope.assigneeOrganization.id === 'All' ? null : $scope.assigneeOrganization.name)
|
|
.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)
|
|
.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;
|
|
}
|
|
}]);
|
|
})();
|