From 577502fbd1ec01a3023ca0eb515ab6ec52d67a5e Mon Sep 17 00:00:00 2001 From: jhjang <jhjang@maprex.co.kr> Date: 금, 26 11월 2021 17:21:29 +0900 Subject: [PATCH] - api 기본값 설정 기능 추가 --- src/main/webapp/scripts/components/issueType/issueType.service.js | 3 src/main/java/kr/wisestone/owl/web/controller/ApiController.java | 4 src/main/webapp/scripts/components/api/api.service.js | 14 src/main/java/kr/wisestone/owl/web/form/IssueApiDefaultForm.java | 87 ++++++ src/main/java/kr/wisestone/owl/repository/IssueApiDefaultRepository.java | 15 + src/main/java/kr/wisestone/owl/service/impl/IssueApiDefaultServiceImpl.java | 100 +++++++ src/main/java/kr/wisestone/owl/web/controller/IssueApiDefaultController.java | 46 +++ src/main/java/kr/wisestone/owl/vo/IssueApiDefaultVo.java | 136 +++++++++ src/main/webapp/scripts/components/utils/autoComplete.controller.js | 36 ++ src/main/webapp/scripts/app/api/apiSetting.controller.js | 158 ++++++++++ src/main/java/kr/wisestone/owl/web/controller/IssueTypeController.java | 3 src/main/webapp/i18n/ko/global.json | 7 src/main/java/kr/wisestone/owl/service/IssueApiDefaultService.java | 13 src/main/webapp/views/api/apiSettingColumn.html | 202 ++----------- 14 files changed, 639 insertions(+), 185 deletions(-) diff --git a/src/main/java/kr/wisestone/owl/repository/IssueApiDefaultRepository.java b/src/main/java/kr/wisestone/owl/repository/IssueApiDefaultRepository.java new file mode 100644 index 0000000..efad549 --- /dev/null +++ b/src/main/java/kr/wisestone/owl/repository/IssueApiDefaultRepository.java @@ -0,0 +1,15 @@ +package kr.wisestone.owl.repository; + +import kr.wisestone.owl.domain.IssueApiDefault; +import kr.wisestone.owl.domain.IssueComment; +import kr.wisestone.owl.vo.IssueCommentVo; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.List; + +public interface IssueApiDefaultRepository extends JpaRepository<IssueApiDefault, Long> { + List<IssueApiDefault> findByUserIdAndIssueTypeId(@Param("UserId") Long userId, @Param("IssueTypeId") Long issueTypeId); + +} diff --git a/src/main/java/kr/wisestone/owl/service/IssueApiDefaultService.java b/src/main/java/kr/wisestone/owl/service/IssueApiDefaultService.java new file mode 100644 index 0000000..72fe5b7 --- /dev/null +++ b/src/main/java/kr/wisestone/owl/service/IssueApiDefaultService.java @@ -0,0 +1,13 @@ +package kr.wisestone.owl.service; + +import kr.wisestone.owl.domain.IssueApiDefault; +import kr.wisestone.owl.web.form.IssueApiDefaultForm; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Map; + +public interface IssueApiDefaultService extends AbstractService<IssueApiDefault, Long, JpaRepository<IssueApiDefault, Long>> { + IssueApiDefault find(Map<String, Object> resJsonData, IssueApiDefaultForm form); + boolean modify(Map<String, Object> resJsonData, IssueApiDefaultForm form); +} diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueApiDefaultServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueApiDefaultServiceImpl.java new file mode 100644 index 0000000..4fb83bc --- /dev/null +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueApiDefaultServiceImpl.java @@ -0,0 +1,100 @@ +package kr.wisestone.owl.service.impl; + +import kr.wisestone.owl.constant.Constants; +import kr.wisestone.owl.domain.*; +import kr.wisestone.owl.repository.IssueApiDefaultRepository; +import kr.wisestone.owl.service.*; +import kr.wisestone.owl.util.ConvertUtil; +import kr.wisestone.owl.vo.*; +import kr.wisestone.owl.web.form.IssueApiDefaultForm; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; + +@Service +public class IssueApiDefaultServiceImpl extends AbstractServiceImpl<IssueApiDefault, Long, JpaRepository<IssueApiDefault, Long>> + implements IssueApiDefaultService { + + static final Logger log = LoggerFactory.getLogger(IssueApiDefaultServiceImpl.class); + + @Autowired + private IssueApiDefaultRepository issueApiDefaultRepository; + + @Autowired + private IssueTypeService issueTypeService; + + @Autowired + private PriorityService priorityService; + + @Autowired + private SeverityService severityService; + + @Autowired + private ProjectService projectService; + + @Override + protected JpaRepository<IssueApiDefault, Long> getRepository() { + return this.issueApiDefaultRepository; + } + + @Override + @Transactional + public IssueApiDefault find(Map<String, Object> resJsonData, IssueApiDefaultForm form) { + UserVo userVo = this.webAppUtil.getLoginUser(); + List<IssueApiDefault> issueApiDefaults = this.issueApiDefaultRepository.findByUserIdAndIssueTypeId(userVo.getId(), form.getIssueTypeId()); + if (issueApiDefaults != null && issueApiDefaults.size() > 0) { + IssueApiDefault issueApiDefault = issueApiDefaults.get(0); + IssueApiDefaultVo issueApiDefaultVo = ConvertUtil.copyProperties(issueApiDefault, IssueApiDefaultVo.class); + Project project = issueApiDefault.getProject(); + if (project != null) { + issueApiDefaultVo.setProjectVo(ConvertUtil.copyProperties(project, ProjectVo.class)); + } + + Priority priority = issueApiDefault.getPriority(); + if (project != null) { + issueApiDefaultVo.setPriorityId(priority.getId()); + } + + Severity severity = issueApiDefault.getSeverity(); + if (severity != null) { + issueApiDefaultVo.setSeverityId(severity.getId()); + } + + resJsonData.put(Constants.RES_KEY_CONTENTS, issueApiDefaultVo); + return issueApiDefault; + } + return null; + } + + @Override + public boolean modify(Map<String, Object> resJsonData, IssueApiDefaultForm form) { + User user = this.webAppUtil.getLoginUserObject(); + List<IssueApiDefault> issueApiDefaults = this.issueApiDefaultRepository.findByUserIdAndIssueTypeId(user.getId(), form.getIssueTypeId()); + if (issueApiDefaults != null && issueApiDefaults.size() > 0) { + this.issueApiDefaultRepository.deleteAll(issueApiDefaults); + } + IssueApiDefault issueApiDefault = new IssueApiDefault(); + issueApiDefault = ConvertUtil.copyProperties(form, IssueApiDefault.class); + if (form.getPriorityId() != null) + issueApiDefault.setPriority(this.priorityService.getPriority(form.getPriorityId())); + + if (form.getSeverityId() != null) + issueApiDefault.setSeverity(this.severityService.getSeverity(form.getSeverityId())); + + if (form.getProjectId() != null) + issueApiDefault.setProject(this.projectService.getProject(form.getProjectId())); + + issueApiDefault.setUser(user); + issueApiDefault.setIssueType(this.issueTypeService.getIssueType(form.getIssueTypeId())); + + this.issueApiDefaultRepository.saveAndFlush(issueApiDefault); + + return true; + } +} diff --git a/src/main/java/kr/wisestone/owl/vo/IssueApiDefaultVo.java b/src/main/java/kr/wisestone/owl/vo/IssueApiDefaultVo.java new file mode 100644 index 0000000..67e07e1 --- /dev/null +++ b/src/main/java/kr/wisestone/owl/vo/IssueApiDefaultVo.java @@ -0,0 +1,136 @@ +package kr.wisestone.owl.vo; + +import java.util.Date; + +public class IssueApiDefaultVo extends BaseVo { + + private Long id; + private Long userId; + private Long issueTypeId; + private Long issueStatusId; + private Long projectId; + private Long priorityId; + private Long severityId; + private String title; + private String description; + private Long reverseIndex; + private Long issue_number; + private Date start_date; + private Date complete_date; + private ProjectVo projectVo; + + public IssueApiDefaultVo() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Long getIssueTypeId() { + return issueTypeId; + } + + public void setIssueTypeId(Long issueTypeId) { + this.issueTypeId = issueTypeId; + } + + public Long getIssueStatusId() { + return issueStatusId; + } + + public void setIssueStatusId(Long issueStatusId) { + this.issueStatusId = issueStatusId; + } + + public Long getProjectId() { + return projectId; + } + + public void setProjectId(Long projectId) { + this.projectId = projectId; + } + + public Long getPriorityId() { + return priorityId; + } + + public void setPriorityId(Long priorityId) { + this.priorityId = priorityId; + } + + public Long getSeverityId() { + return severityId; + } + + public void setSeverityId(Long severityId) { + this.severityId = severityId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Long getReverseIndex() { + return reverseIndex; + } + + public void setReverseIndex(Long reverseIndex) { + this.reverseIndex = reverseIndex; + } + + public Long getIssue_number() { + return issue_number; + } + + public void setIssue_number(Long issue_number) { + this.issue_number = issue_number; + } + + public Date getStart_date() { + return start_date; + } + + public void setStart_date(Date start_date) { + this.start_date = start_date; + } + + public Date getComplete_date() { + return complete_date; + } + + public void setComplete_date(Date complete_date) { + this.complete_date = complete_date; + } + + public ProjectVo getProjectVo() { + return projectVo; + } + + public void setProjectVo(ProjectVo projectVo) { + this.projectVo = projectVo; + } +} diff --git a/src/main/java/kr/wisestone/owl/web/controller/ApiController.java b/src/main/java/kr/wisestone/owl/web/controller/ApiController.java index ed640c5..80ee790 100644 --- a/src/main/java/kr/wisestone/owl/web/controller/ApiController.java +++ b/src/main/java/kr/wisestone/owl/web/controller/ApiController.java @@ -23,7 +23,7 @@ private GuideService guideService; // �씠�뒋 異붽� - @RequestMapping(value = "/api/add", produces = MediaType.APPLICATION_JSON_VALUE) + @RequestMapping(value = "api/issue", produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody Map<String, Object> add(@RequestBody Map<String, Map<String, Object>> params) { @@ -35,7 +35,7 @@ } // �씠�뒋 議고쉶 - @RequestMapping(value = "/api/find", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) + @RequestMapping(value = "/api/issuelist", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody Map<String, Object> find(@RequestBody Map<String, Map<String, Object>> params) { diff --git a/src/main/java/kr/wisestone/owl/web/controller/IssueApiDefaultController.java b/src/main/java/kr/wisestone/owl/web/controller/IssueApiDefaultController.java new file mode 100644 index 0000000..5bb6172 --- /dev/null +++ b/src/main/java/kr/wisestone/owl/web/controller/IssueApiDefaultController.java @@ -0,0 +1,46 @@ +package kr.wisestone.owl.web.controller; + +import kr.wisestone.owl.constant.Constants; +import kr.wisestone.owl.service.IssueApiDefaultService; +import kr.wisestone.owl.util.ConvertUtil; +import kr.wisestone.owl.web.form.IssueApiDefaultForm; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.HashMap; +import java.util.Map; + +@Controller +public class IssueApiDefaultController extends BaseController { + + @Autowired + private IssueApiDefaultService issueApiDefaultService; + + // �씠�뒋 ���엯蹂� 湲곕낯媛� 媛��졇�삤湲� + @RequestMapping(value = "issueApiDefault/find", produces = MediaType.APPLICATION_JSON_VALUE) + public + @ResponseBody + Map<String, Object> find(@RequestBody Map<String, Map<String, Object>> params) { + Map<String, Object> resJsonData = new HashMap<>(); + + this.issueApiDefaultService.find(resJsonData, ConvertUtil.convertMapToClass(params.get(Constants.REQ_KEY_CONTENT), IssueApiDefaultForm.class)); + + return this.setSuccessMessage(resJsonData); + } + + // �씠�뒋 ���엯蹂� 湲곕낯媛� 媛��졇�삤湲� + @RequestMapping(value = "issueApiDefault/modify", produces = MediaType.APPLICATION_JSON_VALUE) + public + @ResponseBody + Map<String, Object> modify(@RequestBody Map<String, Map<String, Object>> params) { + Map<String, Object> resJsonData = new HashMap<>(); + + this.issueApiDefaultService.modify(resJsonData, ConvertUtil.convertMapToClass(params.get(Constants.REQ_KEY_CONTENT), IssueApiDefaultForm.class)); + + return this.setSuccessMessage(resJsonData); + } +} diff --git a/src/main/java/kr/wisestone/owl/web/controller/IssueTypeController.java b/src/main/java/kr/wisestone/owl/web/controller/IssueTypeController.java index 3dafadf..a58371e 100644 --- a/src/main/java/kr/wisestone/owl/web/controller/IssueTypeController.java +++ b/src/main/java/kr/wisestone/owl/web/controller/IssueTypeController.java @@ -77,7 +77,6 @@ } // �씠�뒋 ���엯 �궘�젣 - @SuppressWarnings("unchecked") @RequestMapping(value = "/issueType/remove", produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody @@ -94,4 +93,4 @@ public ModelAndView downloadExcel(HttpServletRequest request, Model model) { return this.issueTypeService.downloadExcel(request, model); } -} + } diff --git a/src/main/java/kr/wisestone/owl/web/form/IssueApiDefaultForm.java b/src/main/java/kr/wisestone/owl/web/form/IssueApiDefaultForm.java new file mode 100644 index 0000000..5674877 --- /dev/null +++ b/src/main/java/kr/wisestone/owl/web/form/IssueApiDefaultForm.java @@ -0,0 +1,87 @@ +package kr.wisestone.owl.web.form; + +import com.google.common.collect.Lists; +import kr.wisestone.owl.util.ConvertUtil; +import kr.wisestone.owl.util.MapUtil; +import org.hibernate.annotations.DynamicInsert; + +import java.util.List; +import java.util.Map; + +@DynamicInsert +public class IssueApiDefaultForm { + private Long id; + private Long userId; + private Long issueTypeId; + private Long projectId; + private Long priorityId; + private Long severityId; + private String title; + private String description; + + public IssueApiDefaultForm(){} + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getIssueTypeId() { + return issueTypeId; + } + + public void setIssueTypeId(Long issueTypeId) { + this.issueTypeId = issueTypeId; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Long getProjectId() { + return projectId; + } + + public void setProjectId(Long projectId) { + this.projectId = projectId; + } + + public Long getPriorityId() { + return priorityId; + } + + public void setPriorityId(Long priorityId) { + this.priorityId = priorityId; + } + + public Long getSeverityId() { + return severityId; + } + + public void setSeverityId(Long severityId) { + this.severityId = severityId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } +} diff --git a/src/main/webapp/i18n/ko/global.json b/src/main/webapp/i18n/ko/global.json index b546364..6501a46 100644 --- a/src/main/webapp/i18n/ko/global.json +++ b/src/main/webapp/i18n/ko/global.json @@ -334,7 +334,8 @@ "downIssueRemove" : "�븯�쐞 �씠�뒋 �궘�젣", "failedToIssueAddIssueDown": "�븯�쐞 �씠�뒋 異붽� �떎�뙣", "failedToIssueDeleteIssueDown": "�븯�쐞 �씠�뒋 �궘�젣 �떎�뙣", - "errorSelectDownIssue" : "�븯�쐞 �씠�뒋媛� �꽑�깮�릺吏� �븡�븯�뒿�땲�떎." + "errorSelectDownIssue" : "�븯�쐞 �씠�뒋媛� �꽑�깮�릺吏� �븡�븯�뒿�땲�떎.", + "failedToIssueTypeDefault": "�씠�뒋 �쑀�삎 湲곕낯媛� 議고쉶 �떎�뙣" }, "project": { "createProject": "�봽濡쒖젥�듃 留뚮뱾湲�", @@ -858,7 +859,9 @@ "failedToApiTokenRemove" : "API �넗�겙 �궘�젣 �떎�뙣", "failedToApiTokenAdd" : "API �넗�겙 �깮�꽦 �떎�뙣", "successToApiTokenRemove" : "API �넗�겙 �궘�젣 �꽦怨�", - "successToApiTokenAdd" : "API �넗�겙 �깮�꽦 �꽦怨�" + "successToApiTokenAdd" : "API �넗�겙 �깮�꽦 �꽦怨�", + "successToApiIssueDefault" : "湲곕낯媛� �꽕�젙 �셿猷�." + "failedToApiIssueDefault" : "湲곕낯媛� �꽕�젙 �떎�뙣" }, "companyField" : { "info": "�뾽泥댁젙蹂�", diff --git a/src/main/webapp/scripts/app/api/apiSetting.controller.js b/src/main/webapp/scripts/app/api/apiSetting.controller.js index db6427d..a96bc8c 100644 --- a/src/main/webapp/scripts/app/api/apiSetting.controller.js +++ b/src/main/webapp/scripts/app/api/apiSetting.controller.js @@ -7,30 +7,159 @@ 'app', 'angular' ], function (app, angular) { - app.controller('apiSettingController', ['$scope', '$rootScope', '$log', '$resourceProvider','$uibModal', 'SweetAlert', '$timeout', '$filter', - function ($scope, $rootScope, $log, $resourceProvider, $uibModal, SweetAlert, $timeout, $filter) { + app.controller('apiSettingController', ['$scope', '$rootScope', '$log', '$resourceProvider','$uibModal', 'SweetAlert', '$timeout', '$filter', '$injector', '$controller', 'Api', 'Priority', 'Severity', + function ($scope, $rootScope, $log, $resourceProvider, $uibModal, SweetAlert, $timeout, $filter, $injector, $controller, Api, Priority, Severity) { $scope.fn = { changeTab : changeTab, - add : add, + getIssueTypeCallback : getIssueTypeCallback, + getProjectListCallback : getProjectListCallback, + formSubmit : formSubmit, + formCheck : formCheck, + initForm : initForm, + getPriorities : getPriorities, + getSeverities : getSeverities, + start : start }; $scope.vm = { tab : "API_COL_SETTING", + issueTypes : [], + severities : [], + priorities : [], + // projects : [], form : { + issueApiDefault : { + title : "", + description : "", + priorityId : "", + severityId : "", + // projectName : "", + } + }, - } + autoCompletePage : { + issueType : { + page : 0, + totalPage : 0 + }, + // project : { + // page : 0, + // totalPage : 0 + // } + }, + issueTypeName : "", + issueTypeData : null // �씠�뒋 �쑀�삎 媛앹껜 }; - // �깮�꽦 �뙘�뾽 - function add() { - $uibModal.open({ - templateUrl : 'views/api/apiOverlapAdd.html', - size : "sm", - // controller : 'apiOverlapAddController', - backdrop : 'static' + angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector})); + + function initForm() { + $scope.vm.form.issueApiDefault.title = ""; + $scope.vm.form.issueApiDefault.description = ""; + $scope.vm.form.issueApiDefault.priorityId = ""; + $scope.vm.form.issueApiDefault.severityId = ""; + } + + // �씠�뒋 �쑀�삎 �겢由��떆 + $scope.$on("onClickIssueType", function (evnet, args) { + if (args != null && args.length > 0) { + + let conditions = { + issueTypeId: args[0].id + } + + Api.findApiDefault($resourceProvider.getContent( + conditions, $resourceProvider.getPageContent(0, 0))).then(function (result) { + $scope.fn.initForm(); + if (result.data.message.status === "success") { + if (angular.isDefined(result.data.data)) { + $scope.vm.form.issueApiDefault = result.data.data; + $scope.vm.form.issueApiDefault.priorityId = result.data.data.priorityId.toString(); + $scope.vm.form.issueApiDefault.severityId = result.data.data.severityId.toString(); + + // if (angular.isDefined(result.data.data.projectVo)) { + // $scope.vm.projects = []; + // $scope.vm.projects.push(result.data.data.projectVo); + // } + } + } else { + SweetAlert.swal($filter("translate")("common.failedToIssueTypeDefault"), result.data.message.message, "error"); // "�봽濡쒖젥�듃 紐⑸줉 議고쉶 �떎�뙣" + } + }); + } + }); + + // �뤌 泥댄겕 + function formCheck(formInvalid) { + if (formInvalid) { + return true; + } + + return false; + } + + function formSubmit() { + if ($scope.vm.issueTypes == null || $scope.vm.issueTypes.length === 0) + return; + + let condition = { + issueTypeId : $scope.vm.issueTypes[0].id, + title : $scope.vm.form.issueApiDefault.title, + // projectId : $scope.vm.projects != null && $scope.vm.projects.length > 0 ? $scope.vm.projects[0].id : null, + priorityId : $scope.vm.form.issueApiDefault.priorityId, + severityId : $scope.vm.form.issueApiDefault.severityId, + description : $scope.vm.form.issueApiDefault.description, + } + + Api.modifyApiDefault($resourceProvider.getContent(condition, + $resourceProvider.getPageContent(0, 1))).then(function (result) { + + if (result.data.message.status === "success") { + SweetAlert.swal($filter("translate")("api.successToApiIssueDefault"), result.data.message.message, "success"); // "api �넗�겙 �깮�꽦 �꽦怨�" + } + else { + SweetAlert.swal($filter("translate")("api.failedToApiIssueDefault"), result.data.message.message, "error"); // "api �넗�겙 �깮�꽦 �떎�뙣" + } }); } + + function getIssueTypeCallback(result) { + $scope.vm.autoCompletePage.issueType.totalPage = result.data.page.totalPage; + } + + function getProjectListCallback(result) { + $scope.vm.autoCompletePage.project.totalPage = result.data.page.totalPage; + } + + // �슦�꽑�닚�쐞 紐⑸줉 + function getPriorities() { + Priority.find($resourceProvider.getContent({}, + $resourceProvider.getPageContent(0, 1000))).then(function (result) { + + if (result.data.message.status === "success") { + $scope.vm.priorities = result.data.data; + } + else { + SweetAlert.swal($filter("translate")("issue.failedToPriorityListLookup"), result.data.message.message, "error"); // �슦�꽑�닚�쐞 紐⑸줉 議고쉶 �떎�뙣 + } + }); + } + + // 以묒슂�룄 紐⑸줉 + function getSeverities() { + Severity.find($resourceProvider.getContent({}, + $resourceProvider.getPageContent(0, 1000))).then(function (result) { + + if (result.data.message.status === "success") { + $scope.vm.severities = result.data.data; + } + else { + SweetAlert.swal($filter("translate")("issue.failedToCriticalListLookup"), result.data.message.message, "error"); // 以묒슂�룄 紐⑸줉 議고쉶 �떎�뙣 + } + }); + } + function changeTab(tab) { $scope.vm.tab = tab; @@ -42,5 +171,12 @@ } } + function start() { + $scope.fn.initForm(); + $scope.fn.getSeverities(); + $scope.fn.getPriorities(); + } + + $scope.fn.start(); }]); }); diff --git a/src/main/webapp/scripts/components/api/api.service.js b/src/main/webapp/scripts/components/api/api.service.js index b95c0c1..9dd5537 100644 --- a/src/main/webapp/scripts/components/api/api.service.js +++ b/src/main/webapp/scripts/components/api/api.service.js @@ -3,7 +3,7 @@ define([ 'app' ], function (app) { - app.factory("Api", ['$http', '$log', function ($http, $log) { + app.factory( "Api", ['$http', '$log', function ($http, $log) { return { find : function (conditions) { return $http.post("apiToken/find", conditions).then(function (response) { @@ -22,6 +22,18 @@ $log.debug("�넗�겙 �궘�젣 寃곌낵 : ", response); return response; }); + }, + findApiDefault : function (conditions) { + return $http.post("issueApiDefault/find", conditions).then(function (response) { + $log.debug("�씠�뒋 �쑀�삎 珥덇린媛� 議고쉶 寃곌낵 : ", response); + return response; + }); + }, + modifyApiDefault : function (conditions) { + return $http.post("issueApiDefault/modify", conditions).then(function (response) { + $log.debug("�씠�뒋 �쑀�삎 珥덇린媛� �닔�젙 寃곌낵 : ", response); + return response; + }); } } } diff --git a/src/main/webapp/scripts/components/issueType/issueType.service.js b/src/main/webapp/scripts/components/issueType/issueType.service.js index 5b6fa9e..3961b81 100644 --- a/src/main/webapp/scripts/components/issueType/issueType.service.js +++ b/src/main/webapp/scripts/components/issueType/issueType.service.js @@ -37,7 +37,8 @@ $log.debug("�씠�뒋 �쑀�삎 �궘�젣 寃곌낵 : ", response); return response; }); - } + }, + } } ]); diff --git a/src/main/webapp/scripts/components/utils/autoComplete.controller.js b/src/main/webapp/scripts/components/utils/autoComplete.controller.js index c87f50b..1dd6f18 100644 --- a/src/main/webapp/scripts/components/utils/autoComplete.controller.js +++ b/src/main/webapp/scripts/components/utils/autoComplete.controller.js @@ -22,6 +22,7 @@ var UserWorkspace = $injector.get("UserWorkspace"); var IspField = $injector.get("IspField"); var HostingField = $injector.get("HostingField"); + var IssueType = $injector.get("IssueType"); var $log = $injector.get("$log"); var SweetAlert = $injector.get("SweetAlert"); @@ -36,6 +37,7 @@ $scope.fn.getIssueIspFieldList = getIssueIspFieldList; // ISP 紐⑸줉 �젙蹂대�� 議고쉶�븳�떎. $scope.fn.getIssueHostingFieldList = getIssueHostingFieldList; // �샇�뒪�똿 紐⑸줉 �젙蹂대�� 議고쉶�븳�떎. $scope.fn.getCompanyList = getCompanyList; // �뾽泥�/isp/�샇�뒪�똿 紐⑸줉 議고쉶 + $scope.fn.getIssueTypeList = getIssueTypeList; // �씠�뒋 �쑀�삎 紐⑸줉 議고쉶 function getUserList(query, excludeList, page, callBack) { var conditions = { @@ -400,6 +402,40 @@ return deferred.promise; } + + function getIssueTypeList(query, excludeList, page, callBack) { + var conditions = { + name : query, + excludeIds : (function () { + var excludeIds = []; + + angular.forEach(excludeList, function (exclude) { + excludeIds.push(exclude.id); + }); + + return excludeIds; + })() + }; + + var deferred = $q.defer(); + + IssueType.find($resourceProvider.getContent( // �럹�씠吏� �뾽�뜲�씠�듃媛� �븘�슂�븳 而댄룷�꼳�듃 �씪寃쎌슦, page �뾽�뜲�씠�듃媛� �엳�쓣 寃쎌슦 湲곕낯 10媛쒖뵫 媛��졇�삤怨� �븘�땺寃쎌슦 25媛쒖뵫 媛��졇�삩�떎. + conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) { + if (result.data.message.status === "success") { + + if ($rootScope.isDefined(callBack)) { + callBack(result); + } + + deferred.resolve(result.data.data); + } + else { + SweetAlert.swal($filter("translate")("issue.failedToIssueTypeListLookup"), result.data.message.message, "error"); // "�씠�뒋 �쑀�삎 紐⑸줉 議고쉶 �떎�뙣" + } + }); + + return deferred.promise; + } } ]); } diff --git a/src/main/webapp/views/api/apiSettingColumn.html b/src/main/webapp/views/api/apiSettingColumn.html index f134b54..6bcf4c8 100644 --- a/src/main/webapp/views/api/apiSettingColumn.html +++ b/src/main/webapp/views/api/apiSettingColumn.html @@ -1,37 +1,32 @@ <div class="row"> <div class="col-md-4"> <div class="form-group mb10"> - <label for="issueAddForm4" class="issue-label"> <span - translate="issue.issueType">�씠�뒋 ���엯</span> - </label> - <select id="issueAddForm4" - name="issueType" - class="form-control input-sm issue-select-label" - ng-model="vm.form.issueTypeId" - ng-change="fn.getIssueTypeCustomFields()" - ng-style="{ 'color' : fn.getOptionColor(vm.issueTypes, vm.form.issueTypeId) }" - required> - <option ng-style="{ 'color' : '#353535' }" value="">�솃�럹�씠吏� 蹂�議� 媛먯� - </option> - <option ng-style="{ 'color' : '#353535' }" value="">寃쎌쑀吏� �깘吏� - </option> - <option ng-repeat="issueType in vm.issueTypes" - ng-style="{ 'color' : issueType.color, 'font-weight': 600 }" - value="{{issueType.id}}">�뿈 {{issueType.name}} - </option> - </select> + <label class="issue-label"> <span translate="issue.issueType">�씠�뒋 �쑀�삎</span> + <code class="highlighter-rouge">*</code></label> + <js-autocomplete-single data-input-name="issueType" + selected-model="vm.issueTypes" + search="vm.issueTypeName" + source="fn.getIssueTypeList(vm.issueTypeName, vm.issueTypes, vm.autoCompletePage.issueType.page, fn.getIssueTypeCallback)" + page="vm.autoCompletePage.issueType.page" + total-page="vm.autoCompletePage.issueType.totalPage" + input-disabled="false" + required + broad-cast="onClickIssueType" + translation-texts="{ empty : 'common.emptyIssueType' }" + extra-settings="{ displayProp : 'name' , idProp : 'id', imageable : false, imagePathProp : '', + type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single> </div> </div> </div> <div class="element-box"> - <form role="form" name="issueAddForm"> + <form role="form" name="apiSettingColumnForm"> <div class="form-group mb10"> <label for="issueAddForm1" class="issue-label"><span translate="issue.issueTitle">�씪媛� �젣紐�</span> </label> <input id="issueAddForm1" class="form-control input-sm" - ng-model="vm.form.title" + ng-model="vm.form.issueApiDefault.title" name="title" required kr-input @@ -42,29 +37,23 @@ owl-auto-focus> </div> <div class="row"> - <div class="col-lg-4"> - <div class="form-group mb10"> - <label class="issue-label"> <span translate="common.project">�봽濡쒖젥�듃</span> </label> - <select id="issueAddForm6" - name="issueType" - class="form-control input-sm issue-select-label" - ng-model="vm.form.issueTypeId" - ng-change="fn.getIssueTypeCustomFields()" - ng-style="{ 'color' : fn.getOptionColor(vm.issueTypes, vm.form.issueTypeId) }" - required> - <option ng-style="{ 'color' : '#353535' }" value="">�솃�럹�씠吏� 蹂�議� 媛먯� - </option> - <option ng-style="{ 'color' : '#353535' }" value="">MCF - </option> - <option ng-repeat="issueType in vm.issueTypes" - ng-style="{ 'color' : issueType.color, 'font-weight': 600 }" - value="{{issueType.id}}">�뿈 {{issueType.name}} - </option> - </select> - </div> - </div> +<!-- <div class="col-lg-4">--> +<!-- <div class="form-group mb10">--> +<!-- <label class="issue-label"> <span translate="common.project">�봽濡쒖젥�듃</span></label>--> +<!-- <js-autocomplete-single data-input-name="issueType"--> +<!-- selected-model="vm.projects"--> +<!-- search="vm.form.projectName"--> +<!-- source="fn.getProjectList(vm.form.projectName, vm.projects, vm.autoCompletePage.project.page, fn.getProjectListCallback)"--> +<!-- page="vm.autoCompletePage.project.page"--> +<!-- total-page="vm.autoCompletePage.project.totalPage"--> +<!-- input-disabled="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>--> +<!-- </div>--> - <div class="col-lg-8 bdl1"> + <div class="col-lg-8"> <div class="row"> <div class="col-md-4"> @@ -75,18 +64,9 @@ <select id="issueAddForm2" name="priority" class="form-control input-sm issue-select-label" - ng-model="vm.form.priorityId" + ng-model="vm.form.issueApiDefault.priorityId" ng-style="{ 'color' : fn.getOptionColor(vm.priorities, vm.form.priorityId) }" required> - <option value="" ng-style="{ 'color' : '#353535' }"> - <span >蹂댄넻</span> - </option> - <option value="" ng-style="{ 'color' : '#353535' }"> - <span >�넂�쓬</span> - </option> - <option value="" ng-style="{ 'color' : '#353535' }"> - <span >�궙�쓬</span> - </option> <option ng-repeat="priority in vm.priorities" ng-style="{ 'color' : priority.color, 'font-weight': 600 }" value="{{priority.id}}" @@ -102,18 +82,9 @@ <select id="issueAddForm3" name="severity" class="form-control input-sm issue-select-label" - ng-model="vm.form.severityId" + ng-model="vm.form.issueApiDefault.severityId" ng-style="{ 'color' : fn.getOptionColor(vm.severities, vm.form.severityId) }" required> - <option value="" ng-style="{ color : '#353535' }"> - <span>蹂댄넻</span> - </option> - <option value="" ng-style="{ color : '#353535' }"> - <span>�넂�쓬</span> - </option> - <option value="" ng-style="{ color : '#353535' }"> - <span>�궙�쓬</span> - </option> <option ng-repeat="severity in vm.severities" ng-style="{ color : severity.color, 'font-weight': 600 }" value="{{severity.id}}" @@ -133,119 +104,18 @@ class="summernote" lang="ko-KR" summer-note-auto-focus - ng-model="vm.form.description" + ng-model="vm.form.issueApiDefault.description" data-editor="vm.summerNote.editor" data-editable="vm.summerNote.editable" on-image-upload="fn.imageUpload(files)" target=".note-editable"></summernote> </div> - <div class="row"> - <div class="col-lg-12"> - <div class="form-group mb10"> - <label for="issueAddForm5" class="issue-label"> <span translate="common.period">湲곌컙</span> - </label> - <input id="issueAddForm5" - tabindex="-1" - type="text" - readonly - class="form-control cursor" - placeholder="{{'issue.clickToSelectDate' | translate}}" - ng-model="vm.form.startCompleteDateRange" - modal-form-auto-scroll - date-format="YYYY-MM-DD" - parent-el="'#createdWidget'" - date-range-picker> - <div class="row"> - <div class="col-xs-12"> - <div id="createdWidget" class="bootstrap-datepicker"></div> - </div> - </div> - </div> - </div> - </div> - <div class="row"> - <div class="col-lg-3"> - <div class="form-group mb10"> - <div class="form-group mb10"> - <label class="issue-label"> <span translate="common.assigneeTeam">�떞�떦遺��꽌</span> </label> - <select id="issueAddForm" - name="issueType" - class="form-control input-sm issue-select-label" - ng-model="vm.form.issueTypeId" - ng-change="fn.getIssueTypeCustomFields()" - ng-style="{ 'color' : fn.getOptionColor(vm.issueTypes, vm.form.issueTypeId) }" - required> - <option value="" ng-style="{ 'color' : '#353535' }"><span>議곗튂�슜�뿭</span></option> - <option value="" ng-style="{ 'color' : '#353535' }"><span>遺꾩꽍�슜�뿭</span></option> - <option value="" ng-style="{ 'color' : '#353535' }"><span>�긽�솴�떎</span></option> - <option ng-repeat="issueType in vm.issueTypes" - ng-style="{ 'color' : issueType.color, 'font-weight': 600 }" - value="{{issueType.id}}">�뿈 {{issueType.name}} - </option> - </select> - </div> - </div> - - </div> - <div class="col-lg-3"> - <div class="form-group mb10"> - <div class="form-group mb10"> - <label class="issue-label"> <span>�뾽醫�</span> </label> - <select id="issueAddFormIP" - name="issueType" - class="form-control input-sm issue-select-label" - ng-model="vm.form.issueTypeId" - ng-change="fn.getIssueTypeCustomFields()" - ng-style="{ 'color' : fn.getOptionColor(vm.issueTypes, vm.form.issueTypeId) }" - required> - <option value="" translate="common.selectTarget" ng-style="{ 'color' : '#353535' }"><span>���긽 �꽑�깮</span> - </option> - <option ng-repeat="issueType in vm.issueTypes" - ng-style="{ 'color' : issueType.color, 'font-weight': 600 }" - value="{{issueType.id}}">�뿈 {{issueType.name}} - </option> - </select> - </div> - - - </div> - </div> - <div class="col-lg-3"> - <div class="form-group mb10"> - <div class="form-group mb10"> - <label class="issue-label"> <span>�룄硫붿씤</span> </label> - <input id="issueAddForm8" - tabindex="-1" - type="text" - class="form-control cursor" - /> - - </div> - - - </div> - </div> - <div class="col-lg-3"> - <div class="form-group mb10"> - <div class="form-group mb10"> - <label class="issue-label"> <span>寃쎌쑀吏�IP</span> </label> - <input id="issueAddForm*" - tabindex="-1" - type="text" - class="form-control cursor" - /> - </div> - - - </div> - </div> - </div> </form> <div class="modal-footer buttons-on-right"> <button type="button" class="btn btn-md btn-primary bold" js-short-cut - js-short-cut-action="(fn.formCheck(issueStatusAddForm.$invalid) || $root.spinner) ? null : fn.formSubmit()" + js-short-cut-action="(fn.formCheck(apiSettingColumnForm.$invalid) || $root.spinner) ? null : fn.formSubmit()" ng-click="fn.formSubmit()"><span translate="common.saved">�깮�꽦</span> </button> </div> -- Gitblit v1.8.0