src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -283,6 +283,7 @@ public static final String ISP_EXIST_COMPANY = "ISP_EXIST_COMPANY"; // 업체에 설정되어있는 ISP가 존재합니다. public static final String PROJECT_NOT_INCLUDE_DEPARTMENT = "PROJECT_NOT_INCLUDE_DEPARTMENT"; // 선택한 부서 중 프로젝트에 참여하고 있지 않은 부서가 있습니다. public static final String PROJECT_DEPARTMENT_NOT_EQUAL_WORKFLOW = "PROJECT_DEPARTMENT_NOT_EQUAL_WORKFLOW"; // 해당 프로젝트에 속해있는 워크플로우의 담당부서는 프로젝트의 담당부서에서 제외시킬 수 없습니다. public static final String EMAIL_TEMPLATE_NOT_EXIST = "EMAIL_TEMPLATE_NOT_EXIST"; // 이메일 템플릿을 찾을수 없습니다. src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java
@@ -16,4 +16,6 @@ List<IssueType> findByWorkspaceId(@Param("workspaceId") Long workspaceId); List<IssueType> findByProjectId(@Param("projectId") Long projectId); List<IssueType> findByWorkflowId(@Param("workflowId") Long id); } src/main/java/kr/wisestone/owl/service/IssueTypeService.java
@@ -1,6 +1,7 @@ package kr.wisestone.owl.service; import kr.wisestone.owl.domain.IssueType; import kr.wisestone.owl.domain.Workflow; import kr.wisestone.owl.domain.Workspace; import kr.wisestone.owl.domain.enumType.ProjectType; import kr.wisestone.owl.vo.IssueTypeVo; @@ -41,5 +42,7 @@ List<IssueType> findByWorkspaceId(); List<IssueType> findByWorkflowId(Long workflowId); ModelAndView downloadExcel(HttpServletRequest request, Model model); } src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
@@ -51,7 +51,13 @@ private WorkflowService workflowService; @Autowired private WorkflowDepartmentService workflowDepartmentService; @Autowired private ProjectService projectService; @Autowired private ProjectRoleService projectRoleService; @Autowired private WorkspaceService workspaceService; @@ -144,9 +150,31 @@ Project project = this.projectService.getProject(issueTypeForm.getProjectId()); issueType.setProject(project); // 워크플로우의 담당부서와 동일하게 세팅 this.setDepartmentOfProject(project, workflow); issueType.setUsePartner(issueTypeForm.getUsePartner()); return this.issueTypeRepository.saveAndFlush(issueType); } /** * 워크플로우의 담당부서와 동일하게 세팅 * @param project Project * @param workflow Workflow */ private void setDepartmentOfProject(Project project, Workflow workflow) { List<WorkflowDepartment> workflowDepartments = this.workflowDepartmentService.find(workflow.getId()); // 해당 워크플로우의 담당부서가 존재 할 경우 해당 프로젝트의 담당부서에도 추가 if (workflowDepartments != null && workflowDepartments.size() > 0) { ProjectRole projectRole = this.projectRoleService.findByProjectIdAndRoleType(project.getId(), ProjectRole.TYPE_DEFAULT); for (WorkflowDepartment workflowDepartment : workflowDepartments) { // 프로젝트 담당부서로 추가 projectRole.addDepartment(workflowDepartment.getDepartment()); } } } // 이름 유효성 체크 @@ -402,6 +430,9 @@ Project project = this.projectService.getProject(issueTypeForm.getProjectId()); issueType.setProject(project); // 워크플로우의 담당부서와 동일하게 세팅 this.setDepartmentOfProject(project, workflow); issueType.setUsePartner(issueTypeForm.getUsePartner()); /*if(issueTypeForm.getCompanyId() != null){ @@ -485,6 +516,13 @@ return this.issueTypeRepository.findByWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId()); } // 워크플로우 ID로 이슈 유형 조회 @Override @Transactional(readOnly = true) public List<IssueType> findByWorkflowId(Long id) { return this.issueTypeRepository.findByWorkflowId(id); } // 이슈 타입 필드 목록을 엑셀로 다운로드 한다. @Override @Transactional src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
@@ -60,6 +60,9 @@ private WorkflowStatusService workflowStatusService; @Autowired private WorkflowDepartmentService workflowDepartmentService; @Autowired private WorkspaceService workspaceService; @Autowired @@ -819,8 +822,11 @@ } projectRole.getProjectRoleDepartments().clear(); this.checkDepartmentOfWorkflow(project, projectForm.getDepartmentIds()); for (Long departmentId : projectForm.getDepartmentIds()) { Department department = this.departmentService.getDepartment(departmentId); department.addProjectRole(projectRole); } @@ -836,6 +842,33 @@ } /** * 프로젝트와 연결된 이슈유형의 워크플로우에서 설정한 부서는 프로젝트 담당부서에서 제외 불가 * @param project Project * @param departmentIds List<Long> */ private void checkDepartmentOfWorkflow(Project project, List<Long> departmentIds) { List<IssueType> issueTypes = this.issueTypeService.findByProjectId(project.getId()); List<Long> workflowDepartmentIds = Lists.newArrayList(); if (issueTypes != null && issueTypes.size() > 0) { for (IssueType issueType : issueTypes) { List<WorkflowDepartment> workflowDepartments = this.workflowDepartmentService.find(issueType.getWorkflow().getId()); if (workflowDepartments != null && workflowDepartments.size() > 0) { for (WorkflowDepartment workflowDepartment : workflowDepartments) { workflowDepartmentIds.add(workflowDepartment.getDepartment().getId()); if (!departmentIds.containsAll(workflowDepartmentIds)) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.PROJECT_DEPARTMENT_NOT_EQUAL_WORKFLOW)); } } } } } } // 프로젝트 참여, 제외 통지 정보를 중복으로 나가지 않도록 체크한다. private void notificationProjectRoleUser(Map<String, Object> changeProjectManagerNotifications, Map<String, Object> changeProjectUserNotifications, Project project) { List<String> projectManagerExcludeUsers = (List<String>) changeProjectManagerNotifications.get("excludeUsers"); // 관리자 제외 사용자 src/main/java/kr/wisestone/owl/service/impl/WorkflowDepartmentServiceImpl.java
@@ -43,6 +43,12 @@ @Autowired private DepartmentService departmentService; @Autowired private IssueTypeService issueTypeService; @Autowired private ProjectRoleService projectRoleService; @Override protected JpaRepository<WorkflowDepartment, Long> getRepository() { return workflowDepartmentRepository; @@ -152,9 +158,31 @@ workflowDepartment.setDepartment(department); workflowDepartmentList.add(workflowDepartment); // 변경한 워크플로우의 담당부서를 이슈유형과 연결된 프로젝트의 담당부서에도 세팅 this.setDepartmentOfProject(workflow, department); } } this.workflowDepartmentRepository.saveAll(workflowDepartmentList); } /** * 워크플로우의 담당부서를 이슈유형과 연결된 프로젝트의 담당부서에도 세팅 * @param workflow Workflow * @param department Department */ private void setDepartmentOfProject(Workflow workflow, Department department) { List<IssueType> issueTypeList = this.issueTypeService.findByWorkflowId(workflow.getId()); if (issueTypeList != null && issueTypeList.size() > 0) { for (IssueType issueType : issueTypeList) { if (issueType.getProject() != null) { ProjectRole projectRole = this.projectRoleService.findByProjectIdAndRoleType(issueType.getProject().getId(), ProjectRole.TYPE_DEFAULT); // 프로젝트 담당부서로 추가 projectRole.addDepartment(department); } } } } @Override src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
@@ -25,6 +25,7 @@ PROJECT_REMOVE_NOT_SELECT = \uC0AD\uC81C\uD560 \uD504\uB85C\uC81D\uD2B8\uAC00 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. PROJECT_NOT_INCLUDE_USER = \uC120\uD0DD\uD55C \uB2F4\uB2F9\uC790 \uC911 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uCC38\uC5EC\uD558\uACE0 \uC788\uC9C0 \uC54A\uC740 \uC0AC\uC6A9\uC790\uAC00 \uC788\uC2B5\uB2C8\uB2E4. PROJECT_NOT_INCLUDE_DEPARTMENT = \uC120\uD0DD\uD55C \uBD80\uC11C \uC911 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uCC38\uC5EC\uD558\uACE0 \uC788\uC9C0 \uC54A\uC740 \uBD80\uC11C\uAC00 \uC788\uC2B5\uB2C8\uB2E4. PROJECT_DEPARTMENT_NOT_EQUAL_WORKFLOW = \uD574\uB2F9 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uC18D\uD574\uC788\uB294 \uC6CC\uD06C\uD50C\uB85C\uC6B0\uC758 \uB2F4\uB2F9\uBD80\uC11C\uB294 \uD504\uB85C\uC81D\uD2B8\uC758 \uB2F4\uB2F9\uBD80\uC11C\uC5D0\uC11C \uC81C\uC678\uC2DC\uD0AC \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. PROJECT_USED_PROJECT_KEY = \uD504\uB85C\uC81D\uD2B8 \uD0A4\uAC00 \uC774\uBBF8 \uC0AC\uC6A9\uB418\uACE0 \uC788\uC2B5\uB2C8\uB2E4. PARENT_SECTOR_NOT_SELECT = \uC5C5\uC885(\uB300\uBD84\uB958)\uB97C \uBA3C\uC800 \uC120\uD0DD \uD574 \uC8FC\uC138\uC694. PARENT_SECTOR_NOT_EQUAL = \uC120\uD0DD\uD55C \uC5C5\uC885(\uC911\uBD84\uB958)\uB294 \uC5C5\uC885(\uB300\uBD84\uB958)\uC5D0 \uC18D\uD574\uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. src/main/webapp/scripts/components/utils/autoComplete.controller.js
@@ -434,8 +434,8 @@ var deferred = $q.defer(); //워크플로우에 속해있는 담당부서 찾기 UserWorkspace.findWorkflowDepartment($resourceProvider.getContent( // 페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다. //프로젝트에 속해있는 담당부서 찾기 UserWorkspace.findProjectDepartment($resourceProvider.getContent( // 페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다. conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) { if (result.data.message.status === "success") { const departments = result.data.data;