- 사용자 필드 기능 수정
- 이슈 추가/수정시 워크플로우에 설정된 담당부서로 변경되도록 수정
* DB 초기화 필요
| | |
| | | private Long id; |
| | | private String name; |
| | | private String useFlag; |
| | | private String requiredData; |
| | | |
| | | @Enumerated(EnumType.STRING) |
| | | private CustomFieldType customFieldType; |
| | |
| | | public void setUseFlag(String useFlag) { |
| | | this.useFlag = useFlag; |
| | | } |
| | | |
| | | public String getRequiredData() { |
| | | return requiredData; |
| | | } |
| | | |
| | | public void setRequiredData(String requiredData) { |
| | | this.requiredData = requiredData; |
| | | } |
| | | } |
| | |
| | | |
| | | void findProjectDepartment(Map<String, Object> resJsonData, DepartmentCondition departmentCondition); |
| | | |
| | | void findWorkflowDepartment(Map<String, Object> resJsonData, DepartmentCondition departmentCondition); |
| | | |
| | | List<Map<String, Object>> findProjectDepartment(Project project); |
| | | } |
| | |
| | | |
| | | import kr.wisestone.owl.domain.*; |
| | | import kr.wisestone.owl.mapper.DepartmentMapper; |
| | | import kr.wisestone.owl.repository.WorkflowDepartmentRepository; |
| | | import kr.wisestone.owl.service.*; |
| | | import kr.wisestone.owl.util.CommonUtil; |
| | | import kr.wisestone.owl.web.condition.DepartmentCondition; |
| | |
| | | |
| | | @Autowired |
| | | private ProjectRoleService projectRoleService; |
| | | |
| | | @Autowired |
| | | private WorkflowDepartmentRepository workflowDepartmentRepository; |
| | | |
| | | @Autowired |
| | | private IssueTypeService issueTypeService; |
| | | |
| | | @Autowired |
| | | private WorkspaceService workspaceService; |
| | |
| | | resJsonData.put(Constants.RES_KEY_CONTENTS, departmentVos); |
| | | } |
| | | |
| | | // 워크플로우에 속해있는 부서 목록 조회 |
| | | @Override |
| | | @Transactional(readOnly = true) |
| | | public void findWorkflowDepartment(Map<String, Object> resJsonData, DepartmentCondition departmentCondition) { |
| | | |
| | | IssueType issueType = this.issueTypeService.getIssueType(departmentCondition.getIssueTypeId()); |
| | | Long workflowId = issueType.getWorkflow().getId(); |
| | | List<WorkflowDepartment> workflowDepartmentList = this.workflowDepartmentRepository.findByWorkflowId(workflowId); |
| | | List<DepartmentVo> departmentVos = Lists.newArrayList(); |
| | | |
| | | //List<Long> workflowDepartmentIds = Lists.newArrayList(); |
| | | if(workflowDepartmentList != null && workflowDepartmentList.size()>0){ |
| | | for(WorkflowDepartment workflowDepartment : workflowDepartmentList){ |
| | | DepartmentVo departmentVo = ConvertUtil.copyProperties(workflowDepartment.getDepartment(), DepartmentVo.class); |
| | | departmentVo.setByName(departmentVo.getDepartmentName()); |
| | | //workflowDepartmentIds.add(workflowDepartment.getDepartment().getId()); |
| | | departmentVos.add(departmentVo); |
| | | } |
| | | resJsonData.put(Constants.RES_KEY_CONTENTS, departmentVos); |
| | | } |
| | | } |
| | | |
| | | |
| | | // 부서 목록을 엑셀로 다운로드 한다. |
| | | @Override |
| | |
| | | import kr.wisestone.owl.mapper.ProjectMapper; |
| | | import kr.wisestone.owl.repository.IssueRepository; |
| | | import kr.wisestone.owl.repository.UserDepartmentRepository; |
| | | import kr.wisestone.owl.repository.WorkflowDepartmentRepository; |
| | | import kr.wisestone.owl.service.*; |
| | | import kr.wisestone.owl.util.*; |
| | | import kr.wisestone.owl.util.DateUtil; |
| | |
| | | |
| | | @Autowired |
| | | private UserDepartmentRepository userDepartmentRepository; |
| | | |
| | | @Autowired |
| | | private WorkflowDepartmentRepository workflowDepartmentRepository; |
| | | |
| | | @Override |
| | | protected JpaRepository<Issue, Long> getRepository() { |
| | |
| | | issueCondition.setMyDepartmentIds(myDepartmentIds); |
| | | } |
| | | |
| | | void SetWorkflowDepartment(List<IssueVo> issueVos){ |
| | | for(IssueVo issueVo : issueVos){ |
| | | Long issueTypeId = issueVo.getIssueTypeId(); |
| | | IssueType issueType = this.issueTypeService.getIssueType(issueTypeId); |
| | | Long workflowId = issueType.getWorkflow().getId(); |
| | | List<WorkflowDepartment> workflowDepartmentList = this.workflowDepartmentRepository.findByWorkflowId(workflowId); |
| | | List<Long> workflowDepartmentIds = Lists.newArrayList(); |
| | | if(workflowDepartmentList != null && workflowDepartmentList.size()>0){ |
| | | for(WorkflowDepartment workflowDepartment : workflowDepartmentList){ |
| | | workflowDepartmentIds.add(workflowDepartment.getDepartment().getId()); |
| | | } |
| | | } |
| | | if(issueVo.getIssueTypeId().equals(issueTypeId)){ |
| | | issueVo.setWorkflowDepartmentIds(workflowDepartmentIds); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 이슈 목록을 조회한다. |
| | | @Override |
| | | @Transactional(readOnly = true) |
| | | public List<IssueVo> findIssue(Map<String, Object> resJsonData, |
| | | IssueCondition issueCondition, Pageable pageable) { |
| | | public List<IssueVo> findIssue(Map<String, Object> resJsonData, IssueCondition issueCondition, Pageable pageable) { |
| | | |
| | | // 검색 조건을 만든다 |
| | | if (!this.makeIssueSearchCondition(issueCondition, Lists.newArrayList("01", "02", "03"), pageable)) { |
| | |
| | | totalCount = this.issueMapper.countByDepartment(issueCondition); |
| | | } |
| | | |
| | | |
| | | // 튜닝 전 - 0.8, 0.9, 0.9, 0.9, 0.9 |
| | | /*StopWatch serviceStart = new StopWatch(); |
| | | serviceStart.start();*/ |
| | |
| | | this.setMapToIssueVo(results, issueVos, issueCondition, user); |
| | | |
| | | this.setCountDownIssues(results, issueVos); |
| | | this.SetWorkflowDepartment(issueVos); //워크플로우에 설정한 담당부서 가져오기 |
| | | |
| | | resJsonData.put(Constants.RES_KEY_CONTENTS, issueVos); |
| | | resJsonData.put(Constants.REQ_KEY_PAGE_VO, new ResPage(pageable.getPageNumber(), pageable.getPageSize(), |
| | |
| | | private List<CustomFieldValueVo> customFieldValueVos = Lists.newArrayList(); |
| | | private Boolean modifyPermissionCheck = Boolean.TRUE; // 사용자 정의 필드는 모든 사람들이 수정, 삭제할 수 있어서 기본 값이 True |
| | | private Boolean useCustomFieldValue = Boolean.FALSE; // 이슈에서 사용자 정의 필드 옵션 값을 사용하고 있으면 true, 아닐경우는 false |
| | | private String requiredData; |
| | | |
| | | public CustomFieldVo(){} |
| | | |
| | |
| | | public void setUseCustomFieldValue(Boolean useCustomFieldValue) { |
| | | this.useCustomFieldValue = useCustomFieldValue; |
| | | } |
| | | |
| | | public String getRequiredData() { |
| | | return requiredData; |
| | | } |
| | | |
| | | public void setRequiredData(String requiredData) { |
| | | this.requiredData = requiredData; |
| | | } |
| | | } |
| | |
| | | private IssueVo parentIssueVo; |
| | | private int downIssueCount; |
| | | private int downIssueAllCount; |
| | | private List<Long> workflowDepartmentIds; // 워크플로우에 설정한 담당부서 ID |
| | | |
| | | private List<IssueCompanyVo> issueCompanyVos; |
| | | private List<IssueIspVo> issueIspVos; |
| | |
| | | public void setDownIssueAllCount(int downIssueAllCount) { |
| | | this.downIssueAllCount = downIssueAllCount; |
| | | } |
| | | |
| | | public List<Long> getWorkflowDepartmentIds() { |
| | | return workflowDepartmentIds; |
| | | } |
| | | |
| | | public void setWorkflowDepartmentIds(List<Long> workflowDepartmentIds) { |
| | | this.workflowDepartmentIds = workflowDepartmentIds; |
| | | } |
| | | } |
| | |
| | | private Long projectId; |
| | | |
| | | private List<Long> excludeIds = Lists.newArrayList(); |
| | | |
| | | private List<Long> departmentIds = Lists.newArrayList(); |
| | | |
| | | private Long issueTypeId; |
| | | |
| | | private Integer Page; |
| | | private Integer PageSize; |
| | |
| | | public void setExcludeIds(List<Long> excludeIds) { |
| | | this.excludeIds = excludeIds; |
| | | } |
| | | |
| | | public Long getIssueTypeId() { |
| | | return issueTypeId; |
| | | } |
| | | |
| | | public void setIssueTypeId(Long issueTypeId) { |
| | | this.issueTypeId = issueTypeId; |
| | | } |
| | | } |
| | |
| | | return this.setSuccessMessage(resJsonData); |
| | | } |
| | | |
| | | // 워크플로우에 속해있는 부서 목록 조회 |
| | | @RequestMapping(value = "/department/findWorkflowDepartment", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) |
| | | public |
| | | @ResponseBody |
| | | Map<String, Object> findWorkflowDepartment(@RequestBody Map<String, Map<String, Object>> params) { |
| | | Map<String, Object> resJsonData = new HashMap<>(); |
| | | |
| | | this.departmentService.findWorkflowDepartment(resJsonData, DepartmentCondition.make(params.get(Constants.REQ_KEY_CONTENT))); |
| | | |
| | | return this.setSuccessMessage(resJsonData); |
| | | } |
| | | |
| | | // 부서 엑셀 다운로드 |
| | | @RequestMapping(value = "/department/downloadExcel", method = RequestMethod.POST) |
| | |
| | | private Long workspaceId; |
| | | private List<Long> removeIds = Lists.newArrayList(); |
| | | private String useFlag; |
| | | private String requiredData; |
| | | |
| | | public CustomFieldForm(){} |
| | | |
| | |
| | | form.setOptions(MapUtil.getStrings(params, "options")); |
| | | } |
| | | |
| | | if (MapUtil.getBoolean(params, "requiredData")) { |
| | | form.setRequiredData("Y"); |
| | | }else { |
| | | form.setRequiredData("N"); |
| | | } |
| | | return form; |
| | | } |
| | | |
| | |
| | | public void setUseFlag(String useFlag) { |
| | | this.useFlag = useFlag; |
| | | } |
| | | |
| | | public String getRequiredData() { |
| | | return requiredData; |
| | | } |
| | | |
| | | public void setRequiredData(String requiredData) { |
| | | this.requiredData = requiredData; |
| | | } |
| | | } |
New file |
| | |
| | | -- 필수 데이터 여부 |
| | | ALTER TABLE `custom_field` ADD COLUMN `required_data` VARCHAR(1) NOT NULL DEFAULT 'N'; |
| | | |
| | | -- 도메인 항목 추가 |
| | | ALTER TABLE `company_field` ADD COLUMN `url` VARCHAR(255) NULL; |
| | | ALTER TABLE `isp_field` ADD COLUMN `url` VARCHAR(255) NULL; |
| | | ALTER TABLE `hosting_field` ADD COLUMN `url` VARCHAR(255) NULL; |
| | |
| | | |
| | | |
| | | <!-- 해당 업무 공간에서 참여하고 있는 진행중인 프로젝트를 조회한다 --> |
| | | <!--<select id="findByWorkspaceIdAndIncludeProjectAll" resultType="java.util.HashMap" |
| | | <select id="findByWorkspaceIdAndIncludeProjectAll" resultType="java.util.HashMap" |
| | | parameterType="kr.wisestone.owl.web.condition.ProjectCondition"> |
| | | SELECT |
| | | DISTINCT p.id as id, |
| | |
| | | </foreach> |
| | | </when> |
| | | </choose> |
| | | </select>--> |
| | | </select> |
| | | |
| | | <select id="findByWorkspaceIdAndIncludeProjectAll" resultType="java.util.HashMap" |
| | | <!--<select id="findByWorkspaceIdAndIncludeProjectAll" resultType="java.util.HashMap" |
| | | parameterType="kr.wisestone.owl.web.condition.ProjectCondition"> |
| | | SELECT |
| | | DISTINCT p.id as id, |
| | |
| | | </foreach> |
| | | </when> |
| | | </choose> |
| | | </select> |
| | | </select>--> |
| | | |
| | | <!-- 해당 업무 공간에서 참여하고 있는 진행중인 프로젝트를 조회한다 --> |
| | | <!--<select id="findByWorkspaceIdAndIncludeProject" resultType="java.util.HashMap" |
| | |
| | | "initializedIssueStatus": "이슈 유형을 변경할 경우 사용자 정의 필드, 이슈 상태가 초기화 됩니다.", |
| | | "clickToSelectDate": "클릭하면 날짜를 선택할 수 있습니다.", |
| | | "notIssueTypeCustomFields": "이슈 유형에 연결된 사용자 정의 필드가 없습니다.", |
| | | "pleaseEnterIssueTypeCustomFields": "해당 사용자정의필드는 필수 입력 값 입니다.", |
| | | "attachOnlyFiles": "hwp, jpg, png, txt, pptx, ppt, pdf, xlsx, xls, docx, zip, gif, jpeg, doc, tif, bmp, wmv, avi, mp4, mkv, mov 파일만 첨부할 수 있습니다.", |
| | | "registerExcelIssues": "엑셀로 이슈 등록하기", |
| | | "videoExample": "동영상 예제", |
| | |
| | | ipAdress : "", |
| | | email : "", |
| | | site : "", |
| | | tel : "" |
| | | tel : "", |
| | | requiredData : "" |
| | | } |
| | | }; |
| | | |
| | |
| | | return true; |
| | | } |
| | | } |
| | | |
| | | return false; |
| | | } |
| | | |
| | |
| | | |
| | | var content = angular.copy($scope.vm.form); |
| | | content.name = $rootScope.preventXss(content.name); |
| | | |
| | | |
| | | if ($scope.vm.form.customFieldType === 'MULTI_SELECT'|| $scope.vm.form.customFieldType === "SINGLE_SELECT") { |
| | | var convertDefaultValues = ""; |
| | |
| | | ipAdress : "", |
| | | email : "", |
| | | site : "", |
| | | tel : "" |
| | | tel : "", |
| | | requiredData: "" |
| | | }, |
| | | origin : { |
| | | options : [] // 옵션 값 변경 여부 확인을 위해 서버에서 내려올 때 원본 값을 따로 관리한다. |
| | |
| | | $scope.vm.form.customFieldType = result.data.data.customFieldType; |
| | | $scope.vm.form.defaultValue = result.data.data.defaultValue; |
| | | $scope.vm.form.useCustomFieldValue = result.data.data.useCustomFieldValue; |
| | | $scope.vm.form.requiredData = result.data.data.requiredData; |
| | | |
| | | angular.forEach(result.data.data.customFieldValueVos, function (customFieldValueVo) { |
| | | $scope.vm.form.options.push(customFieldValueVo.value); |
| | |
| | | attachedFiles : [], // 섬머노트로 파일 업로드를 할 경우 서버에서 pk를 따고 issue id와 연동 작업이 필요하다. |
| | | startCompleteDateRange : "", // 시작일 ~ 종료일 |
| | | detectingDateRange : "", // 탐지일 |
| | | issueCustomFields : [] // 이슈에서 사용되는 사용자 정의 필드 |
| | | issueCustomFields : [], // 이슈에서 사용되는 사용자 정의 필드 |
| | | requiredDatas : [] // 사용자 정의 필드 필수 데이터 체크 |
| | | }, |
| | | infiniteAdd : false, // 연속 생성 |
| | | projectName : "", // 프로젝트 명 검색 |
| | |
| | | startCompleteDateRange : $scope.vm.form.startCompleteDateRange, |
| | | detectingDateRange : $scope.vm.form.detectingDateRange, |
| | | |
| | | requiredDatas : (function () { // 사용자 정의 필드 필수 데이터 체크 |
| | | var requiredDatas = []; |
| | | |
| | | angular.forEach($scope.vm.form.requiredDatas, function (issueCustomField) { |
| | | var useValues = []; |
| | | |
| | | if (angular.isArray(issueCustomField.useValues)) { |
| | | angular.forEach(issueCustomField.useValues, function (useValue) { |
| | | useValues.push(useValue.value); |
| | | }); |
| | | } |
| | | else { |
| | | useValues.push(issueCustomField.useValues); |
| | | } |
| | | |
| | | // useValues 를 배열로 변환한다. |
| | | var temp = angular.copy(issueCustomField); |
| | | temp.useValues = useValues; |
| | | issueCustomFields.push(temp); |
| | | }); |
| | | |
| | | return issueCustomFields; |
| | | })(), |
| | | |
| | | issueCustomFields : (function () { // 이슈에서 사용되는 사용자 정의 필드 |
| | | var issueCustomFields = []; |
| | | |
| | |
| | | // 이슈 유형에 연결된 사용자 정의 필드 |
| | | function getIssueTypeCustomFields() { |
| | | $scope.vm.form.issueCustomFields = []; |
| | | $scope.vm.form.requiredDatas = []; |
| | | // 이슈 타입 아이디나 프로젝트 아이디가 없으면 통신을 하지 않는다. |
| | | if (!$rootScope.isDefined($scope.vm.form.issueTypeId) || $scope.vm.form.projects.length < 1) { |
| | | return; |
| | |
| | | if (result.data.message.status === "success") { |
| | | |
| | | $scope.vm.form.issueCustomFields = []; |
| | | $scope.vm.form.requiredDatas = []; |
| | | angular.forEach(result.data.data, function (issueTypeCustomField) { |
| | | switch (issueTypeCustomField.customFieldVo.customFieldType) { |
| | | case "INPUT" : |
| | |
| | | }); |
| | | break; |
| | | } |
| | | |
| | | $scope.vm.form.issueCustomFields.push(issueTypeCustomField); |
| | | if(issueTypeCustomField.customFieldVo.requiredData === "Y") { |
| | | $scope.vm.form.requiredDatas.push(issueTypeCustomField.customFieldVo.requiredData); |
| | | } |
| | | }); |
| | | } |
| | | else { |
| | |
| | | return response; |
| | | }); |
| | | }, |
| | | findWorkflowDepartment : function (conditions) { |
| | | return $http.post("department/findWorkflowDepartment", conditions).then(function (response) { |
| | | $log.debug("워크플로우에 속해있는 부서 목록 조회 : ", response); |
| | | return response; |
| | | }); |
| | | }, |
| | | |
| | | //사용자 관리 |
| | | find : function (conditions) { |
| | |
| | | |
| | | function getIssueDepartmentList(query, excludeList, page, callBack) { |
| | | var conditions = { |
| | | issueTypeId : $scope.vm.form.issueTypeId, |
| | | departmentName : query, |
| | | userId : $rootScope.user.id, |
| | | projectId : (function () { |
| | |
| | | var deferred = $q.defer(); |
| | | |
| | | |
| | | //프로젝트에 속해있는 담당부서 찾기 |
| | | UserWorkspace.findProjectDepartment($resourceProvider.getContent( // 페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다. |
| | | //워크플로우에 속해있는 담당부서 찾기 |
| | | UserWorkspace.findWorkflowDepartment($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; |
| | | var filterDepartments = departments.filter(function(item, idx){ |
| | | return departments.findIndex(function(item2, idx2){ |
| | | return item.departmentName === item2.departmentName |
| | | }) == idx; |
| | | }); |
| | | |
| | | if ($rootScope.isDefined(callBack)) { |
| | | callBack(result); |
| | | } |
| | | |
| | | deferred.resolve(result.data.data); |
| | | deferred.resolve(filterDepartments); |
| | | } |
| | | else { |
| | | SweetAlert.swal($filter("translate")("common.failedToProjectListLookUp"), result.data.message.message, "error"); // "프로젝트 목록 조회 실패" |
| | |
| | | <div class="form-group"> |
| | | <label for="customFieldAddForm2"><span translate="customField.fieldType">필드 유형</span> <code |
| | | class="highlighter-rouge">*</code></label> |
| | | <label> <input type="checkbox" ng-model="vm.form.requiredData"> 필수 데이터 </label> |
| | | <select id="customFieldAddForm2" class="form-control" ng-model="vm.form.customFieldType" |
| | | ng-change="fn.changeFieldType()"> |
| | | <option value="INPUT" translate="common.stringField">문자열 필드</option> |
| | |
| | | <!-- 기본 입력 --> |
| | | <div ng-switch-when="INPUT"> |
| | | <input type="text" class="form-control input-sm" |
| | | name="input" |
| | | ng-model="issueCustomField.useValues" |
| | | maxlength="100" |
| | | autocomplete="off" |
| | | kr-input |
| | | ng-required="issueCustomField.fieldOption == '01'"> |
| | | ng-required="issueCustomField.fieldOption == '01' || issueCustomField.customFieldVo.requiredData == 'Y'"> |
| | | <small class="help-block form-text text-danger" |
| | | ng-show="issueCustomField.customFieldVo.requiredData == 'Y'" |
| | | ng-if="issueAddForm.input.$error.required" |
| | | translate="issue.pleaseEnterIssueTypeCustomFields">해당 사용자정의필드는 필수 입력 값 입니다. |
| | | </small> |
| | | </div> |
| | | |
| | | <div ng-switch-when="NUMBER"> |
| | | <input type="text" class="form-control input-sm" |
| | | name="number" |
| | | ng-model="issueCustomField.useValues" |
| | | maxlength="100" |
| | | autocomplete="off" |
| | | kr-input |
| | | ng-required="issueCustomField.fieldOption == '01'"> |
| | | ng-required="issueCustomField.fieldOption == '01' || issueCustomField.customFieldVo.requiredData == 'Y'"> |
| | | <small class="help-block form-text text-danger" |
| | | ng-show="issueCustomField.customFieldVo.requiredData == 'Y'" |
| | | ng-if="issueAddForm.number.$error.required" |
| | | translate="issue.pleaseEnterIssueTypeCustomFields">해당 사용자 정의 필드는 필수 입력 값 입니다. |
| | | </small> |
| | | </div> |
| | | |
| | | <div ng-switch-when="DATETIME"> |
| | | <input type="text" class="form-control input-sm" |
| | | name="dateTime" |
| | | ng-model="issueCustomField.useValues" |
| | | maxlength="100" |
| | | autocomplete="off" |
| | | kr-input |
| | | ng-required="issueCustomField.fieldOption == '01'"> |
| | | ng-required="issueCustomField.fieldOption == '01' || issueCustomField.customFieldVo.requiredData == 'Y'"> |
| | | <small class="help-block form-text text-danger" |
| | | ng-show="issueCustomField.customFieldVo.requiredData == 'Y'" |
| | | ng-if="issueAddForm.dateTime.$error.required" |
| | | translate="issue.pleaseEnterIssueTypeCustomFields">해당 사용자 정의 필드는 필수 입력 값 입니다. |
| | | </small> |
| | | </div> |
| | | |
| | | <div ng-switch-when="IP_ADDRESS"> |
| | | <input type="text" class="form-control input-sm" |
| | | name="ipAddress" |
| | | ng-model="issueCustomField.useValues" |
| | | maxlength="100" |
| | | autocomplete="off" |
| | | kr-input |
| | | ng-required="issueCustomField.fieldOption == '01'"> |
| | | ng-required="issueCustomField.fieldOption == '01' || issueCustomField.customFieldVo.requiredData == 'Y'"> |
| | | <small class="help-block form-text text-danger" |
| | | ng-show="issueCustomField.customFieldVo.requiredData == 'Y'" |
| | | ng-if="issueAddForm.ipAddress.$error.required" |
| | | translate="issue.pleaseEnterIssueTypeCustomFields">해당 사용자 정의 필드는 필수 입력 값 입니다. |
| | | </small> |
| | | </div> |
| | | |
| | | <div ng-switch-when="SITE"> |
| | | <input type="text" class="form-control input-sm" |
| | | name="site" |
| | | ng-model="issueCustomField.useValues" |
| | | maxlength="100" |
| | | autocomplete="off" |
| | | kr-input |
| | | ng-required="issueCustomField.fieldOption == '01'"> |
| | | ng-required="issueCustomField.fieldOption == '01' || issueCustomField.customFieldVo.requiredData == 'Y'"> |
| | | <small class="help-block form-text text-danger" |
| | | ng-show="issueCustomField.customFieldVo.requiredData == 'Y'" |
| | | ng-if="issueAddForm.site.$error.required" |
| | | translate="issue.pleaseEnterIssueTypeCustomFields">해당 사용자 정의 필드는 필수 입력 값 입니다. |
| | | </small> |
| | | </div> |
| | | |
| | | <div ng-switch-when="TEL"> |
| | | <input type="text" class="form-control input-sm" |
| | | name="tel" |
| | | ng-model="issueCustomField.useValues" |
| | | maxlength="100" |
| | | autocomplete="off" |
| | | kr-input |
| | | ng-required="issueCustomField.fieldOption == '01'"> |
| | | ng-required="issueCustomField.fieldOption == '01' || issueCustomField.customFieldVo.requiredData == 'Y'"> |
| | | <small class="help-block form-text text-danger" |
| | | ng-show="issueCustomField.customFieldVo.requiredData == 'Y'" |
| | | ng-if="issueAddForm.tel.$error.required" |
| | | translate="issue.pleaseEnterIssueTypeCustomFields">해당 사용자 정의 필드는 필수 입력 값 입니다. |
| | | </small> |
| | | </div> |
| | | |
| | | <!-- 단일 셀렉트 --> |
| | | <div ng-switch-when="SINGLE_SELECT"> |
| | | <select class="form-control input-sm issue-select-label" |
| | | ng-required="issueCustomField.fieldOption == '01'" |
| | | name="singleSelect" |
| | | ng-required="issueCustomField.fieldOption == '01' || issueCustomField.customFieldVo.requiredData == 'Y'" |
| | | ng-model="issueCustomField.useValues"> |
| | | <option value="" value="" translate="common.choose">선택하세요.</option> |
| | | <option ng-repeat="customFieldValueVo in issueCustomField.customFieldVo.customFieldValueVos" |
| | |
| | | {{customFieldValueVo.value}} |
| | | </option> |
| | | </select> |
| | | <small class="help-block form-text text-danger" |
| | | ng-show="issueCustomField.customFieldVo.requiredData == 'Y'" |
| | | ng-if="issueAddForm.singleSelect.$error.required" |
| | | translate="issue.pleaseEnterIssueTypeCustomFields">해당 사용자 정의 필드는 필수 입력 값 입니다. |
| | | </small> |
| | | </div> |
| | | |
| | | <!-- 멀티 셀렉트 --> |
| | | <div ng-switch-when="MULTI_SELECT"> |
| | | <ng-dropdown-multiselect class="multiSelect cursor" |
| | | name="multiSelect" |
| | | ng-required="issueCustomField.customFieldVo.requiredData == 'Y'" |
| | | data-input-name="" |
| | | modal-form-auto-scroll |
| | | selected-model="issueCustomField.useValues" |
| | | extra-settings="{ 'idProp' : 'value', 'externalIdProp' : 'value', 'displayProp' : 'value', 'stringTypeOption' : 'true', stopRemoveBodyEvent : true }" |
| | | options="issueCustomField.customFieldVo.customFieldValueVos"></ng-dropdown-multiselect> |
| | | <small class="help-block form-text text-danger" |
| | | ng-show="issueCustomField.customFieldVo.requiredData == 'Y'" |
| | | ng-if="issueAddForm.multiSelect.$error.required" |
| | | translate="issue.pleaseEnterIssueTypeCustomFields">해당 사용자 정의 필드는 필수 입력 값 입니다. |
| | | </small> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="row"> |
| | | <div class="col-sm-4"> |
| | | <select id="relationIssueType" |
| | | name="relationIssueType" |
| | | class="form-control input-sm" |
| | | ng-options="option.name for option in vm.relationIssueTypes track by option.id" |
| | | ng-model="vm.relationIssueType" |
| | | required> |
| | | </select> |
| | | </div> |
| | | </div> |
| | | |
| | | <hr> |
| | | <div class="row"> |
| | | <div class="col-lg-4 fontcolor_green"> |
| | |
| | | <!-- 기본 입력 --> |
| | | <div ng-switch-when="INPUT"> |
| | | <input type="text" class="form-control input-sm" |
| | | name="input" |
| | | ng-model="issueCustomField.useValues" |
| | | maxlength="100" |
| | | autocomplete="off" |
| | | kr-input |
| | | ng-required="issueCustomField.fieldOption == '01'"> |
| | | ng-required="issueCustomField.fieldOption == '01' || issueCustomField.customFieldVo.requiredData == 'Y'"> |
| | | <small class="help-block form-text text-danger" |
| | | ng-show="issueCustomField.customFieldVo.requiredData == 'Y'" |
| | | ng-if="issueAddForm.input.$error.required" |
| | | translate="issue.pleaseEnterIssueTypeCustomFields">해당 사용자정의필드는 필수 입력 값 입니다. |
| | | </small> |
| | | </div> |
| | | |
| | | <div ng-switch-when="NUMBER"> |
| | | <input type="text" class="form-control input-sm" |
| | | name="number" |
| | | ng-model="issueCustomField.useValues" |
| | | maxlength="100" |
| | | autocomplete="off" |
| | | kr-input |
| | | ng-required="issueCustomField.fieldOption == '01'"> |
| | | ng-required="issueCustomField.fieldOption == '01' || issueCustomField.customFieldVo.requiredData == 'Y'"> |
| | | <small class="help-block form-text text-danger" |
| | | ng-show="issueCustomField.customFieldVo.requiredData == 'Y'" |
| | | ng-if="issueAddForm.number.$error.required" |
| | | translate="issue.pleaseEnterIssueTypeCustomFields">해당 사용자 정의 필드는 필수 입력 값 입니다. |
| | | </small> |
| | | </div> |
| | | |
| | | <div ng-switch-when="DATETIME"> |
| | | <input type="text" class="form-control input-sm" |
| | | name="dateTime" |
| | | ng-model="issueCustomField.useValues" |
| | | maxlength="100" |
| | | autocomplete="off" |
| | | kr-input |
| | | ng-required="issueCustomField.fieldOption == '01'"> |
| | | ng-required="issueCustomField.fieldOption == '01' || issueCustomField.customFieldVo.requiredData == 'Y'"> |
| | | <small class="help-block form-text text-danger" |
| | | ng-show="issueCustomField.customFieldVo.requiredData == 'Y'" |
| | | ng-if="issueAddForm.dateTime.$error.required" |
| | | translate="issue.pleaseEnterIssueTypeCustomFields">해당 사용자 정의 필드는 필수 입력 값 입니다. |
| | | </small> |
| | | </div> |
| | | |
| | | <div ng-switch-when="IP_ADDRESS"> |
| | | <input type="text" class="form-control input-sm" |
| | | name="ipAddress" |
| | | ng-model="issueCustomField.useValues" |
| | | maxlength="100" |
| | | autocomplete="off" |
| | | kr-input |
| | | ng-required="issueCustomField.fieldOption == '01'"> |
| | | ng-required="issueCustomField.fieldOption == '01' || issueCustomField.customFieldVo.requiredData == 'Y'"> |
| | | <small class="help-block form-text text-danger" |
| | | ng-show="issueCustomField.customFieldVo.requiredData == 'Y'" |
| | | ng-if="issueAddForm.ipAddress.$error.required" |
| | | translate="issue.pleaseEnterIssueTypeCustomFields">해당 사용자 정의 필드는 필수 입력 값 입니다. |
| | | </small> |
| | | </div> |
| | | |
| | | <div ng-switch-when="SITE"> |
| | | <input type="text" class="form-control input-sm" |
| | | name="site" |
| | | ng-model="issueCustomField.useValues" |
| | | maxlength="100" |
| | | autocomplete="off" |
| | | kr-input |
| | | ng-required="issueCustomField.fieldOption == '01'"> |
| | | ng-required="issueCustomField.fieldOption == '01' || issueCustomField.customFieldVo.requiredData == 'Y'"> |
| | | <small class="help-block form-text text-danger" |
| | | ng-show="issueCustomField.customFieldVo.requiredData == 'Y'" |
| | | ng-if="issueAddForm.site.$error.required" |
| | | translate="issue.pleaseEnterIssueTypeCustomFields">해당 사용자 정의 필드는 필수 입력 값 입니다. |
| | | </small> |
| | | </div> |
| | | |
| | | <div ng-switch-when="TEL"> |
| | | <input type="text" class="form-control input-sm" |
| | | name="tel" |
| | | ng-model="issueCustomField.useValues" |
| | | maxlength="100" |
| | | autocomplete="off" |
| | | kr-input |
| | | ng-required="issueCustomField.fieldOption == '01'"> |
| | | ng-required="issueCustomField.fieldOption == '01' || issueCustomField.customFieldVo.requiredData == 'Y'"> |
| | | <small class="help-block form-text text-danger" |
| | | ng-show="issueCustomField.customFieldVo.requiredData == 'Y'" |
| | | ng-if="issueAddForm.tel.$error.required" |
| | | translate="issue.pleaseEnterIssueTypeCustomFields">해당 사용자 정의 필드는 필수 입력 값 입니다. |
| | | </small> |
| | | </div> |
| | | |
| | | <!-- 단일 셀렉트 --> |
| | | <div ng-switch-when="SINGLE_SELECT"> |
| | | <select class="form-control input-sm issue-select-label" |
| | | ng-required="issueCustomField.fieldOption == '01'" |
| | | name="singleSelect" |
| | | ng-required="issueCustomField.fieldOption == '01' || issueCustomField.customFieldVo.requiredData == 'Y'" |
| | | ng-model="issueCustomField.useValues"> |
| | | <option value="" value="" translate="common.choose">선택하세요.</option> |
| | | <option ng-repeat="customFieldValueVo in issueCustomField.customFieldVo.customFieldValueVos" |
| | |
| | | {{customFieldValueVo.value}} |
| | | </option> |
| | | </select> |
| | | <small class="help-block form-text text-danger" |
| | | ng-show="issueCustomField.customFieldVo.requiredData == 'Y'" |
| | | ng-if="issueAddForm.singleSelect.$error.required" |
| | | translate="issue.pleaseEnterIssueTypeCustomFields">해당 사용자 정의 필드는 필수 입력 값 입니다. |
| | | </small> |
| | | </div> |
| | | |
| | | <!-- 멀티 셀렉트 --> |
| | | <div ng-switch-when="MULTI_SELECT"> |
| | | <ng-dropdown-multiselect class="multiSelect cursor" |
| | | name="multiSelect" |
| | | ng-required="issueCustomField.customFieldVo.requiredData == 'Y'" |
| | | data-input-name="" |
| | | modal-form-auto-scroll |
| | | selected-model="issueCustomField.useValues" |
| | | extra-settings="{ 'idProp' : 'value', 'externalIdProp' : 'value', 'displayProp' : 'value', 'stringTypeOption' : 'true', stopRemoveBodyEvent : true }" |
| | | options="issueCustomField.customFieldVo.customFieldValueVos"></ng-dropdown-multiselect> |
| | | <small class="help-block form-text text-danger" |
| | | ng-show="issueCustomField.customFieldVo.requiredData == 'Y'" |
| | | ng-if="issueAddForm.multiSelect.$error.required" |
| | | translate="issue.pleaseEnterIssueTypeCustomFields">해당 사용자 정의 필드는 필수 입력 값 입니다. |
| | | </small> |
| | | </div> |
| | | </div> |
| | | </div> |