/** * Created by wisestone on 2017-12-21. */ 'use strict'; define([ 'app', 'angular', ], function (app, angular) { app.controller('projectListController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$tableProvider', 'User', '$state', '$uibModal', '$q', 'Project', '$controller', '$injector', 'SweetAlert', '$timeout', '$filter', function ($scope, $rootScope, $log, $resourceProvider, $tableProvider, User, $state, $uibModal, $q, Project, $controller, $injector, SweetAlert, $timeout, $filter) { // 함수 $scope.fn = { initSearch : initSearch, // 검색 초기화 getPageList : getPageList, // 목록 조회 changePageRowCount : changePageRowCount, // 페이지 변경 makeTableConfigs : makeTableConfigs, // 테이블 설정 getUserListCallBack : getUserListCallBack, // single autocomplete 콜백 함수 makeSearchConditions : makeSearchConditions, // 프로젝트 목록 검색 조건을 만든다. add : add, // 프로젝트 생성 removes : removes, // 삭제, setViewSub : setViewSub }; // 변수 $scope.vm = { search : { name : "", // 프로젝트 명 userIds : [], // 관리자 statuses : [], // 상태 }, page : { selectedPage : 0, selectedPageRowCount : String(10) }, tableConfigs : [], responseData : { data : [] }, userName : "", users : [], autoCompletePage : { user : { page : 0, totalPage : 0 } }, options : { statuses : [{ fieldKey : "01", fieldValue : $filter("translate")("common.wait") // "대기" }, { fieldKey : "02", fieldValue : $filter("translate")("common.progress") // "진행" }, { fieldKey : "03", fieldValue : $filter("translate")("common.end") // "종료" }] }, projects : [], // 프로젝트 projectName : "", // 프로젝트 검색 viewSub : true, // 하위 프로젝트 보기 여부 childCount : 0 // 하위 프로젝트 개수 }; // 테이블 이벤트 $scope.tableEvent = { modify : modify, projectCustomFieldConfig : projectCustomFieldConfig, changeLastProject : changeLastProject }; angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector})); // 프로젝트 목록 화면 새로 고침 $scope.$on("getProjectList", function () { $scope.fn.getPageList(0); }); // 프로젝트 목록 테이블 설정 function makeTableConfigs() { $scope.vm.tableConfigs = []; $scope.vm.tableConfigs.push($tableProvider.config() .setDType("checkbox") .setHWidth("width-40-p") .setDAlign("text-center")); $scope.vm.tableConfigs.push($tableProvider.config() .setHName("common.status") .setDType("renderer") .setHWidth("width-50-p bold") .setDAlign("text-center") .setDRenderer("PROJECT_STATUS")); $scope.vm.tableConfigs.push($tableProvider.config() .setHName("common.project") .setHWidth("width-200-p bold ") .setDType("renderer") .setDName("name") .setDAlign("text-left") .setDRenderer("PROJECT_NAME")); $scope.vm.tableConfigs.push($tableProvider.config() .setHName("dashboard.admin") .setHWidth("width-60-p bold") .setDType("renderer") .setDAlign("text-center") .setDRenderer("PROJECT_MANAGER")); $scope.vm.tableConfigs.push($tableProvider.config() .setHName("project.projectDepartment") .setHWidth("width-140-p bold") .setDType("renderer") .setDAlign("text-center") .setDRenderer("PROJECT_DEPARTMENT")); $scope.vm.tableConfigs.push($tableProvider.config() .setHName("project.projectKey") .setHWidth("width-100-p bold") .setDAlign("text-center") .setDName("projectKey")); if ($rootScope.checkMngPermission('USER_PERMISSION_MNG_PROJECT')) { $scope.vm.tableConfigs.push($tableProvider.config() .setHName("common.customField") .setDType("renderer") .setHWidth("width-80-p bold") .setDAlign("text-center") .setDRenderer("CUSTOM_FIELD_CONFIG")); $scope.vm.tableConfigs.push($tableProvider.config() .setHName("project.modifyProject") .setDType("renderer") .setHWidth("width-60-p bold") .setDAlign("text-center") .setDRenderer("BUTTON_MODIFY")); } } // 검색 조건 초기화 function initSearch() { $state.go($state.current, {}, {reload : true}); } // 프로젝트 목록 검색 조건을 만든다. function makeSearchConditions() { return { name : $scope.vm.search.name, userIds : (function () { var userIds = []; angular.forEach($scope.vm.users, function (leader) { userIds.push(leader.id); }); return userIds; })(), statuses : (function () { var statuses = []; angular.forEach($scope.vm.search.statuses, function (status) { statuses.push(status.fieldKey); }); return statuses; })(), roleTypes : ["01", "02"], workspaceManager : true // 프로젝트 목록에서 조회할 때 업무공간 담당자는 모든 항목이 보일수 있도록 한다. }; } // 프로젝트 목록 조회 function getPageList(selectedPage) { if (selectedPage < 0) { selectedPage = 0; } // 현재 페이지 정보 var currentPage = 0; // 쿠키에 선택한 페이지 정보가 없으면 기본 페이지 정보 0 을 저장 if (angular.isUndefined(selectedPage) || selectedPage === "") { currentPage = $scope.vm.page.selectedPage; } else { currentPage = selectedPage; } var conditions = $scope.fn.makeSearchConditions(); Project.find($resourceProvider.getContent(conditions, $resourceProvider.getPageContent(currentPage, $scope.vm.page.selectedPageRowCount))).then(function (result) { if (result.data.message.status === "success") { $scope.vm.childCount = 0; $scope.vm.page.selectedPage = currentPage + 1; if ($scope.vm.viewSub) { var arr = result.data; var datas = []; for (var row of arr.data) { row.depth = 0; datas.push(row); datas = setChildren(row, datas, row.depth); } arr.data = datas; $scope.vm.responseData = arr; } else { $scope.vm.responseData = result.data; } } else { SweetAlert.swal($filter("translate")("project.failedToProjectListLookup"), result.data.message.message, "error"); // "프로젝트 목록 조회 실패" } }); } function setChildren(row, datas, depth) { depth++; var childProjects = row.childProjects; if (childProjects.length > 0) { for (var child of childProjects) { child.depth = depth; datas.push(child); $scope.vm.childCount += 1; setChildren(child, datas, depth); } } return datas; } function changePageRowCount() { $scope.fn.getPageList(0); } function getUserListCallBack(result) { $scope.vm.autoCompletePage.user.totalPage = result.data.page.totalPage; } // 프로젝트 생성 팝업 function add() { $uibModal.open({ templateUrl : 'views/project/projectAdd.html', size : "md", controller : 'projectAddController', backdrop : 'static' }); } // 프로젝트 수정 팝업 function modify(id) { $uibModal.open({ templateUrl : 'views/project/projectModify.html', size : "md", controller : 'projectModifyController', backdrop : 'static', resolve : { parameter : function () { return { id : id }; } } }); } // 필드 관리 function projectCustomFieldConfig(id) { $uibModal.open({ templateUrl : 'views/project/projectCustomFieldConfig.html', size : "md", controller : 'projectCustomFieldConfigController', backdrop : 'static', resolve : { parameter : function () { return { id : id }; } } }); } // 프로젝트 삭제 팝업 function removes() { var removeIds = []; var removePermission = true; 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 (!removePermission) { SweetAlert.swal({ html : true, title : $filter("translate")("common.deleteFailed"), // 삭제 실패 text : $filter("translate")("project.notHaveDeletePermissionExistsProject"), // "삭제 권한이 없는 프로젝트가 존재합니다." type : "error" }); return; } if (removeIds.length < 1) { SweetAlert.swal({ title : $filter("translate")("common.checkPurgingTargets"), // 삭제 대상 확인 text : $filter("translate")("common.selectDestinationDeletion"), // 삭제 대상을 선택하세요. type : "warning" }); return; } // 삭제 알림 SweetAlert.swal({ title : $filter("translate")("project.deleteProject"), // "프로젝트 삭제" text : $filter("translate")("project.wantToDeleteSelectProject"), // "선택한 프로젝트를 삭제하겠습니까? 삭제된 프로젝트는 복구할 수 없습니다." 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; Project.remove($resourceProvider.getContent( { removeIds : removeIds }, $resourceProvider.getPageContent(0, 0))).then(function (result) { if (result.data.message.status === "success") { $timeout(function () { // 목록 화면 갱신 $rootScope.$broadcast("getProjectList", {}); SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // 삭제 성공 }, 100); $scope.fn.getPageList(0); } else { $timeout(function () { SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // 삭제 실패 }, 100); } $rootScope.spinner = false; }); } }); } function setViewSub() { $scope.fn.getPageList(0); } function changeLastProject(projectId) { $rootScope.changeLastProject(projectId); } $scope.fn.makeTableConfigs(); $scope.fn.getPageList(0); } ]); } );