SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/create/create-work-order-v2-contro...

165 lines
9.2 KiB
JavaScript

"use strict";
(function () {
'use strict';
angular.module('createTicketModule')
.controller('CreateWorkOrderV2Controller', ['$scope', '$modal', '$state', '$filter', '$log', 'createTicketModel', 'screenConfigurationModel', 'ticketModel', 'i18nService', 'systemAlertService', 'categoriesService', '$q', 'metadataModel', 'ticketActionService', 'events', 'fieldValidationModel', 'userModel', 'permissionModel', 'roles', 'layoutConfigurationModel', 'objectValueMapperService', '$timeout',
function ($scope, $modal, $state, $filter, $log, createTicketModel, screenConfigurationModel, ticketModel, i18nService, systemAlertService, categoriesService, $q, metadataModel, ticketActionService, events, fieldValidationModel, userModel, permissionModel, roles, layoutConfigurationModel, objectValueMapperService, $timeout) {
var workorder = {
type: EntityVO.TYPE_WORKORDER,
autoAssign: true,
customFields: {}
};
var workorderMetadata = {};
function init() {
$scope.state = {
showSpinner: true,
dataIsLoading: true
};
$scope.editMode = true;
$scope.isNew = true;
$scope.formContainsInvalidFields = createTicketModel.formContainsInvalidFields;
createTicketModel.currentTicket = workorder;
$scope.workorder = workorder;
$scope.workorderMetadata = workorderMetadata;
$scope.loggedInUserId = userModel.userId;
objectValueMapperService.clearMap(workorder.type);
initAlertForDirtyForm();
var metadataPromise = metadataModel.getMetadataByType(EntityVO.TYPE_WORKORDER).then(function (metadata) {
angular.extend(workorderMetadata, metadata);
workorder.serviceType = _.head(workorderMetadata.types).name;
var status = _.head(workorderMetadata.statuses);
workorder.status = { value: status.name };
if (!_.isEmpty(status.statusReasons) && $scope.isFieldRequired('statusReason')) {
workorder.status.statusReason = _.head(status.statusReasons).name;
}
//default to lowest
workorder.priority = _.last(workorderMetadata.priorities).name;
});
var basicDataPromise = ticketModel.getDraft(EntityVO.TYPE_WORKORDER, null, null, null, true).then(function (data) {
workorder.id = data.id;
workorder.displayId = data.displayId;
workorder.accessMappings = data.accessMappings;
workorder.categorizations = data.categorizations;
});
var screen = ScreenConfigurationVO.prototype.CREATE_WORK_ORDER_SCREEN;
var layoutConfigurationPromise = layoutConfigurationModel.loadScreenLayout(screen);
var screenConfigurationPromise = screenConfigurationModel
.loadScreenConfigurationAndCustomFieldLabels(screen, EntityVO.TYPE_WORKORDER);
$q.all([metadataPromise, basicDataPromise, layoutConfigurationPromise, screenConfigurationPromise]).then(function (responses) {
$scope.state.dataIsLoading = false;
$scope.state.showSpinner = false;
workorder.allCategories = _.cloneDeep(categoriesService.populateCategories(workorder.categorizations, workorderMetadata));
$scope.screenLayout = responses[2];
var fields = screenConfigurationModel.getEditableFieldsForScreen(screen);
$scope.customFields = angular.copy(fields);
$timeout(function () {
$scope.createWorkorderForm.$setPristine();
}, 0);
});
}
$scope.createWorkOrder = function () {
$scope.state.showSpinner = true;
var workorderData = createTicketModel.collectTicketChanges(workorderMetadata);
workorderData.summary = workorderData.summary.replace(/\u00a0/g, ' ');
createTicketModel.createWorkOrderV2(workorderData).then(function (error) {
if (error) {
$scope.state.showSpinner = false;
systemAlertService.error({
text: error,
clear: false
});
}
});
};
$scope.cancel = function () {
$state.go('dashboard');
};
$scope.isFieldRequired = function (field) {
return fieldValidationModel.isFieldRequired(workorder.type, workorder.status.value, "", field);
};
function isFormDirty() {
return ($scope.createWorkorderForm.$dirty && !$scope.createWorkorderForm.$pristine) || !_.isEmpty(workorder.attachments);
}
function initAlertForDirtyForm() {
$scope.$on('$stateChangeStart', function (event, toState, toParams) {
if (isFormDirty() && toState.name !== EntityVO.TYPE_WORKORDER) {
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 = workorder = {};
$scope.createWorkorderForm.$setPristine();
$state.transitionTo(data.stateName, data.stateParams);
}
});
}
});
}
function handleShownAssignmentBlade($event, data) {
var isAssignToMeAction = false, originalEvent = data.originalEvent, doNotSaveSelection = !data.saveSelection;
if (data) {
var assigneeRole = data.role;
if (assigneeRole === 'manager') {
assigneeRole = 'workordermanager';
}
else if (assigneeRole === 'assignee') {
assigneeRole = 'ticketassignee';
}
isAssignToMeAction = !!data.assignToMe;
if (isAssignToMeAction) {
ticketActionService.assignToMe(originalEvent, assigneeRole, doNotSaveSelection, $scope.workorder, $scope);
}
else {
ticketActionService.assign(originalEvent, doNotSaveSelection, $scope.workorder, $scope, assigneeRole);
}
}
else {
$log.warn('Could not open assignment blade. Required Event data is missing. ');
return;
}
}
function handleShowDynamicFields($event, data) {
workorder.dynamicFields = data.length ? data : '';
$scope.dynamicFields = data.length ? angular.copy(data) : '';
}
metadataModel.getMetadataByType('global').then(function (metadata) {
var isPwaEnabled = (metadata.configurationParameters['Enable-Progressive-Views'] === 'T' || metadata.configurationParameters['Enable-Progressive-Views'] === 'true');
isPwaEnabled = localStorage.getItem('overridePV') === 'T' ? false : isPwaEnabled;
if (isPwaEnabled && localStorage.getItem('midtierUrl')) {
$state.go($state.current.name + 'PV');
}
else {
init();
}
}).catch(function (error) {
if (error) {
systemAlertService.error({
text: error.data.error,
clear: false
});
}
});
$scope.$on(events.SHOW_ASSIGN_TICKET_BLADE, handleShownAssignmentBlade);
$scope.$on(events.SHOW_DYNAMIC_FIELDS_FROM_TEMPLATE, handleShowDynamicFields);
$scope.$on(events.CUSTOM_FIELD_VALUE_CHANGE, function () {
$scope.$broadcast(events.REFRESH_FIELD_VALUES);
});
}
]);
})();