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

214 lines
9.9 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 = {}, 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;
searchTemplate();
});
}
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;
});
}
}
$scope.tier = {};
function getParams(tier, option) {
var params = {
incidentTemplateCompanyName: company.name || company,
searchText: $scope.template.searchText
};
if (tier === 0) {
$scope.tier.tier1 = option;
$scope.tier.tier2 = '';
$scope.tier.tier3 = '';
}
params.incidentTemplateCategoryTier1 = $scope.tier.tier1;
if (tier === 1) {
$scope.tier.tier2 = option;
$scope.tier.tier3 = '';
params.incidentTemplateCategoryTier2 = $scope.tier.tier2;
}
if (tier === 2) {
$scope.tier.tier3 = option;
params.incidentTemplateCategoryTier2 = $scope.tier.tier2;
params.incidentTemplateCategoryTier3 = $scope.tier.tier3;
}
return params;
}
function updateTiers(tier, option) {
$scope.selectedTier[tier] = option;
var params = getParams(tier, option);
var nextTier = tier + 1;
$scope.selectedTier[nextTier] = defaultTier;
$scope.tierOptions[nextTier] = '';
filterCriteria = {};
$scope.selectedTier[nextTier + 1] = defaultTier;
$scope.tierOptions[nextTier + 1] = '';
$scope.state.dataIsLoading = true;
ticketTemplateModel.getIncidentTemplateListByCategory(params, metadata)
.then(function () {
allTemplates = ticketTemplateModel.incidentTemplateList;
refreshFilter();
})
.finally(function () {
$scope.state.dataIsLoading = false;
});
$scope.state.dataIsLoading = true;
if (tier < 2) {
ticketTemplateModel.getIncidentTemplateTierOptions(nextTier)
.then(function (data) {
$scope.tierOptions[nextTier] = data;
})
.finally(function () {
$scope.state.dataIsLoading = false;
});
}
}
function selectTemplate(selected) {
$scope.selectedTemplate = selected;
}
function getParamsSearch(tier) {
var params = {
incidentTemplateCompanyName: company.name || company,
searchText: $scope.template.searchText
};
if (tier.tier1) {
params.incidentTemplateCategoryTier1 = tier.tier1;
}
if (tier.tier2) {
params.incidentTemplateCategoryTier2 = tier.tier2;
}
if (tier.tier3) {
params.incidentTemplateCategoryTier3 = tier.tier3;
}
return params;
}
function searchTemplate() {
$scope.state.searchingTemplates = true;
var getTemplatesPromise, params = {};
if (ticketType === EntityVO.TYPE_INCIDENT) {
var params = getParamsSearch($scope.tier);
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 = _.head($scope.templates);
}
}
}
]);
})();