From 9f30425f290c710a12b95d98a7f67ec66016b470 Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 월, 17 1월 2022 12:57:23 +0900
Subject: [PATCH] - 이슈 추가,수정 시 이력 남기는 부분 코드 수정

---
 src/main/webapp/scripts/components/utils/autoComplete.controller.js      |    2 
 src/main/java/kr/wisestone/owl/domain/IssueCompany.java                  |    8 
 src/main/java/kr/wisestone/owl/service/impl/IssueCompanyServiceImpl.java |  180 ++++++++++-----
 src/main/java/kr/wisestone/owl/repository/IssueCompanyRepository.java    |    3 
 src/main/java/kr/wisestone/owl/service/IssueHistoryService.java          |    9 
 src/main/webapp/i18n/ko/global.json                                      |    5 
 src/main/webapp/views/issue/issueModify.html                             |    5 
 src/main/webapp/views/companyField/companyFieldModify.html               |    2 
 src/main/java/kr/wisestone/owl/service/impl/IssueIspServiceImpl.java     |   85 ++++---
 src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java |  182 ++++++++++++---
 src/main/java/kr/wisestone/owl/service/impl/IssueHostingServiceImpl.java |   80 ++++--
 src/main/webapp/scripts/app/issue/issueModify.controller.js              |   42 +++
 12 files changed, 419 insertions(+), 184 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/domain/IssueCompany.java b/src/main/java/kr/wisestone/owl/domain/IssueCompany.java
index 51e8ba6..3b2815f 100644
--- a/src/main/java/kr/wisestone/owl/domain/IssueCompany.java
+++ b/src/main/java/kr/wisestone/owl/domain/IssueCompany.java
@@ -25,7 +25,6 @@
     private Long childSectorId;
     private Long regionId;
     private Long statusId;
-    private String statusName;
 
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "issue_id")
@@ -160,11 +159,4 @@
         this.statusId = statusId;
     }
 
-    public String getStatusName() {
-        return statusName;
-    }
-
-    public void setStatusName(String statusName) {
-        this.statusName = statusName;
-    }
 }
diff --git a/src/main/java/kr/wisestone/owl/repository/IssueCompanyRepository.java b/src/main/java/kr/wisestone/owl/repository/IssueCompanyRepository.java
index 2c380d6..e90b604 100644
--- a/src/main/java/kr/wisestone/owl/repository/IssueCompanyRepository.java
+++ b/src/main/java/kr/wisestone/owl/repository/IssueCompanyRepository.java
@@ -10,4 +10,7 @@
 
 public interface IssueCompanyRepository extends JpaRepository<IssueCompany, Long> {
 
+    IssueCompany findByIssueId(@Param("issueId") Long issueId);
+
+    void deleteByIssueId(@Param("issueId") Long issueId);
 }
diff --git a/src/main/java/kr/wisestone/owl/service/IssueHistoryService.java b/src/main/java/kr/wisestone/owl/service/IssueHistoryService.java
index 3855b9f..454e9b5 100644
--- a/src/main/java/kr/wisestone/owl/service/IssueHistoryService.java
+++ b/src/main/java/kr/wisestone/owl/service/IssueHistoryService.java
@@ -7,6 +7,9 @@
 import kr.wisestone.owl.vo.IssueHistoryVo;
 import kr.wisestone.owl.vo.IssueVo;
 import kr.wisestone.owl.web.condition.IssueHistoryCondition;
+import kr.wisestone.owl.web.form.CompanyFieldForm;
+import kr.wisestone.owl.web.form.HostingFieldForm;
+import kr.wisestone.owl.web.form.IspFieldForm;
 import kr.wisestone.owl.web.form.IssueForm;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.web.multipart.MultipartFile;
@@ -63,11 +66,11 @@
     void detectSendIssueMail(IssueHistoryType type, IssueForm issueForm, StringBuilder description);
     void detectSendIssueMail(IssueHistoryType type, List<String> sendMails, StringBuilder description);
 
-    void detectIssueCompany(IssueHistoryType type, Map<String, Object> param, CompanyField companyField, IssueCompany issueCompany, StringBuilder description);
+    void detectIssueCompany(IssueHistoryType type, Map<String, Object> param, CompanyFieldForm companyFieldForm, IssueCompany issueCompany, StringBuilder description);
 
-    void detectIssueIsp(IssueHistoryType type, Map<String, Object> param, IspField ispField, IssueIsp issueIsp, StringBuilder description);
+    void detectIssueIsp(IssueHistoryType type, Map<String, Object> param, IspFieldForm ispFieldForm, IssueIsp issueIsp, StringBuilder description);
 
-    void detectIssueHosting(IssueHistoryType type, Map<String, Object> param, HostingField hostingField, IssueHosting issueHosting, StringBuilder description);
+    void detectIssueHosting(IssueHistoryType type, Map<String, Object> param, HostingFieldForm hostingFieldForm, IssueHosting issueHosting, StringBuilder description);
 
     void recodeRemoveCustomFieldOptionValue(CustomField customField, String oldValue, String newValue, StringBuilder description);
 
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueCompanyServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueCompanyServiceImpl.java
index 4eca191..8e9c31b 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueCompanyServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueCompanyServiceImpl.java
@@ -9,6 +9,7 @@
 import kr.wisestone.owl.util.MapUtil;
 import kr.wisestone.owl.web.condition.IssueCondition;
 import kr.wisestone.owl.web.form.CompanyFieldForm;
+import kr.wisestone.owl.web.form.IspFieldForm;
 import kr.wisestone.owl.web.form.IssueForm;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -31,6 +32,9 @@
     private CompanyFieldService companyFieldService;
 
     @Autowired
+    private CompanyFieldCategoryService companyFieldCategoryService;
+
+    @Autowired
     private IssueHistoryService issueHistoryService;
 
     @Autowired
@@ -41,80 +45,136 @@
         return this.issueCompanyRepository;
     }
 
+    /**
+     * �깉濡쒖슫 �뾽泥� 吏곸젒 異붽�
+     * @param issueForm IssueForm
+     * @param issue Issue
+     */
+    private void CreateCompanyField(IssueForm issueForm, Issue issue) {
+
+        CompanyFieldForm companyFieldForm = new CompanyFieldForm();
+        companyFieldForm.setName(issueForm.getCompanyName());
+        companyFieldForm.setEmail(issueForm.getCompanyEmail());
+        companyFieldForm.setUrl(issueForm.getCompanyUrl());
+        companyFieldForm.setManager(issueForm.getCompanyManager());
+        companyFieldForm.setTel(issueForm.getCompanyTel());
+        companyFieldForm.setMemo(issueForm.getCompanyMemo());
+        companyFieldForm.setCompanyTypeName(issueForm.getCompanyTypeName());
+        companyFieldForm.setParentSectorName(issueForm.getParentSectorName());
+        companyFieldForm.setChildSectorName(issueForm.getChildSectorName());
+        companyFieldForm.setRegionName(issueForm.getRegionName());
+        companyFieldForm.setStatusName(issueForm.getStatusName());
+
+        IssueCompany newIssueCompany = CreateIssueCompany(companyFieldForm, issue);
+        CompanyField companyField = new CompanyField();
+        StringBuilder sb = new StringBuilder();
+
+        // �궗�슜�옄媛� 吏곸젒 �엯�젰 �떆 COMPANY 紐⑸줉�뿉 異붽�
+        if (newIssueCompany.getCompanyField() == null) {
+            companyField = this.companyFieldService.addCompany(companyFieldForm);
+            newIssueCompany.setCompanyField(companyField);
+            IssueCompany oldIssueCompany = this.issueCompanyRepository.findByIssueId(issue.getId());
+            if (oldIssueCompany != null) {
+                issueHistoryService.detectIssueCompany(IssueHistoryType.MODIFY, null, companyFieldForm, oldIssueCompany, sb);
+                this.issueCompanyRepository.deleteById(oldIssueCompany.getId());
+            } else {
+                issueHistoryService.detectIssueCompany(IssueHistoryType.ADD, null, companyFieldForm, newIssueCompany, sb);
+            }
+        }
+        // 異붽� �씠�젰
+        issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
+        this.issueCompanyRepository.saveAndFlush(newIssueCompany);
+    }
+
+    /**
+     * �씠�뒋 Company 留뚮뱾湲�
+     * @param companyFieldForm CompanyFieldForm
+     * @param issue �씠�뒋
+     * @return issueCompany
+     */
+    private IssueCompany CreateIssueCompany(CompanyFieldForm companyFieldForm, Issue issue) {
+        IssueCompany issueCompany = ConvertUtil.copyProperties(companyFieldForm, IssueCompany.class);
+        issueCompany.setIssue(issue);
+        if (companyFieldForm.getId() != null && companyFieldForm.getId() != -1) {
+            CompanyField companyField = this.companyFieldService.getCompany(companyFieldForm.getId());
+            issueCompany.setCompanyField(companyField);
+        }
+        return issueCompany;
+    }
+
     //  �씠�뒋�뿉�꽌 �궗�슜�릺�뒗 �뾽泥� 媛믪쓣 �뾽�뜲�씠�듃�븳�떎.
     @Override
     @Transactional
     public void modifyIssueCompanyField(Issue issue, IssueForm issueForm) {
         if (issue != null) {
+            StringBuilder sb = new StringBuilder();
             List<Map<String, Object>> issueCompanyFields = issueForm.getIssueCompanyFields();
+
             if (issueCompanyFields != null && issueCompanyFields.size() > 0) {
                 Map<String, Object> param = issueCompanyFields.get(0);
+                IssueCompany issueCompany = this.issueCompanyRepository.findByIssueId(issue.getId());
 
-                if (param != null && param.get("companyId") != null  && param.get("companyId") != "") {
-                    CompanyField companyField = this.companyFieldService.getCompany(MapUtil.getLong(param, "companyId")); //companyId 媛��졇�삤湲�
+                if (issueCompany != null) { //�닔�젙 �떆
+                    // 蹂�寃� �씠�젰 癒쇱� �궓湲곌퀬 issueCompany�뿉 set�븯湲�
+                    issueHistoryService.detectIssueCompany(IssueHistoryType.MODIFY, param, null, issueCompany, sb);
+                    issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
+                    
+                    issueCompany.setName(MapUtil.getString(param, "name"));
+                    issueCompany.setEmail(MapUtil.getString(param, "email"));
+                    issueCompany.setUrl(MapUtil.getString(param, "url"));
+                    issueCompany.setManager(MapUtil.getString(param, "manager"));
+                    issueCompany.setTel(MapUtil.getString(param, "tel"));
+                    issueCompany.setMemo(MapUtil.getString(param, "memo"));
+                    issueCompany.setCompanyTypeId(MapUtil.getLong(param, "companyTypeId"));
+                    issueCompany.setParentSectorId(MapUtil.getLong(param, "parentSectorId"));
+                    issueCompany.setChildSectorId(MapUtil.getLong(param, "childSectorId"));
+                    issueCompany.setRegionId(MapUtil.getLong(param, "regionId"));
+                    issueCompany.setStatusId(MapUtil.getLong(param, "statusId"));
 
-                    Set<IssueCompany> issueCompanies = issue.getIssueCompanies();
-                    IssueCompany issueCompany = null;
-                    if (issueCompanies != null && issueCompanies.size() > 0) { //�닔�젙 �븷 寃쎌슦
-                        issueCompany = issueCompanies.iterator().next();
-                        // 蹂�寃� �씠�젰
-                        StringBuilder sb = new StringBuilder();
-                        issueHistoryService.detectIssueCompany(IssueHistoryType.MODIFY, param, null, issueCompany, sb);
-                        issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
-
-                        issueCompany.setCompanyField(companyField);
-                        issueCompany.setName(MapUtil.getString(param, "name"));
-                        issueCompany.setEmail(MapUtil.getString(param, "email"));
-                        issueCompany.setUrl(MapUtil.getString(param, "url"));
-                        issueCompany.setManager(MapUtil.getString(param, "manager"));
-                        issueCompany.setTel(MapUtil.getString(param, "tel"));
-                        issueCompany.setMemo(MapUtil.getString(param, "memo"));
-                        issueCompany.setCompanyTypeId(MapUtil.getLong(param, "companyTypeId"));
-                        issueCompany.setParentSectorId(MapUtil.getLong(param, "parentSectorId"));
-                        issueCompany.setChildSectorId(MapUtil.getLong(param, "childSectorId"));
-                        issueCompany.setRegionId(MapUtil.getLong(param, "regionId"));
-                        issueCompany.setStatusId(MapUtil.getLong(param, "statusId"));
-                    } else  { //異붽� �븷 寃쎌슦
-                        issueCompany = ConvertUtil.convertMapToClass(param, IssueCompany.class);
-                        issueCompany.setIssue(issue);
-                        if (companyField != null) {
-                            issueCompany.setCompanyField(companyField);
-                        }
-                        // 異붽� �씠�젰
-                        StringBuilder sb = new StringBuilder();
-                        issueHistoryService.detectIssueCompany(IssueHistoryType.ADD, param, null, issueCompany, sb);
-                        issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
-                    }
                     this.issueCompanyRepository.saveAndFlush(issueCompany);
-                } else {
-                    this.issueCompanyRepository.deleteById(MapUtil.getLong(param, "id"));
-                }
-            } else if(issueForm.getCompanyName() != null && !issueForm.getCompanyName().equals("")) { //�뾽泥댁젙蹂� 吏곸젒 異붽�
-                CompanyFieldForm companyFieldForm = new CompanyFieldForm();
-                companyFieldForm.setName(issueForm.getCompanyName());
-                companyFieldForm.setEmail(issueForm.getCompanyEmail());
-                companyFieldForm.setUrl(issueForm.getCompanyUrl());
-                companyFieldForm.setManager(issueForm.getCompanyManager());
-                companyFieldForm.setTel(issueForm.getCompanyTel());
-                companyFieldForm.setMemo(issueForm.getCompanyMemo());
-                companyFieldForm.setCompanyTypeName(issueForm.getCompanyTypeName());
-                companyFieldForm.setParentSectorName(issueForm.getParentSectorName());
-                companyFieldForm.setChildSectorName(issueForm.getChildSectorName());
-                companyFieldForm.setRegionName(issueForm.getRegionName());
-                companyFieldForm.setStatusName(issueForm.getStatusName());
+                } else { //異붽� �떆
+                    CompanyFieldForm companyFieldForm = ConvertUtil.convertMapToClass(param, CompanyFieldForm.class);
+                    companyFieldForm.setId(MapUtil.getLong(param, "companyId"));
 
-                CompanyField companyField = this.companyFieldService.addCompany(companyFieldForm);
+                    IssueCompany newIssueCompany = CreateIssueCompany(companyFieldForm, issue);
 
-                IssueCompany issueCompany = ConvertUtil.copyProperties(companyFieldForm, IssueCompany.class);
-                issueCompany.setIssue(issue);
-                if (companyField != null) {
-                    issueCompany.setCompanyField(companyField);
+                    CompanyFieldCategory companyType = this.companyFieldCategoryService.find(companyFieldForm.getCompanyTypeId());
+                    if (companyType != null) {
+                        companyFieldForm.setCompanyTypeName(companyType.getUseValue());
+                    }
+
+                    CompanyFieldCategory parentSector = this.companyFieldCategoryService.find(companyFieldForm.getParentSectorId());
+                    if (parentSector != null) {
+                        companyFieldForm.setParentSectorName(parentSector.getUseValue());
+                    }
+
+                    CompanyFieldCategory childSector = this.companyFieldCategoryService.find(companyFieldForm.getChildSectorId());
+                    if (childSector != null) {
+                        companyFieldForm.setChildSectorName(childSector.getUseValue());
+                    }
+
+                    CompanyFieldCategory region = this.companyFieldCategoryService.find(companyFieldForm.getRegionId());
+                    if (region != null) {
+                        companyFieldForm.setRegionName(region.getUseValue());
+                    }
+
+                    CompanyFieldCategory status = this.companyFieldCategoryService.find(companyFieldForm.getStatusId());
+                    if (status != null) {
+                        companyFieldForm.setStatusName(status.getUseValue());
+                    }
+
+                    // 異붽� �씠�젰
+                    issueHistoryService.detectIssueCompany(IssueHistoryType.ADD, param, companyFieldForm, newIssueCompany, sb);
+                    issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
+                    this.issueCompanyRepository.saveAndFlush(newIssueCompany);
                 }
-                // 異붽� �씠�젰
-                StringBuilder sb = new StringBuilder();
-                issueHistoryService.detectIssueCompany(IssueHistoryType.ADD, null, companyField, issueCompany, sb);
-                issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
-                this.issueCompanyRepository.saveAndFlush(issueCompany);
+
+            } else if(issueForm.getCompanyName() != null && !issueForm.getCompanyName().equals("")) {
+                //�뾽泥댁젙蹂� 吏곸젒 異붽�
+                CreateCompanyField(issueForm, issue);
+            } else {
+                this.issueCompanyRepository.deleteByIssueId(issue.getId());
+                this.issueCompanyRepository.flush();
             }
         }
     }
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java
index 8753a2e..3e03fc3 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java
@@ -16,8 +16,7 @@
 import kr.wisestone.owl.vo.IssueHistoryVo;
 import kr.wisestone.owl.vo.IssueVo;
 import kr.wisestone.owl.web.condition.IssueHistoryCondition;
-import kr.wisestone.owl.web.form.EmailTemplateForm;
-import kr.wisestone.owl.web.form.IssueForm;
+import kr.wisestone.owl.web.form.*;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -557,14 +556,53 @@
 
     // �뾽泥� �젙蹂� 蹂�寃� �젙蹂대�� 湲곕줉�븳�떎.
     @Override
-    public void detectIssueCompany(IssueHistoryType type, Map<String, Object> param, CompanyField companyField, IssueCompany issueCompany, StringBuilder description) {
+    public void detectIssueCompany(IssueHistoryType type, Map<String, Object> param, CompanyFieldForm companyFieldForm, IssueCompany issueCompany, StringBuilder description) {
+        Long companyFieldId = 0L;
         Long id = 0L;
+        String name = "";
+        /*String manager = "";
+        String tel = "";
+        String email = "";
+        String memo = "";
+        Long companyTypeId = 0L;
+        Long parentSectorId = 0L;
+        Long childSectorId = 0L;
+        Long regionId = 0L;
+        Long statusId = 0L;
+        String companyTypeName = "";
+        String parentSectorName = "";
+        String childSectorName = "";
+        String regionName = "";
+        String statusName = "";*/
+
         if (param != null) {
             id = MapUtil.getLong(param, "companyId");
-        }else if(companyField != null) {
-            id = companyField.getId();
+            name = MapUtil.getString(param, "name");
+            /*manager = MapUtil.getString(param, "manager");
+            tel = MapUtil.getString(param, "tel");
+            email = MapUtil.getString(param, "email");
+            memo = MapUtil.getString(param, "memo");
+            companyTypeName = MapUtil.getString(param, "companyTypeName");
+            parentSectorName = MapUtil.getString(param, "parentSectorName");
+            childSectorName = MapUtil.getString(param, "childSectorName");
+            regionName = MapUtil.getString(param, "regionName");
+            statusName = MapUtil.getString(param, "statusName");*/
+        }else if(companyFieldForm != null) {
+            id = companyFieldForm.getId();
+            name = companyFieldForm.getName();
+            /*manager = companyFieldForm.getManager();
+            tel = companyFieldForm.getTel();
+            email = companyFieldForm.getEmail();
+            memo = companyFieldForm.getMemo();
+            companyTypeName = companyFieldForm.getCompanyTypeName();
+            parentSectorName = companyFieldForm.getParentSectorName();
+            childSectorName = companyFieldForm.getChildSectorName();
+            regionName = companyFieldForm.getRegionName();
+            statusName = companyFieldForm.getStatusName();*/
         }
-        Long companyFieldId = issueCompany.getCompanyField().getId();
+        if (issueCompany.getCompanyField() != null && issueCompany.getCompanyField().getId() != null) {
+            companyFieldId = issueCompany.getCompanyField().getId();
+        }
 
         if (type == IssueHistoryType.ADD) { //異붽� �븷 寃쎌슦
             description.append("<span translate=\"issue.issueCompanyAddHistory\">�뾽泥� �젙蹂닿� 異붽��릺�뿀�뒿�땲�떎. </span>");
@@ -572,24 +610,44 @@
         } else if (type == IssueHistoryType.MODIFY) { //�닔�젙 �븷 寃쎌슦
             if (id != null && !companyFieldId.equals(id)) {
                 description.append("<span translate=\"issue.issueCompanyModifyHistory\">�뾽泥� �젙蹂닿� 蹂�寃쎈릺�뿀�뒿�땲�떎. </span>");
-                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + param.get("name") + "</span>");
+                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + name + "</span>");
             }
-            if (companyFieldId.equals(id) && param.get("manager") != null && (issueCompany.getManager() == null || !issueCompany.getManager().equals(param.get("manager")))) {
+            /*if (companyFieldId.equals(id) && manager != null && (issueCompany.getManager() == null || !issueCompany.getManager().equals(manager))) {
                 description.append("<span translate=\"issue.issueCompanyModifyManagerHistory\">&nbsp;>&nbsp;�뾽泥� �젙蹂댁쓽 �떞�떦�옄媛� 蹂�寃쎈릺�뿀�뒿�땲�떎. </span>");
-                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + param.get("manager") + "</span>");
+                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + manager + "</span>");
             }
-            if (companyFieldId.equals(id) && param.get("tel") != null && (issueCompany.getTel() == null || !issueCompany.getTel().equals(param.get("tel")))) {
+            if (companyFieldId.equals(id) && tel != null && (issueCompany.getTel() == null || !issueCompany.getTel().equals(tel))) {
                 description.append("<span translate=\"issue.issueCompanyModifyTelHistory\">&nbsp;>&nbsp;�뾽泥� �젙蹂댁쓽 �쟾�솕踰덊샇媛� 蹂�寃쎈릺�뿀�뒿�땲�떎. </span>");
-                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + param.get("tel") + "</span>");
+                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + tel + "</span>");
             }
-            if (companyFieldId.equals(id) && param.get("email") != null && (issueCompany.getEmail() == null || !issueCompany.getEmail().equals(param.get("email")))) {
+            if (companyFieldId.equals(id) && email != null && (issueCompany.getEmail() == null || !issueCompany.getEmail().equals(email))) {
                 description.append("<span translate=\"issue.issueCompanyModifyEmailHistory\">&nbsp;>&nbsp;�뾽泥� �젙蹂댁쓽 �씠硫붿씪�씠 蹂�寃쎈릺�뿀�뒿�땲�떎. </span>");
-                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + param.get("email") + "</span>");
+                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + email + "</span>");
             }
-            if (companyFieldId.equals(id) && param.get("memo") != null && (issueCompany.getMemo() == null || !issueCompany.getMemo().equals(param.get("memo")))) {
+            if (companyFieldId.equals(id) && memo != null && (issueCompany.getMemo() == null || !issueCompany.getMemo().equals(memo))) {
                 description.append("<span translate=\"issue.issueCompanyModifyMemoHistory\">&nbsp;>&nbsp;�뾽泥� �젙蹂댁쓽 鍮꾧퀬媛� 蹂�寃쎈릺�뿀�뒿�땲�떎. </span>");
-                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + param.get("memo") + "</span>");
+                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + memo + "</span>");
             }
+            if (companyFieldId.equals(id) && companyTypeName != null && (issueCompany.getCompanyTypeId() == null || !issueCompany.getCompanyTypeId().equals(companyTypeId))) {
+                description.append("<span translate=\"issue.issueCompanyModifyCompanyTypeHistory\">&nbsp;>&nbsp;�뾽泥� �젙蹂댁쓽 湲곗뾽援щ텇�씠 蹂�寃쎈릺�뿀�뒿�땲�떎. </span>");
+                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + companyTypeName + "</span>");
+            }
+            if (companyFieldId.equals(id) && parentSectorName != null && (issueCompany.getParentSectorId() == null || !issueCompany.getParentSectorId().equals(parentSectorId))) {
+                description.append("<span translate=\"issue.issueCompanyModifyParentSectorHistory\">&nbsp;>&nbsp;�뾽泥� �젙蹂댁쓽 �뾽醫�(��遺꾨쪟)�씠 蹂�寃쎈릺�뿀�뒿�땲�떎. </span>");
+                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + parentSectorName + "</span>");
+            }
+            if (companyFieldId.equals(id) && childSectorName != null && (issueCompany.getChildSectorId() == null || !issueCompany.getChildSectorId().equals(childSectorId))) {
+                description.append("<span translate=\"issue.issueCompanyModifyChildSectorHistory\">&nbsp;>&nbsp;�뾽泥� �젙蹂댁쓽 �뾽醫�(以묐텇瑜�)�씠 蹂�寃쎈릺�뿀�뒿�땲�떎. </span>");
+                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + childSectorName + "</span>");
+            }
+            if (companyFieldId.equals(id) && statusName != null && (issueCompany.getStatusId() == null || !issueCompany.getStatusId().equals(statusId))) {
+                description.append("<span translate=\"issue.issueCompanyModifyStatusHistory\">&nbsp;>&nbsp;�뾽泥� �젙蹂댁쓽 �긽�깭媛� 蹂�寃쎈릺�뿀�뒿�땲�떎. </span>");
+                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + statusName + "</span>");
+            }
+            if (companyFieldId.equals(id) && regionName != null && (issueCompany.getRegionId() == null || !issueCompany.getRegionId().equals(regionId))) {
+                description.append("<span translate=\"issue.issueCompanyModifyRegionHistory\">&nbsp;>&nbsp;�뾽泥� �젙蹂댁쓽 吏��뿭�씠 蹂�寃쎈릺�뿀�뒿�땲�떎. </span>");
+                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + regionName + "</span>");
+            }*/
         } else {
             description.append("<span translate=\"issue.issueCompanyRemoveHistory\">�뾽泥� �젙蹂닿� �궘�젣�릺�뿀�뒿�땲�떎. " + issueCompany.getCompanyField().getName() + "</span>");
             description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + issueCompany.getCompanyField().getName() + "</span>");
@@ -598,14 +656,33 @@
 
     // ISP �젙蹂� 蹂�寃� �젙蹂대�� 湲곕줉�븳�떎.
     @Override
-    public void detectIssueIsp(IssueHistoryType type, Map<String, Object> param, IspField ispField, IssueIsp issueIsp, StringBuilder description) {
+    public void detectIssueIsp(IssueHistoryType type, Map<String, Object> param, IspFieldForm ispFieldForm, IssueIsp issueIsp, StringBuilder description) {
+        Long ispFieldId = 0L;
         Long id = 0L;
+        String name = "";
+        String manager = "";
+        String tel = "";
+        String email = "";
+        String memo = "";
         if (param != null) {
             id = MapUtil.getLong(param, "ispId");
-        } else if(ispField != null) {
-            id = ispField.getId();
+            name = MapUtil.getString(param, "name");
+            /*manager = MapUtil.getString(param, "manager");
+            tel = MapUtil.getString(param, "tel");
+            email = MapUtil.getString(param, "email");
+            memo = MapUtil.getString(param, "memo");*/
+        }else if(ispFieldForm != null) {
+            id = ispFieldForm.getId();
+            name = ispFieldForm.getName();
+            /*manager = ispFieldForm.getManager();
+            tel = ispFieldForm.getTel();
+            email = ispFieldForm.getEmail();
+            memo = ispFieldForm.getMemo();*/
         }
-        Long ispFieldId = issueIsp.getIspField().getId();
+
+        if (issueIsp.getIspField() != null && issueIsp.getIspField().getId() != null) {
+            ispFieldId = issueIsp.getIspField().getId();
+        }
 
         if (type == IssueHistoryType.ADD) {
             description.append("<span translate=\"issue.issueIspAddHistory\">ISP �젙蹂닿� 異붽��릺�뿀�뒿�땲�떎. </span>");
@@ -613,24 +690,24 @@
         } else if (type == IssueHistoryType.MODIFY) {
             if (id != null && !ispFieldId.equals(id)) { //�닔�젙 �븷 寃쎌슦
                 description.append("<span translate=\"issue.issueIspModifyHistory\">ISP �젙蹂닿� 蹂�寃쎈릺�뿀�뒿�땲�떎. </span>");
-                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + param.get("name") + "</span>");
+                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + name + "</span>");
             }
-            if (ispFieldId.equals(id) && param.get("manager") != null && (issueIsp.getManager() == null || !issueIsp.getManager().equals(param.get("manager")))) {
+            /*if (ispFieldId.equals(id) && manager != null && (issueIsp.getManager() == null || !issueIsp.getManager().equals(manager))) {
                 description.append("<span translate=\"issue.issueIspModifyManagerHistory\">ISP �젙蹂댁쓽 �떞�떦�옄媛� 蹂�寃쎈릺�뿀�뒿�땲�떎. </span>");
-                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + param.get("manager") + "</span>");
+                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + manager + "</span>");
             }
-            if (ispFieldId.equals(id) && param.get("tel") != null && (issueIsp.getTel() == null || !issueIsp.getTel().equals(param.get("tel")))) {
+            if (ispFieldId.equals(id) && tel != null && (issueIsp.getTel() == null || !issueIsp.getTel().equals(tel))) {
                 description.append("<span translate=\"issue.issueIspModifyTelHistory\">ISP �젙蹂댁쓽 �쟾�솕踰덊샇媛� 蹂�寃쎈릺�뿀�뒿�땲�떎. </span>");
-                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + param.get("tel") + "</span>");
+                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + tel + "</span>");
             }
-            if (ispFieldId.equals(id) && param.get("email") != null && (issueIsp.getEmail() == null || !issueIsp.getEmail().equals(param.get("email")))) {
+            if (ispFieldId.equals(id) && email != null && (issueIsp.getEmail() == null || !issueIsp.getEmail().equals(email))) {
                 description.append("<span translate=\"issue.issueIspModifyEmailHistory\">ISP �젙蹂댁쓽 �씠硫붿씪�씠 蹂�寃쎈릺�뿀�뒿�땲�떎. </span>");
-                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + param.get("email") + "</span>");
+                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + email + "</span>");
             }
-            if (ispFieldId.equals(id) && param.get("memo") != null && (issueIsp.getMemo() == null || !issueIsp.getMemo().equals(param.get("memo")))) {
+            if (ispFieldId.equals(id) && memo != null && (issueIsp.getMemo() == null || !issueIsp.getMemo().equals(memo))) {
                 description.append("<span translate=\"issue.issueIspModifyMemoHistory\">ISP �젙蹂댁쓽 鍮꾧퀬媛� 蹂�寃쎈릺�뿀�뒿�땲�떎. </span>");
-                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + param.get("memo") + "</span>");
-            }
+                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + memo + "</span>");
+            }*/
         } else {
             description.append("<span translate=\"issue.issueIspRemoveHistory\">ISP �젙蹂닿� �궘�젣�릺�뿀�뒿�땲�떎. " + issueIsp.getIspField().getName() + "</span>");
             description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + issueIsp.getIspField().getName() + "</span>");
@@ -639,14 +716,33 @@
 
     // �샇�뒪�똿 �젙蹂� 蹂�寃� �젙蹂대�� 湲곕줉�븳�떎.
     @Override
-    public void detectIssueHosting(IssueHistoryType type, Map<String, Object> param, HostingField hostingField, IssueHosting issueHosting, StringBuilder description) {
+    public void detectIssueHosting(IssueHistoryType type, Map<String, Object> param, HostingFieldForm hostingFieldForm, IssueHosting issueHosting, StringBuilder description) {
+        Long hostingFieldId = 0L;
         Long id = 0L;
+        String name = "";
+        String manager = "";
+        String tel = "";
+        String email = "";
+        String memo = "";
         if (param != null) {
             id = MapUtil.getLong(param, "hostingId");
-        }else if(hostingField != null) {
-            id = hostingField.getId();
+            name = MapUtil.getString(param, "name");
+            /*manager = MapUtil.getString(param, "manager");
+            tel = MapUtil.getString(param, "tel");
+            email = MapUtil.getString(param, "email");
+            memo = MapUtil.getString(param, "memo");*/
+        }else if(hostingFieldForm != null) {
+            id = hostingFieldForm.getId();
+            name = hostingFieldForm.getName();
+            /*manager = hostingFieldForm.getManager();
+            tel = hostingFieldForm.getTel();
+            email = hostingFieldForm.getEmail();
+            memo = hostingFieldForm.getMemo();*/
         }
-        Long hostingFieldId = issueHosting.getHostingField().getId();
+
+        if (issueHosting.getHostingField() != null && issueHosting.getHostingField().getId() != null) {
+            hostingFieldId = issueHosting.getHostingField().getId();
+        }
 
         if (type == IssueHistoryType.ADD) {
             description.append("<span translate=\"issue.issueHostingAddHistory\">�샇�뒪�똿 �젙蹂닿� 異붽��릺�뿀�뒿�땲�떎. </span>");
@@ -654,24 +750,24 @@
         }else if(type == IssueHistoryType.MODIFY){
             if(id != null && !hostingFieldId.equals(id)){ //�닔�젙 �븷 寃쎌슦
                 description.append("<span translate=\"issue.issueHostingModifyHistory\">�샇�뒪�똿 �젙蹂닿� 蹂�寃쎈릺�뿀�뒿�땲�떎. </span>");
-                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + param.get("name") + "</span>");
+                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + name + "</span>");
             }
-            if(hostingFieldId.equals(id) && param.get("manager") != null && (issueHosting.getManager() == null || !issueHosting.getManager().equals(param.get("manager")))){
+            /*if(hostingFieldId.equals(id) && manager != null && (issueHosting.getManager() == null || !issueHosting.getManager().equals(manager))){
                 description.append("<span translate=\"issue.issueHostingModifyManagerHistory\">�샇�뒪�똿 �젙蹂댁쓽 �떞�떦�옄媛� 蹂�寃쎈릺�뿀�뒿�땲�떎. </span>");
-                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + param.get("manager") + "</span>");
+                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + manager + "</span>");
             }
-            if(hostingFieldId.equals(id) && param.get("tel") != null && (issueHosting.getTel() == null || !issueHosting.getTel().equals(param.get("tel")))){
+            if(hostingFieldId.equals(id) && tel != null && (issueHosting.getTel() == null || !issueHosting.getTel().equals(tel))){
                 description.append("<span translate=\"issue.issueHostingModifyTelHistory\">�샇�뒪�똿 �젙蹂댁쓽 �쟾�솕踰덊샇媛� 蹂�寃쎈릺�뿀�뒿�땲�떎. </span>");
-                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + param.get("tel") + "</span>");
+                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + tel + "</span>");
             }
-            if(hostingFieldId.equals(id) && param.get("email") != null && (issueHosting.getEmail() == null || !issueHosting.getEmail().equals(param.get("email")))){
+            if(hostingFieldId.equals(id) && email != null && (issueHosting.getEmail() == null || !issueHosting.getEmail().equals(email))){
                 description.append("<span translate=\"issue.issueHostingModifyEmailHistory\">�샇�뒪�똿 �젙蹂댁쓽 �씠硫붿씪�씠 蹂�寃쎈릺�뿀�뒿�땲�떎. </span>");
-                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + param.get("email") + "</span>");
+                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + email + "</span>");
             }
-            if(hostingFieldId.equals(id) && param.get("memo") != null && (issueHosting.getMemo() == null || !issueHosting.getMemo().equals(param.get("memo")))){
+            if(hostingFieldId.equals(id) && memo != null && (issueHosting.getMemo() == null || !issueHosting.getMemo().equals(memo))){
                 description.append("<span translate=\"issue.issueHostingModifyMemoHistory\">�샇�뒪�똿 �젙蹂댁쓽 鍮꾧퀬媛� 蹂�寃쎈릺�뿀�뒿�땲�떎. </span>");
-                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + param.get("memo") + "</span>");
-            }
+                description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + memo + "</span>");
+            }*/
         } else {
             description.append("<span translate=\"issue.issueHostingRemoveHistory\">�샇�뒪�똿 �젙蹂닿� �궘�젣�릺�뿀�뒿�땲�떎. " + issueHosting.getHostingField().getName() + "</span>");
             description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + issueHosting.getHostingField().getName() + "</span>");
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueHostingServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueHostingServiceImpl.java
index 5e55c83..21f5d4c 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueHostingServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueHostingServiceImpl.java
@@ -48,6 +48,43 @@
     }
 
     /**
+     * �깉濡쒖슫 �샇�뒪�똿 吏곸젒 異붽�
+     * @param issueForm IssueForm
+     * @param issue Issue
+     */
+    private void CreateHostingField(IssueForm issueForm, Issue issue) {
+        StringBuilder sb = new StringBuilder();
+        // issueHosting �븘�뱶 �뤌 留뚮뱾湲�
+        HostingFieldForm hostingFieldForm = new HostingFieldForm();
+        hostingFieldForm.setName(issueForm.getHostingName());
+        hostingFieldForm.setCode(issueForm.getHostingCode());
+        hostingFieldForm.setEmail(issueForm.getHostingEmail());
+        hostingFieldForm.setUrl(issueForm.getHostingUrl());
+        hostingFieldForm.setManager(issueForm.getHostingManager());
+        hostingFieldForm.setTel(issueForm.getHostingTel());
+        hostingFieldForm.setMemo(issueForm.getHostingMemo());
+
+        IssueHosting newIssueHosting = CreateIssueHosting(hostingFieldForm, issue);
+        HostingField hostingField = new HostingField();
+
+        // �궗�슜�옄媛� 吏곸젒 �엯�젰�떆�뿉 �샇�뒪�똿 紐⑸줉�뿉 異붽�
+        if (newIssueHosting.getHostingField() == null) {
+            hostingField = this.hostingFieldService.add(hostingFieldForm);
+            newIssueHosting.setHostingField(hostingField);
+            IssueHosting oldIssueHosting = this.issueHostingRepository.findByIssueId(issue.getId());
+            if (oldIssueHosting != null) {
+                this.issueHostingRepository.deleteById(oldIssueHosting.getId());
+                issueHistoryService.detectIssueHosting(IssueHistoryType.MODIFY, null, hostingFieldForm, oldIssueHosting, sb);
+            } else {
+                issueHistoryService.detectIssueHosting(IssueHistoryType.ADD, null, hostingFieldForm, newIssueHosting, sb);
+            }
+        }
+        // 異붽� �씠�젰
+        issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
+        this.issueHostingRepository.saveAndFlush(newIssueHosting);
+    }
+
+    /**
      * �씠�뒋 �샇�뒪�똿 留뚮뱾湲�
      * @param hostingFieldForm HostingFieldForm
      * @param issue �씠�뒋
@@ -56,8 +93,8 @@
     private IssueHosting CreateIssueHosting(HostingFieldForm hostingFieldForm, Issue issue) {
         IssueHosting issueHosting = ConvertUtil.copyProperties(hostingFieldForm, IssueHosting.class);
         issueHosting.setIssue(issue);
-        HostingField hostingField = this.hostingFieldService.getHosting(hostingFieldForm.getId());
-        if (hostingField != null) {
+        if (hostingFieldForm.getId() != null && hostingFieldForm.getId() != -1) {
+            HostingField hostingField = this.hostingFieldService.getHosting(hostingFieldForm.getId());
             issueHosting.setHostingField(hostingField);
         }
         return issueHosting;
@@ -81,13 +118,18 @@
     @Transactional
     public void modifyIssueHostingField(Issue issue, IssueForm issueForm) {
         if (issue != null) {
+            StringBuilder sb = new StringBuilder();
             List<Map<String, Object>> issueHostingFields = issueForm.getIssueHostingFields();
-            Map<String, Object> param = issueHostingFields.get(0);
 
             if (issueHostingFields != null && issueHostingFields.size() > 0) {
+                Map<String, Object> param = issueHostingFields.get(0);
                 IssueHosting issueHosting = this.issueHostingRepository.findByIssueId(issue.getId());
 
                 if (issueHosting != null) { //�닔�젙 �떆
+                    // 蹂�寃� �씠�젰 �궓湲곌퀬 issueHosting�뿉 set �빐二쇨린
+                    issueHistoryService.detectIssueHosting(IssueHistoryType.MODIFY, param, null, issueHosting, sb);
+                    issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
+                    
                     issueHosting.setName(MapUtil.getString(param, "name"));
                     issueHosting.setEmail(MapUtil.getString(param, "email"));
                     issueHosting.setCode(MapUtil.getString(param, "code"));
@@ -95,42 +137,22 @@
                     issueHosting.setManager(MapUtil.getString(param, "manager"));
                     issueHosting.setTel(MapUtil.getString(param, "tel"));
                     issueHosting.setMemo(MapUtil.getString(param, "memo"));
-                    // 蹂�寃� �씠�젰
-                    StringBuilder sb = new StringBuilder();
-                    issueHistoryService.detectIssueHosting(IssueHistoryType.MODIFY, param, null, issueHosting, sb);
-                    issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
+                    
                     this.issueHostingRepository.saveAndFlush(issueHosting);
 
                 } else { //異붽� �떆
                     IssueHosting newIssueHosting = CreateIssueHosting(param, issue);
                     // 異붽� �씠�젰
-                    StringBuilder sb = new StringBuilder();
                     issueHistoryService.detectIssueHosting(IssueHistoryType.ADD, param, null, newIssueHosting, sb);
                     issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
                     this.issueHostingRepository.saveAndFlush(newIssueHosting);
                 }
             } else if(issueForm.getHostingName() != null && !issueForm.getHostingName().equals("")) {
-                // issueHosting �븘�뱶 �뤌 留뚮뱾湲�
-                HostingFieldForm hostingFieldForm = new HostingFieldForm();
-                hostingFieldForm.setName(issueForm.getHostingName());
-                hostingFieldForm.setCode(issueForm.getHostingCode());
-                hostingFieldForm.setEmail(issueForm.getHostingEmail());
-                hostingFieldForm.setUrl(issueForm.getHostingUrl());
-                hostingFieldForm.setManager(issueForm.getHostingManager());
-                hostingFieldForm.setTel(issueForm.getHostingTel());
-                hostingFieldForm.setMemo(issueForm.getHostingMemo());
-
-                IssueHosting newIssueHosting = CreateIssueHosting(hostingFieldForm, issue);
-                HostingField hostingField = new HostingField();
-                if (newIssueHosting.getHostingField() == null) { // �궗�슜�옄媛� 吏곸젒 �엯�젰�떆�뿉 �샇�뒪�똿 紐⑸줉�뿉 異붽�
-                    hostingField = this.hostingFieldService.add(hostingFieldForm);
-                    newIssueHosting.setHostingField(hostingField);
-                }
-                // 異붽� �씠�젰
-                StringBuilder sb = new StringBuilder();
-                issueHistoryService.detectIssueHosting(IssueHistoryType.ADD, param, null, newIssueHosting, sb);
-                issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
-                this.issueHostingRepository.saveAndFlush(newIssueHosting);
+                // �샇�뒪�똿 �젙蹂� 吏곸젒 異붽�
+                CreateHostingField(issueForm, issue);
+            } else {
+                this.issueHostingRepository.deleteByIssueId(issue.getId());
+                this.issueHostingRepository.flush();
             }
         }
     }
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueIspServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueIspServiceImpl.java
index a87e858..af71f52 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueIspServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueIspServiceImpl.java
@@ -44,6 +44,42 @@
         return this.issueIspRepository;
     }
 
+    /**
+     * �깉濡쒖슫 ISP 吏곸젒 異붽�
+     * @param issueForm IssueForm
+     * @param issue Issue
+     */
+    private void CreateIspField(IssueForm issueForm, Issue issue) {
+        // issueIsp �븘�뱶 �뤌 留뚮뱾湲�
+        IspFieldForm ispFieldForm = new IspFieldForm();
+        ispFieldForm.setName(issueForm.getIspName());
+        ispFieldForm.setCode(issueForm.getIspCode());
+        ispFieldForm.setEmail(issueForm.getIspEmail());
+        ispFieldForm.setUrl(issueForm.getIspUrl());
+        ispFieldForm.setManager(issueForm.getIspManager());
+        ispFieldForm.setTel(issueForm.getIspTel());
+        ispFieldForm.setMemo(issueForm.getIspMemo());
+
+        IssueIsp newIssueIsp = CreateIssueIsp(ispFieldForm, issue);
+        IspField ispField = new IspField();
+        StringBuilder sb = new StringBuilder();
+
+        // �궗�슜�옄媛� 吏곸젒 �엯�젰�떆�뿉 ISP 紐⑸줉�뿉 異붽�
+        if (newIssueIsp.getIspField() == null) {
+            ispField = this.ispFieldService.add(ispFieldForm);
+            newIssueIsp.setIspField(ispField);
+            IssueIsp oldIssueIsp = this.issueIspRepository.findByIssueId(issue.getId());
+            if (oldIssueIsp != null) {
+                issueHistoryService.detectIssueIsp(IssueHistoryType.MODIFY, null, ispFieldForm, oldIssueIsp, sb);
+                this.issueIspRepository.deleteById(oldIssueIsp.getId());
+            } else {
+                issueHistoryService.detectIssueIsp(IssueHistoryType.ADD, null, ispFieldForm, newIssueIsp, sb);
+            }
+        }
+        // 異붽� �씠�젰
+        issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
+        this.issueIspRepository.saveAndFlush(newIssueIsp);
+    }
 
     /**
      * �씠�뒋 ISP 留뚮뱾湲�
@@ -54,20 +90,18 @@
     private IssueIsp CreateIssueIsp(IspFieldForm ispFieldForm, Issue issue) {
         IssueIsp issueIsp = ConvertUtil.copyProperties(ispFieldForm, IssueIsp.class);
         issueIsp.setIssue(issue);
-        IspField ispField = this.ispFieldService.getIsp(ispFieldForm.getId());
-        if (ispField != null) {
+        if (ispFieldForm.getId() != null && ispFieldForm.getId() != -1) {
+            IspField ispField = this.ispFieldService.getIsp(ispFieldForm.getId());
             issueIsp.setIspField(ispField);
         }
-
         return issueIsp;
     }
-
 
     /**
      *  �씠�뒋 ISP 留뚮뱾湲�
      * @param ispFieldMap Map<String, Object> IspFieldForm map
      * @param issue �씠�뒋
-     * @return ISPIssue
+     * @return IssueIsp CreateIssueIsp
      */
     private IssueIsp CreateIssueIsp(Map<String, Object> ispFieldMap, Issue issue) {
         IspFieldForm ispFieldForm = ConvertUtil.convertMapToClass(ispFieldMap, IspFieldForm.class);
@@ -75,19 +109,23 @@
         return CreateIssueIsp(ispFieldForm, issue);
     }
 
-
     //  �씠�뒋�뿉�꽌 �궗�슜�릺�뒗 �뾽泥� 媛믪쓣 �뾽�뜲�씠�듃�븳�떎.
     @Override
     @Transactional
     public void modifyIssueIspField(Issue issue, IssueForm issueForm) {
         if (issue != null) {
+            StringBuilder sb = new StringBuilder();
             List<Map<String, Object>> issueIspFields = issueForm.getIssueIspFields();
-            Map<String, Object> param = issueIspFields.get(0);
 
             if (issueIspFields != null && issueIspFields.size() > 0) {
+                Map<String, Object> param = issueIspFields.get(0);
                 IssueIsp issueIsp = this.issueIspRepository.findByIssueId(issue.getId());
 
                 if (issueIsp != null) {//�닔�젙 �떆
+                    // 蹂�寃� �씠�젰 �궓湲곌퀬 issueIsp�뿉 set�빐二쇨린
+                    issueHistoryService.detectIssueIsp(IssueHistoryType.MODIFY, param, null, issueIsp, sb);
+                    issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
+                    
                     issueIsp.setName(MapUtil.getString(param, "name"));
                     issueIsp.setEmail(MapUtil.getString(param, "email"));
                     issueIsp.setCode(MapUtil.getString(param, "code"));
@@ -95,16 +133,12 @@
                     issueIsp.setManager(MapUtil.getString(param, "manager"));
                     issueIsp.setTel(MapUtil.getString(param, "tel"));
                     issueIsp.setMemo(MapUtil.getString(param, "memo"));
-                    // 蹂�寃� �씠�젰
-                    StringBuilder sb = new StringBuilder();
-                    issueHistoryService.detectIssueIsp(IssueHistoryType.MODIFY, param, null, issueIsp, sb);
-                    issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
+
                     this.issueIspRepository.saveAndFlush(issueIsp);
 
                 } else { //異붽� �떆
                     IssueIsp newIssueIsp = CreateIssueIsp(param, issue);
                     // 異붽� �씠�젰
-                    StringBuilder sb = new StringBuilder();
                     issueHistoryService.detectIssueIsp(IssueHistoryType.ADD, param, null, newIssueIsp, sb);
                     issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
                     this.issueIspRepository.saveAndFlush(newIssueIsp);
@@ -112,28 +146,11 @@
             }
             // �궗�슜�옄媛� 吏곸젒 �엯�젰�떆
             else if(issueForm.getIspName() != null && !issueForm.getIspName().equals("")) {
-                // issueIsp �븘�뱶 �뤌 留뚮뱾湲�
-                IspFieldForm ispFieldForm = new IspFieldForm();
-                ispFieldForm.setName(issueForm.getIspName());
-                ispFieldForm.setCode(issueForm.getIspCode());
-                ispFieldForm.setEmail(issueForm.getIspEmail());
-                ispFieldForm.setUrl(issueForm.getIspUrl());
-                ispFieldForm.setManager(issueForm.getIspManager());
-                ispFieldForm.setTel(issueForm.getIspTel());
-                ispFieldForm.setMemo(issueForm.getIspMemo());
-
-                IssueIsp newIssueIsp = CreateIssueIsp(ispFieldForm, issue);
-                IspField ispField = new IspField();
-                // �궗�슜�옄媛� 吏곸젒 �엯�젰�떆�뿉 ISP 紐⑸줉�뿉 異붽�
-                if (newIssueIsp.getIspField() == null) {
-                    ispField = this.ispFieldService.add(ispFieldForm);
-                    newIssueIsp.setIspField(ispField);
-                }
-                // 異붽� �씠�젰
-                StringBuilder sb = new StringBuilder();
-                issueHistoryService.detectIssueIsp(IssueHistoryType.ADD, param, null, newIssueIsp, sb);
-                issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
-                this.issueIspRepository.saveAndFlush(newIssueIsp);
+                //ISP�젙蹂� 吏곸젒 異붽�
+                CreateIspField(issueForm, issue);
+            } else {
+                this.issueIspRepository.deleteByIssueId(issue.getId());
+                this.issueIspRepository.flush();
             }
         }
     }
diff --git a/src/main/webapp/i18n/ko/global.json b/src/main/webapp/i18n/ko/global.json
index 2803b28..fb03238 100644
--- a/src/main/webapp/i18n/ko/global.json
+++ b/src/main/webapp/i18n/ko/global.json
@@ -184,6 +184,11 @@
         "issueCompanyModifyTelHistory" : "�뾽泥� �젙蹂댁쓽 �쟾�솕踰덊샇媛� 蹂�寃쎈릺�뿀�뒿�땲�떎.",
         "issueCompanyModifyEmailHistory" : "�뾽泥� �젙蹂댁쓽 �씠硫붿씪�씠 蹂�寃쎈릺�뿀�뒿�땲�떎.",
         "issueCompanyModifyMemoHistory" : "�뾽泥� �젙蹂댁쓽 鍮꾧퀬媛� 蹂�寃쎈릺�뿀�뒿�땲�떎.",
+        "issueCompanyModifyCompanyTypeHistory" : "�뾽泥� �젙蹂댁쓽 湲곗뾽援щ텇�씠 蹂�寃쎈릺�뿀�뒿�땲�떎.",
+        "issueCompanyModifyParentSectorHistory" : "�뾽泥� �젙蹂댁쓽 �뾽醫�(��遺꾨쪟)�씠 蹂�寃쎈릺�뿀�뒿�땲�떎.",
+        "issueCompanyModifyChildSectorHistory" : "�뾽泥� �젙蹂댁쓽 �뾽醫�(以묐텇瑜�)�씠 蹂�寃쎈릺�뿀�뒿�땲�떎.",
+        "issueCompanyModifyRegionHistory" : "�뾽泥� �젙蹂댁쓽 吏��뿭�씠 蹂�寃쎈릺�뿀�뒿�땲�떎.",
+        "issueCompanyModifyStatusHistory" : "�뾽泥� �젙蹂댁쓽 �긽�깭媛� 蹂�寃쎈릺�뿀�뒿�땲�떎.",
 
         "issueIspRemoveHistory" : "ISP �젙蹂닿� �궘�젣�릺�뿀�뒿�땲�떎.",
         "issueIspAddHistory" : "ISP �젙蹂닿� 異붽��릺�뿀�뒿�땲�떎.",
diff --git a/src/main/webapp/scripts/app/issue/issueModify.controller.js b/src/main/webapp/scripts/app/issue/issueModify.controller.js
index 04c9f2a..cfa4780 100644
--- a/src/main/webapp/scripts/app/issue/issueModify.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueModify.controller.js
@@ -435,6 +435,22 @@
                     return false;
                 }
 
+                $scope.$on("companyTypeEvent", function (event, result) {
+                    $scope.vm.form.companyTypeId = result[0].id;
+                });
+                $scope.$on("parentSectorEvent", function (event, result) {
+                    $scope.vm.form.parentSectorId = result[0].id;
+                });
+                $scope.$on("childSectorEvent", function (event, result) {
+                    $scope.vm.form.childSectorId = result[0].id;
+                });
+                $scope.$on("regionEvent", function (event, result) {
+                    $scope.vm.form.regionId = result[0].id;
+                });
+                $scope.$on("statusEvent", function (event, result) {
+                    $scope.vm.form.statusId = result[0].id;
+                });
+
                 // �뾽泥댁젙蹂� 寃곌낵 媛� Event 泥섎━(set)
                 $scope.$on("companyFieldEvent", function (event, result) {
                     var ispFieldVo = result[0].ispFieldVo;
@@ -477,6 +493,7 @@
                     $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;
@@ -487,6 +504,7 @@
                         $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;
@@ -677,7 +695,11 @@
                         issueCompanyFields : (function () {
                             var issueCompanyFields = [];
                             if ($scope.vm.form.issueCompanyFields != null && $scope.vm.form.issueCompanyFields.length > 0 ){
+
                                 var companyField = $scope.vm.form.issueCompanyFields[0];
+                                if (companyField.name !== $scope.vm.companyName) { //�궗�슜�옄媛� 吏곸젒 �뾽泥� 異붽� �븷 寃쎌슦
+                                    return issueCompanyFields;
+                                }
 
                                 issueCompanyFields.push({
                                     id : companyField.id,
@@ -688,11 +710,11 @@
                                     email :$scope.vm.companyEmail,
                                     url :$scope.vm.companyUrl,
                                     memo : $scope.vm.companyMemo,
-                                    companyTypeId : companyField.companyTypeId,
-                                    parentSectorId : companyField.parentSectorId,
-                                    childSectorId : companyField.childSectorId,
-                                    regionId : companyField.regionId,
-                                    statusId : companyField.statusId
+                                    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
                                 });
                             }
 
@@ -704,6 +726,11 @@
                             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];
+                                if (ispField.name !== $scope.vm.ispName) { //�궗�슜�옄媛� 吏곸젒 ISP 異붽� �븷 寃쎌슦
+                                    return issueIspFields;
+                                }
 
                                 issueIspFields.push({
                                     ispId : $scope.vm.ispId,
@@ -727,6 +754,11 @@
                                 && $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 (hostingField.name !== $scope.vm.hostingName) { //�궗�슜�옄媛� 吏곸젒 �샇�뒪�똿 異붽� �븷 寃쎌슦
+                                    return issueHostingFields;
+                                }
+
                                 issueHostingFields.push({
                                     hostingId : $scope.vm.hostingId,
                                     name : $scope.vm.hostingName,
diff --git a/src/main/webapp/scripts/components/utils/autoComplete.controller.js b/src/main/webapp/scripts/components/utils/autoComplete.controller.js
index 0e0b256..e4b86e9 100644
--- a/src/main/webapp/scripts/components/utils/autoComplete.controller.js
+++ b/src/main/webapp/scripts/components/utils/autoComplete.controller.js
@@ -521,7 +521,7 @@
                         parentId : (function () {   // �뾽醫�(��遺꾨쪟)
                             var parentId = "";
                             if (parentSector != null && parentSector !== "") {
-                                parentId = parentSector[0].id;
+                                parentId = parentSector;
                             }else {
                                 parentId = parentSectorId;
                             }
diff --git a/src/main/webapp/views/companyField/companyFieldModify.html b/src/main/webapp/views/companyField/companyFieldModify.html
index b66d3e4..4b303b6 100644
--- a/src/main/webapp/views/companyField/companyFieldModify.html
+++ b/src/main/webapp/views/companyField/companyFieldModify.html
@@ -218,7 +218,7 @@
                                             ng-model="vm.form.childSector"
                                             custom-input="false"
                                             search="vm.form.childSector"
-                                            source="fn.getCompanyChildSector(vm.form.parentSectors, vm.form.parentSectorId, vm.typeCategory.childSector, vm.form.childSector, vm.form.childSectors, vm.autoCompletePage.childSector.page, fn.getChildSectorListCallBack)"
+                                            source="fn.getCompanyChildSector(vm.form.parentSectorId, vm.form.parentSectors[0].id, vm.typeCategory.childSector, vm.form.childSector, vm.form.childSectors, vm.autoCompletePage.childSector.page, fn.getChildSectorListCallBack)"
                                             page="vm.autoCompletePage.childSector.page"
                                             total-page="vm.autoCompletePage.childSector.totalPage"
                                             input-disabled="false"
diff --git a/src/main/webapp/views/issue/issueModify.html b/src/main/webapp/views/issue/issueModify.html
index 836b664..e483193 100644
--- a/src/main/webapp/views/issue/issueModify.html
+++ b/src/main/webapp/views/issue/issueModify.html
@@ -530,6 +530,7 @@
                                                 page="vm.autoCompletePage.companyType.page"
                                                 total-page="vm.autoCompletePage.companyType.totalPage"
                                                 input-disabled="false"
+                                                broad-cast="companyTypeEvent"
                                                 translation-texts="{ empty : 'common.emptyCompanyType' }"
                                                 extra-settings="{ displayProp : 'useValue' , idProp : 'id', imageable : false, imagePathProp : '',
                                                 type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single>
@@ -549,6 +550,7 @@
                                                 page="vm.autoCompletePage.parentSector.page"
                                                 total-page="vm.autoCompletePage.parentSector.totalPage"
                                                 input-disabled="false"
+                                                broad-cast="parentSectorEvent"
                                                 translation-texts="{ empty : 'common.emptyParentSector' }"
                                                 extra-settings="{ displayProp : 'useValue' , idProp : 'id', imageable : false, imagePathProp : '',
                                                 type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single>
@@ -568,6 +570,7 @@
                                                 page="vm.autoCompletePage.childSector.page"
                                                 total-page="vm.autoCompletePage.childSector.totalPage"
                                                 input-disabled="false"
+                                                broad-cast="childSectorEvent"
                                                 translation-texts="{ empty : 'common.emptyChildSector' }"
                                                 extra-settings="{ displayProp : 'useValue' , idProp : 'id', imageable : false, imagePathProp : '',
                                                 type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single>
@@ -587,6 +590,7 @@
                                                 page="vm.autoCompletePage.region.page"
                                                 total-page="vm.autoCompletePage.region.totalPage"
                                                 input-disabled="false"
+                                                broad-cast="regionEvent"
                                                 translation-texts="{ empty : 'common.emptyRegion' }"
                                                 extra-settings="{ displayProp : 'useValue' , idProp : 'id', imageable : false, imagePathProp : '',
                     type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single>
@@ -606,6 +610,7 @@
                                                 page="vm.autoCompletePage.status.page"
                                                 total-page="vm.autoCompletePage.status.totalPage"
                                                 input-disabled="false"
+                                                broad-cast="statusEvent"
                                                 translation-texts="{ empty : 'common.emptyStatus' }"
                                                 extra-settings="{ displayProp : 'useValue' , idProp : 'id', imageable : false, imagePathProp : '',
                     type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single>

--
Gitblit v1.8.0