From 0fe6dd1bf6dfdcd89badddacb1dcb52c2d5c6c57 Mon Sep 17 00:00:00 2001 From: jhjang <jhjang@maprex.co.kr> Date: 목, 25 11월 2021 15:06:43 +0900 Subject: [PATCH] - 이슈 상세 화면에서 이슈 상태 변경시 워크플로우에 지정된 담당부서를 불러오도록 수정 - 이슈 상태 변경 저장시 담당부서도 변경되도록 수정 --- src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | 8 ++++ src/main/java/kr/wisestone/owl/service/impl/IssueStatusServiceImpl.java | 10 ++++ src/main/webapp/views/issue/issueModifyStatus.html | 18 +++++++++ src/main/java/kr/wisestone/owl/service/impl/WorkflowDepartmentServiceImpl.java | 9 ++++ src/main/webapp/scripts/app/issue/issueModifyStatus.controller.js | 58 ++++++++++++++++++++++++++--- src/main/java/kr/wisestone/owl/service/WorkflowDepartmentService.java | 1 src/main/webapp/i18n/ko/global.json | 1 src/main/webapp/scripts/app/issue/issueDetail.controller.js | 3 + src/main/java/kr/wisestone/owl/service/impl/WorkflowServiceImpl.java | 9 +--- 9 files changed, 102 insertions(+), 15 deletions(-) diff --git a/src/main/java/kr/wisestone/owl/service/WorkflowDepartmentService.java b/src/main/java/kr/wisestone/owl/service/WorkflowDepartmentService.java index 8e6474f..30b0fcd 100644 --- a/src/main/java/kr/wisestone/owl/service/WorkflowDepartmentService.java +++ b/src/main/java/kr/wisestone/owl/service/WorkflowDepartmentService.java @@ -21,6 +21,7 @@ WorkflowDepartment getWorkflowDepartment(Long id); List<WorkflowDepartmentVo> find(WorkflowDepartmentCondition condition); + List<WorkflowDepartmentVo> find(Long workflowId, Long issueStatusId); void modify(Workflow workflow, List<IssueStatusVo> issueStatusVos); void remove(Long workflowId); } diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java index 5d2b1f4..c87e482 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java @@ -1783,6 +1783,14 @@ // �씠�뒋 �긽�깭 蹂�寃� this.modifyIssueStatus(issueForm); } + + // �떞�떦 遺��꽌 �닔�젙 + if (issueForm.getDepartmentIds().size() > 0) { + Issue issue = this.getIssue(issueForm.getId()); + Project project = this.projectService.getProject(issueForm.getProjectId()); + + this.issueDepartmentService.modifyIssueDepartment(issue, project.getWorkspace(), issueForm.getDepartmentIds()); + } } // �씠�뒋 Import �슜 �뿊�� �뀥�뵆由� �떎�슫濡쒕뱶 diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueStatusServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueStatusServiceImpl.java index 0b36fc8..789b9d4 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueStatusServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueStatusServiceImpl.java @@ -45,6 +45,9 @@ private WorkflowTransitionService workflowTransitionService; @Autowired + private WorkflowDepartmentService workflowDepartmentService; + + @Autowired private IssueTypeService issueTypeService; @Autowired @@ -545,12 +548,18 @@ if (count < 1) { IssueStatusVo issueStatusVo = new IssueStatusVo(workflowTransitionVo.getTargetStatusId(), workflowTransitionVo.getTargetStatusName()); issueStatusVos.add(issueStatusVo); + + List<WorkflowDepartmentVo> workflowDepartments = this.workflowDepartmentService.find(workflow.getId(), issueStatusVo.getId()); + issueStatusVo.setWorkflowDepartmentVos(workflowDepartments); } else { // �몢踰덉㎏ �씠�뒋遺��꽣 泥ル쾲吏� �씠�뒋�뿉�꽌 �씠�룞 媛��뒫�뻽�뜕 �긽�깭 以� �뾾�뒗 ���긽�쓣 李얜뒗�떎. for (IssueStatusVo issueStatusVo : issueStatusVos) { if (issueStatusVo.getId().equals(workflowTransitionVo.getTargetStatusId())) { tempIssueStatusVos.add(issueStatusVo); + + List<WorkflowDepartmentVo> workflowDepartments = this.workflowDepartmentService.find(workflow.getId(), issueStatusVo.getId()); + issueStatusVo.setWorkflowDepartmentVos(workflowDepartments); } } } @@ -566,5 +575,4 @@ resJsonData.put(Constants.RES_KEY_CONTENTS, issueStatusVos); } - } 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 517cd31..064df76 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/WorkflowDepartmentServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/WorkflowDepartmentServiceImpl.java @@ -66,6 +66,15 @@ } // �떞�떦 遺��꽌�젙蹂대�� 議고쉶�븳�떎. + public List<WorkflowDepartmentVo> find(Long workflowId, Long issueStatusId) { + WorkflowDepartmentCondition condition = new WorkflowDepartmentCondition(); + condition.setWorkflowId(workflowId); + condition.setIssueStatusId(issueStatusId); + + return find(condition); + } + + // �떞�떦 遺��꽌�젙蹂대�� 議고쉶�븳�떎. @Transactional(readOnly = true) @Override public List<WorkflowDepartmentVo> find(WorkflowDepartmentCondition condition) { diff --git a/src/main/java/kr/wisestone/owl/service/impl/WorkflowServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/WorkflowServiceImpl.java index be7a902..c69f4f1 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/WorkflowServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/WorkflowServiceImpl.java @@ -200,9 +200,7 @@ for (WorkflowVo workflowVo : workflowVos) { Workflow workflow = this.getWorkflow(workflowVo.getId()); - WorkflowDepartmentCondition condition = new WorkflowDepartmentCondition(); - condition.setWorkflowId(workflow.getId()); - List<WorkflowDepartmentVo> workflowDepartmentVos = this.workflowDepartmentService.find(condition); + List<WorkflowDepartmentVo> workflowDepartmentVos = this.workflowDepartmentService.find(workflow.getId(), null); if (workflowDepartmentVos != null && workflowDepartmentVos.size() > 0) { IssueStatusVo issueStatusVo = new IssueStatusVo(); issueStatusVo.setWorkflowDepartmentVos(workflowDepartmentVos); @@ -225,10 +223,7 @@ case "01" : // �뿰愿��맂 �씠�뒋 �긽�깭�� �쟾�씠�꽑 �젙蹂대�� 媛��졇�삩�떎. List<IssueStatusVo> issueStatusVos = this.issueStatusService.findByWorkflowId(workflowCondition.getId()); for (IssueStatusVo issueStatusVo : issueStatusVos) { - WorkflowDepartmentCondition condition = new WorkflowDepartmentCondition(); - condition.setWorkflowId(workflowVo.getId()); - condition.setIssueStatusId(issueStatusVo.getId()); - List<WorkflowDepartmentVo> workflowDepartmentVos = this.workflowDepartmentService.find(condition); + List<WorkflowDepartmentVo> workflowDepartmentVos = this.workflowDepartmentService.find(workflowVo.getId(), issueStatusVo.getId()); issueStatusVo.setWorkflowDepartmentVos(workflowDepartmentVos); } workflowVo.setIssueStatusVos(issueStatusVos); diff --git a/src/main/webapp/i18n/ko/global.json b/src/main/webapp/i18n/ko/global.json index 3039281..aa6e320 100644 --- a/src/main/webapp/i18n/ko/global.json +++ b/src/main/webapp/i18n/ko/global.json @@ -251,6 +251,7 @@ "applyTemplate": "�뀥�뵆由� �쟻�슜�븯湲�", "issueContentIsWrittenApplyTheTemplate": "�씠�뒋 �궡�슜�씠 �옉�꽦�릺�뼱 �엳�뒿�땲�떎. �뀥�뵆由우쓣 �쟻�슜�븯寃좎뒿�땲源�? �뀥�뵆由우씠 �쟻�슜�릺硫� �씠誘� �옉�꽦�맂 �궡�슜�씠 �궗�씪吏묐땲�떎.", "failedIssueStatusCheck": "�씠�룞 媛��뒫�븳 �씠�뒋 �긽�깭 議고쉶 �떎�뙣", + "failedIssueStatusWorkflowDepartmentCheck": "�씠�뒋 �긽�깭 �떞�떦 遺��꽌 議고쉶 �떎�뙣", "failedToChangeMultipleIssueStatus": "�떎以� �씠�뒋 �긽�깭 蹂�寃� �떎�뙣", "completedSavingIssueTable": "�씠�뒋 �뀒�씠釉� �꽕�젙 ���옣 �셿猷�", "saveIssueTableSettingsInformation": "�씠�뒋 �뀒�씠釉� �꽕�젙 �젙蹂닿� ���옣�릺�뿀�뒿�땲�떎.", diff --git a/src/main/webapp/scripts/app/issue/issueDetail.controller.js b/src/main/webapp/scripts/app/issue/issueDetail.controller.js index 0e69b70..3e01d52 100644 --- a/src/main/webapp/scripts/app/issue/issueDetail.controller.js +++ b/src/main/webapp/scripts/app/issue/issueDetail.controller.js @@ -668,7 +668,8 @@ resolve : { parameter : function () { return { - issueIds : [$scope.vm.viewer.id] + issueIds : [$scope.vm.viewer.id], + projectId : $scope.vm.viewer.projectVo.id }; } } diff --git a/src/main/webapp/scripts/app/issue/issueModifyStatus.controller.js b/src/main/webapp/scripts/app/issue/issueModifyStatus.controller.js index 2d705ae..8fa2199 100644 --- a/src/main/webapp/scripts/app/issue/issueModifyStatus.controller.js +++ b/src/main/webapp/scripts/app/issue/issueModifyStatus.controller.js @@ -8,25 +8,60 @@ ], function (app) { app.controller('issueModifyStatusController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$uibModalInstance', 'SweetAlert', '$timeout', '$stateParams', 'parameter', - 'Issue', 'IssueStatus', '$filter', - function ($scope, $rootScope, $log, $resourceProvider, $uibModalInstance, SweetAlert, $timeout, $stateParams, parameter, Issue, IssueStatus, $filter) { + 'Issue', 'IssueStatus', '$filter', '$injector', '$controller', + function ($scope, $rootScope, $log, $resourceProvider, $uibModalInstance, SweetAlert, $timeout, $stateParams, parameter, Issue, IssueStatus, $filter, $injector, $controller) { // �븿�닔 紐⑥쓬 $scope.fn = { cancel: cancel, // �뙘�뾽 李� �떕湲� formSubmit: formSubmit, // �뤌 �쟾�넚 formCheck: formCheck, // �뤌 泥댄겕 - findNextMultiIssueStatus: findNextMultiIssueStatus // �씠�룞 媛��뒫�븳 �씠�뒋 �긽�깭瑜� 李얜뒗�떎. + findNextMultiIssueStatus: findNextMultiIssueStatus, // �씠�룞 媛��뒫�븳 �씠�뒋 �긽�깭瑜� 李얜뒗�떎. + removeDepartment : removeDepartment, // �떞�떦遺��꽌 �궘�젣 }; // 蹂��닔 紐⑥쓬 $scope.vm = { issueStatusList: [], // 蹂�寃� 媛��뒫�븳 �긽�깭 紐⑸줉 form: { - issueStatusId: "", + departments: [], // �떞�떦 遺��꽌 �꽑�깮 紐⑸줉 + issueStatusId: undefined, comment: "" - } + }, + departmentName : "" }; + + angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector})); + + // �떞�떦遺��꽌 �궘�젣 + function removeDepartment(index) { + $scope.vm.form.departments.splice(index, 1); + } + + $scope.$watch("vm.form.issueStatusId", function (newValue) { + // �씠�뒋 �긽�깭蹂� �떞�떦遺��꽌 �몴�떆 + let selectIssueStatusId = $scope.vm.form.issueStatusId; + let issueStatusList = $scope.vm.issueStatusList; + $scope.vm.form.departments = []; + + if (issueStatusList != null && $scope.vm.issueStatusList.length > 0 && selectIssueStatusId !== "") { + for (let i = 0; i < issueStatusList.length; i++) { + if (issueStatusList[i].id.toString() === selectIssueStatusId) { + let workflowDepartments = issueStatusList[i].workflowDepartmentVos; + + workflowDepartments.forEach(function (workflowDepartment) { + $scope.vm.form.departments.push(workflowDepartment.departmentVo); + }); + break; + } + } + $scope.vm.issueStatusList.forEach(function (issueStatus) { + if (issueStatus.id === $scope.vm.form.issueStatusId) { + + } + }); + } + }); // �씠�룞 媛��뒫�븳 �씠�뒋 �긽�깭瑜� 李얜뒗�떎. function findNextMultiIssueStatus() { @@ -38,6 +73,7 @@ if (result.data.message.status === "success") { $scope.vm.issueStatusList = result.data.data; + } else { SweetAlert.swal($filter("translate")("issue.failedIssueStatusCheck"), result.data.message.message, "error"); // �씠�룞 媛��뒫�븳 �씠�뒋 �긽�깭 議고쉶 �떎�뙣 } @@ -62,7 +98,17 @@ var content = { ids: parameter.issueIds, issueStatusId: $scope.vm.form.issueStatusId, - comment: $scope.vm.form.comment + comment: $scope.vm.form.comment, + projectId : parameter.projectId, + departmentIds : (function () { + var departmentIds = []; + + angular.forEach($scope.vm.form.departments, function (department) { + departmentIds.push(department.id); + }); + + return departmentIds; + })(), }; Issue.modifyMultiIssueStatus($resourceProvider.getContent(content, diff --git a/src/main/webapp/views/issue/issueModifyStatus.html b/src/main/webapp/views/issue/issueModifyStatus.html index 01c760e..1e97429 100644 --- a/src/main/webapp/views/issue/issueModifyStatus.html +++ b/src/main/webapp/views/issue/issueModifyStatus.html @@ -30,6 +30,24 @@ </div> </div> + <div class="form-group mgb5" ng-if="vm.form.issueStatusId !== undefined"> + <label class="issue-label"> <span translate="common.assigneeTeam">�떞�떦遺��꽌</span> </label> + <js-autocomplete-multi data-input-name="departments" + selected-model="vm.form.departments" + search="vm.departmentName" + source="fn.getUserDepartmentList(vm.departmentName, vm.form.departments)" + input-disabled="false" + translation-texts="{ count : 'common.userNum', empty : 'common.emptyUser' }" + extra-settings="{ displayProp : 'byName' , idProp : 'id', imageable : false, maxlength : 100, autoResize : true }"></js-autocomplete-multi> + + <div class="select3-selection__choicediv mt-10"> + <span class="select3-selection__choice" ng-repeat="department in vm.form.departments"> + <span>{{department.byName}}</span> <!--�궗�슜�옄媛� �냽�빐 �엳�뒗 遺��꽌 �씠由� 異쒕젰--> + <span class="select3-selection__choice__remove" ng-click="fn.removeDepartment($index)">횞</span> + </span> + </div> + </div> + <div class="form-group"> <label for="issueMultiStatusModifyForm2"><span translate="common.changeReason">蹂�寃� �궗�쑀</span> </label> <input class="form-control input-sm" -- Gitblit v1.8.0