From 257766aa7e8a88b2b371fc6f8f52751af7d84eda Mon Sep 17 00:00:00 2001
From: wyu <kknd09321@nate.com>
Date: 수, 08 12월 2021 21:54:40 +0900
Subject: [PATCH] 연관 ,하위 이슈 요청 횟수 수정

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java             |   24 +++
 src/main/java/kr/wisestone/owl/vo/IssueVo.java                                |   16 ++
 src/main/java/kr/wisestone/owl/vo/IssueTableConfigVo.java                     |   52 ++++++
 src/main/java/kr/wisestone/owl/web/controller/IssueTableConfigController.java |   17 +
 src/main/java/kr/wisestone/owl/domain/IssueTableConfig.java                   |    6 
 src/main/java/kr/wisestone/owl/service/IssueTableConfigService.java           |    4 
 src/main/webapp/views/issue/issueDetail.html                                  |   10 
 src/main/webapp/scripts/app/issue/issueDetail.controller.js                   |  228 +++++++++++++---------------
 src/main/webapp/scripts/app/project/projectList.controller.js                 |   19 ++
 src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java  |   40 ----
 src/main/webapp/assets/styles/main.css                                        |    3 
 src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js  |   12 +
 12 files changed, 253 insertions(+), 178 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/domain/IssueTableConfig.java b/src/main/java/kr/wisestone/owl/domain/IssueTableConfig.java
index c623106..eb97a52 100644
--- a/src/main/java/kr/wisestone/owl/domain/IssueTableConfig.java
+++ b/src/main/java/kr/wisestone/owl/domain/IssueTableConfig.java
@@ -10,6 +10,12 @@
 public class IssueTableConfig extends BaseEntity implements Serializable {
     private static final long serialVersionUID = 1L;
 
+    public static final int ISSUE_TABLE_TYPE_MAIN = 1;
+    public static final int ISSUE_TABLE_TYPE_REL = 2;
+    public static final int ISSUE_TABLE_TYPE_DOWN = 3;
+
+    public static int[] IssueTableTypes = {ISSUE_TABLE_TYPE_MAIN, ISSUE_TABLE_TYPE_REL, ISSUE_TABLE_TYPE_DOWN};
+
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
diff --git a/src/main/java/kr/wisestone/owl/service/IssueTableConfigService.java b/src/main/java/kr/wisestone/owl/service/IssueTableConfigService.java
index 4c62f9a..174ac36 100644
--- a/src/main/java/kr/wisestone/owl/service/IssueTableConfigService.java
+++ b/src/main/java/kr/wisestone/owl/service/IssueTableConfigService.java
@@ -14,10 +14,6 @@
 
     void detailIssueTableConfig(Map<String, Object> params, Map<String, Object> resJsonData);
 
-    void detailRelationIssueTableConfig(Map<String, Object> params, Map<String, Object> resJsonData);
-
-    void detailDownIssueTableConfig(Map<String, Object> params, Map<String, Object> resJsonData);
-
     IssueTableConfig findByUserIdAndWorkspaceIdAndIssueTypeIdAndIssueTableType(Long issueId, int issueTableType);
 
     IssueTableConfig findByIssueTypeIdAndIssueTableType(Long issueTypeId, int issueTableType);
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
index 554e8bd..8e77478 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -60,6 +60,9 @@
     private ProjectService projectService;
 
     @Autowired
+    private IssueTableConfigService issueTableConfigService;
+
+    @Autowired
     private IssueStatusService issueStatusService;
 
     @Autowired
@@ -1226,6 +1229,7 @@
 
                 case "02": //  �봽濡쒖젥�듃, �씠�뒋 �쑀�삎, �씠�뒋 �긽�깭,  �슦�꽑�닚�쐞, 以묒슂�룄, �떞�떦�옄, 泥⑤��뙆�씪, �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂�, �뙎湲�, 湲곕줉�쓣 �뀑�똿�븳�떎.
                     this.setIssueDetail(issueVo, issue);    //  �씠�뒋 �긽�꽭 �젙蹂대�� �뀑�똿�븳�떎.
+                    this.setIssueTableConfigs(issue, issueVo);
                     issueVo.setProjectVo(ConvertUtil.copyProperties(issue.getProject(), ProjectVo.class));
                     break;
             }
@@ -1237,6 +1241,26 @@
         resJsonData.put(Constants.RES_KEY_CONTENTS, issueVo);
     }
 
+    // �뀒�씠釉� �꽕�젙 �뀑�똿
+    private void setIssueTableConfigs(Issue issue, IssueVo issueVo) {
+        Long IssueTypeId = issue.getIssueType().getId();
+
+        for (int tableConfigType : IssueTableConfig.IssueTableTypes) {
+            if (tableConfigType != IssueTableConfig.ISSUE_TABLE_TYPE_MAIN) {
+                issueVo.addIssueTableConfigVo(createIssueTableConfigVo(IssueTypeId, tableConfigType));
+            }
+        }
+    }
+
+    private IssueTableConfigVo createIssueTableConfigVo(Long issueTypeId, int tableConfigType) {
+        IssueTableConfig issueTableConfig = this.issueTableConfigService.findByUserIdAndWorkspaceIdAndIssueTypeIdAndIssueTableType(issueTypeId, tableConfigType);
+        if (issueTableConfig != null) {
+            return ConvertUtil.copyProperties(issueTableConfig, IssueTableConfigVo.class);
+        }
+        return new IssueTableConfigVo();
+    }
+
+
     // �븯�쐞 �씠�뒋 �젙蹂대�� �뀑�똿�븳�떎
     private void setDownIssues(Issue issue, IssueVo issueVo) {
         List<Issue> downIssues = this.issueRepository.findByParentIssueId(issue.getId());
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java
index 4a8da1d..dcdbf65 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java
@@ -85,6 +85,7 @@
         return this.addIssueTableConfig(params, issueTypeId, issueTableType);
     }
 
+
     //  �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 �궗�슜�옄�쓽 �씠�뒋 �뀒�씠釉� �꽕�젙�쓣 議고쉶�븳�떎.
     @Override
     @Transactional(readOnly = true)
@@ -109,29 +110,11 @@
         return  null;
     }
 
-    // detail 以묐났 肄붾뱶 �젣嫄�
-    private void detailIssueTableConfig(Map<String, Object> resJsonData, Long issueTypeId, int issueTableType) {
-        //  �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 �궗�슜�옄�쓽 �씠�뒋 寃��깋 議곌굔�쓣 議고쉶�븳�떎.
-        IssueTableConfig issueTableConfig = this.findByUserIdAndWorkspaceIdAndIssueTypeIdAndIssueTableType(issueTypeId, issueTableType);
-
-        if (issueTableConfig != null && issueTableConfig.getIssueTableType() == 2) {
-            resJsonData.put(Constants.RES_KEY_CONTENTS, issueTableConfig.getIssueTableConfigs());
-        } else if (issueTableConfig != null && issueTableConfig.getIssueTableType() == 3) {
-            resJsonData.put(Constants.RES_KEY_CONTENTS, issueTableConfig.getIssueTableConfigs());
-        }
-        else {
-            resJsonData.put(Constants.RES_KEY_CONTENTS, "");
-        }
-    }
-
-    //  ���옣�맂 �씠�뒋 �뀒�씠釉� �꽕�젙�쓣 議고쉶�븳�떎.
     @Override
-    @Transactional(readOnly = true)
     public void detailIssueTableConfig(Map<String, Object> params, Map<String, Object> resJsonData) {
-        issueTypeId = MapUtil.getLong(params, "issueTypeId");
+        Long issueTypeId = MapUtil.getLong(params,"issueTypeId");
+        int issueTableType = MapUtil.getInteger(params,"issueTableType");
 
-        issueTableType = 1;
-        //  �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 �궗�슜�옄�쓽 �씠�뒋 寃��깋 議곌굔�쓣 議고쉶�븳�떎.
         IssueTableConfig issueTableConfig = this.findByUserIdAndWorkspaceIdAndIssueTypeIdAndIssueTableType(issueTypeId, issueTableType);
 
         if (issueTableConfig != null) {
@@ -141,21 +124,4 @@
             resJsonData.put(Constants.RES_KEY_CONTENTS, "");
         }
     }
-    //  ���옣�맂 �뿰愿� �씠�뒋 �뀒�씠釉� �꽕�젙 議고쉶
-    @Override
-    public void detailRelationIssueTableConfig(Map<String, Object> params, Map<String, Object> resJsonData) {
-        issueTableType = 2;
-        issueTypeId = MapUtil.getLong(params, "issueTypeId");
-        this.detailIssueTableConfig(resJsonData, issueTypeId, issueTableType);
-    }
-    //  ���옣�맂 �븯�쐞 �씠�뒋 �뀒�씠釉� �꽕�젙 議고쉶
-    @Override
-    public void detailDownIssueTableConfig(Map<String, Object> params, Map<String, Object> resJsonData) {
-        issueTableType = 3;
-        issueTypeId = MapUtil.getLong(params, "issueTypeId");
-        this.detailIssueTableConfig(resJsonData, issueTypeId, issueTableType);
-    }
-
-
-
 }
diff --git a/src/main/java/kr/wisestone/owl/vo/IssueTableConfigVo.java b/src/main/java/kr/wisestone/owl/vo/IssueTableConfigVo.java
new file mode 100644
index 0000000..0cc533d
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/vo/IssueTableConfigVo.java
@@ -0,0 +1,52 @@
+package kr.wisestone.owl.vo;
+
+import com.google.common.collect.Lists;
+import kr.wisestone.owl.domain.User;
+import kr.wisestone.owl.domain.Workspace;
+
+import javax.persistence.FetchType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import java.util.ArrayList;
+import java.util.List;
+
+public class IssueTableConfigVo extends BaseVo{
+    private Long id;
+    private String issueTableConfigs;
+    private int issueTableType;
+    private Long issueTypeId;
+
+    public IssueTableConfigVo() {}
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getIssueTableConfigs() {
+        return issueTableConfigs;
+    }
+
+    public void setIssueTableConfigs(String issueTableConfigs) {
+        this.issueTableConfigs = issueTableConfigs;
+    }
+
+    public int getIssueTableType() {
+        return issueTableType;
+    }
+
+    public void setIssueTableType(int issueTableType) {
+        this.issueTableType = issueTableType;
+    }
+
+    public Long getIssueTypeId() {
+        return issueTypeId;
+    }
+
+    public void setIssueTypeId(Long issueTypeId) {
+        this.issueTypeId = issueTypeId;
+    }
+}
diff --git a/src/main/java/kr/wisestone/owl/vo/IssueVo.java b/src/main/java/kr/wisestone/owl/vo/IssueVo.java
index 7a64cb4..5ac8406 100644
--- a/src/main/java/kr/wisestone/owl/vo/IssueVo.java
+++ b/src/main/java/kr/wisestone/owl/vo/IssueVo.java
@@ -1,6 +1,7 @@
 package kr.wisestone.owl.vo;
 
 import com.google.common.collect.Lists;
+import kr.wisestone.owl.domain.IssueTableConfig;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -48,6 +49,7 @@
     //private List<IssueDownVo> issueDownVos = Lists.newArrayList();
     private List<IssueVo> issueDownVos = Lists.newArrayList();
     private List<IssueVo> issueRelationVos = Lists.newArrayList();
+    private List<IssueTableConfigVo> issueTableConfigVos = Lists.newArrayList();
     private Long attachedFileCount;
     private Long issueCommentCount;
     private String modifyByName;    //  蹂�寃쎌옄 �젙蹂� - �씠�뒋 蹂�寃� �젙蹂� �긽�꽭 �솗�씤�뿉�꽌 �궗�슜
@@ -484,4 +486,18 @@
     public void setWorkflowDepartmentIds(List<Long> workflowDepartmentIds) {
         this.workflowDepartmentIds = workflowDepartmentIds;
     }
+
+    public List<IssueTableConfigVo> getIssueTableConfigVos() {
+        return issueTableConfigVos;
+    }
+
+    public void setIssueTableConfigVos(List<IssueTableConfigVo> issueTableConfigVos) {
+        this.issueTableConfigVos = issueTableConfigVos;
+    }
+
+    public void addIssueTableConfigVo(IssueTableConfigVo issueTableConfigVo) {
+        if (this.issueTableConfigVos != null) {
+            this.issueTableConfigVos.add(issueTableConfigVo);
+        }
+    }
 }
diff --git a/src/main/java/kr/wisestone/owl/web/controller/IssueTableConfigController.java b/src/main/java/kr/wisestone/owl/web/controller/IssueTableConfigController.java
index 8fa676f..2d0f926 100644
--- a/src/main/java/kr/wisestone/owl/web/controller/IssueTableConfigController.java
+++ b/src/main/java/kr/wisestone/owl/web/controller/IssueTableConfigController.java
@@ -1,6 +1,7 @@
 package kr.wisestone.owl.web.controller;
 
 import kr.wisestone.owl.constant.Constants;
+import kr.wisestone.owl.domain.IssueTableConfig;
 import kr.wisestone.owl.service.IssueTableConfigService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
@@ -64,7 +65,10 @@
     Map<String, Object> detail(@RequestBody Map<String, Map<String, Object>> params) {
         Map<String, Object> resJsonData = new HashMap<>();
 
-        this.issueTableConfigService.detailIssueTableConfig(params.get(Constants.REQ_KEY_CONTENT), resJsonData);
+        Map<String, Object> param = params.get(Constants.REQ_KEY_CONTENT);
+        param.put("issueTableType", IssueTableConfig.ISSUE_TABLE_TYPE_MAIN);
+
+        this.issueTableConfigService.detailIssueTableConfig(param, resJsonData);
 
         return this.setSuccessMessage(resJsonData);
     }
@@ -75,7 +79,11 @@
     @ResponseBody
     Map<String, Object> relationDetail(@RequestBody Map<String, Map<String, Object>> params) {
         Map<String, Object> resJsonData = new HashMap<>();
-        this.issueTableConfigService.detailRelationIssueTableConfig(params.get(Constants.REQ_KEY_CONTENT), resJsonData);
+
+        Map<String, Object> param = params.get(Constants.REQ_KEY_CONTENT);
+        param.put("issueTableType", IssueTableConfig.ISSUE_TABLE_TYPE_REL);
+
+        this.issueTableConfigService.detailIssueTableConfig(param, resJsonData);
 
         return this.setSuccessMessage(resJsonData);
     }
@@ -86,7 +94,10 @@
     @ResponseBody
     Map<String, Object> downDetail(@RequestBody Map<String, Map<String, Object>> params) {
         Map<String, Object> resJsonData = new HashMap<>();
-        this.issueTableConfigService.detailDownIssueTableConfig(params.get(Constants.REQ_KEY_CONTENT),resJsonData);
+        Map<String, Object> param = params.get(Constants.REQ_KEY_CONTENT);
+        param.put("issueTableType", IssueTableConfig.ISSUE_TABLE_TYPE_DOWN);
+
+        this.issueTableConfigService.detailIssueTableConfig(param, resJsonData);
 
         return this.setSuccessMessage(resJsonData);
     }
diff --git a/src/main/webapp/assets/styles/main.css b/src/main/webapp/assets/styles/main.css
index ad1020d..ab8dc34 100644
--- a/src/main/webapp/assets/styles/main.css
+++ b/src/main/webapp/assets/styles/main.css
@@ -14271,7 +14271,7 @@
 }
 
 .menu-position-side.menu-w.color-scheme-dark .logo-w {
-    background-color:#f2f4f8;
+    background-color:#FFFFFF;
 }
 
 .menu-position-side.menu-w.color-scheme-dark .element-search:before {
@@ -29693,6 +29693,7 @@
     overflow: hidden;
     margin-top: 30px;
     font-size: 0.69rem;
+    margin-left: 35rem;
 }
 
 .width-20-p {
diff --git a/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js b/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js
index f1ae81c..136f3c5 100644
--- a/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js
+++ b/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js
@@ -75,9 +75,13 @@
                                         //  �봽濡쒖젥�듃 �씠由�(�봽濡쒖젥�듃 由ъ뒪�듃�뿉�꽌 �궗�슜)
                                         case "PROJECT_NAME" :
                                             if ($rootScope.workProject != null && $rootScope.workProject.id == scope.data.id) {
-                                                makeTag += "<span class='titlenameSelect cursor table-word-break-all sub-line' ng-click='event.changeLastProject(data.id)'>" + myToken + scope.data.name.replace(/</gi, '&lt;') + "</span>";
+                                                // makeTag += "<span class='titlenameSelect cursor table-word-break-all sub-line' ng-click='event.changeLastProject(data.id)'>" + myToken + scope.data.name.replace(/</gi, '&lt;') + "</span>";
+                                                makeTag += "<span class='titlenameSelect cursor table-word-break-all sub-line' ng-click='event.moveIssue(data.id)'>" + myToken + scope.data.name.replace(/</gi, '&lt;') + "</span>";
+                                                // makeTag += "<span class='titlenameSelect cursor table-word-break-all sub-line' ng-click='event.changeDetailView(data.id)'>" + myToken + scope.data.name.replace(/</gi, '&lt;') + "</span>";
                                             } else {
-                                                makeTag += "<span class='titlename cursor table-word-break-all sub-line' ng-click='event.changeLastProject(data.id)'>" + myToken + scope.data.name.replace(/</gi, '&lt;') + "</span>";
+                                                // makeTag += "<span class='titlename cursor table-word-break-all sub-line' ng-click='event.changeLastProject(data.id)'>" + myToken + scope.data.name.replace(/</gi, '&lt;') + "</span>";
+                                                makeTag += "<span class='titlename cursor table-word-break-all sub-line' ng-click='event.moveIssue(data.id)'>" + myToken + scope.data.name.replace(/</gi, '&lt;') + "</span>";
+                                                // makeTag += "<span class='titlename cursor table-word-break-all sub-line' ng-click='event.changeDetailView(data.id)'>" + myToken + scope.data.name.replace(/</gi, '&lt;') + "</span>";
                                             }
                                             break;
 
@@ -425,8 +429,8 @@
                                             makeTag += '<span class="number-tag">' + scope.data.projectKey + ' - ' + scope.data.issueNumber + '</span>';
                                             makeTag += ' <span class="tag"> / </span> ';
                                             makeTag += "<span class='badge' ng-style='{ \"background-color\" : \"" + scope.data.issueStatusColor + "\"," + "\"border-color\"" + " : \"" + scope.data.issueStatusColor + "\", \"color\": \"#FFFFFF\" }'>" + scope.data.issueStatusName + "</span>";
-                                            makeTag += ' <span class="tag"> / </span> ';
-                                            makeTag += '<span class="tag">' + scope.data.projectName + '</span>';
+                                            // makeTag += ' <span class="tag"> / </span> ';
+                                            // makeTag += '<span class="tag">' + scope.data.projectName + '</span>';
                                             makeTag += '</div>';
                                             makeTag += '<div class="titlename cursor text-left" ng-click="event.changeDetailView(data.id)">' + scope.data.title.replace(/</gi, '&lt;') + '</div>';
                                             makeTag += '<div class="extra-infodiv text-left">';
diff --git a/src/main/webapp/scripts/app/issue/issueDetail.controller.js b/src/main/webapp/scripts/app/issue/issueDetail.controller.js
index cba9d5e..4c97ae7 100644
--- a/src/main/webapp/scripts/app/issue/issueDetail.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueDetail.controller.js
@@ -46,8 +46,8 @@
                 $scope.fn.addDownIssue = addDownIssue;      // �븯�쐞 �씠�뒋 異붽�
                 $scope.fn.addRelationIssueTableConfig = addRelationIssueTableConfig;      // �뿰愿� �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙
                 $scope.fn.addDownIssueTableConfig = addDownIssueTableConfig;      // �븯�쐞 �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙
-                $scope.fn.getRelTableConfigs = getRelTableConfigs;
-                $scope.fn.getDownTableConfigs = getDownTableConfigs;
+                $scope.fn.setRelTableConfigs = setRelTableConfigs;
+                $scope.fn.setDownTableConfigs = setDownTableConfigs;
                 $scope.fn.containsPartner = containsPartner;
                 $scope.fn.onActivate = onActivate;
 
@@ -137,8 +137,6 @@
                 $scope.$on("getIssueList", function () {
                     $scope.fn.getIssueDetail();
                 });
-
-
 
                 // �븯�쐞 �씠�뒋 �궘�젣
                 function removeDownIssue(id) {
@@ -490,125 +488,95 @@
                     });
                 }
 
-                // �뿰愿� �씠�뒋 �긽�꽭 議고쉶
-                function getRelTableConfigs() {
-                    var content = {
-                        issueId : $scope.vm.viewer.id,
-                        issueTypeId : $rootScope.getCurrentIssueTypeId()
-                    };
+                // �뿰愿� �씠�뒋 �뀒�씠釉� �꽕�젙
+                function setRelTableConfigs(issueTableConfigVo) {
+                    var issueTableConfigs = issueTableConfigVo.issueTableConfigs;
 
-                    IssueTableConfig.relationDetail($resourceProvider.getContent(
-                        content,
-                        $resourceProvider.getPageContent(0, 0))).then(function (result) {
+                    //  �뿰愿� �뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 媛믪쓣 媛��졇���꽌 �쟻�슜�븳�떎.
+                    if ($rootScope.isDefined(issueTableConfigs)) {
+                        //  �씠�뒋 �뀒�씠釉� �꽕�젙 �젙蹂대�� ���옣 �븳�떎.
 
-                        if (result.data.message.status === "success") {
-                            var issueTableConfigs = result.data.data;
+                        $scope.vm.issueRelTableConfigs = [];
+                        $scope.vm.issueRelTableConfigs = JSON.parse(issueTableConfigs);
+                        $scope.vm.issueRelTableConfigs.sort(function (a, b) {
+                            return a.position < b.position ? -1 : a.position > b.position ? 1 : 0;
+                        });
 
-                            //  �뿰愿� �뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 媛믪쓣 媛��졇���꽌 �쟻�슜�븳�떎.
-                            if ($rootScope.isDefined(issueTableConfigs)) {
-                                //  �씠�뒋 �뀒�씠釉� �꽕�젙 �젙蹂대�� ���옣 �븳�떎.
+                        $scope.vm.relTableConfigs = [];
+                        $scope.vm.relTableConfigs.push($tableProvider.config()
+                            .setHName("issue.relationIssueType")
+                            .setDType("renderer")
+                            .setDAlign("text-center")
+                            .setHWidth("width-30-p bold")
+                            .setHSort(false)
+                            .setDRenderer("ISSUE_RELATION_TYPE"))
+                        $scope.vm.relTableConfigs.push($tableProvider.config()
+                            .setHName("issue.relationIssueTitle")
+                            .setDType("renderer")
+                            .setDAlign("text-center")
+                            .setHWidth("width-60-p bold")
+                            .setHSort(false)
+                            .setDRenderer("ISSUE_RELATION_MOVE"))
+                        angular.forEach($scope.vm.issueRelTableConfigs, function (Rel_issueTableConfig) {
+                            //  �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎.
+                            if (Rel_issueTableConfig.display) {
+                                //  �뀒�씠釉붿쓽 而щ읆�쓣 留뚮뱾�뼱以��떎.
+                                $scope.fn.setRelTableColumn(Rel_issueTableConfig);
 
-                                $scope.vm.issueRelTableConfigs = [];
-                                $scope.vm.issueRelTableConfigs = JSON.parse(issueTableConfigs);
-                                $scope.vm.issueRelTableConfigs.sort(function (a, b) {
-                                    return a.position < b.position ? -1 : a.position > b.position ? 1 : 0;
-                                });
-
-                                $scope.vm.relTableConfigs = [];
-                                $scope.vm.relTableConfigs.push($tableProvider.config()
-                                    .setHName("issue.relationIssueType")
-                                    .setDType("renderer")
-                                    .setDAlign("text-center")
-                                    .setHWidth("width-30-p bold")
-                                    .setHSort(false)
-                                    .setDRenderer("ISSUE_RELATION_TYPE"))
-                                $scope.vm.relTableConfigs.push($tableProvider.config()
-                                    .setHName("issue.relationIssueTitle")
-                                    .setDType("renderer")
-                                    .setDAlign("text-center")
-                                    .setHWidth("width-60-p bold")
-                                    .setHSort(false)
-                                    .setDRenderer("ISSUE_RELATION_MOVE"))
-                                angular.forEach($scope.vm.issueRelTableConfigs, function (Rel_issueTableConfig) {
-                                    //  �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎.
-                                    if (Rel_issueTableConfig.display) {
-                                        //  �뀒�씠釉붿쓽 而щ읆�쓣 留뚮뱾�뼱以��떎.
-                                        $scope.fn.setRelTableColumn(Rel_issueTableConfig);
-
-                                    }
-                                });
-                                $scope.vm.relTableConfigs.push($tableProvider.config()
-                                    .setHName("issue.relationIssueDelete")
-                                    .setDType("renderer")
-                                    .setHWidth("width-20-p bold")
-                                    .setDRenderer("ISSUE_RELATION_DELETE")
-                                    .setHSort(false)
-                                    .setDAlign("text-center"))
-
-                            } else {
-                                makeRelTableConfigs();
                             }
+                        });
+                        $scope.vm.relTableConfigs.push($tableProvider.config()
+                            .setHName("issue.relationIssueDelete")
+                            .setDType("renderer")
+                            .setHWidth("width-20-p bold")
+                            .setDRenderer("ISSUE_RELATION_DELETE")
+                            .setHSort(false)
+                            .setDAlign("text-center"))
 
-                        } else {
-                            SweetAlert.swal($filter("translate")("issue.errorRemovableIssueStatusList"), result.data.message.message, "error"); // "�씠�룞 媛��뒫�븳 �씠�뒋 �긽�깭 紐⑸줉 議고쉶 �삤瑜�"
-                        }
-                    });
+                    } else {
+                        makeRelTableConfigs();
+                    }
+
                 }
 
-                // �븯�쐞 �씠�뒋 �긽�꽭 議고쉶
-                function getDownTableConfigs() {
-                    var content = {
-                        issueId : $scope.vm.viewer.id,
-                        issueTypeId : $rootScope.getCurrentIssueTypeId()
-                    };
+                // �븯�쐞 �씠�뒋 �긽�꽭 議고쉶 寃곌낵 �꽕�젙
+                function setDownTableConfigs(issueTableConfigVo) {
+                    var issueTableConfigs = issueTableConfigVo.issueTableConfigs;
 
-                    IssueTableConfig.downDetail($resourceProvider.getContent(
-                        content,
-                        $resourceProvider.getPageContent(0, 0))).then(function (result) {
-
-                        if (result.data.message.status === "success") {
-                            var issueTableConfigs = result.data.data;
-
-                            //  �뿰愿� �뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 媛믪쓣 媛��졇���꽌 �쟻�슜�븳�떎.
-                            if ($rootScope.isDefined(issueTableConfigs)) {
-                                //  �씠�뒋 �뀒�씠釉� �꽕�젙 �젙蹂대�� ���옣 �븳�떎.
-                                $scope.vm.issueDownTableConfigs = [];
-                                $scope.vm.issueDownTableConfigs = JSON.parse(issueTableConfigs);
-                                $scope.vm.issueDownTableConfigs.sort(function (a, b) {
-                                    return a.position < b.position ? -1 : a.position > b.position ? 1 : 0;
-                                });
-                                $scope.vm.downTableConfigs = [];
-                                $scope.vm.downTableConfigs.push($tableProvider.config()
-                                    .setHName("issue.downIssueTitle")
-                                    .setDType("renderer")
-                                    .setDAlign("text-center")
-                                    .setHWidth("width-60-p bold")
-                                    .setHSort(false)
-                                    .setDRenderer("ISSUE_DOWN_MOVE"))
-                                angular.forEach($scope.vm.issueDownTableConfigs, function (Down_issueTableConfig) {
-                                    //  �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎.
-                                    if (Down_issueTableConfig.display) {
-                                        //  �뀒�씠釉붿쓽 而щ읆�쓣 留뚮뱾�뼱以��떎.
-                                        $scope.fn.setDownTableColumn(Down_issueTableConfig);
-                                    }
-                                });
-                                $scope.vm.downTableConfigs.push($tableProvider.config()
-                                    .setHName("issue.relationIssueDelete")
-                                    .setDType("renderer")
-                                    .setHWidth("width-20-p bold")
-                                    .setDRenderer("ISSUE_DOWN_DELETE")
-                                    .setHSort(false)
-                                    .setDAlign("text-center"))
-
-                            } else {
-                                makeDownTableConfigs();
+                    //  �뿰愿� �뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 媛믪쓣 媛��졇���꽌 �쟻�슜�븳�떎.
+                    if ($rootScope.isDefined(issueTableConfigs)) {
+                        //  �씠�뒋 �뀒�씠釉� �꽕�젙 �젙蹂대�� ���옣 �븳�떎.
+                        $scope.vm.issueDownTableConfigs = [];
+                        $scope.vm.issueDownTableConfigs = JSON.parse(issueTableConfigs);
+                        $scope.vm.issueDownTableConfigs.sort(function (a, b) {
+                            return a.position < b.position ? -1 : a.position > b.position ? 1 : 0;
+                        });
+                        $scope.vm.downTableConfigs = [];
+                        $scope.vm.downTableConfigs.push($tableProvider.config()
+                            .setHName("issue.downIssueTitle")
+                            .setDType("renderer")
+                            .setDAlign("text-center")
+                            .setHWidth("width-60-p bold")
+                            .setHSort(false)
+                            .setDRenderer("ISSUE_DOWN_MOVE"))
+                        angular.forEach($scope.vm.issueDownTableConfigs, function (Down_issueTableConfig) {
+                            //  �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎.
+                            if (Down_issueTableConfig.display) {
+                                //  �뀒�씠釉붿쓽 而щ읆�쓣 留뚮뱾�뼱以��떎.
+                                $scope.fn.setDownTableColumn(Down_issueTableConfig);
                             }
+                        });
+                        $scope.vm.downTableConfigs.push($tableProvider.config()
+                            .setHName("issue.relationIssueDelete")
+                            .setDType("renderer")
+                            .setHWidth("width-20-p bold")
+                            .setDRenderer("ISSUE_DOWN_DELETE")
+                            .setHSort(false)
+                            .setDAlign("text-center"))
 
-                        }
-                        else {
-                            SweetAlert.swal($filter("translate")("issue.errorRemovableIssueStatusList"), result.data.message.message, "error"); // "�씠�룞 媛��뒫�븳 �씠�뒋 �긽�깭 紐⑸줉 議고쉶 �삤瑜�"
-                        }
-                    });
+                    } else {
+                        makeDownTableConfigs();
+                    }
                 }
 
                 // �뿰愿� �씠�뒋 異붽�
@@ -665,17 +633,22 @@
                         }
                     });
                 }
-
-                //  �씠�뒋紐낆쓣 �겢由��븯硫� �씠�뒋 �긽�꽭 �젙蹂대�� 議고쉶�븳�떎.
-                //  $rootScope.$on("getIssueDetail", function (event, args) {
-                //      $scope.vm.viewer.id = args["id"];
-                //      $scope.fn.getIssueDetail();
-                //  });
+                // todo 紐⑤Ⅴ寃좊떎.....
+                 // �씠�뒋紐낆쓣 �겢由��븯硫� �씠�뒋 �긽�꽭 �젙蹂대�� 議고쉶�븳�떎.
+                 // $rootScope.$on("getIssueDetail", function (event, args) {
+                 //     $scope.vm.viewer.id = args["id"];
+                 //     $scope.fn.getIssueDetail();
+                 // });
                 
                 // �씠硫붿씪 蹂대궦�썑 �긽�꽭�솕硫� 媛깆떊
-                 $rootScope.$on("getIssueDetail", function (event, args) {
-                     $scope.fn.getIssueDetail();
-                 });
+                // todo �씠嫄� 萸먯�...
+                //  $rootScope.$on("getIssueDetail", function (event, args) {
+                //      $scope.fn.getIssueDetail();
+                //  });
+
+                $scope.$on("getIssueDetail", function (event, args) {
+                    $scope.fn.getIssueDetail();
+                });
 
                 //  �씠�뒋紐낆쓣 �겢由��븯硫� �씠�뒋 �긽�꽭 �젙蹂대�� 議고쉶�븳�떎.
                 // $scope.$on("getIssueDetail", function (event, args) {
@@ -683,6 +656,7 @@
                 //     $scope.fn.getIssueDetail();
                 // });
 
+                // todo �씠嫄� �삉 萸먯�
                 $scope.$watch(function() {
                     return $rootScope.currentDetailIssueId;
                 }, function() {
@@ -691,6 +665,8 @@
                         $scope.fn.getIssueDetail();
                     }
                 }, true);
+
+
 
                 //  珥덇린�솕 �빐�빞�븷 �븷紐⑹쓣 吏��젙�븯�뿬 �떎瑜� �씠�뒋瑜� �겢由��븷 �븣 珥덇린�솕�빐以��떎.
                 function initReload() {
@@ -865,8 +841,8 @@
                     //  珥덇린�솕 �빐�빞�븷 �븷紐⑹쓣 吏��젙�븯�뿬 �떎瑜� �씠�뒋瑜� �겢由��븷 �븣 珥덇린�솕�빐以��떎.
                     $scope.fn.initReload();
 
-                    $scope.fn.getRelTableConfigs();
-                    $scope.fn.getDownTableConfigs();
+                    // $scope.fn.getRelTableConfigs();
+                    // $scope.fn.getDownTableConfigs();
 
                         Issue.detail($resourceProvider.getContent(
                         {id : $scope.vm.viewer.id, deep : "02"},
@@ -874,6 +850,7 @@
 
                         if (result.data.message.status === "success") {
                             if (angular.isDefined(result.data.data)) {
+
                                 $scope.vm.viewer = angular.copy(result.data.data);
                                 //  �씠�뒋 �씠誘몄� 誘몃━ 蹂닿린 留뚮뱾湲�
                                 $scope.fn.makePreviewImages(result.data.data.attachedFileVos);
@@ -894,6 +871,10 @@
                                 $scope.vm.form.issues.push(result.data.data);
                                 $scope.vm.form.issuesDown = [];
                                 $scope.vm.form.issuesDown.push(result.data.data);
+
+                                var issueTableConfigVos = result.data.data.issueTableConfigVos;
+                                $scope.fn.setRelTableConfigs(issueTableConfigVos[0]);
+                                $scope.fn.setDownTableConfigs(issueTableConfigVos[1]);
 
                                 // �뿰愿� �씠�뒋 諛섎났臾�
                                 if (result.data.data.issueRelationVos !== null) {
@@ -917,7 +898,6 @@
                                 }
                                 $scope.vm.viewer.issueRelationVos = result.data.data.issueRelationVos;
                                 $scope.vm.viewer.issueDownVos = result.data.data.issueDownVos;
-
 
                                 if ($rootScope.workProject.id > -1 && result.data.data.projectVo !== null) {
                                     $rootScope.changeLastProject(result.data.data.projectVo.id);
diff --git a/src/main/webapp/scripts/app/project/projectList.controller.js b/src/main/webapp/scripts/app/project/projectList.controller.js
index 0e62c35..9fb34d2 100644
--- a/src/main/webapp/scripts/app/project/projectList.controller.js
+++ b/src/main/webapp/scripts/app/project/projectList.controller.js
@@ -69,7 +69,9 @@
                 $scope.tableEvent = {
                     modify : modify,
                     projectCustomFieldConfig : projectCustomFieldConfig,
-                    changeLastProject : changeLastProject
+                    changeLastProject : changeLastProject,
+                    moveIssue : moveIssue,
+                    changeDetailView : changeDetailView
                 };
 
                 angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector}));
@@ -364,6 +366,21 @@
                     $rootScope.changeLastProject(projectId);
                 }
 
+                function moveIssue(projectId) {
+                    // $rootScope.currentDetailIssueId = null;
+                    // �씠�뒋 踰덊샇瑜� ���옣�븳 �썑 �씠�뒋 紐⑸줉�쑝濡� �씠�룞�븳�떎.
+                    // $rootScope.$broadcast("makeIssueSearch", {id :$rootScope.currentDetailIssueId});
+                    //$rootScope.$broadcast("makeIssueSearch", {id :$rootScope.issueTypeMenu.id});
+                    $rootScope.$broadcast("makeIssueSearch",projectId);
+                }
+
+                function changeDetailView() {
+                    // $rootScope.$broadcast("getIssueDetail", {id: $rootScope.currentDetailIssueId});
+                    //$scope.$broadcast("getIssueDetail", {id: $rootScope.currentDetailIssueId});
+                    // $rootScope.$broadcast("getIssueDetail", {id :$rootScope.currentDetailIssueId});
+                    //$rootScope.$broadcast("getIssueList", {id :$rootScope.issueTypeMenu.id});
+                }
+
                 $scope.fn.makeTableConfigs();
                 $scope.fn.getPageList(0);
             }
diff --git a/src/main/webapp/views/issue/issueDetail.html b/src/main/webapp/views/issue/issueDetail.html
index 2eabc4c..538bf7a 100644
--- a/src/main/webapp/views/issue/issueDetail.html
+++ b/src/main/webapp/views/issue/issueDetail.html
@@ -493,7 +493,7 @@
                                             type : '', maxlength : 200, autoResize : true, stopRemoveBodyEvent : true }"></js-autocomplete-single>
                         </div>
                         <div class="col-auto vertical-middle" style="display: flex">
-                            <button type="button" class="btn btn-primary form-control input-sm"
+                            <button type="button" class="btn btn-primary"
                                     ng-click="fn.addRelationIssue()"
                                     translate="issue.addRelationIssue">�뿰愿� �씠�뒋 異붽�</button>
                             <button type="button" class="btn btn-sm btn-primary btn-roundRel  offset-1"
@@ -510,8 +510,10 @@
                         <span class="info_detail_font h3" translate="issue.downIssue">�븯�쐞 �씠�뒋</span>
                     </div>
                     <div class="col-sm-2">
-                        <button type="button" class="btn btn-darkgrey form-control input-sm offset-5" ng-click="fn.modifyDownIssueStatus()"
-                                translate="common.updateDownIssueAllStatus">�븯�쐞�씠�뒋 �긽�깭 �쟾泥� 蹂�寃�</button>
+                        <a><button type="button" class="btn btn-darkgrey offset-7"
+                                ng-click="fn.modifyDownIssueStatus()">
+                                <span translate="common.updateDownIssueAllStatus">�븯�쐞�씠�뒋 �긽�깭 �쟾泥� 蹂�寃�</span>
+                        </button></a>
                     </div>
                     <div class="col-sm-1">
                         <button class="btn btn-darkgrey offset-10"  ng-click="fn.addDownIssueTableConfig()" type="button"><span translate="issue.settingTableDisplay">�뀒�씠釉� �몴�떆 �꽕�젙</span></button>
@@ -538,7 +540,7 @@
                                             type : '', maxlength : 200, autoResize : true, stopRemoveBodyEvent : true }"></js-autocomplete-single>
                         </div>
                         <div class="col-auto vertical-middle" style="display: flex">
-                            <button type="button" class="btn btn-primary form-control input-sm"
+                            <button type="button" class="btn btn-primary"
                                     ng-click="fn.addDownIssue()"
                                     translate="issue.addDownIssue">異붽�</button>
                         </div>

--
Gitblit v1.8.0