SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/ticket/preview-ticket-controller.js

107 lines
7.4 KiB
JavaScript

"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) {
/*Same function is called for preview and view mode in case of outage and we don't show edit and delete in preview mode
* which results in caching bad data in preview mode as it is not cloned and the same data is getting fetched for view mode*/
if (type === EntityVO.TYPE_OUTAGE) {
ticket = _.cloneDeep(ticket);
}
ticket.accessMappings.detailsEditAllowed = false;
ticket.accessMappings.statusEditAllowed = false;
ticket.accessMappings.riskEditAllowed = false;
ticket.accessMappings.datesEditAllowed = false;
ticket.accessMappings.assignmentEditAllowed = 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 = moment.utc(new Date(questionResponse.value * 1000)).format('ll');
}
else if (questionResponse.value && questionResponse.format === 'TIME_ONLY') {
questionResponse.displayValue = moment.utc(questionResponse.value * 1000).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 = moment.utc(new Date(questionResponse.value * 1000)).format('ll');
}
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;
};
}]);
})();