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); } 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); } 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 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); 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; } 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; } } 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> 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; } src/main/webapp/i18n/ko/global.json
@@ -668,6 +668,7 @@ "failedToReceiveEnquiry": "문의 접수 실패" }, "common": { "allIssueList" : "전체 이슈", "urgent": "긴급", "high": "높음", "medium": "보통", 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; } } } 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); }); } 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; 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>