102 lines
5.2 KiB
JavaScript
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);
|
|
}
|
|
};
|
|
}
|
|
]);
|
|
})();
|