From e35b0c987bac49abbb77d4b31e41270cc566e54d Mon Sep 17 00:00:00 2001
From: wyu <kknd09321@nate.com>
Date: 화, 23 11월 2021 09:03:02 +0900
Subject: [PATCH] 이슈 상세 연관,하위 테이블 표시 설정 - [프론트]

---
 src/main/java/kr/wisestone/owl/domain/enumType/IssueModifyType.java           |    3 
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java             |    5 
 src/main/java/kr/wisestone/owl/vo/IssueVo.java                                |   20 ++
 src/main/webapp/scripts/app/issue/issueAddRelationTableConfig.controller.js   |   44 +++-
 src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js           |   41 ++---
 src/main/java/kr/wisestone/owl/web/controller/IssueTableConfigController.java |    9 
 src/main/webapp/views/issue/issueListNormal.html                              |    2 
 src/main/webapp/scripts/app/issue/issueList.controller.js                     |   22 ++
 src/main/webapp/scripts/app/issue/issueAddDownTableConfig.controller.js       |   14 +
 src/main/webapp/scripts/app/issue/issueDetail.controller.js                   |  284 +++++++++++++++++++++++++++++++---
 src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java  |   14 +
 src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js  |    5 
 12 files changed, 374 insertions(+), 89 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/domain/enumType/IssueModifyType.java b/src/main/java/kr/wisestone/owl/domain/enumType/IssueModifyType.java
index 5d3027e..5fb0739 100644
--- a/src/main/java/kr/wisestone/owl/domain/enumType/IssueModifyType.java
+++ b/src/main/java/kr/wisestone/owl/domain/enumType/IssueModifyType.java
@@ -12,7 +12,8 @@
     ISSUE_STATUS,
     ISSUE_TYPE,
     PERIOD,
-    ASSIGNEE,
+//    ASSIGNEE,
+    ASSIGNEE_TEAM,
     CUSTOM_FIELD,
     TITLE,
     DESCRIPTION
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 15062d7..1bb3151 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -54,6 +54,9 @@
     private IssueRepository issueRepository;
 
     @Autowired
+    private IssueTableConfigService issueTableConfigService;
+
+    @Autowired
     private ProjectService projectService;
 
     @Autowired
@@ -859,8 +862,10 @@
         this.setIssueIspField(issue, issueVo);  //ISP �젙蹂� �꽭�똿
         this.setIssueHostingField(issue, issueVo);  //HOSTING �젙蹂� �꽭�똿
         this.setParentIssue(issue,issueVo); //�긽�쐞 �씠�뒋 �젙蹂� �꽭�똿
+
     }
 
+
     //  �긽�쐞�씪媛� �젙蹂� 異붽�
     private void setParentIssue(Issue issue, IssueVo issueVo) {
         if(issue.getParentIssue() != null){
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 e777d90..7712b2d 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java
@@ -113,10 +113,9 @@
     private void detailMultipleCode(Map<String, Object> resJsonData, Long issueId, int issueTableType) {
         //  �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 �궗�슜�옄�쓽 �씠�뒋 寃��깋 議곌굔�쓣 議고쉶�븳�떎.
         IssueTableConfig issueTableConfig = this.findByUserIdAndWorkspaceIdAndIssueIdAndIssueTableType(issueId, issueTableType);
-        IssueTableConfig saveIssueTableType = this.findByIssueIdAndIssueTableType(issueId,issueTableType);
 
         if (issueTableConfig != null) {
-            resJsonData.put(Constants.RES_KEY_CONTENTS, saveIssueTableType.getIssueTableConfigs());
+            resJsonData.put(Constants.RES_KEY_CONTENTS, issueTableConfig.getIssueTableConfigs());
         }
         else {
             resJsonData.put(Constants.RES_KEY_CONTENTS, "");
@@ -129,7 +128,15 @@
     public void detailIssueTableConfig(Map<String, Object> resJsonData) {
         issueId = (long) -1;
         issueTableType = 1;
-        this.detailMultipleCode(resJsonData, issueId, issueTableType);
+        //  �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 �궗�슜�옄�쓽 �씠�뒋 寃��깋 議곌굔�쓣 議고쉶�븳�떎.
+        IssueTableConfig issueTableConfig = this.findByUserIdAndWorkspaceIdAndIssueIdAndIssueTableType(issueId, issueTableType);
+
+        if (issueTableConfig != null) {
+            resJsonData.put(Constants.RES_KEY_CONTENTS, issueTableConfig.getIssueTableConfigs());
+        }
+        else {
+            resJsonData.put(Constants.RES_KEY_CONTENTS, "");
+        }
     }
     //  ���옣�맂 �뿰愿� �씠�뒋 �뀒�씠釉� �꽕�젙 議고쉶
     @Override
@@ -147,4 +154,5 @@
     }
 
 
+
 }
diff --git a/src/main/java/kr/wisestone/owl/vo/IssueVo.java b/src/main/java/kr/wisestone/owl/vo/IssueVo.java
index 170abeb..ebf9514 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;
@@ -56,6 +57,9 @@
     private List<IssueCompanyVo> issueCompanyVos;
     private List<IssueIspVo> issueIspVos;
     private List<IssueHostingVo> issueHostingVos;
+
+    private IssueTableConfig issueRelTableConfig;
+    private IssueTableConfig issueDownTableConfig;
 
     public IssueVo(){}
 
@@ -426,4 +430,20 @@
     public void setParentIssueVo(IssueVo parentIssueVo) {
         this.parentIssueVo = parentIssueVo;
     }
+
+    public IssueTableConfig getIssueRelTableConfig() {
+        return issueRelTableConfig;
+    }
+
+    public void setIssueRelTableConfig(IssueTableConfig issueRelTableConfig) {
+        this.issueRelTableConfig = issueRelTableConfig;
+    }
+
+    public IssueTableConfig getIssueDownTableConfig() {
+        return issueDownTableConfig;
+    }
+
+    public void setIssueDownTableConfig(IssueTableConfig issueDownTableConfig) {
+        this.issueDownTableConfig = issueDownTableConfig;
+    }
 }
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 638d2a2..0189993 100644
--- a/src/main/java/kr/wisestone/owl/web/controller/IssueTableConfigController.java
+++ b/src/main/java/kr/wisestone/owl/web/controller/IssueTableConfigController.java
@@ -63,6 +63,7 @@
     @ResponseBody
     Map<String, Object> detail() {
         Map<String, Object> resJsonData = new HashMap<>();
+
         this.issueTableConfigService.detailIssueTableConfig(resJsonData);
 
         return this.setSuccessMessage(resJsonData);
@@ -72,9 +73,9 @@
     @RequestMapping(value = "/issueTableConfig/relationDetail", produces = MediaType.APPLICATION_JSON_VALUE)
     public
     @ResponseBody
-    Map<String, Object> relationDetail(@RequestBody Map<String, Object> params) {
+    Map<String, Object> relationDetail(@RequestBody Map<String, Map<String, Object>> params) {
         Map<String, Object> resJsonData = new HashMap<>();
-        this.issueTableConfigService.detailRelationIssueTableConfig(params,resJsonData);
+        this.issueTableConfigService.detailRelationIssueTableConfig(params.get(Constants.REQ_KEY_CONTENT), resJsonData);
 
         return this.setSuccessMessage(resJsonData);
     }
@@ -83,9 +84,9 @@
     @RequestMapping(value = "/issueTableConfig/downDetail", produces = MediaType.APPLICATION_JSON_VALUE)
     public
     @ResponseBody
-    Map<String, Object> downDetail(@RequestBody Map<String, Object> params) {
+    Map<String, Object> downDetail(@RequestBody Map<String, Map<String, Object>> params) {
         Map<String, Object> resJsonData = new HashMap<>();
-        this.issueTableConfigService.detailDownIssueTableConfig(params,resJsonData);
+        this.issueTableConfigService.detailDownIssueTableConfig(params.get(Constants.REQ_KEY_CONTENT),resJsonData);
 
         return this.setSuccessMessage(resJsonData);
     }
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 f29a5e2..a23128e 100644
--- a/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js
+++ b/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js
@@ -266,6 +266,11 @@
                                             makeTag += '<div owl-profile-over class="" table-user-image="data" target="userVos"></div>';
                                             break;
 
+                                        // case "ISSUE_DEPARTMENT" :
+                                        //     scope.data.registsrVos = [scope.data.registerVo];
+                                        //     makeTag += '<div owl-profile-over class="" table-user-image="data" target="departmentVos"></div>';
+                                        //     break;
+
                                         case "REGISTER" :
                                             scope.data.registsrVos = [scope.data.registerVo];
                                             makeTag += '<div owl-profile-over class="" table-user-image="data" target="registsrVos"></div>';
diff --git a/src/main/webapp/scripts/app/issue/issueAddDownTableConfig.controller.js b/src/main/webapp/scripts/app/issue/issueAddDownTableConfig.controller.js
index 99b95fa..ab50ce1 100644
--- a/src/main/webapp/scripts/app/issue/issueAddDownTableConfig.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueAddDownTableConfig.controller.js
@@ -17,7 +17,7 @@
                     formSubmit : formSubmit,    //  �뤌 �쟾�넚
                     formCheck : formCheck,  //  �뤌 泥댄겕
                     getCustomFields : getCustomFields,   //  �궗�슜�옄 �젙�쓽 �븘�뱶 紐⑸줉�쓣 媛��졇�삩�떎.
-                    getIssueTableConfigs : getIssueTableConfigs //  �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 �젙蹂대�� 媛��졇�삩�떎.
+                    getDownIssueTableConfigs : getDownIssueTableConfigs //  �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 �젙蹂대�� 媛��졇�삩�떎.
                 };
 
                 //  蹂��닔 紐⑥쓬
@@ -48,8 +48,8 @@
                         position : 4,
                         display : true
                     }, {
-                        name : $filter("translate")("common.assignee"), // �떞�떦�옄
-                        key : "ASSIGNEE",
+                        name : $filter("translate")("common.assigneeTeam"), // �떞�떦遺��꽌
+                        key : "ASSIGNEE_TEAM",
                         width : "width-100-p",
                         position : 5,
                         display : true
@@ -100,7 +100,9 @@
                         if (result.data.message.status === "success") {
                             SweetAlert.success($filter("translate")("issue.completedSavingIssueTable"), $filter("translate")("issue.saveIssueTableSettingsInformation")); // "�씠�뒋 �뀒�씠釉� �꽕�젙 ���옣 �셿猷�", "�씠�뒋 �뀒�씠釉� �꽕�젙 �젙蹂닿� ���옣�릺�뿀�뒿�땲�떎."
                             //  蹂�寃쎈맂 �씠�뒋 �뀒�씠釉� �젙蹂대�� �씠�뒋 紐⑸줉 �뀒�씠釉붿뿉 媛깆떊�븳�떎.
-                            $rootScope.$broadcast("getIssueTableConfigs", {});
+                            $rootScope.$broadcast("getDownIssueTableConfigs", {});
+                            swal.close();
+                            $scope.fn.cancel();
                         }
                         else {
                             SweetAlert.error($filter("translate")("issue.failedToSaveIssueTableSetting"), result.data.message.message); // �씠�뒋 �뀒�씠釉� �꽕�젙 ���옣 �떎�뙣
@@ -135,7 +137,7 @@
                 }
 
                 //  �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 �젙蹂대�� 媛��졇�삩�떎.
-                function getIssueTableConfigs() {
+                function getDownIssueTableConfigs() {
                     var deferred = $q.defer();
                     var content = {
                         issueId : $rootScope.currentDetailIssueId,
@@ -170,7 +172,7 @@
                     });
 
                     //  �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 �젙蹂대�� 媛��졇�삩�떎.
-                    $scope.fn.getIssueTableConfigs().then(function (issueTableConfigs) {
+                    $scope.fn.getDownIssueTableConfigs().then(function (issueTableConfigs) {
                         if ($rootScope.isDefined(issueTableConfigs)) {
                             $rootScope.spinner = true;
 
diff --git a/src/main/webapp/scripts/app/issue/issueAddRelationTableConfig.controller.js b/src/main/webapp/scripts/app/issue/issueAddRelationTableConfig.controller.js
index ff5f903..0b291cb 100644
--- a/src/main/webapp/scripts/app/issue/issueAddRelationTableConfig.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueAddRelationTableConfig.controller.js
@@ -17,53 +17,65 @@
                     formSubmit : formSubmit,    //  �뤌 �쟾�넚
                     formCheck : formCheck,  //  �뤌 泥댄겕
                     getCustomFields : getCustomFields,   //  �궗�슜�옄 �젙�쓽 �븘�뱶 紐⑸줉�쓣 媛��졇�삩�떎.
-                    getIssueTableConfigs : getIssueTableConfigs //  �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 �젙蹂대�� 媛��졇�삩�떎.
+                    getRelIssueTableConfigs : getRelIssueTableConfigs //  �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 �젙蹂대�� 媛��졇�삩�떎.
                 };
 
                 //  蹂��닔 紐⑥쓬
                 $scope.vm = {
                     issueId: "",
                     issueTableConfigs : [{
-                        name : $filter("translate")("common.priority"), // �슦�꽑�닚�쐞
-                        key : "PRIORITY",
+                        name : $filter("translate")("issue.relationIssueType"), //
+                        key : "RELATION_ISSUE_TYPE",
                         width : "width-100-p",
                         position : 1,
+                        display : true
+                    }, {
+                        name : $filter("translate")("issue.relationIssueTitle"), //
+                        key : "RELATION_ISSUE_TITLE",
+                        width : "width-80-p",
+                        position : 2,
+                        display : true
+                    },{
+                        name : $filter("translate")("common.priority"), // �슦�꽑�닚�쐞
+                        key : "PRIORITY",
+                        width : "width-80-p",
+                        position : 3,
                         display : true
                     }, {
                         name : $filter("translate")("common.importance"), // 以묒슂�룄
                         key : "SEVERITY",
                         width : "width-80-p",
-                        position : 2,
+                        position : 4,
                         display : true
                     }, {
                         name : $filter("translate")("issue.issueType"), // �씠�뒋 ���엯
                         key : "ISSUE_TYPE",
                         width : "width-140-p",
-                        position : 3,
+                        position : 5,
                         display : true
                     }, {
-                        name : $filter("translate")("common.assignee"), // �떞�떦�옄
-                        key : "ASSIGNEE",
+                        name : $filter("translate")("common.assigneeTeam"), // �떞�떦遺��꽌
+                        key : "ASSIGNEE_TEAM",
                         width : "width-100-p",
-                        position : 4,
+                        position : 6,
                         display : true
                     }, {
                         name : $filter("translate")("common.register"), // �벑濡앹옄
                         key : "REGISTER",
                         width : "width-100-p",
-                        position : 5,
+                        position : 7,
                         display : false
                     }, {
                         name : $filter("translate")("common.period"), // 湲곌컙
                         key : "PERIOD",
                         width : "width-140-p",
-                        position : 6,
+                        position : 8,
                         display : false
                     }, {
                         name : $filter("translate")("common.lastChangeDate"), // 理쒓렐 蹂�寃쎌씪
                         key : "MODIFY_DATE",
                         width : "width-100-p",
-                        position : 7,
+                        position : 9,
                         display : false
                     }, {
                     }]
@@ -94,7 +106,9 @@
                         if (result.data.message.status === "success") {
                             SweetAlert.success($filter("translate")("issue.completedSavingIssueTable"), $filter("translate")("issue.saveIssueTableSettingsInformation")); // "�씠�뒋 �뀒�씠釉� �꽕�젙 ���옣 �셿猷�", "�씠�뒋 �뀒�씠釉� �꽕�젙 �젙蹂닿� ���옣�릺�뿀�뒿�땲�떎."
                             //  蹂�寃쎈맂 �씠�뒋 �뀒�씠釉� �젙蹂대�� �씠�뒋 紐⑸줉 �뀒�씠釉붿뿉 媛깆떊�븳�떎.
-                            $rootScope.$broadcast("getIssueTableConfigs", {});
+                            $rootScope.$broadcast("getRelIssueTableConfigs", {});
+                            swal.close();
+                            $scope.fn.cancel();
                         }
                         else {
                             SweetAlert.error($filter("translate")("issue.failedToSaveIssueTableSetting"), result.data.message.message); // �씠�뒋 �뀒�씠釉� �꽕�젙 ���옣 �떎�뙣
@@ -129,7 +143,7 @@
                 }
 
                 //  �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 �젙蹂대�� 媛��졇�삩�떎.
-                function getIssueTableConfigs() {
+                function getRelIssueTableConfigs() {
                     var deferred = $q.defer();
 
                     var content = {
@@ -151,7 +165,7 @@
 
                 //  �궗�슜�옄 �젙�쓽 �븘�뱶瑜� 議고쉶�븳 �썑 �몴�떆�븷 �씠�뒋 �뀒�씠釉� 而щ읆�쓣 以�鍮꾪븳�떎.
                 $scope.fn.getCustomFields().then(function (result) {
-                    var count = 7;
+                    var count = 8;
                     angular.forEach(result, function (customField) {
                         $scope.vm.issueTableConfigs.push({
                             name : customField.name,
@@ -165,7 +179,7 @@
                     });
 
                     //  �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 �젙蹂대�� 媛��졇�삩�떎.
-                    $scope.fn.getIssueTableConfigs().then(function (issueTableConfigs) {
+                    $scope.fn.getRelIssueTableConfigs().then(function (issueTableConfigs) {
                         if ($rootScope.isDefined(issueTableConfigs)) {
                             $rootScope.spinner = true;
 
diff --git a/src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js b/src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js
index cdddd59..37e33ef 100644
--- a/src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js
@@ -23,59 +23,47 @@
                 //  蹂��닔 紐⑥쓬
                 $scope.vm = {
                     issueTableConfigs : [{
-                        name : $filter("translate")("issue.relationIssueType"), // �뿰愿� �씠�뒋 援щ텇
-                        key : "RELATION_ISSUE_TYPE",
-                        width : "width-100-p",
-                        position : 1,
-                        display : true
-                    }, {
-                        name : $filter("translate")("issue.relationIssueTitle"), // �뿰愿� �씠�뒋 �젣紐�
-                        key : "RELATION_ISSUE_TITLE",
-                        width : "width-80-p",
-                        position : 2,
-                        display : true
-                    }, {
                         name : $filter("translate")("common.importance"), // �슦�꽑�닚�쐞
                         key : "PRIORITY",
                         width : "width-80-p",
-                        position : 3,
+                        position : 1,
                         display : true
                     }, {
                         name : $filter("translate")("common.importance"), // 以묒슂�룄
                         key : "SEVERITY",
                         width : "width-80-p",
-                        position : 4,
+                        position : 2,
                         display : true
                     }, {
                         name : $filter("translate")("issue.issueType"), // �씠�뒋 ���엯
                         key : "ISSUE_TYPE",
                         width : "width-140-p",
-                        position : 5,
+                        position : 3,
                         display : true
                     }, {
-                        name : $filter("translate")("common.assignee"), // �떞�떦�옄
-                        key : "ASSIGNEE",
+                        name : $filter("translate")("common.assigneeTeam"), // �떞�떦遺��꽌
+                        key : "ASSIGNEE_TEAM",
                         width : "width-100-p",
-                        position : 6,
+                        position : 4,
                         display : true
                     }, {
                         name : $filter("translate")("common.register"), // �벑濡앹옄
                         key : "REGISTER",
                         width : "width-100-p",
-                        position : 7,
-                        display : false
+                        position : 5,
+                        display : true
                     }, {
                         name : $filter("translate")("common.period"), // 湲곌컙
                         key : "PERIOD",
                         width : "width-140-p",
-                        position : 8,
-                        display : false
+                        position : 6,
+                        display : true
                     }, {
                         name : $filter("translate")("common.lastChangeDate"), // 理쒓렐 蹂�寃쎌씪
                         key : "MODIFY_DATE",
                         width : "width-100-p",
-                        position : 9,
-                        display : false
+                        position : 7,
+                        display : true
                     }, {
                     }]
                 };
@@ -103,8 +91,11 @@
 
                         if (result.data.message.status === "success") {
                             SweetAlert.success($filter("translate")("issue.completedSavingIssueTable"), $filter("translate")("issue.saveIssueTableSettingsInformation")); // "�씠�뒋 �뀒�씠釉� �꽕�젙 ���옣 �셿猷�", "�씠�뒋 �뀒�씠釉� �꽕�젙 �젙蹂닿� ���옣�릺�뿀�뒿�땲�떎."
+
                             //  蹂�寃쎈맂 �씠�뒋 �뀒�씠釉� �젙蹂대�� �씠�뒋 紐⑸줉 �뀒�씠釉붿뿉 媛깆떊�븳�떎.
                             $rootScope.$broadcast("getIssueTableConfigs", {});
+                            swal.close();
+                            $scope.fn.cancel();
                         }
                         else {
                             SweetAlert.error($filter("translate")("issue.failedToSaveIssueTableSetting"), result.data.message.message); // �씠�뒋 �뀒�씠釉� �꽕�젙 ���옣 �떎�뙣
@@ -156,7 +147,7 @@
 
                 //  �궗�슜�옄 �젙�쓽 �븘�뱶瑜� 議고쉶�븳 �썑 �몴�떆�븷 �씠�뒋 �뀒�씠釉� 而щ읆�쓣 以�鍮꾪븳�떎.
                 $scope.fn.getCustomFields().then(function (result) {
-                    var count = 9;
+                    var count = 7;
                     angular.forEach(result, function (customField) {
                         $scope.vm.issueTableConfigs.push({
                             name : customField.name,
diff --git a/src/main/webapp/scripts/app/issue/issueDetail.controller.js b/src/main/webapp/scripts/app/issue/issueDetail.controller.js
index 7230150..de8343e 100644
--- a/src/main/webapp/scripts/app/issue/issueDetail.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueDetail.controller.js
@@ -8,12 +8,14 @@
         'angular'
     ],
     function (app, angular) {
-        app.controller('issueDetailController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$tableProvider', '$state', '$uibModal', 'SweetAlert', '$timeout', 'Issue', 'IssueComment', 'IssueRelation', 'AttachedFile', 'IssueStatus', '$filter',
-            function ($scope, $rootScope, $log, $resourceProvider, $tableProvider, $state, $uibModal, SweetAlert, $timeout, Issue, IssueComment, IssueRelation, AttachedFile, IssueStatus, $filter) {
+        app.controller('issueDetailController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$tableProvider', '$state', '$uibModal', 'SweetAlert', '$timeout', 'Issue', 'IssueComment', 'IssueRelation', 'AttachedFile', 'IssueStatus', 'IssueTableConfig', '$filter',
+            function ($scope, $rootScope, $log, $resourceProvider, $tableProvider, $state, $uibModal, SweetAlert, $timeout, Issue, IssueComment, IssueRelation, AttachedFile, IssueStatus, IssueTableConfig, $filter) {
 
                 //  IssueListController vm, fn 蹂��닔 �긽�냽.
 
                 $scope.fn.getIssueDetail = getIssueDetail;  //  �씠�뒋 �긽�꽭 �젙蹂� 媛��졇�삤湲�
+                $scope.fn.setRelTableColumn = setRelTableColumn;
+                $scope.fn.setTableColumnDown = setTableColumnDown;
                 $scope.fn.addComment = addComment;  //  �뙎湲� �벑濡�
                 $scope.fn.removeComment = removeComment;    //  �뙎湲� �궘�젣
                 $scope.fn.getCommentList = getCommentList;  //  �뙎湲� 紐⑸줉 媛��졇�삤湲�
@@ -36,6 +38,7 @@
                 $scope.fn.addDownIssue = addDownIssue;      // �븯�쐞 �씠�뒋 異붽�
                 $scope.fn.addRelationIssueTableConfig = addRelationIssueTableConfig;      // �뿰愿� �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙
                 $scope.fn.addDownIssueTableConfig = addDownIssueTableConfig;      // �븯�쐞 �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙
+                $scope.fn.getRelTableConfigs = getRelTableConfigs;
 
                 //  �씠�뒋 紐⑸줉 而⑦듃濡ㅻ윭 vm, fn �긽�냽 以�
                 $scope.vm.viewer = {};
@@ -197,6 +200,105 @@
                     $scope.vm.autoCompletePage.issue.totalPage = result.data.page.totalPage;
                 }
 
+                //  �뀒�씠釉붿쓽 �뿰愿� �씠�뒋 而щ읆�쓣 留뚮뱾�뼱以��떎.
+                function setRelTableColumn(issueTableConfig) {
+
+                    //  �뿰愿� �씠�뒋  而щ읆
+                    switch(issueTableConfig.key) {
+                        case "RELATION_ISSUE_TYPE" :
+                            $scope.vm.relTableConfigs.push($tableProvider.config()
+                                .setHName("issue.relationIssueType")
+                                .setDType("renderer")
+                                .setHWidth("width-30 bold")
+                                .setHSort(false)
+                                .setDRenderer("ISSUE_RELATION_TYPE"))
+                            break;
+                        case "RELATION_ISSUE_TITLE" :
+                            $scope.vm.relTableConfigs.push($tableProvider.config()
+                                .setHName("issue.relationIssueTitle")
+                                .setDType("renderer")
+                                .setHWidth("width-60 bold")
+                                .setHSort(false)
+                                .setDRenderer("ISSUE_RELATION_MOVE"))
+                            break;
+                        case "PRIORITY" :   //  �슦�꽑�닚�쐞
+                            $scope.vm.relTableConfigs.push($tableProvider.config()
+                                .setHName("common.priority")
+                                .setDName("priorityName")
+                                .setDType("renderer")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDRenderer("COMMON_PRIORITY"));
+                            break;
+                        case "SEVERITY" :   //  以묒슂�룄
+                            $scope.vm.relTableConfigs.push($tableProvider.config()
+                                .setHName("common.importance")
+                                .setDName("severityName")
+                                .setDType("renderer")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDRenderer("COMMON_SEVERITY"));
+                            break;
+                        case "ISSUE_TYPE" : //  �씠�뒋 ���엯
+                            $scope.vm.relTableConfigs.push($tableProvider.config()
+                                .setHName("issue.issueType")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDName("issueTypeName"));
+                            break;
+                        case "ASSIGNEE_TEAM" :   //  �떞�떦遺��꽌
+                            $scope.vm.relTableConfigs.push($tableProvider.config()
+                                .setHName("common.assigneeTeam")
+                                .setDType("renderer")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDRenderer("ISSUE_DEPARTMENT"));
+                            break;
+                        case "REGISTER" :   //  �벑濡앹옄
+                            $scope.vm.relTableConfigs.push($tableProvider.config()
+                                .setHName("common.register")
+                                .setDType("renderer")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDRenderer("REGISTER"));
+                            break;
+                        case "PERIOD" : //  湲곌컙
+                            $scope.vm.relTableConfigs.push($tableProvider.config()
+                                .setHName("common.period")
+                                .setDType("renderer")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDRenderer("ISSUE_DUE_DATE"));
+                            break;
+                        case "MODIFY_DATE" : //  理쒓렐 蹂�寃쎌씪
+                            $scope.vm.relTableConfigs.push($tableProvider.config()
+                                .setHName("common.lastChangeDate")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDName("modifyDate"));
+                            break;
+                    }
+
+                    //  �궗�슜�옄 �젙�쓽 �븘�뱶 而щ읆
+                    if (issueTableConfig.key.indexOf("CUSTOM_FIELD_") !== -1) {
+                        //  留뚯빟 �씠�뒋 �뀒�씠釉� 而щ읆紐낆씠 �몴�떆�릺吏� �븡�쑝硫� �씠履쎌씠 臾몄젣
+                        for (var count in $scope.vm.customFields) {
+                            var customField = $scope.vm.customFields[count];
+
+                            if (customField.id === Number(issueTableConfig.key.substring(13))) {
+                                $scope.vm.relTableConfigs.push($tableProvider.config()
+                                    .setHName(customField.name)
+                                    .setDType("renderer")
+                                    .setHWidth("bold " + issueTableConfig.width)
+                                    .setDAlign("text-center")
+                                    .setColumnHint(customField)
+                                    .setDRenderer("ISSUE_CUSTOM_FIELD_VALUE_VIEW"));
+                                break;
+                            }
+                        }
+                    }
+                }
+
                 //  �븯�쐞 �씠�뒋 �뀒�씠釉� �꽕�젙
                 function makeTableConfigsDown() {
                     $scope.vm.downTableConfigs = [];
@@ -213,6 +315,97 @@
                         .setDRenderer("ISSUE_DOWN_DELETE")
                         .setHSort(false)
                         .setDAlign("text-center"))
+                    angular.forEach($scope.vm.relTableConfigs, function (issueTableConfig) {
+                        //  �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎.
+                        if (issueTableConfig.display) {
+                            //  �뀒�씠釉붿쓽 而щ읆�쓣 留뚮뱾�뼱以��떎.
+                            $scope.fn.setTableColumnDown(issueTableConfig);
+                        }
+                    });
+                }
+
+                //  �뀒�씠釉붿쓽 而щ읆�쓣 留뚮뱾�뼱以��떎.
+                function setTableColumnDown(issueTableConfig) {
+                    if (issueTableConfig == null) return;
+
+                    //  �씪諛� 而щ읆
+                    switch(issueTableConfig.key) {
+                        case "PRIORITY" :   //  �슦�꽑�닚�쐞
+                            $scope.vm.tableConfigs.push($tableProvider.config()
+                                .setHName("common.priority")
+                                .setDName("priorityName")
+                                .setDType("renderer")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDRenderer("COMMON_PRIORITY"));
+                            break;
+                        case "SEVERITY" :   //  以묒슂�룄
+                            $scope.vm.tableConfigs.push($tableProvider.config()
+                                .setHName("common.importance")
+                                .setDName("severityName")
+                                .setDType("renderer")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDRenderer("COMMON_SEVERITY"));
+                            break;
+                        case "ISSUE_TYPE" : //  �씠�뒋 ���엯
+                            $scope.vm.tableConfigs.push($tableProvider.config()
+                                .setHName("issue.issueType")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDName("issueTypeName"));
+                            break;
+                        case "ASSIGNEE_TEAM" :   //  �떞�떦遺��꽌
+                            $scope.vm.tableConfigs.push($tableProvider.config()
+                                .setHName("common.assigneeTeam")
+                                .setDType("renderer")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDRenderer("ISSUE_DEPARTMENT"));
+                            break;
+                        case "REGISTER" :   //  �벑濡앹옄
+                            $scope.vm.tableConfigs.push($tableProvider.config()
+                                .setHName("common.register")
+                                .setDType("renderer")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDRenderer("REGISTER"));
+                            break;
+                        case "PERIOD" : //  湲곌컙
+                            $scope.vm.tableConfigs.push($tableProvider.config()
+                                .setHName("common.period")
+                                .setDType("renderer")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDRenderer("ISSUE_DUE_DATE"));
+                            break;
+                        case "MODIFY_DATE" : //  理쒓렐 蹂�寃쎌씪
+                            $scope.vm.tableConfigs.push($tableProvider.config()
+                                .setHName("common.lastChangeDate")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDName("modifyDate"));
+                            break;
+                    }
+
+                    //  �궗�슜�옄 �젙�쓽 �븘�뱶 而щ읆
+                    if (issueTableConfig.key.indexOf("CUSTOM_FIELD_") === -1) {
+                        //  留뚯빟 �씠�뒋 �뀒�씠釉� 而щ읆紐낆씠 �몴�떆�릺吏� �븡�쑝硫� �씠履쎌씠 臾몄젣
+                        for (var count in $scope.vm.customFields) {
+                            var customField = $scope.vm.customFields[count];
+
+                            if (customField.id === Number(issueTableConfig.key.substring(13))) {
+                                $scope.vm.tableConfigs.push($tableProvider.config()
+                                    .setHName(customField.name)
+                                    .setDType("renderer")
+                                    .setHWidth("bold " + issueTableConfig.width)
+                                    .setDAlign("text-center")
+                                    .setColumnHint(customField)
+                                    .setDRenderer("ISSUE_CUSTOM_FIELD_VALUE_VIEW"));
+                                break;
+                            }
+                        }
+                    }
                 }
 
                 //  �뿰愿� �씠�뒋 �뀒�씠釉� �꽕�젙
@@ -230,33 +423,61 @@
                         .setHWidth("width-60 bold")
                         .setHSort(false)
                         .setDRenderer("ISSUE_RELATION_MOVE"))
-                    $scope.vm.relTableConfigs.push($tableProvider.config()
-                        .setHName("issue.relationIssueDelete")
-                        .setDType("renderer")
-                        .setHWidth("width-10 bold")
-                        .setDRenderer("ISSUE_RELATION_DELETE")
-                        .setHSort(false)
-                        .setDAlign("text-center"))
+
+                    angular.forEach($scope.vm.issueTableConfigs, function (issueTableConfig) {
+                        //  �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎.
+                        if (issueTableConfig.display) {
+                            //  �뀒�씠釉붿쓽 而щ읆�쓣 留뚮뱾�뼱以��떎.
+                            $scope.fn.setRelTableColumn(issueTableConfig);
+                        }
+                    });
                 }
 
-                // �뿰愿� �씪媛� 紐⑸줉 媛��졇�삤湲�
-                // function getRelationIssueList() {
-                //     var contents = {
-                //         issueId : $rootScope.currentDetailIssueId,
-                //     };
-                //
-                //     IssueRelation.find($resourceProvider.getContent(
-                //         contents,
-                //         $resourceProvider.getPageContent(0, 10))).then(function (result) {
-                //
-                //         if (result.data.message.status === "success") {
-                //             $scope.vm.relResponseData = result.data;
-                //         }
-                //         else {
-                //             SweetAlert.error($filter("translate")("issue.failedToIssueAddIssueRelation"), result.data.message.message); // "�뿰愿��씪媛� �깮�꽦 �떎�뙣"
-                //         }
-                //     });
-                // }
+
+
+
+                function getRelTableConfigs() {
+                    var content = {
+                        issueId : $scope.vm.viewer.id
+                    };
+
+                    IssueTableConfig.relationDetail($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.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;
+                                });
+
+                                angular.forEach($scope.vm.issueRelTableConfigs, function (issueTableConfig) {
+                                    //  �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎.
+                                    if (issueTableConfig.display) {
+                                        //  �뀒�씠釉붿쓽 而щ읆�쓣 留뚮뱾�뼱以��떎.
+                                        $scope.fn.setRelTableColumn(issueTableConfig);
+                                    }
+                                });
+
+                            } else {
+                               makeTableConfigs();
+                            }
+
+                        }
+                        else {
+                            SweetAlert.swal($filter("translate")("issue.errorRemovableIssueStatusList"), result.data.message.message, "error"); // "�씠�룞 媛��뒫�븳 �씠�뒋 �긽�깭 紐⑸줉 議고쉶 �삤瑜�"
+                        }
+                    });
+
+
+                }
+
 
                 // �븯�쐞 �씠�뒋 異붽�
                 function addDownIssue() {
@@ -442,6 +663,8 @@
                     //  珥덇린�솕 �빐�빞�븷 �븷紐⑹쓣 吏��젙�븯�뿬 �떎瑜� �씠�뒋瑜� �겢由��븷 �븣 珥덇린�솕�빐以��떎.
                     $scope.fn.initReload();
 
+                    $scope.fn.getRelTableConfigs();
+
                     Issue.detail($resourceProvider.getContent(
                         {id : $scope.vm.viewer.id, deep : "02"},
                         $resourceProvider.getPageContent(0, 1))).then(function (result) {
@@ -470,13 +693,16 @@
                                 $scope.vm.form.issuesDown = [];
                                 $scope.vm.form.issuesDown.push(result.data.data);
 
-                                makeTableConfigs();
+                                // makeTableConfigs();
+                                // $scope.vm.relTableConfigs = result.data.relTableConfigs;
+
                                 angular.forEach(result.data.data.issueRelationVos, function (issueRelationVo){
                                     issueRelationVo.relationIssueTypeName = $scope.vm.relationIssueTypes[issueRelationVo.relationIssueType].name;
                                     $scope.vm.form.issues.push(issueRelationVo.issueRelation);
                                 });
 
-                                makeTableConfigsDown();
+                                // makeTableConfigsDown();
+                                // $scope.vm.downTableConfigs = result.data.downTableConfigs;
                                 angular.forEach(result.data.data.issueDownVos, function (issueDownVo){
                                     $scope.vm.form.issuesDown.push(issueDownVo.issue);
                                 });
diff --git a/src/main/webapp/scripts/app/issue/issueList.controller.js b/src/main/webapp/scripts/app/issue/issueList.controller.js
index 3b68c16..7a8041e 100644
--- a/src/main/webapp/scripts/app/issue/issueList.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueList.controller.js
@@ -73,6 +73,7 @@
                     priorities : [],    //  �슦�꽑 �닚�쐞
                     severities : [],    //  以묒슂�룄
                     users : [], //  �떞�떦�옄
+                    departments : [], //  �떞�떦遺��꽌
                     registers : [], //  �벑濡앹옄
                     customFields : [],  //  �궗�슜�옄 �젙�쓽 �븘�뱶
                     issueTableConfigs : [],  //  �씠�뒋 �뀒�씠釉� �꽕�젙
@@ -103,6 +104,7 @@
                             search : $scope.vm.search,
                             projects : $scope.vm.projects,
                             users : $scope.vm.users,
+                            departments : $scope.vm.departments,
                             registers : $scope.vm.registers,
                             parentIssueId : $scope.vm.parentIssueId
                         })
@@ -130,9 +132,10 @@
                                 var issueListSearchObject = JSON.parse(result.data.data);
                                 //  �씠�뒋 踰덊샇留� �쟻�슜�븳�떎. - �궘�젣�떆 泥섎━諛⑸쾿�븣臾몄뿉 �떎瑜� �냽�꽦�� �쟻�슜 蹂대쪟
                                 $scope.vm.search = issueListSearchObject.search;
-                                /*$scope.vm.users = issueListSearchObject.users;
+                                $scope.vm.users = issueListSearchObject.users;
+                                $scope.vm.departments = issueListSearchObject.departments;
                                 $scope.vm.projects = issueListSearchObject.projects;
-                                $scope.vm.registers = issueListSearchObject.registers;*/
+                                $scope.vm.registers = issueListSearchObject.registers;
 
                                 $scope.fn.getPageList(0, true);
                             } else {
@@ -242,13 +245,13 @@
                                 .setDAlign("text-center")
                                 .setDName("issueTypeName"));
                             break;
-                        case "ASSIGNEETEAM" :   //  �떞�떦遺��꽌
+                        case "ASSIGNEE_TEAM" :   //  �떞�떦遺��꽌
                             $scope.vm.tableConfigs.push($tableProvider.config()
                                 .setHName("common.assigneeTeam")
                                 .setDType("renderer")
                                 .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
-                                .setDRenderer("ISSUE_USER"));
+                                .setDRenderer("ISSUE_DEPARTMENT"));
                             break;
                         case "REGISTER" :   //  �벑濡앹옄
                             $scope.vm.tableConfigs.push($tableProvider.config()
@@ -376,6 +379,15 @@
                             });
 
                             return userIds;
+                        })(),
+                        departmentIds : (function () {
+                            var departmentIds = [];
+
+                            angular.forEach($scope.vm.departments, function (department) {
+                                departmentIds.push(department.id);
+                            });
+
+                            return departmentIds;
                         })(),
                         registerIds : (function () {
                             var registerIds = [];
@@ -869,7 +881,7 @@
                                     display : true
                                 }, {
                                     name : $filter("translate")("common.assigneeTeam"), // �떞�떦遺��꽌
-                                    key : "ASSIGNEETEAM",
+                                    key : "ASSIGNEE_TEAM",
                                     width : "width-140-p",
                                     position : 4,
                                     display : true
diff --git a/src/main/webapp/views/issue/issueListNormal.html b/src/main/webapp/views/issue/issueListNormal.html
index a85a020..f11e161 100644
--- a/src/main/webapp/views/issue/issueListNormal.html
+++ b/src/main/webapp/views/issue/issueListNormal.html
@@ -192,7 +192,7 @@
                                                                            input-disabled="false"
                                                                            source="fn.getUserDepartmentList(vm.departmentName, vm.departments)"
                                                                            translation-texts="{ count : 'common.userNum', empty : 'common.emptyDepartment' }"
-                                                                           extra-settings="{ displayProp : 'byName' , idProp : 'id', widthable : false, width : '', imageable : true, imagePathProp : 'profile', type : 'user', maxlength : 100 }">
+                                                                           extra-settings="{ displayProp : 'byName' , idProp : 'id', widthable : false, width : '', imageable : true, imagePathProp : 'profile', type : 'department', maxlength : 100 }">
                                                     </js-autocomplete-multi>
                                                 </div>
                                             </div>

--
Gitblit v1.8.0