From 305de5dd5a88baf49b9939fe3233f207f3f7acf8 Mon Sep 17 00:00:00 2001
From: jhjang <jhjang@maprex.co.kr>
Date: 목, 25 11월 2021 21:03:04 +0900
Subject: [PATCH] - 이슈 유형에 호스팅/업체/isp 설정 기능 추가

---
 src/main/java/kr/wisestone/owl/vo/HostingFieldVo.java                     |   34 +--
 src/main/webapp/views/issueType/issueTypeAdd.html                         |   24 +
 src/main/webapp/scripts/components/HostingField/hostingField.service.js   |    8 
 src/main/webapp/views/issueType/issueTypeModify.html                      |   27 ++
 src/main/webapp/scripts/app/issueType/issueTypeModify.controller.js       |   23 ++
 src/main/java/kr/wisestone/owl/web/form/IssueTypeForm.java                |   47 ++--
 src/main/java/kr/wisestone/owl/vo/CompanyFieldVo.java                     |   24 --
 src/main/java/kr/wisestone/owl/constant/UseCompany.java                   |   44 ++++
 src/main/java/kr/wisestone/owl/domain/IssueType.java                      |   31 --
 src/main/webapp/scripts/components/utils/autoComplete.controller.js       |   36 +++
 src/main/java/kr/wisestone/owl/vo/UseCompanyVo.java                       |   44 ++++
 src/main/java/kr/wisestone/owl/vo/IssueTypeVo.java                        |   33 +--
 src/main/webapp/scripts/app/issueType/issueTypeAdd.controller.js          |   44 +---
 src/main/resources/migration/V1_11__Alter_Table.sql                       |    4 
 src/main/java/kr/wisestone/owl/web/controller/HostingFieldController.java |   16 +
 src/main/java/kr/wisestone/owl/vo/IspFieldVo.java                         |   24 --
 src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java     |   34 ++-
 17 files changed, 295 insertions(+), 202 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/constant/UseCompany.java b/src/main/java/kr/wisestone/owl/constant/UseCompany.java
new file mode 100644
index 0000000..59a8406
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/constant/UseCompany.java
@@ -0,0 +1,44 @@
+package kr.wisestone.owl.constant;
+
+import com.google.common.collect.Lists;
+import kr.wisestone.owl.vo.HostingFieldVo;
+import kr.wisestone.owl.vo.UseCompanyVo;
+
+import java.util.List;
+
+public class UseCompany {
+
+    public static final int USE_COMPANY_HOSTING = 4;  // 100
+    public static final int USE_COMPANY_ISP = 2;      // 010
+    public static final int USE_COMPANY_COMPANY = 1;  // 001
+
+    public static String[] Names = {"�뾽泥�", "ISP", "�샇�뒪�똿"};
+    public static int[] useCompanies = {USE_COMPANY_COMPANY, USE_COMPANY_ISP, USE_COMPANY_HOSTING};
+
+    // 沅뚰븳 泥댄겕�썑 HostingFieldVo 媛��졇�삤湲�
+    public static UseCompanyVo checkUseCompany(int userPermission, int typePermission)
+    {
+        if (((userPermission & typePermission) != 0)) {
+            Long Id = 0L;
+            if (typePermission != USE_COMPANY_COMPANY) {
+                Id = typePermission / 2L;
+            }
+
+            return UseCompanyVo.Create(Id, Names[Id.intValue()]);
+        }
+        return  null;
+    }
+
+    // �뾽泥�/ISP/�샇�뒪�똿 �쟾泥� 紐⑸줉 媛��졇�삤湲�
+    public static List<UseCompanyVo> getCompanyList() {
+        List<UseCompanyVo> useCompanyVos = Lists.newArrayList();
+
+        Long index = 0L;
+        for (String name : UseCompany.Names) {
+            useCompanyVos.add(UseCompanyVo.Create(index, name));
+            index++;
+        }
+        return useCompanyVos;
+    }
+
+}
diff --git a/src/main/java/kr/wisestone/owl/domain/IssueType.java b/src/main/java/kr/wisestone/owl/domain/IssueType.java
index d0379b8..cd9fbfc 100644
--- a/src/main/java/kr/wisestone/owl/domain/IssueType.java
+++ b/src/main/java/kr/wisestone/owl/domain/IssueType.java
@@ -1,5 +1,7 @@
 package kr.wisestone.owl.domain;
 
+import org.hibernate.annotations.DynamicInsert;
+
 import javax.persistence.*;
 import java.io.Serializable;
 import java.util.HashSet;
@@ -9,6 +11,7 @@
  * Created by wisestone on 2018-03-07.
  */
 @Entity
+@DynamicInsert
 public class IssueType extends BaseEntity implements Serializable {
     private static final long serialVersionUID = 1L;
 
@@ -18,9 +21,7 @@
     private String name;
     private String description;
     private String color;
-    private String companyYn = "N";
-    private String ispYn = "N";
-    private String hostingYn = "N";
+    private Long useCompany;
 
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "workspace_id")
@@ -124,27 +125,11 @@
         this.project = project;
     }
 
-    public String getCompanyYn() {
-        return companyYn;
+    public Long getUseCompany() {
+        return useCompany;
     }
 
-    public void setCompanyYn(String companyYn) {
-        this.companyYn = companyYn;
-    }
-
-    public String getIspYn() {
-        return ispYn;
-    }
-
-    public void setIspYn(String ispYn) {
-        this.ispYn = ispYn;
-    }
-
-    public String getHostingYn() {
-        return hostingYn;
-    }
-
-    public void setHostingYn(String hostingYn) {
-        this.hostingYn = hostingYn;
+    public void setUseCompany(Long useCompany) {
+        this.useCompany = useCompany;
     }
 }
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
index 5e457e9..d8c2d72 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
@@ -3,7 +3,9 @@
 import com.google.common.collect.Lists;
 import kr.wisestone.owl.common.ExcelConditionCheck;
 import kr.wisestone.owl.constant.Constants;
+import kr.wisestone.owl.constant.MngPermission;
 import kr.wisestone.owl.constant.MsgConstants;
+import kr.wisestone.owl.constant.UseCompany;
 import kr.wisestone.owl.domain.*;
 import kr.wisestone.owl.domain.enumType.ProjectType;
 import kr.wisestone.owl.exception.OwlRuntimeException;
@@ -123,18 +125,8 @@
         Project project = this.projectService.getProject(issueTypeForm.getProjectId());
         issueType.setProject(project);
 
-        String Yes = "Y";
-        String No = "N";
+        issueType.setUseCompany(issueTypeForm.getUseCompany());
 
-        if(!issueTypeForm.getCompanyYn().equals(No)){
-            issueType.setCompanyYn(Yes);
-        }
-        if(!issueTypeForm.getHostingYn().equals(No)){
-            issueType.setHostingYn(Yes);
-        }
-        if(!issueTypeForm.getIspYn().equals(No)){
-            issueType.setIspYn(Yes);
-        }
         return this.issueTypeRepository.saveAndFlush(issueType);
     }
 
@@ -276,6 +268,18 @@
             if (project != null) {
                 issueTypeVo.setProjectVo(ConvertUtil.copyProperties(issueType.getProject(), ProjectVo.class));
             }
+            Integer use = issueType.getUseCompany() != null ? issueType.getUseCompany().intValue() : 0;
+
+            List<UseCompanyVo> useCompanyVos = Lists.newArrayList();
+            for (Integer useCompany : UseCompany.useCompanies) {
+                UseCompanyVo useCompanyVo = UseCompany.checkUseCompany(use, useCompany);
+
+                if (useCompanyVo != null) {
+                    useCompanyVos.add(useCompanyVo);
+                }
+            }
+
+            issueTypeVo.setUseCompanyVos(useCompanyVos);
 
             /*CompanyField companyField = issueType.getCompanyField();
             if(companyField != null){
@@ -317,6 +321,8 @@
         Project project = this.projectService.getProject(issueTypeForm.getProjectId());
         issueType.setProject(project);
 
+        issueType.setUseCompany(issueTypeForm.getUseCompany());
+
         /*if(issueTypeForm.getCompanyId() != null){
             CompanyField companyField = this.companyFieldService.getCompany(issueTypeForm.getCompanyId());
             issueType.setCompanyField(companyField);
@@ -329,9 +335,9 @@
             HostingField hostingField = this.hostingFieldService.getHosting(issueTypeForm.getHostingId());
             issueType.setHostingField(hostingField);
         }*/
-        issueType.setCompanyYn(issueTypeForm.getCompanyYn());
-        issueType.setIspYn(issueTypeForm.getIspYn());
-        issueType.setHostingYn(issueTypeForm.getHostingYn());
+//        issueType.setCompanyYn(issueTypeForm.getCompanyYn());
+//        issueType.setIspYn(issueTypeForm.getIspYn());
+//        issueType.setHostingYn(issueTypeForm.getHostingYn());
 
         this.issueTypeRepository.saveAndFlush(issueType);
 
diff --git a/src/main/java/kr/wisestone/owl/vo/CompanyFieldVo.java b/src/main/java/kr/wisestone/owl/vo/CompanyFieldVo.java
index 4d87568..ba8c0be 100644
--- a/src/main/java/kr/wisestone/owl/vo/CompanyFieldVo.java
+++ b/src/main/java/kr/wisestone/owl/vo/CompanyFieldVo.java
@@ -1,9 +1,7 @@
 package kr.wisestone.owl.vo;
 
-public class CompanyFieldVo extends BaseVo{
+public class CompanyFieldVo extends UseCompanyVo{
 
-    private Long id;
-    private String name;
     private String manager;
     private String tel;
     private String email;
@@ -11,30 +9,12 @@
 
     public CompanyFieldVo() {}
 
-    public CompanyFieldVo(Long id, String name, String manager, String tel, String email, String memo) {
+    public CompanyFieldVo(String manager, String tel, String email, String memo) {
 
-        this.id = id;
-        this.name = name;
         this.manager = manager;
         this.tel = tel;
         this.email = email;
         this.memo = memo;
-    }
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
     }
 
     public String getManager() {
diff --git a/src/main/java/kr/wisestone/owl/vo/HostingFieldVo.java b/src/main/java/kr/wisestone/owl/vo/HostingFieldVo.java
index 6ee9243..8c08f08 100644
--- a/src/main/java/kr/wisestone/owl/vo/HostingFieldVo.java
+++ b/src/main/java/kr/wisestone/owl/vo/HostingFieldVo.java
@@ -1,34 +1,22 @@
 package kr.wisestone.owl.vo;
 
-public class HostingFieldVo extends BaseVo{
+public class HostingFieldVo extends UseCompanyVo {
 
-    private Long id;
     private String code;
-    private String name;
     private String manager;
     private String tel;
     private String email;
     private String memo;
+    private String byName;
 
     public HostingFieldVo() {}
 
-    public HostingFieldVo(Long id, String code, String name, String manager, String tel, String email, String memo) {
-
-        this.id = id;
+    public HostingFieldVo(String code, String manager, String tel, String email, String memo) {
         this.code = code;
-        this.name = name;
         this.manager = manager;
         this.tel = tel;
         this.email = email;
         this.memo = memo;
-    }
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
     }
 
     public String getCode() {
@@ -37,14 +25,6 @@
 
     public void setCode(String code) {
         this.code = code;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
     }
 
     public String getManager() {
@@ -78,4 +58,12 @@
     public void setMemo(String memo) {
         this.memo = memo;
     }
+
+    public String getByName() {
+        return byName;
+    }
+
+    public void setByName(String byName) {
+        this.byName = byName;
+    }
 }
diff --git a/src/main/java/kr/wisestone/owl/vo/IspFieldVo.java b/src/main/java/kr/wisestone/owl/vo/IspFieldVo.java
index 654c610..1d2e6f1 100644
--- a/src/main/java/kr/wisestone/owl/vo/IspFieldVo.java
+++ b/src/main/java/kr/wisestone/owl/vo/IspFieldVo.java
@@ -1,10 +1,8 @@
 package kr.wisestone.owl.vo;
 
-public class IspFieldVo extends BaseVo{
+public class IspFieldVo extends UseCompanyVo{
 
-    private Long id;
     private String code;
-    private String name;
     private String manager;
     private String tel;
     private String email;
@@ -12,23 +10,13 @@
 
     public IspFieldVo() {}
 
-    public IspFieldVo(Long id, String code, String name, String manager, String tel, String email, String memo) {
+    public IspFieldVo(String code, String manager, String tel, String email, String memo) {
 
-        this.id = id;
         this.code = code;
-        this.name = name;
         this.manager = manager;
         this.tel = tel;
         this.email = email;
         this.memo = memo;
-    }
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
     }
 
     public String getCode() {
@@ -37,14 +25,6 @@
 
     public void setCode(String code) {
         this.code = code;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
     }
 
     public String getManager() {
diff --git a/src/main/java/kr/wisestone/owl/vo/IssueTypeVo.java b/src/main/java/kr/wisestone/owl/vo/IssueTypeVo.java
index e74ab58..a23d46e 100644
--- a/src/main/java/kr/wisestone/owl/vo/IssueTypeVo.java
+++ b/src/main/java/kr/wisestone/owl/vo/IssueTypeVo.java
@@ -1,6 +1,9 @@
 package kr.wisestone.owl.vo;
 
+import com.google.common.collect.Lists;
 import kr.wisestone.owl.domain.Project;
+
+import java.util.List;
 
 /**
  * Created by wisestone on 2018-05-29.
@@ -12,9 +15,9 @@
     private String color;
     private WorkflowVo workflowVo;
     private ProjectVo projectVo;
-    private CompanyFieldVo companyFieldVo;
-    private IspFieldVo ispFieldVo;
-    private HostingFieldVo hostingFieldVo;
+
+    private List<UseCompanyVo> useCompanyVos = Lists.newArrayList();
+
     private Boolean modifyPermissionCheck = Boolean.TRUE;   //  �씠�뒋 �쑀�삎�� 紐⑤뱺 �궗�엺�뱾�씠 �닔�젙, �궘�젣�븷 �닔 �엳�뼱�꽌 湲곕낯 媛믪씠 True
 
     public IssueTypeVo(){}
@@ -75,27 +78,11 @@
         this.projectVo = projectVo;
     }
 
-    public CompanyFieldVo getCompanyFieldVo() {
-        return companyFieldVo;
+    public List<UseCompanyVo> getUseCompanyVos() {
+        return useCompanyVos;
     }
 
-    public void setCompanyFieldVo(CompanyFieldVo companyFieldVo) {
-        this.companyFieldVo = companyFieldVo;
-    }
-
-    public IspFieldVo getIspFieldVo() {
-        return ispFieldVo;
-    }
-
-    public void setIspFieldVo(IspFieldVo ispFieldVo) {
-        this.ispFieldVo = ispFieldVo;
-    }
-
-    public HostingFieldVo getHostingFieldVo() {
-        return hostingFieldVo;
-    }
-
-    public void setHostingFieldVo(HostingFieldVo hostingFieldVo) {
-        this.hostingFieldVo = hostingFieldVo;
+    public void setUseCompanyVos(List<UseCompanyVo> useCompanyVos) {
+        this.useCompanyVos = useCompanyVos;
     }
 }
diff --git a/src/main/java/kr/wisestone/owl/vo/UseCompanyVo.java b/src/main/java/kr/wisestone/owl/vo/UseCompanyVo.java
new file mode 100644
index 0000000..eb3dc69
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/vo/UseCompanyVo.java
@@ -0,0 +1,44 @@
+package kr.wisestone.owl.vo;
+
+public class UseCompanyVo extends BaseVo {
+    private Long id;
+    private String name;
+    private String byName;
+
+    public UseCompanyVo() {
+    }
+
+    public static UseCompanyVo Create(Long id, String name) {
+        UseCompanyVo useCompanyVo = new UseCompanyVo();
+        useCompanyVo.setName(name);
+        useCompanyVo.setId(id);
+        useCompanyVo.setByName(name);
+
+        return useCompanyVo;
+    }
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getByName() {
+        return byName;
+    }
+
+    public void setByName(String byName) {
+        this.byName = byName;
+    }
+}
diff --git a/src/main/java/kr/wisestone/owl/web/controller/HostingFieldController.java b/src/main/java/kr/wisestone/owl/web/controller/HostingFieldController.java
index b903c38..db50054 100644
--- a/src/main/java/kr/wisestone/owl/web/controller/HostingFieldController.java
+++ b/src/main/java/kr/wisestone/owl/web/controller/HostingFieldController.java
@@ -1,7 +1,11 @@
 package kr.wisestone.owl.web.controller;
 
+import com.google.common.collect.Lists;
 import kr.wisestone.owl.constant.Constants;
+import kr.wisestone.owl.constant.UseCompany;
 import kr.wisestone.owl.service.HostingFieldService;
+import kr.wisestone.owl.util.ConvertUtil;
+import kr.wisestone.owl.vo.HostingFieldVo;
 import kr.wisestone.owl.web.condition.HostingFieldCondition;
 import kr.wisestone.owl.web.form.HostingFieldForm;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -17,6 +21,7 @@
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 @Controller
@@ -86,6 +91,17 @@
         return this.setSuccessMessage(resJsonData);
     }
 
+    // �뾽泥�/ISP/�샇�뒪�똿 紐⑸줉 媛��졇�삤湲�
+    @RequestMapping(value = "/company/getCompanyList", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
+    public
+    @ResponseBody
+    Map<String, Object> getCompanyList(@RequestBody Map<String, Map<String, Object>> params) {
+        Map<String, Object> resJsonData = new HashMap<>();
+        resJsonData.put(Constants.REQ_KEY_CONTENT, UseCompany.getCompanyList());
+
+        return this.setSuccessMessage(resJsonData);
+    }
+
 
     // �뾽泥� �뿊�� �떎�슫濡쒕뱶
     @RequestMapping(value = "/hostingField/downloadExcel", method = RequestMethod.POST)
diff --git a/src/main/java/kr/wisestone/owl/web/form/IssueTypeForm.java b/src/main/java/kr/wisestone/owl/web/form/IssueTypeForm.java
index d903b49..e1b0e2b 100644
--- a/src/main/java/kr/wisestone/owl/web/form/IssueTypeForm.java
+++ b/src/main/java/kr/wisestone/owl/web/form/IssueTypeForm.java
@@ -1,8 +1,13 @@
 package kr.wisestone.owl.web.form;
 
 import com.google.common.collect.Lists;
+import kr.wisestone.owl.constant.UseCompany;
+import kr.wisestone.owl.domain.HostingField;
+import kr.wisestone.owl.domain.IssueType;
 import kr.wisestone.owl.util.ConvertUtil;
 import kr.wisestone.owl.util.MapUtil;
+import kr.wisestone.owl.web.condition.HostingFieldCondition;
+import kr.wisestone.owl.web.controller.HostingFieldController;
 
 import java.util.List;
 import java.util.Map;
@@ -17,10 +22,8 @@
     private String color;
     private Long workflowId;
     private Long projectId;
-    private String companyYn;
-    private String ispYn;
-    private String hostingYn;
     private List<Long> removeIds = Lists.newArrayList();
+    private Long useCompany;
 
     public IssueTypeForm(){}
 
@@ -29,6 +32,20 @@
 
         if (MapUtil.getLongs(params, "removeIds") != null) {
             form.setRemoveIds(MapUtil.getLongs(params, "removeIds"));
+        }
+
+        if (MapUtil.getLongs(params, "companyIds") != null) {
+//            form.setRemoveIds(MapUtil.getLongs(params, "companyIds"));
+            List<Long> longs = MapUtil.getLongs(params, "companyIds");
+            form.useCompany = 0L;
+
+            for (Long id : longs) {
+                if (id == UseCompany.USE_COMPANY_COMPANY - 1) {
+                    form.useCompany += 1;
+                } else {
+                    form.useCompany += id * 2;
+                }
+            }
         }
 
         return form;
@@ -94,27 +111,11 @@
         this.projectId = projectId;
     }
 
-    public String getCompanyYn() {
-        return companyYn;
+    public Long getUseCompany() {
+        return useCompany;
     }
 
-    public void setCompanyYn(String companyYn) {
-        this.companyYn = companyYn;
-    }
-
-    public String getIspYn() {
-        return ispYn;
-    }
-
-    public void setIspYn(String ispYn) {
-        this.ispYn = ispYn;
-    }
-
-    public String getHostingYn() {
-        return hostingYn;
-    }
-
-    public void setHostingYn(String hostingYn) {
-        this.hostingYn = hostingYn;
+    public void setUseCompany(Long useCompany) {
+        this.useCompany = useCompany;
     }
 }
diff --git a/src/main/resources/migration/V1_11__Alter_Table.sql b/src/main/resources/migration/V1_11__Alter_Table.sql
index bcd6835..0bfb235 100644
--- a/src/main/resources/migration/V1_11__Alter_Table.sql
+++ b/src/main/resources/migration/V1_11__Alter_Table.sql
@@ -208,6 +208,4 @@
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 -- issue_type �뀒�씠釉� �뾽泥�,ISP,�샇�뒪�똿 而щ읆 異붽�
-ALTER TABLE `issue_type` ADD COLUMN  `company_yn` VARCHAR(1) NOT NULL DEFAULT 'N';
-ALTER TABLE `issue_type` ADD COLUMN  `isp_yn` VARCHAR(1) NOT NULL DEFAULT 'N';
-ALTER TABLE `issue_type` ADD COLUMN  `hosting_yn` VARCHAR(1) NOT NULL DEFAULT 'N';
\ No newline at end of file
+ALTER TABLE `issue_type` ADD COLUMN  `use_company` BIGINT(11) NOT NULL DEFAULT '0';
diff --git a/src/main/webapp/scripts/app/issueType/issueTypeAdd.controller.js b/src/main/webapp/scripts/app/issueType/issueTypeAdd.controller.js
index f9f3a04..4dd1907 100644
--- a/src/main/webapp/scripts/app/issueType/issueTypeAdd.controller.js
+++ b/src/main/webapp/scripts/app/issueType/issueTypeAdd.controller.js
@@ -16,6 +16,7 @@
                     getProjectListCallBack : getProjectListCallBack, // �봽濡쒖젥�듃 auto complete callback function
                     cancel : cancel,    //  �뙘�뾽 李� �떕湲�
                     formSubmit : formSubmit,    //  �뤌 �쟾�넚
+                    removeUseCompany : removeUseCompany, // �뾽泥�/ISP/�샇�뒪�똿 �궘�젣
                     formCheck : formCheck   //  �뤌 泥댄겕
                 };
 
@@ -26,13 +27,9 @@
                         projects : [],      // �봽濡쒖젥�듃
                         description : "",  //  �꽕紐�
                         color : "#febd35", //  �깋�긽
-                        companyFields : [], // �뾽泥댁젙蹂�
-                        ispFields : [], // ISP �젙蹂�
-                        hostingFields : [] // �샇�뒪�똿�젙蹂�
+                        companies : [] // �뾽泥�/isp/�샇�뒪�똿 �꽑�깮 諛곗뿴
                     },
                     companyName : "",
-                    ispId : "",
-                    hostingId : "",
                     projectName : "",
                     workflowName : "",
                     autoCompletePage : {
@@ -124,6 +121,12 @@
                     return false;
                 }
 
+                //  �뾽泥�/ISP/�샇�뒪�똿 �궘�젣
+                function removeUseCompany(index) {
+                    $scope.vm.form.companies.splice(index, 1);
+                }
+
+
                 function formSubmit() {
                     $rootScope.spinner = true;
 
@@ -146,33 +149,16 @@
 
                             return projectId;
                         })(),
-                        companyId : (function () {
-                            var companyId = "";
+                        companyIds :  (function () {
+                            var companyIds = [];
 
-                            if ($scope.vm.form.companyFields.length > 0) {
-                                companyId = $scope.vm.form.companyFields[0].id;
-                            }
+                            $scope.vm.form.companies.forEach(function (company) {
+                                companyIds.push(company.id);
+                            });
 
-                            return companyId;
-                        }),
-                        ispId : (function () {
-                            var ispId = "";
+                            return companyIds;
+                        })(),
 
-                            if ($scope.vm.form.ispFields.length > 0) {
-                                ispId = $scope.vm.form.ispFields[0].id;
-                            }
-
-                            return ispId;
-                        }),
-                        hostingId : (function () {
-                            var hostingId = "";
-
-                            if ($scope.vm.form.hostingFields.length > 0) {
-                                hostingId = $scope.vm.form.hostingFields[0].id;
-                            }
-
-                            return hostingId;
-                        }),
                         name : $rootScope.preventXss($scope.vm.form.name),
                         description : $rootScope.preventXss($scope.vm.form.description),
                         color : $scope.vm.form.color
diff --git a/src/main/webapp/scripts/app/issueType/issueTypeModify.controller.js b/src/main/webapp/scripts/app/issueType/issueTypeModify.controller.js
index 9da781c..ab8f228 100644
--- a/src/main/webapp/scripts/app/issueType/issueTypeModify.controller.js
+++ b/src/main/webapp/scripts/app/issueType/issueTypeModify.controller.js
@@ -17,6 +17,7 @@
                     cancel : cancel,    //  �뙘�뾽 李� �떕湲�
                     formSubmit : formSubmit,    //  �뤌 �쟾�넚
                     formCheck : formCheck,  //  �뤌 泥댄겕
+                    removeUseCompany : removeUseCompany, // �뾽泥�/isp/�샇�뒪�똿 �궘�젣
                     detail : detail //  �긽�꽭 �젙蹂�
                 };
 
@@ -31,8 +32,10 @@
                         workflows : [],    //  �썙�겕�뵆濡쒖슦
                         projects : [],      // �봽濡쒖젥�듃
                         description : "",  //  �꽕紐�
-                        color : "" //  �깋�긽
+                        color : "", //  �깋�긽
+                        companies : [] // �뾽泥�/isp/�샇�뒪�똿 �꽑�깮 諛곗뿴
                     },
+                    companyName : "",
                     workflowName : "",
                     projectName : "",
                     autoCompletePage : {
@@ -98,6 +101,7 @@
 
                 angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector}));
 
+
                 function formCheck(formInvalid) {
                     if (formInvalid) {
                         return true;
@@ -137,6 +141,15 @@
 
                             return projectId;
                         })(),
+                        companyIds :  (function () {
+                            var companyIds = [];
+
+                            $scope.vm.form.companies.forEach(function (company) {
+                                companyIds.push(company.id);
+                            });
+
+                            return companyIds;
+                        })(),
                         name : $rootScope.preventXss($scope.vm.form.name),
                         description : $rootScope.preventXss($scope.vm.form.description),
                         color : $scope.vm.form.color
@@ -175,6 +188,12 @@
                     $(document).unbind("keydown");  //  �떒異뺥궎 �씠踰ㅽ듃 �젣嫄�
                 }
 
+                //  �뾽泥�/ISP/�샇�뒪�똿 �궘�젣
+                function removeUseCompany(index) {
+                    $scope.vm.form.companies.splice(index, 1);
+                }
+
+
                 function detail() {
                     $scope.vm.form.workflows = [];
 
@@ -192,6 +211,8 @@
                                     $scope.vm.form.projects.push(result.data.data.projectVo);
                                     $scope.vm.projectName = result.data.data.projectVo.name;
                                 }
+                                $scope.vm.form.companies = result.data.data.useCompanyVos;
+
                                 $scope.vm.form.color = result.data.data.color;
                             }
                         }
diff --git a/src/main/webapp/scripts/components/HostingField/hostingField.service.js b/src/main/webapp/scripts/components/HostingField/hostingField.service.js
index f06551f..e0b36fa 100644
--- a/src/main/webapp/scripts/components/HostingField/hostingField.service.js
+++ b/src/main/webapp/scripts/components/HostingField/hostingField.service.js
@@ -37,8 +37,14 @@
                     $log.debug("HostingField �궘�젣 寃곌낵 : ", response);
                     return response;
                 });
+            },
+            // �뾽泥�/ISP/�샇�뒪�똿 議고쉶
+            getCompanyList : function (conditions) {
+                return $http.post("company/getCompanyList", conditions).then(function (response) {
+                    $log.debug("�뾽泥�/isp/�샇�뒪�똿 紐⑸줉 議고쉶 寃곌낵 : ", response);
+                    return response;
+                });
             }
-
 
         }
     }
diff --git a/src/main/webapp/scripts/components/utils/autoComplete.controller.js b/src/main/webapp/scripts/components/utils/autoComplete.controller.js
index 4178972..c87f50b 100644
--- a/src/main/webapp/scripts/components/utils/autoComplete.controller.js
+++ b/src/main/webapp/scripts/components/utils/autoComplete.controller.js
@@ -35,6 +35,7 @@
                 $scope.fn.getIssueDepartmentList = getIssueDepartmentList;    //  �떞�떦�옄 -> �떞�떦遺��꽌 紐⑸줉 �젙蹂대�� 議고쉶�븳�떎.
                 $scope.fn.getIssueIspFieldList = getIssueIspFieldList;    //  ISP 紐⑸줉 �젙蹂대�� 議고쉶�븳�떎.
                 $scope.fn.getIssueHostingFieldList = getIssueHostingFieldList;    //  �샇�뒪�똿 紐⑸줉 �젙蹂대�� 議고쉶�븳�떎.
+                $scope.fn.getCompanyList = getCompanyList;          // �뾽泥�/isp/�샇�뒪�똿 紐⑸줉 議고쉶
 
                 function getUserList(query, excludeList, page, callBack) {
                     var conditions = {
@@ -316,8 +317,6 @@
 
                     var deferred = $q.defer();
 
-
-
                     IspField.find($resourceProvider.getContent(         //  �럹�씠吏� �뾽�뜲�씠�듃媛� �븘�슂�븳 而댄룷�꼳�듃 �씪寃쎌슦, page �뾽�뜲�씠�듃媛� �엳�쓣 寃쎌슦 湲곕낯 10媛쒖뵫 媛��졇�삤怨� �븘�땺寃쎌슦 25媛쒖뵫 媛��졇�삩�떎.
                         conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) {
                         if (result.data.message.status === "success") {
@@ -368,6 +367,39 @@
 
                     return deferred.promise;
                 }
+
+                function getCompanyList(query, excludeList, page, callBack) {
+                    var conditions = {
+                        hostingName : query,
+                        excludeIds : (function () {
+                            var excludeIds = [];
+
+                            angular.forEach(excludeList, function (exclude) {
+                                excludeIds.push(exclude.id);
+                            });
+
+                            return excludeIds;
+                        })()
+                    };
+
+                    var deferred = $q.defer();
+
+                    HostingField.getCompanyList($resourceProvider.getContent(         //  �럹�씠吏� �뾽�뜲�씠�듃媛� �븘�슂�븳 而댄룷�꼳�듃 �씪寃쎌슦, page �뾽�뜲�씠�듃媛� �엳�쓣 寃쎌슦 湲곕낯 10媛쒖뵫 媛��졇�삤怨� �븘�땺寃쎌슦 25媛쒖뵫 媛��졇�삩�떎.
+                        conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) {
+                        if (result.data.message.status === "success") {
+                            if ($rootScope.isDefined(callBack)) {
+                                callBack(result);
+                            }
+
+                            deferred.resolve(result.data.content);
+                        }
+                        else {
+                            SweetAlert.swal($filter("translate")("common.failedToProjectListLookUp"), result.data.message.message, "error"); // "�봽濡쒖젥�듃 紐⑸줉 議고쉶 �떎�뙣"
+                        }
+                    });
+
+                    return deferred.promise;
+                }
             }
         ]);
     }
diff --git a/src/main/webapp/views/issueType/issueTypeAdd.html b/src/main/webapp/views/issueType/issueTypeAdd.html
index a9e6d52..ced6331 100644
--- a/src/main/webapp/views/issueType/issueTypeAdd.html
+++ b/src/main/webapp/views/issueType/issueTypeAdd.html
@@ -58,15 +58,23 @@
                                         type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single>
             </div>
 
+            <div class="form-group mgb5">
+                <label class="issue-label"> <span translate="issue.companyInfo">�뾽泥�/ISP/�샇�뒪�똿 �젙蹂�</span> </label>
+                <js-autocomplete-multi data-input-name="departments"
+                                       selected-model="vm.form.companies"
+                                       search="vm.companyName"
+                                       source="fn.getCompanyList(vm.companyName, vm.form.companies)"
+                                       input-disabled="false"
+                                       translation-texts="{ count : 'common.userNum', empty : 'common.emptyUser' }"
+                                       extra-settings="{ displayProp : 'byName' , idProp : 'id', imageable : false, maxlength : 100, autoResize : true }"></js-autocomplete-multi>
 
-            <div class="form-group">
-                <label><span
-                        translate="issue.companyInfo">�뾽泥�/ISP/�샇�뒪�똿 �젙蹂�</span></label>
-                <ng-dropdown-multiselect class="multiSelect cursor"
-                                         data-input-name="issueStatusTypes"
-                                         selected-model="vm.search.issueStatusTypes"
-                                         extra-settings="{ stringTypeOption : true }"
-                                         options="vm.options.emailTemplates"></ng-dropdown-multiselect>
+
+                <div class="select3-selection__choicediv mt-10">
+                                <span class="select3-selection__choice" ng-repeat="company in vm.form.companies">
+                                    <span>{{company.byName}}</span> <!--�궗�슜�옄媛� �냽�빐 �엳�뒗 遺��꽌 �씠由� 異쒕젰-->
+                                    <span class="select3-selection__choice__remove" ng-click="fn.removeUseCompany($index)">횞</span>
+                                </span>
+                </div>
             </div>
 
             <div class="form-group">
diff --git a/src/main/webapp/views/issueType/issueTypeModify.html b/src/main/webapp/views/issueType/issueTypeModify.html
index a43fb0a..53060e2 100644
--- a/src/main/webapp/views/issueType/issueTypeModify.html
+++ b/src/main/webapp/views/issueType/issueTypeModify.html
@@ -63,17 +63,28 @@
             </div>
 
 
-            <div class="form-group">
-                <label><span
-                        translate="issue.companyInfo">�뾽泥�/ISP/�샇�뒪�똿 �젙蹂�</span></label>
-                <ng-dropdown-multiselect class="multiSelect cursor"
-                                         data-input-name="issueStatusTypes"
-                                         selected-model="vm.search.issueStatusTypes"
-                                         extra-settings="{ stringTypeOption : true }"
-                                         options="vm.options.emailTemplates"></ng-dropdown-multiselect>
+            <div class="form-group mgb5">
+                <label class="issue-label"> <span translate="issue.companyInfo">�뾽泥�/ISP/�샇�뒪�똿 �젙蹂�</span> </label>
+                <js-autocomplete-multi data-input-name="departments"
+                                       selected-model="vm.form.companies"
+                                       search="vm.companyName"
+                                       source="fn.getCompanyList(vm.companyName, vm.form.companies)"
+                                       input-disabled="false"
+                                       translation-texts="{ count : 'common.userNum', empty : 'common.emptyUser' }"
+                                       extra-settings="{ displayProp : 'byName' , idProp : 'id', imageable : false, maxlength : 100, autoResize : true }"></js-autocomplete-multi>
+
+
+                <div class="select3-selection__choicediv mt-10">
+                                <span class="select3-selection__choice" ng-repeat="company in vm.form.companies">
+                                    <span>{{company.byName}}</span> <!--�궗�슜�옄媛� �냽�빐 �엳�뒗 遺��꽌 �씠由� 異쒕젰-->
+                                    <span class="select3-selection__choice__remove" ng-click="fn.removeUseCompany($index)">횞</span>
+                                </span>
+                </div>
             </div>
 
 
+
+
             <div class="form-group">
                 <label for="issueTypeModifyForm2"><span translate="common.color">�깋�긽</span> <code class="highlighter-rouge">*</code></label>
                 <div class="input-group">

--
Gitblit v1.8.0