| | |
| | | 'angular' |
| | | ], |
| | | function (app, angular) { |
| | | app.controller('issueListController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$tableProvider', '$state', '$uibModal', '$q', |
| | | app.controller('issueListController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$tableProvider', '$treeProvider', '$state', '$uibModal', '$q', |
| | | '$controller', '$injector', 'SweetAlert', 'Issue', 'IssueType', 'Priority', 'Severity', 'IssueStatus', 'CustomField', 'IssueSearch', 'IssueTableConfig', '$timeout', '$filter', |
| | | function ($scope, $rootScope, $log, $resourceProvider, $tableProvider, $state, $uibModal, $q, $controller, $injector, SweetAlert, Issue, IssueType, Priority, Severity, IssueStatus, CustomField, |
| | | function ($scope, $rootScope, $log, $resourceProvider, $tableProvider, $treeProvider, $state, $uibModal, $q, $controller, $injector, SweetAlert, Issue, IssueType, Priority, Severity, IssueStatus, CustomField, |
| | | IssueSearch, IssueTableConfig, $timeout, $filter) { |
| | | |
| | | // 함수 |
| | |
| | | changePageRowCount : changePageRowCount, // 페이지 변경 |
| | | makeTableConfigs : makeTableConfigs, // 테이블 설정 |
| | | setTableColumn : setTableColumn, // 테이블의 컬럼을 만들어준다. |
| | | setTreeColumn : setTreeColumn, |
| | | add : add, // 이슈 생성 |
| | | modify : modify, // 이슈 수정 |
| | | addRelationIssueForm : addRelationIssueForm, // 연관 이슈 추가 |
| | | addDownIssueForm : addDownIssueForm, // 하위 이슈 추가 |
| | | modifyMultiIssueStatus : modifyMultiIssueStatus, // 이슈 다중 상태 변경 |
| | | removes : removes, // 이슈 삭제 |
| | | addIssueTableConfig : addIssueTableConfig, // 이슈 목록 테이블 설정 |
| | |
| | | makeSearchConditions : makeSearchConditions, // 검색 조건을 만든다. |
| | | getIssueTableConfigs : getIssueTableConfigs, // 사용자 이슈 목록 테이블 설정 값을 가져와서 적용한다. |
| | | startExecute : startExecute, // 컨트롤 로딩시 처음으로 시작되는 함수 |
| | | getResponseData : getResponseData // 컨트롤 로딩시 처음으로 시작되는 함수 |
| | | getResponseData : getResponseData, // 컨트롤 로딩시 처음으로 시작되는 함수 |
| | | onClickListMode : onClickListMode, // 리스트 모드 변경시 실행되는 함수 |
| | | setDefaultTableConfig : setDefaultTableConfig // 기본 테이블 설정 세팅 |
| | | }; |
| | | |
| | | // 변수 |
| | | $scope.vm = { |
| | | projectId : "", |
| | | issueTypeId : "", |
| | | partnerVos : "", |
| | | search : { |
| | | keyWord : "", // 전체 검색 |
| | | keyWord : "", // 검색 |
| | | title : "", // 제목 |
| | | description : "", // 내용 |
| | | combinationIssueNumber : "", // 이슈 번호 |
| | | issueNumber : "", |
| | | projectType : "BTS_PROJECT", // 프로젝트 유형 |
| | | registerDateRange : "", // 등록일 기간 검색 |
| | | startDateRange : "", // 시작일 기간 검색 |
| | |
| | | issueStatusIds : [], // 이슈 상태 검색 |
| | | issueTypeIds : [] // 이슈 유형 검색 |
| | | }, |
| | | searchAll : { |
| | | keyWord : "", // 전체 검색 |
| | | }, |
| | | searchView : false, // 상세 검색 조건 표시 여부 |
| | | detailView : false, // 상세 모드 변경 값 |
| | | page : { |
| | |
| | | selectedPageRowCount : String(10) |
| | | }, |
| | | tableConfigs : [], // 테이블 셋팅 정보 |
| | | treeConfigs : [], // 트리 셋팅 정보 |
| | | responseData : { |
| | | data : [] |
| | | }, |
| | |
| | | registers : [], // 등록자 |
| | | customFields : [], // 사용자 정의 필드 |
| | | issueTableConfigs : [], // 이슈 테이블 설정 |
| | | issueTreeConfigs : [], // 이슈 테이블 설정 |
| | | parentIssueId : "", |
| | | hideIssue : false |
| | | hideCompleteIssue : false, |
| | | hideDownIssue : true, |
| | | listMode : 0, // 목록 모드 0:기본 리스트 1:트리구조 리스트 |
| | | }; |
| | | |
| | | // 테이블 이벤트 |
| | |
| | | |
| | | angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector})); |
| | | |
| | | // 이슈목록 새로고침 목록 갱신 |
| | | $scope.$on("findIssueListOK", function (event, args) { |
| | | if (args != null) { |
| | | $scope.fn.startExecute(); |
| | | } |
| | | }); |
| | | |
| | | // 이슈 목록 데이터 갱신 |
| | | $scope.$on("getIssueList", function () { |
| | | $scope.fn.getPageList($scope.vm.page.selectedPage - 1); |
| | | }); |
| | | |
| | | // 이슈 목록 새로고침 |
| | | $rootScope.$on("getIssueList", function (event, args) {}) |
| | | |
| | | // 이슈 테이블 설정 정보 갱신 |
| | | $scope.$on("getIssueTableConfigs", function () { |
| | |
| | | |
| | | $scope.$on("changedIssueListMenu", function (event, args) { |
| | | $scope.fn.getPageList($scope.vm.page.selectedPage - 1); |
| | | }); |
| | | |
| | | // 상단 검색시 |
| | | $rootScope.$on("searchIssueList", function (event, args) { |
| | | $scope.vm.searchAll.keyWord = args.keyWord; |
| | | $scope.fn.getPageList(0); |
| | | }); |
| | | |
| | | // 검색 조건을 기억한다. - 적용 보류 |
| | |
| | | // 이슈 테이블 설정 |
| | | function makeTableConfigs() { |
| | | $scope.vm.tableConfigs = []; |
| | | $scope.vm.treeConfigs = []; |
| | | |
| | | $scope.vm.tableConfigs.push($tableProvider.config() |
| | | .setDType("checkbox") |
| | |
| | | if (issueTableConfig.display) { |
| | | // 테이블의 컬럼을 만들어준다. |
| | | $scope.fn.setTableColumn(issueTableConfig); |
| | | $scope.fn.setTreeColumn(issueTableConfig); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | // 트리 컬럼을 만들어준다. |
| | | function setTreeColumn(issueTableConfig) { |
| | | // 일반 컬럼 |
| | | switch(issueTableConfig.key) { |
| | | case "ISSUE_TITLE" : // 이슈 제목 |
| | | $scope.vm.treeConfigs.push($treeProvider.config() |
| | | .setDName("title")); |
| | | break; |
| | | |
| | | case "PRIORITY" : // 우선순위 |
| | | $scope.vm.treeConfigs.push($treeProvider.config() |
| | | .setDName("priorityName")); |
| | | break; |
| | | case "SEVERITY" : // 중요도 |
| | | $scope.vm.treeConfigs.push($treeProvider.config() |
| | | .setDName("severityName")); |
| | | break; |
| | | case "ISSUE_TYPE" : // 이슈 타입 |
| | | $scope.vm.treeConfigs.push($treeProvider.config() |
| | | .setDName("issueTypeName")); |
| | | break; |
| | | case "ASSIGNEE_TEAM" : // 담당부서 |
| | | $scope.vm.treeConfigs.push($treeProvider.config() |
| | | .setDName("assigneeTeam")); |
| | | break; |
| | | case "REGISTER" : // 등록자 |
| | | $scope.vm.treeConfigs.push($treeProvider.config() |
| | | .setDName("register")); |
| | | break; |
| | | case "PERIOD" : // 기간 |
| | | $scope.vm.treeConfigs.push($treeProvider.config() |
| | | .setDName("period")); |
| | | break; |
| | | case "MODIFY_DATE" : // 최근 변경일 |
| | | $scope.vm.treeConfigs.push($treeProvider.config() |
| | | .setDName("modifyDate")); |
| | | break; |
| | | case "COUNT_DOWN_ISSUE" : // 하위 이슈 개수 |
| | | $scope.vm.treeConfigs.push($treeProvider.config() |
| | | .setDName("countDownIssue")); |
| | | break; |
| | | } |
| | | |
| | | // 사용자 정의 필드 컬럼 |
| | | if (issueTableConfig.key.indexOf("CUSTOM_FIELD_") !== -1) { |
| | | // 만약 이슈 테이블 컬럼명이 표시되지 않으면 이쪽이 문제 |
| | | for (var count in $scope.vm.customFields) { |
| | | var customField = $scope.vm.customFields[count]; |
| | | |
| | | if (customField.id === Number(issueTableConfig.key.substring(13))) { |
| | | $scope.vm.treeConfigs.push($treeProvider.config() |
| | | .setDType("CUSTOM_FIELD") |
| | | .setDName(customField.id) |
| | | .setColumnHint(customField)); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 테이블의 컬럼을 만들어준다. |
| | |
| | | case "ISSUE_TITLE" : // 이슈 제목 |
| | | $scope.vm.tableConfigs.push($tableProvider.config() |
| | | .setHName("issue.issueTitle") |
| | | .setDName("issueNumber") /* todo 이건 타이틀로 변경해야하는데*/ |
| | | .setDType("renderer") |
| | | .setHWidth("bold " + issueTableConfig.width) |
| | | .setDAlign("text-center") |
| | |
| | | case "PRIORITY" : // 우선순위 |
| | | $scope.vm.tableConfigs.push($tableProvider.config() |
| | | .setHName("common.priority") |
| | | .setDName("priorityName") |
| | | .setDName("priorityId") |
| | | .setDType("renderer") |
| | | .setHWidth("bold " + issueTableConfig.width) |
| | | .setDAlign("text-center") |
| | |
| | | case "SEVERITY" : // 중요도 |
| | | $scope.vm.tableConfigs.push($tableProvider.config() |
| | | .setHName("common.importance") |
| | | .setDName("severityName") |
| | | .setDName("severityId") |
| | | .setDType("renderer") |
| | | .setHWidth("bold " + issueTableConfig.width) |
| | | .setDAlign("text-center") |
| | | .setDRenderer("COMMON_SEVERITY")); |
| | | break; |
| | | case "ISSUE_TYPE" : // 이슈 타입 |
| | | case "ISSUE_TYPE" : // 이슈 유형 |
| | | $scope.vm.tableConfigs.push($tableProvider.config() |
| | | .setHName("issue.issueType") |
| | | .setDName("issueTypeId") |
| | | .setDType("renderer") |
| | | .setHWidth("bold " + issueTableConfig.width) |
| | | .setDAlign("text-center") |
| | | .setDName("issueTypeName")); |
| | | .setDRenderer("COMMON_ISSUE_TYPE")); |
| | | break; |
| | | case "ASSIGNEE_TEAM" : // 담당부서 |
| | | $scope.vm.tableConfigs.push($tableProvider.config() |
| | | .setHName("common.assigneeTeam") |
| | | .setDName("departmentName") /* todo 체크*/ |
| | | .setDType("renderer") |
| | | .setHWidth("bold " + issueTableConfig.width) |
| | | .setDAlign("text-center") |
| | |
| | | case "REGISTER" : // 등록자 |
| | | $scope.vm.tableConfigs.push($tableProvider.config() |
| | | .setHName("common.register") |
| | | .setDName("registerId") |
| | | .setDType("renderer") |
| | | .setHWidth("bold " + issueTableConfig.width) |
| | | .setDAlign("text-center") |
| | |
| | | case "PERIOD" : // 기간 |
| | | $scope.vm.tableConfigs.push($tableProvider.config() |
| | | .setHName("common.period") |
| | | .setDName("startDate") |
| | | .setDType("renderer") |
| | | .setHWidth("bold " + issueTableConfig.width) |
| | | .setDAlign("text-center") |
| | |
| | | case "COUNT_DOWN_ISSUE" : // 하위 이슈 개수 |
| | | $scope.vm.tableConfigs.push($tableProvider.config() |
| | | .setHName("common.countDownIssue") |
| | | .setDName("downIssueCount") |
| | | .setDType("renderer") |
| | | .setHWidth("bold " + issueTableConfig.width) |
| | | .setDAlign("text-center") |
| | | .setColumnTooltip("미완료 하위이슈/전체 하위이슈") |
| | | .setDRenderer("DOWN_ISSUE_COUNT")); |
| | | break; |
| | | } |
| | |
| | | $scope.vm.tableConfigs.push($tableProvider.config() |
| | | .setHName(customField.name) |
| | | .setDType("renderer") |
| | | .setDName("useValue" + [count]) /* todo 체크*/ |
| | | .setHWidth("bold " + issueTableConfig.width) |
| | | .setDAlign("text-center") |
| | | .setColumnHint(customField) |
| | |
| | | keyWord : $scope.vm.search.keyWord, |
| | | title : $scope.vm.search.title, |
| | | description : $scope.vm.search.description, |
| | | issueNumber : $scope.vm.search.issueNumber, |
| | | projectType : $scope.vm.search.projectType, |
| | | combinationIssueNumber : $scope.vm.search.combinationIssueNumber.trim(), |
| | | beginRegisterDate : "", |
| | |
| | | endStartDate : "", |
| | | beginCompleteDate : "", |
| | | endCompleteDate : "", |
| | | hideIssue : $scope.vm.hideIssue, |
| | | hideCompleteIssue: $scope.vm.hideCompleteIssue, |
| | | hideDownIssue : $scope.vm.hideDownIssue, |
| | | isTree : $scope.vm.listMode === 1, |
| | | projectIds : (function () { |
| | | var projectIds = []; |
| | | |
| | |
| | | return conditions; |
| | | } |
| | | |
| | | function getTreeList() { |
| | | |
| | | } |
| | | |
| | | // 이슈 목록을 조회한다. |
| | | function getPageList(selectedPage, detail = false) { |
| | | function getPageList(selectedPage, detail = false, keyWord = "") { |
| | | $rootScope.spinner = true; // 프로그래스 바 |
| | | if (selectedPage < 0) { |
| | | selectedPage = 0; |
| | | } |
| | | |
| | | if ($scope.vm.hideIssue) { |
| | | $scope.vm.hideIssue = true; |
| | | if (keyWord !== "") { |
| | | $scope.vm.search.keyWord = keyWord; |
| | | } |
| | | |
| | | if ($scope.vm.hideCompleteIssue) { |
| | | $scope.vm.hideCompleteIssue = true; |
| | | } |
| | | |
| | | if ($scope.vm.hideDownIssue) { |
| | | $scope.vm.hideDownIssue = true; |
| | | } |
| | | // 현재 페이지 정보 |
| | | var currentPage = 0; |
| | |
| | | currentPage = selectedPage; |
| | | } |
| | | |
| | | // 메뉴에서 선택된 이슈 유형을 기본으로 추가 |
| | | if ($rootScope.issueTypeMenu != null) { |
| | | // $scope.vm.pageTitle = $rootScope.issueTypeMenu.name; |
| | | $scope.vm.search.issueTypeIds = []; |
| | | $scope.vm.search.issueTypeIds.push({ |
| | | fieldKey : $rootScope.issueTypeMenu.id, |
| | | fieldValue : $rootScope.issueTypeMenu.name |
| | | }); |
| | | } |
| | | // 검색 기본값 세팅 |
| | | $scope.vm.search.issueTypeIds = []; |
| | | $scope.vm.projects = []; |
| | | if ($scope.vm.searchAll.keyWord == null || $scope.vm.searchAll.keyWord === "") { |
| | | // 메뉴에서 선택된 이슈 유형을 기본으로 추가 |
| | | if ($rootScope.issueTypeMenu != null) { |
| | | //$scope.vm.pageTitle = $rootScope.issueTypeMenu.name; |
| | | |
| | | // 검색 조건을 저장한다. |
| | | //$scope.fn.makeVmSearchObject(); |
| | | |
| | | |
| | | // 현재 선택된 프로젝트를 검색 기본으로 추가 |
| | | if ($rootScope.workProject != null && $rootScope.workProject.id > -1) { |
| | | var find = findProjectSearch($rootScope.workProject.id); |
| | | if (!find) { |
| | | $scope.vm.projects = []; |
| | | $scope.vm.projects.push($rootScope.workProject); |
| | | $scope.vm.search.issueTypeIds.push({ |
| | | fieldKey: $rootScope.issueTypeMenu.id, |
| | | fieldValue: $rootScope.issueTypeMenu.name |
| | | }); |
| | | } |
| | | |
| | | // 검색 조건을 저장한다. |
| | | //$scope.fn.makeVmSearchObject(); |
| | | |
| | | // 현재 선택된 프로젝트를 검색 기본으로 추가 |
| | | if ($rootScope.workProject != null && $rootScope.workProject.id > -1) { |
| | | var find = findProjectSearch($rootScope.workProject.id); |
| | | if (!find) { |
| | | $scope.vm.projects.push($rootScope.workProject); |
| | | } |
| | | } |
| | | //$scope.vm.searchAll.keyWord = ""; |
| | | } |
| | | |
| | | // 이슈 검색 조건을 만든다. |
| | |
| | | $resourceProvider.getPageContent(currentPage, $scope.vm.page.selectedPageRowCount))).then(function (result) { |
| | | |
| | | if (result.data.message.status === "success") { |
| | | if (result.data.data != null && result.data.data.length > 0) { |
| | | //var resultSize = result.data.data.length; |
| | | for (var i = 0; i < result.data.data.length; i++) { |
| | | /*if (result.data.data[i].parentIssueId != null) {//하위이슈는 리스트에서 삭제 |
| | | result.data.data.splice(i, 1); |
| | | i--; |
| | | }else*/ |
| | | if ($scope.vm.search.issueTypeIds !== null && $scope.vm.search.issueTypeIds.length > 0 |
| | | && result.data.data[i].issueTypeId !== $scope.vm.search.issueTypeIds[0].fieldKey) { //이슈타입 체크 |
| | | result.data.data.splice(i, 1); |
| | | i--; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (result.data.data != null && result.data.data.length > 0) { |
| | | $scope.vm.issueTypeId = result.data.data[0].issueTypeId; |
| | | $scope.vm.projectKey = result.data.data[0].projectKey; |
| | |
| | | } else { |
| | | $scope.vm.responseData = result.data; |
| | | } |
| | | |
| | | } |
| | | else { |
| | | SweetAlert.error($filter("translate")("issue.failedIssueLookup"), result.data.message.message); // 이슈 조회 실패 |
| | | } |
| | | $rootScope.spinner = false; // 프로그래스 바 |
| | | |
| | | }); |
| | | } |
| | |
| | | angular.forEach($scope.vm.responseData.data, function (data) { |
| | | if (data.checked) { |
| | | issueIds.push(data.id); |
| | | $scope.vm.projectId = data.projectId; |
| | | } |
| | | }); |
| | | |
| | |
| | | resolve : { |
| | | parameter : function () { |
| | | return { |
| | | issueIds : issueIds |
| | | issueIds : issueIds, |
| | | projectId : $scope.vm.projectId |
| | | }; |
| | | } |
| | | } |
| | |
| | | templateUrl : 'views/issue/issueAddRelation.html', |
| | | size : "lg", |
| | | controller : 'issueAddRelationController', |
| | | backdrop : 'static', |
| | | resolve : { |
| | | parameter : function () { |
| | | return { |
| | | id : id, |
| | | }; |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | |
| | | function addDownIssueForm(id) { |
| | | $uibModal.open({ |
| | | templateUrl : 'views/issue/issueAddDown.html', |
| | | size : "lg", |
| | | controller : 'issueAddDownController', |
| | | backdrop : 'static', |
| | | resolve : { |
| | | parameter : function () { |
| | |
| | | return deferred.promise; |
| | | } |
| | | |
| | | // 리스트 모드 변경시 실행 |
| | | function onClickListMode(listMode) { |
| | | if ($scope.vm.listMode !== listMode) { |
| | | $scope.vm.listMode = listMode; |
| | | |
| | | if ($scope.vm.listMode === 0) { |
| | | $scope.fn.getPageList(0); |
| | | } else { |
| | | $scope.fn.getPageList(0); |
| | | } |
| | | } |
| | | } |
| | | |
| | | function setDefaultTableConfig() { |
| | | // 최초 업무 공간에 들어왔을 경우 |
| | | $scope.vm.issueTableConfigs = [{ |
| | | name : $filter("translate")("issue.issueTitle"), // 이슈 제목 |
| | | key : "ISSUE_TITLE", |
| | | width : "width-140-p", |
| | | position : 1, |
| | | display : true |
| | | }, { |
| | | name : $filter("translate")("common.priority"), // 우선순위 |
| | | key : "PRIORITY", |
| | | width : "width-80-p", |
| | | position : 2, |
| | | display : true |
| | | }, { |
| | | name : $filter("translate")("common.importance"), // 중요도 |
| | | key : "SEVERITY", |
| | | width : "width-80-p", |
| | | position : 3, |
| | | display : true |
| | | }, { |
| | | name : $filter("translate")("issue.issueType"), // 이슈 타입 |
| | | key : "ISSUE_TYPE", |
| | | width : "width-140-p", |
| | | position : 4, |
| | | display : true |
| | | }, { |
| | | name : $filter("translate")("common.assigneeTeam"), // 담당부서 |
| | | key : "ASSIGNEE_TEAM", |
| | | width : "width-140-p", |
| | | position : 5, |
| | | display : true |
| | | }]; |
| | | } |
| | | |
| | | // 최초 실행 |
| | | function startExecute() { |
| | | // 파라미터 읽기 |
| | | var params = $rootScope.previousGetParams; |
| | | if ($rootScope.isDefined(params)) { |
| | | // $rootScope.$broadcast("makeIssueSearch", { projectKey : params.projectKey, issueNumber : params.issueNumber }); |
| | | getDetailList(params.projectKey, params.issueNumber); |
| | | $rootScope.previousGetParams = null; |
| | | if (params.keyWord != null) { |
| | | $scope.vm.searchAll.keyWord = params.keyWord; |
| | | getPageList(0,false, params.keyWord); |
| | | }else { |
| | | getDetailList(params.projectKey, params.issueNumber); |
| | | return; |
| | | } |
| | | // $rootScope.issueTypeId = $rootScope.issueTypeMenu.id; |
| | | return; |
| | | } |
| | | |
| | | var promises = { |
| | |
| | | }); |
| | | } |
| | | else { |
| | | // 최초 업무 공간에 들어왔을 경우 |
| | | $scope.vm.issueTableConfigs = [{ |
| | | name : $filter("translate")("issue.issueTitle"), // 이슈 제목 |
| | | key : "ISSUE_TITLE", |
| | | width : "width-140-p", |
| | | position : 1, |
| | | display : true |
| | | }, { |
| | | name : $filter("translate")("common.priority"), // 우선순위 |
| | | key : "PRIORITY", |
| | | width : "width-80-p", |
| | | position : 2, |
| | | display : true |
| | | }, { |
| | | name : $filter("translate")("common.importance"), // 중요도 |
| | | key : "SEVERITY", |
| | | width : "width-80-p", |
| | | position : 3, |
| | | display : true |
| | | }, { |
| | | name : $filter("translate")("issue.issueType"), // 이슈 타입 |
| | | key : "ISSUE_TYPE", |
| | | width : "width-140-p", |
| | | position : 4, |
| | | display : true |
| | | }, { |
| | | name : $filter("translate")("common.assigneeTeam"), // 담당부서 |
| | | key : "ASSIGNEE_TEAM", |
| | | width : "width-140-p", |
| | | position : 5, |
| | | display : true |
| | | }]; |
| | | $scope.fn.setDefaultTableConfig(); |
| | | } |
| | | |
| | | // 이슈 테이블 설정 |
| | |
| | | }); |
| | | } |
| | | |
| | | // this.router.navigate(['path/to']) |
| | | // .then(() => { |
| | | // window.location.reload(); |
| | | // }); |
| | | |
| | | |
| | | $scope.fn.startExecute(); |
| | | } |
| | | |