From ab7e04765622b7ef31bb891a91e89abcf203c31d Mon Sep 17 00:00:00 2001
From: jhjang <jhjang@maprex.co.kr>
Date: 목, 09 12월 2021 14:35:15 +0900
Subject: [PATCH] Merge branch 'master' of http://192.168.0.25:9001/r/owl-kisa

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java             |   83 +++++++++++++
 src/main/java/kr/wisestone/owl/vo/IssueVo.java                                |    9 +
 src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.js |    2 
 src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java              |    9 +
 src/main/webapp/scripts/components/issue/issue.service.js                     |   12 ++
 src/main/webapp/scripts/components/utils/dateRangePicker.directive.js         |    5 
 src/main/resources/mybatis/query-template/issue-template.xml                  |    1 
 src/main/webapp/scripts/app/issue/issueDetail.controller.js                   |   14 +-
 src/main/webapp/views/login/login.html                                        |   33 ++--
 src/main/java/kr/wisestone/owl/service/IssueService.java                      |    4 
 src/main/webapp/scripts/app/issue/issueList.controller.js                     |  110 ++++++++++++++++--
 src/main/webapp/i18n/ko/global.json                                           |    3 
 src/main/java/kr/wisestone/owl/web/controller/IssueController.java            |   24 ++++
 src/main/webapp/views/issue/issueDetail.html                                  |    4 
 src/main/webapp/scripts/app/project/projectList.controller.js                 |   22 ---
 src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js  |   13 -
 16 files changed, 277 insertions(+), 71 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/service/IssueService.java b/src/main/java/kr/wisestone/owl/service/IssueService.java
index fff9510..302a9e4 100644
--- a/src/main/java/kr/wisestone/owl/service/IssueService.java
+++ b/src/main/java/kr/wisestone/owl/service/IssueService.java
@@ -54,6 +54,10 @@
 
     void removeIssues(IssueForm issueForm);
 
+    void removeAllIssues(IssueForm issueForm);
+
+    void removeDownIssues(IssueForm issueForm);
+
     void modifyIssueStatus(IssueForm issueForm, User user);
 
     Issue getIssue(Long taskId);
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 f0022e5..9301402 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -2068,20 +2068,95 @@
         List<Issue> removeIssues = Lists.newArrayList();
 
         for (Long issueId : issueForm.getRemoveIds()) {
+            //�븯�쐞�씠�뒋 泥댄겕
+            List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueId);
+            if(downIssues != null && downIssues.size() > 0){
+                for(Issue downIssue : downIssues){
+                    if(downIssue.getParentIssue() != null){
+                        downIssue.setParentIssue(null);
+                    }
+                }
+            }
+
             Issue issue = this.issueRemoves(issueId, user);
             removeIssues.add(issue);
         }
 
-        if (removeIssues.size() > 0) {
-            //this.issueRepository.deleteAll(removeIssues);
-        }
+        /*if (removeIssues.size() > 0) {
+            this.issueRepository.deleteAll(removeIssues);
+        }*/
 
         //  �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏�
         log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_REMOVE));
     }
 
+    //  �씠�뒋瑜� �궘�젣�븳�떎.
+    @Override
+    @Transactional
+    public void removeAllIssues(IssueForm issueForm) {
+        //  �궗�슜�븯怨� �엳�뒗 �뾽臾� 怨듦컙�씠 �솢�꽦 �긽�깭�씤吏� �솗�씤�븳�떎. �궗�슜 怨듦컙�뿉�꽌 濡쒓렇�씤�븳 �궗�슜�옄媛� 鍮꾪솢�꽦�씤吏� �솗�씤�븳�떎.
+        User user = this.webAppUtil.getLoginUserObject();
+        this.workspaceService.checkUseWorkspace();
+
+        if (issueForm.getRemoveIds().size() < 1) {
+            throw new OwlRuntimeException(
+                    this.messageAccessor.getMessage(MsgConstants.ISSUE_REMOVE_NOT_SELECT));
+        }
+
+        List<Issue> removeIssues = Lists.newArrayList();
+
+        for (Long issueId : issueForm.getRemoveIds()) {
+            //�븯�쐞�씠�뒋 泥댄겕
+            List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueId);
+            if(downIssues != null && downIssues.size() > 0){
+                for(Issue downIssue : downIssues){
+                    Long downIssueId = downIssue.getId();
+                    downIssue = this.issueRemoves(downIssueId, user);
+                    removeIssues.add(downIssue);
+                }
+            }
+            Issue issue = this.issueRemoves(issueId, user);
+            removeIssues.add(issue);
+        }
+        //  �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏�
+        log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_REMOVE));
+    }
+
+    //  �븯�쐞�씠�뒋瑜� �궘�젣�븳�떎.
+    @Override
+    @Transactional
+    public void removeDownIssues(IssueForm issueForm) {
+        //  �궗�슜�븯怨� �엳�뒗 �뾽臾� 怨듦컙�씠 �솢�꽦 �긽�깭�씤吏� �솗�씤�븳�떎. �궗�슜 怨듦컙�뿉�꽌 濡쒓렇�씤�븳 �궗�슜�옄媛� 鍮꾪솢�꽦�씤吏� �솗�씤�븳�떎.
+        User user = this.webAppUtil.getLoginUserObject();
+        this.workspaceService.checkUseWorkspace();
+
+        if (issueForm.getRemoveIds().size() < 1) {
+            throw new OwlRuntimeException(
+                    this.messageAccessor.getMessage(MsgConstants.ISSUE_REMOVE_NOT_SELECT));
+        }
+
+        List<Issue> removeIssues = Lists.newArrayList();
+        Long downIssueId = 0L;
+        for (Long issueId : issueForm.getRemoveIds()) {
+            //�궘�젣 �븷 �씠�뒋�쓽 �븯�쐞�씠�뒋 泥댄겕
+            List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueId);
+            if(downIssues != null && downIssues.size() > 0){
+                for(Issue downIssue : downIssues){
+                    downIssueId = downIssue.getId();
+                }
+            }
+            Issue issue = this.issueRemoves(downIssueId, user);
+            removeIssues.add(issue);
+        }
+        //  �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏�
+        log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_REMOVE));
+    }
+
     private Issue issueRemoves(Long issueId, User user) {
-        Issue issue = this.getIssue(issueId);
+        Issue issue = null;
+        if(issueId != null){
+            issue = this.getIssue(issueId);
+        }
         //  �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤
         this.verifyIssueModifyPermission(issue, user);
 
diff --git a/src/main/java/kr/wisestone/owl/vo/IssueVo.java b/src/main/java/kr/wisestone/owl/vo/IssueVo.java
index 5ac8406..69600a2 100644
--- a/src/main/java/kr/wisestone/owl/vo/IssueVo.java
+++ b/src/main/java/kr/wisestone/owl/vo/IssueVo.java
@@ -31,6 +31,7 @@
     private Long severityId;
     private String severityName;
     private String severityColor;
+    private String isApi;
     private ProjectVo projectVo;    //  �씠�뒋 �긽�꽭�뿉�꽌 �궗�슜
     private IssueStatusVo issueStatusVo;    //  �씠�뒋 �긽�꽭�뿉�꽌 �궗�슜
     private IssueTypeVo issueTypeVo;    //  �씠�뒋 �긽�꽭�뿉�꽌 �궗�슜
@@ -231,6 +232,14 @@
         this.severityColor = severityColor;
     }
 
+    public String getIsApi() {
+        return isApi;
+    }
+
+    public void setIsApi(String isApi) {
+        this.isApi = isApi;
+    }
+
     public Boolean getModifyPermissionCheck() {
         return modifyPermissionCheck;
     }
diff --git a/src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java b/src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java
index 4437f90..c531292 100644
--- a/src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java
+++ b/src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java
@@ -34,6 +34,7 @@
     private Long workspaceId;
     private String projectType;
     private String deep;
+    private String isApi;
     private Long parentIssueId;     // �긽�쐞 �씪媛�
     private String useValue;
     private List<Long> projectIds = Lists.newArrayList();
@@ -301,6 +302,14 @@
         this.deep = deep;
     }
 
+    public String getIsApi() {
+        return isApi;
+    }
+
+    public void setIsApi(String isApi) {
+        this.isApi = isApi;
+    }
+
     public List<Long> getProjectIds() {
         return projectIds;
     }
diff --git a/src/main/java/kr/wisestone/owl/web/controller/IssueController.java b/src/main/java/kr/wisestone/owl/web/controller/IssueController.java
index f752960..460c4b5 100644
--- a/src/main/java/kr/wisestone/owl/web/controller/IssueController.java
+++ b/src/main/java/kr/wisestone/owl/web/controller/IssueController.java
@@ -137,6 +137,30 @@
         return this.setSuccessMessage(resJsonData);
     }
 
+    //  �븯�쐞�씠�뒋 �궘�젣
+    @RequestMapping(value = "/issue/removeAll", produces = MediaType.APPLICATION_JSON_VALUE)
+    public
+    @ResponseBody
+    Map<String, Object> removesAll(@RequestBody Map<String, Map<String, Object>> params) {
+        Map<String, Object> resJsonData = new HashMap<>();
+
+        this.issueService.removeAllIssues(IssueForm.make(params.get(Constants.REQ_KEY_CONTENT)));
+
+        return this.setSuccessMessage(resJsonData);
+    }
+
+    //  �븯�쐞�씠�뒋 �궘�젣
+    /*@RequestMapping(value = "/issue/removeDown", produces = MediaType.APPLICATION_JSON_VALUE)
+    public
+    @ResponseBody
+    Map<String, Object> removesDown(@RequestBody Map<String, Map<String, Object>> params) {
+        Map<String, Object> resJsonData = new HashMap<>();
+
+        this.issueService.removeDownIssues(IssueForm.make(params.get(Constants.REQ_KEY_CONTENT)));
+
+        return this.setSuccessMessage(resJsonData);
+    }*/
+
     //  �씠�뒋 �떎以� �긽�깭 蹂�寃�
     @RequestMapping(value = "/issue/modifyMultiIssueStatus", produces = MediaType.APPLICATION_JSON_VALUE)
     public
diff --git a/src/main/resources/mybatis/query-template/issue-template.xml b/src/main/resources/mybatis/query-template/issue-template.xml
index 1ac0cbb..599bf68 100644
--- a/src/main/resources/mybatis/query-template/issue-template.xml
+++ b/src/main/resources/mybatis/query-template/issue-template.xml
@@ -15,6 +15,7 @@
         issue.complete_date as completeDate,
         issue.issue_number as issueNumber,
         issue.register_date as registerDate,
+        issue.is_api as isApi,
         SUBSTRING(issue.modify_date, 1, 19) as modifyDate,
         project.id as projectId,
         project.name as projectName,
diff --git a/src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.js b/src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.js
index 764f07e..7d0f7cd 100644
--- a/src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.js
+++ b/src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.js
@@ -108,7 +108,7 @@
                       '<i class="fa fa-calendar glyphicon glyphicon-calendar"></i>' +
                       '<div class="calendar-time">' +
                         '<div></div>' +
-                        '<i class="fa fa-clock-o glyphicon glyphicon-time"></i>' +
+                        '<i class="fa fa-clock-o glyphicon glyphicon-time" style="position: relative; left:12.3rem; bottom: 1.23rem "></i>' +
                       '</div>' +
                     '</div>' +
                     '<div class="calendar-table"></div>' +
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 136f3c5..beb4f8c 100644
--- a/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js
+++ b/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js
@@ -75,13 +75,9 @@
                                         //  �봽濡쒖젥�듃 �씠由�(�봽濡쒖젥�듃 由ъ뒪�듃�뿉�꽌 �궗�슜)
                                         case "PROJECT_NAME" :
                                             if ($rootScope.workProject != null && $rootScope.workProject.id == scope.data.id) {
-                                                // makeTag += "<span class='titlenameSelect cursor table-word-break-all sub-line' ng-click='event.changeLastProject(data.id)'>" + myToken + scope.data.name.replace(/</gi, '&lt;') + "</span>";
-                                                makeTag += "<span class='titlenameSelect cursor table-word-break-all sub-line' ng-click='event.moveIssue(data.id)'>" + myToken + scope.data.name.replace(/</gi, '&lt;') + "</span>";
-                                                // makeTag += "<span class='titlenameSelect cursor table-word-break-all sub-line' ng-click='event.changeDetailView(data.id)'>" + myToken + scope.data.name.replace(/</gi, '&lt;') + "</span>";
+                                                makeTag += "<span class='titlenameSelect cursor table-word-break-all sub-line' ng-click='event.changeLastProject(data.id)'>" + myToken + scope.data.name.replace(/</gi, '&lt;') + "</span>";
                                             } else {
-                                                // makeTag += "<span class='titlename cursor table-word-break-all sub-line' ng-click='event.changeLastProject(data.id)'>" + myToken + scope.data.name.replace(/</gi, '&lt;') + "</span>";
-                                                makeTag += "<span class='titlename cursor table-word-break-all sub-line' ng-click='event.moveIssue(data.id)'>" + myToken + scope.data.name.replace(/</gi, '&lt;') + "</span>";
-                                                // makeTag += "<span class='titlename cursor table-word-break-all sub-line' ng-click='event.changeDetailView(data.id)'>" + myToken + scope.data.name.replace(/</gi, '&lt;') + "</span>";
+                                                makeTag += "<span class='titlename cursor table-word-break-all sub-line' ng-click='event.changeLastProject(data.id)'>" + myToken + scope.data.name.replace(/</gi, '&lt;') + "</span>";
                                             }
                                             break;
 
@@ -306,7 +302,6 @@
 
                                         // �븯�쐞 �씠�뒋 �씠�룞(�젣紐�)
                                         case "ISSUE_DOWN_MOVE" :
-
                                             makeTag += "<span class=\"titlename cursor\" ng-click=\"event.changeDetailView(data)\">" + scope.data.title + "</span></a>";
                                             break;
 
@@ -429,8 +424,8 @@
                                             makeTag += '<span class="number-tag">' + scope.data.projectKey + ' - ' + scope.data.issueNumber + '</span>';
                                             makeTag += ' <span class="tag"> / </span> ';
                                             makeTag += "<span class='badge' ng-style='{ \"background-color\" : \"" + scope.data.issueStatusColor + "\"," + "\"border-color\"" + " : \"" + scope.data.issueStatusColor + "\", \"color\": \"#FFFFFF\" }'>" + scope.data.issueStatusName + "</span>";
-                                            // makeTag += ' <span class="tag"> / </span> ';
-                                            // makeTag += '<span class="tag">' + scope.data.projectName + '</span>';
+                                            makeTag += '<span class="tag"> &nbsp;/ </span> ';
+                                            makeTag += '<span class="tag">' +'<span>API:&nbsp;</span>' + scope.data.isApi + '</span>';
                                             makeTag += '</div>';
                                             makeTag += '<div class="titlename cursor text-left" ng-click="event.changeDetailView(data.id)">' + scope.data.title.replace(/</gi, '&lt;') + '</div>';
                                             makeTag += '<div class="extra-infodiv text-left">';
diff --git a/src/main/webapp/i18n/ko/global.json b/src/main/webapp/i18n/ko/global.json
index ca941f2..af1d697 100644
--- a/src/main/webapp/i18n/ko/global.json
+++ b/src/main/webapp/i18n/ko/global.json
@@ -218,6 +218,8 @@
         "settingTableDisplay": "�뀒�씠釉� �몴�떆 �꽕�젙",
         "deleteIssue": "�씠�뒋 �궘�젣",
         "wantToDeleteSelectIssue": "�꽑�깮�븳 �씠�뒋瑜� �궘�젣�븯寃좎뒿�땲源�? \n �궗�슜�옄媛� 吏곸젒 �궘�젣�븳 �씠�뒋�뒗 �뼱�뼚�븳 寃쎌슦�뿉�룄 蹂듦뎄媛� 遺덇��뒫�빀�땲�떎.",
+        "wantToDeleteOnlySelectIssue": "�꽑�깮�븳 �씠�뒋留� �궘�젣�븯寃좎뒿�땲源�? \n �궗�슜�옄媛� 吏곸젒 �궘�젣�븳 �씠�뒋�뒗 �뼱�뼚�븳 寃쎌슦�뿉�룄 蹂듦뎄媛� 遺덇��뒫�빀�땲�떎.",
+        "wantToDeleteSelectDownIssue": "�꽑�깮�븳 �씠�뒋�쓽 �븯�쐞 �씠�뒋媛� 議댁옱 �빀�땲�떎. \n �꽑�깮�븳 �씠�뒋�� �븯�쐞 �씠�뒋 紐⑤몢 �궘�젣�븯寃좎뒿�땲源�? \n �궗�슜�옄媛� 吏곸젒 �궘�젣�븳 �씠�뒋�뒗 �뼱�뼚�븳 寃쎌슦�뿉�룄 蹂듦뎄媛� 遺덇��뒫�빀�땲�떎.",
         "wantToDeleteSelectRelationIssue": "�꽑�깮�븳 �뿰愿� �씠�뒋瑜� �궘�젣�븯寃좎뒿�땲源�? \n �궗�슜�옄媛� 吏곸젒 �궘�젣�븳 �뿰愿� �씠�뒋�뒗 蹂듦뎄媛� 遺덇��뒫�빀�땲�떎.",
         "failedToSaveFieldConditions": "寃��깋 �븘�뱶 議곌굔 ���옣 �떎�뙣",
         "failedToGetSearchFieldCondition": "寃��깋 �븘�뱶 議곌굔 媛��졇�삤湲� �떎�뙣",
@@ -783,6 +785,7 @@
         "createIssue": "�씠�뒋 �깮�꽦",
         "updateIssue": "�씠�뒋 蹂�寃�",
         "deleteIssue": "�씠�뒋 �궘�젣",
+        "deleteDownIssue": "�븯�쐞 �씠�뒋 �궘�젣",
         "sendMailIssue": "�씠�뒋 硫붿씪 �쟾�넚",
         "updateTitle": "�젣紐⑹씠 蹂�寃쎈릺�뿀�뒿�땲�떎.",
         "updateContent": "�궡�슜�씠 蹂�寃쎈릺�뿀�뒿�땲�떎.",
diff --git a/src/main/webapp/scripts/app/issue/issueDetail.controller.js b/src/main/webapp/scripts/app/issue/issueDetail.controller.js
index 4c97ae7..0d1140c 100644
--- a/src/main/webapp/scripts/app/issue/issueDetail.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueDetail.controller.js
@@ -50,6 +50,7 @@
                 $scope.fn.setDownTableConfigs = setDownTableConfigs;
                 $scope.fn.containsPartner = containsPartner;
                 $scope.fn.onActivate = onActivate;
+                $scope.fn.issueBack = issueBack;
 
                 //  �씠�뒋 紐⑸줉 而⑦듃濡ㅻ윭 vm, fn �긽�냽 以�
                 $scope.vm.viewer = {};
@@ -125,6 +126,12 @@
                     //$rootScope.$broadcast("makeIssueSearch",issue);
                     $scope.$parent.tableEvent.changeDetailView(issue.id);
                     $scope.fn.onActivate();
+                }
+
+                // �긽�쐞 �씠�뒋 �겢由��떆 �긽�쐞 �씠�뒋濡� �씠�룞
+                function issueBack() {
+                    $rootScope.currentDetailIssueId = $scope.vm.viewer.parentIssueVo.id
+                    $rootScope.$broadcast("getIssueDetail", {id: $rootScope.currentDetailIssueId});
                 }
 
                 function onActivate() {
@@ -656,7 +663,6 @@
                 //     $scope.fn.getIssueDetail();
                 // });
 
-                // todo �씠嫄� �삉 萸먯�
                 $scope.$watch(function() {
                     return $rootScope.currentDetailIssueId;
                 }, function() {
@@ -889,11 +895,7 @@
                                     angular.forEach(result.data.data.issueDownVos, function (issueDownVo){
                                         //$scope.vm.form.issuesDown.push(issueDownVo.issueDown);
                                         $scope.vm.form.issuesDown.push(issueDownVo);
-                                        // 媛꾪뿉�쟻�씤 �븯�쐞 �씠�뒋 媛깆떊 �삤瑜� 諛⑹�
-                                        // $scope.$on("getIssueDetail", function (event, args) {
-                                        //      $scope.fn.getIssueDetail();
-                                        //  });
-                                        
+
                                     });
                                 }
                                 $scope.vm.viewer.issueRelationVos = result.data.data.issueRelationVos;
diff --git a/src/main/webapp/scripts/app/issue/issueList.controller.js b/src/main/webapp/scripts/app/issue/issueList.controller.js
index 006dc38..c596f5d 100644
--- a/src/main/webapp/scripts/app/issue/issueList.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueList.controller.js
@@ -689,6 +689,7 @@
                 function removes() {
                     var removeIds = [];
                     var removePermission = true;
+                    var downIssueIds = false;
 
                     angular.forEach($scope.vm.responseData.data, function (data) {
                         if (data.checked && data.modifyPermissionCheck) {
@@ -697,6 +698,10 @@
 
                         if (data.checked && !data.modifyPermissionCheck) {
                             removePermission = false;
+                        }
+
+                        if (data.downIssueAllCount > 0){
+                            downIssueIds = true;
                         }
                     });
 
@@ -719,25 +724,23 @@
                         return;
                     }
 
-                    //  �궘�젣 �븣由�
-                    SweetAlert.swal({
-                            title : $filter("translate")("issue.deleteIssue"), // �씠�뒋 �궘�젣
-                            text : $filter("translate")("issue.wantToDeleteSelectIssue"), // �꽑�깮�븳 �씠�뒋�쓣 �궘�젣�븯寃좎뒿�땲源�? �궘�젣�맂 �씠�뒋�� 蹂듦뎄�븷 �닔 �뾾�뒿�땲�떎.
+                    if (downIssueIds) {
+                        SweetAlert.swal({
+                            title : $filter("translate")("common.deleteIssue"), // �씠�뒋 �궘�젣
+                            text : $filter("translate")("issue.wantToDeleteSelectDownIssue"), // �븯�쐞 �씠�뒋媛� 議댁옱 �빀�땲�떎. �꽑�깮�븳 �씠�뒋�� �븯�쐞 �씠�뒋 紐⑤몢 �궘�젣�븯寃좎뒿�땲源�? �궘�젣�맂 �씠�뒋�뒗 蹂듦뎄�븷 �닔 �뾾�뒿�땲�떎.
                             type : "warning",
                             showCancelButton : true,
                             confirmButtonColor : "#DD6B55",
                             confirmButtonText : $filter("translate")("common.delete"), // �궘�젣
                             cancelButtonText : $filter("translate")("common.cancel"), // 痍⑥냼
                             closeOnConfirm : false,
-                            closeOnCancel : true
+                            closeOnCancel : false
                         },
                         function (isConfirm) {
-                            SweetAlert.close();
-
-                            if (isConfirm) {
+                            if (isConfirm) { //�씠�뒋 + �븯�쐞 �궘�젣
                                 $rootScope.spinner = true;
 
-                                Issue.remove($resourceProvider.getContent(
+                                Issue.removeAllIssues($resourceProvider.getContent(
                                     { removeIds : removeIds },
                                     $resourceProvider.getPageContent(0, 0))).then(function (result) {
 
@@ -745,9 +748,7 @@
                                         $timeout(function () {
                                             SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // �궘�젣 �꽦怨�
                                         }, 100);
-
                                         $scope.fn.listView();
-
                                         $scope.fn.getPageList(0);
                                     }
                                     else {
@@ -755,11 +756,96 @@
                                             SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // �궘�젣 �떎�뙣
                                         }, 100);
                                     }
-
                                     $rootScope.spinner = false;
                                 });
+
+                            } else {//  �꽑�깮 �븳 �씠�뒋留� �궘�젣
+                                //  �궘�젣 �븣由�
+                                SweetAlert.swal({
+                                        title : $filter("translate")("issue.deleteIssue"), // �씠�뒋 �궘�젣
+                                        text : $filter("translate")("issue.wantToDeleteOnlySelectIssue"), // �꽑�깮�븳 �씠�뒋留� �궘�젣�븯寃좎뒿�땲源�? �궘�젣�맂 �씠�뒋�� 蹂듦뎄�븷 �닔 �뾾�뒿�땲�떎.
+                                        type : "warning",
+                                        showCancelButton : true,
+                                        confirmButtonColor : "#DD6B55",
+                                        confirmButtonText : $filter("translate")("common.delete"), // �궘�젣
+                                        cancelButtonText : $filter("translate")("common.cancel"), // 痍⑥냼
+                                        closeOnConfirm : false,
+                                        closeOnCancel : true
+                                    },
+                                    function (isConfirm) {
+                                        SweetAlert.close();
+
+                                        if (isConfirm) {
+                                            $rootScope.spinner = true;
+
+                                            Issue.remove($resourceProvider.getContent(
+                                                { removeIds : removeIds },
+                                                $resourceProvider.getPageContent(0, 0))).then(function (result) {
+
+                                                if (result.data.message.status === "success") {
+                                                    $timeout(function () {
+                                                        SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // �궘�젣 �꽦怨�
+                                                    }, 100);
+
+                                                    $scope.fn.listView();
+
+                                                    $scope.fn.getPageList(0);
+                                                }
+                                                else {
+                                                    $timeout(function () {
+                                                        SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // �궘�젣 �떎�뙣
+                                                    }, 100);
+                                                }
+
+                                                $rootScope.spinner = false;
+                                            });
+                                        }
+                                    });
                             }
                         });
+                    } else {
+                        //  �궘�젣 �븣由�
+                        SweetAlert.swal({
+                                title : $filter("translate")("issue.deleteIssue"), // �씠�뒋 �궘�젣
+                                text : $filter("translate")("issue.wantToDeleteSelectIssue"), // �꽑�깮�븳 �씠�뒋�쓣 �궘�젣�븯寃좎뒿�땲源�? �궘�젣�맂 �씠�뒋�� 蹂듦뎄�븷 �닔 �뾾�뒿�땲�떎.
+                                type : "warning",
+                                showCancelButton : true,
+                                confirmButtonColor : "#DD6B55",
+                                confirmButtonText : $filter("translate")("common.delete"), // �궘�젣
+                                cancelButtonText : $filter("translate")("common.cancel"), // 痍⑥냼
+                                closeOnConfirm : false,
+                                closeOnCancel : true
+                            },
+                            function (isConfirm) {
+                                SweetAlert.close();
+
+                                if (isConfirm) {
+                                    $rootScope.spinner = true;
+
+                                    Issue.remove($resourceProvider.getContent(
+                                        { removeIds : removeIds },
+                                        $resourceProvider.getPageContent(0, 0))).then(function (result) {
+
+                                        if (result.data.message.status === "success") {
+                                            $timeout(function () {
+                                                SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // �궘�젣 �꽦怨�
+                                            }, 100);
+
+                                            $scope.fn.listView();
+
+                                            $scope.fn.getPageList(0);
+                                        }
+                                        else {
+                                            $timeout(function () {
+                                                SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // �궘�젣 �떎�뙣
+                                            }, 100);
+                                        }
+
+                                        $rootScope.spinner = false;
+                                    });
+                                }
+                            });
+                    }
                 }
 
                 //  �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙
diff --git a/src/main/webapp/scripts/app/project/projectList.controller.js b/src/main/webapp/scripts/app/project/projectList.controller.js
index 9fb34d2..93e08bc 100644
--- a/src/main/webapp/scripts/app/project/projectList.controller.js
+++ b/src/main/webapp/scripts/app/project/projectList.controller.js
@@ -69,9 +69,7 @@
                 $scope.tableEvent = {
                     modify : modify,
                     projectCustomFieldConfig : projectCustomFieldConfig,
-                    changeLastProject : changeLastProject,
-                    moveIssue : moveIssue,
-                    changeDetailView : changeDetailView
+                    changeLastProject : changeLastProject
                 };
 
                 angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector}));
@@ -363,22 +361,8 @@
                 }
 
                 function changeLastProject(projectId) {
-                    $rootScope.changeLastProject(projectId);
-                }
-
-                function moveIssue(projectId) {
-                    // $rootScope.currentDetailIssueId = null;
-                    // �씠�뒋 踰덊샇瑜� ���옣�븳 �썑 �씠�뒋 紐⑸줉�쑝濡� �씠�룞�븳�떎.
-                    // $rootScope.$broadcast("makeIssueSearch", {id :$rootScope.currentDetailIssueId});
-                    //$rootScope.$broadcast("makeIssueSearch", {id :$rootScope.issueTypeMenu.id});
-                    $rootScope.$broadcast("makeIssueSearch",projectId);
-                }
-
-                function changeDetailView() {
-                    // $rootScope.$broadcast("getIssueDetail", {id: $rootScope.currentDetailIssueId});
-                    //$scope.$broadcast("getIssueDetail", {id: $rootScope.currentDetailIssueId});
-                    // $rootScope.$broadcast("getIssueDetail", {id :$rootScope.currentDetailIssueId});
-                    //$rootScope.$broadcast("getIssueList", {id :$rootScope.issueTypeMenu.id});
+                    //$rootScope.changeLastProject(projectId);
+                    $state.go("issues.list")
                 }
 
                 $scope.fn.makeTableConfigs();
diff --git a/src/main/webapp/scripts/components/issue/issue.service.js b/src/main/webapp/scripts/components/issue/issue.service.js
index d606b2b..e4c3f90 100644
--- a/src/main/webapp/scripts/components/issue/issue.service.js
+++ b/src/main/webapp/scripts/components/issue/issue.service.js
@@ -92,6 +92,18 @@
                     return response;
                 });
             },
+            removeAllIssues : function (conditions) {
+                return $http.post("issue/removeAll", conditions).then(function (response) {
+                    $log.debug("�븯�쐞�씠�뒋 �궘�젣 寃곌낵 : ", response);
+                    return response;
+                });
+            },
+            /*removeDownIssues : function (conditions) {
+                return $http.post("issue/removeDown", conditions).then(function (response) {
+                    $log.debug("�븯�쐞�씠�뒋 �궘�젣 寃곌낵 : ", response);
+                    return response;
+                });
+            },*/
             importExcel : function (conditions) {
                 conditions.url = "issue/importExcel";
                 return $upload.upload(conditions).then(function (response) {
diff --git a/src/main/webapp/scripts/components/utils/dateRangePicker.directive.js b/src/main/webapp/scripts/components/utils/dateRangePicker.directive.js
index 7be0571..d6ea913 100644
--- a/src/main/webapp/scripts/components/utils/dateRangePicker.directive.js
+++ b/src/main/webapp/scripts/components/utils/dateRangePicker.directive.js
@@ -77,7 +77,8 @@
                                     });
                                 } else if ($attrs["rangeType"] === "singleDate") {
                                     $($element).daterangepicker({
-                                        timePicker: false,
+                                        timePicker: true,
+                                        timePickerSeconds : true,
                                         autoUpdateInput: true,
                                         autoApply : true,
                                         singleDatePicker : true,
@@ -85,7 +86,7 @@
 
                                         //parentEl : $scope.parentEl !== undefined ? $scope.parentEl : "",
                                         locale: {
-                                            format: 'YYYY-MM-DD',
+                                            format: 'YYYY-MM-DD/hh-mm-ss A',
                                             applyLabel: options.applyLabel,
                                             cancelLabel: options.cancelLabel,
                                             daysOfWeek: options.daysOfWeek,
diff --git a/src/main/webapp/views/issue/issueDetail.html b/src/main/webapp/views/issue/issueDetail.html
index 538bf7a..27e2501 100644
--- a/src/main/webapp/views/issue/issueDetail.html
+++ b/src/main/webapp/views/issue/issueDetail.html
@@ -87,7 +87,7 @@
 <div class="support-ticket-content-w" ng-controller="issueDetailController">
     <div class="support-ticket-content">
         <span ng-if="vm.viewer.parentIssueVo != null" class="badge" ng-style="{'background-color' : '#353535', 'border-color' : vm.viewer.issueStatusVo.color, 'color' : '#FFFFFF' }">
-            <span>�긽�쐞 �씠�뒋:{{vm.viewer.parentIssueVo.title}}</span>
+            <span class="cursor" ng-click="fn.issueBack()">�긽�쐞 �씠�뒋:{{vm.viewer.parentIssueVo.title}}</span>
         </span>
 
         <div class="">
@@ -97,7 +97,7 @@
             <span class="ticket-header">
                 <div class="tasks-header-w">
                     <span class="tags">
-                        <span class="tag">{{vm.viewer.projectVo.projectKey}}-{{vm.viewer.issueNumber}} &nbsp; / &nbsp; {{vm.viewer.projectVo.name}}</span>
+                        <span class="tag">{{vm.viewer.projectVo.projectKey}}-{{vm.viewer.issueNumber}} &nbsp; / &nbsp; {{vm.viewer.projectVo.name}} &nbsp; / &nbsp; <span>API :&nbsp;{{vm.viewer.isApi}}</span></span>
                     </span>
                 </div>
             </span>
diff --git a/src/main/webapp/views/login/login.html b/src/main/webapp/views/login/login.html
index 14b673e..aadedea 100644
--- a/src/main/webapp/views/login/login.html
+++ b/src/main/webapp/views/login/login.html
@@ -1,23 +1,24 @@
 <div class="content-i">
     <div class="content-box">
-        <div class="row mt-30">
+        <div class="row mt-30" style="margin-right: 32rem">
             <div class="m-0">
                 <div class="flex">
                     <div class="loginbackdiv">
-                        <div class="loginback">
-                            <img src="/assets/images/logo-kisa-vertical.png"/>
-                            <div class="stardiv">
-                            <!--    <div class="stars"></div>
-                                <div class="twinkling"></div>
-                            </div>
-                            <div class="bgdiv">
-                            </div>
-                            <div class="login-circle">
-                                <div class="circle1"></div>
-                                <div class="circle2"></div>
-                                <div class="circle3"></div>-->
-                            </div>
-                        </div>
+<!--                        <div class="loginback">-->
+<!--                            <img src="/assets/images/logo-kisa-vertical.png"/>-->
+<!--                            <div class="stardiv">-->
+<!--                                <div class="stars"></div>-->
+<!--                                <div class="twinkling"></div>-->
+<!--                            </div>-->
+<!--                            <div class="bgdiv">-->
+<!--                            </div>-->
+<!--                            <div class="login-circle">-->
+<!--                                <div class="circle1"></div>-->
+<!--                                <div class="circle2"></div>-->
+<!--                                <div class="circle3"></div>-->
+<!--                            </div>-->
+<!--                        </div>-->
+<!--                    </div>-->
                     </div>
                     <div class="logincont">
                         <div class="auth-box-w">
@@ -131,7 +132,7 @@
                 </div>
                 -->
                 <div class="footer-s" >
-                    <small>CopyRight WISESTONE All rights reserved.</small>
+                    <small style="margin-left: 8.8rem">CopyRight WISESTONE All rights reserved.</small>
                 </div>
             </div>
         </div>

--
Gitblit v1.8.0