SmartIT_Extensions/BMC/smart-it-full/scripts/app/template/browse-ticket-template-cont...

190 lines
9.0 KiB
JavaScript

"use strict";
(function () {
'use strict';
angular.module('templateModule')
.controller('BrowseTicketTemplateController', ['$scope', '$modalInstance', 'ticketTemplateModel', 'createTicketModel', 'ticketModel', 'i18nService', 'ticketType', 'metadata', 'company', '$filter', '$q',
function ($scope, $modalInstance, ticketTemplateModel, createTicketModel, ticketModel, i18nService, ticketType, metadata, company, $filter, $q) {
var allTemplates = [], filterCriteria = {}, selectedTier1 = '', defaultTier = ticketTemplateModel.defaultIncidentTemplateTier = i18nService.getLocalizedString('incident.template.none.selected');
function close() {
$modalInstance.dismiss();
}
$scope.updateTiers = updateTiers;
$scope.selectTemplate = selectTemplate;
$scope.searchTemplate = _.debounce(searchTemplate, 400);
$scope.submit = submit;
$scope.close = close;
init();
function init() {
$scope.state = {
dataIsLoading: true
};
$scope.template = {
ticketType: ticketType,
searchText: ''
};
$scope.selectedTemplate = '';
$scope.templateRadioButtons = {
index: 0
};
if (ticketType === EntityVO.TYPE_INCIDENT) {
$scope.tiers = [1, 2, 3];
$scope.tierOptions = [];
$scope.selectedTier = ticketTemplateModel.selectedIncidentTemplateTier = [defaultTier, defaultTier, defaultTier];
ticketTemplateModel.getIncidentTemplateTierOptions(0)
.then(function (data) {
$scope.tierOptions[0] = data;
})
.finally(function () {
$scope.state.dataIsLoading = false;
});
}
else if (ticketType === EntityVO.TYPE_WORKORDER) {
ticketTemplateModel.getAllWorkorderTemplateList(metadata, company)
.then(function () {
allTemplates = ticketTemplateModel.workorderTemplateList;
refreshFilter();
})
.finally(function () {
$scope.state.dataIsLoading = false;
});
}
else if (ticketType === EntityVO.TYPE_ACTIVITY) {
ticketTemplateModel.getAllActivityTemplateList({})
.then(function () {
allTemplates = ticketTemplateModel.activityTemplateList;
refreshFilter();
})
.finally(function () {
$scope.state.dataIsLoading = false;
});
}
}
function updateTiers(tier, option) {
$scope.selectedTier[tier] = option;
if (tier >= 2) {
filterCriteria.tier3 = $scope.selectedTier[tier];
refreshFilter();
return;
}
var nextTier = tier + 1;
$scope.selectedTier[nextTier] = defaultTier;
$scope.tierOptions[nextTier] = '';
if (tier === 0) {
selectedTier1 = option;
filterCriteria = {};
$scope.selectedTier[nextTier + 1] = defaultTier;
$scope.tierOptions[nextTier + 1] = '';
$scope.state.dataIsLoading = true;
var params = {
incidentTemplateCategoryTier1: option,
incidentTemplateCompanyName: company.name || company,
searchText: $scope.template.searchText
};
ticketTemplateModel.getIncidentTemplateListByCategory(params, metadata)
.then(function () {
allTemplates = ticketTemplateModel.incidentTemplateList;
refreshFilter();
})
.finally(function () {
$scope.state.dataIsLoading = false;
});
}
else {
delete filterCriteria.tier3;
filterCriteria.tier2 = $scope.selectedTier[tier];
refreshFilter();
}
$scope.state.dataIsLoading = true;
ticketTemplateModel.getIncidentTemplateTierOptions(nextTier)
.then(function (data) {
$scope.tierOptions[nextTier] = data;
})
.finally(function () {
$scope.state.dataIsLoading = false;
});
}
function selectTemplate(selected) {
$scope.selectedTemplate = selected;
}
function searchTemplate() {
$scope.state.searchingTemplates = true;
var getTemplatesPromise, params = {};
if (ticketType === EntityVO.TYPE_INCIDENT) {
params.incidentTemplateCategoryTier1 = selectedTier1;
params.incidentTemplateCompanyName = company.name || company;
params.searchText = $scope.template.searchText;
getTemplatesPromise = ticketTemplateModel.getIncidentTemplateListByCategory(params, metadata).then(function () {
allTemplates = ticketTemplateModel.incidentTemplateList;
});
}
else if (ticketType === EntityVO.TYPE_WORKORDER) {
params.companyName = company.name || company;
params.searchText = $scope.template.searchText || '%';
getTemplatesPromise = ticketTemplateModel.getWorkorderTemplateList(params, metadata).then(function () {
allTemplates = ticketTemplateModel.workorderTemplateList;
});
}
else if (ticketType === EntityVO.TYPE_ACTIVITY) {
params.searchText = $scope.template.searchText || '%';
getTemplatesPromise = ticketTemplateModel.getActivityTemplateList(params).then(function () {
allTemplates = ticketTemplateModel.activityTemplateList;
});
}
else {
getTemplatesPromise = $q.when(1);
}
getTemplatesPromise.finally(function () {
refreshFilter();
$scope.state.searchingTemplates = false;
$scope.apply(); //_.debounce is not seen by angular
});
}
function submit() {
if (ticketType === EntityVO.TYPE_ACTIVITY) {
$scope.state.dataIsLoading = true;
var parent = ticketModel.activityParent;
$scope.selectedTemplate.parentId = parent.displayId;
$scope.selectedTemplate.parentGuid = parent.id;
if (_.isObject(parent.milestone)) {
$scope.selectedTemplate.milestone = parent.milestone;
}
else {
$scope.selectedTemplate.milestone = { name: parent.milestone };
}
if (parent.noOfRelatedItems[$scope.selectedTemplate.milestone.name]) {
$scope.selectedTemplate.sequence = parent.noOfRelatedItems[$scope.selectedTemplate.milestone.name] + 1;
}
else {
$scope.selectedTemplate.sequence = 1;
}
createTicketModel.createActivity(true, $scope.selectedTemplate).then(function (data) {
$scope.state.dataIsLoading = false;
$modalInstance.close(data);
});
}
else {
$modalInstance.close($scope.selectedTemplate);
}
}
function refreshFilter() {
$scope.selectedTemplate = '';
$scope.templateRadioButtons.index = 0;
if ($scope.template.searchText) {
filterCriteria.name = $scope.template.searchText;
}
else if (filterCriteria.name) {
delete filterCriteria.name;
}
$scope.templates = $filter('filter')(allTemplates, filterCriteria);
var pat = new RegExp(/%+/);
if (pat.test(filterCriteria.name)) {
$scope.templates = allTemplates;
}
if (!_.isEmpty($scope.templates)) {
$scope.selectedTemplate = _.first($scope.templates);
}
}
}
]);
})();