214 lines
9.9 KiB
JavaScript
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);
|
|
}
|
|
}
|
|
}
|
|
]);
|
|
})();
|