From 264359a48d95948ea1b67bf1660521a4d8c1d598 Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 목, 09 12월 2021 14:22:13 +0900
Subject: [PATCH] 삭제할 이슈의 하위이슈가 존재할 경우 모두 삭제 & 이슈만 삭제

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java  |   83 +++++++++++++++++++-
 src/main/java/kr/wisestone/owl/service/IssueService.java           |    4 +
 src/main/webapp/scripts/components/issue/issue.service.js          |   12 +++
 src/main/webapp/scripts/app/issue/issueList.controller.js          |  110 ++++++++++++++++++++++++---
 src/main/webapp/i18n/ko/global.json                                |    3 
 src/main/java/kr/wisestone/owl/web/controller/IssueController.java |   24 ++++++
 6 files changed, 220 insertions(+), 16 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/service/IssueService.java b/src/main/java/kr/wisestone/owl/service/IssueService.java
index fff9510..302a9e4 100644
--- a/src/main/java/kr/wisestone/owl/service/IssueService.java
+++ b/src/main/java/kr/wisestone/owl/service/IssueService.java
@@ -54,6 +54,10 @@
 
     void removeIssues(IssueForm issueForm);
 
+    void removeAllIssues(IssueForm issueForm);
+
+    void removeDownIssues(IssueForm issueForm);
+
     void modifyIssueStatus(IssueForm issueForm, User user);
 
     Issue getIssue(Long taskId);
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 8e77478..2a11e37 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -2096,20 +2096,95 @@
         List<Issue> removeIssues = Lists.newArrayList();
 
         for (Long issueId : issueForm.getRemoveIds()) {
+            //�븯�쐞�씠�뒋 泥댄겕
+            List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueId);
+            if(downIssues != null && downIssues.size() > 0){
+                for(Issue downIssue : downIssues){
+                    if(downIssue.getParentIssue() != null){
+                        downIssue.setParentIssue(null);
+                    }
+                }
+            }
+
             Issue issue = this.issueRemoves(issueId, user);
             removeIssues.add(issue);
         }
 
-        if (removeIssues.size() > 0) {
-            //this.issueRepository.deleteAll(removeIssues);
-        }
+        /*if (removeIssues.size() > 0) {
+            this.issueRepository.deleteAll(removeIssues);
+        }*/
 
         //  �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏�
         log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_REMOVE));
     }
 
+    //  �씠�뒋瑜� �궘�젣�븳�떎.
+    @Override
+    @Transactional
+    public void removeAllIssues(IssueForm issueForm) {
+        //  �궗�슜�븯怨� �엳�뒗 �뾽臾� 怨듦컙�씠 �솢�꽦 �긽�깭�씤吏� �솗�씤�븳�떎. �궗�슜 怨듦컙�뿉�꽌 濡쒓렇�씤�븳 �궗�슜�옄媛� 鍮꾪솢�꽦�씤吏� �솗�씤�븳�떎.
+        User user = this.webAppUtil.getLoginUserObject();
+        this.workspaceService.checkUseWorkspace();
+
+        if (issueForm.getRemoveIds().size() < 1) {
+            throw new OwlRuntimeException(
+                    this.messageAccessor.getMessage(MsgConstants.ISSUE_REMOVE_NOT_SELECT));
+        }
+
+        List<Issue> removeIssues = Lists.newArrayList();
+
+        for (Long issueId : issueForm.getRemoveIds()) {
+            //�븯�쐞�씠�뒋 泥댄겕
+            List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueId);
+            if(downIssues != null && downIssues.size() > 0){
+                for(Issue downIssue : downIssues){
+                    Long downIssueId = downIssue.getId();
+                    downIssue = this.issueRemoves(downIssueId, user);
+                    removeIssues.add(downIssue);
+                }
+            }
+            Issue issue = this.issueRemoves(issueId, user);
+            removeIssues.add(issue);
+        }
+        //  �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏�
+        log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_REMOVE));
+    }
+
+    //  �븯�쐞�씠�뒋瑜� �궘�젣�븳�떎.
+    @Override
+    @Transactional
+    public void removeDownIssues(IssueForm issueForm) {
+        //  �궗�슜�븯怨� �엳�뒗 �뾽臾� 怨듦컙�씠 �솢�꽦 �긽�깭�씤吏� �솗�씤�븳�떎. �궗�슜 怨듦컙�뿉�꽌 濡쒓렇�씤�븳 �궗�슜�옄媛� 鍮꾪솢�꽦�씤吏� �솗�씤�븳�떎.
+        User user = this.webAppUtil.getLoginUserObject();
+        this.workspaceService.checkUseWorkspace();
+
+        if (issueForm.getRemoveIds().size() < 1) {
+            throw new OwlRuntimeException(
+                    this.messageAccessor.getMessage(MsgConstants.ISSUE_REMOVE_NOT_SELECT));
+        }
+
+        List<Issue> removeIssues = Lists.newArrayList();
+        Long downIssueId = 0L;
+        for (Long issueId : issueForm.getRemoveIds()) {
+            //�궘�젣 �븷 �씠�뒋�쓽 �븯�쐞�씠�뒋 泥댄겕
+            List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueId);
+            if(downIssues != null && downIssues.size() > 0){
+                for(Issue downIssue : downIssues){
+                    downIssueId = downIssue.getId();
+                }
+            }
+            Issue issue = this.issueRemoves(downIssueId, user);
+            removeIssues.add(issue);
+        }
+        //  �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏�
+        log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_REMOVE));
+    }
+
     private Issue issueRemoves(Long issueId, User user) {
-        Issue issue = this.getIssue(issueId);
+        Issue issue = null;
+        if(issueId != null){
+            issue = this.getIssue(issueId);
+        }
         //  �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤
         this.verifyIssueModifyPermission(issue, user);
 
diff --git a/src/main/java/kr/wisestone/owl/web/controller/IssueController.java b/src/main/java/kr/wisestone/owl/web/controller/IssueController.java
index f752960..460c4b5 100644
--- a/src/main/java/kr/wisestone/owl/web/controller/IssueController.java
+++ b/src/main/java/kr/wisestone/owl/web/controller/IssueController.java
@@ -137,6 +137,30 @@
         return this.setSuccessMessage(resJsonData);
     }
 
+    //  �븯�쐞�씠�뒋 �궘�젣
+    @RequestMapping(value = "/issue/removeAll", produces = MediaType.APPLICATION_JSON_VALUE)
+    public
+    @ResponseBody
+    Map<String, Object> removesAll(@RequestBody Map<String, Map<String, Object>> params) {
+        Map<String, Object> resJsonData = new HashMap<>();
+
+        this.issueService.removeAllIssues(IssueForm.make(params.get(Constants.REQ_KEY_CONTENT)));
+
+        return this.setSuccessMessage(resJsonData);
+    }
+
+    //  �븯�쐞�씠�뒋 �궘�젣
+    /*@RequestMapping(value = "/issue/removeDown", produces = MediaType.APPLICATION_JSON_VALUE)
+    public
+    @ResponseBody
+    Map<String, Object> removesDown(@RequestBody Map<String, Map<String, Object>> params) {
+        Map<String, Object> resJsonData = new HashMap<>();
+
+        this.issueService.removeDownIssues(IssueForm.make(params.get(Constants.REQ_KEY_CONTENT)));
+
+        return this.setSuccessMessage(resJsonData);
+    }*/
+
     //  �씠�뒋 �떎以� �긽�깭 蹂�寃�
     @RequestMapping(value = "/issue/modifyMultiIssueStatus", produces = MediaType.APPLICATION_JSON_VALUE)
     public
diff --git a/src/main/webapp/i18n/ko/global.json b/src/main/webapp/i18n/ko/global.json
index 5c27969..3c091ba 100644
--- a/src/main/webapp/i18n/ko/global.json
+++ b/src/main/webapp/i18n/ko/global.json
@@ -218,6 +218,8 @@
         "settingTableDisplay": "�뀒�씠釉� �몴�떆 �꽕�젙",
         "deleteIssue": "�씠�뒋 �궘�젣",
         "wantToDeleteSelectIssue": "�꽑�깮�븳 �씠�뒋瑜� �궘�젣�븯寃좎뒿�땲源�? \n �궗�슜�옄媛� 吏곸젒 �궘�젣�븳 �씠�뒋�뒗 �뼱�뼚�븳 寃쎌슦�뿉�룄 蹂듦뎄媛� 遺덇��뒫�빀�땲�떎.",
+        "wantToDeleteOnlySelectIssue": "�꽑�깮�븳 �씠�뒋留� �궘�젣�븯寃좎뒿�땲源�? \n �궗�슜�옄媛� 吏곸젒 �궘�젣�븳 �씠�뒋�뒗 �뼱�뼚�븳 寃쎌슦�뿉�룄 蹂듦뎄媛� 遺덇��뒫�빀�땲�떎.",
+        "wantToDeleteSelectDownIssue": "�꽑�깮�븳 �씠�뒋�쓽 �븯�쐞 �씠�뒋媛� 議댁옱 �빀�땲�떎. \n �꽑�깮�븳 �씠�뒋�� �븯�쐞 �씠�뒋 紐⑤몢 �궘�젣�븯寃좎뒿�땲源�? \n �궗�슜�옄媛� 吏곸젒 �궘�젣�븳 �씠�뒋�뒗 �뼱�뼚�븳 寃쎌슦�뿉�룄 蹂듦뎄媛� 遺덇��뒫�빀�땲�떎.",
         "wantToDeleteSelectRelationIssue": "�꽑�깮�븳 �뿰愿� �씠�뒋瑜� �궘�젣�븯寃좎뒿�땲源�? \n �궗�슜�옄媛� 吏곸젒 �궘�젣�븳 �뿰愿� �씠�뒋�뒗 蹂듦뎄媛� 遺덇��뒫�빀�땲�떎.",
         "failedToSaveFieldConditions": "寃��깋 �븘�뱶 議곌굔 ���옣 �떎�뙣",
         "failedToGetSearchFieldCondition": "寃��깋 �븘�뱶 議곌굔 媛��졇�삤湲� �떎�뙣",
@@ -783,6 +785,7 @@
         "createIssue": "�씠�뒋 �깮�꽦",
         "updateIssue": "�씠�뒋 蹂�寃�",
         "deleteIssue": "�씠�뒋 �궘�젣",
+        "deleteDownIssue": "�븯�쐞 �씠�뒋 �궘�젣",
         "sendMailIssue": "�씠�뒋 硫붿씪 �쟾�넚",
         "updateTitle": "�젣紐⑹씠 蹂�寃쎈릺�뿀�뒿�땲�떎.",
         "updateContent": "�궡�슜�씠 蹂�寃쎈릺�뿀�뒿�땲�떎.",
diff --git a/src/main/webapp/scripts/app/issue/issueList.controller.js b/src/main/webapp/scripts/app/issue/issueList.controller.js
index 006dc38..c596f5d 100644
--- a/src/main/webapp/scripts/app/issue/issueList.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueList.controller.js
@@ -689,6 +689,7 @@
                 function removes() {
                     var removeIds = [];
                     var removePermission = true;
+                    var downIssueIds = false;
 
                     angular.forEach($scope.vm.responseData.data, function (data) {
                         if (data.checked && data.modifyPermissionCheck) {
@@ -697,6 +698,10 @@
 
                         if (data.checked && !data.modifyPermissionCheck) {
                             removePermission = false;
+                        }
+
+                        if (data.downIssueAllCount > 0){
+                            downIssueIds = true;
                         }
                     });
 
@@ -719,25 +724,23 @@
                         return;
                     }
 
-                    //  �궘�젣 �븣由�
-                    SweetAlert.swal({
-                            title : $filter("translate")("issue.deleteIssue"), // �씠�뒋 �궘�젣
-                            text : $filter("translate")("issue.wantToDeleteSelectIssue"), // �꽑�깮�븳 �씠�뒋�쓣 �궘�젣�븯寃좎뒿�땲源�? �궘�젣�맂 �씠�뒋�� 蹂듦뎄�븷 �닔 �뾾�뒿�땲�떎.
+                    if (downIssueIds) {
+                        SweetAlert.swal({
+                            title : $filter("translate")("common.deleteIssue"), // �씠�뒋 �궘�젣
+                            text : $filter("translate")("issue.wantToDeleteSelectDownIssue"), // �븯�쐞 �씠�뒋媛� 議댁옱 �빀�땲�떎. �꽑�깮�븳 �씠�뒋�� �븯�쐞 �씠�뒋 紐⑤몢 �궘�젣�븯寃좎뒿�땲源�? �궘�젣�맂 �씠�뒋�뒗 蹂듦뎄�븷 �닔 �뾾�뒿�땲�떎.
                             type : "warning",
                             showCancelButton : true,
                             confirmButtonColor : "#DD6B55",
                             confirmButtonText : $filter("translate")("common.delete"), // �궘�젣
                             cancelButtonText : $filter("translate")("common.cancel"), // 痍⑥냼
                             closeOnConfirm : false,
-                            closeOnCancel : true
+                            closeOnCancel : false
                         },
                         function (isConfirm) {
-                            SweetAlert.close();
-
-                            if (isConfirm) {
+                            if (isConfirm) { //�씠�뒋 + �븯�쐞 �궘�젣
                                 $rootScope.spinner = true;
 
-                                Issue.remove($resourceProvider.getContent(
+                                Issue.removeAllIssues($resourceProvider.getContent(
                                     { removeIds : removeIds },
                                     $resourceProvider.getPageContent(0, 0))).then(function (result) {
 
@@ -745,9 +748,7 @@
                                         $timeout(function () {
                                             SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // �궘�젣 �꽦怨�
                                         }, 100);
-
                                         $scope.fn.listView();
-
                                         $scope.fn.getPageList(0);
                                     }
                                     else {
@@ -755,11 +756,96 @@
                                             SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // �궘�젣 �떎�뙣
                                         }, 100);
                                     }
-
                                     $rootScope.spinner = false;
                                 });
+
+                            } else {//  �꽑�깮 �븳 �씠�뒋留� �궘�젣
+                                //  �궘�젣 �븣由�
+                                SweetAlert.swal({
+                                        title : $filter("translate")("issue.deleteIssue"), // �씠�뒋 �궘�젣
+                                        text : $filter("translate")("issue.wantToDeleteOnlySelectIssue"), // �꽑�깮�븳 �씠�뒋留� �궘�젣�븯寃좎뒿�땲源�? �궘�젣�맂 �씠�뒋�� 蹂듦뎄�븷 �닔 �뾾�뒿�땲�떎.
+                                        type : "warning",
+                                        showCancelButton : true,
+                                        confirmButtonColor : "#DD6B55",
+                                        confirmButtonText : $filter("translate")("common.delete"), // �궘�젣
+                                        cancelButtonText : $filter("translate")("common.cancel"), // 痍⑥냼
+                                        closeOnConfirm : false,
+                                        closeOnCancel : true
+                                    },
+                                    function (isConfirm) {
+                                        SweetAlert.close();
+
+                                        if (isConfirm) {
+                                            $rootScope.spinner = true;
+
+                                            Issue.remove($resourceProvider.getContent(
+                                                { removeIds : removeIds },
+                                                $resourceProvider.getPageContent(0, 0))).then(function (result) {
+
+                                                if (result.data.message.status === "success") {
+                                                    $timeout(function () {
+                                                        SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // �궘�젣 �꽦怨�
+                                                    }, 100);
+
+                                                    $scope.fn.listView();
+
+                                                    $scope.fn.getPageList(0);
+                                                }
+                                                else {
+                                                    $timeout(function () {
+                                                        SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // �궘�젣 �떎�뙣
+                                                    }, 100);
+                                                }
+
+                                                $rootScope.spinner = false;
+                                            });
+                                        }
+                                    });
                             }
                         });
+                    } else {
+                        //  �궘�젣 �븣由�
+                        SweetAlert.swal({
+                                title : $filter("translate")("issue.deleteIssue"), // �씠�뒋 �궘�젣
+                                text : $filter("translate")("issue.wantToDeleteSelectIssue"), // �꽑�깮�븳 �씠�뒋�쓣 �궘�젣�븯寃좎뒿�땲源�? �궘�젣�맂 �씠�뒋�� 蹂듦뎄�븷 �닔 �뾾�뒿�땲�떎.
+                                type : "warning",
+                                showCancelButton : true,
+                                confirmButtonColor : "#DD6B55",
+                                confirmButtonText : $filter("translate")("common.delete"), // �궘�젣
+                                cancelButtonText : $filter("translate")("common.cancel"), // 痍⑥냼
+                                closeOnConfirm : false,
+                                closeOnCancel : true
+                            },
+                            function (isConfirm) {
+                                SweetAlert.close();
+
+                                if (isConfirm) {
+                                    $rootScope.spinner = true;
+
+                                    Issue.remove($resourceProvider.getContent(
+                                        { removeIds : removeIds },
+                                        $resourceProvider.getPageContent(0, 0))).then(function (result) {
+
+                                        if (result.data.message.status === "success") {
+                                            $timeout(function () {
+                                                SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // �궘�젣 �꽦怨�
+                                            }, 100);
+
+                                            $scope.fn.listView();
+
+                                            $scope.fn.getPageList(0);
+                                        }
+                                        else {
+                                            $timeout(function () {
+                                                SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // �궘�젣 �떎�뙣
+                                            }, 100);
+                                        }
+
+                                        $rootScope.spinner = false;
+                                    });
+                                }
+                            });
+                    }
                 }
 
                 //  �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙
diff --git a/src/main/webapp/scripts/components/issue/issue.service.js b/src/main/webapp/scripts/components/issue/issue.service.js
index d606b2b..e4c3f90 100644
--- a/src/main/webapp/scripts/components/issue/issue.service.js
+++ b/src/main/webapp/scripts/components/issue/issue.service.js
@@ -92,6 +92,18 @@
                     return response;
                 });
             },
+            removeAllIssues : function (conditions) {
+                return $http.post("issue/removeAll", conditions).then(function (response) {
+                    $log.debug("�븯�쐞�씠�뒋 �궘�젣 寃곌낵 : ", response);
+                    return response;
+                });
+            },
+            /*removeDownIssues : function (conditions) {
+                return $http.post("issue/removeDown", conditions).then(function (response) {
+                    $log.debug("�븯�쐞�씠�뒋 �궘�젣 寃곌낵 : ", response);
+                    return response;
+                });
+            },*/
             importExcel : function (conditions) {
                 conditions.url = "issue/importExcel";
                 return $upload.upload(conditions).then(function (response) {

--
Gitblit v1.8.0