- 업체메일 발송 시 파트너의 메일주소가 없을 경우 필터링 해주기
- 전체 프로젝트로 선택 되어있는 경우에도 이슈 만들때 이슈타입과 프로젝트가 선택되도록 수정
| | |
| | | List<Map<String, Object>> checkIncludeProject(ProjectCondition projectCondition); |
| | | |
| | | List<Map<String, Object>> findChildrenProject(Long parentProjectId); |
| | | |
| | | Map<String, Object> findByIssueType(ProjectCondition projectCondition); |
| | | } |
| | |
| | | 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); |
| | |
| | | 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++) { |
| | |
| | | private List<Long> userIds = Lists.newArrayList(); |
| | | private List<Long> departmentIds = Lists.newArrayList(); |
| | | private List<Long> myDepartmentIds; // 내가 속해있는 부서 ID |
| | | private Long issueTypeId; |
| | | |
| | | public ProjectCondition(){} |
| | | |
| | |
| | | |
| | | 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; |
| | |
| | | public void setMyDepartmentIds(List<Long> myDepartmentIds) { |
| | | this.myDepartmentIds = myDepartmentIds; |
| | | } |
| | | |
| | | public Long getIssueTypeId() { |
| | | return issueTypeId; |
| | | } |
| | | |
| | | public void setIssueTypeId(Long issueTypeId) { |
| | | this.issueTypeId = issueTypeId; |
| | | } |
| | | } |
| | |
| | | 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 |
| | |
| | | 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"> |
| | | <!– 프로젝트에 연결된 사용자 정의 필드 정보 삭제 –> |
| | |
| | | "CommonSendIssueMail": "일반 메일 발송", |
| | | "SendIssueMail": "메일 발송 입력", |
| | | "sendIssueSelectedUsers": "프로젝트에 참여하고 있는 다른 사용자에게 이슈 정보를 보냅니다.", |
| | | "sendIssueSelectedPartners": "해당 이슈의 속해 있는 파트너 담당자에게 이슈 정보를 보냅니다.", |
| | | "sendIssueSelectedPartners": "해당 이슈에 속해 있는 파트너 담당자에게 이슈 정보를 보냅니다.", |
| | | "sendIssueSelectedNotPartners": "해당 이슈에 속해 있는 파트너 담당자가 없습니다.", |
| | | "sendMail": "이메일 발송", |
| | | "changedHistory": "이슈 변경 이력 상세정보", |
| | | "noChangeHistory": "이슈 변경 정보가 없습니다.", |
| | |
| | | ], |
| | | 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, // 팝업 창 닫기 |
| | |
| | | onFileSelect : onFileSelect, // 파일 첨부 |
| | | infiniteAddForm : infiniteAddForm, // 계속 생성 |
| | | imageUpload : imageUpload, // 섬머노트 이미지 업로드 |
| | | getProject : getProject, //프로젝트 가져오기(전체 프로젝트 일 경우 사용) |
| | | getIssueTypes : getIssueTypes, // 이슈 타입 목록 가져오기 |
| | | getPriorities : getPriorities, // 우선순위 목록 가져오기 |
| | | getSeverities : getSeverities, // 중요도 목록 가져오기 |
| | |
| | | $(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) { |
| | |
| | | function startExecute() { |
| | | |
| | | var promises = { |
| | | getProject : $scope.fn.getProject(), |
| | | getIssueTypes : $scope.fn.getIssueTypes(), |
| | | getPriorities : $scope.fn.getPriorities(), |
| | | getSeverities : $scope.fn.getSeverities(), |
| | |
| | | nameArr.push(name); |
| | | idArr.push(id); |
| | | } |
| | | } else { |
| | | } else if(account != null) { |
| | | accountArr.push(account); |
| | | nameArr.push(name); |
| | | idArr.push(id); |
| | |
| | | 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); |
| | |
| | | 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> |
| | |
| | | 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> |
| | |
| | | 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> |
| | |
| | | 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> |
| | |
| | | <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> |