"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(); }]); })();