SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/common/priority-editor-directive.js

102 lines
5.2 KiB
JavaScript

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