OWL ITS + 탐지시스템(인터넷 진흥원)
wyu
2021-11-23 e35b0c987bac49abbb77d4b31e41270cc566e54d
src/main/webapp/scripts/app/issue/issueDetail.controller.js
@@ -8,12 +8,14 @@
        'angular'
    ],
    function (app, angular) {
        app.controller('issueDetailController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$tableProvider', '$state', '$uibModal', 'SweetAlert', '$timeout', 'Issue', 'IssueComment', 'IssueRelation', 'AttachedFile', 'IssueStatus', '$filter',
            function ($scope, $rootScope, $log, $resourceProvider, $tableProvider, $state, $uibModal, SweetAlert, $timeout, Issue, IssueComment, IssueRelation, AttachedFile, IssueStatus, $filter) {
        app.controller('issueDetailController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$tableProvider', '$state', '$uibModal', 'SweetAlert', '$timeout', 'Issue', 'IssueComment', 'IssueRelation', 'AttachedFile', 'IssueStatus', 'IssueTableConfig', '$filter',
            function ($scope, $rootScope, $log, $resourceProvider, $tableProvider, $state, $uibModal, SweetAlert, $timeout, Issue, IssueComment, IssueRelation, AttachedFile, IssueStatus, IssueTableConfig, $filter) {
                //  IssueListController vm, fn 변수 상속.
                $scope.fn.getIssueDetail = getIssueDetail;  //  이슈 상세 정보 가져오기
                $scope.fn.setRelTableColumn = setRelTableColumn;
                $scope.fn.setTableColumnDown = setTableColumnDown;
                $scope.fn.addComment = addComment;  //  댓글 등록
                $scope.fn.removeComment = removeComment;    //  댓글 삭제
                $scope.fn.getCommentList = getCommentList;  //  댓글 목록 가져오기
@@ -26,6 +28,7 @@
                $scope.fn.getChangeIssueStatusList = getChangeIssueStatusList;    //  이슈의 현재 상태에서 변경 가능한 이슈 샅태 목록 가져오기
                $scope.fn.modifyIssueStatus = modifyIssueStatus;    //  이슈 상태 변경
                $scope.fn.modifyIssueUser = modifyIssueUser;    //  이슈 담당자 변경
                $scope.fn.modifyIssueDepartment = modifyIssueDepartment;    //  이슈 담당부서 변경
                $scope.fn.initReload = initReload;  //  초기화 해야할 할목을 지정하여 다른 이슈를 클릭할 때 초기화해준다.
                $scope.fn.sendMail = sendMail;  //  특정 사용자에게 이슈 정보를 메일로 발송
                $scope.fn.versionView = versionView;    //  버전 정보를 표시한다.
@@ -33,7 +36,9 @@
                $scope.fn.getIssueListCallBack = getIssueListCallBack;
                $scope.fn.addRelationIssue = addRelationIssue;      // 연관 이슈 추가
                $scope.fn.addDownIssue = addDownIssue;      // 하위 이슈 추가
                $scope.fn.addRelationIssueTableConfig = addRelationIssueTableConfig;      // 연관 이슈 목록 테이블 설정
                $scope.fn.addDownIssueTableConfig = addDownIssueTableConfig;      // 하위 이슈 목록 테이블 설정
                $scope.fn.getRelTableConfigs = getRelTableConfigs;
                //  이슈 목록 컨트롤러 vm, fn 상속 중
                $scope.vm.viewer = {};
@@ -76,6 +81,7 @@
                };
                $scope.vm.issueName = "";       // 선택된 연관 일감 이름
                $scope.vm.issueId = "";       //
                $scope.vm.autoCompletePage = {
                    issue : {
                        page : 0,
@@ -194,6 +200,105 @@
                    $scope.vm.autoCompletePage.issue.totalPage = result.data.page.totalPage;
                }
                //  테이블의 연관 이슈 컬럼을 만들어준다.
                function setRelTableColumn(issueTableConfig) {
                    //  연관 이슈  컬럼
                    switch(issueTableConfig.key) {
                        case "RELATION_ISSUE_TYPE" :
                            $scope.vm.relTableConfigs.push($tableProvider.config()
                                .setHName("issue.relationIssueType")
                                .setDType("renderer")
                                .setHWidth("width-30 bold")
                                .setHSort(false)
                                .setDRenderer("ISSUE_RELATION_TYPE"))
                            break;
                        case "RELATION_ISSUE_TITLE" :
                            $scope.vm.relTableConfigs.push($tableProvider.config()
                                .setHName("issue.relationIssueTitle")
                                .setDType("renderer")
                                .setHWidth("width-60 bold")
                                .setHSort(false)
                                .setDRenderer("ISSUE_RELATION_MOVE"))
                            break;
                        case "PRIORITY" :   //  우선순위
                            $scope.vm.relTableConfigs.push($tableProvider.config()
                                .setHName("common.priority")
                                .setDName("priorityName")
                                .setDType("renderer")
                                .setHWidth("bold " + issueTableConfig.width)
                                .setDAlign("text-center")
                                .setDRenderer("COMMON_PRIORITY"));
                            break;
                        case "SEVERITY" :   //  중요도
                            $scope.vm.relTableConfigs.push($tableProvider.config()
                                .setHName("common.importance")
                                .setDName("severityName")
                                .setDType("renderer")
                                .setHWidth("bold " + issueTableConfig.width)
                                .setDAlign("text-center")
                                .setDRenderer("COMMON_SEVERITY"));
                            break;
                        case "ISSUE_TYPE" : //  이슈 타입
                            $scope.vm.relTableConfigs.push($tableProvider.config()
                                .setHName("issue.issueType")
                                .setHWidth("bold " + issueTableConfig.width)
                                .setDAlign("text-center")
                                .setDName("issueTypeName"));
                            break;
                        case "ASSIGNEE_TEAM" :   //  담당부서
                            $scope.vm.relTableConfigs.push($tableProvider.config()
                                .setHName("common.assigneeTeam")
                                .setDType("renderer")
                                .setHWidth("bold " + issueTableConfig.width)
                                .setDAlign("text-center")
                                .setDRenderer("ISSUE_DEPARTMENT"));
                            break;
                        case "REGISTER" :   //  등록자
                            $scope.vm.relTableConfigs.push($tableProvider.config()
                                .setHName("common.register")
                                .setDType("renderer")
                                .setHWidth("bold " + issueTableConfig.width)
                                .setDAlign("text-center")
                                .setDRenderer("REGISTER"));
                            break;
                        case "PERIOD" : //  기간
                            $scope.vm.relTableConfigs.push($tableProvider.config()
                                .setHName("common.period")
                                .setDType("renderer")
                                .setHWidth("bold " + issueTableConfig.width)
                                .setDAlign("text-center")
                                .setDRenderer("ISSUE_DUE_DATE"));
                            break;
                        case "MODIFY_DATE" : //  최근 변경일
                            $scope.vm.relTableConfigs.push($tableProvider.config()
                                .setHName("common.lastChangeDate")
                                .setHWidth("bold " + issueTableConfig.width)
                                .setDAlign("text-center")
                                .setDName("modifyDate"));
                            break;
                    }
                    //  사용자 정의 필드 컬럼
                    if (issueTableConfig.key.indexOf("CUSTOM_FIELD_") !== -1) {
                        //  만약 이슈 테이블 컬럼명이 표시되지 않으면 이쪽이 문제
                        for (var count in $scope.vm.customFields) {
                            var customField = $scope.vm.customFields[count];
                            if (customField.id === Number(issueTableConfig.key.substring(13))) {
                                $scope.vm.relTableConfigs.push($tableProvider.config()
                                    .setHName(customField.name)
                                    .setDType("renderer")
                                    .setHWidth("bold " + issueTableConfig.width)
                                    .setDAlign("text-center")
                                    .setColumnHint(customField)
                                    .setDRenderer("ISSUE_CUSTOM_FIELD_VALUE_VIEW"));
                                break;
                            }
                        }
                    }
                }
                //  하위 이슈 테이블 설정
                function makeTableConfigsDown() {
                    $scope.vm.downTableConfigs = [];
@@ -210,6 +315,97 @@
                        .setDRenderer("ISSUE_DOWN_DELETE")
                        .setHSort(false)
                        .setDAlign("text-center"))
                    angular.forEach($scope.vm.relTableConfigs, function (issueTableConfig) {
                        //  표시 대상인 컬럼만 화면에 그려준다.
                        if (issueTableConfig.display) {
                            //  테이블의 컬럼을 만들어준다.
                            $scope.fn.setTableColumnDown(issueTableConfig);
                        }
                    });
                }
                //  테이블의 컬럼을 만들어준다.
                function setTableColumnDown(issueTableConfig) {
                    if (issueTableConfig == null) return;
                    //  일반 컬럼
                    switch(issueTableConfig.key) {
                        case "PRIORITY" :   //  우선순위
                            $scope.vm.tableConfigs.push($tableProvider.config()
                                .setHName("common.priority")
                                .setDName("priorityName")
                                .setDType("renderer")
                                .setHWidth("bold " + issueTableConfig.width)
                                .setDAlign("text-center")
                                .setDRenderer("COMMON_PRIORITY"));
                            break;
                        case "SEVERITY" :   //  중요도
                            $scope.vm.tableConfigs.push($tableProvider.config()
                                .setHName("common.importance")
                                .setDName("severityName")
                                .setDType("renderer")
                                .setHWidth("bold " + issueTableConfig.width)
                                .setDAlign("text-center")
                                .setDRenderer("COMMON_SEVERITY"));
                            break;
                        case "ISSUE_TYPE" : //  이슈 타입
                            $scope.vm.tableConfigs.push($tableProvider.config()
                                .setHName("issue.issueType")
                                .setHWidth("bold " + issueTableConfig.width)
                                .setDAlign("text-center")
                                .setDName("issueTypeName"));
                            break;
                        case "ASSIGNEE_TEAM" :   //  담당부서
                            $scope.vm.tableConfigs.push($tableProvider.config()
                                .setHName("common.assigneeTeam")
                                .setDType("renderer")
                                .setHWidth("bold " + issueTableConfig.width)
                                .setDAlign("text-center")
                                .setDRenderer("ISSUE_DEPARTMENT"));
                            break;
                        case "REGISTER" :   //  등록자
                            $scope.vm.tableConfigs.push($tableProvider.config()
                                .setHName("common.register")
                                .setDType("renderer")
                                .setHWidth("bold " + issueTableConfig.width)
                                .setDAlign("text-center")
                                .setDRenderer("REGISTER"));
                            break;
                        case "PERIOD" : //  기간
                            $scope.vm.tableConfigs.push($tableProvider.config()
                                .setHName("common.period")
                                .setDType("renderer")
                                .setHWidth("bold " + issueTableConfig.width)
                                .setDAlign("text-center")
                                .setDRenderer("ISSUE_DUE_DATE"));
                            break;
                        case "MODIFY_DATE" : //  최근 변경일
                            $scope.vm.tableConfigs.push($tableProvider.config()
                                .setHName("common.lastChangeDate")
                                .setHWidth("bold " + issueTableConfig.width)
                                .setDAlign("text-center")
                                .setDName("modifyDate"));
                            break;
                    }
                    //  사용자 정의 필드 컬럼
                    if (issueTableConfig.key.indexOf("CUSTOM_FIELD_") === -1) {
                        //  만약 이슈 테이블 컬럼명이 표시되지 않으면 이쪽이 문제
                        for (var count in $scope.vm.customFields) {
                            var customField = $scope.vm.customFields[count];
                            if (customField.id === Number(issueTableConfig.key.substring(13))) {
                                $scope.vm.tableConfigs.push($tableProvider.config()
                                    .setHName(customField.name)
                                    .setDType("renderer")
                                    .setHWidth("bold " + issueTableConfig.width)
                                    .setDAlign("text-center")
                                    .setColumnHint(customField)
                                    .setDRenderer("ISSUE_CUSTOM_FIELD_VALUE_VIEW"));
                                break;
                            }
                        }
                    }
                }
                //  연관 이슈 테이블 설정
@@ -227,33 +423,61 @@
                        .setHWidth("width-60 bold")
                        .setHSort(false)
                        .setDRenderer("ISSUE_RELATION_MOVE"))
                    $scope.vm.relTableConfigs.push($tableProvider.config()
                        .setHName("issue.relationIssueDelete")
                        .setDType("renderer")
                        .setHWidth("width-10 bold")
                        .setDRenderer("ISSUE_RELATION_DELETE")
                        .setHSort(false)
                        .setDAlign("text-center"))
                    angular.forEach($scope.vm.issueTableConfigs, function (issueTableConfig) {
                        //  표시 대상인 컬럼만 화면에 그려준다.
                        if (issueTableConfig.display) {
                            //  테이블의 컬럼을 만들어준다.
                            $scope.fn.setRelTableColumn(issueTableConfig);
                        }
                    });
                }
                // 연관 일감 목록 가져오기
                // function getRelationIssueList() {
                //     var contents = {
                //         issueId : $rootScope.currentDetailIssueId,
                //     };
                //
                //     IssueRelation.find($resourceProvider.getContent(
                //         contents,
                //         $resourceProvider.getPageContent(0, 10))).then(function (result) {
                //
                //         if (result.data.message.status === "success") {
                //             $scope.vm.relResponseData = result.data;
                //         }
                //         else {
                //             SweetAlert.error($filter("translate")("issue.failedToIssueAddIssueRelation"), result.data.message.message); // "연관일감 생성 실패"
                //         }
                //     });
                // }
                function getRelTableConfigs() {
                    var content = {
                        issueId : $scope.vm.viewer.id
                    };
                    IssueTableConfig.relationDetail($resourceProvider.getContent(
                        content,
                        $resourceProvider.getPageContent(0, 0))).then(function (result) {
                        if (result.data.message.status === "success") {
                            var issueTableConfigs = result.data.data;
                            //  연관 슈 목록 테이블 설정 값을 가져와서 적용한다.
                            if ($rootScope.isDefined(issueTableConfigs)) {
                                //  이슈 테이블 설정 정보를 저장 한다.
                                $scope.vm.issueRelTableConfigs = [];
                                $scope.vm.issueRelTableConfigs = JSON.parse(issueTableConfigs);
                                $scope.vm.issueRelTableConfigs.sort(function (a, b) {
                                    return a.position < b.position ? -1 : a.position > b.position ? 1 : 0;
                                });
                                angular.forEach($scope.vm.issueRelTableConfigs, function (issueTableConfig) {
                                    //  표시 대상인 컬럼만 화면에 그려준다.
                                    if (issueTableConfig.display) {
                                        //  테이블의 컬럼을 만들어준다.
                                        $scope.fn.setRelTableColumn(issueTableConfig);
                                    }
                                });
                            } else {
                               makeTableConfigs();
                            }
                        }
                        else {
                            SweetAlert.swal($filter("translate")("issue.errorRemovableIssueStatusList"), result.data.message.message, "error"); // "이동 가능한 이슈 상태 목록 조회 오류"
                        }
                    });
                }
                // 하위 이슈 추가
                function addDownIssue() {
@@ -264,6 +488,7 @@
                    }
                    var contents = {
                        issueId : $rootScope.currentDetailIssueId,
                        id : $scope.vm.form.issuesDown[0].id,
                        parentIssueId : $rootScope.currentDetailIssueId
                    };
@@ -363,6 +588,48 @@
                    });
                }
                //  담당부서 변경
                function modifyIssueDepartment() {
                    $uibModal.open({
                        templateUrl : 'views/issue/issueModifyDepartment.html',
                        size : "md",
                        controller : 'issueModifyDepartmentController',
                        backdrop : 'static',
                        resolve : {
                            parameter : function () {
                                return {
                                    departmentVos : [$scope.vm.form.issues[0].departmentVos],
                                    id : [$scope.vm.form.issues[0].id],
                                    projectId : [$scope.vm.form.issues[0].projectVo.id],
                                    project : [$scope.vm.form.issues[0].projectVo]
                                };
                            }
                        }
                    });
                }
                //  연관 이슈 목록 테이블 설정
                function addRelationIssueTableConfig() {
                    $uibModal.open({
                        templateUrl : 'views/issue/issueRelationTableConfig.html',
                        size : "lg",
                        controller : 'issueAddRelationTableConfigController',
                        backdrop : 'static',
                        resolve : {}
                    });
                }
                //  하위 이슈 목록 테이블 설정
                function addDownIssueTableConfig() {
                    $uibModal.open({
                        templateUrl : 'views/issue/issueDownTableConfig.html',
                        size : "lg",
                        controller : 'issueAddDownTableConfigController',
                        backdrop : 'static',
                        resolve : {}
                    });
                }
                //  변경 가능한 이슈 상태 목록을 조회하고 수정 모드로 화면을 변경한다.
                function getChangeIssueStatusList(checkPermission) {
                    //  수정 권한이 없으면 이슈 상태 변경 불가
@@ -396,6 +663,8 @@
                    //  초기화 해야할 할목을 지정하여 다른 이슈를 클릭할 때 초기화해준다.
                    $scope.fn.initReload();
                    $scope.fn.getRelTableConfigs();
                    Issue.detail($resourceProvider.getContent(
                        {id : $scope.vm.viewer.id, deep : "02"},
                        $resourceProvider.getPageContent(0, 1))).then(function (result) {
@@ -424,13 +693,16 @@
                                $scope.vm.form.issuesDown = [];
                                $scope.vm.form.issuesDown.push(result.data.data);
                                makeTableConfigs();
                                // makeTableConfigs();
                                // $scope.vm.relTableConfigs = result.data.relTableConfigs;
                                angular.forEach(result.data.data.issueRelationVos, function (issueRelationVo){
                                    issueRelationVo.relationIssueTypeName = $scope.vm.relationIssueTypes[issueRelationVo.relationIssueType].name;
                                    $scope.vm.form.issues.push(issueRelationVo.issueRelation);
                                });
                                makeTableConfigsDown();
                                // makeTableConfigsDown();
                                // $scope.vm.downTableConfigs = result.data.downTableConfigs;
                                angular.forEach(result.data.data.issueDownVos, function (issueDownVo){
                                    $scope.vm.form.issuesDown.push(issueDownVo.issue);
                                });
@@ -505,7 +777,7 @@
                        }
                    });
                }
``
                function updateActiveHistory() {
                    $scope.vm.activeTab = 'ALL';
                    $scope.fn.makeActiveHistory();