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