/** * Created by wisestone on 2017-12-21. */ 'use strict'; define([ 'app', 'angular' ], function (app, angular) { 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, $treeProvider, $state, $uibModal, $q, $controller, $injector, SweetAlert, Issue, IssueType, Priority, Severity, IssueStatus, CustomField, IssueSearch, IssueTableConfig, $timeout, $filter) { // 함수 $scope.fn = { initSearch : initSearch, // 검색 초기화 getPageList : getPageList, // 목록 조회 changePageRowCount : changePageRowCount, // 페이지 변경 makeTableConfigs : makeTableConfigs, // 테이블 설정 setTableColumn : setTableColumn, // 테이블의 컬럼을 만들어준다. setTreeColumn : setTreeColumn, add : add, // 이슈 생성 modify : modify, // 이슈 수정 addRelationIssueForm : addRelationIssueForm, // 연관 이슈 추가 addDownIssueForm : addDownIssueForm, // 하위 이슈 추가 modifyMultiIssueStatus : modifyMultiIssueStatus, // 이슈 다중 상태 변경 removes : removes, // 이슈 삭제 addIssueTableConfig : addIssueTableConfig, // 이슈 목록 테이블 설정 listView : listView, // 목록 화면으로 변경 importExcel : importExcel, // 엑셀 import 기능 팝업 호출 getIssueTypes : getIssueTypes, // 이슈 유형 목록을 가져온다. getUsePartner : getUsePartner, // 이슈 유형 별 사용하는 파트너 목록을 가져온다. getPriorities : getPriorities, // 우선순위 목록을 가져온다. getSeverities : getSeverities, // 중요도 목록을 가져온다. getIssueStatuses : getIssueStatuses, // 이슈 상태 목록을 가져온다. getCustomFields : getCustomFields, // 사용자 정의 필드 목록을 가져온다. makeVmSearchObject : makeVmSearchObject, // 검색 조건을 기억한다. getVmSearchObject : getVmSearchObject, // 저장한 검색 조건을 가져와서 vm 에 셋팅한다. makeSearchConditions : makeSearchConditions, // 검색 조건을 만든다. getIssueTableConfigs : getIssueTableConfigs, // 사용자 이슈 목록 테이블 설정 값을 가져와서 적용한다. startExecute : startExecute, // 컨트롤 로딩시 처음으로 시작되는 함수 getResponseData : getResponseData, // 컨트롤 로딩시 처음으로 시작되는 함수 onClickListMode : onClickListMode, // 리스트 모드 변경시 실행되는 함수 setDefaultTableConfig : setDefaultTableConfig // 기본 테이블 설정 세팅 }; // 변수 $scope.vm = { projectId : "", issueTypeId : "", partnerVos : "", search : { keyWord : "", // 검색 title : "", // 제목 description : "", // 내용 combinationIssueNumber : "", // 이슈 번호 issueNumber : "", projectType : "BTS_PROJECT", // 프로젝트 유형 registerDateRange : "", // 등록일 기간 검색 startDateRange : "", // 시작일 기간 검색 completeDateRange : "", // 완료일 기간 검색 dateRange : "", // 기간 검색 severityIds : [], // 중요도 검색 priorityIds : [], // 우선순위 검색 issueStatusIds : [], // 이슈 상태 검색 issueTypeIds : [] // 이슈 유형 검색 }, searchView : false, // 상세 검색 조건 표시 여부 detailView : false, // 상세 모드 변경 값 page : { selectedPage : 0, selectedPageRowCount : String(10) }, tableConfigs : [], // 테이블 셋팅 정보 treeConfigs : [], // 트리 셋팅 정보 responseData : { data : [] }, projectName : "", // 프로젝트 검색 userName : "", // 담당자 검색 registerName : "", // 등록자 검색 projects : [], // 프로젝트 issueStatuses : [], // 이슈 상태 issueTypes : [], // 이슈 유형 partners : [], // 이슈 유형 priorities : [], // 우선 순위 severities : [], // 중요도 users : [], // 담당자 departments : [], // 담당부서 registers : [], // 등록자 customFields : [], // 사용자 정의 필드 issueTableConfigs : [], // 이슈 테이블 설정 issueTreeConfigs : [], // 이슈 테이블 설정 parentIssueId : "", hideCompleteIssue : false, hideDownIssue : "1", //이슈목록에서 전체이슈보기 :0 상위이슈만보기: 1 하위이슈만보기:1 listMode : 0, // 목록 모드 0:기본 리스트 1:트리구조 리스트 allIssue : false }; // 테이블 이벤트 $scope.tableEvent = { changeDetailView : changeDetailView // 상세 화면으로 변경 }; 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.fn.startExecute(); }); $scope.$on("changedIssueListMenu", function (event, args) { $scope.vm.search.keyWord = ""; $rootScope.isMainSearch = false; //$scope.fn.getPageList($scope.vm.page.selectedPage - 1); }); // 검색 조건을 기억한다. - 적용 보류 // 검색 조건을 기억해서 이슈 상세 페이지로 이동 function makeVmSearchObject() { var content = { conditions : JSON.stringify({ search : $scope.vm.search, projects : $scope.vm.projects, users : $scope.vm.users, departments : $scope.vm.departments, registers : $scope.vm.registers, parentIssueId : $scope.vm.parentIssueId }) }; IssueSearch.add($resourceProvider.getContent(content, $resourceProvider.getPageContent(0, 0))).then(function (result) { if (result.data.message.status === "success") { } else { SweetAlert.error($filter("translate")("issue.failedToSaveFieldConditions"), result.data.message.message); // 검색 필드 조건 저장 실패 } }); } // 서버에 저장한 이슈 검색 조건을 가져온다. function getVmSearchObject(keyWord = null, allIssue = false) { IssueSearch.detail($resourceProvider.getContent({}, $resourceProvider.getPageContent(0, 0))).then(function (result) { if (result.data.message.status === "success") { if ($rootScope.isDefined(result.data.data)) { var issueListSearchObject = JSON.parse(result.data.data); // 이슈 번호만 적용한다. - 삭제시 처리방법때문에 다른 속성은 적용 보류 $scope.vm.search = issueListSearchObject.search; // $scope.vm.users = issueListSearchObject.users; // $scope.vm.departments = issueListSearchObject.departments; // $scope.vm.projects = issueListSearchObject.projects; // $scope.vm.registers = issueListSearchObject.registers; $scope.fn.getPageList(0, true, keyWord, allIssue); } else { $scope.fn.getPageList(0, false, keyWord, allIssue); } } else { SweetAlert.error($filter("translate")("issue.failedToGetSearchFieldCondition"), result.data.message.message); // 검색 필드 조건 가져오기 실패 } }); } $scope.vm.issueIds = []; // 상세 화면으로 변경한다. function changeDetailView(id, isBack = false) { $scope.vm.tableConfigs = []; $scope.vm.detailView = true; $scope.fn.makeTableConfigs(); // chrome 에서 마우스 떠난걸 감지 못해서 이벤트 추가. $(".full-height-scroll").trigger("mouseleave"); // 테이블을 다시 그릴수 있게 데이터 바인딩을 다시한다. var temp = angular.copy($scope.vm.responseData.data); $scope.vm.responseData.data = angular.copy(temp); if (!isBack) { $scope.vm.issueIds.push(id); } // 현재 상세화면으로 보려고하는 이슈 id를 기억한다. $rootScope.currentDetailIssueId = id; // 이슈 상세 화면 요청 // $scope.$broadcast("getIssueDetail", { // id : id // }); } // 목록 화면으로 변경한다. function listView() { $scope.vm.issueIds = []; $scope.vm.detailView = false; // 이슈 테이블 설정 $scope.fn.makeTableConfigs(); var temp = angular.copy($scope.vm.responseData.data); $scope.vm.responseData.data = angular.copy(temp); // 마지막으로 보고있던 이슈 id를 초기화한다. $rootScope.currentDetailIssueId = null; $scope.$broadcast("getIssueList", {id: $rootScope.currentDetailIssueId}); } // 이슈 테이블 설정 function makeTableConfigs() { $scope.vm.tableConfigs = []; $scope.vm.treeConfigs = []; $scope.vm.tableConfigs.push($tableProvider.config() .setDType("checkbox") .setHWidth("width-20-p") .setDAlign("text-center")); // 상세형 일때때 // if ($scope.vm.detailView) { // $scope.vm.tableConfigs.push($tableProvider.config() // .setHName("issue.issueTitle") // .setDName("title") // .setDType("renderer") // .setHWidth("bold") // .setDRenderer("ISSUE_DETAIL_FLOATING")); // } // else { // $scope.vm.tableConfigs.push($tableProvider.config() // .setHName("issue.issueTitle") // .setDName("title") // .setDType("renderer") // .setHWidth("bold") // .setDRenderer("ISSUE_DETAIL_FLOATING")); // // angular.forEach($scope.vm.issueTableConfigs, function (issueTableConfig) { // // 표시 대상인 컬럼만 화면에 그려준다. // if (issueTableConfig.display) { // // 테이블의 컬럼을 만들어준다. // $scope.fn.setTableColumn(issueTableConfig); // } // }); // } angular.forEach($scope.vm.issueTableConfigs, function (issueTableConfig) { // 표시 대상인 컬럼만 화면에 그려준다. 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 "REGISTER_DATE" : // 등록일 $scope.vm.treeConfigs.push($treeProvider.config() .setDName("registerDate")); 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; } } } } // 테이블의 컬럼을 만들어준다. function setTableColumn(issueTableConfig) { // 일반 컬럼 switch(issueTableConfig.key) { case "ISSUE_TITLE" : // 이슈 제목 $scope.vm.tableConfigs.push($tableProvider.config() .setHName("issue.issueTitle") .setDName("title") .setDType("renderer") .setHWidth("bold " + issueTableConfig.width) .setDAlign("text-center") .setDRenderer("ISSUE_TITLE")); break; case "PRIORITY" : // 우선순위 $scope.vm.tableConfigs.push($tableProvider.config() .setHName("common.priority") .setDName("priorityId") .setDType("renderer") .setHWidth("bold " + issueTableConfig.width) .setDAlign("text-center") .setDRenderer("COMMON_PRIORITY")); break; case "SEVERITY" : // 중요도 $scope.vm.tableConfigs.push($tableProvider.config() .setHName("common.importance") .setDName("severityId") .setDType("renderer") .setHWidth("bold " + issueTableConfig.width) .setDAlign("text-center") .setDRenderer("COMMON_SEVERITY")); break; case "ISSUE_TYPE" : // 이슈 유형 $scope.vm.tableConfigs.push($tableProvider.config() .setHName("issue.issueType") .setDName("issueTypeId") .setDType("renderer") .setHWidth("bold " + issueTableConfig.width) .setDAlign("text-center") .setDRenderer("COMMON_ISSUE_TYPE")); break; case "ASSIGNEE_TEAM" : // 담당부서 $scope.vm.tableConfigs.push($tableProvider.config() .setHName("common.assigneeTeam") .setDName("departmentName") .setDType("renderer") .setHWidth("bold " + issueTableConfig.width) .setDAlign("text-center") .setDRenderer("ISSUE_DEPARTMENT")); break; case "REGISTER" : // 등록자 $scope.vm.tableConfigs.push($tableProvider.config() .setHName("common.register") .setDName("registerId") .setHWidth("bold " + issueTableConfig.width) .setDAlign("text-center")); break; case "REGISTER_DATE" : // 등록일 $scope.vm.tableConfigs.push($tableProvider.config() .setHName("common.registerDate") .setDName("registerDate") .setHWidth("bold " + issueTableConfig.width) .setDAlign("text-center")); break; case "PERIOD" : // 기간 $scope.vm.tableConfigs.push($tableProvider.config() .setHName("common.period") .setDType("renderer") .setHWidth("bold " + issueTableConfig.width) .setDAlign("text-center") .setDRenderer("ISSUE_DUE_DATE")); break; case "MODIFY_DATE" : // 최근 변경일 $scope.vm.tableConfigs.push($tableProvider.config() .setHName("common.lastChangeDate") .setHWidth("bold " + issueTableConfig.width) .setDAlign("text-center") .setDName("modifyDate")); break; 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; case "COMPANY" : // 업체 $scope.vm.tableConfigs.push($tableProvider.config() .setHName("common.company") .setDName("companyName") .setDType("renderer") .setHWidth("bold " + issueTableConfig.width) .setDAlign("text-center") .setDRenderer("USE_COMPANY")); break; case "ISP" : // ISP $scope.vm.tableConfigs.push($tableProvider.config() .setHName("common.isp") .setDName("ispName") .setDType("renderer") .setHWidth("bold " + issueTableConfig.width) .setDAlign("text-center") .setDRenderer("USE_ISP")); break; case "HOSTING" : // HOSTING $scope.vm.tableConfigs.push($tableProvider.config() .setHName("common.hosting") .setDName("hostingName") .setDType("renderer") .setHWidth("bold " + issueTableConfig.width) .setDAlign("text-center") .setDRenderer("USE_HOSTING")); 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.tableConfigs.push($tableProvider.config() .setHName(customField.name) .setDType("renderer") .setDName("useValue"+count) .setHWidth("bold " + issueTableConfig.width) .setDAlign("text-center") .setColumnHint(customField) .setDRenderer("ISSUE_CUSTOM_FIELD_VALUE_VIEW")); break; } } } } // 검색 필드 초기화 function initSearch() { $state.go($state.current, {}, {reload : true}); /*IssueSearch.remove($resourceProvider.getContent({screen : "ISSUE_LIST"}, $resourceProvider.getPageContent(0, 0))).then(function (result) { if (result.data.message.status == "success") { $state.go($state.current, {}, {reload : true}); } else { SweetAlert.swal("검색 필드 초기화 실패", result.data.message.message, "error"); } });*/ } // 이슈 검색 조건을 만든다. function makeSearchConditions() { var conditions = { allIssue : $scope.vm.allIssue, 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 : "", endRegisterDate : "", beginStartDate : "", endStartDate : "", beginCompleteDate : "", endCompleteDate : "", dateRange: "", hideCompleteIssue: $scope.vm.hideCompleteIssue, hideDownIssue : $scope.vm.hideDownIssue, isTree : $scope.vm.listMode === 1, projectIds : (function () { var projectIds = []; if (!$scope.vm.allIssue) { //전체 키워드 검색이 아닐 경우에만 프로젝트ID push angular.forEach($scope.vm.projects, function (project) { projectIds.push(project.id); }); } return projectIds; })(), issueStatusIds : (function () { var issueStatusIds = []; angular.forEach($scope.vm.search.issueStatusIds, function (issueStatusId) { issueStatusIds.push(issueStatusId.fieldKey); }); return issueStatusIds; })(), issueTypeIds : (function () { var issueTypeIds = []; if (!$scope.vm.allIssue) { //전체 키워드 검색이 아닐 경우에만 이슈유형ID push angular.forEach($scope.vm.search.issueTypeIds, function (issueTypeId) { issueTypeIds.push(issueTypeId.fieldKey); }); } return issueTypeIds; })(), priorityIds : (function () { var priorityIds = []; angular.forEach($scope.vm.search.priorityIds, function (priorityId) { priorityIds.push(priorityId.fieldKey); }); return priorityIds; })(), severityIds : (function () { var severityIds = []; angular.forEach($scope.vm.search.severityIds, function (severityId) { severityIds.push(severityId.fieldKey); }); return severityIds; })(), userIds : (function () { var userIds = []; angular.forEach($scope.vm.users, function (user) { userIds.push(user.id); }); return userIds; })(), departmentIds : (function () { var departmentIds = []; angular.forEach($scope.vm.departments, function (department) { departmentIds.push(department.id); }); return departmentIds; })(), registerIds : (function () { var registerIds = []; angular.forEach($scope.vm.registers, function (register) { registerIds.push(register.id); }); return registerIds; })(), issueCustomFields : (function () { var issueCustomFields = []; angular.forEach($scope.vm.customFields, function (customField) { var useValues = []; if (angular.isArray(customField.useValues)) { angular.forEach(customField.useValues, function (useValue) { useValues.push(useValue.value); }); } else { useValues.push(customField.useValues); } // useValues 를 배열로 변환한다. var temp = angular.copy(customField); temp.useValues = useValues; issueCustomFields.push(temp); }); return issueCustomFields; })() }; // 등록일 if ($rootScope.isDefined($scope.vm.search.registerDateRange)) { var registerDateRange = $scope.vm.search.registerDateRange.split("~"); conditions.beginRegisterDate = registerDateRange[0].trim(); conditions.endRegisterDate = registerDateRange[1].trim(); } // 시작일 if ($rootScope.isDefined($scope.vm.search.startDateRange)) { var startDateRange = $scope.vm.search.startDateRange.split("~"); conditions.beginStartDate = startDateRange[0].trim(); conditions.endStartDate = startDateRange[1].trim(); } // 종료일 if ($rootScope.isDefined($scope.vm.search.completeDateRange)) { var completeDateRange = $scope.vm.search.completeDateRange.split("~"); conditions.beginCompleteDate = completeDateRange[0].trim(); conditions.endCompleteDate = completeDateRange[1].trim(); } // 기간 if ($rootScope.isDefined($scope.vm.search.dateRange)) { conditions.dateRange = $scope.vm.search.dateRange.trim(); } return conditions; } function getTreeList() { } // 이슈 목록을 조회한다. function getPageList(selectedPage, detail = false, keyWord = null, allIssue = false) { $rootScope.spinner = true; // 프로그래스 바 if (selectedPage < 0) { selectedPage = 0; } if (allIssue) { $scope.vm.allIssue = true; $rootScope.$broadcast("getAllIssuePageList"); } if (keyWord != null) { $scope.vm.search.keyWord = keyWord; $rootScope.isMainSearch = true; $scope.vm.allIssue = true; $rootScope.$broadcast("getPageListKeyWord", {keyWord: $scope.vm.search.keyWord}); } if ($scope.vm.hideCompleteIssue) { $scope.vm.hideCompleteIssue = true; } // if ($scope.vm.hideDownIssue) { // $scope.vm.hideDownIssue = true; // } // 현재 페이지 정보 var currentPage = 0; // 쿠키에 선택한 페이지 정보가 없으면 기본 페이지 정보 0 을 저장 if (angular.isUndefined(selectedPage) || selectedPage === "") { currentPage = $scope.vm.page.selectedPage; } else { currentPage = selectedPage; } // 검색 기본값 세팅 $scope.vm.search.issueTypeIds = []; $scope.vm.projects = []; if (!$scope.vm.allIssue && keyWord == null || keyWord === '') { // 메뉴에서 선택된 이슈 유형을 기본으로 추가 if ($rootScope.issueTypeMenu != null) { $scope.vm.pageTitle = $rootScope.issueTypeMenu.name; $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 = ""; } // 이슈 검색 조건을 만든다. var conditions = $scope.fn.makeSearchConditions(); if ($rootScope.previousGetParams != null) $rootScope.previousGetParams = null; Issue.find($resourceProvider.getContent(conditions, $resourceProvider.getPageContent(currentPage, $scope.vm.page.selectedPageRowCount))).then(function (result) { if (result.data.message.status === "success") { $scope.vm.page.selectedPage = currentPage + 1; $scope.vm.responseData = result.data; 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; $scope.vm.issueNumber = result.data.data[0].issueNumber; $scope.vm.projectName = result.data.data[0].projectName; if (detail) { changeDetailView(result.data.data[0].id); } } else { // 값이 없을때 값을 넣어주려고 하는 의도 // $scope.vm.responseData = result.data; result.data = $scope.vm.responseData; } } else { SweetAlert.error($filter("translate")("issue.failedIssueLookup"), result.data.message.message); // 이슈 조회 실패 } $rootScope.spinner = false; // 프로그래스 바 }); } function getResponseData() { return $scope.data; } // 이메일 프로젝트 경로로 이동 후 상세 진입시 조회 function getDetailList(projectKey, number) { var conditions = { projectKey : projectKey, combinationIssueNumber : number }; Issue.find($resourceProvider.getContent(conditions, $resourceProvider.getPageContent(0, 1))).then(function (result) { if (result.data.message.status === "success") { if (result.data.data != null && result.data.data.length > 0) { $scope.vm.projectKey = result.data.data[0].projectKey; $scope.vm.issueNumber = result.data.data[0].issueNumber; $scope.vm.responseData = result.data; changeDetailView(result.data.data[0].id); } } else { SweetAlert.error($filter("translate")("issue.failedIssueLookup"), result.data.message.message); // 이슈 조회 실패 } }); } // 검색조건에서 해당 프로젝트 찾기 function findProjectSearch(projectId) { var projects = $scope.vm.projects; var find = false; for (let i = 0; i < projects.length; i++) { if (projects[i].id == projectId) { find = true; break; } } return find; } // 페이지 변경 function changePageRowCount() { $scope.fn.getPageList(0); } // 엑셀 import 팝업 호출 function importExcel() { $uibModal.open({ templateUrl : 'views/issue/issueExcelImport.html', size : "lg", controller : 'issueImportExcelController', backdrop : 'static' }); } // 이슈 생성 팝업 호출 function add() { $uibModal.open({ templateUrl : 'views/issue/issueAdd.html', size : "lg", controller : 'issueAddController', backdrop : 'static' }); } // 이슈 다중 상태 변경 function modifyMultiIssueStatus() { var issueIds = []; angular.forEach($scope.vm.responseData.data, function (data) { if (data.checked) { issueIds.push(data.id); $scope.vm.projectId = data.projectId; } }); if (issueIds.length < 1) { SweetAlert.warning($filter("translate")("issue.selectionCheck"), $filter("translate")("issue.selectIssueToChangeStatus")); // 선택 대상 확인, 상태 변경할 이슈를 선택하세요. return; } $uibModal.open({ templateUrl : 'views/issue/issueModifyStatus.html', size : "md", controller : 'issueModifyStatusController', backdrop : 'static', resolve : { parameter : function () { return { issueIds : issueIds, projectId : $scope.vm.projectId }; } } }); } // 이슈 수정 팝업 호출 function modify(id, downTotalCount) { $uibModal.open({ templateUrl : 'views/issue/issueModify.html', size : "lg", controller : 'issueModifyController', backdrop : 'static', resolve : { parameter : function () { return { id : id, issueTypeId : $scope.vm.viewer.issueTypeVo.id, inheritPartners : $scope.vm.viewer.issueTypeVo.inheritPartners, usePartner : $scope.vm.viewer.usePartnerVos, downTotalCount : downTotalCount }; } } }); } function addRelationIssueForm(id, project, issueTypeId) { $uibModal.open({ templateUrl : 'views/issue/issueAddRelation.html', size : "lg", controller : 'issueAddRelationController', backdrop : 'static', resolve : { parameter : function () { return { id : id, project : project, issueTypeId : issueTypeId }; } } }); } function addDownIssueForm(id, project, issueTypeId) { $uibModal.open({ templateUrl : 'views/issue/issueAddDown.html', size : "lg", controller : 'issueAddDownController', backdrop : 'static', resolve : { parameter : function () { return { id : id, project : project, issueTypeId : issueTypeId }; } } }); } // 이슈 삭제 function removes() { var removeIds = []; var removePermission = true; var downIssueIds = false; angular.forEach($scope.vm.responseData.data, function (data) { if (data.checked && data.modifyPermissionCheck) { removeIds.push(data.id); } if (data.checked && !data.modifyPermissionCheck) { removePermission = false; } if (data.downIssueAllCount > 0){ downIssueIds = true; } }); if (!removePermission) { SweetAlert.swal({ html : true, title : $filter("translate")("common.deleteFailed"), // 삭제 실패 text : $filter("translate")("issue.notHaveDeletePermissionExistsAnIssue"), // 삭제 권한이 없는 이슈가 존재합니다. type : "error" }); return; } if (removeIds.length < 1) { SweetAlert.swal({ title : $filter("translate")("common.checkPurgingTargets"), // 삭제 대상 확인 text : $filter("translate")("common.selectDestinationDeletion"), // 삭제 대상을 선택하세요. type : "warning" }); return; } if (downIssueIds) { SweetAlert.swal({ title : $filter("translate")("common.deleteIssue"), // 이슈 삭제 text : $filter("translate")("issue.wantToDeleteSelectDownIssue"), // 하위 이슈가 존재 합니다. 선택한 이슈와 하위 이슈 모두 삭제하겠습니까? 삭제된 이슈는 복구할 수 없습니다. type : "warning", showCancelButton : true, confirmButtonColor : "#DD6B55", confirmButtonText : $filter("translate")("common.delete"), // 삭제 cancelButtonText : $filter("translate")("common.cancel"), // 취소 closeOnConfirm : false, closeOnCancel : false }, function (isConfirm) { if (isConfirm) { //이슈 + 하위 삭제 $rootScope.spinner = true; Issue.removeAllIssues($resourceProvider.getContent( { removeIds : removeIds }, $resourceProvider.getPageContent(0, 0))).then(function (result) { if (result.data.message.status === "success") { $timeout(function () { SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // 삭제 성공 }, 100); $scope.fn.listView(); $scope.fn.getPageList(0); } else { $timeout(function () { SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // 삭제 실패 }, 100); } $rootScope.spinner = false; }); } else {// 선택 한 이슈만 삭제 // 삭제 알림 SweetAlert.swal({ title : $filter("translate")("issue.deleteIssue"), // 이슈 삭제 text : $filter("translate")("issue.wantToDeleteOnlySelectIssue"), // 선택한 이슈만 삭제하겠습니까? 삭제된 이슈은 복구할 수 없습니다. type : "warning", showCancelButton : true, confirmButtonColor : "#DD6B55", confirmButtonText : $filter("translate")("common.delete"), // 삭제 cancelButtonText : $filter("translate")("common.cancel"), // 취소 closeOnConfirm : false, closeOnCancel : true }, function (isConfirm) { SweetAlert.close(); if (isConfirm) { $rootScope.spinner = true; Issue.remove($resourceProvider.getContent( { removeIds : removeIds }, $resourceProvider.getPageContent(0, 0))).then(function (result) { if (result.data.message.status === "success") { $timeout(function () { SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // 삭제 성공 }, 100); $scope.fn.listView(); $scope.fn.getPageList(0); } else { $timeout(function () { SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // 삭제 실패 }, 100); } $rootScope.spinner = false; }); } }); } }); } else { // 삭제 알림 SweetAlert.swal({ title : $filter("translate")("issue.deleteIssue"), // 이슈 삭제 text : $filter("translate")("issue.wantToDeleteSelectIssue"), // 선택한 이슈을 삭제하겠습니까? 삭제된 이슈은 복구할 수 없습니다. type : "warning", showCancelButton : true, confirmButtonColor : "#DD6B55", confirmButtonText : $filter("translate")("common.delete"), // 삭제 cancelButtonText : $filter("translate")("common.cancel"), // 취소 closeOnConfirm : false, closeOnCancel : true }, function (isConfirm) { SweetAlert.close(); if (isConfirm) { $rootScope.spinner = true; Issue.remove($resourceProvider.getContent( { removeIds : removeIds }, $resourceProvider.getPageContent(0, 0))).then(function (result) { if (result.data.message.status === "success") { $timeout(function () { SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // 삭제 성공 }, 100); $scope.fn.listView(); $scope.fn.getPageList(0); } else { $timeout(function () { SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // 삭제 실패 }, 100); } $rootScope.spinner = false; }); } }); } } // 이슈 목록 테이블 설정 function addIssueTableConfig() { $uibModal.open({ templateUrl : 'views/issue/issueAddTableConfig.html', size : "lg", controller : 'issueAddTableConfigController', backdrop : 'static', resolve : { parameter : function () { return { issueTypeId : $scope.vm.issueTypeId, allIssue : $scope.vm.allIssue }; } } }); } // 이슈 상태 목록 function getIssueStatuses() { var deferred = $q.defer(); $scope.vm.issueStatuses = []; IssueStatus.find($resourceProvider.getContent({}, $resourceProvider.getPageContent(0, 1000))).then(function (result) { if (result.data.message.status === "success") { angular.forEach(result.data.data, function (issueType) { $scope.vm.issueStatuses.push({ fieldKey : issueType.id, fieldValue : issueType.name }); }); } else { SweetAlert.swal($filter("translate")("common.failedToIssueStatusListLookup"), result.data.message.message, "error"); // 이슈 상태 목록 조회 실패 } deferred.resolve(result.data.data); }); return deferred.promise; } // 이슈 유형 목록 function getIssueTypes() { var deferred = $q.defer(); $scope.vm.issueTypes = []; IssueType.find($resourceProvider.getContent({}, $resourceProvider.getPageContent(0, 1000))).then(function (result) { if (result.data.message.status === "success") { angular.forEach(result.data.data, function (issueType) { $scope.vm.issueTypes.push({ fieldKey : issueType.id, fieldValue : issueType.name }); }); } else { SweetAlert.swal($filter("translate")("issue.failedToIssueTypeListLookup"), result.data.message.message, "error"); // 이슈 유형 목록 조회 실패 } deferred.resolve(result.data.data); }); return deferred.promise; } // 이슈유형 별 파트너 목록 function getUsePartner() { var deferred = $q.defer(); $scope.vm.partners = []; Issue.findPartners($resourceProvider.getContent({issueTypeId : $rootScope.getCurrentIssueTypeId()}, $resourceProvider.getPageContent(0, 1))).then(function (result) { if (result.data.message.status === "success") { angular.forEach(result.data.data, function (partner) { $scope.vm.partners.push(partner); }); //$scope.vm.partnerVos = result.data.data; } else { SweetAlert.swal($filter("translate")("issue.failedToPartnerListLookup"), result.data.message.message, "error"); // 파트너 목록 조회 실패 } deferred.resolve(result.data.data); }); return deferred.promise; } // 우선순위 목록 function getPriorities() { var deferred = $q.defer(); $scope.vm.priorities = []; Priority.find($resourceProvider.getContent({}, $resourceProvider.getPageContent(0, 1000))).then(function (result) { if (result.data.message.status === "success") { angular.forEach(result.data.data, function (prioritiy) { $scope.vm.priorities.push({ fieldKey : prioritiy.id, fieldValue : prioritiy.name }); }); } else { SweetAlert.swal($filter("translate")("issue.failedToPriorityListLookup"), result.data.message.message, "error"); // 우선순위 목록 조회 실패 } deferred.resolve(result.data.data); }); return deferred.promise; } // 중요도 목록 function getSeverities() { var deferred = $q.defer(); $scope.vm.severities = []; Severity.find($resourceProvider.getContent({}, $resourceProvider.getPageContent(0, 1000))).then(function (result) { if (result.data.message.status === "success") { angular.forEach(result.data.data, function (severity) { $scope.vm.severities.push({ fieldKey : severity.id, fieldValue : severity.name }); }); } else { SweetAlert.swal($filter("translate")("issue.failedToCriticalListLookup"), result.data.message.message, "error"); // 중요도 목록 조회 실패 } deferred.resolve(result.data.data); }); return deferred.promise; } // 사용자 정의 필드 목록 function getCustomFields() { var deferred = $q.defer(); $scope.vm.customFields = []; CustomField.find($resourceProvider.getContent({}, $resourceProvider.getPageContent(0, 1000))).then(function (result) { if (result.data.message.status === "success") { angular.forEach(result.data.data, function (customField) { switch (customField.customFieldType) { case "INPUT" : case "NUMBER" : case "DATETIME" : case "IP_ADDRESS" : case "EMAIL" : case "SITE" : case "TEL" : customField.useValues = ""; break; case "MULTI_SELECT" : case "SINGLE_SELECT" : customField.useValues = []; break; } $scope.vm.customFields.push(customField); }); } else { SweetAlert.swal($filter("translate")("issue.failedToUserDefinedFieldListLookup"), result.data.message.message, "error"); // 사용자 정의 필드 목록 조회 실패 } deferred.resolve(result.data.data); }); return deferred.promise; } // 사용자 이슈 목록 테이블 설정 값을 가져와서 적용한다. function getIssueTableConfigs() { var deferred = $q.defer(); var content = { issueTypeId : (function () { var id = ""; if ($rootScope.allIssueList) { id = -1; } else { id = $rootScope.getCurrentIssueTypeId(); } return id; })() } IssueTableConfig.detail($resourceProvider.getContent(content, $resourceProvider.getPageContent(0, 1000))).then(function (result) { if (result.data.message.status !== "success") { SweetAlert.error($filter("translate")("issue.failedToIssueTableColumnLookup"), result.data.message.message); // 이슈 테이블 컬럼 조회 실패 } deferred.resolve(result.data.data); }); 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() { // 이슈 상세화면 이슈 이동 내역 저장 $scope.vm.issueIds = []; // 쿠키 읽기 var paramKeyWord = null; var keyWord = $rootScope.getCookie("searchKeyword"); if (keyWord != null && keyWord !== '') { paramKeyWord = keyWord; $rootScope.deleteCookie("searchKeyword"); } // 파라미터 읽기 var params = $rootScope.previousGetParams; if ($rootScope.isDefined(params)) { // $rootScope.$broadcast("makeIssueSearch", { projectKey : params.projectKey, issueNumber : params.issueNumber }); if (params.keyWord != null) { paramKeyWord = params.keyWord; }else { getDetailList(params.projectKey, params.issueNumber); return; } // $rootScope.issueTypeId = $rootScope.issueTypeMenu.id; } var allIssue = $rootScope.allIssueList; var promises = { getIssueTypes : $scope.fn.getIssueTypes(), getPriorities : $scope.fn.getPriorities(), getSeverities : $scope.fn.getSeverities(), getIssueStatuses : $scope.fn.getIssueStatuses(), getCustomFields : $scope.fn.getCustomFields(), }; $q.all(promises).then(function (results){ $log.debug("promises 결과 " , results); // 이슈 테이블 설정 조회 및 적용 후 // 이슈 검색 조건 가져오기 후 // 이슈 조회 // 사용자 이슈 목록 테이블 설정 값을 가져와서 적용한다. $scope.fn.getIssueTableConfigs().then(function (issueTableConfigs) { if ($rootScope.isDefined(issueTableConfigs)) { // 이슈 테이블 설정 정보를 저장 한다. $scope.vm.issueTableConfigs = JSON.parse(issueTableConfigs); $scope.vm.issueTableConfigs.sort(function (a, b) { return parseInt(a.position) < parseInt(b.position) ? -1 : parseInt(a.position) > parseInt(b.position) ? 1 : 0; }); } else { $scope.fn.setDefaultTableConfig(); } // 이슈 테이블 설정 $scope.fn.makeTableConfigs(); }); // 서버에 저장한 이슈 검색 조건을 가져와서 이슈 목록 검색을 진행한다. $scope.fn.getVmSearchObject(paramKeyWord, allIssue); }); } // this.router.navigate(['path/to']) // .then(() => { // window.location.reload(); // }); $scope.fn.startExecute(); } ]); } );