src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -85,6 +85,7 @@ public static final String CUSTOM_FIELD_NAME_MAX_LENGTH_OUT = "CUSTOM_FIELD_NAME_MAX_LENGTH_OUT"; // 사용자 정의 필드명은 최대 50글자까지 입력할 수 있습니다. public static final String CUSTOM_FIELD_USED_NAME = "CUSTOM_FIELD_USED_NAME"; // 사용자 정의 필드 명이 이미 사용되고 있습니다. public static final String CUSTOM_FIELD_REMOVE_NOT_SELECT = "CUSTOM_FIELD_REMOVE_NOT_SELECT"; // 삭제할 사용자 정의 필드가 선택되지 않았습니다. public static final String CUSTOM_FIELD_USED_DATA_REMOVE = "CUSTOM_FIELD_USED_DATA_REMOVE"; // 사용하고 있는 데이터입니다. public static final String CUSTOM_FIELD_OPTIONS_NOT_USE_INPUT_FIELD = "CUSTOM_FIELD_OPTIONS_NOT_USE_INPUT_FIELD"; // 문자열 필드는 옵션 값을 사용할 수 없습니다. public static final String CUSTOM_FIELD_OPTIONS_NOT_EXIST_DEFAULT_VALUE = "CUSTOM_FIELD_OPTIONS_NOT_EXIST_DEFAULT_VALUE"; // 사용자 정의 필드 기본 값이 옵션에 존재하지 않습니다. public static final String CUSTOM_FIELD_OPTIONS_USED_EXIST_DEFAULT_VALUE = "CUSTOM_FIELD_OPTIONS_USED_EXIST_DEFAULT_VALUE"; // 사용자 정의 필드 기본 값에 중복된 값이 존재합니다. src/main/java/kr/wisestone/owl/repository/IssueTypeCustomFieldRepository.java
@@ -12,4 +12,6 @@ List<IssueTypeCustomField> findByProjectIdAndIssueTypeIdOrderByPosition(@Param("projectId") Long projectId, @Param("issueTypeId") Long issueTypeId); IssueTypeCustomField findByProjectIdAndIssueTypeIdAndCustomFieldId(@Param("projectId") Long projectId, @Param("issueTypeId") Long issueTypeId, @Param("customFieldId") Long customFieldId); Long countByCustomFieldId(@Param("customFieldId") Long customFieldId); } src/main/java/kr/wisestone/owl/service/impl/CustomFieldServiceImpl.java
@@ -11,6 +11,7 @@ import kr.wisestone.owl.exception.OwlRuntimeException; import kr.wisestone.owl.mapper.CustomFieldMapper; import kr.wisestone.owl.repository.CustomFieldRepository; import kr.wisestone.owl.repository.IssueTypeCustomFieldRepository; import kr.wisestone.owl.service.*; import kr.wisestone.owl.util.ConvertUtil; import kr.wisestone.owl.util.MapUtil; @@ -45,6 +46,9 @@ @Autowired private CustomFieldRepository customFieldRepository; @Autowired private IssueTypeCustomFieldRepository issueTypeCustomFieldRepository; @Autowired private CustomFieldMapper customFieldMapper; @@ -318,10 +322,18 @@ public void removeCustomFields(CustomFieldForm customFieldForm) { // 사용하고 있는 업무 공간이 활성 상태인지 확인한다. 사용 공간에서 로그인한 사용자가 비활성인지 확인한다. this.workspaceService.checkUseWorkspace(); if (customFieldForm.getRemoveIds().size() < 1) { List<Long> removeIds = customFieldForm.getRemoveIds(); if (removeIds.size() < 1) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.CUSTOM_FIELD_REMOVE_NOT_SELECT)); }else { for (Long id : removeIds) { Long count = this.issueTypeCustomFieldRepository.countByCustomFieldId(id); if (count > 0){ throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.CUSTOM_FIELD_USED_DATA_REMOVE)); } } } for (Long projectId : customFieldForm.getRemoveIds()) { @@ -329,6 +341,7 @@ } // this.customFieldRepository.flush(); this.customFieldRepository.flush(); } private void removeCustomFields(Long customFieldId) { @@ -336,6 +349,7 @@ customField.setUse(UseType.N.toString()); this.customFieldRepository.saveAndFlush(customField); // this.customFieldRepository.delete(customField); this.customFieldRepository.delete(customField); } // 이슈 엑셀 import 에서 사용한다. src/main/java/kr/wisestone/owl/web/resolver/OwlResponseEntityExceptionHandler.java
@@ -39,7 +39,7 @@ Map<String, Object> resJsonData = new HashMap<String, Object>(); resJsonData.put(Constants.RES_KEY_MESSAGE, this.messageAccessor.getResMessage(ex, Constants.RES_KEY_MSG_FAIL)); return this.handleExceptionInternal(ex, resJsonData, new HttpHeaders(), HttpStatus.BAD_REQUEST, request); return this.handleExceptionInternal(ex, resJsonData, new HttpHeaders(), HttpStatus.OK, request); } @ExceptionHandler({ StackOverflowError.class, src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
@@ -87,6 +87,7 @@ CUSTOM_FIELD_NAME_MAX_LENGTH_OUT = \uC0AC\uC6A9\uC790 \uC815\uC758 \uD544\uB4DC \uBA85\uC740 \uCD5C\uB300 50\uAE00\uC790\uAE4C\uC9C0 \uC785\uB825\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. CUSTOM_FIELD_USED_NAME = \uC0AC\uC6A9\uC790 \uC815\uC758 \uD544\uB4DC \uBA85\uC774 \uC774\uBBF8 \uC0AC\uC6A9\uB418\uACE0 \uC788\uC2B5\uB2C8\uB2E4. CUSTOM_FIELD_REMOVE_NOT_SELECT = \uC0AD\uC81C\uD560 \uC0AC\uC6A9\uC790 \uC815\uC758 \uD544\uB4DC\uAC00 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. CUSTOM_FIELD_USED_DATA_REMOVE = \uC0AC\uC6A9\uD558\uACE0 \uC788\uB294 \uB370\uC774\uD130\uC785\uB2C8\uB2E4. CUSTOM_FIELD_OPTIONS_NOT_USE_INPUT_FIELD = \uC120\uD0DD\uD55C \uD544\uB4DC\uB294 \uC635\uC158 \uAC12\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. CUSTOM_FIELD_OPTIONS_NOT_EXIST_DEFAULT_VALUE = \uC0AC\uC6A9\uC790 \uC815\uC758 \uD544\uB4DC \uAE30\uBCF8 \uAC12\uC774 \uC635\uC158\uC5D0 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. CUSTOM_FIELD_OPTIONS_USED_EXIST_DEFAULT_VALUE = \uC0AC\uC6A9\uC790 \uC815\uC758 \uD544\uB4DC \uAE30\uBCF8 \uAC12\uC5D0 \uC911\uBCF5\uB41C \uAC12\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4. src/main/webapp/scripts/app/customField/customFieldAdd.controller.js
@@ -42,7 +42,7 @@ // 필드 유형을 변경 했을 때 문자열 필드일 경우에는 옵션 값을 초기화해준다. function changeFieldType() { // if ($scope.vm.form.customFieldType === "INPUT") { $scope.vm.form.name = ""; // $scope.vm.form.name = ""; $scope.vm.form.options = []; $scope.vm.form.optionText = "";