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