From 909a0f1be2fddf26e9639dd189e3e7261040ac12 Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 금, 07 1월 2022 16:56:07 +0900
Subject: [PATCH] 전체 이슈 목록 메뉴 추가

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java                |   17 ++++-
 src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java                 |    9 +++
 src/main/webapp/scripts/app/issue/issueManager.controller.js                     |    4 +
 src/main/webapp/scripts/app/common/common.controller.js                          |   14 +++-
 src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java     |   10 ++
 src/main/webapp/assets/styles/main.css                                           |    4 +
 src/main/java/kr/wisestone/owl/repository/IssueTableConfigRepository.java        |    2 
 src/main/java/kr/wisestone/owl/service/impl/IssueTypeCustomFieldServiceImpl.java |   15 +++-
 src/main/webapp/scripts/app/issue/issueList.controller.js                        |   47 +++++++++------
 src/main/resources/mybatis/query-template/issueTypeCustomField-template.xml      |   13 ++++
 src/main/webapp/i18n/ko/global.json                                              |    1 
 src/main/java/kr/wisestone/owl/mapper/IssueTypeCustomFieldMapper.java            |    2 
 src/main/webapp/views/common/sidebar.html                                        |   36 ++++++++---
 13 files changed, 130 insertions(+), 44 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/mapper/IssueTypeCustomFieldMapper.java b/src/main/java/kr/wisestone/owl/mapper/IssueTypeCustomFieldMapper.java
index 28c8262..9ba0f9e 100644
--- a/src/main/java/kr/wisestone/owl/mapper/IssueTypeCustomFieldMapper.java
+++ b/src/main/java/kr/wisestone/owl/mapper/IssueTypeCustomFieldMapper.java
@@ -12,4 +12,6 @@
 @Repository
 public interface IssueTypeCustomFieldMapper {
     List<IssueTypeCustomFieldVo> findByIssueType(IssueTypeCustomFieldCondition condition);
+
+    List<IssueTypeCustomFieldVo> findByWorkspaceId(IssueTypeCustomFieldCondition condition);
 }
diff --git a/src/main/java/kr/wisestone/owl/repository/IssueTableConfigRepository.java b/src/main/java/kr/wisestone/owl/repository/IssueTableConfigRepository.java
index 9b7215f..2637853 100644
--- a/src/main/java/kr/wisestone/owl/repository/IssueTableConfigRepository.java
+++ b/src/main/java/kr/wisestone/owl/repository/IssueTableConfigRepository.java
@@ -9,6 +9,8 @@
 public interface IssueTableConfigRepository extends JpaRepository<IssueTableConfig, Long> {
     List<IssueTableConfig> findByUserIdAndWorkspaceIdAndIssueTypeIdAndIssueTableType(@Param("userId") Long userId, @Param("workspaceId") Long workspaceId, @Param("issueTypeId") Long issueTypeId, @Param("issueTableType") int issueTableType);
 
+    List<IssueTableConfig> findByUserIdAndWorkspaceIdAndIssueTableType(@Param("userId") Long userId, @Param("workspaceId") Long workspaceId, @Param("issueTableType") int issueTableType);
+
     List<IssueTableConfig> findByIssueTypeIdAndIssueTableType(@Param("issueTypeId") Long issueTypeId, @Param("issueTableType") int issueTableType);
 
 }
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 935974a..874669b 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -3862,17 +3862,26 @@
     @Override
     public void findPartner(Map<String, Object> resJsonData, Map<String, Object> params) {
         Long issueTypeId = MapUtil.getLong(params, "issueTypeId");
-        IssueType issueType = this.issueTypeService.getIssueType(issueTypeId); // �씠�뒋�쓽 �씠�뒋�쑀�삎 媛앹껜
-        Integer using = issueType.getUsePartner() != null ? issueType.getUsePartner().intValue() : 0; // �씠�뒋�쑀�삎蹂꾨줈 �궗�슜以묒씤 �뾽泥�/ISP/�샇�뒪�똿 媛�
-
         List<UsePartnerVo> usePartnerVos = Lists.newArrayList();
+        Integer using = 0;
+
+        if (issueTypeId != null) {
+            IssueType issueType = this.issueTypeService.getIssueType(issueTypeId); // �씠�뒋�쓽 �씠�뒋�쑀�삎 媛앹껜
+            using = issueType.getUsePartner() != null ? issueType.getUsePartner().intValue() : 0; // �씠�뒋�쑀�삎蹂꾨줈 �궗�슜以묒씤 �뾽泥�/ISP/�샇�뒪�똿 媛�
+        } else {
+            for (int partner : UsePartner.partners) {
+                using += partner;
+            }
+        }
+
         for (Integer usePartner : UsePartner.partners) { //1(�뾽泥�), 2(ISP), 4(�샇�뒪�똿)
             UsePartnerVo usePartnerVo = UsePartner.checkUsePartner(using, usePartner);
             if (usePartnerVo != null) {
                 usePartnerVos.add(usePartnerVo);
             }
-            resJsonData.put(Constants.RES_KEY_CONTENTS, usePartnerVos);
         }
+
+        resJsonData.put(Constants.RES_KEY_CONTENTS, usePartnerVos);
     }
 
     @Override
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java
index dcdbf65..7fe16d8 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java
@@ -90,8 +90,14 @@
     @Override
     @Transactional(readOnly = true)
     public IssueTableConfig findByUserIdAndWorkspaceIdAndIssueTypeIdAndIssueTableType(Long issueTypeId, int issueTableType) {
-        List<IssueTableConfig> issueTableConfigList = this.issueTableConfigRepository.findByUserIdAndWorkspaceIdAndIssueTypeIdAndIssueTableType(this.webAppUtil.getLoginId(),
-                this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId(), issueTypeId, issueTableType);
+        List<IssueTableConfig> issueTableConfigList = null;
+        if (issueTypeId != null) {
+            issueTableConfigList = this.issueTableConfigRepository.findByUserIdAndWorkspaceIdAndIssueTypeIdAndIssueTableType(this.webAppUtil.getLoginId(),
+                    this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId(), issueTypeId, issueTableType);
+        } else {
+            issueTableConfigList = this.issueTableConfigRepository.findByUserIdAndWorkspaceIdAndIssueTableType(this.webAppUtil.getLoginId(),
+                    this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId(), issueTableType);
+        }
 
         if (issueTableConfigList != null && issueTableConfigList.size() > 0) {
             return  issueTableConfigList.get(0);
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueTypeCustomFieldServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueTypeCustomFieldServiceImpl.java
index 78286d0..249b1c6 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueTypeCustomFieldServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueTypeCustomFieldServiceImpl.java
@@ -194,14 +194,21 @@
     @Transactional(readOnly = true)
     public List<IssueTypeCustomFieldVo> findCustomFieldByIssueType(Map<String, Object> resJsonData, IssueTypeCustomFieldCondition condition) {
         List<IssueTypeCustomFieldVo> issueTypeCustomFieldVos = Lists.newArrayList();
-
-        IssueType issueType = this.issueTypeService.getIssueType(condition.getIssueTypeId());
-        condition.setIssueTypeId(issueType.getId());
+        List<IssueTypeCustomFieldVo> issueTypeCustomFieldVo = Lists.newArrayList();
         condition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
-        List<IssueTypeCustomFieldVo> issueTypeCustomFieldVo = this.issueTypeCustomFieldMapper.findByIssueType(condition);
+
+        if (condition.getIssueTypeId() != null) {
+            IssueType issueType = this.issueTypeService.getIssueType(condition.getIssueTypeId());
+            condition.setIssueTypeId(issueType.getId());
+            issueTypeCustomFieldVo = this.issueTypeCustomFieldMapper.findByIssueType(condition);
+        } else {
+            issueTypeCustomFieldVo = this.issueTypeCustomFieldMapper.findByWorkspaceId(condition);
+        }
+
         if (issueTypeCustomFieldVo != null && issueTypeCustomFieldVo.size() > 0) {
             issueTypeCustomFieldVos.addAll(issueTypeCustomFieldVo);
         }
+
         resJsonData.put(Constants.RES_KEY_CONTENTS, issueTypeCustomFieldVos);
         return issueTypeCustomFieldVos;
     }
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 74c96ee..5a9bebf 100644
--- a/src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java
+++ b/src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java
@@ -57,6 +57,7 @@
     private Boolean isTree; // �듃由ш뎄議� 紐⑤뱶 �씪�븣
     private Pageable relPageable;
     private Pageable downPageable;
+    private Boolean allIssue; // �쟾泥댁씠�뒋 蹂댁뿬二쇨린
 
     public IssueCondition(){}
 
@@ -573,4 +574,12 @@
     public void setDownPageable(Pageable downPageable) {
         this.downPageable = downPageable;
     }
+
+    public Boolean getAllIssue() {
+        return allIssue;
+    }
+
+    public void setAllIssue(Boolean allIssue) {
+        this.allIssue = allIssue;
+    }
 }
diff --git a/src/main/resources/mybatis/query-template/issueTypeCustomField-template.xml b/src/main/resources/mybatis/query-template/issueTypeCustomField-template.xml
index 28cd687..add6abf 100644
--- a/src/main/resources/mybatis/query-template/issueTypeCustomField-template.xml
+++ b/src/main/resources/mybatis/query-template/issueTypeCustomField-template.xml
@@ -17,4 +17,17 @@
         AND ws.id = #{workspaceId}
     </select>
 
+    <select id="findByWorkspaceId" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.IssueTypeCustomFieldCondition">
+        SELECT
+            DISTINCT(cf.id) AS id,
+            cf.name AS name,
+            cf.custom_field_type as customFieldType,
+            cf.default_value as defaultValue
+        FROM issue_type_custom_field it
+         INNER JOIN custom_field cf ON cf.id = it.custom_field_id
+         INNER JOIN workspace ws on cf.workspace_id = ws.id
+        WHERE cf.use_flag = 'Y'
+          AND ws.id = #{workspaceId}
+    </select>
+
 </mapper>
\ No newline at end of file
diff --git a/src/main/webapp/assets/styles/main.css b/src/main/webapp/assets/styles/main.css
index bedb35f..3105edb 100644
--- a/src/main/webapp/assets/styles/main.css
+++ b/src/main/webapp/assets/styles/main.css
@@ -28573,6 +28573,10 @@
     margin-top: 50px; !important;
 }
 
+.mt--14 {
+    margin-top: -14px; !important;
+}
+
 .ml-10 {
     margin-left: 10px !important;
 }
diff --git a/src/main/webapp/i18n/ko/global.json b/src/main/webapp/i18n/ko/global.json
index 01a1d9d..3c177e3 100644
--- a/src/main/webapp/i18n/ko/global.json
+++ b/src/main/webapp/i18n/ko/global.json
@@ -668,6 +668,7 @@
         "failedToReceiveEnquiry": "臾몄쓽 �젒�닔 �떎�뙣"
     },
     "common": {
+        "allIssueList" : "�쟾泥� �씠�뒋",
         "urgent": "湲닿툒",
         "high": "�넂�쓬",
         "medium": "蹂댄넻",
diff --git a/src/main/webapp/scripts/app/common/common.controller.js b/src/main/webapp/scripts/app/common/common.controller.js
index 3ca4ae2..f40bcbe 100644
--- a/src/main/webapp/scripts/app/common/common.controller.js
+++ b/src/main/webapp/scripts/app/common/common.controller.js
@@ -91,10 +91,16 @@
 
                 function changeIssueListMenu(issueTypeId, changeProject = true) {
                     $rootScope.issueTypeMenu = null;
-                    for (var issueType of $rootScope.workIssueTypes) {
-                        if (issueType.id === issueTypeId) {
-                            $rootScope.issueTypeMenu = issueType;
-                            break;
+                    $rootScope.allIssueList = false;
+                    if (issueTypeId == null) {
+                        $rootScope.allIssueList = true;
+                        moveMenu("issues.list");
+                    }else {
+                        for (var issueType of $rootScope.workIssueTypes) {
+                            if (issueType.id === issueTypeId) {
+                                $rootScope.issueTypeMenu = issueType;
+                                break;
+                            }
                         }
                     }
 
diff --git a/src/main/webapp/scripts/app/issue/issueList.controller.js b/src/main/webapp/scripts/app/issue/issueList.controller.js
index 5915af6..15c8ac4 100644
--- a/src/main/webapp/scripts/app/issue/issueList.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueList.controller.js
@@ -97,6 +97,7 @@
                     hideCompleteIssue : false,
                     hideDownIssue : true,
                     listMode : 0, // 紐⑸줉 紐⑤뱶 0:湲곕낯 由ъ뒪�듃 1:�듃由ш뎄議� 由ъ뒪�듃
+                    allIssue : false
                 };
 
                 //  �뀒�씠釉� �씠踰ㅽ듃
@@ -159,7 +160,7 @@
                 }
 
                 //  �꽌踰꾩뿉 ���옣�븳 �씠�뒋 寃��깋 議곌굔�쓣 媛��졇�삩�떎.
-                function getVmSearchObject(keyWord = null) {
+                function getVmSearchObject(keyWord = null, allIssue = false) {
 
                     IssueSearch.detail($resourceProvider.getContent({}, $resourceProvider.getPageContent(0, 0))).then(function (result) {
 
@@ -173,9 +174,9 @@
                                 // $scope.vm.projects = issueListSearchObject.projects;
                                 // $scope.vm.registers = issueListSearchObject.registers;
 
-                                $scope.fn.getPageList(0, true, keyWord);
+                                $scope.fn.getPageList(0, true, keyWord, allIssue);
                             } else {
-                                $scope.fn.getPageList(0, false, keyWord);
+                                $scope.fn.getPageList(0, false, keyWord, allIssue);
                             }
                         }
                         else {
@@ -481,6 +482,7 @@
                 //  �씠�뒋 寃��깋 議곌굔�쓣 留뚮뱺�떎.
                 function makeSearchConditions() {
                     var conditions = {
+                        allIssue : $scope.vm.allIssue,
                         keyWord : $scope.vm.search.keyWord,
                         title : $scope.vm.search.title,
                         description : $scope.vm.search.description,
@@ -622,10 +624,14 @@
                 }
 
                 //  �씠�뒋 紐⑸줉�쓣 議고쉶�븳�떎.
-                function getPageList(selectedPage, detail = false, keyWord = null) {
+                function getPageList(selectedPage, detail = false, keyWord = null, allIssue = false) {
                     $rootScope.spinner = true;  //  �봽濡쒓렇�옒�뒪 諛�
                     if (selectedPage < 0) {
                         selectedPage = 0;
+                    }
+                    if (allIssue) {
+                        $scope.vm.allIssue = true;
+                        $rootScope.$broadcast("getAllIssuePageList");
                     }
 
                     if (keyWord != null) {
@@ -690,6 +696,9 @@
                         $resourceProvider.getPageContent(currentPage, $scope.vm.page.selectedPageRowCount))).then(function (result) {
 
                         if (result.data.message.status === "success") {
+                            $scope.vm.page.selectedPage = currentPage + 1;
+                            $scope.vm.responseData = result.data;
+
                             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++) {
@@ -710,8 +719,6 @@
                                 $scope.vm.projectKey = result.data.data[0].projectKey;
                                 $scope.vm.issueNumber = result.data.data[0].issueNumber;
                                 $scope.vm.projectName = result.data.data[0].projectName;
-                                $scope.vm.page.selectedPage = currentPage + 1;
-                                $scope.vm.responseData = result.data;
 
                                 if (detail) {
                                     changeDetailView(result.data.data[0].id);
@@ -1227,20 +1234,18 @@
                 function getIssueTableConfigs() {
                     var deferred = $q.defer();
 
-                    if ($rootScope.issueTypeMenu != null){
-                        var content = {
-                            issueTypeId : $rootScope.getCurrentIssueTypeId()
+                    var content = {
+                        issueTypeId : $rootScope.getCurrentIssueTypeId()
+                    }
+
+                    IssueTableConfig.detail($resourceProvider.getContent(content,
+                        $resourceProvider.getPageContent(0, 1000))).then(function (result) {
+                        if (result.data.message.status !== "success") {
+                            SweetAlert.error($filter("translate")("issue.failedToIssueTableColumnLookup"), result.data.message.message); // �씠�뒋 �뀒�씠釉� 而щ읆 議고쉶 �떎�뙣
                         }
 
-                        IssueTableConfig.detail($resourceProvider.getContent(content,
-                            $resourceProvider.getPageContent(0, 1000))).then(function (result) {
-                            if (result.data.message.status !== "success") {
-                                SweetAlert.error($filter("translate")("issue.failedToIssueTableColumnLookup"), result.data.message.message); // �씠�뒋 �뀒�씠釉� 而щ읆 議고쉶 �떎�뙣
-                            }
-
-                            deferred.resolve(result.data.data);
-                        });
-                    }
+                        deferred.resolve(result.data.data);
+                    });
 
                     return deferred.promise;
                 }
@@ -1319,6 +1324,8 @@
                         // $rootScope.issueTypeId = $rootScope.issueTypeMenu.id;
                     }
 
+                    var allIssue = $rootScope.allIssueList;
+
                     var promises = {
                         getIssueTypes : $scope.fn.getIssueTypes(),
                         getPriorities : $scope.fn.getPriorities(),
@@ -1348,9 +1355,9 @@
 
                             //  �씠�뒋 �뀒�씠釉� �꽕�젙
                             $scope.fn.makeTableConfigs();
-                            //  �꽌踰꾩뿉 ���옣�븳 �씠�뒋 寃��깋 議곌굔�쓣 媛��졇���꽌 �씠�뒋 紐⑸줉 寃��깋�쓣 吏꾪뻾�븳�떎.
-                            $scope.fn.getVmSearchObject(paramKeyWord);
                         });
+                        //  �꽌踰꾩뿉 ���옣�븳 �씠�뒋 寃��깋 議곌굔�쓣 媛��졇���꽌 �씠�뒋 紐⑸줉 寃��깋�쓣 吏꾪뻾�븳�떎.
+                        $scope.fn.getVmSearchObject(paramKeyWord, allIssue);
                     });
                 }
 
diff --git a/src/main/webapp/scripts/app/issue/issueManager.controller.js b/src/main/webapp/scripts/app/issue/issueManager.controller.js
index 169be48..5ad858c 100644
--- a/src/main/webapp/scripts/app/issue/issueManager.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueManager.controller.js
@@ -55,6 +55,10 @@
                     $scope.vm.pageTitle = $filter("translate")("issue.searchIssue");
                 });
 
+                $scope.$on("getAllIssuePageList", function (event, args) {
+                    $scope.vm.pageTitle = $filter("translate")("common.allIssueList");
+                });
+
                 function start() {
                     if ($rootScope.issueTypeMenu != null) {
                         $scope.vm.pageTitle = $rootScope.issueTypeMenu.name;
diff --git a/src/main/webapp/views/common/sidebar.html b/src/main/webapp/views/common/sidebar.html
index cdb4dec..00ac47a 100644
--- a/src/main/webapp/views/common/sidebar.html
+++ b/src/main/webapp/views/common/sidebar.html
@@ -253,8 +253,34 @@
                 <span translate="common.dashboard">���떆蹂대뱶</span>
             </a>
         </li>
+
+        <li class="sub-header">
+            <span>Project</span>
+        </li>
+        <li>
+            <a ui-sref="projects.list" tabindex="-1">
+                <div class="icon-w">
+                    <div class="os-icon os-icon-package"></div>
+                </div>
+                <span translate="common.project">�봽濡쒖젥�듃</span></a>
+        </li>
+
         <li class="sub-header">
             <span>ISSUE LIST</span>
+            <span class="mt--14">[{{$root.workProject.name}}]</span>
+        </li>
+
+        <li>
+            <a class="cursor" tabindex="-1" ng-click="fn.changeIssueListMenu(null, false)">
+                <div class="icon-w">
+                    <div class="os-icon os-icon-layout"></div>
+                </div>
+                <span translate="common.allIssueList">�쟾泥댁씠�뒋</span>
+            </a>
+        </li>
+
+        <li class="sub-header">
+            <span>ISSUE TYPE LIST</span>
         </li>
 
         <li ng-repeat="issueType in $root.workIssueTypes" >
@@ -291,16 +317,6 @@
                 <span translate="calendar.calendarTitle">罹섎┛�뜑</span></a>
         </li>
         -->
-        <li class="sub-header">
-            <span>Project</span>
-        </li>
-        <li>
-            <a ui-sref="projects.list" tabindex="-1">
-                <div class="icon-w">
-                    <div class="os-icon os-icon-package"></div>
-                </div>
-                <span translate="common.project">�봽濡쒖젥�듃</span></a>
-        </li>
 
         <li class="sub-header" ng-if="$root.checkMngPermissionSettings()">
             <span>custom workflow</span>

--
Gitblit v1.8.0