src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -10,6 +10,7 @@ public static final String PROJECT_NOT_EXIST = "PROJECT_NOT_EXIST"; // 프로젝트가 존재하지 않습니다. public static final String PROJECT_NOT_MANAGER = "PROJECT_NOT_MANAGER"; // 프로젝트 관리자가 존재하지 않습니다. public static final String PROJECT_NOT_MODIFY_PERMISSION = "PROJECT_NOT_MODIFY_PERMISSION"; // 프로젝트 관리 권한이 없습니다. public static final String PROJECT_NOT_DELETE = "PROJECT_NOT_DELETE"; // 이슈유형에서 사용중인 프로젝트 입니다. public static final String PROJECT_NOT_NAME = "PROJECT_NOT_NAME"; // 프로젝트 이름이 입력되지 않았습니다. public static final String PROJECT_NOT_STATUS = "PROJECT_NOT_STATUS"; // 프로젝트의 상태가 선택되지 않았습니다. public static final String DATE_NOT_EXIST = "DATE_NOT_EXIST"; // 날짜가 선택되지 않았습니다. src/main/java/kr/wisestone/owl/mapper/ProjectMapper.java
@@ -24,6 +24,8 @@ List<Map<String, Object>> findByWorkspaceIdAndIncludeProject(ProjectCondition projectCondition); List<Map<String, Object>> findByWorkspaceIdAndProjectAll(ProjectCondition projectCondition); List<Map<String, Object>> findByWorkspaceIdAndIncludeProjectAll(ProjectCondition projectCondition); void deleteProject(Map<String, Object> deleteProjectMap); src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java
@@ -15,4 +15,5 @@ List<IssueType> findByWorkspaceId(@Param("workspaceId") Long workspaceId); List<IssueType> findByProjectId(@Param("projectId") Long projectId); } src/main/java/kr/wisestone/owl/service/IssueTypeService.java
@@ -37,6 +37,8 @@ IssueType getIssueType(Long id); List<IssueType> findByProjectId(Long projectId); void removeIssueTypes(IssueTypeForm issueTypeForm); List<IssueType> findByWorkspaceId(); src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -1246,7 +1246,7 @@ } // 프로젝트를 선택하지 않았으면 해당 업무 공간에서 참여하고 있는 프로젝트를 찾는다. if (condition.getProjectIds().size() < 1) { /*if (condition.getProjectIds().size() < 1) { List<Map<String, Object>> projects = this.projectService.findByWorkspaceIdAndIncludeProjectAll(projectStatues, condition.getProjectType()); List<Long> projectIds = Lists.newArrayList(); @@ -1263,7 +1263,7 @@ if (projectIds.size() < 1) { return false; } } }*/ return true; } src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
@@ -261,6 +261,11 @@ } } // 이슈 유형에 프로젝트ID로 조회 public List<IssueType> findByProjectId(Long projectId) { return this.issueTypeRepository.findByProjectId(projectId); } private void setUseIssueTypeByIssueStatus(List<IssueTypeVo> issueTypeVos) { for (IssueTypeVo issueTypeVo : issueTypeVos) { IssueType issueType = this.getIssueType(issueTypeVo.getId()); src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
@@ -66,6 +66,9 @@ private UserWorkspaceService userWorkspaceService; @Autowired private IssueTypeService issueTypeService; @Autowired private UserLevelService userLevelService; @Autowired @@ -561,7 +564,7 @@ User user = this.webAppUtil.getLoginUserObject(); // 워크스페이스에서 기본으로 제공되는 프로젝트에 대한 체크 this.checkDefaultProject(project, projectForm); //this.checkDefaultProject(project, projectForm); // 수정 권한 체크 this.checkModifyPermission(project.getId(), user); // 관리자 변경 @@ -683,6 +686,20 @@ this.messageAccessor.getMessage(MsgConstants.DEFAULT_PROJECT_MANAGER_NOT_CHANGE)); } } } } private void checkUsingIssueType(Long projectId) { Boolean del = Boolean.FALSE; List<IssueType> usingIssueTypes = this.issueTypeService.findByProjectId(projectId); if (usingIssueTypes == null || usingIssueTypes.isEmpty()) { del = true; } if (!del) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.PROJECT_NOT_DELETE)); } } @@ -1024,10 +1041,11 @@ private void removeProjects(Long projectId) { Project project = this.getProject(projectId); // 기본 프로젝트는 삭제 금지 if (project.getDefaultYn()) { /*if (project.getDefaultYn()) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.DEFAULT_PROJECT_NOT_REMOVE)); } }*/ this.checkUsingIssueType(project.getId()); // 로그인한 사용자가 관리자 역할에 소속되어 있는지 확인한다. this.checkModifyPermission(project.getId(), this.webAppUtil.getLoginUserObject()); @@ -1118,7 +1136,15 @@ public List<Map<String, Object>> findByWorkspaceIdAndIncludeProjectAll(ProjectCondition projectCondition) { projectCondition.setLoginUserId(this.webAppUtil.getLoginId()); projectCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId()); return this.projectMapper.findByWorkspaceIdAndIncludeProjectAll(projectCondition); UserWorkspace userWorkspace = this.userWorkspaceService.findWorkspaceManager(this.webAppUtil.getLoginId()); List<Map<String, Object>> results = Lists.newArrayList(); if(userWorkspace != null) {// 워크스페이스 관리자일경우 results = this.projectMapper.findByWorkspaceIdAndProjectAll(projectCondition); } else { results = this.projectMapper.findByWorkspaceIdAndIncludeProjectAll(projectCondition); } return results; } // 현재 접근한 업무공간에서 참여하고 있는 프로젝트를 조회한다. - 상단 프로젝트 목록에서 사용 src/main/resources/mybatis/query-template/project-template.xml
@@ -340,6 +340,44 @@ AND p.workspace_id = #{workspaceId} </select> <!-- 해당 업무 공간에서 진행중인 모든 프로젝트를 조회한다 --> <select id="findByWorkspaceIdAndProjectAll" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.ProjectCondition"> SELECT DISTINCT p.id as id, p.name as name, p.description as description, p.status as status, p.start_date as startDate, p.end_date as endDate, p.project_key as projectKey, CASE p.default_yn WHEN 'Y' THEN 'true' ELSE 'false' END as defaultYn FROM project p INNER JOIN project_role pr on p.id = pr.project_id INNER JOIN project_role_user pru on pru.project_role_id = pr.id WHERE p.workspace_id = #{workspaceId} <if test="name != '' and name != null"> AND p.name like CONCAT('%',#{name},'%') </if> <choose> <when test="statuses.size != 0"> AND p.status IN <foreach collection="statuses" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> </when> </choose> <choose> <when test="excludeIds.size != 0"> AND p.id NOT IN <foreach collection="excludeIds" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> </when> </choose> </select> <!-- 해당 업무 공간에서 참여하고 있는 진행중인 프로젝트를 조회한다 --> <select id="findByWorkspaceIdAndIncludeProjectAll" resultType="java.util.HashMap" src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
@@ -14,6 +14,7 @@ PROJECT_NOT_EXIST = \uD504\uB85C\uC81D\uD2B8\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. PROJECT_NOT_MANAGER = \uD504\uB85C\uC81D\uD2B8 \uAD00\uB9AC\uC790\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. PROJECT_NOT_MODIFY_PERMISSION = \uD504\uB85C\uC81D\uD2B8 \uAD00\uB9AC \uAD8C\uD55C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. PROJECT_NOT_DELETE = \uC774\uC288\uC720\uD615\uC5D0\uC11C \uC0AC\uC6A9\uC911\uC778 \uD504\uB85C\uC81D\uD2B8 \uC785\uB2C8\uB2E4. PROJECT_NOT_NAME = \uD504\uB85C\uC81D\uD2B8 \uC774\uB984\uC774 \uC785\uB825\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. PROJECT_NOT_STATUS = \uD504\uB85C\uC81D\uD2B8\uC758 \uC0C1\uD0DC\uAC00 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. DATE_NOT_EXIST = \uAE30\uAC04\uC774 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. src/main/webapp/scripts/app/common/common.controller.js
@@ -67,7 +67,8 @@ } else { $rootScope.$broadcast("searchIssueList", {keyWord: $scope.vm.searchAll.keyWord}); } //$scope.vm.searchAll.keyWord = ""; //$rootScope.previousGetParams = null; } function setLastIssueType() { src/main/webapp/scripts/app/issue/issueList.controller.js
@@ -52,7 +52,7 @@ issueTypeId : "", partnerVos : "", search : { keyWord : "", // 전체 검색 keyWord : "", // 검색 title : "", // 제목 description : "", // 내용 combinationIssueNumber : "", // 이슈 번호 @@ -65,6 +65,9 @@ priorityIds : [], // 우선순위 검색 issueStatusIds : [], // 이슈 상태 검색 issueTypeIds : [] // 이슈 유형 검색 }, searchAll : { keyWord : "", // 전체 검색 }, searchView : false, // 상세 검색 조건 표시 여부 detailView : false, // 상세 모드 변경 값 @@ -131,7 +134,7 @@ // 상단 검색시 $rootScope.$on("searchIssueList", function (event, args) { $scope.vm.search.keyWord = args.keyWord; $scope.vm.searchAll.keyWord = args.keyWord; $scope.fn.getPageList(0); }); @@ -622,7 +625,7 @@ // 검색 기본값 세팅 $scope.vm.search.issueTypeIds = []; $scope.vm.projects = []; if ($scope.vm.search.keyWord == null || $scope.vm.search.keyWord === "") { if ($scope.vm.searchAll.keyWord == null || $scope.vm.searchAll.keyWord === "") { // 메뉴에서 선택된 이슈 유형을 기본으로 추가 if ($rootScope.issueTypeMenu != null) { //$scope.vm.pageTitle = $rootScope.issueTypeMenu.name; @@ -631,19 +634,19 @@ fieldKey: $rootScope.issueTypeMenu.id, fieldValue: $rootScope.issueTypeMenu.name }); // 검색 조건을 저장한다. //$scope.fn.makeVmSearchObject(); // 현재 선택된 프로젝트를 검색 기본으로 추가 if ($rootScope.workProject != null && $rootScope.workProject.id > -1) { var find = findProjectSearch($rootScope.workProject.id); if (!find) { $scope.vm.projects.push($rootScope.workProject); } } } // 검색 조건을 저장한다. //$scope.fn.makeVmSearchObject(); // 현재 선택된 프로젝트를 검색 기본으로 추가 if ($rootScope.workProject != null && $rootScope.workProject.id > -1) { var find = findProjectSearch($rootScope.workProject.id); if (!find) { $scope.vm.projects.push($rootScope.workProject); } } //$scope.vm.searchAll.keyWord = ""; } // 이슈 검색 조건을 만든다. @@ -682,7 +685,6 @@ } else { $scope.vm.responseData = result.data; } } else { SweetAlert.error($filter("translate")("issue.failedIssueLookup"), result.data.message.message); // 이슈 조회 실패 @@ -1260,12 +1262,12 @@ if ($rootScope.isDefined(params)) { // $rootScope.$broadcast("makeIssueSearch", { projectKey : params.projectKey, issueNumber : params.issueNumber }); if (params.keyWord != null) { getPageList(0,false,params.keyWord); $scope.vm.searchAll.keyWord = params.keyWord; getPageList(0,false, params.keyWord); }else { getDetailList(params.projectKey, params.issueNumber); return; } $rootScope.previousGetParams = null; // $rootScope.issueTypeId = $rootScope.issueTypeMenu.id; }