From b9685b82f1c9d5c0b8e0d31bca5436e644e5ab7e Mon Sep 17 00:00:00 2001
From: wyu <kknd09321@nate.com>
Date: 수, 01 12월 2021 16:45:03 +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       |   13 +++
 src/main/java/kr/wisestone/owl/service/impl/WidgetServiceImpl.java      |   10 +++
 src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java |   18 ++++++
 src/main/java/kr/wisestone/owl/web/form/IssueForm.java                  |   14 ++++
 src/main/webapp/scripts/app/widget/widgetDashBoard.controller.js        |   38 ++++++++++++
 src/main/java/kr/wisestone/owl/web/controller/IssueController.java      |    4 
 src/main/resources/mybatis/query-template/widget-template.xml           |   61 ++++++++++---------
 src/main/java/kr/wisestone/owl/constant/MsgConstants.java               |    1 
 src/main/java/kr/wisestone/owl/domain/enumType/EmailType.java           |    3 +
 src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties                  |    1 
 src/main/webapp/WEB-INF/i18n/code_ko_KR.properties                      |    1 
 src/main/java/kr/wisestone/owl/constant/MailConstants.java              |    5 +
 12 files changed, 134 insertions(+), 35 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/constant/MailConstants.java b/src/main/java/kr/wisestone/owl/constant/MailConstants.java
index 1a68deb..fac7864 100644
--- a/src/main/java/kr/wisestone/owl/constant/MailConstants.java
+++ b/src/main/java/kr/wisestone/owl/constant/MailConstants.java
@@ -30,7 +30,10 @@
 
     ISSUE_ADD("issue.add.title", "issueAddEmail"),  //  �씠�뒋 �깮�꽦
     ISSUE_REMOVE("issue.remove.title", "issueRemoveEmail"), //  �씠�뒋 �궘�젣
-    ISSUE_SEND("issue.send.title", "issueSendEmail"); //  �씠�뒋 �씠硫붿씪 �쟾�떖
+    ISSUE_SEND("issue.send.title", "issueSendEmail"), //  �씠�뒋 �씠硫붿씪 �쟾�떖
+    ISSUE_SEND_1("issue.send1.title", "issueSend1Email"), //  �씠�뒋 �씠硫붿씪 �쟾�떖
+    ISSUE_SEND_2("issue.send2.title", "issueSend2Email"), //  �씠�뒋 �씠硫붿씪 �쟾�떖
+    ISSUE_SEND_3("issue.send3.title", "issueSend3Email"); //  �씠�뒋 �씠硫붿씪 �쟾�떖
     //  ISSUE_MODIFY("issue.modify.title", "issueModifyEmail"); //  �씠�뒋 �닔�젙
 
 
diff --git a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
index 8b86bd5..4aff444 100644
--- a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
+++ b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -114,6 +114,7 @@
     public static final String ISSUE_REMOVE_NOT_SELECT = "ISSUE_REMOVE_NOT_SELECT"; //  �궘�젣�븷 �씠�뒋媛� �꽑�깮�릺吏� �븡�븯�뒿�땲�떎.
     public static final String ISSUE_NO_TITLE = "ISSUE_NO_TITLE";   //  �씠�뒋 �젣紐⑹씠 �엯�젰�릺吏� �븡�븯�뒿�땲�떎.
     public static final String ISSUE_NOT_SEND_USER = "ISSUE_NOT_SEND_USER";   //  �씠�뒋 諛쒖넚 ���긽�옄瑜� �꽑�깮�븯吏� �븡�븯�뒿�땲�떎.
+    public static final String ISSUE_NOT_SELECT_TEMPLATE = "ISSUE_NOT_SELECT_TEMPLATE";   //  �씠�뒋 諛쒖넚 �뀥�뵆由우쓣 �꽑�깮�븯吏� �븡�븯�뒿�땲�떎.
 
     public static final String ISSUE_COMMENT_REMOVE_NOT_SELECT = "ISSUE_COMMENT_REMOVE_NOT_SELECT"; //  �궘�젣�븷 �뙎湲��쓣 �꽑�깮�븯吏� �븡�븯�뒿�땲�떎.
     public static final String ISSUE_COMMENT_NOT_EXIST = "ISSUE_COMMENT_NOT_EXIST"; //  �뙎湲��씠 議댁옱�븯吏� �븡�뒿�땲�떎.
diff --git a/src/main/java/kr/wisestone/owl/domain/enumType/EmailType.java b/src/main/java/kr/wisestone/owl/domain/enumType/EmailType.java
index 75d8b6b..b1bb116 100644
--- a/src/main/java/kr/wisestone/owl/domain/enumType/EmailType.java
+++ b/src/main/java/kr/wisestone/owl/domain/enumType/EmailType.java
@@ -32,6 +32,9 @@
     ISSUE_MODIFY,   //  �씠�뒋 �닔�젙
     ISSUE_REMOVE,   //  �씠�뒋 �궘�젣
     ISSUE_SEND, //  �씠�뒋 �젙蹂� �씠硫붿씪濡� �쟾�떖
+    ISSUE_SEND_1,
+    ISSUE_SEND_2,
+    ISSUE_SEND_3,
     PROJECT_ADD,    //  �봽濡쒖젥�듃 �깮�꽦
     PROJECT_MODIFY, //  �봽濡쒖젥�듃 �닔�젙
     PROJECT_REMOVE, //  �봽濡쒖젥�듃 �궘�젣
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 0cf87fe..49a32b4 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -2591,6 +2591,9 @@
         if (issueForm.getSendEmails().size() < 1) {
             throw new OwlRuntimeException(
                     this.messageAccessor.getMessage(MsgConstants.ISSUE_NOT_SEND_USER));
+        }else if (issueForm.getTemplate() != null){
+            throw new OwlRuntimeException(
+                    this.messageAccessor.getMessage(MsgConstants.ISSUE_NOT_SELECT_TEMPLATE));
         }
 
         Issue issue = this.getIssue(issueForm.getId());
@@ -2612,8 +2615,15 @@
 
         //  �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏�
         log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_ANOTHER_USER_SEND_EMAIL));
+        //this.systemEmailService.directEmail(issueForm.getSendEmails().toArray(new String[issueForm.getSendEmails().size()]), EmailType.ISSUE_SEND, issueMap, null);
 
-        this.systemEmailService.directEmail(issueForm.getSendEmails().toArray(new String[issueForm.getSendEmails().size()]), EmailType.ISSUE_SEND, issueMap, null);
+        if(issueForm.getTemplate().equals("SEND1")){
+            this.systemEmailService.directEmail(issueForm.getSendEmails().toArray(new String[issueForm.getSendEmails().size()]), EmailType.ISSUE_SEND_1, issueMap, null);
+        }else if(issueForm.getTemplate().equals("SEND2")){
+            this.systemEmailService.directEmail(issueForm.getSendEmails().toArray(new String[issueForm.getSendEmails().size()]), EmailType.ISSUE_SEND_2, issueMap, null);
+        }else if(issueForm.getTemplate().equals("SEND3")){
+            this.systemEmailService.directEmail(issueForm.getSendEmails().toArray(new String[issueForm.getSendEmails().size()]), EmailType.ISSUE_SEND_3, issueMap, null);
+        }
     }
 
     //  �삁�빟 諛쒖깮 �씠�뒋瑜� �떎�뻾�븳�떎
@@ -2791,7 +2801,6 @@
         StringBuilder sb = new StringBuilder();
 
         if (newParentIssueId != null) { // 異붽� �븷 寃쎌슦
-            // todo �씠�쟾 �븯�쐞 �씪媛� �엳�뒪�넗由ш린濡� �븘�슂
             parentIssue = this.getIssue(newParentIssueId); //�긽�쐞�씠�뒋(myIssue)
             issue.setParentIssue(parentIssue); //myIssue瑜� �븯�쐞�씠�뒋�쓽 �긽�쐞�씠�뒋濡� set
             this.issueHistoryService.detectDownIssues(IssueHistoryType.ADD, issue, sb); //issue = �븯�쐞�씠�뒋
diff --git a/src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java
index 60a400c..a51aff3 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java
@@ -179,6 +179,24 @@
                 content = this.springTemplateEngine.process(mailConstants.getMailTemplate(), context);
                 break;
 
+            case ISSUE_SEND_1:    //  �씠�뒋 �씠硫붿씪濡� ���긽�옄�뿉寃� 諛쒖넚
+                mailConstants = MailConstants.ISSUE_SEND_1;
+                context = StringTemplateUtil.makeContext(params, locale);
+                content = this.springTemplateEngine.process(mailConstants.getMailTemplate(), context);
+                break;
+
+            case ISSUE_SEND_2:    //  �씠�뒋 �씠硫붿씪濡� ���긽�옄�뿉寃� 諛쒖넚
+                mailConstants = MailConstants.ISSUE_SEND_2;
+                context = StringTemplateUtil.makeContext(params, locale);
+                content = this.springTemplateEngine.process(mailConstants.getMailTemplate(), context);
+                break;
+
+            case ISSUE_SEND_3:    //  �씠�뒋 �씠硫붿씪濡� ���긽�옄�뿉寃� 諛쒖넚
+                mailConstants = MailConstants.ISSUE_SEND_3;
+                context = StringTemplateUtil.makeContext(params, locale);
+                content = this.springTemplateEngine.process(mailConstants.getMailTemplate(), context);
+                break;
+
             case USER_JOIN_STATISTICS:  //  �씪�씪 �궗�슜�옄 媛��엯 �젙蹂� 諛쒖넚
                 mailConstants = MailConstants.USER_JOIN_STATISTICS;
                 context = StringTemplateUtil.makeContext(params, locale);
diff --git a/src/main/java/kr/wisestone/owl/service/impl/WidgetServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/WidgetServiceImpl.java
index 4a8a84d..df9aac1 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/WidgetServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/WidgetServiceImpl.java
@@ -486,6 +486,7 @@
             List<Map<String, Object>> projectMemberIssues = this.widgetMapper.findProjectMemberIssue(widgetCondition);
 
             for (Map<String, Object> projectMemberIssue : projectMemberIssues) {
+                //String departmentName = MapUtil.getString(projectMemberIssue, "departmentName");
                 Long completeCount = MapUtil.getLong(projectMemberIssue, "completeCount");
                 Long remainCount = MapUtil.getLong(projectMemberIssue, "remainCount");
                 //projectMemberIssue.put("account", CommonUtil.decryptAES128(MapUtil.getString(projectMemberIssue, "account")));
@@ -1037,6 +1038,7 @@
         excelInfo.setDatas(assigneeIssues);
         excelInfo.addAttrInfos(new ExportExcelAttrVo("issueKey", this.messageAccessor.message("common.issueKey"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // �씠�뒋 踰덊샇
         excelInfo.addAttrInfos(new ExportExcelAttrVo("registerDate", this.messageAccessor.message("common.registerDate"), 8, ExportExcelAttrVo.ALIGN_CENTER)); // �벑濡앹씪
+        excelInfo.addAttrInfos(new ExportExcelAttrVo("projectName", this.messageAccessor.message("common.project"), 15, ExportExcelAttrVo.ALIGN_LEFT)); // �봽濡쒖젥�듃
         excelInfo.addAttrInfos(new ExportExcelAttrVo("title", this.messageAccessor.message("common.issueTitle"), 40, ExportExcelAttrVo.ALIGN_LEFT)); // �씠�뒋
         excelInfo.addAttrInfos(new ExportExcelAttrVo("issueStatusName", this.messageAccessor.message("common.status"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // �긽�깭
         excelInfo.addAttrInfos(new ExportExcelAttrVo("completeDate", this.messageAccessor.message("common.endDate"), 15, ExportExcelAttrVo.ALIGN_CENTER)); // 醫낅즺�씪
@@ -1104,6 +1106,7 @@
         excelInfo.setDatas(riskIssues);
         excelInfo.addAttrInfos(new ExportExcelAttrVo("issueKey", this.messageAccessor.message("common.issueKey"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // �씠�뒋 踰덊샇
         excelInfo.addAttrInfos(new ExportExcelAttrVo("riskType", this.messageAccessor.message("common.division"), 15, ExportExcelAttrVo.ALIGN_CENTER)); // 援щ텇
+        excelInfo.addAttrInfos(new ExportExcelAttrVo("projectName", this.messageAccessor.message("common.project"), 15, ExportExcelAttrVo.ALIGN_LEFT)); // �봽濡쒖젥�듃
         excelInfo.addAttrInfos(new ExportExcelAttrVo("title", this.messageAccessor.message("common.issueTitle"), 40, ExportExcelAttrVo.ALIGN_LEFT)); // �씠�뒋
         excelInfo.addAttrInfos(new ExportExcelAttrVo("issueStatusName", this.messageAccessor.message("common.status"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // �긽�깭
         excelInfo.addAttrInfos(new ExportExcelAttrVo("issueUsers", this.messageAccessor.message("common.assignee"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // �떞�떦�옄
@@ -1137,6 +1140,7 @@
         excelInfo.setDatas(registerIssues);
         excelInfo.addAttrInfos(new ExportExcelAttrVo("issueKey", this.messageAccessor.message("common.issueKey"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // �씠�뒋 踰덊샇
         excelInfo.addAttrInfos(new ExportExcelAttrVo("issueStatusName", this.messageAccessor.message("common.status"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // �긽�깭
+        excelInfo.addAttrInfos(new ExportExcelAttrVo("projectName", this.messageAccessor.message("common.project"), 15, ExportExcelAttrVo.ALIGN_LEFT)); // �봽濡쒖젥�듃
         excelInfo.addAttrInfos(new ExportExcelAttrVo("title", this.messageAccessor.message("common.issueTitle"), 40, ExportExcelAttrVo.ALIGN_LEFT)); // �씠�뒋
         excelInfo.addAttrInfos(new ExportExcelAttrVo("period", this.messageAccessor.message("common.period"), 15, ExportExcelAttrVo.ALIGN_CENTER)); // 湲곌컙
         return excelInfo;
@@ -1182,6 +1186,7 @@
         excelInfo.setDatas(delayIssues);
         excelInfo.addAttrInfos(new ExportExcelAttrVo("issueKey", this.messageAccessor.message("common.issueKey"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // �씠�뒋 踰덊샇
         excelInfo.addAttrInfos(new ExportExcelAttrVo("delayDay", this.messageAccessor.message("common.delayDate"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // 吏��뿰�씪
+        excelInfo.addAttrInfos(new ExportExcelAttrVo("projectName", this.messageAccessor.message("common.project"), 15, ExportExcelAttrVo.ALIGN_LEFT)); // �봽濡쒖젥�듃
         excelInfo.addAttrInfos(new ExportExcelAttrVo("title", this.messageAccessor.message("common.issueTitle"), 40, ExportExcelAttrVo.ALIGN_LEFT)); // �씠�뒋
         excelInfo.addAttrInfos(new ExportExcelAttrVo("issueStatusName", this.messageAccessor.message("common.status"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // �긽�깭
         excelInfo.addAttrInfos(new ExportExcelAttrVo("period", this.messageAccessor.message("common.period"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // 湲곌컙
@@ -1223,7 +1228,9 @@
         excelInfo.setFileName(this.messageAccessor.message("common.progressByMember")); // 硫ㅻ쾭蹂� 吏꾪뻾瑜�
         excelInfo.setDatas(members);
 
-        excelInfo.addAttrInfos(new ExportExcelAttrVo("byName", this.messageAccessor.message("common.teamMember"), 15, ExportExcelAttrVo.ALIGN_LEFT)); // ���썝
+        //excelInfo.addAttrInfos(new ExportExcelAttrVo("byName", this.messageAccessor.message("common.teamMember"), 15, ExportExcelAttrVo.ALIGN_LEFT)); // ���썝
+        excelInfo.addAttrInfos(new ExportExcelAttrVo("projectName", this.messageAccessor.message("common.project"), 15, ExportExcelAttrVo.ALIGN_LEFT)); // �봽濡쒖젥�듃
+        excelInfo.addAttrInfos(new ExportExcelAttrVo("departmentName", this.messageAccessor.message("common.teamDepartment"), 15, ExportExcelAttrVo.ALIGN_LEFT)); // �떞�떦遺��꽌
         excelInfo.addAttrInfos(new ExportExcelAttrVo("projectProgressPercent", this.messageAccessor.message("common.progressPercent"), 6, ExportExcelAttrVo.ALIGN_LEFT)); // 吏꾪뻾瑜�
         excelInfo.addAttrInfos(new ExportExcelAttrVo("issueCount", this.messageAccessor.message("common.assignedIssue"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // �떞�떦 �씠�뒋
         excelInfo.addAttrInfos(new ExportExcelAttrVo("delayCount", this.messageAccessor.message("common.delaying"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // 吏��뿰以�
@@ -1300,6 +1307,7 @@
         excelInfo.setDatas(severityIssue);
         excelInfo.addAttrInfos(new ExportExcelAttrVo("issueKey", this.messageAccessor.message("common.issueKey"), 8, ExportExcelAttrVo.ALIGN_CENTER));    //�씠�뒋 踰덊샇
         excelInfo.addAttrInfos(new ExportExcelAttrVo("severityName", this.messageAccessor.message("common.importance"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // 以묒슂�룄
+        excelInfo.addAttrInfos(new ExportExcelAttrVo("projectName", this.messageAccessor.message("common.project"), 15, ExportExcelAttrVo.ALIGN_LEFT)); // �봽濡쒖젥�듃
         excelInfo.addAttrInfos(new ExportExcelAttrVo("title", this.messageAccessor.message("common.issueTitle"), 40, ExportExcelAttrVo.ALIGN_CENTER)); // �씠�뒋�젣紐�
         excelInfo.addAttrInfos(new ExportExcelAttrVo("issueStatusName", this.messageAccessor.message("common.status"), 6, ExportExcelAttrVo.ALIGN_CENTER));  //�씠�뒋 �긽�깭
         excelInfo.addAttrInfos(new ExportExcelAttrVo("period", this.messageAccessor.message("common.period"), 15, ExportExcelAttrVo.ALIGN_CENTER)); // 湲곌컙
diff --git a/src/main/java/kr/wisestone/owl/web/controller/IssueController.java b/src/main/java/kr/wisestone/owl/web/controller/IssueController.java
index 0cbcbda..2e224eb 100644
--- a/src/main/java/kr/wisestone/owl/web/controller/IssueController.java
+++ b/src/main/java/kr/wisestone/owl/web/controller/IssueController.java
@@ -165,7 +165,7 @@
     }
 
     //  硫붿씪 諛쒖넚 ���긽�옄 紐⑸줉 議고쉶
-    @RequestMapping(value = "/issue/findMailTargetAll", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
+    /*@RequestMapping(value = "/issue/findMailTargetAll", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
     public
     @ResponseBody
     Map<String, Object> findMailTargetAll(@RequestBody Map<String, Map<String, Object>> params) {
@@ -175,7 +175,7 @@
 //        this.issueService.findMailTargetAll(resJsonData, IssueCondition.make(params.get(Constants.REQ_KEY_CONTENT)), pageable);
 
         return this.setSuccessMessage(resJsonData);
-    }
+    }*/
 
 
     /*//  �뾽泥� �떞�떦�옄 硫붿씪 紐⑸줉 議고쉶
diff --git a/src/main/java/kr/wisestone/owl/web/form/IssueForm.java b/src/main/java/kr/wisestone/owl/web/form/IssueForm.java
index bf58d29..87aade8 100644
--- a/src/main/java/kr/wisestone/owl/web/form/IssueForm.java
+++ b/src/main/java/kr/wisestone/owl/web/form/IssueForm.java
@@ -30,6 +30,7 @@
     private List<Long> userIds = Lists.newArrayList();
     private List<Long> departmentIds = Lists.newArrayList();    // �떞�떦 遺��꽌
     private List<String> sendEmails = Lists.newArrayList(); //  �씠硫붿씪 諛쒖넚 ���긽�옄
+    private String template;
     private List<Long> attachedFileIds = Lists.newArrayList();
     private Long relationIssue;   // �뿰愿� �씪媛�
     private List<Map<String, Object>> issueCustomFields = Lists.newArrayList();
@@ -72,6 +73,11 @@
         //  硫붿씪 諛쒖넚�옄 �젙蹂�
         if (MapUtil.getStrings(params, "sendEmails") != null) {
             form.setSendEmails(MapUtil.getStrings(params, "sendEmails"));
+        }
+
+        //  硫붿씪 �뀥�뵆由� �젙蹂�
+        if (MapUtil.getString(params, "template") != null) {
+            form.setTemplate(MapUtil.getString(params, "template"));
         }
 
         //  �뀓�뒪�듃 �뿉�뵒�꽣�뿉 泥⑤��맂 �뙆�씪�쓣 �씠�뒋�� �뿰寃고븯�뒗 �젙蹂�
@@ -356,4 +362,12 @@
     public void setFiles(List<Map<String, Object>> files) {
         this.files = files;
     }
+
+    public String getTemplate() {
+        return template;
+    }
+
+    public void setTemplate(String template) {
+        this.template = template;
+    }
 }
diff --git a/src/main/resources/mybatis/query-template/widget-template.xml b/src/main/resources/mybatis/query-template/widget-template.xml
index 37ab4d1..b482c87 100644
--- a/src/main/resources/mybatis/query-template/widget-template.xml
+++ b/src/main/resources/mybatis/query-template/widget-template.xml
@@ -15,7 +15,7 @@
         WHERE EXISTS(SELECT 1 FROM issue_status iss WHERE iss.issue_status_type != 'CLOSE' AND i.issue_status_id =
         iss.id)
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -31,7 +31,7 @@
         COUNT(i.id) FROM issue i where
         exists(select 1 from issue_status iss where iss.id = i.issue_status_id and iss.issue_status_type != 'CLOSE')
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -86,7 +86,7 @@
         </choose>
         ) AND EXISTS(SELECT 1 FROM issue_status iss WHERE iss.id = i.issue_status_id and iss.issue_status_type != 'CLOSE')
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -102,7 +102,7 @@
         count(i.id) as todayCount from issue i where
         i.register_id = #{loginUserId}
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -140,7 +140,7 @@
         WHERE
         EXISTS(select 1 from issue_status iss where iss.id = i.issue_status_id and iss.issue_status_type != 'CLOSE')
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -158,7 +158,7 @@
         inner join issue_status iss on iss.id = i.issue_status_id
         where iss.issue_status_type = 'CLOSE'
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -180,7 +180,7 @@
         where iss.issue_status_type = 'CLOSE'
         and i.modify_date between #{searchStartDate} and #{searchEndDate}
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -197,7 +197,7 @@
         inner join issue_status iss on iss.id = i.issue_status_id
         where 1=1
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -277,7 +277,7 @@
         left outer join issue_status iss on iss.id = i.issue_status_id
         WHERE 1=1
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND p.id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -389,7 +389,7 @@
         and id.register_date
         BETWEEN (CURDATE()) AND (CURDATE() + INTERVAL 1 DAY))
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -429,7 +429,7 @@
         inner join issue_status iss on iss.id = i.issue_status_id
         WHERE 1=1
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -502,7 +502,7 @@
         inner join project p on p.id = i.project_id
         WHERE 1=1
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND p.id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -562,7 +562,7 @@
         inner join issue_status iss on iss.id = i.issue_status_id
         where iss.issue_status_type != 'CLOSE'
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -607,14 +607,15 @@
         (case when ir.change_issue_status_count > 3 then true else false end) as changeIssueStatusType,
         CONCAT(p.project_key, '-', i.issue_number) AS issueKey,
         i.issue_number as issueNumber,
-        p.project_key as projectKey
+        p.project_key as projectKey,
+        p.name as projectName
         from issue i
         inner join issue_risk ir on ir.issue_id = i.id
         inner join issue_status iss on iss.id = i.issue_status_id
         inner join project p on p.id = i.project_id
         where iss.issue_status_type != 'CLOSE'
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND p.id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -637,7 +638,7 @@
         inner join issue_status iss on iss.id = i.issue_status_id
         where iss.issue_status_type != 'CLOSE'
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -675,7 +676,7 @@
         WHERE 1=1
         AND i.register_id = #{loginUserId}
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -706,7 +707,7 @@
             AND EXISTS (SELECT 1 FROM issue_status iss WHERE iss.id = i.issue_status_id AND iss.issue_status_type != 'CLOSE')
         </if>
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -744,7 +745,7 @@
         </if>
         WHERE 1=1
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -770,7 +771,7 @@
         </if>
         WHERE 1=1
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -807,7 +808,7 @@
         inner join issue_status iss on iss.id = i.issue_status_id
         where 1=1
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -851,6 +852,7 @@
             parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
         select
         d.department_name as departmentName,
+        p.name as projectName,
         (select count(*) from issue i
         inner join issue_department id on id.issue_id = i.id
         inner join issue_status iss on iss.id = i.issue_status_id
@@ -870,7 +872,7 @@
         inner join project p on p.id = pr.project_id
         WHERE
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 p.id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -894,7 +896,7 @@
         'CLOSE') AND
         i.register_id = #{loginUserId}
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -912,7 +914,7 @@
         'CLOSE')
         AND i.register_id = #{loginUserId}
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -959,7 +961,7 @@
         </choose>
         and iss.issue_status_type = 'CLOSE'
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -1006,7 +1008,7 @@
             </otherwise>
         </choose>
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -1046,7 +1048,7 @@
         WHERE w.id = #{workspaceId}
         AND iss.issue_status_type != 'CLOSE'
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -1066,6 +1068,7 @@
         replace(i.complete_date, "-", ".")  AS completeDate,
         i.issue_number AS issueNumber,
         p.project_key AS projectKey,
+        p.name AS projectName,
         iss.name AS issueStatusName,
         CONCAT(p.project_key, '-', i.issue_number) AS issueKey
         FROM issue i
@@ -1077,7 +1080,7 @@
         AND s.id = #{severityId}
         AND iss.issue_status_type != 'CLOSE'
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
@@ -1102,7 +1105,7 @@
         AND s.id = #{severityId}
         AND iss.issue_status_type != 'CLOSE'
         <choose>
-            <when test="meAndDownProjectIds.size != 0">
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
                 AND i.project_id IN
                 <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
diff --git a/src/main/webapp/WEB-INF/i18n/code_ko_KR.properties b/src/main/webapp/WEB-INF/i18n/code_ko_KR.properties
index 70ef9b3..d0355db 100644
--- a/src/main/webapp/WEB-INF/i18n/code_ko_KR.properties
+++ b/src/main/webapp/WEB-INF/i18n/code_ko_KR.properties
@@ -29,6 +29,7 @@
 common.registerDate=\uB4F1\uB85D\uC77C
 common.admin=\uAD00\uB9AC\uC790
 common.teamMember=\uD300\uC6D0
+common.teamDepartment=\uB2F4\uB2F9\uBD80\uC11C
 common.registration=\uB4F1\uB85D
 common.assigned=\uB2F4\uB2F9
 common.progressPercent=\uC9C4\uD589\uB960
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 f13e192..f56fd09 100644
--- a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
+++ b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
@@ -116,6 +116,7 @@
 ISSUE_REMOVE_NOT_SELECT = \uC0AD\uC81C\uD560 \uC774\uC288\uAC00 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
 ISSUE_NO_TITLE = \uC774\uC288 \uC81C\uBAA9\uC774 \uC785\uB825\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
 ISSUE_NOT_SEND_USER = \uC774\uC288 \uBC1C\uC1A1 \uB300\uC0C1\uC790\uB97C \uC120\uD0DD\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
+ISSUE_NOT_SELECT_TEMPLATE = \uC774\uC288 \uBC1C\uC1A1 \uD15C\uD50C\uB9BF\uC744 \uC120\uD0DD\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
 
 ISSUE_COMMENT_REMOVE_NOT_SELECT = \uC0AD\uC81C\uD560 \uB313\uAE00\uC744 \uC120\uD0DD\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
 ISSUE_COMMENT_NOT_EXIST = \uB313\uAE00\uC774 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
diff --git a/src/main/webapp/scripts/app/widget/widgetDashBoard.controller.js b/src/main/webapp/scripts/app/widget/widgetDashBoard.controller.js
index 0bab9d8..d4702ad 100644
--- a/src/main/webapp/scripts/app/widget/widgetDashBoard.controller.js
+++ b/src/main/webapp/scripts/app/widget/widgetDashBoard.controller.js
@@ -51,6 +51,44 @@
                             $scope.vm.riskIssueWidget = result.data.riskIssueWidget;
                             //  �굹�쓽 �씠�뒋 �쁽�솴 �젙蹂대�� ���옣�븳�떎.
                             $scope.vm.myIssueWidget = result.data.myIssueWidget;
+
+                            const members = result.data.memberProgressWidget.members;
+                            var filterMembers = members.filter(function(item, idx){
+                                return members.findIndex(function(item2, idx2){
+                                    return item.departmentName === item2.departmentName
+                                }) == idx;
+                            });
+
+                            var departmentNames = [];
+                            angular.forEach(filterMembers, function (member) {
+                                departmentNames.push(member.departmentName);
+                            });
+                            var completeCounts = [];
+                            var delayCounts = [];
+                            var remainCounts = [];
+
+                            for(var j=0; j<departmentNames.length; j++){ //諛곗뿴 珥덇린媛� �꽑�뼵
+                                completeCounts[j] = 0;
+                                delayCounts[j] = 0;
+                                remainCounts[j] = 0;
+                            }
+
+                            for(var i=0; i<members.length; i++){
+                                for(var j=0; j<departmentNames.length; j++){
+                                    if(members[i].departmentName === departmentNames[j]){
+                                        completeCounts[j] += members[i].completeCount;
+                                        delayCounts[j] += members[i].delayCount;
+                                        remainCounts[j] += members[i].remainCount;
+                                    }
+                                }
+                            }
+                            for(var i=0; i<filterMembers.length; i++){
+                                filterMembers[i].completeCount = completeCounts[i]
+                                filterMembers[i].delayCount = delayCounts[i]
+                                filterMembers[i].remainCount = remainCounts[i]
+                            }
+                            result.data.memberProgressWidget.members = filterMembers;
+
                             //  硫ㅻ쾭蹂� 吏꾪뻾瑜좎쓣 ���옣�븳�떎.
                             $scope.vm.memberProgressWidget = result.data.memberProgressWidget;
                             //  �쟾泥� �씠�뒋 泥섎━ �쁽�솴 �젙蹂대�� ���옣�븳�떎.

--
Gitblit v1.8.0