- 이슈 상세 화면에서 이슈 상태 변경시 워크플로우에 지정된 담당부서를 불러오도록 수정
- 이슈 상태 변경 저장시 담당부서도 변경되도록 수정
| | |
| | | |
| | | 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); |
| | | } |
| | |
| | | // 이슈 상태 변경 |
| | | 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 용 엑셀 템플릿 다운로드 |
| | |
| | | private WorkflowTransitionService workflowTransitionService; |
| | | |
| | | @Autowired |
| | | private WorkflowDepartmentService workflowDepartmentService; |
| | | |
| | | @Autowired |
| | | private IssueTypeService issueTypeService; |
| | | |
| | | @Autowired |
| | |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | resJsonData.put(Constants.RES_KEY_CONTENTS, issueStatusVos); |
| | | } |
| | | |
| | | } |
| | |
| | | } |
| | | |
| | | // 담당 부서정보를 조회한다. |
| | | 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) { |
| | |
| | | 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); |
| | |
| | | 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); |
| | |
| | | "applyTemplate": "템플릿 적용하기", |
| | | "issueContentIsWrittenApplyTheTemplate": "이슈 내용이 작성되어 있습니다. 템플릿을 적용하겠습니까? 템플릿이 적용되면 이미 작성된 내용이 사라집니다.", |
| | | "failedIssueStatusCheck": "이동 가능한 이슈 상태 조회 실패", |
| | | "failedIssueStatusWorkflowDepartmentCheck": "이슈 상태 담당 부서 조회 실패", |
| | | "failedToChangeMultipleIssueStatus": "다중 이슈 상태 변경 실패", |
| | | "completedSavingIssueTable": "이슈 테이블 설정 저장 완료", |
| | | "saveIssueTableSettingsInformation": "이슈 테이블 설정 정보가 저장되었습니다.", |
| | |
| | | resolve : { |
| | | parameter : function () { |
| | | return { |
| | | issueIds : [$scope.vm.viewer.id] |
| | | issueIds : [$scope.vm.viewer.id], |
| | | projectId : $scope.vm.viewer.projectVo.id |
| | | }; |
| | | } |
| | | } |
| | |
| | | ], |
| | | 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() { |
| | |
| | | |
| | | if (result.data.message.status === "success") { |
| | | $scope.vm.issueStatusList = result.data.data; |
| | | |
| | | } else { |
| | | SweetAlert.swal($filter("translate")("issue.failedIssueStatusCheck"), result.data.message.message, "error"); // 이동 가능한 이슈 상태 조회 실패 |
| | | } |
| | |
| | | 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, |
| | |
| | | </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" |