OWL ITS + 탐지시스템(인터넷 진흥원)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
/**
 * 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();
            }]);
    });