SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/template/browse-task-template-contro...

258 lines
13 KiB
JavaScript

"use strict";
(function () {
'use strict';
angular.module('templateModule')
.controller('BrowseTaskTemplateController', ['$scope', '$modalInstance', 'createTicketModel', 'ticketModel', 'ticketTemplateModel', '$filter', '$state', '$stateParams', 'systemAlertService', 'i18nService', 'isFromBrowseTemplate', 'events', '$rootScope',
function ($scope, $modalInstance, createTicketModel, ticketModel, ticketTemplateModel, $filter, $state, $stateParams, systemAlertService, i18nService, isFromBrowseTemplate, events, $rootScope) {
var allTemplates, criteria, parent, defaultContext = i18nService.getLocalizedString('incident.template.none.selected'), init = function () {
$scope.enableSelectType = !isFromBrowseTemplate;
$scope.selectedTemplate = '';
$scope.phase = {};
$scope.taskTemplateRadioButtons = {
index: 0
};
$scope.state = {
dataIsLoading: true,
searchingTemplates: false
};
$scope.childState = {
dataIsLoading: false
};
ticketTemplateModel.getTaskTemplateMetadata().then(function (taskTemplateMetadata) {
$scope.types = taskTemplateMetadata;
$scope.activityTypes = $scope.types[0].activityTypes;
$scope.contextes = [defaultContext].concat($scope.types[0].contextes);
$scope.selectedType = $scope.types[0];
$scope.selectedActivityType = $scope.activityTypes[0];
$scope.selectedContext = $scope.contextes[0];
criteria = {
type: $scope.selectedType.name,
activityType: $scope.selectedActivityType.name
};
if (isFromBrowseTemplate) {
$scope.types = _.filter($scope.types, function (type) {
return type.name !== 'Task Groups';
});
}
else {
parent = ticketModel.taskParent;
createTicketModel.currentTicket = {};
var company, customer;
if (parent.type === EntityVO.TYPE_ACTIVITY) {
company = parent.company;
customer = null;
}
else {
company = parent.company ? parent.company : parent.customer.company;
customer = parent.customer;
}
if (parent.type === EntityVO.TYPE_CHANGE) {
company.site = parent.location ? parent.location : { siteId: "", region: "", name: "", siteGroup: "" };
}
createTicketModel.currentTicket = {
parentId: parent.id,
company: company,
parentName: parent.type,
parentDisplayId: parent.displayId,
customer: customer
};
if (parent.taskPhaseId) {
ticketModel.getFutureTaskPhases(parent.company.name, parent.taskPhaseId).then(function (phases) {
$scope.taskPhases = phases;
_.each($scope.taskPhases, function (item) {
if (item.guid === parent.taskPhaseId) {
$scope.phase.selectedPhase = item;
}
});
});
}
}
createTicketModel.getList('taskTemplate').then(function (taskTemplates) {
allTemplates = _.cloneDeep(taskTemplates.map(function (template) {
return new TaskTemplateVO().build(template);
}));
refreshFilter();
}).finally(function () {
$scope.state.dataIsLoading = false;
});
});
ticketModel.getDraft('task').then(function (data) {
$scope.id = data.id;
});
};
$scope.updateType = function (type) {
$scope.selectedType = type;
var foundType = _.find($scope.types, function (obj) {
return obj.name === type.name;
});
$scope.activityTypes = foundType.activityTypes;
$scope.contextes = [defaultContext].concat(foundType.contextes);
$scope.selectedActivityType = $scope.activityTypes[0];
$scope.selectedContext = $scope.contextes[0];
criteria = {
type: $scope.selectedType.name,
activityType: $scope.selectedActivityType.name
};
refreshFilter();
};
$scope.updateActivityType = function (activityType) {
$scope.selectedActivityType = activityType;
criteria.activityType = $scope.selectedActivityType.name;
refreshFilter();
};
$scope.refreshPreview = function () {
var filteredTemplates = $filter('filter')($scope.templates, { name: $scope.searchText });
$scope.taskTemplateRadioButtons.index = 0;
$scope.selectTemplate(filteredTemplates.length ? filteredTemplates[0] : '');
};
$scope.searchTemplates = function () {
if ($scope.searchText.length > 0 && $scope.searchText.length < 3) {
refreshFilter();
return;
}
var companyName;
if (parent && parent.company && parent.company.name) {
companyName = parent.company.name;
}
else {
companyName = ticketModel.taskParent.company && ticketModel.taskParent.company.name;
}
$scope.state.searchingTemplates = true;
ticketTemplateModel.getTaskTemplateList($scope.searchText, companyName)
.then(function (response) {
var tmpTemplates = response[0].items[0].objects;
allTemplates = _.cloneDeep(tmpTemplates.map(function (template) {
return new TaskTemplateVO().build(template);
}));
refreshFilter();
})
.finally(function () {
$scope.state.searchingTemplates = false;
});
};
$scope.selectTemplate = function (selected) {
processTaskGroupPreview(selected);
$scope.selectedTemplate = selected;
};
$scope.submit = function () {
if (isFromBrowseTemplate) {
/* create task from blank */
$modalInstance.close($scope.selectedTemplate);
}
else {
/* create task from template */
$scope.state.dataIsLoading = true;
var template = $scope.selectedTemplate, currentTicket = createTicketModel.currentTicket;
currentTicket.id = $scope.id;
if (template.templateObject.taskType) {
currentTicket.type = template.templateObject.taskType;
}
if (template.summary) {
currentTicket.summary = template.summary;
}
if (template.priority) {
currentTicket.priority = template.priority;
}
if (template.desc) {
currentTicket.desc = template.desc;
}
if (template.name) {
currentTicket.name = template.name;
}
if (template.categorizations) {
currentTicket.categorizations = template.categorizations;
}
if ($scope.phase.selectedPhase) {
currentTicket.phaseGuid = $scope.phase.selectedPhase.guid;
currentTicket.phaseName = $scope.phase.selectedPhase.name;
}
if (angular.isDefined(template.templateObject.supportGroup)
&& template.templateObject.supportGroup.name) {
currentTicket.supportGroup = template.templateObject.supportGroup;
currentTicket.autoAssign = false;
if (angular.isDefined(template.templateObject.assignee)
&& template.templateObject.assignee.loginId) {
currentTicket.assignee = template.templateObject.assignee;
}
}
if (ticketModel.taskParent && ticketModel.taskParent.type == EntityVO.TYPE_CHANGE && ticketModel.taskParent.scheduledStartDate) {
currentTicket.scheduledStartDate = ticketModel.taskParent.scheduledStartDate;
}
createTicketModel.createTaskV2(currentTicket, template).then(function (response) {
if (response) {
$scope.state.dataIsLoading = false;
systemAlertService.modal({
title: i18nService.getLocalizedString('common.notification.error.title'),
text: response,
buttons: [
{
text: i18nService.getLocalizedString('controls.action.ok')
}
]
});
}
else {
$modalInstance.close(parent);
}
$rootScope.$broadcast(events.RELATIONS_UPDATE_COMPLETE, true);
}).catch(function (error) {
if (error) {
systemAlertService.error({
text: error.errorCode ? $filter('i18n')('error.unknown') : error.data.error,
clear: false
});
}
});
}
};
$scope.close = function () {
var modalInstance = systemAlertService.modal({
title: i18nService.getLocalizedString('common.notification.dirty.title'),
text: i18nService.getLocalizedString('common.notification.dirty.message'),
buttons: [
{
text: i18nService.getLocalizedString('common.labels.yes'),
data: true
},
{
text: i18nService.getLocalizedString('common.labels.no'),
data: false
}
]
});
modalInstance.result.then(function (data) {
if (data) {
$modalInstance.dismiss();
}
});
};
function handleModalBackdropClick() {
$scope.close();
}
$scope.$on(events.MODAL_BACKDROP_CLICK, handleModalBackdropClick);
function processTaskGroupPreview(selected) {
if (selected.type === 'Task Groups') {
$scope.childState.dataIsLoading = true;
ticketTemplateModel.getTaskGroupPreview(selected.id).then(function (templates) {
$scope.selectedTemplates = templates.map(function (template) {
return new TaskTemplateVO().build(template);
});
}).finally(function () {
$scope.childState.dataIsLoading = false;
});
}
}
function refreshFilter() {
$scope.selectedTemplate = '';
$scope.taskTemplateRadioButtons.index = 0;
$scope.templates = $filter('filter')(allTemplates, criteria);
if (!_.isEmpty($scope.templates)) {
$scope.selectedTemplate = _.head($scope.templates);
processTaskGroupPreview($scope.selectedTemplate);
}
$scope.refreshPreview();
}
init();
}]);
})();