"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', function ($scope, $modal, $state, $filter, $log, createTicketModel, screenConfigurationModel, ticketModel, i18nService, systemAlertService, categoriesService, $q, metadataModel, ticketActionService, events, fieldValidationModel, userModel, permissionModel, roles, layoutConfigurationModel, objectValueMapperService) { 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 = _.first(workorderMetadata.types).name; var status = _.first(workorderMetadata.statuses); workorder.status = { value: status.name }; if (!_.isEmpty(status.statusReasons) && $scope.isFieldRequired('statusReason')) { workorder.status.statusReason = _.first(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); }); } $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 || !_.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) : ''; } init(); $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); }); } ]); })();