"use strict"; (function () { 'use strict'; angular.module('myitsmApp') .directive('priorityEditor', ['metadataModel', 'ticketModel', 'events', 'systemAlertService', '$filter', function (metadataModel, ticketModel, events, systemAlertService, $filter) { return { restrict: 'E', replace: true, templateUrl: 'views/common/priority-editor.html', scope: { ticket: '=', updateIsHandledByParent: '@' }, link: function (scope) { scope.state = { isCalculating: false }; metadataModel.getMetadataByType(scope.ticket.type).then(function (metadata) { scope.metadata = metadata; }); scope.updatePriority = function () { scope.state.isCalculating = true; if (scope.ticket.type === EntityVO.TYPE_CHANGE) { ticketModel.getChangePriority(scope.ticket.company.name, scope.updatedInfo.impact.name, scope.updatedInfo.urgency.name).then(function (data) { scope.updatedInfo.priority = _.find(scope.metadata.priorities, { name: data }); scope.state.isCalculating = false; showPriorityAlert(scope.updatedInfo.priority); }); } else { ticketModel.getPriority(scope.ticket.company.name, scope.updatedInfo.impact.name, scope.updatedInfo.urgency.name, scope.ticket.type).then(function (data) { scope.updatedInfo.priority = _.find(scope.metadata.priorities, { name: data }); scope.state.isCalculating = false; showPriorityAlert(scope.updatedInfo.priority); }); } }; function showPriorityAlert(priority) { if (!priority) { systemAlertService.error({ text: $filter('i18n')('create.change.wizard.basicDetails.priority.warning'), hide: 10000 }); } } function toggleEditMode() { scope.editMode = true; scope.updatedInfo = { priority: _.find(scope.metadata.priorities, function (obj) { return obj.name === scope.ticket.priority; }) || { name: scope.ticket.priority }, impact: _.find(scope.metadata.impacts, function (obj) { return obj.name === scope.ticket.impact; }), urgency: _.find(scope.metadata.urgencies, function (obj) { return obj.name === scope.ticket.urgency; }) }; } function handleSaveComplete(event, eventData) { if (!_.isEmpty(eventData)) { scope.ticket.impact = eventData.impact; scope.ticket.urgency = eventData.urgency; scope.ticket.priority = eventData.priority; } close(); } function close() { scope.state.isCalculating = false; scope.editMode = false; } function handleSaveChanges() { if (scope.updateIsHandledByParent) { var changes = collectChanges(); scope.$emit(events.SAVE_CHANGES_REQUEST, changes); } } function collectChanges() { var changes = {}; if (scope.ticket.impact !== scope.updatedInfo.impact.name) { changes.impact = scope.updatedInfo.impact.name; } if (scope.ticket.urgency !== scope.updatedInfo.urgency.name) { changes.urgency = scope.updatedInfo.urgency.name; } if (scope.ticket.priority !== scope.updatedInfo.priority.name) { changes.priority = scope.updatedInfo.priority.name; } return changes; } scope.$on(events.SAVE_CHANGES, handleSaveChanges); scope.$on(events.TOGGLE_EDIT_MODE, toggleEditMode); scope.$on(events.SAVE_ALL_CHANGES_COMPLETE, handleSaveComplete); scope.$on(events.SAVE_CHANGES_COMPLETE, close); scope.$on(events.DISCARD_CHANGES, close); } }; } ]); })();