Merge branch 'master' of http://192.168.0.25:9001/r/owl-kisa
| | |
| | | |
| | | <groupId>kr.wisestone.owl</groupId> |
| | | <artifactId>kr.wisestone.owl.its</artifactId> |
| | | <version>4.0.34.RELEASE</version> |
| | | <version>1.0.0.RELEASE</version> |
| | | <packaging>war</packaging> |
| | | |
| | | <properties> |
| | |
| | | import kr.wisestone.owl.repository.IssueTypeRepository; |
| | | import kr.wisestone.owl.service.*; |
| | | import kr.wisestone.owl.util.ConvertUtil; |
| | | import kr.wisestone.owl.util.MapUtil; |
| | | import kr.wisestone.owl.vo.*; |
| | | import kr.wisestone.owl.web.condition.IssueTypeCondition; |
| | | import kr.wisestone.owl.web.form.IssueTypeForm; |
| | |
| | | condition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId()); |
| | | |
| | | List<Map<String, Object>> results = this.issueTypeMapper.find(condition); |
| | | for (Map<String, Object> result : results) { |
| | | Long projectId = MapUtil.getLong(result, "projectId"); |
| | | if (projectId != null) { |
| | | Project project = this.projectService.getProject(projectId); |
| | | ProjectVo projectVo = ConvertUtil.copyProperties(project, ProjectVo.class); |
| | | result.put("projectVo", projectVo); |
| | | } |
| | | } |
| | | |
| | | Long totalCount = this.issueTypeMapper.count(condition); |
| | | int totalPage = (int) Math.ceil((totalCount - 1) / pageable.getPageSize()) + 1; |
| | | List<IssueTypeVo> issueTypeVos = ConvertUtil.convertListToListClass(results, IssueTypeVo.class); |
| | |
| | | private String startDate; |
| | | private String endDate; |
| | | |
| | | private String isApi; |
| | | |
| | | private List<Long> projectIds = Lists.newArrayList(); |
| | | |
| | | public IssueTypeCondition(){} |
| | |
| | | public void setProjectIds(List<Long> projectIds) { |
| | | this.projectIds = projectIds; |
| | | } |
| | | |
| | | public String getIsApi() { |
| | | return isApi; |
| | | } |
| | | |
| | | public void setIsApi(String isApi) { |
| | | this.isApi = isApi; |
| | | } |
| | | } |
| | |
| | | DISTINCT it.id as id, |
| | | it.name as name, |
| | | it.description as description, |
| | | it.color as color |
| | | it.color as color, |
| | | it.project_id as projectId |
| | | FROM |
| | | issue_type it |
| | | INNER JOIN workspace ws on it.workspace_id = ws.id |
| | |
| | | mail.password= |
| | | |
| | | # email \uC124\uC815 |
| | | email.host=mail.g2works.kra |
| | | email.host=mail.g2works.kr |
| | | email.port=587 |
| | | email.userName=wyu@maprex.co.kr |
| | | email.password=1234 |
| | |
| | | email.smtp.auth=true |
| | | email.smtp.starttle.enable=true |
| | | email.debug=true |
| | | email.sendUrl=http://localhost:8081 |
| | | email.sendUrl=http://maprex.iptime.org:8180 |
| | | |
| | | # \uD68C\uACC4 \uB2F4\uB2F9\uC790 \uACB0\uC81C \uCDE8\uC18C \uC54C\uB9BC - \uD68C\uACC4 \uB2F4\uB2F9\uC790\uB294 \uAF2D \uC2DC\uC2A4\uD15C\uC5D0 \uAC00\uC785 \uB418\uC5B4 \uC788\uC5B4\uC57C \uD55C\uB2E4. |
| | | payment.cancel.manager.email=jslee1@wisestone.kr |
| | |
| | | <meta name="viewport" |
| | | content="width=device-width, initial-scale=1, maximum-scale=1"> |
| | | <!-- 봇이 읽는 설명 --> |
| | | <meta name="description" content="이슈 관리 시스템 - 웹 기반의 이슈 관리 시스템 v4.0.34"> |
| | | <meta name="description" content="이슈 관리 시스템 - 탐지 관리"> |
| | | <meta property="og:type" content="website"> |
| | | <meta property="og:title" content="OWL ITS - 와이즈스톤"> |
| | | <meta property="og:description" content="이슈 관리 시스템 - 웹 기반의 이슈 관리 시스템 v4.0.34"> |
| | | <meta property="og:title" content="OWL ITS"> |
| | | <meta property="og:description" content="이슈 관리 시스템 - 탐지 관리"> |
| | | <meta property="og:image" content="https://owlsolution.io/assets/images/main.png"> |
| | | <meta property="og:url" content="https://owlsolution.io"> |
| | | <meta name="google-site-verification" content="yhmSp9Zsw5oecXjp43Ndu0w9rBA3FNpnNZ8bQFA_iDA"/> |
| | | <meta name="viewport" content="user-scalable=no,initial-scale=1,maximum-scale=1"> |
| | | |
| | | <title>OWL ITS v4.0.34</title> |
| | | <title>OWL ITS</title> |
| | | |
| | | <link type="text/css" rel="stylesheet" href="bower_components/font-awesome/css/font-awesome.css"> |
| | | <link type="text/css" rel="stylesheet" href="bower_components/jquery-ui/themes/base/jquery-ui.css"> |
| | |
| | | <link type="text/css" rel="stylesheet" href="custom_components/js-autocomplete-single/js-autocomplete-single.css"> |
| | | <link type="text/css" rel="stylesheet" href="custom_components/js-autocomplete-multi/js-autocomplete-multi.css"> |
| | | <link type="text/css" rel="stylesheet" href="custom_components/js-html-diff/js-html-diff.css"> |
| | | <link type="text/css" rel="stylesheet" href="assets/styles/main.css?version=4.0.34"> |
| | | <link type="text/css" rel="stylesheet" href="assets/styles/main.css?version=1.0.0"> |
| | | <link type="text/css" rel="stylesheet" href="https://fonts.googleapis.com/css?family=Rubik:300,400,500"> |
| | | |
| | | <!-- google font --> |
| | |
| | | 'app', 'angular' |
| | | ], |
| | | function (app, angular) { |
| | | app.controller('apiSettingController', ['$scope', '$rootScope', '$log', '$resourceProvider','$uibModal', 'SweetAlert', '$timeout', '$filter', '$injector', '$controller', 'Api', 'Priority', 'Severity', 'IssueType', |
| | | function ($scope, $rootScope, $log, $resourceProvider, $uibModal, SweetAlert, $timeout, $filter, $injector, $controller, Api, Priority, Severity, IssueType) { |
| | | app.controller('apiSettingController', ['$scope', '$rootScope', '$log', '$resourceProvider','$uibModal', 'SweetAlert', '$timeout', '$filter', '$injector', '$controller', 'Api', 'Priority', 'Severity', 'IssueType', 'IssueTypeCustomField', |
| | | function ($scope, $rootScope, $log, $resourceProvider, $uibModal, SweetAlert, $timeout, $filter, $injector, $controller, Api, Priority, Severity, IssueType, IssueTypeCustomField) { |
| | | |
| | | $scope.fn = { |
| | | changeTab : changeTab, |
| | |
| | | formSubmitOverlap : formSubmitOverlap, |
| | | removeCustomField : removeCustomField, |
| | | getOverlapList : getOverlapList, |
| | | onChangeIssueTypeOverlap : onChangeIssueTypeOverlap |
| | | onChangeIssueTypeOverlap : onChangeIssueTypeOverlap, |
| | | getIssueTypeCustomFields : getIssueTypeCustomFields, |
| | | getCurrentIssueTypeVo : getCurrentIssueTypeVo |
| | | }; |
| | | |
| | | $scope.vm = { |
| | |
| | | priorities : [], |
| | | // projects : [], |
| | | form : { |
| | | issueCustomFields : [], |
| | | issueApiDefault : { |
| | | title : "", |
| | | description : "", |
| | |
| | | issueTypeId : "", |
| | | issueTypeName : "", |
| | | customFieldName : "", |
| | | issueTypeData : null // 이슈 유형 객체 |
| | | }; |
| | | |
| | | angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector})); |
| | |
| | | }); |
| | | } |
| | | |
| | | function getCurrentIssueTypeVo() { |
| | | var issueTypeId = $scope.vm.issueTypeId; |
| | | |
| | | var issueTypeVo = null; |
| | | $scope.vm.issueTypes.forEach(function (issueType) { |
| | | if (issueType.id == issueTypeId) { |
| | | issueTypeVo = issueType; |
| | | } |
| | | }); |
| | | return issueTypeVo; |
| | | } |
| | | |
| | | function onChangeIssueTypeOverlap() { |
| | | $scope.fn.getOverlapList(); |
| | | } |
| | |
| | | Api.findApiDefault($resourceProvider.getContent( |
| | | conditions, $resourceProvider.getPageContent(0, 1000))).then(function (result) { |
| | | $scope.fn.initForm(); |
| | | $scope.fn.getIssueTypeCustomFields(); |
| | | |
| | | if (result.data.message.status === "success") { |
| | | if (angular.isDefined(result.data.data)) { |
| | | $scope.vm.form.issueApiDefault = result.data.data; |
| | | $scope.vm.form.issueApiDefault.priorityId = result.data.data.priorityId != null ? result.data.data.priorityId.toString() : ""; |
| | | $scope.vm.form.issueApiDefault.severityId = result.data.data.severityId != null ? result.data.data.severityId.toString() : ""; |
| | | |
| | | |
| | | // if (angular.isDefined(result.data.data.projectVo)) { |
| | | // $scope.vm.projects = []; |
| | |
| | | }); |
| | | } |
| | | |
| | | // 이슈 유형에 연결된 사용자 정의 필드 |
| | | function getIssueTypeCustomFields() { |
| | | |
| | | $scope.vm.form.issueCustomFields = []; |
| | | |
| | | var issueTypeVo = $scope.fn.getCurrentIssueTypeVo(); |
| | | if (issueTypeVo.projectVo == null) return; |
| | | |
| | | IssueTypeCustomField.find($resourceProvider.getContent({ |
| | | projectId : issueTypeVo.projectVo.id, |
| | | IssueTypeId : issueTypeVo.id }, |
| | | $resourceProvider.getPageContent(0, 1000))).then(function (result) { |
| | | |
| | | if (result.data.message.status === "success") { |
| | | |
| | | $scope.vm.form.issueCustomFields = []; |
| | | angular.forEach(result.data.data, function (issueTypeCustomField) { |
| | | $scope.vm.form.issueCustomFields.push(issueTypeCustomField); |
| | | }); |
| | | } |
| | | else { |
| | | SweetAlert.swal($filter("translate")("issue.failedToUserDefinedFieldListAssociatedLookup"), result.data.message.message, "error"); // 이슈 유형에 연결된 사용자 정의 필드 목록 조회 실패 |
| | | } |
| | | |
| | | }); |
| | | } |
| | | |
| | | |
| | | // 중요도 목록 |
| | | function getSeverities() { |
| | | Severity.find($resourceProvider.getContent({}, |
| | |
| | | $scope.fn.getSeverities(); |
| | | $scope.fn.getPriorities(); |
| | | $scope.fn.getIssueTypes(); |
| | | |
| | | } |
| | | $scope.fn.start(); |
| | | |
| | |
| | | 'use strict'; |
| | | |
| | | require.config({ |
| | | urlArgs : "bust=v4.0.34", |
| | | urlArgs : "bust=v1.0.0", |
| | | paths : { |
| | | 'jquery' : '../bower_components/jquery/dist/jquery', |
| | | 'jquery-ui' : '../bower_components/jquery-ui/jquery-ui', |
| | |
| | | </select> |
| | | |
| | | |
| | | <google-chart |
| | | columns="vm.chartData.columns" |
| | | rows="vm.chartData.rows" |
| | | options="vm.chartData.options"> |
| | | <div class="no-cont1" |
| | | ng-if="vm.chartData.columns.length < 1" |
| | | translate="common.noRecord"> |
| | | 기록이 없습니다. |
| | | </div> |
| | | |
| | | </google-chart> |
| | | <div ng-if="vm.chartData.columns.length > 0"> |
| | | <google-chart |
| | | columns="vm.chartData.columns" |
| | | rows="vm.chartData.rows" |
| | | options="vm.chartData.options"> |
| | | |
| | | </google-chart> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <option ng-repeat="issueType in vm.issueTypes" |
| | | ng-style="{ 'color' : issueType.color, 'font-weight': 600 }" |
| | | value="{{issueType.id}}" |
| | | translate="{{issueType.name}}"> |
| | | translate="{{issueType.name}}(id:{{issueType.id}})"> |
| | | </option> |
| | | </select> |
| | | </div> |
| | |
| | | <div class="element-box"> |
| | | <form role="form" name="apiSettingColumnForm"> |
| | | <div class="form-group mb10"> |
| | | <label for="customFieldSelectForm" class="issue-label"> |
| | | <span translate="issue.issueType">이슈 유형</span> |
| | | </label> |
| | | <select id="customFieldSelectForm" |
| | | name="issueType" |
| | | class="form-control input-sm issue-select-label" |
| | | ng-model="vm.issueTypeId" |
| | | ng-style="{ 'color' : fn.getOptionColor(vm.issueTypes, vm.issueTypeId) }" |
| | | ng-change="fn.onChangeIssueType()" |
| | | required> |
| | | <option ng-repeat="issueType in vm.issueTypes" |
| | | ng-style="{ 'color' : issueType.color, 'font-weight': 600 }" |
| | | value="{{issueType.id}}" |
| | | translate="{{issueType.name}}"> |
| | | </option> |
| | | </select> |
| | | </div> |
| | | |
| | | |
| | | |
| | | <div class="form-group mb10"> |
| | | <label for="issueTitle" class="issue-label"><span translate="issue.issueTitle">일감 제목</span> </label> |
| | |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="col-lg-8"> |
| | | <!-- 사용자 정의 필드 --> |
| | | <div class="row"> |
| | | <label for="issue-priority" class="issue-label"> |
| | | <span translate="common.detectingInfo">탐지 정보</span> |
| | | </label> |
| | | </div> |
| | | <div class="row"> |
| | | |
| | | <div class="col-md-4" ng-repeat="issueCustomField in vm.form.issueCustomFields"> |
| | | <label class="issue-detail-label">이름: {{::issueCustomField.customFieldVo.name}}</label> |
| | | <span class="issue-detail-word-break">ID: {{::issueCustomField.customFieldVo.id}}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="form-group mb10"> |