From 1ff84ea2402eed9d97b4a57837a93edd61f557c0 Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 목, 10 2월 2022 17:14:59 +0900
Subject: [PATCH] - 이슈 담당부서 수정시 프로젝트 내의 부서로 검색 가능하도록 수정 - 이슈 유형의 '사용 프로젝트'의 담당부서를 '워크플로우'의 담당부서로 세팅

---
 src/main/webapp/scripts/components/utils/autoComplete.controller.js            |    4 +-
 src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java            |   33 ++++++++++++++++
 src/main/java/kr/wisestone/owl/service/impl/WorkflowDepartmentServiceImpl.java |   28 ++++++++++++++
 src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java             |    2 +
 src/main/java/kr/wisestone/owl/service/IssueTypeService.java                   |    3 +
 src/main/java/kr/wisestone/owl/constant/MsgConstants.java                      |    1 
 src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties                         |    1 
 src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java          |   38 +++++++++++++++++++
 8 files changed, 108 insertions(+), 2 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
index aae0232..66ac6a0 100644
--- a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
+++ b/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"; //  �씠硫붿씪 �뀥�뵆由우쓣 李얠쓣�닔 �뾾�뒿�땲�떎.
 
diff --git a/src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java b/src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java
index 939ce23..e02cf58 100644
--- a/src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java
+++ b/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);
 }
diff --git a/src/main/java/kr/wisestone/owl/service/IssueTypeService.java b/src/main/java/kr/wisestone/owl/service/IssueTypeService.java
index df8c3fc..e5db1df 100644
--- a/src/main/java/kr/wisestone/owl/service/IssueTypeService.java
+++ b/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);
 }
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
index b6df835..e9d4f91 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
+++ b/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
diff --git a/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
index ef07f67..aaef9a8 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
+++ b/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");  //  愿�由ъ옄 �젣�쇅 �궗�슜�옄
diff --git a/src/main/java/kr/wisestone/owl/service/impl/WorkflowDepartmentServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/WorkflowDepartmentServiceImpl.java
index e820d25..756b7c9 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/WorkflowDepartmentServiceImpl.java
+++ b/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
diff --git a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
index 81f1e0d..2f2e8d1 100644
--- a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
+++ b/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.
diff --git a/src/main/webapp/scripts/components/utils/autoComplete.controller.js b/src/main/webapp/scripts/components/utils/autoComplete.controller.js
index c58387c..ab73af6 100644
--- a/src/main/webapp/scripts/components/utils/autoComplete.controller.js
+++ b/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;

--
Gitblit v1.8.0