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