From 7042c385c3579479367f0e710d1b92f4e3878a42 Mon Sep 17 00:00:00 2001
From: jhjang <jhjang@maprex.co.kr>
Date: 금, 03 12월 2021 17:40:53 +0900
Subject: [PATCH] - 버전 1.0으로 재정의(인터넷진흥원용 버전) - api 설정에 이슈타입 id, 사용자정의 필드 표시 하도록 수정

---
 src/main/webapp/scripts/app/api/apiSetting.controller.js              |   54 ++++++++++++++++-
 src/main/resources/system_prod.properties                             |    4 
 src/main/resources/mybatis/query-template/issueType-template.xml      |    3 
 pom.xml                                                               |    2 
 src/main/webapp/index.html                                            |   10 +-
 src/main/webapp/scripts/main.js                                       |    2 
 src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java |   10 +++
 src/main/webapp/views/api/apiSettingColumn.html                       |   36 +++++------
 8 files changed, 87 insertions(+), 34 deletions(-)

diff --git a/pom.xml b/pom.xml
index e76a386..569ef29 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
 
     <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>
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
index 1e14323..a9ce5db 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
@@ -12,6 +12,7 @@
 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;
@@ -175,6 +176,15 @@
         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);
diff --git a/src/main/resources/mybatis/query-template/issueType-template.xml b/src/main/resources/mybatis/query-template/issueType-template.xml
index fef510b..4aacf92 100644
--- a/src/main/resources/mybatis/query-template/issueType-template.xml
+++ b/src/main/resources/mybatis/query-template/issueType-template.xml
@@ -8,7 +8,8 @@
         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
diff --git a/src/main/resources/system_prod.properties b/src/main/resources/system_prod.properties
index 139801f..951aeed 100644
--- a/src/main/resources/system_prod.properties
+++ b/src/main/resources/system_prod.properties
@@ -38,7 +38,7 @@
 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
@@ -46,7 +46,7 @@
 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
diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html
index 37c0a9b..cdf13fd 100644
--- a/src/main/webapp/index.html
+++ b/src/main/webapp/index.html
@@ -12,16 +12,16 @@
     <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">
@@ -40,7 +40,7 @@
     <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 -->
diff --git a/src/main/webapp/scripts/app/api/apiSetting.controller.js b/src/main/webapp/scripts/app/api/apiSetting.controller.js
index 31a58c5..d24baf8 100644
--- a/src/main/webapp/scripts/app/api/apiSetting.controller.js
+++ b/src/main/webapp/scripts/app/api/apiSetting.controller.js
@@ -7,8 +7,8 @@
         '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,
@@ -27,7 +27,9 @@
                     formSubmitOverlap : formSubmitOverlap,
                     removeCustomField : removeCustomField,
                     getOverlapList : getOverlapList,
-                    onChangeIssueTypeOverlap : onChangeIssueTypeOverlap
+                    onChangeIssueTypeOverlap : onChangeIssueTypeOverlap,
+                    getIssueTypeCustomFields : getIssueTypeCustomFields,
+                    getCurrentIssueTypeVo : getCurrentIssueTypeVo
                 };
 
                 $scope.vm = {
@@ -37,6 +39,7 @@
                     priorities : [],
                     // projects : [],
                     form : {
+                        issueCustomFields : [],
                         issueApiDefault : {
                             title : "",
                             description : "",
@@ -61,7 +64,6 @@
                     issueTypeId : "",
                     issueTypeName : "",
                     customFieldName : "",
-                    issueTypeData : null            // �씠�뒋 �쑀�삎 媛앹껜
                 };
 
                 angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector}));
@@ -124,6 +126,18 @@
                     });
                 }
 
+                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();
                 }
@@ -137,11 +151,14 @@
                         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 = [];
@@ -247,6 +264,34 @@
                     });
                 }
 
+                //  �씠�뒋 �쑀�삎�뿉 �뿰寃곕맂 �궗�슜�옄 �젙�쓽 �븘�뱶
+                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({},
@@ -286,6 +331,7 @@
                     $scope.fn.getSeverities();
                     $scope.fn.getPriorities();
                     $scope.fn.getIssueTypes();
+
                 }
                 $scope.fn.start();
 
diff --git a/src/main/webapp/scripts/main.js b/src/main/webapp/scripts/main.js
index 597c614..23c6296 100644
--- a/src/main/webapp/scripts/main.js
+++ b/src/main/webapp/scripts/main.js
@@ -4,7 +4,7 @@
 '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',
diff --git a/src/main/webapp/views/api/apiSettingColumn.html b/src/main/webapp/views/api/apiSettingColumn.html
index b89e0fa..0217992 100644
--- a/src/main/webapp/views/api/apiSettingColumn.html
+++ b/src/main/webapp/views/api/apiSettingColumn.html
@@ -15,7 +15,7 @@
                 <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>
@@ -27,25 +27,6 @@
 <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>
@@ -121,6 +102,21 @@
                 </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">

--
Gitblit v1.8.0