145 lines
8.1 KiB
JavaScript
145 lines
8.1 KiB
JavaScript
"use strict";
|
|
(function () {
|
|
'use strict';
|
|
angular.module('changeModule')
|
|
.directive('riskQuestions', [
|
|
function () {
|
|
return {
|
|
restrict: 'E',
|
|
templateUrl: 'views/change/risk-questions.html',
|
|
scope: {
|
|
ticket: '=',
|
|
mode: '=',
|
|
pendingReload: '=',
|
|
reloadIf: '=',
|
|
form: '=',
|
|
editMode: '='
|
|
},
|
|
controller: ['$scope', 'createTicketModel', 'events', '$state', 'systemAlertService',
|
|
function ($scope, createTicketModel, events, $state, systemAlertService) {
|
|
$scope.responsesCopy = $scope.ticket.questionResponses;
|
|
$scope.state = {};
|
|
$scope.$watch('mode', function (newMode, oldMode) {
|
|
if (newMode && newMode === 'auto' && oldMode === 'manual') {
|
|
$scope.ticket.riskIsUserSpecified = false;
|
|
_.forEach($scope.ticket.questionDefinitions, function (question) {
|
|
question.selectedOption = $scope.questionResponsesCopy && _.cloneDeep($scope.questionResponsesCopy[question.id]);
|
|
if (question.selectedOption) {
|
|
question.selectedOption.parentQuestion = null;
|
|
}
|
|
});
|
|
$scope.ticket.questionResponses = $scope.questionResponsesCopy;
|
|
setPendingChangeFlag();
|
|
}
|
|
});
|
|
$scope.riskQuestionsEnabled = function () {
|
|
return $scope.mode && $scope.mode === 'auto';
|
|
};
|
|
$scope.questionOptionSelected = function (question, option) {
|
|
return $scope.questionResponsesCopy && $scope.questionResponsesCopy[question.id] === option;
|
|
};
|
|
$scope.selectQuestionOption = function (question, option) {
|
|
option.parentQuestion = _.cloneDeep(question);
|
|
$scope.questionResponsesCopy = $scope.questionResponsesCopy || {};
|
|
var selectedOption = $scope.questionResponsesCopy[question.id]
|
|
? $scope.questionResponsesCopy[question.id] === option ? null : option
|
|
: option;
|
|
$scope.questionResponsesCopy[question.id] = selectedOption;
|
|
//cloneDeep and null setting done for avoiding cyclical reference
|
|
question.selectedOption = _.cloneDeep(selectedOption);
|
|
question.selectedOption.parentQuestion = null;
|
|
$scope.ticket.questionResponses = $scope.questionResponsesCopy;
|
|
setPendingChangeFlag();
|
|
};
|
|
$scope.$watch('reloadIf', function () {
|
|
if ($scope.reloadIf) {
|
|
$scope.loadRiskQuestions();
|
|
}
|
|
});
|
|
$scope.loadRiskQuestions = function () {
|
|
if ($scope.ticket.company && $scope.ticket.categorizations) {
|
|
$scope.ticket.questionDefinitions = null;
|
|
$scope.ticket.questionResponses = null;
|
|
$scope.state.questionsLoading = true;
|
|
createTicketModel.getList(EntityVO.TYPE_RISKQUESTION, {
|
|
companies: [$scope.ticket.company],
|
|
categorizations: $scope.ticket.categorizations
|
|
}).then(function (questions) {
|
|
$scope.reloadIf = false;
|
|
$scope.state.questionsLoading = false;
|
|
$scope.ticket.questionDefinitions = questions;
|
|
if ($scope.mode === 'auto' && questions.length === 0) {
|
|
$scope.mode = '';
|
|
}
|
|
if ($scope.editMode) {
|
|
normalizeResponses();
|
|
}
|
|
});
|
|
}
|
|
};
|
|
function normalizeResponses() {
|
|
if ($scope.ticket.questionResponses) {
|
|
$scope.responsesCopy = $scope.ticket.questionResponses;
|
|
}
|
|
$scope.questionResponsesCopy = null;
|
|
angular.forEach($scope.responsesCopy, function (response) {
|
|
var question = _.head(_.filter($scope.ticket.questionDefinitions, { id: response.questionId }));
|
|
if (question) {
|
|
var option = _.head(_.filter(question.options, { id: response.optionId }));
|
|
if (option) {
|
|
$scope.selectQuestionOption(question, option);
|
|
}
|
|
question.responseId = response.id;
|
|
}
|
|
clearPendingChangeFlag();
|
|
});
|
|
}
|
|
$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.ticket.questionDefinitions = null;
|
|
$scope.reloadIf = true;
|
|
}
|
|
function save() {
|
|
$scope.$emit(events.SAVE_CHANGES_REQUEST, {}, true);
|
|
$scope.ticket.questionResponses = $scope.questionResponsesCopy;
|
|
if ($scope.state.pendingRiskQuestionsChange && $scope.mode === 'auto') {
|
|
createTicketModel.saveRiskResponse($scope.ticket)
|
|
.then(function () {
|
|
$scope.$emit(events.SAVE_CHANGES_COMPLETE);
|
|
clearPendingChangeFlag();
|
|
$state.go($state.current, {}, { reload: true });
|
|
}, function (error) {
|
|
systemAlertService.error({
|
|
text: error.data && error.data.error,
|
|
clear: false
|
|
});
|
|
$scope.mode = 'auto';
|
|
$scope.$emit(events.SAVE_CHANGES_FAULT_CONTINUE);
|
|
});
|
|
}
|
|
else {
|
|
$scope.$emit(events.SAVE_CHANGES_COMPLETE);
|
|
cancel();
|
|
}
|
|
}
|
|
function cancel() {
|
|
$scope.ticket.questionResponses = $scope.responsesCopy;
|
|
clearPendingChangeFlag();
|
|
}
|
|
function setPendingChangeFlag() {
|
|
$scope.state.pendingRiskQuestionsChange = true;
|
|
}
|
|
function clearPendingChangeFlag() {
|
|
$scope.state.pendingRiskQuestionsChange = false;
|
|
}
|
|
}
|
|
]
|
|
};
|
|
}
|
|
]);
|
|
})();
|