From d888528b8472fc67f966b48359879dcd6bcd01ff Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 목, 20 1월 2022 17:48:30 +0900
Subject: [PATCH] - 업체메일 발송 시 파트너의 메일주소가 없을 경우 필터링 해주기 - 전체 프로젝트로 선택 되어있는 경우에도 이슈 만들때 이슈타입과 프로젝트가 선택되도록 수정

---
 src/main/java/kr/wisestone/owl/mapper/ProjectMapper.java              |    2 +
 src/main/java/kr/wisestone/owl/service/ProjectService.java            |    2 +
 src/main/webapp/views/issue/issueAdd.html                             |    2 -
 src/main/java/kr/wisestone/owl/web/controller/ProjectController.java  |   12 ++++++
 src/main/webapp/scripts/components/project/project.service.js         |    6 +++
 src/main/webapp/scripts/app/issue/issueAdd.controller.js              |   32 ++++++++++++++--
 src/main/resources/mybatis/query-template/project-template.xml        |   15 +++++++
 src/main/webapp/views/issue/issueAddDown.html                         |    1 
 src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java   |    7 +++
 src/main/java/kr/wisestone/owl/web/condition/ProjectCondition.java    |   13 ++++++
 src/main/webapp/i18n/ko/global.json                                   |    3 +
 src/main/webapp/views/issue/issueModify.html                          |    1 
 src/main/webapp/views/issue/issueSendMailPartners.html                |    4 +
 src/main/webapp/scripts/app/issue/issueSendMailPartners.controller.js |    2 
 14 files changed, 91 insertions(+), 11 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/mapper/ProjectMapper.java b/src/main/java/kr/wisestone/owl/mapper/ProjectMapper.java
index 5ef5ae6..2c32ebb 100644
--- a/src/main/java/kr/wisestone/owl/mapper/ProjectMapper.java
+++ b/src/main/java/kr/wisestone/owl/mapper/ProjectMapper.java
@@ -33,4 +33,6 @@
     List<Map<String, Object>> checkIncludeProject(ProjectCondition projectCondition);
 
     List<Map<String, Object>> findChildrenProject(Long parentProjectId);
+
+    Map<String, Object> findByIssueType(ProjectCondition projectCondition);
 }
diff --git a/src/main/java/kr/wisestone/owl/service/ProjectService.java b/src/main/java/kr/wisestone/owl/service/ProjectService.java
index 1dec201..0fbda20 100644
--- a/src/main/java/kr/wisestone/owl/service/ProjectService.java
+++ b/src/main/java/kr/wisestone/owl/service/ProjectService.java
@@ -24,6 +24,8 @@
     List<ProjectVo> findProject(Map<String, Object> resJsonData,
                                 ProjectCondition condition, Pageable pageable);
 
+    void findIssueType(Map<String, Object> resJsonData, ProjectCondition condition);
+
     void detailProject(Map<String, Object> resJsonData, ProjectCondition projectCondition);
 
     Project findByProjectKey(String projectKey);
diff --git a/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
index d628a37..ef07f67 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
@@ -401,6 +401,13 @@
         return projectVos;
     }
 
+    //  �씠�뒋�쑀�삎�뿉 �냽�븳 �봽濡쒖젥�듃 紐⑸줉�쓣 議고쉶�븳�떎.
+    @Override
+    @Transactional(readOnly = true)
+    public void findIssueType(Map<String, Object> resJsonData, ProjectCondition condition) {
+        resJsonData.put(Constants.RES_KEY_CONTENTS, this.projectMapper.findByIssueType(condition));
+    }
+
     void setChildrenProject(List<ProjectVo> projectVos, User user) {
         int projectCount = projectVos.size();
         for (int i=0; i< projectCount; i++) {
diff --git a/src/main/java/kr/wisestone/owl/web/condition/ProjectCondition.java b/src/main/java/kr/wisestone/owl/web/condition/ProjectCondition.java
index c59b8b4..97dcb79 100644
--- a/src/main/java/kr/wisestone/owl/web/condition/ProjectCondition.java
+++ b/src/main/java/kr/wisestone/owl/web/condition/ProjectCondition.java
@@ -27,6 +27,7 @@
     private List<Long> userIds = Lists.newArrayList();
     private List<Long> departmentIds = Lists.newArrayList();
     private List<Long> myDepartmentIds; // �궡媛� �냽�빐�엳�뒗 遺��꽌 ID
+    private Long issueTypeId;
 
     public ProjectCondition(){}
 
@@ -55,6 +56,10 @@
 
         if (MapUtil.getLongs(conditions, "departmentIds") != null) {
             condition.setDepartmentIds(MapUtil.getLongs(conditions, "departmentIds"));
+        }
+
+        if (MapUtil.getLong(conditions, "issueTypeId") != null) {
+            condition.setIssueTypeId(MapUtil.getLong(conditions, "issueTypeId"));
         }
 
         return condition;
@@ -187,4 +192,12 @@
     public void setMyDepartmentIds(List<Long> myDepartmentIds) {
         this.myDepartmentIds = myDepartmentIds;
     }
+
+    public Long getIssueTypeId() {
+        return issueTypeId;
+    }
+
+    public void setIssueTypeId(Long issueTypeId) {
+        this.issueTypeId = issueTypeId;
+    }
 }
diff --git a/src/main/java/kr/wisestone/owl/web/controller/ProjectController.java b/src/main/java/kr/wisestone/owl/web/controller/ProjectController.java
index a3199cf..c5435af 100644
--- a/src/main/java/kr/wisestone/owl/web/controller/ProjectController.java
+++ b/src/main/java/kr/wisestone/owl/web/controller/ProjectController.java
@@ -107,6 +107,18 @@
         return this.setSuccessMessage(resJsonData);
     }
 
+    //  李몄뿬 �봽濡쒖젥�듃 議고쉶
+    @RequestMapping(value = "/project/findIssueType", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
+    public
+    @ResponseBody
+    Map<String, Object> findIssueType(@RequestBody Map<String, Map<String, Object>> params) {
+        Map<String, Object> resJsonData = new HashMap<>();
+
+        this.projectService.findIssueType(resJsonData, ProjectCondition.make(params.get(Constants.REQ_KEY_CONTENT)));
+
+        return this.setSuccessMessage(resJsonData);
+    }
+
     //  �봽濡쒖젥�듃 �긽�꽭 議고쉶
     @RequestMapping(value = "/project/detail", produces = MediaType.APPLICATION_JSON_VALUE)
     public
diff --git a/src/main/resources/mybatis/query-template/project-template.xml b/src/main/resources/mybatis/query-template/project-template.xml
index d3f596b..35136a4 100644
--- a/src/main/resources/mybatis/query-template/project-template.xml
+++ b/src/main/resources/mybatis/query-template/project-template.xml
@@ -639,6 +639,21 @@
         WHERE pc.parent_project_id = #{parent_project_id}
     </select>
 
+    <select id="findByIssueType" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
+        SELECT
+            p.id as id,
+            p.name as name,
+            p.description as description,
+            p.status as status,
+            p.start_date as startDate,
+            p.end_date as endDate,
+            p.project_key as projectKey
+        FROM
+            project p
+                INNER JOIN issue_type it ON it.project_id = p.id
+        WHERE it.id = #{issueTypeId}
+    </select>
+
     <!--    �봽濡쒖젥�듃 �궘�젣 -->
     <!--<delete id="deleteProject" parameterType="java.util.HashMap">
         &lt;!&ndash;    �봽濡쒖젥�듃�뿉 �뿰寃곕맂 �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂� �궘�젣   &ndash;&gt;
diff --git a/src/main/webapp/i18n/ko/global.json b/src/main/webapp/i18n/ko/global.json
index d1a7a66..15468f3 100644
--- a/src/main/webapp/i18n/ko/global.json
+++ b/src/main/webapp/i18n/ko/global.json
@@ -299,7 +299,8 @@
         "CommonSendIssueMail": "�씪諛� 硫붿씪 諛쒖넚",
         "SendIssueMail": "硫붿씪 諛쒖넚 �엯�젰",
         "sendIssueSelectedUsers": "�봽濡쒖젥�듃�뿉 李몄뿬�븯怨� �엳�뒗 �떎瑜� �궗�슜�옄�뿉寃� �씠�뒋 �젙蹂대�� 蹂대깄�땲�떎.",
-        "sendIssueSelectedPartners": "�빐�떦 �씠�뒋�쓽 �냽�빐 �엳�뒗 �뙆�듃�꼫 �떞�떦�옄�뿉寃� �씠�뒋 �젙蹂대�� 蹂대깄�땲�떎.",
+        "sendIssueSelectedPartners": "�빐�떦 �씠�뒋�뿉 �냽�빐 �엳�뒗 �뙆�듃�꼫 �떞�떦�옄�뿉寃� �씠�뒋 �젙蹂대�� 蹂대깄�땲�떎.",
+        "sendIssueSelectedNotPartners": "�빐�떦 �씠�뒋�뿉 �냽�빐 �엳�뒗 �뙆�듃�꼫 �떞�떦�옄媛� �뾾�뒿�땲�떎.",
         "sendMail": "�씠硫붿씪 諛쒖넚",
         "changedHistory": "�씠�뒋 蹂�寃� �씠�젰 �긽�꽭�젙蹂�",
         "noChangeHistory": "�씠�뒋 蹂�寃� �젙蹂닿� �뾾�뒿�땲�떎.",
diff --git a/src/main/webapp/scripts/app/issue/issueAdd.controller.js b/src/main/webapp/scripts/app/issue/issueAdd.controller.js
index c81b38c..b99941e 100644
--- a/src/main/webapp/scripts/app/issue/issueAdd.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueAdd.controller.js
@@ -9,9 +9,9 @@
     ],
     function (app, angular) {
         app.controller('issueAddController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$uibModalInstance', '$uibModal', '$injector',
-            '$controller', '$tableProvider', 'SweetAlert', '$timeout', '$stateParams', '$q', 'Issue', 'User', 'AttachedFile', 'IssueType', 'Priority', 'Severity', 'IssueTypeCustomField', '$filter', '$state',
+            '$controller', '$tableProvider', 'SweetAlert', '$timeout', '$stateParams', '$q', 'Issue', 'User', 'AttachedFile', 'Project', 'IssueType', 'Priority', 'Severity', 'IssueTypeCustomField', '$filter', '$state',
             function ($scope, $rootScope, $log, $resourceProvider, $uibModalInstance, $uibModal,  $injector, $controller, $tableProvider, SweetAlert, $timeout,
-                      $stateParams, $q, Issue, User, AttachedFile, IssueType, Priority, Severity, IssueTypeCustomField, $filter, $state) {
+                      $stateParams, $q, Issue, User, AttachedFile, Project, IssueType, Priority, Severity, IssueTypeCustomField, $filter, $state) {
 
                 $scope.fn = {
                     cancel : cancel,    //  �뙘�뾽 李� �떕湲�
@@ -27,6 +27,7 @@
                     onFileSelect : onFileSelect,    //  �뙆�씪 泥⑤�
                     infiniteAddForm : infiniteAddForm,  //  怨꾩냽 �깮�꽦
                     imageUpload : imageUpload,  //  �꽟癒몃끂�듃 �씠誘몄� �뾽濡쒕뱶
+                    getProject : getProject,    //�봽濡쒖젥�듃 媛��졇�삤湲�(�쟾泥� �봽濡쒖젥�듃 �씪 寃쎌슦 �궗�슜)
                     getIssueTypes : getIssueTypes,  //  �씠�뒋 ���엯 紐⑸줉 媛��졇�삤湲�
                     getPriorities : getPriorities,  //  �슦�꽑�닚�쐞 紐⑸줉 媛��졇�삤湲�
                     getSeverities : getSeverities,  //  以묒슂�룄 紐⑸줉 媛��졇�삤湲�
@@ -840,13 +841,35 @@
                     $(document).unbind("keydown");  //  �떒異뺥궎 �씠踰ㅽ듃 �젣嫄�
                 }
 
+                //  �봽濡쒖젥�듃 媛��졇�삤湲�(�쟾泥� �봽濡쒖젥�듃 �씪 寃쎌슦 �궗�슜)
+                function getProject() {
+                    var deferred = $q.defer();
+
+                    Project.findIssueType($resourceProvider.getContent({issueTypeId : $rootScope.getCurrentIssueTypeId()},
+                        $resourceProvider.getPageContent(0, 1000))).then(function (result) {
+
+                        if (result.data.message.status === "success") {
+                            $scope.vm.form.projects.push(result.data.data);
+                            $scope.vm.projectName = result.data.data.name;
+                            $scope.fn.getIssueTypeOfProject();
+                        }
+                        else {
+                            SweetAlert.swal($filter("translate")("issue.failedToIssueTypeListLookup"), result.data.message.message, "error"); // �씠�뒋 ���엯 紐⑸줉 議고쉶 �떎�뙣
+                        }
+
+                        deferred.resolve(result.data.data);
+                    });
+
+                    return deferred.promise;
+                }
+
                 //  �씠�뒋 �쑀�삎 紐⑸줉
                 function getIssueTypes() {
                     var deferred = $q.defer();
 
-                    if (!$rootScope.isDefined($scope.vm.form.projects[0])) {
+                    /*if (!$rootScope.isDefined($scope.vm.form.projects[0])) {
                         return;
-                    }
+                    }*/
 
                     IssueType.find($resourceProvider.getContent({},
                         $resourceProvider.getPageContent(0, 1000))).then(function (result) {
@@ -1062,6 +1085,7 @@
                 function startExecute() {
 
                     var promises = {
+                        getProject : $scope.fn.getProject(),
                         getIssueTypes : $scope.fn.getIssueTypes(),
                         getPriorities : $scope.fn.getPriorities(),
                         getSeverities : $scope.fn.getSeverities(),
diff --git a/src/main/webapp/scripts/app/issue/issueSendMailPartners.controller.js b/src/main/webapp/scripts/app/issue/issueSendMailPartners.controller.js
index b8a9902..ef088f1 100644
--- a/src/main/webapp/scripts/app/issue/issueSendMailPartners.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueSendMailPartners.controller.js
@@ -225,7 +225,7 @@
                                         nameArr.push(name);
                                         idArr.push(id);
                                     }
-                                } else {
+                                } else if(account != null) {
                                     accountArr.push(account);
                                     nameArr.push(name);
                                     idArr.push(id);
diff --git a/src/main/webapp/scripts/components/project/project.service.js b/src/main/webapp/scripts/components/project/project.service.js
index 3629164..c168052 100644
--- a/src/main/webapp/scripts/components/project/project.service.js
+++ b/src/main/webapp/scripts/components/project/project.service.js
@@ -26,6 +26,12 @@
                     return response;
                 });
             },
+            findIssueType : function (conditions) {
+                return $http.post("project/findIssueType", conditions).then(function (response) {
+                    $log.debug("�씠�뒋�쑀�삎�뿉 �냽�빐�엳�뒗 �봽濡쒖젥�듃 : ", response);
+                    return response;
+                });
+            },
             add : function (conditions) {
                 return $http.post("project/add", conditions).then(function (response) {
                     $log.debug("�봽濡쒖젥�듃 �깮�꽦 寃곌낵 : ", response);
diff --git a/src/main/webapp/views/issue/issueAdd.html b/src/main/webapp/views/issue/issueAdd.html
index 4b5fb35..fb8fe29 100644
--- a/src/main/webapp/views/issue/issueAdd.html
+++ b/src/main/webapp/views/issue/issueAdd.html
@@ -41,7 +41,6 @@
                                                 source="fn.getProjectList(vm.projectName, vm.form.projects, vm.autoCompletePage.project.page, fn.getProjectListCallBack)"
                                                 page="vm.autoCompletePage.project.page"
                                                 total-page="vm.autoCompletePage.project.totalPage"
-                                                input-disabled="$root.workProject.id !== -1 && vm.form.projects != null ? vm.form.projects.length > 0 : false"
                                                 translation-texts="{ empty : 'common.emptyProject' }"
                                                 extra-settings="{ displayProp : 'name' , idProp : 'id', imageable : false, imagePathProp : '',
                                                 type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single>
@@ -62,7 +61,6 @@
                                         ng-change="fn.getIssueTypeCustomFields()"
                                         ng-style="{ 'color' : fn.getOptionColor(vm.issueTypes, vm.form.issueTypeId) }"
                                         required
-                                        ng-disabled="$root.workProject.id !== -1"
                                         >
                                     <option value="" translate="common.selectTarget" ng-style="{ 'color' : '#353535' }"><span
                                             translate="common.selectTarget">���긽 �꽑�깮</span>
diff --git a/src/main/webapp/views/issue/issueAddDown.html b/src/main/webapp/views/issue/issueAddDown.html
index c63e0d2..3df5230 100644
--- a/src/main/webapp/views/issue/issueAddDown.html
+++ b/src/main/webapp/views/issue/issueAddDown.html
@@ -40,7 +40,6 @@
                                                 source="fn.getProjectList(vm.projectName, vm.form.projects, vm.autoCompletePage.project.page, fn.getProjectListCallBack)"
                                                 page="vm.autoCompletePage.project.page"
                                                 total-page="vm.autoCompletePage.project.totalPage"
-                                                input-disabled="vm.form.projects != null ? vm.form.projects.length > 0 : false"
                                                 translation-texts="{ empty : 'common.emptyProject' }"
                                                 extra-settings="{ displayProp : 'name' , idProp : 'id', imageable : false, imagePathProp : '',
                                                 type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single>
diff --git a/src/main/webapp/views/issue/issueModify.html b/src/main/webapp/views/issue/issueModify.html
index a300aa9..f16e46a 100644
--- a/src/main/webapp/views/issue/issueModify.html
+++ b/src/main/webapp/views/issue/issueModify.html
@@ -39,7 +39,6 @@
                                                 source="fn.getProjectList(vm.projectName, vm.form.projects, vm.autoCompletePage.project.page, fn.getProjectListCallBack)"
                                                 page="vm.autoCompletePage.project.page"
                                                 total-page="vm.autoCompletePage.project.totalPage"
-                                                input-disabled="vm.form.projects != null ? vm.form.projects.length > 0 : false"
                                                 translation-texts="{ empty : 'common.emptyProject' }"
                                                 extra-settings="{ displayProp : 'name' , idProp : 'id', imageable : false, imagePathProp : '',
                                                 type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single>
diff --git a/src/main/webapp/views/issue/issueSendMailPartners.html b/src/main/webapp/views/issue/issueSendMailPartners.html
index a4826c4..3bd9bc3 100644
--- a/src/main/webapp/views/issue/issueSendMailPartners.html
+++ b/src/main/webapp/views/issue/issueSendMailPartners.html
@@ -11,7 +11,9 @@
     <div class="modal-body">
         <form role="form" name="issueSendForm">
             <div class="form-group">
-                <small translate="issue.sendIssueSelectedPartners">�봽濡쒖젥�듃�뿉 李몄뿬�븯怨� �엳�뒗 �떎瑜� �궗�슜�옄�뿉寃� �씠�뒋 �젙蹂대�� 蹂대깄�땲�떎.</small>
+                <div ng-if="vm.form.account[0].account.length < 1" class="help-block form-text text-danger"
+                     translate="issue.sendIssueSelectedNotPartners">�빐�떦 �씠�뒋�뿉 �냽�빐 �엳�뒗 �뙆�듃�꼫 �떞�떦�옄媛� �뾾�뒿�땲�떎.</div>
+                <small ng-if="vm.form.account[0].account.length > 0" translate="issue.sendIssueSelectedPartners">�빐�떦 �씠�뒋�뿉 �냽�빐 �엳�뒗 �뙆�듃�꼫 �떞�떦�옄�뿉寃� �씠�뒋 �젙蹂대�� 蹂대깄�땲�떎.</small>
                 <div class="select3-selection__choicediv">
                     <span class="select3-selection__choice" ng-repeat="user in vm.form.account[0].account track by $index">
                         <span>{{vm.form.account[0].name[$index]}}({{user}})</span>

--
Gitblit v1.8.0