"use strict"; (function () { 'use strict'; angular.module('ticketModule') .controller('PreviewTicketController', ['$scope', '$q', 'ticketModel', 'categoriesService', 'ticketActionService', 'followService', 'screenConfigurationModel', 'events', 'systemAlertService', 'srdModel', 'metadataModel', 'layoutConfigurationModel', '$filter', function ($scope, $q, ticketModel, categoriesService, ticketActionService, followService, screenConfigurationModel, events, systemAlertService, srdModel, metadataModel, layoutConfigurationModel, $filter) { $scope.init = function (id, type) { $scope.itemId = id; var state = { dataIsLoading: true }, screenName = screenConfigurationModel.getScreenNameByTicketType(type), ticketPromise = ticketModel.getTicketForPreview(id, type), metaDataPromise = EntityVO.hasMetadata(type) ? metadataModel.getMetadataByType(type) : $q.when({}), layoutConfigurationPromise = layoutConfigurationModel.loadScreenLayout(screenName), screenConfigurationPromise = screenConfigurationModel.loadScreenConfigurationAndCustomFieldLabels(screenName, type), promises = [ticketPromise, metaDataPromise, layoutConfigurationPromise, screenConfigurationPromise]; // Todo: outage preview needs to be refactor, it is the only one that still // use isFullVersion attribute in directive if (type !== EntityVO.TYPE_OUTAGE) { $scope.isFullVersion = false; } $scope.isContactCollapsed = true; $q.all(promises).then(function (response) { var ticket = response[0], metadata = response[1]; $scope.metadata = metadata; $scope.screenLayout = response[2]; var allEntityCategories = ticket.categorizations; if (!!ticket.resCategorizations && ticket.isClosed()) { allEntityCategories = ticket.categorizations.concat(ticket.resCategorizations); } else if (ticket.type === EntityVO.TYPE_INCIDENT) { ticket.categorizations.push(_.find(ticket.resCategorizations, { name: 'resolutionProduct' })); ticket.categorizations.push(_.find(ticket.resCategorizations, { name: 'resolution' })); allEntityCategories = ticket.categorizations; } ticket.allCategories = categoriesService.populateCategories(allEntityCategories, metadata); ticket.noCategories = (_.filter(ticket.allCategories, 'valueToShow')).length; //todo: Viktor: do we rally have items with empty priority? if (!ticket.priority && !_.isEmpty(metadata.priorities)) { ticket.priority = _.last(metadata.priorities).name; } if (!$scope.isFullVersion) { ticket.accessMappings.detailsEditAllowed = false; ticket.accessMappings.statusEditAllowed = false; ticket.accessMappings.riskEditAllowed = false; ticket.accessMappings.datesEditAllowed = false; } $scope.basicData = ticket; $scope.basicData.isFullVersion = $scope.isFullVersion; if ($scope.basicData.brokerVendorName) { ticketModel.getVendorInfo($scope.basicData.displayId, $scope.basicData.type).then(function (response) { $scope.basicData.vendorInfo = response; }); } if ($scope.basicData.type === EntityVO.TYPE_SERVICEREQUEST) { if ($scope.basicData.expectedDate) { $scope.basicData.expectedDate = getTimestamp($scope.basicData.expectedDate, $scope.basicData.expectedTime); } if ($scope.basicData.requiredDate) { $scope.basicData.requiredDate = getTimestamp($scope.basicData.requiredDate, $scope.basicData.requiredTime); } // Display Date and Time based on Time Zone at client side. _.forEach($scope.basicData.questionResponses, function (questionResponse) { if (questionResponse.value && questionResponse.format === 'DATE_TIME') { questionResponse.displayValue = $filter('humanizedAbsoluteDateFormat')(questionResponse.value * 1000); } else if (questionResponse.value && questionResponse.format === 'DATE_ONLY') { questionResponse.displayValue = $filter('dateFormat')(questionResponse.value * 1000); } else if (questionResponse.value && questionResponse.format === 'TIME_ONLY') { questionResponse.displayValue = moment.unix(questionResponse.value).format('LT'); } }); } if ($scope.basicData.type === EntityVO.TYPE_SBEREQUEST) { // Display Date and Time based on Time Zone at client side. _.forEach($scope.basicData.answers, function (questionResponse) { if (questionResponse.value && questionResponse.format === 'DATE_TIME_FIELD') { questionResponse.displayValue = $filter('humanizedAbsoluteDateFormat')(questionResponse.value * 1000); } else if (questionResponse.value && questionResponse.format === 'DATE_FIELD') { questionResponse.displayValue = $filter('dateFormat')(questionResponse.value * 1000); } else if (questionResponse.value && questionResponse.format === 'TIME_FIELD') { questionResponse.displayValue = moment(questionResponse.displayValue, 'hh:mm:ss').format('LT'); } }); } }).finally(function () { state.dataIsLoading = false; }); /** * Open classic view for preview ticket */ $scope.openCrossLaunchURL = function (url) { window.open(url); }; function getTimestamp(date, time) { time = time ? moment(time) : moment(date); return moment(date).set('hours', time.get('hours')).set('minutes', time.get('minutes')).format('X') * 1000; } $scope.state = state; }; }]); })();