From 24fa2d1e6138c3ad6c4db2790ee98edcc42b459c Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 화, 14 12월 2021 10:52:34 +0900
Subject: [PATCH] - 이슈 목록 하위이슈 숨기기 버튼 생성 - 이슈 Tree 목록 중복 이슈 필터링

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java |   21 ++++++++--
 src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java  |   27 ++++++++++---
 src/main/webapp/views/issue/issueListNormal.html                  |    8 +++-
 src/main/resources/mybatis/query-template/issue-template.xml      |   29 ++++++++++----
 src/main/webapp/scripts/app/issue/issueList.controller.js         |   21 +++++++---
 src/main/webapp/custom_components/js-tree/js-tree.directive.js    |   10 ++++
 6 files changed, 87 insertions(+), 29 deletions(-)

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 ddedab6..fcb0a1e 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -802,6 +802,7 @@
         if (issueCondition.getTree()) {
             this.setDownIssues(user, issueVos);
             this.setRelationIssues(issueVos);
+            this.setParentIssue(issueVos);
         }
         this.setCountDownIssues(issueVos);
 
@@ -829,9 +830,9 @@
                 IssueVo addIssueVo = ConvertUtil.copyProperties(downIssue, IssueVo.class);
                 addIssueVo.setIssueTypeId(downIssue.getIssueType().getId());
                 downIssueVos.add(addIssueVo);
-
             }
             issueVo.setIssueDownVos(downIssueVos);
+
             if (downIssueVos.size() > 0) {
                 this.setDownIssues(user, downIssueVos);
             }
@@ -841,11 +842,12 @@
             this.setIssueDepartmentList(issueVos, issueCondition, user);
             //  �벑濡앹옄 �젙蹂� 異붽�
             this.setRegister(issueVos);  //  �떞�떦�옄 �젙蹂� �뀑�똿
-
             //  �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂� 異붽�
             this.setIssueCustomFieldValue(issueVos, issueCondition);
-
-            this.SetWorkflowDepartment(issueVos); //�썙�겕�뵆濡쒖슦�뿉 �꽕�젙�븳 �떞�떦遺��꽌 媛��졇�삤湲�
+            //�썙�겕�뵆濡쒖슦�뿉 �꽕�젙�븳 �떞�떦遺��꽌 媛��졇�삤湲�
+            this.SetWorkflowDepartment(issueVos);
+            // �긽�쐞 �씠�뒋 泥댄겕
+            this.setParentIssue(issueVos);
         }
     }
 
@@ -859,6 +861,17 @@
         }
     }
 
+    // �긽�쐞 �씠�뒋 泥댄겕
+    private void setParentIssue(List<IssueVo> issueVos) {
+        for(IssueVo issueVo : issueVos) {
+            if(issueVo.getParentIssueId() != null) {
+                Issue parentIssue = this.getIssue(issueVo.getParentIssueId());
+                issueVo.setParentIssueVo(ConvertUtil.copyProperties(parentIssue, IssueVo.class));
+                ConvertUtil.copyProperties(issueVo.getParentIssueVo(), issueVo);
+            }
+        }
+    }
+
     @Override
     @Transactional(readOnly = true)
     public void setCountDownIssues(List<IssueVo> issueVos) {
diff --git a/src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java b/src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java
index fcddc53..0113fcd 100644
--- a/src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java
+++ b/src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java
@@ -53,7 +53,8 @@
     private List<Long> statusIds = Lists.newArrayList();
     private List<Long> excludeIds = Lists.newArrayList();
     private List<Long> myDepartmentIds; // �궡媛� �냽�빐�엳�뒗 遺��꽌 ID
-    private Boolean hideIssue;
+    private Boolean hideDownIssue;
+    private Boolean hideCompleteIssue;
     private Boolean isTree; // �듃由ш뎄議� 紐⑤뱶 �씪�븣
 
     public IssueCondition(){}
@@ -181,8 +182,12 @@
             condition.setId(MapUtil.getLong(conditions, "issueId"));
         }
 
-        if (MapUtil.getBoolean(conditions, "hideIssue") != null) {
-            condition.setHideIssue(MapUtil.getBoolean(conditions, "hideIssue"));
+        if (MapUtil.getBoolean(conditions, "hideDownIssue") != null) {
+            condition.setHideDownIssue(MapUtil.getBoolean(conditions, "hideDownIssue"));
+        }
+
+        if (MapUtil.getBoolean(conditions, "hideCompleteIssue") != null) {
+            condition.setHideCompleteIssue(MapUtil.getBoolean(conditions, "hideCompleteIssue"));
         }
 
         if (MapUtil.getBoolean(conditions, "isTree") != null) {
@@ -510,12 +515,20 @@
         this.myDepartmentIds = myDepartmentIds;
     }
 
-    public Boolean getHideIssue() {
-        return hideIssue;
+    public Boolean getHideDownIssue() {
+        return hideDownIssue;
     }
 
-    public void setHideIssue(Boolean hideIssue) {
-        this.hideIssue = hideIssue;
+    public void setHideDownIssue(Boolean hideDownIssue) {
+        this.hideDownIssue = hideDownIssue;
+    }
+
+    public Boolean getHideCompleteIssue() {
+        return hideCompleteIssue;
+    }
+
+    public void setHideCompleteIssue(Boolean hideCompleteIssue) {
+        this.hideCompleteIssue = hideCompleteIssue;
     }
 
     public Boolean getTree() {
diff --git a/src/main/resources/mybatis/query-template/issue-template.xml b/src/main/resources/mybatis/query-template/issue-template.xml
index d4dea19..6dc4ea1 100644
--- a/src/main/resources/mybatis/query-template/issue-template.xml
+++ b/src/main/resources/mybatis/query-template/issue-template.xml
@@ -105,7 +105,13 @@
             ANd issue.complete_date <![CDATA[ <= ]]> #{endCompleteDate}
         </if>
 
-        <if test="hideIssue != null and hideIssue == true">
+        <if test="combinationIssueNumber == null or combinationIssueNumber.equals('')">
+            <if test="hideDownIssue != null and hideDownIssue == true">
+                AND issue.parent_issue_id IS NULL
+            </if>
+        </if>
+
+        <if test="hideCompleteIssue != null and hideCompleteIssue == true">
             AND issue_status.issue_status_type != 'CLOSE'
         </if>
 
@@ -206,9 +212,6 @@
                 </foreach>
             </when>
         </choose>
-        <if test="combinationIssueNumber == null or combinationIssueNumber.equals('')">
-            AND issue.parent_issue_id IS NULL
-        </if>
         AND issue.reverse_index <![CDATA[ < ]]> 0
         AND workspace.id = #{workspaceId}
         GROUP BY issue.id
@@ -554,7 +557,6 @@
         LEFT OUTER JOIN issue_status iss ON iss.id = issue.issue_status_id
         LEFT OUTER JOIN user_department ud ON ud.department_id = isd.department_id
         WHERE 1=1
-        AND issue.parent_issue_id IS NULL
         <if test="title != null and !title.equals('') ">
             AND issue.title like CONCAT('%',#{title},'%')
         </if>
@@ -591,8 +593,14 @@
             ANd issue.complete_date <![CDATA[ <= ]]> #{endCompleteDate}
         </if>
 
-        <if test="hideIssue != null and hideIssue == true">
+        <if test="hideCompleteIssue != null and hideCompleteIssue == true">
             AND iss.issue_status_type != 'CLOSE'
+        </if>
+
+        <if test="combinationIssueNumber == null or combinationIssueNumber.equals('')">
+            <if test="hideDownIssue != null and hideDownIssue == true">
+                AND issue.parent_issue_id IS NULL
+            </if>
         </if>
 
         <choose>
@@ -692,7 +700,6 @@
         LEFT OUTER JOIN issue_department isd ON issue.id = isd.issue_id
         LEFT OUTER JOIN issue_status iss ON iss.id = issue.issue_status_id
         WHERE 1=1
-        AND issue.parent_issue_id IS NULL
         <if test="title != null and !title.equals('') ">
             AND issue.title like CONCAT('%',#{title},'%')
         </if>
@@ -729,7 +736,13 @@
             ANd issue.complete_date <![CDATA[ <= ]]> #{endCompleteDate}
         </if>
 
-        <if test="hideIssue != null and hideIssue == true">
+        <if test="combinationIssueNumber == null or combinationIssueNumber.equals('')">
+            <if test="hideDownIssue != null and hideDownIssue == true">
+                AND issue.parent_issue_id IS NULL
+            </if>
+        </if>
+
+        <if test="hideCompleteIssue != null and hideCompleteIssue == true">
             AND iss.issue_status_type != 'CLOSE'
         </if>
 
diff --git a/src/main/webapp/custom_components/js-tree/js-tree.directive.js b/src/main/webapp/custom_components/js-tree/js-tree.directive.js
index dea51c0..203870b 100644
--- a/src/main/webapp/custom_components/js-tree/js-tree.directive.js
+++ b/src/main/webapp/custom_components/js-tree/js-tree.directive.js
@@ -22,7 +22,15 @@
 
                         //  �뀒�씠釉� �젙蹂� 媛��졇�삤湲�
                         function getResponseData() {
-                            return $scope.data;
+                            const data = $scope.data;
+
+                            var filterData = data.filter(function(item, idx){
+                                return data.findIndex(function(item2, idx2){
+                                    return item.id === item2.id
+                                }) == idx;
+                            });
+
+                            return filterData;
                         }
                     },
                     link : function (scope, element, attrs) {
diff --git a/src/main/webapp/scripts/app/issue/issueList.controller.js b/src/main/webapp/scripts/app/issue/issueList.controller.js
index a4eeb0e..8d51e5a 100644
--- a/src/main/webapp/scripts/app/issue/issueList.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueList.controller.js
@@ -90,7 +90,8 @@
                     issueTableConfigs : [],  //  �씠�뒋 �뀒�씠釉� �꽕�젙
                     issueTreeConfigs : [],  //  �씠�뒋 �뀒�씠釉� �꽕�젙
                     parentIssueId : "",
-                    hideIssue : false,
+                    hideCompleteIssue : false,
+                    hideDownIssue : true,
                     listMode : 0, // 紐⑸줉 紐⑤뱶 0:湲곕낯 由ъ뒪�듃 1:�듃由ш뎄議� 由ъ뒪�듃
                 };
 
@@ -441,7 +442,8 @@
                         endStartDate : "",
                         beginCompleteDate : "",
                         endCompleteDate : "",
-                        hideIssue : $scope.vm.hideIssue,
+                        hideCompleteIssue: $scope.vm.hideCompleteIssue,
+                        hideDownIssue : $scope.vm.hideDownIssue,
                         isTree : $scope.vm.listMode === 1,
                         projectIds : (function () {
                             var projectIds = [];
@@ -574,8 +576,12 @@
                         selectedPage = 0;
                     }
 
-                    if ($scope.vm.hideIssue) {
-                        $scope.vm.hideIssue = true;
+                    if ($scope.vm.hideCompleteIssue) {
+                        $scope.vm.hideCompleteIssue = true;
+                    }
+
+                    if ($scope.vm.hideDownIssue) {
+                        $scope.vm.hideDownIssue = true;
                     }
                     //  �쁽�옱 �럹�씠吏� �젙蹂�
                     var currentPage = 0;
@@ -626,11 +632,12 @@
                             if (result.data.data !=  null && result.data.data.length > 0) {
                                 //var resultSize = result.data.data.length;
                                 for (var i = 0; i < result.data.data.length; i++) {
-                                    if (result.data.data[i].parentIssueId != null) {
+                                    /*if (result.data.data[i].parentIssueId != null) {//�븯�쐞�씠�뒋�뒗 由ъ뒪�듃�뿉�꽌 �궘�젣
                                         result.data.data.splice(i, 1);
                                         i--;
-                                    }else if ($scope.vm.search.issueTypeIds !== null && $scope.vm.search.issueTypeIds.length > 0
-                                            && result.data.data[i].issueTypeId !== $scope.vm.search.issueTypeIds[0].fieldKey) {
+                                    }else*/
+                                    if ($scope.vm.search.issueTypeIds !== null && $scope.vm.search.issueTypeIds.length > 0
+                                                && result.data.data[i].issueTypeId !== $scope.vm.search.issueTypeIds[0].fieldKey) { //�씠�뒋���엯 泥댄겕
                                         result.data.data.splice(i, 1);
                                         i--;
                                     }
diff --git a/src/main/webapp/views/issue/issueListNormal.html b/src/main/webapp/views/issue/issueListNormal.html
index 9de5670..847261d 100644
--- a/src/main/webapp/views/issue/issueListNormal.html
+++ b/src/main/webapp/views/issue/issueListNormal.html
@@ -336,8 +336,12 @@
 
                             <!--    �슦痢�  -->
                             <div class="col-5" >
-                                <span class="issue-detail-label" style="position: relative; left: 16.8rem; bottom: 5px"><span style="color: #0a7cf8">�뾾</span> �셿猷� �씠�뒋 �닲湲곌린</span>
-                                <label class='switch' style="left: 17.3rem"><input type='checkbox' ng-model='vm.hideIssue' ng-click='fn.getPageList(0)'>
+                                <span class="issue-detail-label" style="position: relative; left: 2.8rem; bottom: 5px"><span style="color: #0a7cf8">�뾾</span> �븯�쐞 �씠�뒋 �닲湲곌린</span>
+                                <label class='switch' style="left: 3.3rem"><input type='checkbox' ng-model='vm.hideDownIssue' ng-click='fn.getPageList(0)'>
+                                    <span class='slider round'></span>
+                                </label>
+                                <span class="issue-detail-label" style="position: relative; left: 5.8rem; bottom: 5px"><span style="color: #0a7cf8">�뾾</span> �셿猷� �씠�뒋 �닲湲곌린</span>
+                                <label class='switch' style="left: 6.3rem"><input type='checkbox' ng-model='vm.hideCompleteIssue' ng-click='fn.getPageList(0)'>
                                     <span class='slider round'></span>
                                 </label>
                                 <form class="form-inline justify-content-sm-end  pull-right" method="post" action="/issue/downloadExcel" name="issueListForm" >

--
Gitblit v1.8.0