- 이슈 목록 하위이슈 숨기기 버튼 생성
- 이슈 Tree 목록 중복 이슈 필터링
| | |
| | | if (issueCondition.getTree()) { |
| | | this.setDownIssues(user, issueVos); |
| | | this.setRelationIssues(issueVos); |
| | | this.setParentIssue(issueVos); |
| | | } |
| | | this.setCountDownIssues(issueVos); |
| | | |
| | |
| | | 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); |
| | | } |
| | |
| | | this.setIssueDepartmentList(issueVos, issueCondition, user); |
| | | // 등록자 정보 추가 |
| | | this.setRegister(issueVos); // 담당자 정보 셋팅 |
| | | |
| | | // 사용자 정의 필드 정보 추가 |
| | | this.setIssueCustomFieldValue(issueVos, issueCondition); |
| | | |
| | | this.SetWorkflowDepartment(issueVos); //워크플로우에 설정한 담당부서 가져오기 |
| | | //워크플로우에 설정한 담당부서 가져오기 |
| | | this.SetWorkflowDepartment(issueVos); |
| | | // 상위 이슈 체크 |
| | | this.setParentIssue(issueVos); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | // 상위 이슈 체크 |
| | | 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) { |
| | |
| | | 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(){} |
| | |
| | | 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) { |
| | |
| | | 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() { |
| | |
| | | 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> |
| | | |
| | |
| | | </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 |
| | |
| | | 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> |
| | |
| | | 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> |
| | |
| | | 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> |
| | |
| | | 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> |
| | | |
| | |
| | | |
| | | // 테이블 정보 가져오기 |
| | | 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) { |
| | |
| | | issueTableConfigs : [], // 이슈 테이블 설정 |
| | | issueTreeConfigs : [], // 이슈 테이블 설정 |
| | | parentIssueId : "", |
| | | hideIssue : false, |
| | | hideCompleteIssue : false, |
| | | hideDownIssue : true, |
| | | listMode : 0, // 목록 모드 0:기본 리스트 1:트리구조 리스트 |
| | | }; |
| | | |
| | |
| | | endStartDate : "", |
| | | beginCompleteDate : "", |
| | | endCompleteDate : "", |
| | | hideIssue : $scope.vm.hideIssue, |
| | | hideCompleteIssue: $scope.vm.hideCompleteIssue, |
| | | hideDownIssue : $scope.vm.hideDownIssue, |
| | | isTree : $scope.vm.listMode === 1, |
| | | projectIds : (function () { |
| | | var projectIds = []; |
| | |
| | | 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; |
| | |
| | | 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--; |
| | | } |
| | |
| | | |
| | | <!-- 우측 --> |
| | | <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" > |