/**
|
* 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();
|
}]);
|
});
|