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