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