239 lines
12 KiB
JavaScript
239 lines
12 KiB
JavaScript
"use strict";
|
|
(function () {
|
|
'use strict';
|
|
angular.module('createTicketModule')
|
|
.controller('CreateTaskV2Controller', ['$scope', '$modalInstance', '$modal', '$state', 'configurationModel', 'createTicketModel', 'ticketModel', 'userModel',
|
|
'i18nService', 'systemAlertService', 'screenConfigurationModel', '$q', 'metadataModel', 'ticketActionService', 'categoriesService', '$filter', 'events',
|
|
'layoutConfigurationModel', 'fieldValidationModel', 'objectValueMapperService', 'editTicketDatesService',
|
|
function ($scope, $modalInstance, $modal, $state, configurationModel, createTicketModel, ticketModel, userModel, i18nService, systemAlertService, screenConfigurationModel, $q, metadataModel, ticketActionService, categoriesService, $filter, events, layoutConfigurationModel, fieldValidationModel, objectValueMapperService, editTicketDatesService) {
|
|
var parent, fields, task = {
|
|
today: new Date(),
|
|
type: EntityVO.TYPE_TASK,
|
|
autoAssign: true,
|
|
customFields: {},
|
|
showDates: false,
|
|
scheduledStartDatePicker: { open: false },
|
|
actualStartDatePicker: { open: false },
|
|
scheduledEndDatePicker: { open: false },
|
|
actualEndDatePicker: { open: false },
|
|
categorizations: [
|
|
{
|
|
name: "operational",
|
|
tiers: {}
|
|
},
|
|
{
|
|
name: "product",
|
|
tiers: {}
|
|
}
|
|
]
|
|
}, taskMetadata = {};
|
|
function init() {
|
|
$scope.showMeridian = window.showMeridian;
|
|
$scope.state = {
|
|
showSpinner: true,
|
|
dataIsLoading: true
|
|
};
|
|
$scope.editMode = true;
|
|
$scope.isNew = true;
|
|
$scope.formContainsInvalidFields = createTicketModel.formContainsInvalidFields;
|
|
createTicketModel.currentTicket = task;
|
|
$scope.task = task;
|
|
$scope.taskMetadata = taskMetadata;
|
|
$scope.loggedInUserId = userModel.userId;
|
|
parent = ticketModel.taskParent;
|
|
if (parent) {
|
|
task.parentName = parent.type;
|
|
task.parentId = parent.id;
|
|
task.parentDisplayId = parent.displayId;
|
|
if (parent.type === EntityVO.TYPE_ACTIVITY) {
|
|
if (ticketModel.activityParent) {
|
|
task.parentReleaseDisplayId = ticketModel.activityParent.displayId;
|
|
}
|
|
else {
|
|
task.parentReleaseDisplayId = parent.parentId;
|
|
}
|
|
}
|
|
if (parent.type !== EntityVO.TYPE_PROBLEM && parent.type !== EntityVO.TYPE_KNOWNERROR) {
|
|
task.customer = parent.customer;
|
|
task.locationCompany = !_.isEmpty(parent.locationCompany) ? parent.locationCompany : parent.company.name;
|
|
}
|
|
else {
|
|
task.customer = {
|
|
company: parent.company
|
|
};
|
|
}
|
|
task.company = (parent.company ? parent.company : parent.customer.company);
|
|
if (parent.type === EntityVO.TYPE_CHANGE) {
|
|
task.company.site = parent.location ? parent.location : { siteId: "", region: "", name: "", siteGroup: "" };
|
|
if (parent.scheduledStartDate) {
|
|
task.scheduledStartDate = parent.scheduledStartDate;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
$state.go('dashboard');
|
|
}
|
|
$scope.datePickerOptions = {
|
|
startingDay: configurationModel.getWeekStartingDay(),
|
|
'show-weeks': false,
|
|
minDate: moment().year(1970).month(0).date(2),
|
|
maxDate: moment().year(2038).month(0).date(18)
|
|
};
|
|
objectValueMapperService.clearMap(task.type);
|
|
initAlertForDirtyForm();
|
|
var metadataPromise = metadataModel.getMetadataByType(EntityVO.TYPE_TASK).then(function (metadata) {
|
|
angular.extend(taskMetadata, metadata);
|
|
var status = _.head(taskMetadata.statuses);
|
|
task.status = { value: status.name };
|
|
if (!_.isEmpty(status.statusReasons) && $scope.isFieldRequired('statusReason')) {
|
|
task.status.statusReason = _.head(status.statusReasons).name;
|
|
}
|
|
//default to lowest
|
|
task.priority = _.last(taskMetadata.priorities).name;
|
|
});
|
|
var basicDataPromise = ticketModel.getDraft(EntityVO.TYPE_TASK).then(function (data) {
|
|
$scope.state.showSpinner = false;
|
|
task.id = data.id;
|
|
task.displayId = data.displayId;
|
|
task.accessMappings = data.accessMappings;
|
|
});
|
|
var screen = ScreenConfigurationVO.prototype.CREATE_TASK_SCREEN;
|
|
var layoutConfigurationPromise = layoutConfigurationModel.loadScreenLayout(screen);
|
|
var screenConfigurationPromise = screenConfigurationModel
|
|
.loadScreenConfigurationAndCustomFieldLabels(screen, EntityVO.TYPE_TASK);
|
|
var allPromisesArray = [metadataPromise, basicDataPromise, layoutConfigurationPromise, screenConfigurationPromise];
|
|
if (parent.taskPhaseId) {
|
|
task.showPhaseSelector = true;
|
|
var phasesPromise = ticketModel.getFutureTaskPhases(parent.company.name, parent.taskPhaseId);
|
|
allPromisesArray.push(phasesPromise);
|
|
}
|
|
$q.all(allPromisesArray).then(function (resp) {
|
|
task.allCategories = categoriesService.populateCategories(task.categorizations, taskMetadata);
|
|
$scope.screenLayout = resp[2];
|
|
fields = screenConfigurationModel.getEditableFieldsForScreen(screen);
|
|
$scope.customFields = angular.copy(fields);
|
|
if (resp[4]) {
|
|
task.taskPhases = resp[4];
|
|
_.each(task.taskPhases, function (item) {
|
|
if (item.guid === parent.taskPhaseId) {
|
|
task.selectedPhase = item;
|
|
}
|
|
});
|
|
}
|
|
$scope.state.dataIsLoading = false;
|
|
$scope.state.showSpinner = false;
|
|
});
|
|
$scope.clearSelectedGroup();
|
|
}
|
|
$scope.getList = function (type, term) {
|
|
return createTicketModel.getList(type, term);
|
|
};
|
|
$scope.clearSelectedGroup = function () {
|
|
task.selectedGroup = {};
|
|
$scope.clearSelectedAssignee();
|
|
task.autoAssign = true;
|
|
};
|
|
$scope.clearSelectedAssignee = function () {
|
|
task.selectedAssignee = {};
|
|
};
|
|
$scope.createTask = function () {
|
|
$scope.state.showSpinner = true;
|
|
var taskData = createTicketModel.collectTicketChanges(taskMetadata);
|
|
if (taskData.summary) {
|
|
taskData.summary = taskData.summary.replace(/\u00a0/g, ' ');
|
|
}
|
|
var isBrowseTemplate = false;
|
|
if (angular.isDefined($scope.task.selectedTemplate)) {
|
|
isBrowseTemplate = true;
|
|
}
|
|
createTicketModel.createTaskV2(taskData, $scope.task.selectedTemplate, isBrowseTemplate).then(function (response) {
|
|
$modalInstance.close(parent);
|
|
if (response && (typeof response === 'string')) {
|
|
$scope.state.showSpinner = false;
|
|
systemAlertService.error({
|
|
text: response,
|
|
clear: false
|
|
});
|
|
}
|
|
}).catch(function (error) {
|
|
$scope.state.showSpinner = false;
|
|
systemAlertService.error({
|
|
text: error.errorCode ? $filter('i18n')('error.unknown') : error.data.error,
|
|
clear: false
|
|
});
|
|
});
|
|
};
|
|
$scope.cancel = function () {
|
|
$modalInstance.dismiss();
|
|
};
|
|
$scope.isFieldRequired = function (field) {
|
|
return fieldValidationModel.isFieldRequired(task.type, task.status.value, "", field);
|
|
};
|
|
var isFormDirty = function () {
|
|
return ($scope.createTaskForm && $scope.createTaskForm.$dirty) || !_.isEmpty(task.attachments);
|
|
};
|
|
function initAlertForDirtyForm() {
|
|
$scope.$on('$stateChangeStart', function (event, toState, toParams) {
|
|
if (isFormDirty() && toState.name !== parent.type) {
|
|
event.preventDefault();
|
|
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: {
|
|
stateName: toState.name,
|
|
stateParams: toParams
|
|
}
|
|
},
|
|
{
|
|
text: i18nService.getLocalizedString('common.labels.no')
|
|
}
|
|
]
|
|
});
|
|
modalInstance.result.then(function (data) {
|
|
if (!_.isEmpty(data)) {
|
|
createTicketModel.currentTicket = task = {};
|
|
$scope.createTaskForm.$setPristine();
|
|
$scope.cancel();
|
|
$state.transitionTo(data.stateName, data.stateParams);
|
|
}
|
|
});
|
|
}
|
|
else {
|
|
$scope.cancel();
|
|
}
|
|
});
|
|
}
|
|
function handleShownAssignmentBlade($event, data) {
|
|
var isAssignToMeAction = false, originalEvent = data.originalEvent, doNotSaveSelection = !data.saveSelection;
|
|
if (data) {
|
|
var assigneeRole = 'ticketassignee';
|
|
isAssignToMeAction = !!data.assignToMe;
|
|
if (isAssignToMeAction) {
|
|
ticketActionService.assignToMe(originalEvent, assigneeRole, doNotSaveSelection, $scope.task, $scope);
|
|
}
|
|
else {
|
|
ticketActionService.assign(originalEvent, doNotSaveSelection, $scope.task, $scope, assigneeRole);
|
|
}
|
|
}
|
|
else {
|
|
$log.warn('Could not open assignment blade. Required Event data is missing. ');
|
|
return;
|
|
}
|
|
}
|
|
init();
|
|
$scope.$on(events.SHOW_ASSIGN_TICKET_BLADE, handleShownAssignmentBlade);
|
|
$scope.$on(events.CUSTOM_FIELD_VALUE_CHANGE, function () {
|
|
$scope.$broadcast(events.REFRESH_FIELD_VALUES);
|
|
});
|
|
$scope.$on(events.CHANGE_DATES_VALUE_CHANGED, function (event, data) {
|
|
if (data.type === 'scheduled' || data.type === 'actual') {
|
|
editTicketDatesService.updateDateTime($scope.createTaskForm, $scope.task, data.type);
|
|
}
|
|
});
|
|
}
|
|
]);
|
|
})();
|