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"> <!– �봽濡쒖젥�듃�뿉 �뿰寃곕맂 �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂� �궘�젣 –> 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