SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/change/risk-level-directive.js

103 lines
5.4 KiB
JavaScript

"use strict";
(function () {
'use strict';
angular.module('changeModule')
.directive('riskLevel', [
function () {
return {
restrict: 'E',
templateUrl: 'views/change/risk-level.html',
scope: {
ticket: '=',
mode: '=',
metadata: '='
},
controller: ['$scope', 'events', 'ticketModel',
function ($scope, events, ticketModel) {
$scope.state = {
pendingRiskLevelChange: false
};
//todo: put mode values (manual, auto) into constants
$scope.$watch('mode', function (newMode) {
if (newMode && newMode === 'manual' && $scope.metadata.riskLevels && !$scope.ticket.riskLevel) {
$scope.riskLevelChanged(_.head($scope.metadata.riskLevels));
}
});
$scope.overrideRiskLevelEnabled = function () {
return $scope.mode && $scope.mode === 'manual';
};
$scope.riskLevelCls = function (riskLevel, reverseIndex) {
var result = '';
if ($scope.ticket.riskLevel === riskLevel || $scope.ticket.riskLevel === riskLevel.name) {
var index = $scope.metadata.riskLevels.length - reverseIndex;
$scope.ticket.titleRiskLevelCls = 'risk-level-' + index;
$scope.ticket.backgroundRiskLevelCls = 'ticket__risk-level-' + index;
result = 'active ' + $scope.ticket.backgroundRiskLevelCls;
}
return result;
};
$scope.riskLevelChanged = function (riskLevel) {
$scope.ticket.riskLevel = riskLevel;
$scope.ticket.riskIsUserSpecified = true;
setPendingChangeFlag();
};
$scope.$on(events.TOGGLE_EDIT_MODE, toggleEditMode);
$scope.$on(events.SAVE_CHANGES, save);
$scope.$on(events.DISCARD_CHANGES, cancel);
$scope.$on(events.SAVE_ALL_CHANGES_COMPLETE, function () {
});
function toggleEditMode() {
$scope.mode = 'manual';
$scope.ticket.riskLevel = $scope.ticket.riskLevel
? _.head(_.filter($scope.metadata.riskLevels, { name: $scope.ticket.riskLevel }))
: _.head($scope.metadata.riskLevels);
clearPendingChangeFlag();
$scope.ticket.riskLevelCopy = $scope.ticket.riskLevel.name;
}
function save() {
var changes = {};
$scope.$emit(events.SAVE_CHANGES_REQUEST, {}, true);
if ($scope.state.pendingRiskLevelChange
&& $scope.mode === 'manual'
&& $scope.ticket.riskLevel.name !== $scope.ticket.riskLevelCopy || ($scope.ticket.type === 'release' && $scope.mode === 'auto')) {
if ($scope.ticket.riskLevel.name) {
$scope.ticket.riskLevel = $scope.ticket.riskLevel.name;
}
changes.riskLevel = $scope.ticket.riskLevel;
if ($scope.ticket.type === 'release' && $scope.mode === 'auto') {
changes.isAutoCalcualteRisk = true;
}
ticketModel.update($scope.ticket.id, $scope.ticket.type, changes)
.then(function () {
$scope.$emit(events.SAVE_CHANGES_COMPLETE);
clearPendingChangeFlag();
}, function () {
$scope.$emit(events.SAVE_CHANGES_FAULT_CONTINUE);
});
}
else {
$scope.$emit(events.SAVE_CHANGES_COMPLETE);
cancel();
}
//$scope.$emit(events.SAVE_CHANGES_REQUEST, changes);
}
function cancel() {
if ($scope.ticket.riskLevelCopy) {
$scope.ticket.riskLevel = $scope.ticket.riskLevelCopy;
}
clearPendingChangeFlag();
}
function setPendingChangeFlag() {
$scope.state.pendingRiskLevelChange = true;
}
function clearPendingChangeFlag() {
$scope.mode = 'manual';
$scope.state.pendingRiskLevelChange = false;
}
}
]
};
}
]);
})();