From d3d9848c0833a0835eb2fac8345c0e406e066535 Mon Sep 17 00:00:00 2001 From: 박지현 <jhpark@maprex.co.kr> Date: 금, 11 3월 2022 15:50:43 +0900 Subject: [PATCH] 이슈 상세페이지 - 하위이슈: 완료이슈 숨기기 기능 추가 --- src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | 25 ++++++++++-- src/main/java/kr/wisestone/owl/service/IssueService.java | 2 + src/main/java/kr/wisestone/owl/repository/IssueRepository.java | 6 +++ src/main/webapp/views/issue/issueDetail.html | 60 +++++++++++++++++------------ src/main/webapp/scripts/app/issue/issueDetail.controller.js | 7 ++- 5 files changed, 69 insertions(+), 31 deletions(-) diff --git a/src/main/java/kr/wisestone/owl/repository/IssueRepository.java b/src/main/java/kr/wisestone/owl/repository/IssueRepository.java index eaeb137..accd3a1 100644 --- a/src/main/java/kr/wisestone/owl/repository/IssueRepository.java +++ b/src/main/java/kr/wisestone/owl/repository/IssueRepository.java @@ -1,10 +1,13 @@ package kr.wisestone.owl.repository; import kr.wisestone.owl.domain.Issue; +import kr.wisestone.owl.domain.enumType.IssueStatusType; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.EntityGraph; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import java.util.List; @@ -13,4 +16,7 @@ List<Issue> findByParentIssueId(@Param("parentIssueId") Long parentIssueId); Page<Issue> findByParentIssueId(@Param("parentIssueId") Long parentIssueId, Pageable pageable); + + @Query(value = "select i from Issue i where i.parentIssue.id = :parentIssueId and i.issueStatus.issueStatusType <> :issueStatusType") + Page<Issue> findByParentIssueId(@Param("parentIssueId") Long parentIssueId,@Param("issueStatusType") IssueStatusType issueStatusType, Pageable pageable); } diff --git a/src/main/java/kr/wisestone/owl/service/IssueService.java b/src/main/java/kr/wisestone/owl/service/IssueService.java index f0eccc6..83cd8b2 100644 --- a/src/main/java/kr/wisestone/owl/service/IssueService.java +++ b/src/main/java/kr/wisestone/owl/service/IssueService.java @@ -94,6 +94,8 @@ void setIssueDetail(IssueVo issueVo, Issue issue, User user); + void setIssueDetail(IssueVo issueVo, Issue issue, User user, boolean hideCompleteIssue); + void sendIssueEmail(IssueForm issueForm); void sendIssueEmailPartners(EmailTemplateForm emailTemplateForm, List<MultipartFile> files); 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 6cd7ff7..bdbb163 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java @@ -1661,6 +1661,7 @@ IssueVo issueVo = new IssueVo(); Pageable relPageable = issueCondition.getRelPageable(); Pageable downPageable = issueCondition.getDownPageable(); + boolean hideCompleteIssue = issueCondition.getHideCompleteIssue(); if (issueCondition.getId() != null) { Issue issue = this.getIssue(issueCondition.getId()); @@ -1692,11 +1693,11 @@ this.setAttachedFiles(issue, issueVo); // 泥⑤� �뙆�씪 �젙蹂� �뀑�똿 this.setIssueCustomFields(issue, issueVo); // �궗�슜�옄 �젙�쓽 �븘�뱶 媛� �젙蹂� �뀑�똿 this.setRelationIssue(issue, issueVo); //�뿰愿� �씪媛� �뀑�똿 - this.setDownIssues(issue, issueVo); //�븯�쐞 �씠�뒋 �꽭�똿 + this.setDownIssues(issue, issueVo, hideCompleteIssue); //�븯�쐞 �씠�뒋 �꽭�똿 break; case "02": // �봽濡쒖젥�듃, �씠�뒋 �쑀�삎, �씠�뒋 �긽�깭, �슦�꽑�닚�쐞, 以묒슂�룄, �떞�떦�옄, 泥⑤��뙆�씪, �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂�, �뙎湲�, 湲곕줉�쓣 �뀑�똿�븳�떎. - this.setIssueDetail(issueVo, issue, user); // �씠�뒋 �긽�꽭 �젙蹂대�� �뀑�똿�븳�떎. + this.setIssueDetail(issueVo, issue, user, hideCompleteIssue); // �씠�뒋 �긽�꽭 �젙蹂대�� �뀑�똿�븳�떎. this.setIssueTableConfigs(issue, issueVo, issueCondition); issueVo.setProjectVo(ConvertUtil.copyProperties(issue.getProject(), ProjectVo.class)); break; @@ -1731,6 +1732,10 @@ // �븯�쐞 �씠�뒋 �젙蹂대�� �뀑�똿�븳�떎 private void setDownIssues(Issue issue, IssueVo issueVo) { + setDownIssues(issue, issueVo, false); + } + + private void setDownIssues(Issue issue, IssueVo issueVo, boolean hideCompleteIssue) { Page<Issue> downIssues = null; List<Issue> downIssueList = this.issueRepository.findByParentIssueId(issue.getId()); @@ -1740,7 +1745,13 @@ startPage = (int) Math.floor(issueVo.getDownPage()/issueVo.getDownPageSize()); } Pageable pageable = PageRequest.of(startPage, issueVo.getDownPageSize()); - downIssues = this.issueRepository.findByParentIssueId(issue.getId(), pageable); + + if(hideCompleteIssue){ + downIssues = this.issueRepository.findByParentIssueId(issue.getId(), IssueStatusType.CLOSE, pageable); + }else { + downIssues = this.issueRepository.findByParentIssueId(issue.getId(), pageable); + } + } if(downIssues != null){ issueVo.setDownTotalPage(downIssues.getTotalPages()); @@ -1778,6 +1789,12 @@ @Override @Transactional(readOnly = true) public void setIssueDetail(IssueVo issueVo, Issue issue, User user) { + setIssueDetail(issueVo, issue, user, false); + } + + @Override + @Transactional(readOnly = true) + public void setIssueDetail(IssueVo issueVo, Issue issue, User user, boolean hideCompleteIssue) { // �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤 if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user, issueVo.getDepartmentVos())) { issueVo.setModifyPermissionCheck(Boolean.TRUE); @@ -1796,7 +1813,7 @@ this.setAttachedFiles(issue, issueVo); // 泥⑤� �뙆�씪 �젙蹂� �뀑�똿 this.setIssueCustomFields(issue, issueVo); // �궗�슜�옄 �젙�쓽 �븘�뱶 媛� �젙蹂� �뀑�똿 this.setRelationIssue(issue, issueVo); //�뿰愿� �씪媛� �뀑�똿 - this.setDownIssues(issue, issueVo); //�븯�쐞 �씪媛� �꽭�똿 + this.setDownIssues(issue, issueVo, hideCompleteIssue); //�븯�쐞 �씪媛� �꽭�똿 this.setIssueComments(issue, issueVo); // �뙎湲� �젙蹂� �뀑�똿 this.setIssueHistory(issue, issueVo); // �씠�뒋 湲곕줉 �젙蹂� �뀑�똿 diff --git a/src/main/webapp/scripts/app/issue/issueDetail.controller.js b/src/main/webapp/scripts/app/issue/issueDetail.controller.js index 6cbd9ca..962075f 100644 --- a/src/main/webapp/scripts/app/issue/issueDetail.controller.js +++ b/src/main/webapp/scripts/app/issue/issueDetail.controller.js @@ -58,6 +58,8 @@ $scope.fn.sendCommonMail = sendCommonMail; $scope.fn.getSubPageContent = getSubPageContent; + $scope.vm.hideCompleteIssue = true; + // �씠�뒋 紐⑸줉 而⑦듃濡ㅻ윭 vm, fn �긽�냽 以� $scope.vm.viewer = {}; // �쁽�옱 �씠�뒋 $scope.vm.images = []; // 泥⑤��맂 �뙆�씪 以� �씠誘몄� �뙆�씪 @@ -889,7 +891,7 @@ } }, true); - // 珥덇린�솕 �빐�빞�븷 �븷紐⑹쓣 吏��젙�븯�뿬 �떎瑜� �씠�뒋瑜� �겢由��븷 �븣 珥덇린�솕�빐以��떎. + // 珥덇린�솕 �빐�빞�븷 �빆紐⑹쓣 吏��젙�븯�뿬 �떎瑜� �씠�뒋瑜� �겢由��븷 �븣 珥덇린�솕�빐以��떎. function initReload() { $scope.vm.editor.issueStatus = false; $scope.vm.issueForm.issueStatusList = []; @@ -1109,7 +1111,7 @@ currentDownPage = selectedDownPage; } - // 珥덇린�솕 �빐�빞�븷 �븷紐⑹쓣 吏��젙�븯�뿬 �떎瑜� �씠�뒋瑜� �겢由��븷 �븣 珥덇린�솕�빐以��떎. + // 珥덇린�솕 �빐�빞�븷 �빆紐⑹쓣 吏��젙�븯�뿬 �떎瑜� �씠�뒋瑜� �겢由��븷 �븣 珥덇린�솕�빐以��떎. $scope.fn.initReload(); // $scope.fn.getRelTableConfigs(); // $scope.fn.getDownTableConfigs(); @@ -1130,6 +1132,7 @@ return id; })() , deep : "02", pageContent + , hideCompleteIssue : $scope.vm.hideCompleteIssue }, null); Issue.detail(content).then(function (result) { diff --git a/src/main/webapp/views/issue/issueDetail.html b/src/main/webapp/views/issue/issueDetail.html index 9b71d71..746d8be 100644 --- a/src/main/webapp/views/issue/issueDetail.html +++ b/src/main/webapp/views/issue/issueDetail.html @@ -566,7 +566,7 @@ </div> </div> - <div class="row mt-30"> + <div class="row mt-30 align-items-end" style="justify-content: space-between;"> <div class="col-md-10"> <span class="info_detail_font h3" translate="issue.relationIssue">�뿰愿� �씠�뒋</span> </div> @@ -589,17 +589,19 @@ </label> </div> </div> - <div class="btn-group" style="left: 975px; padding: 5px"> - <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 class="col-5" style="display: flex; justify-content: flex-end; align-items: center"> + <div class="btn-group" style="padding: 5px"> + <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> </div> @@ -660,7 +662,7 @@ </div> </div> - <div class="row mt-30"> + <div class="row mt-30 align-items-end" style="justify-content: space-between;"> <div class="col-md-8"> <span class="info_detail_font h3" translate="issue.downIssue">�븯�쐞 �씠�뒋</span> </div> @@ -689,18 +691,26 @@ </label> </div> </div> - <div class="btn-group" style="left: 730px; padding: 5px"> - <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 class="col-5" style="display: flex; justify-content: flex-end; align-items: center"> + <div style="display: flex; align-items: center; margin-right: 10px;"> + <span class="issue-detail-label" style="margin-right: 4px;padding-top: 6px;"><span style="color: #0a7cf8">�뾾</span> �셿猷� �씠�뒋 �닲湲곌린</span> + <label class='switch'><input type='checkbox' ng-model='vm.hideCompleteIssue' ng-click="fn.getIssueDetail(0,0)"> + <span class='slider round'></span> + </label> + </div> + <div class="btn-group" style="padding: 5px"> + <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> </div> -- Gitblit v1.8.0