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