From 4d692a614bba9d8954cbbdad2d79424afaab0298 Mon Sep 17 00:00:00 2001
From: jhjang <jhjang@maprex.co.kr>
Date: 월, 03 1월 2022 17:50:00 +0900
Subject: [PATCH] Merge branch 'master' of http://192.168.0.25:9001/r/owl-kisa

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java                |   37 ++++---
 src/main/java/kr/wisestone/owl/web/condition/IssueRelationCondition.java         |   19 +++
 src/main/java/kr/wisestone/owl/service/impl/IssueRelationServiceImpl.java        |   23 ++--
 src/main/webapp/custom_components/js-input-autocomplete/js-input-autocomplete.js |    9 +
 src/main/webapp/i18n/ko/global.json                                              |    6 
 src/main/webapp/scripts/app/issue/issueAddDown.controller.js                     |    6 +
 src/main/webapp/views/issue/issueDetail.html                                     |   31 +++++
 src/main/webapp/scripts/app/issue/issueDetail.controller.js                      |  132 +++++++++++++++++++++++---
 src/main/webapp/scripts/app/issue/downIssueModifyStatus.controller.js            |    4 
 9 files changed, 213 insertions(+), 54 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueRelationServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueRelationServiceImpl.java
index f16b414..3dc754c 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueRelationServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueRelationServiceImpl.java
@@ -94,20 +94,21 @@
     @Override
     @Transactional
     public boolean removeRelationIssue(Map<String, Object> resJsonData, IssueRelationCondition condition) {
-        Long id = condition.getId();
-        if (id != null) {
-            IssueRelation issueRelation = findOne(id);
-            if (issueRelation != null) {
-                StringBuilder sb = new StringBuilder();
-                issueHistoryService.detectRelationIssue(IssueHistoryType.DELETE, issueRelation, sb);
-                issueHistoryService.addIssueHistory(issueRelation.getIssue(), IssueHistoryType.MODIFY, sb.toString());
+        //Long id = condition.getId();
+        List<Long> relRemoveIds = condition.getRemoveIds();
+        if (relRemoveIds != null && relRemoveIds.size() > 0) {
+            for (Long relId : relRemoveIds) {
+                IssueRelation issueRelation = findOne(relId);
+                if (issueRelation != null) {
+                    StringBuilder sb = new StringBuilder();
+                    issueHistoryService.detectRelationIssue(IssueHistoryType.DELETE, issueRelation, sb);
+                    issueHistoryService.addIssueHistory(issueRelation.getIssue(), IssueHistoryType.MODIFY, sb.toString());
 
-                this.issueRelationRepository.deleteById(id);
-
-                return true;
+                    this.issueRelationRepository.deleteById(relId);
+                }
             }
+            return true;
         }
-
         return false;
     }
 }
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
index 3049801..641bcd9 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -3718,28 +3718,31 @@
     @Transactional
     @Override
     public void modifyParentIssue(IssueForm issueDownForm) {
-        Issue issue = this.getIssue(issueDownForm.getId()); //�븯�쐞 �씠�뒋
+        //Issue issue = this.getIssue(issueDownForm.getId()); //�븯�쐞 �씠�뒋
         Long newParentIssueId = issueDownForm.getParentIssueId(); //蹂�寃쏀븷 �븯�쐞�씠�뒋�쓽 �긽�쐞�씠�뒋
-
         StringBuilder sb = new StringBuilder();
 
-        Issue parentIssue = issue.getParentIssue(); //蹂�寃� �쟾 �븯�쐞�씠�뒋�쓽 �긽�쐞�씠�뒋
-        if(parentIssue != null && parentIssue.getId().equals(newParentIssueId)){ //蹂�寃� �쟾 �븯�쐞�씠�뒋�쓽 �긽�쐞�씠�뒋媛� 議댁옱 �븷 寃쎌슦
-            this.issueHistoryService.detectDownIssues(IssueHistoryType.DELETE, issue, sb);
-            this.issueHistoryService.addIssueHistory(parentIssue, IssueHistoryType.MODIFY, sb.toString());
-        }
+        for (Long downId : issueDownForm.getIds()) {
+            Issue issue = this.getIssue(downId);
 
-        if (newParentIssueId != null) { // 異붽� �븷 寃쎌슦
-            parentIssue = this.getIssue(newParentIssueId); //�긽�쐞�씠�뒋(myIssue)
-            issue.setParentIssue(parentIssue); //myIssue瑜� �븯�쐞�씠�뒋�쓽 �긽�쐞�씠�뒋濡� set
-            this.issueHistoryService.detectDownIssues(IssueHistoryType.ADD, issue, sb); //issue = �븯�쐞�씠�뒋
-        } else{
-            // �궘�젣 �븷 寃쎌슦
-            this.issueHistoryService.detectDownIssues(IssueHistoryType.DELETE, issue, sb);
-            issue.setParentIssue(null);
+            Issue parentIssue = issue.getParentIssue(); //蹂�寃� �쟾 �븯�쐞�씠�뒋�쓽 �긽�쐞�씠�뒋
+            if(parentIssue != null && parentIssue.getId().equals(newParentIssueId)){ //蹂�寃� �쟾 �븯�쐞�씠�뒋�쓽 �긽�쐞�씠�뒋媛� 議댁옱 �븷 寃쎌슦
+                this.issueHistoryService.detectDownIssues(IssueHistoryType.DELETE, issue, sb);
+                this.issueHistoryService.addIssueHistory(parentIssue, IssueHistoryType.MODIFY, sb.toString());
+            }
+
+            if (newParentIssueId != null) { // 異붽� �븷 寃쎌슦
+                parentIssue = this.getIssue(newParentIssueId); //�긽�쐞�씠�뒋(myIssue)
+                issue.setParentIssue(parentIssue); //myIssue瑜� �븯�쐞�씠�뒋�쓽 �긽�쐞�씠�뒋濡� set
+                this.issueHistoryService.detectDownIssues(IssueHistoryType.ADD, issue, sb); //issue = �븯�쐞�씠�뒋
+            } else{
+                // �궘�젣 �븷 寃쎌슦
+                this.issueHistoryService.detectDownIssues(IssueHistoryType.DELETE, issue, sb);
+                issue.setParentIssue(null);
+            }
+            this.issueHistoryService.addIssueHistory(parentIssue, IssueHistoryType.MODIFY, sb.toString()); //parentIssue = myIssue(湲곕줉�� �쁽�옱 �긽�꽭�럹�씠吏��뿉 �빐�빞�븯�땲源�)
+            this.issueRepository.saveAndFlush(issue);
         }
-        this.issueHistoryService.addIssueHistory(parentIssue, IssueHistoryType.MODIFY, sb.toString()); //parentIssue = myIssue(湲곕줉�� �쁽�옱 �긽�꽭�럹�씠吏��뿉 �빐�빞�븯�땲源�)
-        this.issueRepository.saveAndFlush(issue);
     }
 
     @Override
diff --git a/src/main/java/kr/wisestone/owl/web/condition/IssueRelationCondition.java b/src/main/java/kr/wisestone/owl/web/condition/IssueRelationCondition.java
index 2749904..6ddf0c8 100644
--- a/src/main/java/kr/wisestone/owl/web/condition/IssueRelationCondition.java
+++ b/src/main/java/kr/wisestone/owl/web/condition/IssueRelationCondition.java
@@ -1,7 +1,10 @@
 package kr.wisestone.owl.web.condition;
 
+import com.google.common.collect.Lists;
 import kr.wisestone.owl.util.ConvertUtil;
+import kr.wisestone.owl.util.MapUtil;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -13,10 +16,18 @@
     private  Long relationIssueId;
     private  Long relationIssueType;
 
+    private List<Long> removeIds = Lists.newArrayList();
+
     public IssueRelationCondition() {}
 
     public static IssueRelationCondition make(Map<String, Object> params) {
         IssueRelationCondition condition = ConvertUtil.convertMapToClass(params, IssueRelationCondition.class);
+
+        //  �궘�젣 �씠�뒋 �젙蹂�
+        if (MapUtil.getLongs(params, "removeIds") != null) {
+            condition.setRemoveIds(MapUtil.getLongs(params, "removeIds"));
+        }
+
         return condition;
     }
 
@@ -51,4 +62,12 @@
     public void setRelationIssueType(Long type) {
         this.relationIssueType = type;
     }
+
+    public List<Long> getRemoveIds() {
+        return removeIds;
+    }
+
+    public void setRemoveIds(List<Long> removeIds) {
+        this.removeIds = removeIds;
+    }
 }
diff --git a/src/main/webapp/custom_components/js-input-autocomplete/js-input-autocomplete.js b/src/main/webapp/custom_components/js-input-autocomplete/js-input-autocomplete.js
index 45f2792..3baf09d 100644
--- a/src/main/webapp/custom_components/js-input-autocomplete/js-input-autocomplete.js
+++ b/src/main/webapp/custom_components/js-input-autocomplete/js-input-autocomplete.js
@@ -23,6 +23,7 @@
                 page : "=",
                 totalPage : "=",
                 inputDisabled : "=",
+                customInput : "=",
             },
             templateUrl : "custom_components/js-input-autocomplete/js-input-autocomplete.html",
             link: function ($scope, $element, $attrs) {
@@ -180,7 +181,9 @@
                                 $scope.$apply(function () {
                                     $scope.open = false;
                                     $scope.page = 0;
-                                    $scope.search = "";
+                                    if (!angular.isDefined($scope.customInput) && !$scope.customInput) {
+                                        $scope.search = "";
+                                    }
                                     $scope.totalPage = 0;
                                     $scope.options = [];
                                     $scope.networkSuccess = false;
@@ -301,7 +304,9 @@
                         switch (event.keyCode) {
                             case 9 :  //  �꺆�궎 �떕湲�
                                 $scope.open = false;
-                                $scope.search = "";
+                                if (!angular.isDefined($scope.customInput) && !$scope.customInput) {
+                                    $scope.search = "";
+                                }
                                 $scope.page = 0;
                                 $scope.totalPage = 0;
                                 $scope.options = [];
diff --git a/src/main/webapp/i18n/ko/global.json b/src/main/webapp/i18n/ko/global.json
index 2f610a7..fa6a8c1 100644
--- a/src/main/webapp/i18n/ko/global.json
+++ b/src/main/webapp/i18n/ko/global.json
@@ -222,8 +222,8 @@
         "selectProjectAndIssueTypeDownloadExcel": "�봽濡쒖젥�듃, �씠�뒋 �쑀�삎�쓣 �꽑�깮�븯硫� �빐�떦 �븯�뒗 �뼇�떇�쓽 �뿊���쓣 �떎�슫濡쒕뱶 �븷 �닔 �엳�뒿�땲�떎.",
         "settingTableDisplay": "�뀒�씠釉� �몴�떆 �꽕�젙",
         "deleteIssue": "�씠�뒋 �궘�젣",
-        "wantToDeleteSelectIssue": "�꽑�깮�븳 �씠�뒋瑜� �궘�젣�븯寃좎뒿�땲源�? \n �궗�슜�옄媛� 吏곸젒 �궘�젣�븳 �씠�뒋�뒗 �뼱�뼚�븳 寃쎌슦�뿉�룄 蹂듦뎄媛� 遺덇��뒫�빀�땲�떎.",
-        "wantToDeleteSelectDownIssueInList": "�꽑�깮�븳 �븯�쐞 �씠�뒋瑜� �븯�쐞 �씠�뒋 由ъ뒪�듃�뿉�꽌 �젣�쇅�떆�궎寃좎뒿�땲源�?",
+        "wantToDeleteSelectIssue": "�꽑�깮�븳 �씠�뒋瑜� �뿰愿� �씠�뒋 由ъ뒪�듃�뿉�꽌 �젣�쇅�떆�궎寃좎뒿�땲源�? \n �뿰愿� �씠�뒋 由ъ뒪�듃�뿉�꽌留� �젣�쇅�릺硫�, �떎�젣濡� �궘�젣�릺吏� �븡�뒿�땲�떎.",
+        "wantToDeleteSelectDownIssueInList": "�꽑�깮�븳 �씠�뒋瑜� �븯�쐞 �씠�뒋 由ъ뒪�듃�뿉�꽌 �젣�쇅�떆�궎寃좎뒿�땲源�? \n �븯�쐞 �씠�뒋 由ъ뒪�듃�뿉�꽌留� �젣�쇅�릺硫�, �떎�젣濡� �궘�젣�릺吏� �븡�뒿�땲�떎.",
         "wantToDeleteOnlySelectIssue": "�꽑�깮�븳 �씠�뒋留� �궘�젣�븯寃좎뒿�땲源�? \n �궗�슜�옄媛� 吏곸젒 �궘�젣�븳 �씠�뒋�뒗 �뼱�뼚�븳 寃쎌슦�뿉�룄 蹂듦뎄媛� 遺덇��뒫�빀�땲�떎.",
         "wantToDeleteSelectDownIssue": "�꽑�깮�븳 �씠�뒋�쓽 �븯�쐞 �씠�뒋媛� 議댁옱 �빀�땲�떎. \n �꽑�깮�븳 �씠�뒋�� �븯�쐞 �씠�뒋 紐⑤몢 �궘�젣�븯寃좎뒿�땲源�? \n �궗�슜�옄媛� 吏곸젒 �궘�젣�븳 �씠�뒋�뒗 �뼱�뼚�븳 寃쎌슦�뿉�룄 蹂듦뎄媛� 遺덇��뒫�빀�땲�떎.",
         "wantToDeleteSelectRelationIssue": "�꽑�깮�븳 �뿰愿� �씠�뒋瑜� �궘�젣�븯寃좎뒿�땲源�? \n �궗�슜�옄媛� 吏곸젒 �궘�젣�븳 �뿰愿� �씠�뒋�뒗 蹂듦뎄媛� 遺덇��뒫�빀�땲�떎.",
@@ -763,7 +763,7 @@
         "updatableStatus": "蹂�寃� 媛��뒫�븳 �긽�깭",
         "testCase": "�뀒�뒪�듃 耳��씠�뒪",
         "updateStatus": "�긽�깭 蹂�寃�",
-        "updateDownIssueAllStatus": "�븯�쐞 �씠�뒋�긽�깭 �쟾泥� 蹂�寃�",
+        "updateDownIssueStatus": "�븯�쐞 �씠�뒋�긽�깭 蹂�寃�",
         "tcmProject": "�뀒�뒪�듃 耳��씠�뒪 愿�由� �봽濡쒖젥�듃",
         "btsProject": "�씠�뒋 愿�由� �봽濡쒖젥�듃",
         "projectName": "�봽濡쒖젥�듃紐�",
diff --git a/src/main/webapp/scripts/app/issue/downIssueModifyStatus.controller.js b/src/main/webapp/scripts/app/issue/downIssueModifyStatus.controller.js
index fa12bc5..2060aa0 100644
--- a/src/main/webapp/scripts/app/issue/downIssueModifyStatus.controller.js
+++ b/src/main/webapp/scripts/app/issue/downIssueModifyStatus.controller.js
@@ -72,7 +72,7 @@
                             var issueIds = [];
 
                             angular.forEach(parameter.downIssues, function (downIssue) {
-                                issueIds.push(downIssue.id);
+                                issueIds.push(downIssue);
                             });
 
                             return issueIds;
@@ -112,7 +112,7 @@
                             var issueIds = [];
 
                             angular.forEach(parameter.downIssues, function (downIssue) {
-                                issueIds.push(downIssue.id);
+                                issueIds.push(downIssue);
                             });
 
                             return issueIds;
diff --git a/src/main/webapp/scripts/app/issue/issueAddDown.controller.js b/src/main/webapp/scripts/app/issue/issueAddDown.controller.js
index e455886..b066d43 100644
--- a/src/main/webapp/scripts/app/issue/issueAddDown.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueAddDown.controller.js
@@ -702,12 +702,16 @@
                         SweetAlert.error($filter("translate")("issue.errorSelectRelationIssue"), "");
                         return;
                     }*/
+                    var ids = [];
+                    if (downId != null) {
+                        ids.push(downId);
+                    }
 
                     var contents = {
                         //relationIssueType : $scope.vm.form.relationIssueTypeId,
                         // issueId : $rootScope.currentDetailIssueId,
                         issueId :  parameter.id,
-                        id : downId,
+                        ids : ids,
                         parentIssueId : parameter.id
                     };
 
diff --git a/src/main/webapp/scripts/app/issue/issueDetail.controller.js b/src/main/webapp/scripts/app/issue/issueDetail.controller.js
index 84bfa4e..57f8369 100644
--- a/src/main/webapp/scripts/app/issue/issueDetail.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueDetail.controller.js
@@ -51,6 +51,8 @@
                 $scope.fn.containsPartner = containsPartner;
                 $scope.fn.onActivate = onActivate;
                 $scope.fn.issueBack = issueBack;
+                $scope.fn.removeRelationIssue = removeRelationIssue;
+                $scope.fn.removeDownIssue = removeDownIssue;
 
                 //  �씠�뒋 紐⑸줉 而⑦듃濡ㅻ윭 vm, fn �긽�냽 以�
                 $scope.vm.viewer = {};      // �쁽�옱 �씠�뒋
@@ -110,7 +112,7 @@
                 $scope.vm.relTableConfigs = [];
                 //  �뀒�씠釉� �씠踰ㅽ듃
                 $scope.relTableEvent = {
-                    removeRelationIssue : removeRelationIssue,   // �뿰愿� �씪媛� �궘�젣
+                    //removeRelationIssue : removeRelationIssue,   // �뿰愿� �씪媛� �궘�젣
                     changeDetailView : changeDetailView
                 };
 
@@ -118,7 +120,7 @@
                 $scope.vm.downTableConfigs = [];
                 //  �뀒�씠釉� �씠踰ㅽ듃
                 $scope.downTableEvent = {
-                    removeDownIssue : removeDownIssue,   // �뿰愿� �씪媛� �궘�젣
+                    //removeDownIssue : removeDownIssue,   // �뿰愿� �씪媛� �궘�젣
                     changeDetailView : changeDetailView
                 };
 
@@ -152,7 +154,38 @@
                 });
 
                 // �븯�쐞 �씠�뒋 �궘�젣
-                function removeDownIssue(id) {
+                function removeDownIssue() {
+                    var removeIds = [];
+                    var removePermission = true;
+
+                    angular.forEach($scope.vm.viewer.issueDownVos, function (data) {
+                        if (data.checked && data.modifyPermissionCheck) {
+                            removeIds.push(data.id);
+                        }
+
+                        if (data.checked && !data.modifyPermissionCheck) {
+                            removePermission = false;
+                        }
+                    });
+
+                    if (!removePermission) {
+                        SweetAlert.swal({
+                            html : true,
+                            title : $filter("translate")("common.deleteFailed"), // �궘�젣 �떎�뙣
+                            text : $filter("translate")("project.notHaveDeletePermissionExistsProject"), // "�궘�젣 沅뚰븳�씠 �뾾�뒗 �봽濡쒖젥�듃媛� 議댁옱�빀�땲�떎."
+                            type : "error"
+                        });
+                        return;
+                    }
+
+                    if (removeIds.length < 1) {
+                        SweetAlert.swal({
+                            title : $filter("translate")("common.checkPurgingTargets"), // �궘�젣 ���긽 �솗�씤
+                            text : $filter("translate")("common.selectDestinationDeletion"), // �궘�젣 ���긽�쓣 �꽑�깮�븯�꽭�슂.
+                            type : "warning"
+                        });
+                        return;
+                    }
                     //  �궘�젣 �븣由�
                     SweetAlert.swal({
                             title : $filter("translate")("issue.downIssueRemove"), // �븯�쐞 �씠�뒋 �궘�젣
@@ -172,7 +205,7 @@
                                 $rootScope.spinner = true;
 
                                 var contents = {
-                                    id : id
+                                    ids : removeIds
                                 };
 
                                 Issue.modifyParentIssue($resourceProvider.getContent(
@@ -194,7 +227,38 @@
                 }
 
                 // �뿰愿� �씠�뒋 �궘�젣
-                function removeRelationIssue(id) {
+                function removeRelationIssue() {
+                    var removeIds = [];
+                    var removePermission = true;
+
+                    angular.forEach($scope.vm.viewer.issueRelationVos, function (data) {
+                        if (data.checked && data.modifyPermissionCheck) {
+                            removeIds.push(data.id);
+                        }
+
+                        if (data.checked && !data.modifyPermissionCheck) {
+                            removePermission = false;
+                        }
+                    });
+
+                    if (!removePermission) {
+                        SweetAlert.swal({
+                            html : true,
+                            title : $filter("translate")("common.deleteFailed"), // �궘�젣 �떎�뙣
+                            text : $filter("translate")("issue.notHaveDeletePermissionExistsAnIssue"), // �궘�젣 沅뚰븳�씠 �뾾�뒗 �씠�뒋媛� 議댁옱�빀�땲�떎.
+                            type : "error"
+                        });
+                        return;
+                    }
+
+                    if (removeIds.length < 1) {
+                        SweetAlert.swal({
+                            title : $filter("translate")("common.checkPurgingTargets"), // �궘�젣 ���긽 �솗�씤
+                            text : $filter("translate")("common.selectDestinationDeletion"), // �궘�젣 ���긽�쓣 �꽑�깮�븯�꽭�슂.
+                            type : "warning"
+                        });
+                        return;
+                    }
                     //  �궘�젣 �븣由�
                     SweetAlert.swal({
                             title : $filter("translate")("issue.relationIssueRemove"), // �뿰愿� �씠�뒋 �궘�젣
@@ -214,7 +278,7 @@
                                 $rootScope.spinner = true;
 
                                 var contents = {
-                                    id : id
+                                    removeIds : removeIds
                                 };
 
                                 IssueRelation.delete($resourceProvider.getContent(
@@ -436,6 +500,10 @@
                 function makeRelTableConfigs() {
                     $scope.vm.relTableConfigs = [];
                     $scope.vm.relTableConfigs.push($tableProvider.config()
+                        .setDType("checkbox")
+                        .setHWidth("width-20-p")
+                        .setDAlign("text-center"))
+                    $scope.vm.relTableConfigs.push($tableProvider.config()
                         .setHName("issue.relationIssueType")
                         .setDType("renderer")
                         .setDAlign("text-center")
@@ -449,7 +517,7 @@
                         .setHWidth("width-60-p bold")
                         .setHSort(false)
                         .setDRenderer("ISSUE_RELATION_MOVE"))
-                    if($scope.vm.viewer.modifyPermissionCheck) {
+                    /*if($scope.vm.viewer.modifyPermissionCheck) {
                         $scope.vm.relTableConfigs.push($tableProvider.config()
                             .setHName("issue.relationIssueDelete")
                             .setDType("renderer")
@@ -458,7 +526,7 @@
                             .setDRenderer("ISSUE_RELATION_DELETE")
                             .setHSort(false)
                             .setDAlign("text-center"))
-                    }
+                    }*/
                     angular.forEach($scope.vm.relTableConfigs, function (Rel_issueTableConfig) {
                         //  �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎.
                         if (Rel_issueTableConfig.display) {
@@ -472,13 +540,17 @@
                 function makeDownTableConfigs() {
                     $scope.vm.downTableConfigs = [];
                     $scope.vm.downTableConfigs.push($tableProvider.config()
+                        .setDType("checkbox")
+                        .setHWidth("width-20-p")
+                        .setDAlign("text-center"))
+                    $scope.vm.downTableConfigs.push($tableProvider.config()
                         .setHName("issue.downIssueTitle")
                         .setDType("renderer")
                         .setDAlign("text-center")
                         .setHWidth("width-60-p bold")
                         .setHSort(false)
                         .setDRenderer("ISSUE_DOWN_MOVE"))
-                    if($scope.vm.viewer.modifyPermissionCheck){
+                    /*if($scope.vm.viewer.modifyPermissionCheck){
                         $scope.vm.downTableConfigs.push($tableProvider.config()
                             .setHName("issue.relationIssueDelete")
                             .setDType("renderer")
@@ -487,7 +559,7 @@
                             .setDRenderer("ISSUE_DOWN_DELETE")
                             .setHSort(false)
                             .setDAlign("text-center"))
-                    }
+                    }*/
 
                     angular.forEach($scope.vm.downTableConfigs, function (Down_issueTableConfig) {
                         //  �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎.
@@ -531,6 +603,10 @@
                            .setHWidth("width-60-p bold")
                            .setHSort(false)
                            .setDRenderer("ISSUE_RELATION_MOVE"))*/
+                        $scope.vm.relTableConfigs.push($tableProvider.config()
+                            .setDType("checkbox")
+                            .setHWidth("width-20-p")
+                            .setDAlign("text-center"))
                         angular.forEach($scope.vm.issueRelTableConfigs, function (Rel_issueTableConfig) {
                             //  �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎.
                             if (Rel_issueTableConfig.display) {
@@ -539,7 +615,7 @@
 
                             }
                         });
-                        if($scope.vm.viewer.modifyPermissionCheck) {
+                        /*if($scope.vm.viewer.modifyPermissionCheck) {
                             $scope.vm.relTableConfigs.push($tableProvider.config()
                                 .setHName("issue.relationIssueDelete")
                                 .setDType("renderer")
@@ -547,7 +623,7 @@
                                 .setDRenderer("ISSUE_RELATION_DELETE")
                                 .setHSort(false)
                                 .setDAlign("text-center"))
-                        }
+                        }*/
                     } else {
                         makeRelTableConfigs();
                     }
@@ -575,6 +651,10 @@
                             .setHWidth("width-60-p bold")
                             .setHSort(false)
                             .setDRenderer("ISSUE_DOWN_MOVE"))*/
+                        $scope.vm.downTableConfigs.push($tableProvider.config()
+                            .setDType("checkbox")
+                            .setHWidth("width-20-p")
+                            .setDAlign("text-center"))
                         angular.forEach($scope.vm.issueDownTableConfigs, function (Down_issueTableConfig) {
                             //  �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎.
                             if (Down_issueTableConfig.display) {
@@ -582,7 +662,7 @@
                                 $scope.fn.setDownTableColumn(Down_issueTableConfig);
                             }
                         });
-                        if($scope.vm.viewer.modifyPermissionCheck) {
+                        /*if($scope.vm.viewer.modifyPermissionCheck) {
                             $scope.vm.downTableConfigs.push($tableProvider.config()
                                 .setHName("issue.relationIssueDelete")
                                 .setDType("renderer")
@@ -590,7 +670,7 @@
                                 .setDRenderer("ISSUE_DOWN_DELETE")
                                 .setHSort(false)
                                 .setDAlign("text-center"))
-                        }
+                        }*/
                     } else {
                         makeDownTableConfigs();
                     }
@@ -632,9 +712,14 @@
                         return;
                     }
 
+                    var ids = [];
+                    if ($scope.vm.form.issuesDown[0].id != null) {
+                        ids.push($scope.vm.form.issuesDown[0].id);
+                    }
+
                     var contents = {
                         issueId : $rootScope.currentDetailIssueId,
-                        id : $scope.vm.form.issuesDown[0].id,
+                        ids : ids,
                         parentIssueId : $rootScope.currentDetailIssueId
                     };
 
@@ -712,6 +797,20 @@
                 }
 
                 function modifyDownIssueStatus() {
+                    var issueIds = [];
+
+                    angular.forEach($scope.vm.viewer.issueDownVos, function (data) {
+                        if (data.checked) {
+                            issueIds.push(data.id);
+                            //$scope.vm.projectId = data.projectId;
+                        }
+                    });
+
+                    if (issueIds.length < 1) {
+                        SweetAlert.warning($filter("translate")("issue.selectionCheck"), $filter("translate")("issue.selectIssueToChangeStatus")); // �꽑�깮 ���긽 �솗�씤, �긽�깭 蹂�寃쏀븷 �씠�뒋瑜� �꽑�깮�븯�꽭�슂.
+                        return;
+                    }
+
                     $uibModal.open({
                         templateUrl : 'views/issue/downIssueModifyStatus.html',
                         size : "md",
@@ -722,7 +821,8 @@
                                 return {
                                     issueTypeId : $scope.vm.viewer.issueTypeVo.id,
                                     issueIds : [$scope.vm.viewer.id],
-                                    downIssues : $scope.vm.viewer.issueDownVos,
+                                    //downIssues : $scope.vm.viewer.issueDownVos,
+                                    downIssues : issueIds,
                                     projectId : $scope.vm.viewer.projectVo.id
                                 };
                             }
diff --git a/src/main/webapp/views/issue/issueDetail.html b/src/main/webapp/views/issue/issueDetail.html
index 75c7faf..390f5ef 100644
--- a/src/main/webapp/views/issue/issueDetail.html
+++ b/src/main/webapp/views/issue/issueDetail.html
@@ -488,8 +488,21 @@
                     <div class="col-md-10">
                         <span class="info_detail_font h3" translate="issue.relationIssue">�뿰愿� �씠�뒋</span>
                     </div>
-                    <div class="col-md-1">
+                    <!--<div class="col-md-1">
                         <button class="btn btn-darkgrey offset-10" ng-click="fn.addRelationIssueTableConfig()" type="button"><span translate="issue.settingTableDisplay">�뀒�씠釉� �몴�떆 �꽕�젙</span></button>
+                    </div>-->
+                    <div class="btn-group offset-11">
+                        <button aria-expanded="false" aria-haspopup="true"
+                                tabindex="-1"
+                                class="btn btn-secondary dropdown-toggle"
+                                data-toggle="dropdown" type="button"><span translate="common.addFunction">異붽�湲곕뒫</span>
+                        </button>
+                        <div aria-labelledby="dropdownMenuButton2" class="dropdown-menu left-menu"
+                             x-placement="bottom-start" >
+                            <!--<a class="dropdown-item cursor" form-submit="issueListForm" make-search-conditions="fn.makeSearchConditions()"> <span translate="common.allDownloadExcel">�뿊�� �떎�슫濡쒕뱶</span></a>-->
+                            <a class="dropdown-item cursor" ng-click="fn.addRelationIssueTableConfig()"> <span translate="issue.settingTableDisplay">�뀒�씠釉� �몴�떆 �꽕�젙</span></a>
+                            <a class="dropdown-item cursor" ng-click="fn.removeRelationIssue()"> <span translate="common.selectDelete">�궘�젣</span></a>
+                        </div>
                     </div>
                 </div>
 
@@ -538,7 +551,7 @@
                     <div class="col-md-8">
                         <span class="info_detail_font h3" translate="issue.downIssue">�븯�쐞 �씠�뒋</span>
                     </div>
-                    <div class="col-sm-2">
+                    <!--<div class="col-sm-2">
                         <a><button type="button" class="btn btn-darkgrey offset-7" ng-if="vm.viewer.modifyPermissionCheck"
                                 ng-click="fn.modifyDownIssueStatus()">
                                 <span ng-if="vm.viewer.modifyPermissionCheck" translate="common.updateDownIssueAllStatus">�븯�쐞�씠�뒋 �긽�깭 �쟾泥� 蹂�寃�</span>
@@ -546,6 +559,20 @@
                     </div>
                     <div class="col-sm-1">
                         <button class="btn btn-darkgrey offset-10"  ng-click="fn.addDownIssueTableConfig()" type="button"><span translate="issue.settingTableDisplay">�뀒�씠釉� �몴�떆 �꽕�젙</span></button>
+                    </div>-->
+                    <div class="btn-group offset-11">
+                        <button aria-expanded="false" aria-haspopup="true"
+                                tabindex="-1"
+                                class="btn btn-secondary dropdown-toggle"
+                                data-toggle="dropdown" type="button"><span translate="common.addFunction">異붽�湲곕뒫</span>
+                        </button>
+                        <div aria-labelledby="dropdownMenuButton2" class="dropdown-menu left-menu"
+                             x-placement="bottom-start" >
+                            <!--<a class="dropdown-item cursor" form-submit="issueListForm" make-search-conditions="fn.makeSearchConditions()"> <span translate="common.allDownloadExcel">�뿊�� �떎�슫濡쒕뱶</span></a>-->
+                            <a class="dropdown-item cursor" ng-if="vm.viewer.modifyPermissionCheck" ng-click="fn.modifyDownIssueStatus()"> <span translate="common.updateDownIssueStatus">�븯�쐞�씠�뒋 �긽�깭 蹂�寃�</span></a>
+                            <a class="dropdown-item cursor" ng-click="fn.addDownIssueTableConfig()"> <span translate="issue.settingTableDisplay">�뀒�씠釉� �몴�떆 �꽕�젙</span></a>
+                            <a class="dropdown-item cursor" ng-click="fn.removeDownIssue()"> <span translate="common.selectDelete">�궘�젣</span></a>
+                        </div>
                     </div>
                 </div>
 

--
Gitblit v1.8.0