OWL ITS + 탐지시스템(인터넷 진흥원)
src/main/webapp/scripts/app/issue/issueAdd.controller.js
@@ -9,9 +9,9 @@
    ],
    function (app, angular) {
        app.controller('issueAddController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$uibModalInstance', '$uibModal', '$injector',
            '$controller', '$tableProvider', 'SweetAlert', '$timeout', '$stateParams', '$q', 'Issue', 'User', 'AttachedFile', 'IssueType', 'HostingField', 'Priority', 'Severity', 'IssueTypeCustomField', '$filter', '$state',
            '$controller', '$tableProvider', 'SweetAlert', '$timeout', '$stateParams', '$q', 'Issue', 'User', 'AttachedFile', 'IssueType', 'Priority', 'Severity', 'IssueTypeCustomField', '$filter', '$state',
            function ($scope, $rootScope, $log, $resourceProvider, $uibModalInstance, $uibModal,  $injector, $controller, $tableProvider, SweetAlert, $timeout,
                      $stateParams, $q, Issue, User, AttachedFile, IssueType, HostingField, Priority, Severity, IssueTypeCustomField, $filter, $state) {
                      $stateParams, $q, Issue, User, AttachedFile, IssueType, Priority, Severity, IssueTypeCustomField, $filter, $state) {
                $scope.fn = {
                    cancel : cancel,    //  팝업 창 닫기
@@ -37,10 +37,11 @@
                    setIssueTypeTemplate : setIssueTypeTemplate,    //  이슈 유형 템플릿 적용하기
                    startExecute : startExecute, //  컨트롤 로딩시 처음으로 시작되는 함수
                    containsPartner : containsPartner,
                    getPartners : getPartners,
                    getPartners : getPartners
                };
                $scope.vm = {
                    partnerVos : "",
                    form : {
                        title : "",    //  제목
                        description : "",   //  내용
@@ -57,7 +58,8 @@
                        attachedFiles : [], //  섬머노트로 파일 업로드를 할 경우 서버에서 pk를 따고 issue id와 연동 작업이 필요하다.
                        startCompleteDateRange : "", //  시작일 ~ 종료일
                        detectingDateRange : "", //  탐지일
                        issueCustomFields : []  //  이슈에서 사용되는 사용자 정의 필드
                        issueCustomFields : [],  //  이슈에서 사용되는 사용자 정의 필드
                        requiredDatas : []  // 사용자 정의 필드 필수 데이터 체크
                    },
                    infiniteAdd : false,    //  연속 생성
                    projectName : "",   //  프로젝트 명 검색
@@ -119,6 +121,18 @@
                    fileTableConfigs : [],   //  파일 업로드 정보 테이블
                };
                // 연관 일감 관련
                $scope.vm.relationIssueTypes =
                    [
                        { id: 0, name: $filter("translate")("issue.relationIssueType1") },
                        { id: 1, name: $filter("translate")("issue.relationIssueType2") },
                        { id: 2, name: $filter("translate")("issue.relationIssueType3") },
                        { id: 3, name: $filter("translate")("issue.relationIssueType4") },
                        { id: 4, name: $filter("translate")("issue.relationIssueType5") },
                        { id: 5, name: $filter("translate")("issue.relationIssueType6") }
                    ];
                $scope.vm.relationIssueType = $scope.vm.relationIssueTypes[0];
                angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector}));
                function getStartProjectListCallback(result){
@@ -131,13 +145,15 @@
                //  프로젝트가 변경되면 담당자 초기화
                $scope.$watch("vm.form.projects", function (newValue, oldValue) {
                    if (angular.isDefined(newValue)) {
                        if (newValue.length < 1) {
                            $scope.vm.form.users = [];
                        } else {
                            //  이슈 유형에 연결된 사용자 정의 필드 가져오기
                            $scope.fn.getIssueTypeCustomFields();
                        }
                        //  이슈 유형에 연결된 사용자 정의 필드 가져오기
                        $scope.fn.getIssueTypeCustomFields();
                    }
                });
@@ -319,8 +335,8 @@
                function containsPartner(name) {
                    var result = false;
                    if ($scope.vm.viewer.usePartnerVo != null) {
                        $scope.vm.viewer.usePartnerVo.forEach(function (partnerVo) {
                    if ($scope.vm.partnerVos != null) {
                        $scope.vm.partnerVos.forEach(function (partnerVo) {
                            if (name === partnerVo.name) {
                                result = true;
                            }
@@ -543,6 +559,30 @@
                        startCompleteDateRange : $scope.vm.form.startCompleteDateRange,
                        detectingDateRange : $scope.vm.form.detectingDateRange,
                        requiredDatas : (function () {    //  사용자 정의 필드 필수 데이터 체크
                            var requiredDatas = [];
                            angular.forEach($scope.vm.form.requiredDatas, function (issueCustomField) {
                                var useValues = [];
                                if (angular.isArray(issueCustomField.useValues)) {
                                    angular.forEach(issueCustomField.useValues, function (useValue) {
                                        useValues.push(useValue.value);
                                    });
                                }
                                else {
                                    useValues.push(issueCustomField.useValues);
                                }
                                //  useValues 를 배열로 변환한다.
                                var temp = angular.copy(issueCustomField);
                                temp.useValues = useValues;
                                issueCustomFields.push(temp);
                            });
                            return issueCustomFields;
                        })(),
                        issueCustomFields : (function () {    //  이슈에서 사용되는 사용자 정의 필드
                            var issueCustomFields = [];
@@ -577,27 +617,27 @@
                        },
                        fileFormDataName : "file"
                    }).then(function (result) {
                            if (result.data.message.status === "success") {
                                //  연속 등록 체크시 이동하지 않음.
                                if ($scope.vm.infiniteAdd) {
                                    $scope.fn.infiniteAddForm();
                                }
                                else {
                                    $scope.fn.cancel();
                                    if ($state.current.name !== "issues.list" || $state.current.name === "issues.list") {
                                        $state.go("issues.list");
                                    }
                                }
                                $rootScope.$broadcast("getIssueList", {});
                        if (result.data.message.status === "success") {
                            //  연속 등록 체크시 이동하지 않음.
                            if ($scope.vm.infiniteAdd) {
                                $scope.fn.infiniteAddForm();
                            }
                            else {
                                SweetAlert.error($filter("translate")("issue.failedIssueRegistration"), result.data.message.message); // 이슈 등록 실패
                                $scope.fn.cancel();
                                if ($state.current.name !== "issues.list" || $state.current.name === "issues.list") {
                                    $state.go("issues.list");
                                }
                            }
                            $rootScope.spinner = false;
                        });
                            $rootScope.$broadcast("getIssueList", {});
                        }
                        else {
                            SweetAlert.error($filter("translate")("issue.failedIssueRegistration"), result.data.message.message); // 이슈 등록 실패
                        }
                        $rootScope.spinner = false;
                    });
                }
                //  팝업 창 닫기
@@ -648,22 +688,6 @@
                    return deferred.promise;
                }
                // 업체/ISP/호스팅 이름이 포함 여부 확인
                function containsPartner(name) {
                    var result = false;
                    if ($scope.vm.partnerVos != null) {
                        $scope.vm.partnerVos.forEach(function (partnerVo) {
                            if (name === partnerVo.name) {
                                result = true;
                            }
                        });
                    }
                    return result;
                }
                //  중요도 목록
                function getSeverities() {
                    var deferred = $q.defer();
@@ -687,6 +711,7 @@
                //  이슈 유형에 연결된 사용자 정의 필드
                function getIssueTypeCustomFields() {
                    $scope.vm.form.issueCustomFields = [];
                    $scope.vm.form.requiredDatas = [];
                    //  이슈 타입 아이디나 프로젝트 아이디가 없으면 통신을 하지 않는다.
                    if (!$rootScope.isDefined($scope.vm.form.issueTypeId) || $scope.vm.form.projects.length < 1) {
                        return;
@@ -701,9 +726,17 @@
                        if (result.data.message.status === "success") {
                            $scope.vm.form.issueCustomFields = [];
                            $scope.vm.form.requiredDatas = [];
                            angular.forEach(result.data.data, function (issueTypeCustomField) {
                                switch (issueTypeCustomField.customFieldVo.customFieldType) {
                                    case "INPUT" :
                                    case "NUMBER" :
                                    case "DATETIME" :
                                    case "IP_ADDRESS" :
                                    case "EMAIL" :
                                    case "SITE" :
                                    case "TEL" :
                                        issueTypeCustomField.useValues = issueTypeCustomField.customFieldVo.defaultValue;
                                        break;
                                    case "SINGLE_SELECT" :
@@ -722,8 +755,10 @@
                                        });
                                        break;
                                }
                                $scope.vm.form.issueCustomFields.push(issueTypeCustomField);
                                if(issueTypeCustomField.customFieldVo.requiredData === "Y") {
                                    $scope.vm.form.requiredDatas.push(issueTypeCustomField.customFieldVo.requiredData);
                                }
                            });
                        }
                        else {
@@ -777,12 +812,17 @@
                }
                function getPartners() {
                    HostingField.getPartnerList($resourceProvider.getContent(
                        {},
                    if($scope.vm.form.issueTypeId === ""){
                        $scope.vm.form.issueTypeId = $rootScope.issueTypeMenu.id
                    }
                    var content = {
                        issueTypeId : $scope.vm.form.issueTypeId,
                    };
                    Issue.findPartners($resourceProvider.getContent(
                        content,
                        $resourceProvider.getPageContent(0, 1))).then(function (result) {
                        if (result.data.message.status === "success") {
                            $scope.vm.partnerVos = result.data.content;
                            $scope.vm.partnerVos = result.data.data;
                        }
                    });
@@ -794,21 +834,25 @@
                    var promises = {
                        getIssueTypes : $scope.fn.getIssueTypes(),
                        getPriorities : $scope.fn.getPriorities(),
                        getSeverities : $scope.fn.getSeverities()
                        getSeverities : $scope.fn.getSeverities(),
                        getPartners : $scope.fn.getPartners()
                    };
                    $q.all(promises).then(function (results) {
                        // 현재 프로젝트 설정
                        if ($rootScope.workProject != null && $rootScope.workProject.id > -1) {
                            $scope.vm.projectName = $rootScope.workProject.name;
                            $scope.fn.projects = [];
                            $scope.fn.projects.push($rootScope.workProject);
                            $scope.fn.getProjectList($scope.vm.projectName, $scope.vm.form.projects, $scope.vm.autoCompletePage.project.page, getStartProjectListCallback);
                            $scope.vm.form.projects = [];
                            $scope.vm.form.projects.push($rootScope.workProject);
                        }
                        // 현재 이슈타입 유형 설정
                        var id = $rootScope.getCurrentIssueTypeId();
                        if (id != null) {
                            $scope.vm.form.issueTypeId = id.toString();
                        }
                        $log.debug("promises 결과 ", results);
                    });
                }
                $scope.fn.startExecute();
            }]);
    });
    });