OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2022-02-18 71b8c61b79be17f9ac886b947051d3256a32f159
이슈유형 설정에 상위 이슈 업체/ISP/호스팅 상속 기능 추가
1개 파일 추가됨
21개 파일 변경됨
1063 ■■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/domain/IssueType.java 9 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java 79 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/vo/IssueTypeVo.java 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/vo/IssueVo.java 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/form/IssueForm.java 14 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/form/IssueTypeForm.java 17 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/migration/V1_6__alter_data.sql 3 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/mybatis/query-template/issue-template.xml 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/mybatis/query-template/issueType-template.xml 3 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/assets/styles/main.css 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/i18n/ko/global.json 8 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueAddDown.controller.js 70 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueDetail.controller.js 70 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueImportExcel.controller.js 91 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueList.controller.js 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueModify.controller.js 613 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issueType/issueTypeAdd.controller.js 12 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issueType/issueTypeModify.controller.js 14 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/issue/issueDetail.html 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/issueType/issueTypeAdd.html 11 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/issueType/issueTypeModify.html 12 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/domain/IssueType.java
@@ -22,6 +22,7 @@
    private String description;
    private String color;
    private Long usePartner;
    private Boolean inheritPartners;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "workspace_id")
@@ -144,4 +145,12 @@
    public void setIssueTypeApiEndStatuses(Set<IssueTypeApiEndStatus> issueTypeApiEndStatuses) {
        this.issueTypeApiEndStatuses = issueTypeApiEndStatuses;
    }
    public Boolean getInheritPartners() {
        return inheritPartners;
    }
    public void setInheritPartners(Boolean inheritPartners) {
        this.inheritPartners = inheritPartners;
    }
}
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -47,9 +47,7 @@
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Pattern;
import static kr.wisestone.owl.domain.enumType.CustomFieldType.*;
@@ -1276,6 +1274,9 @@
    private void setMapToIssueVo(List<Map<String, Object>> results, List<IssueVo> issueVos, IssueCondition issueCondition, User user) {
        for (Map<String, Object> result : results) {
            IssueVo issueVo = ConvertUtil.convertMapToClass(result, IssueVo.class);
            if (MapUtil.getString(result, "inheritPartners") != null && MapUtil.getString(result, "inheritPartners").equals("1")) {
                issueVo.setInheritPartners(true);
            }
            issueVos.add(issueVo);
            issueCondition.addIssueIds(String.valueOf(issueVo.getId()));
        }
@@ -2126,6 +2127,15 @@
        this.issueIspService.modifyIssueIspField(issue, issueForm, detectIssueChange);
        //  HOSTING 정보 저장
        this.issueHostingService.modifyIssueHostingField(issue, issueForm, detectIssueChange);
        //  파트너정보 하위이슈 상속
        List<Issue> downIssues = this.issueRepository.findByParentIssueId(issue.getId());
        if (issueForm.getInheritYn() != null && issueForm.getInheritYn()
                && downIssues != null && downIssues.size() > 0) {
            for (Issue downIssue : downIssues) {
                this.inheritPartners(downIssue, issue);
            }
        }
        //  이슈 이력 등록
        if (!StringUtils.isEmpty(detectIssueChange.toString())) {
@@ -3167,6 +3177,11 @@
                issue = this.issueRepository.saveAndFlush(issue);
                if (issueForm.getInheritYn() != null && issueForm.getInheritYn() && issue.getParentIssue() != null) {
                    //  상위이슈의 파트너 정보 상속
                    this.inheritPartners(issue, issue.getParentIssue());
                }
                saveIssueForm.setId(issue.getId());
                IssueDepartment issueDepartment = new IssueDepartment();
@@ -4153,11 +4168,71 @@
                this.issueHistoryService.detectDownIssues(IssueHistoryType.DELETE, issue, sb);
                issue.setParentIssue(null);
            }
            if (issueDownForm.getInheritYn() != null && issueDownForm.getInheritYn() && issue.getParentIssue() != null) {
                //  상위이슈의 파트너 정보 상속받기
                issue = this.inheritPartners(issue, parentIssue);
            }
            this.issueHistoryService.addIssueHistory(parentIssue, IssueHistoryType.MODIFY, sb.toString()); //parentIssue = myIssue(기록은 현재 상세페이지에 해야하니까)
            this.issueRepository.saveAndFlush(issue);
        }
    }
    /**
     * 상위이슈의 파트너 정보 상속받기
     * @param issue Issue
     * @param parentIssue Issue
     * @return Issue
     */
    private Issue inheritPartners(Issue issue, Issue parentIssue) {
        if (parentIssue != null) {
            if (parentIssue.getIssueType().getInheritPartners()) {
                IssueCompany issueCompany = new IssueCompany();
                IssueIsp issueIsp = new IssueIsp();
                IssueHosting issueHosting = new IssueHosting();
                if (parentIssue.getIssueCompanies() != null && parentIssue.getIssueCompanies().size() > 0) {
                    issue.getIssueCompanies().clear();
                    issue.getIssueCompanies().addAll(parentIssue.getIssueCompanies());
                    Iterator<IssueCompany> itrCompany = issue.getIssueCompanies().iterator();
                    ConvertUtil.copyProperties(itrCompany.next(), issueCompany, "id");
                    issueCompany.setIssue(issue);
                    issueCompany.setCompanyField(parentIssue.getIssueCompanies().iterator().next().getCompanyField());
                    this.issueCompanyRepository.saveAndFlush(issueCompany);
                } else {
                    this.issueCompanyRepository.deleteByIssueId(issue.getId());
                    this.issueCompanyRepository.flush();
                }
                if (parentIssue.getIssueIspFields() != null && parentIssue.getIssueIspFields().size() > 0) {
                    issue.getIssueIspFields().clear();
                    issue.getIssueIspFields().addAll(parentIssue.getIssueIspFields());
                    Iterator<IssueIsp> itrIsp = issue.getIssueIspFields().iterator();
                    ConvertUtil.copyProperties(itrIsp.next(), issueIsp, "id");
                    issueIsp.setIssue(issue);
                    issueIsp.setIspField(parentIssue.getIssueIspFields().iterator().next().getIspField());
                    this.issueIspRepository.saveAndFlush(issueIsp);
                } else {
                    this.issueIspRepository.deleteByIssueId(issue.getId());
                    this.issueIspRepository.flush();
                }
                if (parentIssue.getIssueHostingFields() != null && parentIssue.getIssueHostingFields().size() > 0) {
                    issue.getIssueHostingFields().clear();
                    issue.getIssueHostingFields().addAll(parentIssue.getIssueHostingFields());
                    Iterator<IssueHosting> itrHosting = issue.getIssueHostingFields().iterator();
                    ConvertUtil.copyProperties(itrHosting.next(), issueHosting, "id");
                    issueHosting.setIssue(issue);
                    issueHosting.setHostingField(parentIssue.getIssueHostingFields().iterator().next().getHostingField());
                    this.issueHostingRepository.saveAndFlush(issueHosting);
                } else {
                    this.issueHostingRepository.deleteByIssueId(issue.getId());
                    this.issueHostingRepository.flush();
                }
            }
        }
        return issue;
    }
    @Override
    public void findPartner(Map<String, Object> resJsonData, Map<String, Object> params) {
        Long issueTypeId = MapUtil.getLong(params, "issueTypeId");
src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
@@ -155,6 +155,8 @@
        issueType.setUsePartner(issueTypeForm.getUsePartner());
        issueType.setInheritPartners(issueTypeForm.getInheritPartners());
        return this.issueTypeRepository.saveAndFlush(issueType);
    }
@@ -435,6 +437,8 @@
        issueType.setUsePartner(issueTypeForm.getUsePartner());
        issueType.setInheritPartners(issueTypeForm.getInheritPartners());
        /*if(issueTypeForm.getCompanyId() != null){
            CompanyField companyField = this.companyFieldService.getCompany(issueTypeForm.getCompanyId());
            issueType.setCompanyField(companyField);
src/main/java/kr/wisestone/owl/vo/IssueTypeVo.java
@@ -22,6 +22,8 @@
    private Boolean modifyPermissionCheck = Boolean.TRUE;   //  이슈 유형은 모든 사람들이 수정, 삭제할 수 있어서 기본 값이 True
    private Boolean inheritPartners;
    public IssueTypeVo(){}
    public Long getId() {
@@ -103,4 +105,12 @@
    public void setUsePartners(Integer usePartners) {
        this.usePartners = usePartners;
    }
    public Boolean getInheritPartners() {
        return inheritPartners;
    }
    public void setInheritPartners(Boolean inheritPartners) {
        this.inheritPartners = inheritPartners;
    }
}
src/main/java/kr/wisestone/owl/vo/IssueVo.java
@@ -83,6 +83,8 @@
    private int downTotalPage = 1;
    private Long downTotalCount = 0L;
    private Boolean inheritPartners;    // 파트너정보 상속유무 체크
    public IssueVo(){}
    public Long getId() {
@@ -650,4 +652,12 @@
    public void setDownPageNumber(int downPageNumber) {
        this.downPageNumber = downPageNumber;
    }
    public Boolean getInheritPartners() {
        return inheritPartners;
    }
    public void setInheritPartners(Boolean inheritPartners) {
        this.inheritPartners = inheritPartners;
    }
}
src/main/java/kr/wisestone/owl/web/form/IssueForm.java
@@ -75,6 +75,8 @@
    private String isApi = Issue.IS_API_NO;
    private List<String> downIssuesStatus = Lists.newArrayList(); //하위이슈 상태
    private Boolean inheritYn;
    public IssueForm() {
    }
@@ -241,6 +243,10 @@
        }
        if (MapUtil.getString(params, "hostingMemo") != null) {
            form.setHostingMemo(MapUtil.getString(params, "hostingMemo"));
        }
        if (MapUtil.getBoolean(params, "inheritYn") != null) {
            form.setInheritYn(MapUtil.getBoolean(params, "inheritYn"));
        }
        return form;
@@ -719,4 +725,12 @@
    public void setStatusName(String statusName) {
        this.statusName = statusName;
    }
    public Boolean getInheritYn() {
        return inheritYn;
    }
    public void setInheritYn(Boolean inheritYn) {
        this.inheritYn = inheritYn;
    }
}
src/main/java/kr/wisestone/owl/web/form/IssueTypeForm.java
@@ -20,6 +20,7 @@
    private Long projectId;
    private List<Long> removeIds = Lists.newArrayList();
    private Long usePartner;
    private Boolean inheritPartners;
    public IssueTypeForm(){}
@@ -41,6 +42,14 @@
                } else {
                    form.usePartner += id * 2;
                }
            }
        }
        if (MapUtil.getString(params, "inheritPartners") != null) {
            if (MapUtil.getString(params, "inheritPartners").equals("true")) {
                form.setInheritPartners(true);
            } else {
                form.setInheritPartners(false);
            }
        }
@@ -114,4 +123,12 @@
    public void setUsePartner(Long usePartner) {
        this.usePartner = usePartner;
    }
    public Boolean getInheritPartners() {
        return inheritPartners;
    }
    public void setInheritPartners(Boolean inheritPartners) {
        this.inheritPartners = inheritPartners;
    }
}
src/main/resources/migration/V1_6__alter_data.sql
New file
@@ -0,0 +1,3 @@
/* issue_type 파트너 상속 true/false */
ALTER TABLE `issue_type` ADD COLUMN `inherit_partners` varchar(10) NOT NULL DEFAULT "false";
src/main/resources/mybatis/query-template/issue-template.xml
@@ -22,6 +22,7 @@
        project.project_key as projectKey,
        issue_type.id as issueTypeId,
        issue_type.name as issueTypeName,
        issue_type.inherit_partners as inheritPartners,
        issue_status.id as issueStatusId,
        issue_status.issue_status_type as issueStatusType,
        issue_status.name as issueStatusName,
src/main/resources/mybatis/query-template/issueType-template.xml
@@ -10,7 +10,8 @@
        it.description as description,
        it.color as color,
        it.project_id as projectId,
        it.use_partner AS usePartners
        it.use_partner AS usePartners,
        it.inherit_partners as inheritPartners
        FROM
        issue_type it
        INNER JOIN workspace ws on it.workspace_id = ws.id
src/main/webapp/assets/styles/main.css
@@ -7769,6 +7769,10 @@
    margin-left: 3rem !important;
}
.ml--12 {
    margin-left: -12px !important;
}
.p-0 {
    padding: 0 !important;
}
src/main/webapp/i18n/ko/global.json
@@ -263,6 +263,7 @@
        "notAllowedAttachment": "첨부가 허용되지 않는 파일입니다.",
        "nameErrorAttachment": "첨부 파일명 오류",
        "succeededIssueRegistration": "이슈 등록 성공",
        "succeededDownIssueRegistration": "하위 이슈 등록 성공",
        "failedIssueRegistration": "이슈 등록 실패",
        "failedIssueModify": "이슈 수정 실패",
        "failedToProjectDetails": "프로젝트 상세 정보 조회 실패",
@@ -362,11 +363,14 @@
        "downIssueTitle": "하위 이슈 제목",
        "downIssueType": "하위 이슈 구분",
        "addDownIssue": "하위 이슈 추가",
        "modifyDownIssue": "하위 이슈 변경",
        "downIssueRemove" : "하위 이슈 삭제",
        "failedToIssueAddIssueDown": "하위 이슈 추가 실패",
        "failedToIssueDeleteIssueDown": "하위 이슈 삭제 실패",
        "errorSelectDownIssue" : "하위 이슈가 선택되지 않았습니다.",
        "failedToIssueTypeDefault": "이슈 유형 기본값 조회 실패"
        "failedToIssueTypeDefault": "이슈 유형 기본값 조회 실패",
        "inheritPartners": "업체/ISP/호스팅 정보 상속 여부",
        "wantToInheritPartnersOfParentIssue": "상위이슈의 파트너 정보(업체/ISP/호스팅)를 적용시키겠습니까?"
    },
    "project": {
        "createProject": "프로젝트 만들기",
@@ -678,6 +682,8 @@
        "failedToReceiveEnquiry": "문의 접수 실패"
    },
    "common": {
        "ok" : "네",
        "no" : "아니오",
        "allIssueList" : "전체 이슈",
        "urgent": "긴급",
        "high": "높음",
src/main/webapp/scripts/app/issue/issueAddDown.controller.js
@@ -861,39 +861,53 @@
                    });
                }
                // 연관 이슈 추가
                // 하위 이슈 추가
                function addDownIssue(downId) {
                    /*if ($scope.vm.issueName.length == 0 || $scope.vm.form.issues.length == 0
                        || $scope.vm.issueName != $scope.vm.form.issues[0].title) {
                        SweetAlert.error($filter("translate")("issue.errorSelectRelationIssue"), "");
                        return;
                    }*/
                    var ids = [];
                    if (downId != null) {
                        ids.push(downId);
                    }
                    let inheritYn = false;
                    var contents = {
                        //relationIssueType : $scope.vm.form.relationIssueTypeId,
                        // issueId : $rootScope.currentDetailIssueId,
                        issueId :  parameter.id,
                        ids : ids,
                        parentIssueId : parameter.id
                    };
                    Issue.modifyParentIssue($resourceProvider.getContent(
                        contents,
                        $resourceProvider.getPageContent(0, 10))).then(function (result) {
                        if (result.data.message.status === "success") {
                            //  이슈 상세 화면 요청
                            $rootScope.$broadcast("getIssueDetail", {
                                id : parameter.id
                            });
                    SweetAlert.swal({
                        title : $filter("translate")("issue.addDownIssue"), // 하위 이슈 추가
                        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;
                        }
                        else {
                            SweetAlert.error($filter("translate")("issue.failedToIssueAddIssueDown"), result.data.message.message); // "연관일감 생성 실패"
                        if (downId != null) {
                            ids.push(downId);
                        }
                        var contents = {
                            issueId :  parameter.id,
                            ids : ids,
                            parentIssueId : parameter.id,
                            inheritYn : inheritYn
                        };
                        Issue.modifyParentIssue($resourceProvider.getContent(
                            contents,
                            $resourceProvider.getPageContent(0, 10))).then(function (result) {
                            if (result.data.message.status === "success") {
                                SweetAlert.close();
                                //  이슈 상세 화면 요청
                                $rootScope.$broadcast("getIssueDetail", {
                                    id : parameter.id
                                });
                            }
                            else {
                                SweetAlert.error($filter("translate")("issue.failedToIssueAddIssueDown"), result.data.message.message); // "하위이슈 생성 실패"
                            }
                        });
                    });
                }
src/main/webapp/scripts/app/issue/issueDetail.controller.js
@@ -123,6 +123,9 @@
                    },
                };
                $scope.vm.inheritPartners = "";
                $scope.vm.downTotalCount = "";
                $scope.vm.relResponseData = [];
                $scope.vm.relTableConfigs = [];
                //  테이블 이벤트
@@ -810,28 +813,50 @@
                        return;
                    }
                    var ids = [];
                    if ($scope.vm.form.issuesDown[0].id != null) {
                        ids.push($scope.vm.form.issuesDown[0].id);
                    let inheritYn = false;
                    if ($scope.vm.inheritPartners) {
                        SweetAlert.swal({
                                title : $filter("translate")("issue.addDownIssue"), // 하위 이슈 추가
                                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;
                                }
                                var ids = [];
                                if ($scope.vm.form.issuesDown[0].id != null) {
                                    ids.push($scope.vm.form.issuesDown[0].id);
                                }
                                var contents = {
                                    issueId : $rootScope.currentDetailIssueId,
                                    ids : ids,
                                    parentIssueId : $rootScope.currentDetailIssueId,
                                    inheritYn : inheritYn
                                };
                                Issue.modifyParentIssue($resourceProvider.getContent(
                                    contents,
                                    $resourceProvider.getPageContent(0, 10))).then(function (result) {
                                    if (result.data.message.status === "success") {
                                        SweetAlert.close();
                                        $scope.fn.getIssueDetail(0,0);
                                    }
                                    else {
                                        SweetAlert.error($filter("translate")("issue.failedToIssueAddIssueDown"), result.data.message.message); // "하위이슈 생성 실패"
                                    }
                                });
                            });
                    }
                    var contents = {
                        issueId : $rootScope.currentDetailIssueId,
                        ids : ids,
                        parentIssueId : $rootScope.currentDetailIssueId
                    };
                    Issue.modifyParentIssue($resourceProvider.getContent(
                        contents,
                        $resourceProvider.getPageContent(0, 10))).then(function (result) {
                        if (result.data.message.status === "success") {
                            $scope.fn.getIssueDetail(0,0);
                        }
                        else {
                            SweetAlert.error($filter("translate")("issue.failedToIssueAddIssueDown"), result.data.message.message); // "연관일감 생성 실패"
                        }
                    });
                }
                 // 이슈명을 클릭하면 이슈 상세 정보를 조회한다.
@@ -1176,6 +1201,9 @@
                                if ($rootScope.workProject.id > -1 && result.data.data.projectVo !== null) {
                                    $rootScope.changeLastProject(result.data.data.projectVo.id);
                                }
                                $scope.vm.inheritPartners = result.data.data.issueTypeVo.inheritPartners;
                                $scope.vm.downTotalCount = result.data.data.downTotalCount;
                            }
                        }
                        else {
src/main/webapp/scripts/app/issue/issueImportExcel.controller.js
@@ -122,40 +122,65 @@
                function formSubmit() {
                    $rootScope.spinner = true;
                    Issue.importExcel({
                        method : "POST",
                        file : $scope.vm.form.file,
                        //      data 속성으로 별도의 데이터 전송
                        fields : {
                            content : {
                                projectId : $scope.vm.form.projects[0].id,
                                issueTypeId : $scope.vm.form.issueTypeId,
                                parentIssueId : (function () {
                                    let id = -1;
                                    if ($rootScope.isDefined($scope.vm.form.issues)) {
                                        if ($rootScope.isDefined($scope.vm.form.issues[0])) {
                                            id = $scope.vm.form.issues[0].id;
                                        }
                    let inheritYn = false;
                    //  하위이슈 등록 & 파트너 정보 상속 일 경우 알림 창
                    if ($rootScope.isDefined($scope.vm.form.issues) && $rootScope.isDefined($scope.vm.form.issues[0])) {
                        if ($scope.vm.form.issues[0].inheritPartners != null && $scope.vm.form.issues[0].inheritPartners === true) {
                            SweetAlert.swal({
                                    title : $filter("translate")("issue.addDownIssue"), // 하위 이슈 추가
                                    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;
                                    }
                                    return id;
                                })()
                            }
                        },
                        fileFormDataName : "file"
                    }).then(function (result) {
                            if (result.data.message.status === "success") {
                                $timeout(function () {
                                    SweetAlert.success($filter("translate")("issue.succeededIssueRegistration"), result.data.message.message); // 이슈 등록 성공
                                    $scope.fn.cancel();
                                    $rootScope.$broadcast("getIssueList");
                                    $rootScope.spinner = false;
                                }, 1000);
                            }
                            else {
                                SweetAlert.error($filter("translate")("issue.failedIssueRegistration"), result.data.message.message); // 이슈 등록 실패
                                $rootScope.spinner = false;
                            }
                        });
                                    Issue.importExcel({
                                        method : "POST",
                                        file : $scope.vm.form.file,
                                        //      data 속성으로 별도의 데이터 전송
                                        fields : {
                                            content : {
                                                projectId : $scope.vm.form.projects[0].id,
                                                issueTypeId : $scope.vm.form.issueTypeId,
                                                parentIssueId : (function () {
                                                    let id = -1;
                                                    if ($rootScope.isDefined($scope.vm.form.issues)) {
                                                        if ($rootScope.isDefined($scope.vm.form.issues[0])) {
                                                            id = $scope.vm.form.issues[0].id;
                                                        }
                                                    }
                                                    return id;
                                                })(),
                                                inheritYn : inheritYn
                                            }
                                        },
                                        fileFormDataName : "file",
                                    }).then(function (result) {
                                        if (result.data.message.status === "success") {
                                            $timeout(function () {
                                                SweetAlert.success($filter("translate")("issue.succeededIssueRegistration"), result.data.message.message); // 이슈 등록 성공
                                                $scope.fn.cancel();
                                                $rootScope.$broadcast("getIssueList");
                                                $rootScope.spinner = false;
                                            }, 1000);
                                        }
                                        else {
                                            SweetAlert.error($filter("translate")("issue.failedIssueRegistration"), result.data.message.message); // 이슈 등록 실패
                                            $rootScope.spinner = false;
                                        }
                                    });
                                });
                        }
                    }
                }
                function cancel() {
src/main/webapp/scripts/app/issue/issueList.controller.js
@@ -848,7 +848,7 @@
                }
                //  이슈 수정 팝업 호출
                function modify(id) {
                function modify(id, downTotalCount) {
                    $uibModal.open({
                        templateUrl : 'views/issue/issueModify.html',
                        size : "lg",
@@ -858,7 +858,9 @@
                            parameter : function () {
                                return {
                                    id : id,
                                    issueTypeId : $scope.vm.viewer.issueTypeVo.id
                                    issueTypeId : $scope.vm.viewer.issueTypeVo.id,
                                    inheritPartners : $scope.vm.viewer.issueTypeVo.inheritPartners,
                                    downTotalCount : downTotalCount
                                };
                            }
                        }
src/main/webapp/scripts/app/issue/issueModify.controller.js
@@ -169,6 +169,8 @@
                    priorities : [],    //  우선순위 정보
                    severities : [],    //  중요도 정보
                    fileTableConfigs : [],   //  파일 업로드 정보 테이블
                    inheritPartners : parameter.inheritPartners,
                    downTotalCount : parameter.downTotalCount
                };
                // 연관 일감 관련
@@ -576,305 +578,326 @@
                function formSubmit() {
                    $rootScope.spinner = true;
                    var content = {
                        id : parameter.id,
                        title : $rootScope.preventXss($scope.vm.form.title),    //  제목
                        description : $rootScope.preventXss($scope.vm.form.description),   //  내용
                        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;
                    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;
                                }
                                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
                                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 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;
                    });
                    }
                }
                function cancel() {
src/main/webapp/scripts/app/issueType/issueTypeAdd.controller.js
@@ -27,7 +27,8 @@
                        projects : [],      // 프로젝트
                        description : "",  //  설명
                        color : "#febd35", //  색상
                        companies : [] // 업체/isp/호스팅 선택 배열
                        companies : [], // 업체/isp/호스팅 선택 배열
                        inheritPartners : true    // 파트너 상속 유무
                    },
                    companyName : "",
                    projectName : "",
@@ -161,7 +162,14 @@
                        name : $rootScope.preventXss($scope.vm.form.name),
                        description : $rootScope.preventXss($scope.vm.form.description),
                        color : $scope.vm.form.color
                        color : $scope.vm.form.color,
                        inheritPartners :  (function () {
                            let inheritPartners = false;
                            if ($scope.vm.form.inheritPartners) {
                                inheritPartners = true;
                            }
                            return inheritPartners;
                        })()
                    };
                    IssueType.add($resourceProvider.getContent(
src/main/webapp/scripts/app/issueType/issueTypeModify.controller.js
@@ -33,7 +33,8 @@
                        projects : [],      // 프로젝트
                        description : "",  //  설명
                        color : "", //  색상
                        companies : [] // 업체/isp/호스팅 선택 배열
                        companies : [], // 업체/isp/호스팅 선택 배열
                        inheritPartners : ""    // 파트너 상속 유무
                    },
                    companyName : "",
                    workflowName : "",
@@ -152,7 +153,14 @@
                        })(),
                        name : $rootScope.preventXss($scope.vm.form.name),
                        description : $rootScope.preventXss($scope.vm.form.description),
                        color : $scope.vm.form.color
                        color : $scope.vm.form.color,
                        inheritPartners :  (function () {
                            let inheritPartners = false;
                            if ($scope.vm.form.inheritPartners) {
                                inheritPartners = true;
                            }
                            return inheritPartners;
                        })()
                    };
                    IssueType.modify($resourceProvider.getContent(
@@ -212,8 +220,8 @@
                                    $scope.vm.projectName = result.data.data.projectVo.name;
                                }
                                $scope.vm.form.companies = result.data.data.usePartnerVos;
                                $scope.vm.form.color = result.data.data.color;
                                $scope.vm.form.inheritPartners = result.data.data.inheritPartners;
                            }
                        }
                        else {
src/main/webapp/views/issue/issueDetail.html
@@ -107,7 +107,7 @@
                <i class="os-icon os-icon-airplay mr-20" ng-click="fn.versionView(vm.viewer.id)" data-toggle="tooltip" data-placement="right" title="이슈 변경 이력 상세 보기"></i>
<!--                <i class="os-icon os-icon-calendar-time mr-20" ng-if="vm.viewer.modifyPermissionCheck"-->
<!--                   ng-click="fn.reservation(vm.viewer.id)" data-toggle="tooltip" data-placement="right" title="이슈 발생 예약 하기"></i>-->
                <i class="os-icon os-icon-edit-1 mr-20" ng-click="fn.modify(vm.viewer.id)"
                <i class="os-icon os-icon-edit-1 mr-20" ng-click="fn.modify(vm.viewer.id, vm.viewer.downTotalCount)"
                   ng-if="vm.viewer.modifyPermissionCheck" data-toggle="tooltip" data-placement="left" title="이슈 수정 하기"></i>
                <!-- 상위 이슈가 있을때 뒤로가기 버튼 생성 -->
                <span ng-if="vm.issueIds[0] != vm.viewer.id && vm.issueIds.length != 0 && vm.issueIds.length != 1" class="issue-close mr-10" ng-click="fn.issueBack()"><i class="os-icon os-icon-arrow-left7" data-toggle="tooltip" data-placement="left" title="이슈 뒤로 이동"></i></span>
src/main/webapp/views/issueType/issueTypeAdd.html
@@ -71,12 +71,21 @@
                <div class="select3-selection__choicediv mt-10">
                                <span class="select3-selection__choice" ng-repeat="company in vm.form.companies">
                                    <span>{{company.byName}}</span> <!--사용자가 속해 있는 부서 이름 출력-->
                                    <span>{{company.byName}}</span>
                                    <span class="select3-selection__choice__remove" ng-click="fn.removeUsePartner($index)">×</span>
                                </span>
                </div>
            </div>
            <div>
                <span class="issue-label mb-0" translate="issue.inheritPartners">파트너 정보 상속</span>
            </div>
            <div class="form-group mt-5 ml--12">
                <label class='switch ml-3' style=""><input type='checkbox' ng-model='vm.form.inheritPartners'>
                    <span class='slider round'></span>
                </label>
            </div>
            <div class="form-group">
                <label for="issueTypeAddForm2"><span translate="common.color">색상</span> <code class="highlighter-rouge">*</code></label>
                <div class="input-group">
src/main/webapp/views/issueType/issueTypeModify.html
@@ -76,14 +76,20 @@
                <div class="select3-selection__choicediv mt-10">
                                <span class="select3-selection__choice" ng-repeat="company in vm.form.companies">
                                    <span>{{company.byName}}</span> <!--사용자가 속해 있는 부서 이름 출력-->
                                    <span>{{company.byName}}</span>
                                    <span class="select3-selection__choice__remove" ng-click="fn.removeUsePartner($index)">×</span>
                                </span>
                </div>
            </div>
            <div>
                <span class="issue-label mb-0" translate="issue.inheritPartners">파트너 정보 상속</span>
            </div>
            <div class="form-group mt-5 ml--12">
                <label class='switch ml-3' style=""><input type='checkbox' ng-model='vm.form.inheritPartners'>
                    <span class='slider round'></span>
                </label>
            </div>
            <div class="form-group">
                <label for="issueTypeModifyForm2"><span translate="common.color">색상</span> <code class="highlighter-rouge">*</code></label>