OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2022-02-18 71b8c61b79be17f9ac886b947051d3256a32f159
src/main/webapp/scripts/app/issue/issueModify.controller.js
@@ -9,9 +9,9 @@
    ],
    function (app, angular) {
        app.controller('issueModifyController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$uibModalInstance', '$injector',
            '$controller', '$tableProvider', 'SweetAlert', '$timeout', '$stateParams', '$q', 'parameter', 'Issue', 'User', 'AttachedFile', 'IssueType', 'Priority', 'Severity', 'IssueTypeCustomField', '$filter',
            '$controller', '$tableProvider', 'SweetAlert', '$timeout', '$stateParams', '$q', 'parameter', 'Issue', 'User', 'AttachedFile', 'IssueType', 'Priority', 'Severity', 'HostingField', 'IssueTypeCustomField', '$filter',
            function ($scope, $rootScope, $log, $resourceProvider, $uibModalInstance, $injector, $controller, $tableProvider, SweetAlert, $timeout,
                      $stateParams, $q, parameter, Issue, User, AttachedFile, IssueType, Priority, Severity, IssueTypeCustomField, $filter) {
                      $stateParams, $q, parameter, Issue, User, AttachedFile, IssueType, Priority, Severity, HostingField, IssueTypeCustomField, $filter) {
                $scope.fn = {
                    cancel : cancel,    //  팝업 창 닫기
@@ -19,10 +19,10 @@
                    formCheck : formCheck,  //  폼 체크
                    getUserListCallBack : getUserListCallBack,  //  담당자 autocomplete 페이징
                    getProjectListCallBack : getProjectListCallBack,    //  프로젝트 autocomplete 페이징
                    getCompanyFieldListCallBack : getCompanyFieldListCallBack,    // 업체정보 autocomplete 페이징
                    getIssueCompanyFieldListCallBack : getIssueCompanyFieldListCallBack,    // 업체정보 autocomplete 페이징
                    getIssueDepartmentListCallBack : getIssueDepartmentListCallBack,    // 담당자 -> 담당부서 autocomplete 페이징
                    getIspFieldListCallBack : getIspFieldListCallBack,    // ISP정보 autocomplete 페이징
                    getHostingFieldListCallBack : getHostingFieldListCallBack,    // 호스팅정보 autocomplete 페이징
                    getIssueIspFieldListCallBack : getIssueIspFieldListCallBack,    // ISP정보 autocomplete 페이징
                    getIssueHostingFieldListCallBack : getIssueHostingFieldListCallBack,    // 호스팅정보 autocomplete 페이징
                    getOptionColor : getOptionColor,    //  우선순위, 중요도 색상으로 Select 태그 적용
                    onFileSelect : onFileSelect,    //  파일 첨부
                    imageUpload : imageUpload,  //  섬머노트 이미지 업로드
@@ -33,26 +33,34 @@
                    setFormByIssueTypeCustomFields : setFormByIssueTypeCustomFields,    //  이슈 유형에 연결된 사용자 정의 필드 정보를 입력 폼에서 사용할 수 있게 가공한다.
                    setUseValueByIssueTypeCustomFields : setUseValueByIssueTypeCustomFields,    //  이슈에서 사용자가 선택한 사용자 정의 필드 값을 입력 폼에 셋팅한다.
                    detail : detail,    //  이슈 정보 조회
                    // removeManager : removeManager,  //  담당자 삭제
                    removeManager : removeManager,  //  담당자 삭제
                    removeDepartment : removeDepartment,  //  담당부서 삭제
                    removeUploadFile : removeUploadFile,    //  특정 파일을 삭제
                    setIssueTypeTemplate : setIssueTypeTemplate,    //  이슈 유형 템플릿 적용하기
                    startExecute : startExecute //  최초 실행
                    startExecute : startExecute, //  최초 실행
                    containsPartner : containsPartner,
                    getPartners : getPartners,
                    getCompanyTypeListCallBack : getCompanyTypeListCallBack,
                    getParentSectorListCallBack : getParentSectorListCallBack,
                    getChildSectorListCallBack : getChildSectorListCallBack,
                    getRegionListCallBack : getRegionListCallBack,
                    getStatusListCallBack : getStatusListCallBack,
                };
                $scope.vm = {
                    partnerVos : "",
                    search : {
                        id : parameter.id,
                        deep : "01"    //  프로젝트 연관된 모든 정보를 어느정도까지 가져올지 결정, 01 - 사용자, 관리자 정보
                        deep : "02"    //  프로젝트 연관된 모든 정보를 어느정도까지 가져올지 결정, 01 - 사용자, 관리자 정보
                    },
                    form : {
                        title : "",    //  제목
                        description : "",   //  내용
                        projects : [],  //  프로젝트
                        companyFields : [], // 업체정보
                        ispFields : [], // ISP 정보
                        hostingFields : [], // 호스팅정보
                        issueTypeId : "",   //  이슈 유형 아이디
                        issueCompanyFields : [], // 업체정보
                        issueIspFields : [], // ISP 정보
                        issueHostingFields : [], // 호스팅정보
                        issueTypeId : parameter.issueTypeId,   //  이슈 유형 아이디
                        priorityId : "",    //  우선순위 아이디
                        severityId : "",    //  중요도 아이디
                        issueStatusId : "", //  이슈 상태 아이디
@@ -63,26 +71,49 @@
                        startCompleteDateRange : "", //  시작일 ~ 종료일
                        issueCustomFields : [],  //  이슈에서 사용되는 사용자 정의 필드
                        removeFiles : [],   //  삭제한 파일 정보
                        companyTypeId : "",
                        companyType : "", //기업구분
                        parentSectorId : "",
                        parentSector : "", //업종(대분류)
                        childSectorId : "",
                        childSector : "", //업종(중분류)
                        regionId : "",
                        region : "", //지역
                        statusId : "",
                        status : "", //상태
                    },
                    typeCategory : {
                        companyType : "COMPANYTYPE",
                        parentSector : "PARENTSECTOR",
                        childSector : "CHILDSECTOR",
                        region : "REGION",
                        status : "STATUS"
                    },
                    projectName : "",   //  프로젝트 명 검색
                    userName : "",  //  사용자 검색
                    departmentName : "",  // 부서명 검색
                    companyId : -1,
                    companyName : "",   // 업체명 검색
                    companyCode : "",   // 업체 코드
                    companyManager : "",   // 업체 담당자
                    companyTel : "",  // 업체 전화번호
                    companyEmail : "",  // 업체 이메일
                    companyUrl : "",  // 업체 url
                    companyMemo : "",  // 업체 비고
                    ispId : -1,
                    ispName : "", // ISP 명
                    ispCode : "", // ISP 코드
                    ispManager : "", // ISP 담당자
                    ispTel : "", // ISP 전화번호
                    ispEmail : "", // ISP 이메일
                    ispUrl : "",  // url
                    ispMemo : "", // ISP 비고
                    hostingId : -1,
                    hostingName : "", // 호스팅명 검색
                    hostingManager : "", // 호스팅 담당자
                    hostingCode : "", // 호스팅 코드
                    hostingTel : "", // 호스팅 전화번호
                    hostingEmail : "", // 호스팅 이메일
                    hostingUrl : "",  // url
                    hostingMemo : "", // 호스팅 비고
                    autoCompletePage : {
                        // user : {
@@ -93,7 +124,7 @@
                            page : 0,
                            totalPage : 0
                        },
                        companyField : {
                        issueCompanyField : {
                            page : 0,
                            totalPage : 0
                        },
@@ -108,6 +139,26 @@
                        hostingField : {
                            page : 0,
                            totalPage : 0
                        },
                        companyType : {
                            page : 0,
                            totalPage : 0
                        },
                        parentSector : {
                            page : 0,
                            totalPage : 0
                        },
                        childSector : {
                            page : 0,
                            totalPage : 0
                        },
                        region : {
                            page : 0,
                            totalPage : 0
                        },
                        status : {
                            page : 0,
                            totalPage : 0
                        }
                    },
                    summerNote : {
@@ -118,7 +169,21 @@
                    priorities : [],    //  우선순위 정보
                    severities : [],    //  중요도 정보
                    fileTableConfigs : [],   //  파일 업로드 정보 테이블
                    inheritPartners : parameter.inheritPartners,
                    downTotalCount : parameter.downTotalCount
                };
                // 연관 일감 관련
                $scope.vm.relationIssueTypes =
                    [
                        { id: 0, name: $filter("translate")("issue.relationIssueType1") },
                        { id: 1, name: $filter("translate")("issue.relationIssueType2") },
                        { id: 2, name: $filter("translate")("issue.relationIssueType3") },
                        { id: 3, name: $filter("translate")("issue.relationIssueType4") },
                        { id: 4, name: $filter("translate")("issue.relationIssueType5") },
                        { id: 5, name: $filter("translate")("issue.relationIssueType6") }
                    ];
                $scope.vm.relationIssueType = $scope.vm.relationIssueTypes[0];
                angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector}));
@@ -136,6 +201,11 @@
                        }
                    }
                });
                $scope.$watch("vm.form.issueTypeId", function (newValue, oldValue) {
                    $scope.vm.partnerVos = $scope.fn.getPartners();
                });
                //  업로드 파일 삭제
                function removeUploadFile(index) {
@@ -158,9 +228,9 @@
                }
                //  담당자 삭제
                // function removeManager(index) {
                //     $scope.vm.form.users.splice(index, 1);
                // }
                function removeManager(index) {
                    $scope.vm.form.users.splice(index, 1);
                }
                // 담당부서 삭제
                function removeDepartment(index) {
@@ -311,8 +381,8 @@
                }
                //  업체정보 autocomplete page 업데이트
                function getCompanyFieldListCallBack(result) {
                    $scope.vm.autoCompletePage.companyField.totalPage = result.data.page.totalPage;
                function getIssueCompanyFieldListCallBack(result) {
                    $scope.vm.autoCompletePage.issueCompanyField.totalPage = result.data.page.totalPage;
                }
                // 부서정보 autocomplete page 업데이트
@@ -321,15 +391,48 @@
                }
                // ISP정보 autocomplete page 업데이트
                function getIspFieldListCallBack(result) {
                function getIssueIspFieldListCallBack(result) {
                    $scope.vm.autoCompletePage.ispField.totalPage = result.data.page.totalPage;
                }
                // 호스팅정보 autocomplete page 업데이트
                function getHostingFieldListCallBack(result) {
                function getIssueHostingFieldListCallBack(result) {
                    $scope.vm.autoCompletePage.hostingField.totalPage = result.data.page.totalPage;
                }
                // 업체 카테고리 autocomplete page 업데이트
                function getCompanyTypeListCallBack(result) {
                    $scope.vm.autoCompletePage.companyType.totalPage = result.data.page.totalPage;
                }
                // 업체 카테고리 autocomplete page 업데이트
                function getParentSectorListCallBack(result, value) {
                    if (value === "") {
                        $scope.vm.form.parentSectorId = "";
                        if ($rootScope.isDefined($scope.vm.form.parentSectors) && $rootScope.isDefined($scope.vm.form.parentSectors[0])) {
                            $scope.vm.form.parentSectors[0].id = "";
                        }
                        $scope.vm.form.childSectorId = "";
                        $scope.vm.form.childSector = "";
                        $scope.vm.form.childSectors = [];
                    }
                    $scope.vm.autoCompletePage.parentSector.totalPage = result.data.page.totalPage;
                }
                // 업체 카테고리 autocomplete page 업데이트
                function getChildSectorListCallBack(result) {
                    $scope.vm.autoCompletePage.childSector.totalPage = result.data.page.totalPage;
                }
                // 업체 카테고리 autocomplete page 업데이트
                function getRegionListCallBack(result) {
                    $scope.vm.autoCompletePage.region.totalPage = result.data.page.totalPage;
                }
                // 업체 카테고리 autocomplete page 업데이트
                function getStatusListCallBack(result) {
                    $scope.vm.autoCompletePage.status.totalPage = result.data.page.totalPage;
                }
                function formCheck(formInvalid) {
                    if (formInvalid) {
@@ -343,174 +446,458 @@
                    return false;
                }
                $scope.$on("companyTypeEvent", function (event, result) {
                    if ($rootScope.isDefined(result) && $rootScope.isDefined(result[0])) {
                        $scope.vm.form.companyTypeId = result[0].id;
                    }
                });
                $scope.$on("parentSectorEvent", function (event, result) {
                    if ($rootScope.isDefined(result) && $rootScope.isDefined(result[0])) {
                        $scope.vm.form.parentSectorId = result[0].id;
                    }  else {
                        $scope.vm.form.parentSectorId = "";
                        if ($rootScope.isDefined($scope.vm.form.parentSectors) && $rootScope.isDefined($scope.vm.form.parentSectors[0])) {
                            $scope.vm.form.parentSectors[0].id = "";
                        }
                    }
                    $scope.vm.form.childSectorId = "";
                    $scope.vm.form.childSector = "";
                    $scope.vm.form.childSectors = [];
                });
                $scope.$on("childSectorEvent", function (event, result) {
                    if ($rootScope.isDefined(result) && $rootScope.isDefined(result[0])) {
                        $scope.vm.form.childSectorId = result[0].id;
                    }
                });
                $scope.$on("regionEvent", function (event, result) {
                    if ($rootScope.isDefined(result) && $rootScope.isDefined(result[0])) {
                        $scope.vm.form.regionId = result[0].id;
                    }
                });
                $scope.$on("statusEvent", function (event, result) {
                    if ($rootScope.isDefined(result) && $rootScope.isDefined(result[0])) {
                        $scope.vm.form.statusId = result[0].id;
                    }
                });
                // 업체정보 결과 값 Event 처리(set)
                $scope.$on("companyFieldEvent", function (event, result) {
                    $scope.vm.companyManager = result[0].manager;
                    $scope.vm.companyTel = result[0].tel;
                    $scope.vm.companyEmail = result[0].email;
                    $scope.vm.companyMemo = result[0].memo;
                    if ($rootScope.isDefined(result) && $rootScope.isDefined(result[0])) {
                        var ispFieldVo = result[0].ispFieldVo;
                        var hostingFieldVo = result[0].hostingFieldVo;
                        $scope.vm.companyId = result[0].id;
                        $scope.vm.companyName = result[0].name;
                        $scope.vm.companyManager = result[0].manager;
                        $scope.vm.companyTel = result[0].tel;
                        $scope.vm.companyEmail = result[0].email;
                        $scope.vm.companyUrl = result[0].url;
                        $scope.vm.companyMemo = result[0].memo;
                        $scope.vm.form.companyTypeId = result[0].companyTypeId;
                        $scope.vm.form.parentSectorId = result[0].parentSectorId;
                        $scope.vm.form.childSectorId = result[0].childSectorId;
                        $scope.vm.form.regionId = result[0].regionId;
                        $scope.vm.form.statusId = result[0].statusId;
                        $scope.vm.form.companyType = result[0].companyTypeName;
                        $scope.vm.form.parentSector = result[0].parentSectorName;
                        $scope.vm.form.childSector = result[0].childSectorName;
                        $scope.vm.form.region = result[0].regionName;
                        $scope.vm.form.status = result[0].statusName;
                        $scope.vm.ispId = "";
                        $scope.vm.ispName = "";
                        $scope.vm.ispCode = "";
                        $scope.vm.ispManager = "";
                        $scope.vm.ispTel = "";
                        $scope.vm.ispEmail = "";
                        $scope.vm.ispUrl = "";
                        $scope.vm.ispMemo = "";
                        $scope.vm.hostingId = "";
                        $scope.vm.hostingName = "";
                        $scope.vm.hostingCode = "";
                        $scope.vm.hostingManager = "";
                        $scope.vm.hostingTel = "";
                        $scope.vm.hostingEmail = "";
                        $scope.vm.hostingUrl = "";
                        $scope.vm.hostingMemo = "";
                        if (ispFieldVo != null) {
                            $scope.vm.form.issueIspFields[0] = angular.copy(ispFieldVo);
                            $scope.vm.ispId = ispFieldVo.id;
                            $scope.vm.ispName = ispFieldVo.name;
                            $scope.vm.ispCode = ispFieldVo.code;
                            $scope.vm.ispManager = ispFieldVo.manager;
                            $scope.vm.ispTel = ispFieldVo.tel;
                            $scope.vm.ispEmail = ispFieldVo.email;
                            $scope.vm.ispUrl = ispFieldVo.url;
                            $scope.vm.ispMemo = ispFieldVo.memo;
                        }
                        if (hostingFieldVo != null) {
                            $scope.vm.form.issueHostingFields[0] = angular.copy(hostingFieldVo);
                            $scope.vm.hostingId = hostingFieldVo.id;
                            $scope.vm.hostingName = hostingFieldVo.name;
                            $scope.vm.hostingCode = hostingFieldVo.code;
                            $scope.vm.hostingManager = hostingFieldVo.manager;
                            $scope.vm.hostingTel = hostingFieldVo.tel;
                            $scope.vm.hostingEmail = hostingFieldVo.email;
                            $scope.vm.hostingUrl = hostingFieldVo.url;
                            $scope.vm.hostingMemo = hostingFieldVo.memo;
                        }
                    }
                });
                // ISP정보 결과 값 Event 처리(set)
                $scope.$on("ispFieldEvent", function (event, result) {
                    $scope.vm.ispCode = result[0].code;
                    $scope.vm.ispManager = result[0].manager;
                    $scope.vm.ispTel = result[0].tel;
                    $scope.vm.ispEmail = result[0].email;
                    $scope.vm.ispMemo = result[0].memo;
                    if ($rootScope.isDefined(result) && $rootScope.isDefined(result[0])) {
                        $scope.vm.ispId = result[0].id;
                        $scope.vm.ispName = result[0].name;
                        $scope.vm.ispCode = result[0].code;
                        $scope.vm.ispManager = result[0].manager;
                        $scope.vm.ispTel = result[0].tel;
                        $scope.vm.ispEmail = result[0].email;
                        $scope.vm.ispUrl = result[0].url;
                        $scope.vm.ispMemo = result[0].memo;
                    }
                });
                // 호스팅정보 결과 값 Event 처리(set)
                $scope.$on("hostingFieldEvent", function (event, result) {
                    $scope.vm.hostingCode = result[0].code;
                    $scope.vm.hostingManager = result[0].manager;
                    $scope.vm.hostingTel = result[0].tel;
                    $scope.vm.hostingEmail = result[0].email;
                    $scope.vm.hostingMemo = result[0].memo;
                    if ($rootScope.isDefined(result) && $rootScope.isDefined(result[0])) {
                        $scope.vm.hostingId = result[0].id;
                        $scope.vm.hostingName = result[0].name;
                        $scope.vm.hostingCode = result[0].code;
                        $scope.vm.hostingManager = result[0].manager;
                        $scope.vm.hostingTel = result[0].tel;
                        $scope.vm.hostingEmail = result[0].email;
                        $scope.vm.hostingUrl = result[0].url;
                        $scope.vm.hostingMemo = result[0].memo;
                    }
                });
                function formSubmit() {
                    $rootScope.spinner = true;
                    var content = {
                        id : parameter.id,
                        title : $rootScope.preventXss($scope.vm.form.title),    //  제목
                        description : $rootScope.preventXss($scope.vm.form.description),   //  내용
                        projectId : (function () {   //  프로젝트 아이디
                            var projectId = "";
                            if ($scope.vm.form.projects.length > 0) {
                                projectId = $scope.vm.form.projects[0].id;
                            }
                            return projectId;
                        })(),
                        companyId : (function () {   //  프로젝트 아이디
                            var companyId = "";
                            if ($scope.vm.form.companyFields.length > 0) {
                                companyId = $scope.vm.form.companyFields[0].id;
                            }
                            return companyId;
                        })(),
                        ispId : (function () {
                            var ispId = "";
                            if ($scope.vm.form.ispFields.length > 0) {
                                ispId = $scope.vm.form.ispFields[0].id;
                            }
                            return ispId;
                        })(),
                        hostingId : (function () {
                            var hostingId = "";
                            if ($scope.vm.form.hostingFields.length > 0) {
                                hostingId = $scope.vm.form.hostingFields[0].id;
                            }
                            return hostingId;
                        })(),
                        issueTypeId : $scope.vm.form.issueTypeId,   //  이슈 유형 아이디
                        priorityId : $scope.vm.form.priorityId,    //  우선순위 아이디
                        severityId : $scope.vm.form.severityId,    //  중요도 아이디
                        issueStatusId : $scope.vm.form.issueStatusId,   //  이슈 상태 아이디
                        userIds : (function () {
                            var userIds = [];
                            angular.forEach($scope.vm.form.users, function (user) {
                                userIds.push(user.id);
                            });
                            return userIds;
                        })(),
                        departmentIds : (function () {
                            var departmentIds = [];
                            angular.forEach($scope.vm.form.departments, function (department) {
                                departmentIds.push(department.id);
                            });
                            return departmentIds;
                        })(),
                        removeFiles : $scope.vm.form.removeFiles,
                        attachedFileIds : (function () {
                            var attachedFileIds = [];
                            angular.forEach($scope.vm.form.attachedFiles, function (attachedFile) {
                                if ($scope.vm.form.description.indexOf(attachedFile.path) !== -1) {
                                    attachedFileIds.push(attachedFile.id);
                                }
                            });
                            return attachedFileIds;
                        })(),
                        startCompleteDateRange : $scope.vm.form.startCompleteDateRange,
                        issueCustomFields : (function () {    //  이슈에서 사용되는 사용자 정의 필드
                            var issueCustomFields = [];
                            angular.forEach($scope.vm.form.issueCustomFields, function (issueCustomField) {
                                var useValues = [];
                                if (angular.isArray(issueCustomField.useValues)) {
                                    angular.forEach(issueCustomField.useValues, function (useValue) {
                                        useValues.push(useValue.value);
                                    });
                                }
                                else {
                                    useValues.push(issueCustomField.useValues);
                    let inheritYn = false;
                    if ($scope.vm.inheritPartners && $scope.vm.downTotalCount > 0) {
                        SweetAlert.swal({
                                title : $filter("translate")("issue.modifyDownIssue"), // 하위 이슈 변경
                                text : $filter("translate")("issue.wantToInheritPartnersOfParentIssue"), // 상위이슈의 파트너 정보(업체/ISP/호스팅)를 적용시키겠습니까?
                                type : "warning",
                                showCancelButton : true,
                                confirmButtonColor : "#DD6B55",
                                confirmButtonText : $filter("translate")("common.ok"), // 네
                                cancelButtonText : $filter("translate")("common.no"), // 아니오
                                closeOnConfirm : false,
                                closeOnCancel : false
                            },
                            function (isConfirm) {
                                if (isConfirm) {
                                    inheritYn = true;
                                }
                                //  useValues 를 배열로 변환한다.
                                var temp = angular.copy(issueCustomField);
                                temp.useValues = useValues;
                                issueCustomFields.push(temp);
                                var content = {
                                    id : parameter.id,
                                    title : $rootScope.preventXss($scope.vm.form.title),    //  제목
                                    description : $rootScope.preventXss($scope.vm.form.description),   //  내용
                                    inheritYn : inheritYn,
                                    companyName : $scope.vm.companyName,
                                    companyManager : $scope.vm.companyManager,
                                    companyTel : $scope.vm.companyTel,
                                    companyEmail :$scope.vm.companyEmail,
                                    companyUrl : $scope.vm.companyUrl,
                                    companyMemo : $scope.vm.companyMemo,
                                    companyTypeId : (function () {
                                        var companyTypeId = null;
                                        if ($scope.vm.form.companyTypes != null && $scope.vm.form.companyTypes.length > 0) {
                                            companyTypeId = $scope.vm.form.companyTypes[0].id;
                                        } else {
                                            companyTypeId = $scope.vm.form.companyTypeId;
                                        }
                                        return companyTypeId;
                                    })(),
                                    parentSectorId : (function () {
                                        var parentSectorId = null;
                                        if ($scope.vm.form.parentSectors != null && $scope.vm.form.parentSectors.length > 0) {
                                            parentSectorId = $scope.vm.form.parentSectors[0].id;
                                        } else {
                                            parentSectorId = $scope.vm.form.parentSectorId;
                                        }
                                        return parentSectorId;
                                    })(),
                                    childSectorId : (function () {
                                        var childSectorId = null;
                                        if ($scope.vm.form.childSectors != null && $scope.vm.form.childSectors.length > 0) {
                                            childSectorId = $scope.vm.form.childSectors[0].id;
                                        } else {
                                            childSectorId = $scope.vm.form.childSectorId;
                                        }
                                        return childSectorId;
                                    })(),
                                    regionId : (function () {
                                        var regionId = null;
                                        if ($scope.vm.form.regions != null && $scope.vm.form.regions.length > 0) {
                                            regionId = $scope.vm.form.regions[0].id;
                                        } else {
                                            regionId = $scope.vm.form.regionId;
                                        }
                                        return regionId;
                                    })(),
                                    statusId : (function () {
                                        var statusId = null;
                                        if ($scope.vm.form.statuses != null && $scope.vm.form.statuses.length > 0) {
                                            statusId = $scope.vm.form.statuses[0].id;
                                        } else {
                                            statusId = $scope.vm.form.statusId;
                                        }
                                        return statusId;
                                    })(),
                                    statusName : $scope.vm.form.status,
                                    ispName : $scope.vm.ispName,
                                    ispCode : $scope.vm.ispCode,
                                    ispManager : $scope.vm.ispManager,
                                    ispTel : $scope.vm.ispTel,
                                    ispEmail : $scope.vm.ispEmail,
                                    ispUrl : $scope.vm.ispUrl,
                                    ispMemo : $scope.vm.ispMemo,
                                    hostingName : $scope.vm.hostingName,
                                    hostingCode : $scope.vm.hostingCode,
                                    hostingManager : $scope.vm.hostingManager,
                                    hostingTel : $scope.vm.hostingTel,
                                    hostingEmail : $scope.vm.hostingEmail,
                                    hostingUrl : $scope.vm.hostingUrl,
                                    hostingMemo : $scope.vm.hostingMemo,
                                    projectId : (function () {   //  프로젝트 아이디
                                        var projectId = "";
                                        if ($scope.vm.form.projects.length > 0) {
                                            projectId = $scope.vm.form.projects[0].id;
                                        }
                                        return projectId;
                                    })(),
                                    issueTypeId : $scope.vm.form.issueTypeId,   //  이슈 유형 아이디
                                    priorityId : $scope.vm.form.priorityId,    //  우선순위 아이디
                                    severityId : $scope.vm.form.severityId,    //  중요도 아이디
                                    issueStatusId : $scope.vm.form.issueStatusId,   //  이슈 상태 아이디
                                    companyId : (function () {
                                        var companyId = null;
                                        if ($scope.vm.form.issueCompanyFields != null && $scope.vm.form.issueCompanyFields.length > 0) {
                                            companyId = $scope.vm.form.issueCompanyFields[0].id;
                                        }
                                        return companyId;
                                    }),
                                    ispId : (function () {
                                        var ispId = null;
                                        if ($scope.vm.form.issueIspFields != null && $scope.vm.form.issueIspFields.length > 0) {
                                            ispId = $scope.vm.form.issueIspFields[0].id;
                                        }
                                        return ispId;
                                    }),
                                    hostingId : (function () {
                                        var hostingId = null;
                                        if ($scope.vm.form.issueHostingFields != null && $scope.vm.form.issueHostingFields.length > 0) {
                                            hostingId = $scope.vm.form.issueHostingFields[0].id;
                                        }
                                        return hostingId;
                                    }),
                                    userIds : (function () {
                                        var userIds = [];
                                        angular.forEach($scope.vm.form.users, function (user) {
                                            userIds.push(user.id);
                                        });
                                        return userIds;
                                    })(),
                                    departmentIds : (function () {
                                        var departmentIds = [];
                                        angular.forEach($scope.vm.form.departments, function (department) {
                                            departmentIds.push(department.id);
                                        });
                                        return departmentIds;
                                    })(),
                                    attachedFileIds : (function () {
                                        var attachedFileIds = [];
                                        angular.forEach($scope.vm.form.attachedFiles, function (attachedFile) {
                                            if ($scope.vm.form.description.indexOf(attachedFile.path) !== -1) {
                                                attachedFileIds.push(attachedFile.id);
                                            }
                                        });
                                        return attachedFileIds;
                                    })(),
                                    issueCompanyFields : (function () {
                                        var issueCompanyFields = [];
                                        if ($scope.vm.form.issueCompanyFields != null && $scope.vm.form.issueCompanyFields.length > 0 ){
                                            var companyField = $scope.vm.form.issueCompanyFields[0];
                                            //사용자가 직접 업체 추가 할 경우
                                            if ($rootScope.isDefined(companyField) && companyField.name !== $scope.vm.companyName) {
                                                return issueCompanyFields;
                                            }
                                            issueCompanyFields.push({
                                                id : companyField.id,
                                                companyId : $scope.vm.companyId,
                                                name : $scope.vm.companyName,
                                                manager : $scope.vm.companyManager,
                                                tel : $scope.vm.companyTel,
                                                email :$scope.vm.companyEmail,
                                                url :$scope.vm.companyUrl,
                                                memo : $scope.vm.companyMemo,
                                                companyTypeId : $scope.vm.form.companyTypeId,
                                                parentSectorId : $scope.vm.form.parentSectorId,
                                                childSectorId : $scope.vm.form.childSectorId,
                                                regionId : $scope.vm.form.regionId,
                                                statusId : $scope.vm.form.statusId,
                                                statusName : $scope.vm.form.status
                                            });
                                        }
                                        return issueCompanyFields;
                                    })(),
                                    issueIspFields : (function () {
                                        var issueIspFields = [];
                                        if ($scope.vm.form.issueCompanyFields != null && $scope.vm.form.issueCompanyFields.length > 0
                                            && $scope.vm.form.issueCompanyFields[0].ispFieldVo != null
                                            || $scope.vm.form.issueIspFields != null && $scope.vm.form.issueIspFields.length > 0 ){
                                            var ispField = $scope.vm.form.issueIspFields[0];
                                            //사용자가 직접 ISP 추가 할 경우
                                            if ($rootScope.isDefined(ispField) && ispField.name !== $scope.vm.ispName) {
                                                return issueIspFields;
                                            }
                                            issueIspFields.push({
                                                ispId : $scope.vm.ispId,
                                                code : $scope.vm.ispCode,
                                                name : $scope.vm.ispName,
                                                manager : $scope.vm.ispManager,
                                                tel : $scope.vm.ispTel,
                                                email :$scope.vm.ispEmail,
                                                url :$scope.vm.ispUrl,
                                                memo : $scope.vm.ispMemo
                                            });
                                        }
                                        return issueIspFields;
                                    })(),
                                    issueHostingFields : (function () {
                                        var issueHostingFields = [];
                                        if ($scope.vm.form.issueCompanyFields != null && $scope.vm.form.issueCompanyFields.length > 0
                                            && $scope.vm.form.issueCompanyFields[0].hostingFieldVo != null
                                            || $scope.vm.form.issueHostingFields != null && $scope.vm.form.issueHostingFields.length > 0 ){
                                            var hostingField = $scope.vm.form.issueHostingFields[0];
                                            //사용자가 직접 호스팅 추가 할 경우
                                            if ($rootScope.isDefined(hostingField) && hostingField.name !== $scope.vm.hostingName) {
                                                return issueHostingFields;
                                            }
                                            issueHostingFields.push({
                                                hostingId : $scope.vm.hostingId,
                                                name : $scope.vm.hostingName,
                                                code : $scope.vm.hostingCode,
                                                manager : $scope.vm.hostingManager,
                                                tel : $scope.vm.hostingTel,
                                                email :$scope.vm.hostingEmail,
                                                url :$scope.vm.hostingUrl,
                                                memo : $scope.vm.hostingMemo
                                            });
                                        }
                                        return issueHostingFields;
                                    })(),
                                    removeFiles : $scope.vm.form.removeFiles,
                                    startCompleteDateRange : $scope.vm.form.startCompleteDateRange,
                                    issueCustomFields : (function () {    //  이슈에서 사용되는 사용자 정의 필드
                                        var issueCustomFields = [];
                                        angular.forEach($scope.vm.form.issueCustomFields, function (issueCustomField) {
                                            var useValues = [];
                                            if (angular.isArray(issueCustomField.useValues)) {
                                                angular.forEach(issueCustomField.useValues, function (useValue) {
                                                    useValues.push(useValue.value);
                                                });
                                            }
                                            else {
                                                useValues.push(issueCustomField.useValues);
                                            }
                                            //  useValues 를 배열로 변환한다.
                                            var temp = angular.copy(issueCustomField);
                                            temp.useValues = useValues;
                                            issueCustomFields.push(temp);
                                        });
                                        return issueCustomFields;
                                    })()
                                };
                                Issue.modify({
                                    method : "POST",
                                    file : (function () {
                                        var files = [];
                                        angular.forEach($scope.vm.form.files, function (file) {
                                            if (angular.isUndefined(file.id)) {
                                                files.push(file);
                                            }
                                        });
                                        return files;
                                    })(),
                                    //      data 속성으로 별도의 데이터 전송
                                    fields : {
                                        content : content
                                    },
                                    fileFormDataName : "file"
                                }).then(function (result) {
                                    if (result.data.message.status === "success") {
                                        $scope.fn.cancel();
                                        //  이슈 상세 화면 요청
                                        $rootScope.$broadcast("getIssueDetail", {
                                            id : parameter.id
                                        });
                                        $rootScope.$broadcast("getIssueList");
                                    }
                                    else {
                                        SweetAlert.error($filter("translate")("issue.failedIssueModify"), result.data.message.message); // 이슈 수정 실패
                                    }
                                    $rootScope.spinner = false;
                                });
                            });
                            return issueCustomFields;
                        })()
                    };
                    Issue.modify({
                        method : "POST",
                        file : (function () {
                            var files = [];
                            angular.forEach($scope.vm.form.files, function (file) {
                                if (angular.isUndefined(file.id)) {
                                    files.push(file);
                                }
                            });
                            return files;
                        })(),
                        //      data 속성으로 별도의 데이터 전송
                        fields : {
                            content : content
                        },
                        fileFormDataName : "file"
                    }).then(function (result) {
                        if (result.data.message.status === "success") {
                            $scope.fn.cancel();
                            //  이슈 상세 화면 요청
                            $rootScope.$broadcast("getIssueDetail", {
                                id : parameter.id
                            });
                            $rootScope.$broadcast("getIssueList");
                        }
                        else {
                            SweetAlert.error($filter("translate")("issue.failedIssueModify"), result.data.message.message); // 이슈 수정 실패
                        }
                        $rootScope.spinner = false;
                    });
                    }
                }
                function cancel() {
@@ -558,6 +945,21 @@
                    });
                    return deferred.promise;
                }
                // 업체/ISP/호스팅 이름이 포함 여부 확인
                function containsPartner(name) {
                    var result = false;
                    if ($scope.vm.partnerVos != null) {
                        $scope.vm.partnerVos.forEach(function (partnerVo) {
                            if (name === partnerVo.name) {
                                result = true;
                            }
                        });
                    }
                    return result;
                }
                //  중요도 목록
@@ -620,6 +1022,12 @@
                        switch (issueTypeCustomField.customFieldVo.customFieldType) {
                            case "INPUT" :
                            case "SINGLE_SELECT" :
                            case "NUMBER" :
                            case "DATETIME" :
                            case "IP_ADDRESS" :
                            case "EMAIL" :
                            case "SITE" :
                            case "TEL" :
                                issueTypeCustomField.useValues = "";
                                break;
@@ -658,8 +1066,8 @@
                //  이슈 상세 정보
                function detail() {
                    $rootScope.spinner = true;
                    var deferred = $q.defer();
                    Issue.detail($resourceProvider.getContent(
                        $scope.vm.search,
                        $resourceProvider.getPageContent(0, 1))).then(function (result) {
@@ -680,29 +1088,53 @@
                                $scope.vm.form.users = result.data.data.userVos;
                                $scope.vm.form.departments = result.data.data.departmentVos;
                                $scope.vm.form.files = result.data.data.attachedFileVos;
                                //
                                $scope.vm.form.companyFields.push(result.data.data.companyFieldVo);
                                $scope.vm.companyName = result.data.data.companyFieldVo.name;
                                $scope.vm.companyManager = result.data.data.companyFieldVo.manager;
                                $scope.vm.companyTel = result.data.data.companyFieldVo.tel;
                                $scope.vm.companyEmail = result.data.data.companyFieldVo.email;
                                $scope.vm.companyMemo = result.data.data.companyFieldVo.memo;
                                $scope.vm.form.ispFields.push(result.data.data.ispFieldVo);
                                $scope.vm.ispName = result.data.data.ispFieldVo.name;
                                $scope.vm.ispCode = result.data.data.ispFieldVo.code;
                                $scope.vm.ispManager = result.data.data.ispFieldVo.manager;
                                $scope.vm.ispTel = result.data.data.ispFieldVo.tel;
                                $scope.vm.ispEmail = result.data.data.ispFieldVo.email;
                                $scope.vm.ispMemo = result.data.data.ispFieldVo.memo;
                                if (result.data.data.issueCompanyVos != null && result.data.data.issueCompanyVos.length > 0) {
                                    $scope.vm.form.issueCompanyFields = result.data.data.issueCompanyVos;
                                    var issueCompanyFieldValue = result.data.data.issueCompanyVos[0];
                                    $scope.vm.companyId = issueCompanyFieldValue.companyId;
                                    $scope.vm.companyName = issueCompanyFieldValue.name;
                                    $scope.vm.companyManager = issueCompanyFieldValue.manager;
                                    $scope.vm.companyTel = issueCompanyFieldValue.tel;
                                    $scope.vm.companyEmail = issueCompanyFieldValue.email;
                                    $scope.vm.companyUrl = issueCompanyFieldValue.url;
                                    $scope.vm.companyMemo = issueCompanyFieldValue.memo;
                                    $scope.vm.form.companyTypeId = issueCompanyFieldValue.companyTypeId;
                                    $scope.vm.form.companyType = issueCompanyFieldValue.companyTypeName;
                                    $scope.vm.form.parentSectorId = issueCompanyFieldValue.parentSectorId;
                                    $scope.vm.form.parentSector = issueCompanyFieldValue.parentSectorName;
                                    $scope.vm.form.childSectorId = issueCompanyFieldValue.childSectorId;
                                    $scope.vm.form.childSector = issueCompanyFieldValue.childSectorName;
                                    $scope.vm.form.regionId = issueCompanyFieldValue.regionId;
                                    $scope.vm.form.region = issueCompanyFieldValue.regionName;
                                    $scope.vm.form.statusId = issueCompanyFieldValue.statusId;
                                    $scope.vm.form.status = issueCompanyFieldValue.statusName;
                                }
                                if (result.data.data.issueIspVos != null && result.data.data.issueIspVos.length > 0) {
                                    $scope.vm.form.issueIspFields = result.data.data.issueIspVos;
                                    var issueIspFieldValue = result.data.data.issueIspVos[0];
                                    $scope.vm.ispId = issueIspFieldValue.ispId;
                                    $scope.vm.ispName = issueIspFieldValue.name;
                                    $scope.vm.ispCode = issueIspFieldValue.code;
                                    $scope.vm.ispManager = issueIspFieldValue.manager;
                                    $scope.vm.ispTel = issueIspFieldValue.tel;
                                    $scope.vm.ispEmail = issueIspFieldValue.email;
                                    $scope.vm.ispUrl = issueIspFieldValue.url;
                                    $scope.vm.ispMemo = issueIspFieldValue.memo;
                                }
                                $scope.vm.form.hostingFields.push(result.data.data.hostingFieldVo);
                                $scope.vm.hostingName = result.data.data.hostingFieldVo.name;
                                $scope.vm.hostingCode = result.data.data.hostingFieldVo.code;
                                $scope.vm.hostingManager = result.data.data.hostingFieldVo.manager;
                                $scope.vm.hostingTel = result.data.data.hostingFieldVo.tel;
                                $scope.vm.hostingEmail = result.data.data.hostingFieldVo.email;
                                $scope.vm.hostingMemo = result.data.data.hostingFieldVo.memo;
                                if (result.data.data.issueHostingVos != null && result.data.data.issueHostingVos.length > 0) {
                                    $scope.vm.form.issueHostingFields = result.data.data.issueHostingVos;
                                    var issueHostingFieldValue = result.data.data.issueHostingVos[0];
                                    $scope.vm.hostingId = issueHostingFieldValue.hostingId;
                                    $scope.vm.hostingName = issueHostingFieldValue.name;
                                    $scope.vm.hostingCode = issueHostingFieldValue.code;
                                    $scope.vm.hostingManager = issueHostingFieldValue.manager;
                                    $scope.vm.hostingTel = issueHostingFieldValue.tel;
                                    $scope.vm.hostingEmail = issueHostingFieldValue.email;
                                    $scope.vm.hostingUrl = issueHostingFieldValue.url;
                                    $scope.vm.hostingMemo = issueHostingFieldValue.memo;
                                }
                                if ($rootScope.isDefined(result.data.data.startDate)) {
                                    $scope.vm.form.startCompleteDateRange = result.data.data.startDate + " ~ " + result.data.data.completeDate;
@@ -720,10 +1152,9 @@
                        else {
                            SweetAlert.error($filter("translate")("issue.failedToProjectDetails"), result.data.message.message); // 프로젝트 상세 정보 조회 실패
                        }
                        $rootScope.spinner = false;
                        deferred.resolve(result.data.data);
                    });
                    return deferred.promise;
                }
@@ -767,6 +1198,25 @@
                    }
                }
                function getPartners() {
                    if($scope.vm.form.issueTypeId === ""){
                        if ($rootScope.issueTypeMenu != null) {
                            $scope.vm.form.issueTypeId = $rootScope.issueTypeMenu.id
                        }
                    }
                    var content = {
                        issueTypeId : $scope.vm.form.issueTypeId,
                    };
                    Issue.findPartners($resourceProvider.getContent(
                        content,
                        $resourceProvider.getPageContent(0, 1))).then(function (result) {
                        if (result.data.message.status === "success") {
                            $scope.vm.partnerVos = result.data.data;
                        }
                    });
                }
                //  최초 실행
                function startExecute() {
@@ -774,7 +1224,8 @@
                        detail : $scope.fn.detail(),
                        getIssueTypes : $scope.fn.getIssueTypes(),
                        getPriorities : $scope.fn.getPriorities(),
                        getSeverities : $scope.fn.getSeverities()
                        getSeverities : $scope.fn.getSeverities(),
                        getPartners : $scope.fn.getPartners()
                    };
                    $q.all(promises).then(function (results) {
@@ -784,4 +1235,4 @@
                $scope.fn.startExecute();
            }]);
    });
    });