SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/create/create-task-v2-controller.js

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