From 7b3861cb48507674af980e5579f61a853d093ed8 Mon Sep 17 00:00:00 2001
From: wyu <kknd09321@nate.com>
Date: 목, 06 1월 2022 10:07:26 +0900
Subject: [PATCH] 하위이슈목록/연관이슈목록 모든 컬럼 정렬 (기간 제외) 수정

---
 src/main/webapp/scripts/app/issue/issueDetail.controller.js |  846 ++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 574 insertions(+), 272 deletions(-)

diff --git a/src/main/webapp/scripts/app/issue/issueDetail.controller.js b/src/main/webapp/scripts/app/issue/issueDetail.controller.js
index d2837a2..865d992 100644
--- a/src/main/webapp/scripts/app/issue/issueDetail.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueDetail.controller.js
@@ -8,9 +8,9 @@
         'angular'
     ],
     function (app, angular) {
-        app.controller('issueDetailController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$tableProvider', '$state', '$uibModal', '$q',
+        app.controller('issueDetailController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$tableProvider', '$relProvider', '$downProvider', '$state', '$uibModal', '$q',
             '$controller', '$injector', 'SweetAlert', '$timeout', 'Issue', 'IssueComment', 'IssueRelation', 'AttachedFile',  'Priority', 'Severity','IssueStatus', 'IssueTableConfig', '$filter',
-            function ($scope, $rootScope, $log, $resourceProvider, $tableProvider, $state, $uibModal, $q, $controller, $injector, SweetAlert, $timeout, Issue, IssueComment, IssueRelation, AttachedFile, Priority, Severity, IssueStatus, IssueTableConfig, $filter) {
+            function ($scope, $rootScope, $log, $resourceProvider, $tableProvider, $relProvider, $downProvider, $state, $uibModal, $q, $controller, $injector, SweetAlert, $timeout, Issue, IssueComment, IssueRelation, AttachedFile, Priority, Severity, IssueStatus, IssueTableConfig, $filter) {
 
                 //  IssueListController vm, fn 蹂��닔 �긽�냽.
 
@@ -28,25 +28,37 @@
                 $scope.fn.updateActiveHistory = updateActiveHistory;    //  �솢�룞 �궡�뿭�뿉�꽌 �쟾泥� 蹂닿린 �꺆�쓣 �닃���쓣 �븣 �뙎湲�, 湲곕줉 �젙蹂대�� �뾽�뜲�씠�듃 �븳�떎.
                 $scope.fn.getChangeIssueStatusList = getChangeIssueStatusList;    //  �씠�뒋�쓽 �쁽�옱 �긽�깭�뿉�꽌 蹂�寃� 媛��뒫�븳 �씠�뒋 �깄�깭 紐⑸줉 媛��졇�삤湲�
                 $scope.fn.modifyIssueStatus = modifyIssueStatus;    //  �씠�뒋 �긽�깭 蹂�寃�
+                $scope.fn.modifyDownIssueStatus = modifyDownIssueStatus;    //�븯�쐞 �씠�뒋 �긽�깭 蹂�寃�
                 $scope.fn.modifyIssueUser = modifyIssueUser;    //  �씠�뒋 �떞�떦�옄 蹂�寃�
                 $scope.fn.modifyIssueDepartment = modifyIssueDepartment;    //  �씠�뒋 �떞�떦遺��꽌 蹂�寃�
                 $scope.fn.initReload = initReload;  //  珥덇린�솕 �빐�빞�븷 �븷紐⑹쓣 吏��젙�븯�뿬 �떎瑜� �씠�뒋瑜� �겢由��븷 �븣 珥덇린�솕�빐以��떎.
-                $scope.fn.sendMail = sendMail;  //  �듅�젙 �궗�슜�옄�뿉寃� �씠�뒋 �젙蹂대�� 硫붿씪濡� 諛쒖넚
+                $scope.fn.sendMail = sendMail;
+                $scope.fn.sendMailAll = sendMailAll;
+                $scope.fn.sendMailVo = sendMailVo;
+                $scope.fn.getParameters = getParameters;
+                $scope.fn.getParametersAll = getParametersAll;
+                //  �듅�젙 �궗�슜�옄�뿉寃� �씠�뒋 �젙蹂대�� 硫붿씪濡� 諛쒖넚
                 $scope.fn.versionView = versionView;    //  踰꾩쟾 �젙蹂대�� �몴�떆�븳�떎.
                 $scope.fn.reservation = reservation;    //  �삁�빟 �젙蹂대�� �솗�씤 諛� 蹂�寃� �븳�떎.
                 $scope.fn.getIssueListCallBack = getIssueListCallBack;
+                $scope.fn.getDownIssueListCallBack = getDownIssueListCallBack;
                 $scope.fn.addRelationIssue = addRelationIssue;      // �뿰愿� �씠�뒋 異붽�
                 $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;
+                $scope.fn.issueBack = issueBack;
+                $scope.fn.removeRelationIssue = removeRelationIssue;
+                $scope.fn.removeDownIssue = removeDownIssue;
+                $scope.fn.sendCommonMail = sendCommonMail;
 
                 //  �씠�뒋 紐⑸줉 而⑦듃濡ㅻ윭 vm, fn �긽�냽 以�
-                $scope.vm.viewer = {};
+                $scope.vm.viewer = {};      // �쁽�옱 �씠�뒋
                 $scope.vm.images = [];  //  泥⑤��맂 �뙆�씪 以� �씠誘몄� �뙆�씪
-                $scope.vm.activeTab = "ALL";    //  �솢�룞 �궡�뿭 �꺆
+                $scope.vm.activeTab = "RECODE";    //  �솢�룞 �궡�뿭 �꺆
                 //  �씠�뒋 �긽�깭 蹂�寃� �몴�떆 �뿬遺�
                 $scope.vm.editor = {
                     issueStatus : false
@@ -71,7 +83,11 @@
 
                 $scope.vm.form = {
                     issues : [], //�뿰愿� �씪媛�
-                    issuesDown : []  // �븯�쐞 �씪媛�
+                    issuesDown : [],  // �븯�쐞 �씪媛�
+                    issuesDownStatus : [], //�븯�쐞 �씠�뒋 �긽�깭
+                    issueCompanyVos : [],
+                    issueIspVos : [],
+                    issueHostingVos : []
                 };
 
 
@@ -85,6 +101,7 @@
 
                 $scope.vm.issueName = "";       // �꽑�깮�맂 �뿰愿� �씪媛� �씠由�
                 $scope.vm.issueId = "";       //
+                $scope.vm.issueTypeId = "";
                 $scope.vm.autoCompletePage = {
                     issue : {
                         page : 0,
@@ -96,7 +113,7 @@
                 $scope.vm.relTableConfigs = [];
                 //  �뀒�씠釉� �씠踰ㅽ듃
                 $scope.relTableEvent = {
-                    removeRelationIssue : removeRelationIssue,   // �뿰愿� �씪媛� �궘�젣
+                    //removeRelationIssue : removeRelationIssue,   // �뿰愿� �씪媛� �궘�젣
                     changeDetailView : changeDetailView
                 };
 
@@ -104,24 +121,76 @@
                 $scope.vm.downTableConfigs = [];
                 //  �뀒�씠釉� �씠踰ㅽ듃
                 $scope.downTableEvent = {
-                    removeDownIssue : removeDownIssue,   // �뿰愿� �씪媛� �궘�젣
+                    //removeDownIssue : removeDownIssue,   // �뿰愿� �씪媛� �궘�젣
                     changeDetailView : changeDetailView
                 };
 
                 function changeDetailView(issue) {
                     //  �씠�뒋 踰덊샇瑜� ���옣�븳 �썑 �씠�뒋 紐⑸줉�쑝濡� �씠�룞�븳�떎.
-                    // $rootScope.$broadcast("makeIssueSearch", issue);
+                    //$rootScope.$broadcast("makeIssueSearch",issue);
                     $scope.$parent.tableEvent.changeDetailView(issue.id);
+
+                    $scope.fn.onActivate();
+                }
+
+                // �긽�쐞 �씠�뒋 �겢由��떆 �긽�쐞 �씠�뒋濡� �씠�룞
+                function issueBack() {
+                    var index = $scope.$parent.vm.issueIds.length -2;
+                    if (index > -1) {
+                        var preIssueId = $scope.$parent.vm.issueIds[index];
+                        $scope.$parent.vm.issueIds.splice(index + 1, 1);
+                        $scope.$parent.tableEvent.changeDetailView(preIssueId, true);
+                    }
+                }
+
+                function onActivate() {
+                    window.scroll(0,240);
                 }
 
                 angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector}));
 
+                 // �씠�뒋 紐⑸줉 �뜲�씠�꽣 媛깆떊
+                $scope.$on("getIssueList", function () {
+                    $scope.fn.getIssueDetail();
+                });
+
                 // �븯�쐞 �씠�뒋 �궘�젣
-                function removeDownIssue(id) {
+                function removeDownIssue() {
+                    var removeIds = [];
+                    var removePermission = true;
+
+                    angular.forEach($scope.vm.viewer.issueDownVos, function (data) {
+                        if (data.checked && data.modifyPermissionCheck) {
+                            removeIds.push(data.id);
+                        }
+
+                        if (data.checked && !data.modifyPermissionCheck) {
+                            removePermission = false;
+                        }
+                    });
+
+                    if (!removePermission) {
+                        SweetAlert.swal({
+                            html : true,
+                            title : $filter("translate")("common.deleteFailed"), // �궘�젣 �떎�뙣
+                            text : $filter("translate")("project.notHaveDeletePermissionExistsProject"), // "�궘�젣 沅뚰븳�씠 �뾾�뒗 �봽濡쒖젥�듃媛� 議댁옱�빀�땲�떎."
+                            type : "error"
+                        });
+                        return;
+                    }
+
+                    if (removeIds.length < 1) {
+                        SweetAlert.swal({
+                            title : $filter("translate")("common.checkPurgingTargets"), // �궘�젣 ���긽 �솗�씤
+                            text : $filter("translate")("common.selectDestinationDeletion"), // �궘�젣 ���긽�쓣 �꽑�깮�븯�꽭�슂.
+                            type : "warning"
+                        });
+                        return;
+                    }
                     //  �궘�젣 �븣由�
                     SweetAlert.swal({
                             title : $filter("translate")("issue.downIssueRemove"), // �븯�쐞 �씠�뒋 �궘�젣
-                            text : $filter("translate")("issue.wantToDeleteSelectIssue"),
+                            text : $filter("translate")("issue.wantToDeleteSelectDownIssueInList"),
                             type : "warning",
                             showCancelButton : true,
                             confirmButtonColor : "#DD6B55",
@@ -137,7 +206,7 @@
                                 $rootScope.spinner = true;
 
                                 var contents = {
-                                    id : id
+                                    ids : removeIds
                                 };
 
                                 Issue.modifyParentIssue($resourceProvider.getContent(
@@ -159,7 +228,38 @@
                 }
 
                 // �뿰愿� �씠�뒋 �궘�젣
-                function removeRelationIssue(id) {
+                function removeRelationIssue() {
+                    var removeIds = [];
+                    var removePermission = true;
+
+                    angular.forEach($scope.vm.viewer.issueRelationVos, function (data) {
+                        if (data.checked && data.modifyPermissionCheck) {
+                            removeIds.push(data.id);
+                        }
+
+                        if (data.checked && !data.modifyPermissionCheck) {
+                            removePermission = false;
+                        }
+                    });
+
+                    if (!removePermission) {
+                        SweetAlert.swal({
+                            html : true,
+                            title : $filter("translate")("common.deleteFailed"), // �궘�젣 �떎�뙣
+                            text : $filter("translate")("issue.notHaveDeletePermissionExistsAnIssue"), // �궘�젣 沅뚰븳�씠 �뾾�뒗 �씠�뒋媛� 議댁옱�빀�땲�떎.
+                            type : "error"
+                        });
+                        return;
+                    }
+
+                    if (removeIds.length < 1) {
+                        SweetAlert.swal({
+                            title : $filter("translate")("common.checkPurgingTargets"), // �궘�젣 ���긽 �솗�씤
+                            text : $filter("translate")("common.selectDestinationDeletion"), // �궘�젣 ���긽�쓣 �꽑�깮�븯�꽭�슂.
+                            type : "warning"
+                        });
+                        return;
+                    }
                     //  �궘�젣 �븣由�
                     SweetAlert.swal({
                             title : $filter("translate")("issue.relationIssueRemove"), // �뿰愿� �씠�뒋 �궘�젣
@@ -179,7 +279,7 @@
                                 $rootScope.spinner = true;
 
                                 var contents = {
-                                    id : id
+                                    removeIds : removeIds
                                 };
 
                                 IssueRelation.delete($resourceProvider.getContent(
@@ -205,101 +305,103 @@
                     $scope.vm.autoCompletePage.issue.totalPage = result.data.page.totalPage;
                 }
 
+                function getDownIssueListCallBack(result) {
+                    $scope.vm.autoCompletePageDown.issue.totalPage = result.data.page.totalPage;
+                }
+
                 //  �뀒�씠釉붿쓽 �뿰愿� �씠�뒋 而щ읆�쓣 留뚮뱾�뼱以��떎.
-                function setRelTableColumn(Rel_issueTableConfig) {
+                function setRelTableColumn(issueTableConfig) {
 
                     //  �뿰愿� �씠�뒋 而щ읆
-                    switch(Rel_issueTableConfig.key) {
-
-                        // �뿰愿� �씠�뒋 援щ텇
-                        case "RELATION_ISSUE_TYPE" :
-                            $scope.vm.relTableConfigs.push($tableProvider.config()
+                    switch(issueTableConfig.key) {
+                        case "RELATION_ISSUE_TYPE" :    // �뿰愿� �씠�뒋 援щ텇
+                            $scope.vm.relTableConfigs.push($relProvider.config()
                                 .setHName("issue.relationIssueType")
+                                .setDName("relationIssueType")
                                 .setDType("renderer")
-                                .setHWidth("width-30 bold")
-                                .setHSort(false)
+                                .setDAlign("text-center")
+                                .setHWidth("bold " + issueTableConfig.width)
                                 .setDRenderer("ISSUE_RELATION_TYPE"))
+                                /*.setHWidth("width-30 bold")*/
+                                /*.setHSort(false)*/
                             break;
-                        // �뿰愿� �씠�뒋 �젣紐�
-                        case "RELATION_ISSUE_TITLE" :
-                            $scope.vm.relTableConfigs.push($tableProvider.config()
+                        case "RELATION_ISSUE_TITLE" :   // �뿰愿� �씠�뒋 �젣紐�
+                            $scope.vm.relTableConfigs.push($relProvider.config()
                                 .setHName("issue.relationIssueTitle")
+                                .setDName("title")
                                 .setDType("renderer")
-                                .setHWidth("width-60 bold")
-                                .setHSort(false)
+                                .setDAlign("text-center")
+                                .setHWidth("bold " + issueTableConfig.width)
                                 .setDRenderer("ISSUE_RELATION_MOVE"))
+                                /*.setHWidth("width-60 bold")*/
+                                /*.setHSort(true)*/
                             break;
-                        case "PRIORITY" :   // �뿰愿� �씠�뒋 �슦�꽑�닚�쐞
-                            $scope.vm.relTableConfigs.push($tableProvider.config()
+                        case "RELATION_PRIORITY" :   // �뿰愿� �씠�뒋 �슦�꽑�닚�쐞
+                            $scope.vm.relTableConfigs.push($relProvider.config()
                                 .setHName("common.priority")
-                                .setDName("priorityName")
+                                .setDName("priorityVo.id")
                                 .setDType("renderer")
-                                .setHWidth("bold " + Rel_issueTableConfig.width)
+                                .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
                                 .setDRenderer("REL_COMMON_PRIORITY"));
                             break;
-                        case "SEVERITY" :   //  �뿰愿� �씠�뒋 以묒슂�룄
-                            $scope.vm.relTableConfigs.push($tableProvider.config()
+                        case "RELATION_SEVERITY" :   //  �뿰愿� �씠�뒋 以묒슂�룄
+                            $scope.vm.relTableConfigs.push($relProvider.config()
                                 .setHName("common.importance")
-                                .setDName("severityName")
+                                .setDName("severityVo.id")
                                 .setDType("renderer")
-                                .setHWidth("bold " + Rel_issueTableConfig.width)
+                                .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
                                 .setDRenderer("REL_COMMON_SEVERITY"));
                             break;
-                        case "ASSIGNEE_TEAM" :   // �뿰愿� �씠�뒋 �떞�떦遺��꽌
-                            $scope.vm.relTableConfigs.push($tableProvider.config()
+                        case "RELATION_ASSIGNEE_TEAM" :   // �뿰愿� �씠�뒋 �떞�떦遺��꽌
+                            $scope.vm.relTableConfigs.push($relProvider.config()
                                 .setHName("common.assigneeTeam")
+                                .setDName("departmentVos.departmentName")
                                 .setDType("renderer")
-                                .setHWidth("bold " + Rel_issueTableConfig.width)
+                                .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
                                 .setDRenderer("REL_ISSUE_DEPARTMENT"));
                             break;
 
-                        case "REGISTER" :   // �뿰愿� �씠�뒋  �벑濡앹옄
-                            $scope.vm.relTableConfigs.push($tableProvider.config()
+                        case "RELATION_REGISTER" :   // �뿰愿� �씠�뒋 �벑濡앹옄
+                            $scope.vm.relTableConfigs.push($relProvider.config()
                                 .setHName("common.register")
+                                .setDName("registerVo.id")
                                 .setDType("renderer")
-                                .setHWidth("bold " + Rel_issueTableConfig.width)
+                                .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
                                 .setDRenderer("REL_REGISTER"));
                             break;
-                        case "PERIOD" : // �뿰愿� �씠�뒋 湲곌컙
-                            $scope.vm.relTableConfigs.push($tableProvider.config()
+                        case "RELATION_PERIOD" : // �뿰愿� �씠�뒋 湲곌컙
+                            $scope.vm.relTableConfigs.push($relProvider.config()
                                 .setHName("common.period")
                                 .setDType("renderer")
-                                .setHWidth("bold " + Rel_issueTableConfig.width)
+                                .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
                                 .setDRenderer("REL_ISSUE_DUE_DATE"));
                             break;
-                        case "MODIFY_DATE" : // �뿰愿� �씠�뒋  理쒓렐 蹂�寃쎌씪
-                            $scope.vm.relTableConfigs.push($tableProvider.config()
+                        case "RELATION_MODIFY_DATE" : // �뿰愿� �씠�뒋 理쒓렐 蹂�寃쎌씪
+                            $scope.vm.relTableConfigs.push($relProvider.config()
                                 .setHName("common.lastChangeDate")
-                                .setHWidth("bold " + Rel_issueTableConfig.width)
+                                .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
                                 .setDName("modifyDate"));
                             break;
-                        // default :"ISSUE_RELATION_DELETE" //  �뿰愿� �궘�젣
-                        //     $scope.vm.relTableConfigs.push($tableProvider.config()
-                        //         .setHName("issue.downIssueTitle")
-                        //         .setDType("renderer")
-                        //         .setHWidth("bold" + issueTableConfig.width)
-                        //         .setHSort(false)
-                        //         .setDRenderer("ISSUE_RELATION_DELETE"));
-                        //     break;
                     }
 
                     //  �궗�슜�옄 �젙�쓽 �븘�뱶 而щ읆
-                    if (Rel_issueTableConfig.key.indexOf("CUSTOM_FIELD_") !== -1) {
+                    if (issueTableConfig.key.indexOf("CUSTOM_FIELD_") !== -1) {
                         //  留뚯빟 �씠�뒋 �뀒�씠釉� 而щ읆紐낆씠 �몴�떆�릺吏� �븡�쑝硫� �씠履쎌씠 臾몄젣
                         for (var count in $scope.vm.customFields) {
                             var customField = $scope.vm.customFields[count];
 
-                            if (customField.id === Number(Rel_issueTableConfig.key.substring(13))) {
-                                $scope.vm.relTableConfigs.push($tableProvider.config()
+                            if (customField.id === Number(issueTableConfig.key.substring(13))) {
+                                $scope.vm.relTableConfigs.push($relProvider.config()
                                     .setHName(customField.name)
+                                    .setDName("relCustomFieldName" + [count])
                                     .setDType("renderer")
-                                    .setHWidth("bold " + Rel_issueTableConfig.width)
+                                    .setHWidth("bold " + issueTableConfig.width)
                                     .setDAlign("text-center")
                                     .setColumnHint(customField)
                                     .setDRenderer("REL_ISSUE_CUSTOM_FIELD_VALUE_VIEW"));
@@ -311,82 +413,96 @@
 
 
                 //  �뀒�씠釉붿쓽 �븯�쐞 �씠�뒋 而щ읆�쓣 留뚮뱾�뼱以��떎.
-                function setDownTableColumn(Down_issueTableConfig) {
+                function setDownTableColumn(issueTableConfig) {
                     // if (issueTableConfig == null) return;
 
                     //  �븯�쐞 �씠�뒋 而щ읆
-                    switch(Down_issueTableConfig.key) {
-                        //  �븯�쐞 �씠�뒋 �젣紐�
-                        case "DOWN_ISSUE_TITLE" :
-                            $scope.vm.downTableConfigs.push($tableProvider.config()
+                    switch(issueTableConfig.key) {
+                        case "DOWN_ISSUE_TITLE" :   //  �븯�쐞 �씠�뒋 �젣紐�
+                            $scope.vm.downTableConfigs.push($downProvider.config()
                                 .setHName("issue.downIssueTitle")
+                                .setDName("title")
                                 .setDType("renderer")
-                                .setHWidth("bold " + Down_issueTableConfig.width)
+                                .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
                                 .setDRenderer("ISSUE_DOWN_MOVE"));
                             break;
-                        case "PRIORITY" :   // �븯�쐞 �씠�뒋 �슦�꽑�닚�쐞
-                            $scope.vm.downTableConfigs.push($tableProvider.config()
-                                .setHName("common.priority")
-                                .setDName("priorityName")
+
+                        case "ISSUE_DOWN_STATUS_TYPE" : // �븯�쐞 �씠�뒋 �긽�깭
+                            $scope.vm.downTableConfigs.push($downProvider.config()
+                                .setHName("issue.issueStatus")
+                                .setDName("issueStatusVo.id")
                                 .setDType("renderer")
-                                .setHWidth("bold " + Down_issueTableConfig.width)
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDRenderer("ISSUE_DOWN_STATUS_TYPE"));
+                            break;
+
+                        case "DOWN_PRIORITY" :   // �븯�쐞 �씠�뒋 �슦�꽑�닚�쐞
+                            $scope.vm.downTableConfigs.push($downProvider.config()
+                                .setHName("common.priority")
+                                .setDName("priorityVo.id")
+                                .setDType("renderer")
+                                .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
                                 .setDRenderer("DOWN_COMMON_PRIORITY"));
                             break;
-                        case "SEVERITY" :   //  以묒슂�룄
-                            $scope.vm.downTableConfigs.push($tableProvider.config()
+                        case "DOWN_SEVERITY" :   // �븯�쐞 �씠�뒋 以묒슂�룄
+                            $scope.vm.downTableConfigs.push($downProvider.config()
                                 .setHName("common.importance")
-                                .setDName("severityName")
+                                .setDName("severityVo.id")
                                 .setDType("renderer")
-                                .setHWidth("bold " + Down_issueTableConfig.width)
+                                .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
                                 .setDRenderer("DOWN_COMMON_SEVERITY"));
                             break;
-                        case "ASSIGNEE_TEAM" :   //  �떞�떦遺��꽌
-                            $scope.vm.downTableConfigs.push($tableProvider.config()
+                        case "DOWN_ASSIGNEE_TEAM" :   // �븯�쐞 �씠�뒋 �떞�떦遺��꽌
+                            $scope.vm.downTableConfigs.push($downProvider.config()
                                 .setHName("common.assigneeTeam")
+                                .setDName("departmentVos.departmentName")
                                 .setDType("renderer")
-                                .setHWidth("bold " + Down_issueTableConfig.width)
+                                .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
                                 .setDRenderer("DOWN_ISSUE_DEPARTMENT"));
                             break;
-                        case "REGISTER" :   //  �벑濡앹옄
-                            $scope.vm.downTableConfigs.push($tableProvider.config()
+                        case "DOWN_REGISTER" :   // �븯�쐞 �씠�뒋 �벑濡앹옄
+                            $scope.vm.downTableConfigs.push($downProvider.config()
                                 .setHName("common.register")
+                                .setDName("registerVo.id")
                                 .setDType("renderer")
-                                .setHWidth("bold " + Down_issueTableConfig.width)
+                                .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
                                 .setDRenderer("DOWN_REGISTER"));
                             break;
-                        case "PERIOD" : //  湲곌컙
-                            $scope.vm.downTableConfigs.push($tableProvider.config()
+                        case "DOWN_PERIOD" : // �븯�쐞 �씠�뒋 湲곌컙
+                            $scope.vm.downTableConfigs.push($downProvider.config()
                                 .setHName("common.period")
                                 .setDType("renderer")
-                                .setHWidth("bold " + Down_issueTableConfig.width)
+                                .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
                                 .setDRenderer("DOWN_ISSUE_DUE_DATE"));
                             break;
-                        case "MODIFY_DATE" : //  理쒓렐 蹂�寃쎌씪
-                            $scope.vm.downTableConfigs.push($tableProvider.config()
+                        case "DOWN_MODIFY_DATE" : // �븯�쐞 �씠�뒋 理쒓렐 蹂�寃쎌씪
+                            $scope.vm.downTableConfigs.push($downProvider.config()
                                 .setHName("common.lastChangeDate")
-                                .setHWidth("bold " + Down_issueTableConfig.width)
+                                .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
                                 .setDName("modifyDate"));
                             break;
                     }
 
                     //  �궗�슜�옄 �젙�쓽 �븘�뱶 而щ읆
-                    if (Down_issueTableConfig.key.indexOf("CUSTOM_FIELD_") !== -1) {
+                    if (issueTableConfig.key.indexOf("CUSTOM_FIELD_") !== -1) {
                         //  留뚯빟 �씠�뒋 �뀒�씠釉� 而щ읆紐낆씠 �몴�떆�릺吏� �븡�쑝硫� �씠履쎌씠 臾몄젣
                         for (var count in $scope.vm.customFields) {
                             var customField = $scope.vm.customFields[count];
 
-                            if (customField.id === Number(Down_issueTableConfig.key.substring(13))) {
-                                $scope.vm.downTableConfigs.push($tableProvider.config()
+                            if (customField.id === Number(issueTableConfig.key.substring(13))) {
+                                $scope.vm.downTableConfigs.push($downProvider.config()
                                     .setHName(customField.name)
+                                    .setDName("downCustomFieldName" + [count])
                                     .setDType("renderer")
-                                    .setHWidth("bold " + Down_issueTableConfig.width)
+                                    .setHWidth("bold " + issueTableConfig.width)
                                     .setDAlign("text-center")
                                     .setColumnHint(customField)
                                     .setDRenderer("DOWN_ISSUE_CUSTOM_FIELD_VALUE_VIEW"));
@@ -400,34 +516,39 @@
                 //  �뿰愿� �씠�뒋 �뀒�씠釉� �꽕�젙
                 function makeRelTableConfigs() {
                     $scope.vm.relTableConfigs = [];
-                    $scope.vm.relTableConfigs.push($tableProvider.config()
+                    $scope.vm.relTableConfigs.push($relProvider.config()
+                        .setDType("checkbox")
+                        .setHWidth("width-20-p")
+                        .setDAlign("text-center"))
+                    $scope.vm.relTableConfigs.push($relProvider.config()
                         .setHName("issue.relationIssueType")
                         .setDType("renderer")
                         .setDAlign("text-center")
-                        .setHWidth("width-30-p bold")
+                        .setHWidth("width-60-p bold")
                         .setHSort(false)
                         .setDRenderer("ISSUE_RELATION_TYPE"))
-                    $scope.vm.relTableConfigs.push($tableProvider.config()
+                    $scope.vm.relTableConfigs.push($relProvider.config()
                         .setHName("issue.relationIssueTitle")
                         .setDType("renderer")
                         .setDAlign("text-center")
                         .setHWidth("width-60-p bold")
                         .setHSort(false)
                         .setDRenderer("ISSUE_RELATION_MOVE"))
-                    $scope.vm.relTableConfigs.push($tableProvider.config()
-                        .setHName("issue.relationIssueDelete")
-                        .setDType("renderer")
-                        .setDAlign("text-center")
-                        .setHWidth("width-20-p bold")
-                        .setDRenderer("ISSUE_RELATION_DELETE")
-                        .setHSort(false)
-                        .setDAlign("text-center"))
-
-                    angular.forEach($scope.vm.relTableConfigs, function (Rel_issueTableConfig) {
+                    /*if($scope.vm.viewer.modifyPermissionCheck) {
+                        $scope.vm.relTableConfigs.push($relProvider.config()
+                            .setHName("issue.relationIssueDelete")
+                            .setDType("renderer")
+                            .setDAlign("text-center")
+                            .setHWidth("width-40-p bold")
+                            .setDRenderer("ISSUE_RELATION_DELETE")
+                            .setHSort(false)
+                            .setDAlign("text-center"))
+                    }*/
+                    angular.forEach($scope.vm.relTableConfigs, function (issueTableConfig) {
                         //  �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎.
-                        if (Rel_issueTableConfig.display) {
+                        if (issueTableConfig.display) {
                             //  �뀒�씠釉붿쓽 而щ읆�쓣 留뚮뱾�뼱以��떎.
-                            $scope.fn.setRelTableColumn(Rel_issueTableConfig);
+                            $scope.fn.setRelTableColumn(issueTableConfig);
                         }
                     });
                 }
@@ -435,154 +556,142 @@
                 //  �븯�쐞 �씠�뒋 �뀒�씠釉� �꽕�젙
                 function makeDownTableConfigs() {
                     $scope.vm.downTableConfigs = [];
-                    $scope.vm.downTableConfigs.push($tableProvider.config()
+                    $scope.vm.downTableConfigs.push($downProvider.config()
+                        .setDType("checkbox")
+                        .setHWidth("width-20-p")
+                        .setDAlign("text-center"))
+                    $scope.vm.downTableConfigs.push($downProvider.config()
                         .setHName("issue.downIssueTitle")
                         .setDType("renderer")
                         .setDAlign("text-center")
                         .setHWidth("width-60-p bold")
                         .setHSort(false)
                         .setDRenderer("ISSUE_DOWN_MOVE"))
-                    $scope.vm.downTableConfigs.push($tableProvider.config()
-                        .setHName("issue.relationIssueDelete")
-                        .setDType("renderer")
-                        .setDAlign("text-center")
-                        .setHWidth("width-20-p bold")
-                        .setDRenderer("ISSUE_DOWN_DELETE")
-                        .setHSort(false)
-                        .setDAlign("text-center"))
+                    /*if($scope.vm.viewer.modifyPermissionCheck){
+                        $scope.vm.downTableConfigs.push($downProvider.config()
+                            .setHName("issue.relationIssueDelete")
+                            .setDType("renderer")
+                            .setDAlign("text-center")
+                            .setHWidth("width-40-p bold")
+                            .setDRenderer("ISSUE_DOWN_DELETE")
+                            .setHSort(false)
+                            .setDAlign("text-center"))
+                    }*/
 
-                    angular.forEach($scope.vm.downTableConfigs, function (Down_issueTableConfig) {
+                    angular.forEach($scope.vm.downTableConfigs, function (issueTableConfig) {
                         //  �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎.
-                        if (Down_issueTableConfig.display) {
+                        if (issueTableConfig.display) {
                             //  �뀒�씠釉붿쓽 而щ읆�쓣 留뚮뱾�뼱以��떎.
-                            $scope.fn.setDownTableColumn(Down_issueTableConfig);
+                            $scope.fn.setDownTableColumn(issueTableConfig);
                         }
                     });
                 }
 
-                // �뿰愿� �씠�뒋 �긽�꽭 議고쉶
-                function getRelTableConfigs() {
-                    var content = {
-                        issueId : $scope.vm.viewer.id,
-                        issueTypeId : $rootScope.getCurrentIssueTypeId()
-                    };
+                // �뿰愿� �씠�뒋 �뀒�씠釉� �꽕�젙
+                function setRelTableConfigs(issueTableConfigVo) {
+                    if (issueTableConfigVo == null) {
+                        makeRelTableConfigs();
+                        return;
+                    }
+                    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($relProvider.config()
+                           .setHName("issue.relationIssueType")
+                           .setDType("renderer")
+                           .setDAlign("text-center")
+                           .setHWidth("width-30-p bold")
+                           .setHSort(false)
+                           .setDRenderer("ISSUE_RELATION_TYPE"))
+                        $scope.vm.relTableConfigs.push($relProvider.config()
+                           .setHName("issue.relationIssueTitle")
+                           .setDType("renderer")
+                           .setDAlign("text-center")
+                           .setHWidth("width-60-p bold")
+                           .setHSort(false)
+                           .setDRenderer("ISSUE_RELATION_MOVE"))*/
+                        $scope.vm.relTableConfigs.push($relProvider.config()
+                            .setDType("checkbox")
+                            .setHWidth("width-20-p")
+                            .setDAlign("text-center"))
+                        angular.forEach($scope.vm.issueRelTableConfigs, function (issueTableConfig) {
+                            //  �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎.
+                            if (issueTableConfig.display) {
+                                //  �뀒�씠釉붿쓽 而щ읆�쓣 留뚮뱾�뼱以��떎.
+                                $scope.fn.setRelTableColumn(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();
                             }
+                        });
+                        /*if($scope.vm.viewer.modifyPermissionCheck) {
+                            $scope.vm.relTableConfigs.push($relProvider.config()
+                                .setHName("issue.relationIssueDelete")
+                                .setDType("renderer")
+                                .setHWidth("width-40-p bold")
+                                .setDRenderer("ISSUE_RELATION_DELETE")
+                                .setHSort(false)
+                                .setDAlign("text-center"))
+                        }*/
+                    } else {
+                        makeRelTableConfigs();
+                    }
 
-                        } else {
-                            SweetAlert.swal($filter("translate")("issue.errorRemovableIssueStatusList"), result.data.message.message, "error"); // "�씠�룞 媛��뒫�븳 �씠�뒋 �긽�깭 紐⑸줉 議고쉶 �삤瑜�"
-                        }
-                    });
                 }
 
-                // �븯�쐞 �씠�뒋 �긽�꽭 議고쉶
-                function getDownTableConfigs() {
-                    var content = {
-                        issueId : $scope.vm.viewer.id,
-                        issueTypeId : $rootScope.getCurrentIssueTypeId()
-                    };
+                // �븯�쐞 �씠�뒋 �긽�꽭 議고쉶 寃곌낵 �꽕�젙
+                function setDownTableConfigs(issueTableConfigVo) {
+                    if (issueTableConfigVo == null) return;
+                    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($downProvider.config()
+                            .setHName("issue.downIssueTitle")
+                            .setDType("renderer")
+                            .setDAlign("text-center")
+                            .setHWidth("width-60-p bold")
+                            .setHSort(false)
+                            .setDRenderer("ISSUE_DOWN_MOVE"))*/
+                        $scope.vm.downTableConfigs.push($downProvider.config()
+                            .setDType("checkbox")
+                            .setHWidth("width-20-p")
+                            .setDAlign("text-center"))
+                        angular.forEach($scope.vm.issueDownTableConfigs, function (issueTableConfig) {
+                            //  �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎.
+                            if (issueTableConfig.display) {
+                                //  �뀒�씠釉붿쓽 而щ읆�쓣 留뚮뱾�뼱以��떎.
+                                $scope.fn.setDownTableColumn(issueTableConfig);
                             }
-
-                        }
-                        else {
-                            SweetAlert.swal($filter("translate")("issue.errorRemovableIssueStatusList"), result.data.message.message, "error"); // "�씠�룞 媛��뒫�븳 �씠�뒋 �긽�깭 紐⑸줉 議고쉶 �삤瑜�"
-                        }
-                    });
+                        });
+                        /*if($scope.vm.viewer.modifyPermissionCheck) {
+                            $scope.vm.downTableConfigs.push($downProvider.config()
+                                .setHName("issue.relationIssueDelete")
+                                .setDType("renderer")
+                                .setHWidth("width-40-p bold")
+                                .setDRenderer("ISSUE_DOWN_DELETE")
+                                .setHSort(false)
+                                .setDAlign("text-center"))
+                        }*/
+                    } else {
+                        makeDownTableConfigs();
+                    }
                 }
-
-
-
 
                 // �뿰愿� �씠�뒋 異붽�
                 function addRelationIssue() {
@@ -620,9 +729,14 @@
                         return;
                     }
 
+                    var ids = [];
+                    if ($scope.vm.form.issuesDown[0].id != null) {
+                        ids.push($scope.vm.form.issuesDown[0].id);
+                    }
+
                     var contents = {
                         issueId : $rootScope.currentDetailIssueId,
-                        id : $scope.vm.form.issuesDown[0].id,
+                        ids : ids,
                         parentIssueId : $rootScope.currentDetailIssueId
                     };
 
@@ -639,26 +753,45 @@
                     });
                 }
 
+                 // �씠�뒋紐낆쓣 �겢由��븯硫� �씠�뒋 �긽�꽭 �젙蹂대�� 議고쉶�븳�떎.
+                 // $rootScope.$on("getIssueDetail", function (event, args) {
+                 //     $scope.vm.viewer.id = args["id"];
+                 //     $scope.fn.getIssueDetail();
+                 // });
+
                 //  �씠�뒋紐낆쓣 �겢由��븯硫� �씠�뒋 �긽�꽭 �젙蹂대�� 議고쉶�븳�떎.
-                $rootScope.$on("getIssueDetail", function (event, args) {
-                    $scope.vm.viewer.id = args["id"];
+                // $scope.$on("getIssueDetail", function (event, args) {
+                //     $scope.vm.viewer.id = args["id"];
+                //     $scope.fn.getIssueDetail();
+                // });
+                
+                // �씠硫붿씪 蹂대궦�썑 �긽�꽭�솕硫� 媛깆떊
+                //  $rootScope.$on("getIssueDetail", function (event, args) {
+                //      $scope.fn.getIssueDetail();
+                //  });
+
+                $scope.$on("getIssueDetail", function (event, args) {
                     $scope.fn.getIssueDetail();
                 });
 
-                //  �씠�뒋紐낆쓣 �겢由��븯硫� �씠�뒋 �긽�꽭 �젙蹂대�� 議고쉶�븳�떎.
-                $scope.$on("getIssueDetail", function (event, args) {
-                    $scope.vm.viewer.id = args["id"];
-                    $scope.fn.getIssueDetail();
-                });
+                $scope.$watch(function() {
+                    return $rootScope.currentDetailIssueId;
+                }, function() {
+                    if ($rootScope.currentDetailIssueId != null) {
+                        $scope.vm.viewer.id = $rootScope.currentDetailIssueId;
+                        $scope.fn.getIssueDetail();
+                    }
+                }, true);
 
                 //  珥덇린�솕 �빐�빞�븷 �븷紐⑹쓣 吏��젙�븯�뿬 �떎瑜� �씠�뒋瑜� �겢由��븷 �븣 珥덇린�솕�빐以��떎.
                 function initReload() {
                     $scope.vm.editor.issueStatus = false;
                     $scope.vm.issueForm.issueStatusList = [];
                     $scope.vm.issueForm.issueStatusId = "";
-                    /*if ($scope.$root.$$phase !== '$apply' && $scope.$root.$$phase !== '$digest') {
-                        $scope.$apply();
-                    }*/
+                    $scope.vm.issueTypeId = $rootScope.getCurrentIssueTypeId();
+                    // if ($scope.$root.$$phase !== '$apply' && $scope.$root.$$phase !== '$digest') {
+                    //     $scope.$apply();
+                    // }
                 }
 
                 //  �씠�뒋 �긽�깭 蹂�寃�
@@ -672,6 +805,41 @@
                             parameter : function () {
                                 return {
                                     issueIds : [$scope.vm.viewer.id],
+                                    projectId : $scope.vm.viewer.projectVo.id,
+                                    downIssuesStatus : $scope.vm.form.issuesDownStatus
+                                };
+                            }
+                        }
+                    });
+                }
+
+                function modifyDownIssueStatus() {
+                    var issueIds = [];
+
+                    angular.forEach($scope.vm.viewer.issueDownVos, function (data) {
+                        if (data.checked) {
+                            issueIds.push(data.id);
+                            //$scope.vm.projectId = data.projectId;
+                        }
+                    });
+
+                    if (issueIds.length < 1) {
+                        SweetAlert.warning($filter("translate")("issue.selectionCheck"), $filter("translate")("issue.selectIssueToChangeStatus")); // �꽑�깮 ���긽 �솗�씤, �긽�깭 蹂�寃쏀븷 �씠�뒋瑜� �꽑�깮�븯�꽭�슂.
+                        return;
+                    }
+
+                    $uibModal.open({
+                        templateUrl : 'views/issue/downIssueModifyStatus.html',
+                        size : "md",
+                        controller : 'downIssueModifyStatusController',
+                        backdrop : 'static',
+                        resolve : {
+                            parameter : function () {
+                                return {
+                                    issueTypeId : $scope.vm.viewer.issueTypeVo.id,
+                                    issueIds : [$scope.vm.viewer.id],
+                                    //downIssues : $scope.vm.viewer.issueDownVos,
+                                    downIssues : issueIds,
                                     projectId : $scope.vm.viewer.projectVo.id
                                 };
                             }
@@ -709,10 +877,11 @@
                         resolve : {
                             parameter : function () {
                                 return {
-                                    departmentVos : [$scope.vm.form.issues[0].departmentVos],
-                                    id : [$scope.vm.form.issues[0].id],
-                                    projectId : [$scope.vm.form.issues[0].projectVo.id],
-                                    project : [$scope.vm.form.issues[0].projectVo]
+                                    departmentVos : $scope.vm.form.issues[0].departmentVos,
+                                    id : $scope.vm.form.issues[0].id,
+                                    projectId : $scope.vm.form.issues[0].projectVo.id,
+                                    project : $scope.vm.form.issues[0].projectVo,
+                                    issueTypeId : $scope.vm.form.issues[0].issueTypeVo.id
                                 };
                             }
                         }
@@ -736,6 +905,7 @@
                         }
                     });
                 }
+
 
                 //  �븯�쐞 �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙
                 function addDownIssueTableConfig() {
@@ -800,18 +970,18 @@
 
                 //  �씠�뒋 �긽�꽭 �젙蹂� 議고쉶
                 function getIssueDetail() {
+                    $rootScope.spinner = true;
                     //  珥덇린�솕 �빐�빞�븷 �븷紐⑹쓣 吏��젙�븯�뿬 �떎瑜� �씠�뒋瑜� �겢由��븷 �븣 珥덇린�솕�빐以��떎.
                     $scope.fn.initReload();
-
-                    $scope.fn.getRelTableConfigs();
-                    $scope.fn.getDownTableConfigs();
-
-                        Issue.detail($resourceProvider.getContent(
+                    // $scope.fn.getRelTableConfigs();
+                    // $scope.fn.getDownTableConfigs();
+                    Issue.detail($resourceProvider.getContent(
                         {id : $scope.vm.viewer.id, deep : "02"},
                         $resourceProvider.getPageContent(0, 1))).then(function (result) {
 
                         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);
@@ -820,6 +990,8 @@
 
                                 $scope.vm.viewer.startDate = result.data.data.startDate == null ? "common.unspecified" : result.data.data.startDate; // 誘몄��젙
                                 $scope.vm.viewer.completeDate = result.data.data.completeDate == null ? "common.unspecified" : result.data.data.completeDate; // 誘몄��젙
+
+                                $scope.vm.rangeDate = result.data.data.startDate + "~" + result.data.data.completeDate
 
                                 //  �씠�뒋 �쑀�삎�뿉 �뿰寃곕맂 �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� �엯�젰 �뤌�뿉�꽌 �궗�슜�븷 �닔 �엳寃� 媛�怨듯븳�떎.
                                 $scope.fn.setFormByIssueTypeCustomFields(result.data.data.issueTypeCustomFieldVos);
@@ -831,30 +1003,49 @@
                                 $scope.vm.form.issues = [];
                                 $scope.vm.form.issues.push(result.data.data);
                                 $scope.vm.form.issuesDown = [];
+                                $scope.vm.form.issuesDownStatus = [];// �븯�쐞�씠�뒋 �긽�깭
                                 $scope.vm.form.issuesDown.push(result.data.data);
 
+                                var issueTableConfigVos = result.data.data.issueTableConfigVos;
+                                $scope.fn.setRelTableConfigs(issueTableConfigVos[0]);
+                                $scope.fn.setDownTableConfigs(issueTableConfigVos[1]);
+
                                 // �뿰愿� �씠�뒋 諛섎났臾�
-                                angular.forEach(result.data.data.issueRelationVos, function (issueRelationVo){
-                                    issueRelationVo.relationIssueTypeName = $scope.vm.relationIssueTypes[issueRelationVo.relationIssueType].name;
-                                    $scope.vm.form.issues.push(issueRelationVo.issueRelation);
-                                });
+                                if (result.data.data.issueRelationVos !== null) {
+                                    angular.forEach(result.data.data.issueRelationVos, function (issueRelationVo){
+                                        issueRelationVo.relationIssueTypeName = $scope.vm.relationIssueTypes[issueRelationVo.relationIssueType].name;
+                                        $scope.vm.form.issues.push(issueRelationVo.issueRelation);
+                                    });
+                                    result.data.data.issueRelationVos.sort(function (a, b) {   //理쒓렐蹂�寃쎌씪 �궡由쇱감�닚
+                                        return a.modifyDate > b.modifyDate ? -1 : a.modifyDate < b.modifyDate ? 1 : 0;
+                                    });
+                                }
 
                                 // �븯�쐞 �씠�뒋 諛섎ぉ臾�
-                                angular.forEach(result.data.data.issueDownVos, function (issueDownVo){
-                                    $scope.vm.form.issuesDown.push(issueDownVo.issue);
-                                });
-
+                                if (result.data.data.issueDownVos !== null){
+                                    angular.forEach(result.data.data.issueDownVos, function (issueDownVo){
+                                        //$scope.vm.form.issuesDown.push(issueDownVo.issueDown);
+                                        $scope.vm.form.issuesDown.push(issueDownVo);
+                                        $scope.vm.form.issuesDownStatus.push(issueDownVo.issueStatusVo.issueStatusType);
+                                    });
+                                    result.data.data.issueDownVos.sort(function (a, b) {   //理쒓렐蹂�寃쎌씪 �궡由쇱감�닚
+                                        return a.modifyDate > b.modifyDate ? -1 : a.modifyDate < b.modifyDate ? 1 : 0;
+                                    });
+                                }
                                 $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);
+                                }
                             }
                         }
                         else {
                             SweetAlert.swal($filter("translate")("issue.errorIssueDetails"), result.data.message.message, "error"); // �씠�뒋 �긽�꽭 �젙蹂� 議고쉶 �삤瑜�
                         }
+                        $rootScope.spinner = false;
                     });
                 }
-
-                // ===================================================================================
 
                 //  �씠�뒋 �씠誘몄� 誘몃━ 蹂닿린 留뚮뱾湲�
                 function makePreviewImages(attachedFileVos) {
@@ -882,6 +1073,12 @@
                         switch (issueTypeCustomField.customFieldVo.customFieldType) {
                             case "INPUT" :
                             case "SINGLE_SELECT" :
+                            case "NUMBER" :
+                            case "DATETIME" :
+                            case "IP_ADDRESS" :
+                            case "EMAIL" :
+                            case "SITE" :
+                            case "TEL" :
                                 issueTypeCustomField.useValues = "";
                                 break;
 
@@ -924,8 +1121,61 @@
 
                 //  �솢�룞 �씠�젰 留뚮뱾湲�
                 function makeActiveHistory() {
-                    $scope.vm.viewer.activeHistory = $scope.vm.viewer.issueCommentVos.concat($scope.vm.viewer.issueHistoryVos);
-                    $scope.vm.viewer.activeHistory.sort(function (a, b) {
+                    $scope.vm.viewer.activeParentHistory = "";
+                    $scope.vm.viewer.activeHistory = "";
+                    if ($scope.vm.viewer.issueDownVos != null && $scope.vm.viewer.issueDownVos.length > 0) {
+                        $scope.vm.viewer.activeDownHistory = ""; //�븯�쐞�씠�뒋 �엳�뒪�넗由щ쭔
+                        $scope.vm.viewer.downComment = ""; //�븯�쐞�씠�뒋 �뙎湲�留�
+                        $scope.vm.viewer.activeDownAllHistory = ""; //�븯�쐞�씠�뒋 �엳�뒪�넗由�+�뙎湲�
+                        var downTitle = "";
+                        var oriDownHistory = [];
+                        var oriDownCommentHistory = [];
+
+                        // �븯�쐞�씠�뒋 �엳�뒪�넗由�
+                        for (var i=0; i<$scope.vm.viewer.issueDownVos.length; i++){
+                            oriDownHistory.push($scope.vm.viewer.issueDownVos[i].issueHistoryVos);
+                            oriDownCommentHistory.push($scope.vm.viewer.issueDownVos[i].issueCommentVos);
+                        }
+                        for (var i=0; i<oriDownHistory.length; i++){
+                            if ($scope.vm.viewer.activeDownHistory === "") {
+                                $scope.vm.viewer.activeDownHistory = oriDownHistory[i];
+                            } else {
+                                $scope.vm.viewer.activeDownHistory = $scope.vm.viewer.activeDownHistory.concat(oriDownHistory[i]);
+                            }
+                        }
+
+                        for (var i=0; i<$scope.vm.viewer.activeDownHistory.length; i++){
+                            downTitle = "<div class='dot' style='margin-bottom: -8px'>*�븯�쐞�씠�뒋 : "+$scope.vm.viewer.activeDownHistory[i].title+"</div>";
+                            $scope.vm.viewer.activeDownHistory[i].desc = downTitle + $scope.vm.viewer.activeDownHistory[i].description;
+                        }
+                        $scope.vm.viewer.activeDownHistory.sort(function (a, b) {   //�궡由쇱감�닚
+                            return a.registerDate > b.registerDate ? -1 : a.registerDate < b.registerDate ? 1 : 0;
+                        });
+
+                        // �븯�쐞�씠�뒋 �뙎湲� �엳�뒪�넗由�
+                       for (var i=0; i<oriDownCommentHistory.length; i++) {
+                           if ($scope.vm.viewer.downComment === "") {
+                               $scope.vm.viewer.downComment = oriDownCommentHistory[i];
+                           } else {
+                               $scope.vm.viewer.downComment = $scope.vm.viewer.downComment.concat(oriDownCommentHistory[i]);
+                           }
+                       }
+                       $scope.vm.viewer.issueDownVos.sort(function (a, b) {   //�궡由쇱감�닚
+                           return a.registerDate > b.registerDate ? -1 : a.registerDate < b.registerDate ? 1 : 0;
+                       });
+
+                       $scope.vm.viewer.activeDownAllHistory = $scope.vm.viewer.downComment.concat($scope.vm.viewer.activeDownHistory);
+                       $scope.vm.viewer.activeParentHistory = $scope.vm.viewer.issueCommentVos.concat($scope.vm.viewer.issueHistoryVos);
+                       $scope.vm.viewer.activeHistory = $scope.vm.viewer.activeParentHistory.concat($scope.vm.viewer.activeDownAllHistory);
+
+                    }else {
+                        $scope.vm.viewer.activeParentHistory = $scope.vm.viewer.issueCommentVos.concat($scope.vm.viewer.issueHistoryVos);
+                        $scope.vm.viewer.activeHistory = $scope.vm.viewer.issueCommentVos.concat($scope.vm.viewer.issueHistoryVos);
+                    }
+                    $scope.vm.viewer.activeParentHistory.sort(function (a, b) {   //�궡由쇱감�닚
+                        return a.registerDate > b.registerDate ? -1 : a.registerDate < b.registerDate ? 1 : 0;
+                    });
+                    $scope.vm.viewer.activeHistory.sort(function (a, b) {   //�궡由쇱감�닚
                         return a.registerDate > b.registerDate ? -1 : a.registerDate < b.registerDate ? 1 : 0;
                     });
                 }
@@ -979,7 +1229,6 @@
                                         $timeout(function () {
                                             SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // �궘�젣 �꽦怨�
                                         }, 100);
-
                                         $scope.fn.getCommentList();
                                     }
                                     else {
@@ -1002,6 +1251,7 @@
 
                         if (result.data.message.status === "success") {
                             $scope.vm.viewer.issueCommentVos = result.data.data;
+                            $scope.fn.updateActiveHistory();
                         }
                         else {
                             SweetAlert.swal({
@@ -1032,24 +1282,76 @@
                     });
                 }
 
+                function sendMailVo(partnerVos) {
+                    $scope.fn.sendMail($scope.fn.getParametersAll(), $scope.fn.getParameters(null, partnerVos));
+                }
+
+                function sendMailAll() {
+                    var param = $scope.fn.getParametersAll();
+                    $scope.fn.sendMail(param, param);
+                }
+
                 //  �듅�젙 �궗�슜�옄�뿉寃� �씠�뒋瑜� 硫붿씪濡� 諛쒖넚
-                function sendMail(issueId, projectId) {
+                function sendMail(partnersAll, partners) {
                     $uibModal.open({
-                        templateUrl : 'views/issue/issueSendMail.html',
+                        templateUrl : 'views/issue/issueSendMailPartners.html',
                         size : "md",
-                        controller : 'issueSendMailController',
+                        controller : 'issueSendMailPartnersController',
                         backdrop : 'static',
                         resolve : {
-                            parameter : function () {
-                                return {
-                                    issueId : issueId,
-                                    projectId : projectId
-                                };
+                            parameter : {
+                                partnersAll : partnersAll,
+                                partners : partners,
+                                issueId : $scope.vm.viewer.id,
+                                projectId : $scope.vm.viewer.projectVo.id,
                             }
                         }
                     });
                 }
 
+                // �씪諛� 硫붿씪 諛쒖넚 (�궗�슜�옄 吏곸젒 �옉�꽦)
+                function sendCommonMail() {
+                    $uibModal.open({
+                        templateUrl : 'views/issue/issueCommonSendMail.html',
+                        size : "md",
+                        controller : 'issueCommonSendMailController',
+                        backdrop : 'static',
+                        resolve : {
+                            parameter : {
+                                issueId : $scope.vm.viewer.id,
+                            }
+                        }
+                    });
+                }
+
+                function getParametersAll() {
+                    var params = $scope.fn.getParameters(null, $scope.vm.viewer.issueCompanyVos);
+                    params = $scope.fn.getParameters(params, $scope.vm.viewer.issueIspVos);
+                    params = $scope.fn.getParameters(params, $scope.vm.viewer.issueHostingVos);
+
+                    if (params != null && params.length > 0) {
+                        for (let i = 0; i < params.length; i++) {
+                            params[i].id = i;
+                        }
+                    }
+                    return params;
+                }
+
+                function getParameters(sourceArr, partnerVos) {
+                    var excludeVos = sourceArr != null ? sourceArr.slice() : [];
+
+                    angular.forEach(partnerVos, function (vo) {
+                        var account = {
+                            account : vo.email
+                        }
+                        Object.assign(vo, account)
+
+                        excludeVos.push(vo);
+                    });
+
+                    return excludeVos;
+                }
+
                 //  蹂�寃� �젙蹂대�� �솗�씤�븳�떎.
                 function versionView(issueId) {
                     $uibModal.open({

--
Gitblit v1.8.0