From b72f7719cb2427912b1fba6f3abb117ffd49de49 Mon Sep 17 00:00:00 2001
From: wyu <kknd09321@nate.com>
Date: 금, 24 12월 2021 16:10:24 +0900
Subject: [PATCH] Merge branch 'master' of http://192.168.0.25:9001/r/owl-kisa

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java            |   42 +++++---
 src/main/resources/mybatis/query-template/userWorkspace-template.xml         |    3 
 src/main/java/kr/wisestone/owl/service/IssueHistoryService.java              |    6 
 src/main/resources/mybatis/query-template/issue-template.xml                 |    5 
 src/main/java/kr/wisestone/owl/constant/MsgConstants.java                    |    2 
 src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties                       |    5 
 src/main/java/kr/wisestone/owl/service/impl/IssueHostingServiceImpl.java     |   34 +++++-
 src/main/java/kr/wisestone/owl/service/IssueCompanyService.java              |    3 
 src/main/java/kr/wisestone/owl/service/IssueHostingService.java              |    3 
 src/main/java/kr/wisestone/owl/service/impl/IspFieldServiceImpl.java         |   10 +
 src/main/java/kr/wisestone/owl/service/impl/IssueCompanyServiceImpl.java     |   30 +++++
 src/main/webapp/scripts/app/workspace/workspaceUserConfig.controller.js      |   19 +--
 src/main/java/kr/wisestone/owl/vo/UserWorkspaceVo.java                       |    9 +
 src/main/java/kr/wisestone/owl/service/IssueIspService.java                  |    3 
 src/main/java/kr/wisestone/owl/service/impl/HostingFieldServiceImpl.java     |   10 +
 src/main/java/kr/wisestone/owl/service/impl/IssueIspServiceImpl.java         |   31 +++++
 src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js |   31 +++--
 src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java     |   27 ++++-
 18 files changed, 195 insertions(+), 78 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
index 6ed48e3..5a278a0 100644
--- a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
+++ b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -232,9 +232,11 @@
     public static final String COMPANYFIELD_USED_URL = "COMPANYFIELD_USED_URL";   // URL�씠 �씠誘� �궗�슜�릺怨� �엳�뒿�땲�떎.
 
     public static final String HOSTING_NOT_EXIST = "HOSTING_NOT_EXIST";   // �샇�뒪�똿�씠 議댁옱�븯吏� �븡�뒿�땲�떎.
+    public static final String HOSTING_CODE_NOT_ENTER = "HOSTING_CODE_NOT_ENTER";   // �샇�뒪�똿�쓽 肄붾뱶�뒗 �븘�닔 �엯�젰 媛믪엯�땲�떎.
     public static final String HOSTING_REMOVE_NOT_SELECT = "HOSTING_REMOVE_NOT_SELECT";   // �궘�젣�븷 �샇�뒪�똿�씠 �꽑�깮�릺吏� �븡�븯�뒿�땲�떎.
 
     public static final String ISP_NOT_EXIST = "ISP_NOT_EXIST";   // ISP媛� 議댁옱�븯吏� �븡�뒿�땲�떎.
+    public static final String ISP_CODE_NOT_ENTER = "ISP_CODE_NOT_ENTER";   // ISP�쓽 肄붾뱶�뒗 �븘�닔 �엯�젰 媛믪엯�땲�떎.
     public static final String ISP_REMOVE_NOT_SELECT = "ISP_REMOVE_NOT_SELECT";   // �궘�젣�븷 ISP媛� �꽑�깮�릺吏� �븡�븯�뒿�땲�떎.
     public static final String PROJECT_NOT_INCLUDE_DEPARTMENT = "PROJECT_NOT_INCLUDE_DEPARTMENT";   // �꽑�깮�븳 遺��꽌 以� �봽濡쒖젥�듃�뿉 李몄뿬�븯怨� �엳吏� �븡�� 遺��꽌媛� �엳�뒿�땲�떎.
 
diff --git a/src/main/java/kr/wisestone/owl/service/IssueCompanyService.java b/src/main/java/kr/wisestone/owl/service/IssueCompanyService.java
index 1739482..a1c68ae 100644
--- a/src/main/java/kr/wisestone/owl/service/IssueCompanyService.java
+++ b/src/main/java/kr/wisestone/owl/service/IssueCompanyService.java
@@ -3,13 +3,14 @@
 import kr.wisestone.owl.domain.Issue;
 import kr.wisestone.owl.domain.IssueCompany;
 import kr.wisestone.owl.web.condition.IssueCondition;
+import kr.wisestone.owl.web.form.IssueForm;
 import org.springframework.data.jpa.repository.JpaRepository;
 
 import java.util.List;
 import java.util.Map;
 
 public interface IssueCompanyService extends AbstractService<IssueCompany, Long, JpaRepository<IssueCompany, Long>>{
-    void modifyIssueCompanyField(Issue issue, List<Map<String, Object>> issueCompanyField);
+    void modifyIssueCompanyField(Issue issue, IssueForm issueForm);
 
     List<Map<String, Object>> findInIssueIds(IssueCondition issueCondition);
 }
diff --git a/src/main/java/kr/wisestone/owl/service/IssueHistoryService.java b/src/main/java/kr/wisestone/owl/service/IssueHistoryService.java
index 4c1cc74..3855b9f 100644
--- a/src/main/java/kr/wisestone/owl/service/IssueHistoryService.java
+++ b/src/main/java/kr/wisestone/owl/service/IssueHistoryService.java
@@ -63,11 +63,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, IssueCompany issueCompany, StringBuilder description);
+    void detectIssueCompany(IssueHistoryType type, Map<String, Object> param, CompanyField companyField, IssueCompany issueCompany, StringBuilder description);
 
-    void detectIssueIsp(IssueHistoryType type, Map<String, Object> param, IssueIsp issueIsp, StringBuilder description);
+    void detectIssueIsp(IssueHistoryType type, Map<String, Object> param, IspField ispField, IssueIsp issueIsp, StringBuilder description);
 
-    void detectIssueHosting(IssueHistoryType type, Map<String, Object> param, IssueHosting issueHosting, StringBuilder description);
+    void detectIssueHosting(IssueHistoryType type, Map<String, Object> param, HostingField hostingField, IssueHosting issueHosting, StringBuilder description);
 
     void recodeRemoveCustomFieldOptionValue(CustomField customField, String oldValue, String newValue, StringBuilder description);
 
diff --git a/src/main/java/kr/wisestone/owl/service/IssueHostingService.java b/src/main/java/kr/wisestone/owl/service/IssueHostingService.java
index d62ec59..dad3358 100644
--- a/src/main/java/kr/wisestone/owl/service/IssueHostingService.java
+++ b/src/main/java/kr/wisestone/owl/service/IssueHostingService.java
@@ -3,13 +3,14 @@
 import kr.wisestone.owl.domain.Issue;
 import kr.wisestone.owl.domain.IssueHosting;
 import kr.wisestone.owl.web.condition.IssueCondition;
+import kr.wisestone.owl.web.form.IssueForm;
 import org.springframework.data.jpa.repository.JpaRepository;
 
 import java.util.List;
 import java.util.Map;
 
 public interface IssueHostingService extends AbstractService<IssueHosting, Long, JpaRepository<IssueHosting, Long>>{
-    void modifyIssueHostingField(Issue issue, List<Map<String, Object>> issueHostingField);
+    void modifyIssueHostingField(Issue issue, IssueForm issueForm);
 
     List<Map<String, Object>> findInIssueIds(IssueCondition issueCondition);
 }
diff --git a/src/main/java/kr/wisestone/owl/service/IssueIspService.java b/src/main/java/kr/wisestone/owl/service/IssueIspService.java
index 071ff49..531aaf3 100644
--- a/src/main/java/kr/wisestone/owl/service/IssueIspService.java
+++ b/src/main/java/kr/wisestone/owl/service/IssueIspService.java
@@ -3,13 +3,14 @@
 import kr.wisestone.owl.domain.Issue;
 import kr.wisestone.owl.domain.IssueIsp;
 import kr.wisestone.owl.web.condition.IssueCondition;
+import kr.wisestone.owl.web.form.IssueForm;
 import org.springframework.data.jpa.repository.JpaRepository;
 
 import java.util.List;
 import java.util.Map;
 
 public interface IssueIspService extends AbstractService<IssueIsp, Long, JpaRepository<IssueIsp, Long>>{
-    void modifyIssueIspField(Issue issue, List<Map<String, Object>> issueIspField);
+    void modifyIssueIspField(Issue issue, IssueForm issueForm);
 
     List<Map<String, Object>> findInIssueIds(IssueCondition issueCondition);
 }
diff --git a/src/main/java/kr/wisestone/owl/service/impl/HostingFieldServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/HostingFieldServiceImpl.java
index 26f8d67..d2038a4 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/HostingFieldServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/HostingFieldServiceImpl.java
@@ -58,9 +58,13 @@
     // Hosting 異붽�
     @Override
     public HostingField add(HostingFieldForm HostingFieldForm) {
-        HostingField HostingField = ConvertUtil.copyProperties(HostingFieldForm, HostingField.class);
-        hostingFieldRepository.saveAndFlush(HostingField);
-        return HostingField;
+        HostingField hostingField = ConvertUtil.copyProperties(HostingFieldForm, HostingField.class);
+        if (hostingField.getCode() != null && !hostingField.getCode().equals("")) {
+            hostingFieldRepository.saveAndFlush(hostingField);
+        } else {
+            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.HOSTING_CODE_NOT_ENTER));
+        }
+        return hostingField;
     }
 
     // Hosting 紐⑸줉�쓣 媛��졇�삩�떎.
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IspFieldServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IspFieldServiceImpl.java
index 2893698..054459d 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IspFieldServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IspFieldServiceImpl.java
@@ -58,9 +58,13 @@
     // Isp 異붽�
     @Override
     public IspField add(IspFieldForm IspFieldForm) {
-        IspField IspField = ConvertUtil.copyProperties(IspFieldForm, IspField.class);
-        ispFieldRepository.saveAndFlush(IspField);
-        return IspField;
+        IspField ispField = ConvertUtil.copyProperties(IspFieldForm, IspField.class);
+        if (ispField.getCode() != null && !ispField.getCode().equals("")) {
+            ispFieldRepository.saveAndFlush(ispField);
+        } else {
+            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.ISP_CODE_NOT_ENTER));
+        }
+        return ispField;
     }
 
     // Isp 紐⑸줉�쓣 媛��졇�삩�떎.
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 54e03d3..a3d2ed5 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueCompanyServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueCompanyServiceImpl.java
@@ -8,6 +8,8 @@
 import kr.wisestone.owl.util.ConvertUtil;
 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.IssueForm;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,8 +44,9 @@
     //  �씠�뒋�뿉�꽌 �궗�슜�릺�뒗 �뾽泥� 媛믪쓣 �뾽�뜲�씠�듃�븳�떎.
     @Override
     @Transactional
-    public void modifyIssueCompanyField(Issue issue, List<Map<String, Object>> issueCompanyFields) {
+    public void modifyIssueCompanyField(Issue issue, IssueForm issueForm) {
         if (issue != null) {
+            List<Map<String, Object>> issueCompanyFields = issueForm.getIssueCompanyFields();
             if (issueCompanyFields != null && issueCompanyFields.size() > 0) {
                 Map<String, Object> param = issueCompanyFields.get(0);
 
@@ -56,7 +59,7 @@
                         issueCompany = issueCompanies.iterator().next();
                         // 蹂�寃� �씠�젰
                         StringBuilder sb = new StringBuilder();
-                        issueHistoryService.detectIssueCompany(IssueHistoryType.MODIFY, param, issueCompany, sb);
+                        issueHistoryService.detectIssueCompany(IssueHistoryType.MODIFY, param, null, issueCompany, sb);
                         issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
 
                         issueCompany.setCompanyField(companyField);
@@ -74,13 +77,34 @@
                         }
                         // 異붽� �씠�젰
                         StringBuilder sb = new StringBuilder();
-                        issueHistoryService.detectIssueCompany(IssueHistoryType.ADD, param, issueCompany, sb);
+                        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());
+
+                CompanyField companyField = this.companyFieldService.addCompany(companyFieldForm);
+
+                IssueCompany issueCompany = ConvertUtil.copyProperties(companyFieldForm, IssueCompany.class);
+                issueCompany.setIssue(issue);
+                if (companyField != null) {
+                    issueCompany.setCompanyField(companyField);
+                }
+                // 異붽� �씠�젰
+                StringBuilder sb = new StringBuilder();
+                issueHistoryService.detectIssueCompany(IssueHistoryType.ADD, null, companyField, issueCompany, sb);
+                issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
+                this.issueCompanyRepository.saveAndFlush(issueCompany);
             }
         }
     }
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 3a5ad54..3f9f4ec 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java
@@ -554,8 +554,13 @@
 
     // �뾽泥� �젙蹂� 蹂�寃� �젙蹂대�� 湲곕줉�븳�떎.
     @Override
-    public void detectIssueCompany(IssueHistoryType type, Map<String, Object> param, IssueCompany issueCompany, StringBuilder description) {
-        Long id = MapUtil.getLong(param, "companyId");
+    public void detectIssueCompany(IssueHistoryType type, Map<String, Object> param, CompanyField companyField, IssueCompany issueCompany, StringBuilder description) {
+        Long id = 0L;
+        if (param != null) {
+            id = MapUtil.getLong(param, "companyId");
+        }else if(companyField != null) {
+            id = companyField.getId();
+        }
         Long companyFieldId = issueCompany.getCompanyField().getId();
 
         if (type == IssueHistoryType.ADD) { //異붽� �븷 寃쎌슦
@@ -590,8 +595,13 @@
 
     // ISP �젙蹂� 蹂�寃� �젙蹂대�� 湲곕줉�븳�떎.
     @Override
-    public void detectIssueIsp(IssueHistoryType type, Map<String, Object> param, IssueIsp issueIsp, StringBuilder description) {
-        Long id = MapUtil.getLong(param, "companyId");
+    public void detectIssueIsp(IssueHistoryType type, Map<String, Object> param, IspField ispField, IssueIsp issueIsp, StringBuilder description) {
+        Long id = 0L;
+        if (param != null) {
+            id = MapUtil.getLong(param, "companyId");
+        } else if(ispField != null) {
+            id = ispField.getId();
+        }
         Long ispFieldId = issueIsp.getIspField().getId();
 
         if (type == IssueHistoryType.ADD) {
@@ -626,8 +636,13 @@
 
     // �샇�뒪�똿 �젙蹂� 蹂�寃� �젙蹂대�� 湲곕줉�븳�떎.
     @Override
-    public void detectIssueHosting(IssueHistoryType type, Map<String, Object> param, IssueHosting issueHosting, StringBuilder description) {
-        Long id = MapUtil.getLong(param, "companyId");
+    public void detectIssueHosting(IssueHistoryType type, Map<String, Object> param, HostingField hostingField, IssueHosting issueHosting, StringBuilder description) {
+        Long id = 0L;
+        if (param != null) {
+            id = MapUtil.getLong(param, "companyId");
+        }else if(hostingField != null) {
+            id = hostingField.getId();
+        }
         Long hostingFieldId = issueHosting.getHostingField().getId();
 
         if (type == IssueHistoryType.ADD) {
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 8bd2b6c..0817429 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueHostingServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueHostingServiceImpl.java
@@ -10,6 +10,8 @@
 import kr.wisestone.owl.util.MapUtil;
 import kr.wisestone.owl.vo.IssueHostingVo;
 import kr.wisestone.owl.web.condition.IssueCondition;
+import kr.wisestone.owl.web.form.HostingFieldForm;
+import kr.wisestone.owl.web.form.IssueForm;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -44,10 +46,11 @@
     //  �씠�뒋�뿉�꽌 �궗�슜�릺�뒗 �뾽泥� 媛믪쓣 �뾽�뜲�씠�듃�븳�떎.
     @Override
     @Transactional
-    public void modifyIssueHostingField(Issue issue, List<Map<String, Object>> issueIspFields) {
+    public void modifyIssueHostingField(Issue issue, IssueForm issueForm) {
         if (issue != null) {
-            if (issueIspFields != null && issueIspFields.size() > 0) {
-                Map<String, Object> param = issueIspFields.get(0);
+            List<Map<String, Object>> issueHostingFields = issueForm.getIssueHostingFields();
+            if (issueHostingFields != null && issueHostingFields.size() > 0) {
+                Map<String, Object> param = issueHostingFields.get(0);
 
                 if (param != null && param.get("hostingId") != null  && param.get("hostingId") != "") {
                     HostingField hostingField = this.hostingFieldService.getHosting(MapUtil.getLong(param, "hostingId"));
@@ -59,7 +62,7 @@
                         issueHosting = issueHostings.iterator().next();
                         // 蹂�寃� �씠�젰
                         StringBuilder sb = new StringBuilder();
-                        issueHistoryService.detectIssueHosting(IssueHistoryType.MODIFY, param, issueHosting, sb);
+                        issueHistoryService.detectIssueHosting(IssueHistoryType.MODIFY, param, null, issueHosting, sb);
                         issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
 
                         issueHosting.setHostingField(hostingField);
@@ -78,13 +81,34 @@
                         }
                         // 異붽� �씠�젰
                         StringBuilder sb = new StringBuilder();
-                        issueHistoryService.detectIssueHosting(IssueHistoryType.ADD, param, issueHosting, sb);
+                        issueHistoryService.detectIssueHosting(IssueHistoryType.ADD, param, null, issueHosting, sb);
                         issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
                     }
                     this.issueHostingRepository.saveAndFlush(issueHosting);
                 }else {
                     this.issueHostingRepository.deleteById(MapUtil.getLong(param, "id"));
                 }
+            } else if(issueForm.getHostingName() != null && !issueForm.getHostingName().equals("")) {
+                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());
+
+                HostingField hostingField = this.hostingFieldService.add(hostingFieldForm);
+                IssueHosting issueHosting = ConvertUtil.copyProperties(hostingFieldForm, IssueHosting.class);
+                issueHosting.setIssue(issue);
+                if (hostingField != null) {
+                    issueHosting.setHostingField(hostingField);
+                }
+                // 異붽� �씠�젰
+                StringBuilder sb = new StringBuilder();
+                issueHistoryService.detectIssueHosting(IssueHistoryType.ADD, null, hostingField, issueHosting, sb);
+                issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
+                this.issueHostingRepository.saveAndFlush(issueHosting);
             }
         }
     }
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 7ea2290..c5203db 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueIspServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueIspServiceImpl.java
@@ -8,6 +8,8 @@
 import kr.wisestone.owl.util.ConvertUtil;
 import kr.wisestone.owl.util.MapUtil;
 import kr.wisestone.owl.web.condition.IssueCondition;
+import kr.wisestone.owl.web.form.IspFieldForm;
+import kr.wisestone.owl.web.form.IssueForm;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,8 +44,9 @@
     //  �씠�뒋�뿉�꽌 �궗�슜�릺�뒗 �뾽泥� 媛믪쓣 �뾽�뜲�씠�듃�븳�떎.
     @Override
     @Transactional
-    public void modifyIssueIspField(Issue issue, List<Map<String, Object>> issueIspFields) {
+    public void modifyIssueIspField(Issue issue, IssueForm issueForm) {
         if (issue != null) {
+            List<Map<String, Object>> issueIspFields = issueForm.getIssueIspFields();
             if (issueIspFields != null && issueIspFields.size() > 0) {
                 Map<String, Object> param = issueIspFields.get(0);
 
@@ -52,12 +55,11 @@
 
                     Set<IssueIsp> issueIsps = issue.getIssueIspFields();
                     IssueIsp issueIsp = new IssueIsp();
-
                     if (issueIsps != null && issueIsps.size() > 0) {//�닔�젙 �븷 寃쎌슦
                         issueIsp = issueIsps.iterator().next();
                         // 蹂�寃� �씠�젰
                         StringBuilder sb = new StringBuilder();
-                        issueHistoryService.detectIssueIsp(IssueHistoryType.MODIFY, param, issueIsp, sb);
+                        issueHistoryService.detectIssueIsp(IssueHistoryType.MODIFY, param, null, issueIsp, sb);
                         issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
 
                         issueIsp.setIspField(ispField);
@@ -76,13 +78,34 @@
                         }
                         // 異붽� �씠�젰
                         StringBuilder sb = new StringBuilder();
-                        issueHistoryService.detectIssueIsp(IssueHistoryType.ADD, param, issueIsp, sb);
+                        issueHistoryService.detectIssueIsp(IssueHistoryType.ADD, param, null, issueIsp, sb);
                         issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
                     }
                     this.issueIspRepository.saveAndFlush(issueIsp);
                 }else {
                     this.issueIspRepository.deleteById(MapUtil.getLong(param, "id"));
                 }
+            } else if(issueForm.getIspName() != null && !issueForm.getIspName().equals("")) {
+                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());
+
+                IspField ispField = this.ispFieldService.add(ispFieldForm);
+                IssueIsp issueIsp = ConvertUtil.copyProperties(ispFieldForm, IssueIsp.class);
+                issueIsp.setIssue(issue);
+                if (ispField != null) {
+                    issueIsp.setIspField(ispField);
+                }
+                // 異붽� �씠�젰
+                StringBuilder sb = new StringBuilder();
+                issueHistoryService.detectIssueIsp(IssueHistoryType.ADD, null, ispField, issueIsp, sb);
+                issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
+                this.issueIspRepository.saveAndFlush(issueIsp);
             }
         }
     }
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
index 2485611..5c2d587 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -493,11 +493,11 @@
         //  �떞�떦遺��꽌 吏��젙
         this.issueDepartmentService.modifyIssueDepartment(issue, user, project.getWorkspace(), issueForm.getDepartmentIds());
         //  �뾽泥� �젙蹂� ���옣
-        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm.getIssueCompanyFields());
+        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm);
         //  ISP �젙蹂� ���옣
-        this.issueIspService.modifyIssueIspField(issue, issueForm.getIssueIspFields());
+        this.issueIspService.modifyIssueIspField(issue, issueForm);
         //  HOSTING �젙蹂� ���옣
-        this.issueHostingService.modifyIssueHostingField(issue, issueForm.getIssueHostingFields());
+        this.issueHostingService.modifyIssueHostingField(issue, issueForm);
 
 
         //  泥⑤� �뙆�씪 ���옣
@@ -587,11 +587,11 @@
         //  �떞�떦遺��꽌 吏��젙
         this.issueDepartmentService.modifyIssueDepartment(issue, user, project.getWorkspace(), issueForm.getDepartmentIds());
         //  �뾽泥� �젙蹂� ���옣
-        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm.getIssueCompanyFields());
+        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm);
         //  ISP �젙蹂� ���옣
-        this.issueIspService.modifyIssueIspField(issue, issueForm.getIssueIspFields());
+        this.issueIspService.modifyIssueIspField(issue, issueForm);
         //  HOSTING �젙蹂� ���옣
-        this.issueHostingService.modifyIssueHostingField(issue, issueForm.getIssueHostingFields());
+        this.issueHostingService.modifyIssueHostingField(issue, issueForm);
 
         //  泥⑤� �뙆�씪 ���옣
         //  multipartFile �쓣 file Map List 媛앹껜濡� 蹂�寃쏀븳�떎.
@@ -664,11 +664,11 @@
         //  �떞�떦遺��꽌 吏��젙
         this.issueDepartmentService.modifyIssueDepartment(issue, user, project.getWorkspace(), issueForm.getDepartmentIds());
         //  �뾽泥� �젙蹂� ���옣
-        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm.getIssueCompanyFields());
+        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm);
         //  ISP �젙蹂� ���옣
-        this.issueIspService.modifyIssueIspField(issue, issueForm.getIssueIspFields());
+        this.issueIspService.modifyIssueIspField(issue, issueForm);
         //  HOSTING �젙蹂� ���옣
-        this.issueHostingService.modifyIssueHostingField(issue, issueForm.getIssueHostingFields());
+        this.issueHostingService.modifyIssueHostingField(issue, issueForm);
 
         //  泥⑤� �뙆�씪 ���옣
         //  multipartFile �쓣 file Map List 媛앹껜濡� 蹂�寃쏀븳�떎.
@@ -1756,6 +1756,9 @@
         String comma = ",";
 
         if (issueCustomFieldValueForms.size() > 0) {
+            IssueCustomFieldValueFormComparator comp = new IssueCustomFieldValueFormComparator();
+            Collections.sort(issueCustomFieldValueForms, comp);
+
             String concatUseValue = "";
             for (int i = 0; i < issueCustomFieldValueForms.size(); i++) {
                 IssueCustomFieldValueForm issueCustomFieldValueForm = issueCustomFieldValueForms.get(i);
@@ -1802,6 +1805,7 @@
             List<Issue> issues = Lists.newArrayList();
             for (Issue issueVo : issue) {
                 issueForm.setId(issueVo.getId());
+                issueForm.setTitle(issueVo.getTitle());
 
                 // �옄�룞 醫낅즺 �긽�깭 �꽕�젙�씠 �릺�뼱 �엳吏� �븡�쑝硫� �삤瑜섎컻�깮
                 Issue modifyIssue = this.modifyIssueForApi(user, issueForm, files);
@@ -1993,11 +1997,11 @@
         log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(userVo, ElasticSearchConstants.ISSUE_MODIFY));
 
         //  �뾽泥� �젙蹂� ���옣
-        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm.getIssueCompanyFields());
+        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm);
         //  ISP �젙蹂� ���옣
-        this.issueIspService.modifyIssueIspField(issue, issueForm.getIssueIspFields());
+        this.issueIspService.modifyIssueIspField(issue, issueForm);
         //  HOSTING �젙蹂� ���옣
-        this.issueHostingService.modifyIssueHostingField(issue, issueForm.getIssueHostingFields());
+        this.issueHostingService.modifyIssueHostingField(issue, issueForm);
 
         return issue;
     }
@@ -3226,15 +3230,21 @@
                     break;*/
                 case 6:
                     //  �떞�떦遺��꽌瑜� IssueForm �뿉 ���옣�븳�떎.
-                    this.setIssueFormDepartment(cell, departmentMaps, issueForm, project);
+                    if (cell != null) {
+                        this.setIssueFormDepartment(cell, departmentMaps, issueForm, project);
+                    }
                     break;
                 case 7:
                     //  �떆�옉�씪�쓣 IssueForm �뿉 ���옣�븳�떎.
-                    this.setIssueFormPeriod(cell, issueForm, true, rowIndex);
+                    if (cell != null) {
+                        this.setIssueFormPeriod(cell, issueForm, true, rowIndex);
+                    }
                     break;
                 case 8:
                     //  醫낅즺�씪�쓣 IssueForm �뿉 ���옣�븳�떎.
-                    this.setIssueFormPeriod(cell, issueForm, false, rowIndex);
+                    if (cell != null) {
+                        this.setIssueFormPeriod(cell, issueForm, false, rowIndex);
+                    }
                     break;
                 default:
                     //  9踰� 遺��꽣�뒗 �궗�슜�옄 �젙�쓽 �븘�뱶. �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� IssueForm �뿉 ���옣�븳�떎.
@@ -3438,7 +3448,7 @@
         }
     }
 
-    //  �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� IssueForm �뿉 ���옣�븳�떎.
+    //  �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� IssueForm �뿉 ���옣�븳�떎.-
     private void setIssueFormCustomFieldValue(Cell cell, Map<String, CustomField> customFieldMaps, IssueForm issueForm, String customFieldName, int rowIndex) {
         if (cell != null) {
             String cellValue = CommonUtil.convertExcelStringToCell(cell);
diff --git a/src/main/java/kr/wisestone/owl/vo/UserWorkspaceVo.java b/src/main/java/kr/wisestone/owl/vo/UserWorkspaceVo.java
index 779aeb8..3b14f5b 100644
--- a/src/main/java/kr/wisestone/owl/vo/UserWorkspaceVo.java
+++ b/src/main/java/kr/wisestone/owl/vo/UserWorkspaceVo.java
@@ -16,6 +16,7 @@
     private Long levelId;
     private Long departmentId;
     private Long userId;
+    private String managerYn;
 
     private List<DepartmentVo> departmentVos = Lists.newArrayList();
 
@@ -92,4 +93,12 @@
     public void setUserId(Long userId) {
         this.userId = userId;
     }
+
+    public String getManagerYn() {
+        return managerYn;
+    }
+
+    public void setManagerYn(String managerYn) {
+        this.managerYn = managerYn;
+    }
 }
diff --git a/src/main/resources/mybatis/query-template/issue-template.xml b/src/main/resources/mybatis/query-template/issue-template.xml
index 32d6e66..d54d7e2 100644
--- a/src/main/resources/mybatis/query-template/issue-template.xml
+++ b/src/main/resources/mybatis/query-template/issue-template.xml
@@ -1096,14 +1096,13 @@
             issue.id as id,
             issue.title as title,
             customFieldValue.customFieldType AS customFieldType,
-            GROUP_CONCAT(customFieldValue.useValue) AS concatUseValue
+            GROUP_CONCAT(customFieldValue.useValue ORDER BY customFieldValue.customFieldId ASC) AS concatUseValue
         FROM issue issue FORCE INDEX(reverseIndex)
         INNER JOIN issue_status as issStatus ON issue.issue_status_id = issStatus.id
             LEFT OUTER JOIN (
             SELECT cf.id AS customFieldId, cf.custom_field_type AS customFieldType, issue_custom.use_value AS useValue, issue_custom.issue_id AS issueId
             FROM issue_custom_field_value issue_custom
-            INNER JOIN custom_field cf ON cf.id = issue_custom.custom_field_id
-            ORDER BY issue_custom.id ASC) customFieldValue ON customFieldValue.issueId = issue.id
+            INNER JOIN custom_field cf ON cf.id = issue_custom.custom_field_id) customFieldValue ON customFieldValue.issueId = issue.id
         WHERE issStatus.issue_status_type != 'CLOSE'
           AND issue.issue_type_id = #{issueTypeId}
         GROUP BY issue.id
diff --git a/src/main/resources/mybatis/query-template/userWorkspace-template.xml b/src/main/resources/mybatis/query-template/userWorkspace-template.xml
index e62cbbc..93d56a1 100644
--- a/src/main/resources/mybatis/query-template/userWorkspace-template.xml
+++ b/src/main/resources/mybatis/query-template/userWorkspace-template.xml
@@ -10,6 +10,7 @@
         u.name as userName,
         u.account as account,
         u.level_id as levelId,
+        uw.manager_yn as managerYn,
         CASE WHEN uw.use_yn = 'Y' THEN 'true' ELSE 'false' END as useYn
         FROM
         user_workspace uw
@@ -17,7 +18,6 @@
         INNER JOIN workspace w on uw.workspace_id = w.id
         WHERE 1=1
         AND w.id = #{workspaceId}
-        AND uw.manager_yn = 'N'
         <if test="name != '' and name != null">
             AND u.name like CONCAT('%',#{name},'%')
         </if>
@@ -58,7 +58,6 @@
         INNER JOIN workspace w on uw.workspace_id = w.id
         WHERE 1=1
         AND w.id = #{workspaceId}
-        AND uw.manager_yn = 'N'
         <if test="name != '' and name != null">
             AND u.name like CONCAT('%',#{name},'%')
         </if>
diff --git a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
index d26b1a2..221cca9 100644
--- a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
+++ b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
@@ -210,4 +210,7 @@
 COMPANY_REMOVE_NOT_SELECT = \uC0AD\uC81C\uD560 \uC5C5\uCCB4\uAC00 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
 COMPANYFIELD_NOT_EXIST = \uC5C5\uCCB4\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
 COMPANYFIELD_NOT_URL = URL\uC774 \uC785\uB825\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
-COMPANYFIELD_USED_URL = URL\uC774 \uC774\uBBF8 \uC0AC\uC6A9\uB418\uACE0 \uC788\uC2B5\uB2C8\uB2E4.
\ No newline at end of file
+COMPANYFIELD_USED_URL = URL\uC774 \uC774\uBBF8 \uC0AC\uC6A9\uB418\uACE0 \uC788\uC2B5\uB2C8\uB2E4.
+
+HOSTING_CODE_NOT_ENTER = \uD638\uC2A4\uD305\uC758 \uCF54\uB4DC\uB294 \uD544\uC218 \uC785\uB825 \uAC12\uC785\uB2C8\uB2E4.
+ISP_CODE_NOT_ENTER = ISP\uC758 \uCF54\uB4DC\uB294 \uD544\uC218 \uC785\uB825 \uAC12\uC785\uB2C8\uB2E4.
\ No newline at end of file
diff --git a/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js b/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js
index 00bcb51..87d40cf 100644
--- a/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js
+++ b/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js
@@ -151,17 +151,18 @@
 
                                         case "USE_DEPARTMENT_LIST" :
                                             makeTag += "<ul class='ul-not-comma'>";
-
-                                            if(scope.data.departmentVos != null && scope.data.departmentVos.length == 0){ //�냽�빐�엳�뒗 遺��꽌媛� �뾾�쓣 寃쎌슦
-                                                makeTag += "<div style='cursor: pointer; color: #0066ff' ng-click='event.modifyUserDepartments(data.id, data.userId)'>遺��꽌瑜� �꽑�깮�빐 二쇱꽭�슂.</div>";
-                                            }else{
-                                                makeTag += "<div style='cursor: pointer; color: #0066ff' ng-click='event.modifyUserDepartments(data.id, data.userId)'>";
-                                                angular.forEach(scope.data.departmentVos, function (departments) {
-                                                    makeTag += "<li>" + departments.departmentName + "</li>";
-                                                });
-                                                makeTag += "</div>";
+                                            if (scope.data.managerYn !== 'Y'){
+                                                if(scope.data.departmentVos != null && scope.data.departmentVos.length == 0){ //�냽�빐�엳�뒗 遺��꽌媛� �뾾�쓣 寃쎌슦
+                                                    makeTag += "<div style='cursor: pointer; color: #0066ff' ng-click='event.modifyUserDepartments(data.id, data.userId)'>遺��꽌瑜� �꽑�깮�빐 二쇱꽭�슂.</div>";
+                                                }else{
+                                                    makeTag += "<div style='cursor: pointer; color: #0066ff' ng-click='event.modifyUserDepartments(data.id, data.userId)'>";
+                                                    angular.forEach(scope.data.departmentVos, function (departments) {
+                                                        makeTag += "<li>" + departments.departmentName + "</li>";
+                                                    });
+                                                    makeTag += "</div>";
+                                                }
+                                                makeTag += "</ul>";
                                             }
-                                            makeTag += "</ul>";
                                             break;
 
                                         case "WORKFLOW_DEPARTMENT_LIST" :
@@ -623,11 +624,17 @@
 
                                         case "LEVEL_OPTION" :
                                             //makeTag += "<select class='form-control input-sm'  ng-model='data.levels[0].id' ng-options='levelName.id as levelName.levelName for levelName in data.levels' ></select>";
-                                            makeTag +="<select class='form-control input-sm' ng-model='data.levelId' ng-change='event.modifyUserWorkspace(data)'><option ng-repeat='level in data.levels' ng-value='level.fieldKey'>{{::level.fieldValue}}</option></select>";
+                                            if (scope.data.managerYn === 'Y'){
+                                                makeTag +="<span>理쒓퀬愿�由ъ옄</span>";
+                                            } else {
+                                                makeTag +="<select class='form-control input-sm' ng-model='data.levelId' ng-change='event.modifyUserWorkspace(data)'><option ng-repeat='level in data.levels' ng-value='level.fieldKey'>{{::level.fieldValue}}</option></select>";
+                                            }
                                             break;
 
                                         case "WORKSPACE_USE_YN" :
-                                            makeTag += "<label class='switch'><input type='checkbox' ng-model='data.useYn' ng-click='event.modifyUserWorkspace(data)'><span class='slider round'></span></label>";
+                                            if (scope.data.managerYn !== 'Y'){
+                                                makeTag += "<label class='switch'><input type='checkbox' ng-model='data.useYn' ng-click='event.modifyUserWorkspace(data)'><span class='slider round'></span></label>";
+                                            }
                                             break;
 
                                         case "COMPANYFIELD_MODIFY" :
diff --git a/src/main/webapp/scripts/app/workspace/workspaceUserConfig.controller.js b/src/main/webapp/scripts/app/workspace/workspaceUserConfig.controller.js
index 16e8fd0..a9f1527 100644
--- a/src/main/webapp/scripts/app/workspace/workspaceUserConfig.controller.js
+++ b/src/main/webapp/scripts/app/workspace/workspaceUserConfig.controller.js
@@ -27,7 +27,7 @@
                     account : "",   //  �씠硫붿씪
                     statuses : [],   //  �긽�깭 - Y, N
                     levels  :   [], //  �벑湲�
-                    departments: []  //  遺��꽌
+                    departments: [],  //  遺��꽌
                 };
 
                 $scope.vm.options = {
@@ -45,6 +45,7 @@
                     selectedPageRowCount : String(10)
                 };
 
+                $scope.vm.managerYn = false;
                 $scope.vm.levels = [];
                 $scope.vm.departments = [];
                 $scope.vm.tableConfigs = [];
@@ -176,23 +177,13 @@
 
                             var idx = 0;
                             angular.forEach($scope.vm.responseData.data, function (data) {
-                                // data.levelId = $scope.vm.levels[idx].fieldKey;
-                                //data.department = $scope.vm.departments[idx];
-
+                                if (data.managerYn === "Y") {
+                                    $scope.vm.managerYn = true;
+                                }
                                 data.levels = [];
                                 data.departments = [];
                                 data.levels = $scope.vm.levels.slice();
                                 data.departments = $scope.vm.departments.slice();
-                                /*if(result.data.data[idx].departmentId == null){
-                                    data.departments = $scope.vm.departments.slice();
-                                    data.departments.unshift({
-                                        fieldKey : 'd',
-                                        fieldValue : '遺��꽌瑜� �꽑�깮 �븯�꽭�슂.'
-                                    });
-                                    result.data.data[idx].departmentId = 'd';
-                                } else{
-                                    data.departments = $scope.vm.departments.slice();
-                                }*/
                                 idx++;
                             });
                         }

--
Gitblit v1.8.0