/** * Created by wisestone on 2018-05-30. */ 'use strict'; define([ 'app', 'angular' ], function (app, angular) { app.controller('projectCustomFieldConfigController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$uibModalInstance', 'IssueType', 'CustomField', 'IssueTypeCustomField', 'SweetAlert', 'parameter', '$q', '$filter', function ($scope, $rootScope, $log, $resourceProvider, $uibModalInstance, IssueType, CustomField, IssueTypeCustomField, SweetAlert, parameter, $q, $filter) { $scope.fn = { cancel : cancel, formSubmit : formSubmit, formCheck : formCheck, getIssueTypes : getIssueTypes, getCustomFields : getCustomFields, startExecute : startExecute, issueTypeChange : issueTypeChange, activeSortable : activeSortable(), }; $scope.vm = { form : { issueTypeId : "", useValue : "" }, issueTypes : [], originCustomFields : [], customFields : [], relationCustomFields : [], useValues : [] }; // 이슈 유형 목록을 가져온다. function getIssueTypes() { var deferred = $q.defer(); IssueType.find($resourceProvider.getContent({projectId : parameter.id}, $resourceProvider.getPageContent(0, 1000))).then(function (result) { if (result.data.message.status === "success") { $scope.vm.issueTypes = result.data.data; } else { SweetAlert.swal($filter("translate")("issue.failedToIssueTypeListLookup"), result.data.message.message, "error"); // "이슈 유형 목록 조회 실패" } deferred.resolve(result.data.data); }); return deferred.promise; } // 사용자 정의 필드 목록을 가져온다. function getCustomFields() { var deferred = $q.defer(); CustomField.find($resourceProvider.getContent({}, $resourceProvider.getPageContent(0, 1000))).then(function (result) { if (result.data.message.status === "success") { $scope.vm.customFields = result.data.data; $scope.vm.originCustomFields = angular.copy(result.data.data); // 사용자 정의 필드 복구에 사용 } else { SweetAlert.swal($filter("translate")("issue.failedToUserDefinedFieldListLookup"), result.data.message.message, "error"); // "사용자 정의 필드 목록 조회 실패" } deferred.resolve(result.data.data); }); return deferred.promise; } // 이슈 유형을 변경하면 프로젝트에서 사용하는 해당 이슈 유형과 연결된 필드 정보를 조회한다. function issueTypeChange() { $scope.vm.customFields = []; // 사용자 정의 필드 목록 초기화 $scope.vm.relationCustomFields = []; if (!$rootScope.isDefined($scope.vm.form.issueTypeId)) { return; } var content = { projectId : parameter.id, issueTypeId : $scope.vm.form.issueTypeId }; IssueTypeCustomField.find($resourceProvider.getContent(content, $resourceProvider.getPageContent(0, 0))).then(function (result) { if (result.data.message.status === "success") { // 화면에서 이름을 표시하기 위해 사용자 정의 필드 명을 name 에 셋팅한다. angular.forEach(result.data.data, function (issueTypeCustomField) { var relationCustomField = angular.copy(issueTypeCustomField.customFieldVo); relationCustomField.checked = issueTypeCustomField.fieldOption == '01'; // 필수 값 여부 $scope.vm.relationCustomFields.push(relationCustomField); for (var i=0; i < result.data.data.length; i++){ $scope.vm.useValues.push(result.data.data[i].useValue) } }); angular.forEach($scope.vm.originCustomFields, function (originCustomField) { var search = false; for (var count in $scope.vm.relationCustomFields) { var relationCustomField = $scope.vm.relationCustomFields[count]; if (originCustomField.id === relationCustomField.id) { search = true; break; } } if (!search) { $scope.vm.customFields.push(originCustomField); } }); } else { SweetAlert.swal($filter("translate")("issue.failedToUserDefinedFieldListLookup"), result.data.message.message, "error"); // "사용자 정의 필드 목록 조회 실패" } }); } // 드래그&드랍을 활성화 시킨다. - 해당 메서드를 같이 사용하면 엘리먼트들의 이동에 제약이 없다. function activeSortable() { return { connectWith : ".connectList", stop : function (e, ui) { } } } function formCheck(formInvalid) { if (formInvalid) { return true; } return false; } function formSubmit() { $rootScope.spinner = true; var content = { useValues : $scope.vm.useValues, projectId : parameter.id, issueTypeId : $scope.vm.form.issueTypeId, relationCustomFields : $scope.vm.relationCustomFields }; IssueTypeCustomField.modify($resourceProvider.getContent( content, $resourceProvider.getPageContent(0, 10))).then(function (result) { if ($scope.vm.useValues === false) { alert("이미 사용중인 필드 입니다.") } if (result.data.message.status === "success") { SweetAlert.success($filter("translate")("project.saveCompleteFieldManagement"), $filter("translate")("project.saveUserDefinedFieldAndIssueTypeConnection")); // "필드 관리 저장 완료", "사용자 정의 필드와 이슈 타입 연결 정보가 저장되었습니다." } else { SweetAlert.error($filter("translate")("project.failedToSaveFieldManagement"), result.data.message.message); // "필드 관리 저장 실패" } $rootScope.spinner = false; }); } function cancel() { $rootScope.$broadcast("closeLayer"); // 팝업이 열리고 나서 js-multi, js-single 등에서 body 이벤트가 날아가는 현상 수정 $uibModalInstance.dismiss('cancel'); } function startExecute() { var promises = { getIssueTypes : $scope.fn.getIssueTypes(), getCustomFields : $scope.fn.getCustomFields() }; $q.all(promises).then(function (results){ $log.debug("promises 결과 " , results); }); } $scope.fn.startExecute(); }]); });