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