From 4af75fe18d97960fabea0fadb28a69c01a038bc4 Mon Sep 17 00:00:00 2001 From: 이민희 <mhlee@maprex.co.kr> Date: 화, 25 1월 2022 17:01:37 +0900 Subject: [PATCH] - 파트너명 특수문자 입력 가능하도록 수정 - 이슈 import/export 시 파트너 정보 추가 - 이슈상세 - 메일 기록 추가 --- src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | 219 +++++++++++++++++++++++++++++++----- src/main/webapp/views/hostingField/hostingFieldAdd.html | 3 src/main/webapp/views/ispField/ispFieldAdd.html | 3 src/main/java/kr/wisestone/owl/service/CompanyFieldService.java | 2 src/main/webapp/views/ispField/ispFieldModify.html | 3 src/main/java/kr/wisestone/owl/constant/MsgConstants.java | 1 src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties | 1 src/main/webapp/scripts/app/issue/issueDetail.controller.js | 27 ++++ src/main/webapp/views/companyField/companyFieldModify.html | 3 src/main/java/kr/wisestone/owl/domain/IssueCompany.java | 8 + src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java | 7 + src/main/webapp/i18n/ko/global.json | 2 src/main/webapp/views/hostingField/hostingFieldModify.html | 3 src/main/webapp/views/issue/issueDetail.html | 65 ++++++++-- src/main/webapp/WEB-INF/i18n/code_ko_KR.properties | 3 src/main/webapp/views/companyField/companyFieldAdd.html | 4 16 files changed, 296 insertions(+), 58 deletions(-) diff --git a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java index bf7f998..2822e75 100644 --- a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java +++ b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java @@ -183,6 +183,7 @@ public static final String EXCEL_IMPORT_COMPANY_NAME_IS_NULL = "EXCEL_IMPORT_COMPANY_NAME_IS_NULL"; // �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �뾽泥대챸�씠 �엯�젰吏� �븡�븯�뒿�땲�떎. public static final String EXCEL_IMPORT_URL_IS_NULL = "EXCEL_IMPORT_URL_IS_NULL"; // �떎�쓬 �뿊�� �씪�씤�뿉�꽌 URL�씠 �엯�젰吏� �븡�븯�뒿�땲�떎. + public static final String EXCEL_IMPORT_COMPANY_NOT_EXIST = "EXCEL_IMPORT_COMPANY_NOT_EXIST"; // �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�맂 �뾽泥대챸�쑝濡� 寃��깋�릺�뒗 �뾽泥닿� �뾾�뒿�땲�떎. public static final String EXCEL_IMPORT_ISP_NOT_EXIST = "EXCEL_IMPORT_ISP_NOT_EXIST"; // �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�맂 ISP紐낆쑝濡� 寃��깋�릺�뒗 ISP媛� �뾾�뒿�땲�떎. public static final String EXCEL_IMPORT_HOSTING_NOT_EXIST = "EXCEL_IMPORT_HOSTING_NOT_EXIST"; // �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�맂 �샇�뒪�똿紐낆쑝濡� 寃��깋�릺�뒗 �샇�뒪�똿�씠 �뾾�뒿�땲�떎. public static final String EXCEL_IMPORT_PARENT_SECTOR_NOT_EQUAL = "EXCEL_IMPORT_PARENT_SECTOR_NOT_EQUAL"; // �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�맂 �뾽醫�(以묐텇瑜�)�� �뾽醫�(��遺꾨쪟)�뿉 �냽�빐�엳吏� �븡�뒿�땲�떎. diff --git a/src/main/java/kr/wisestone/owl/domain/IssueCompany.java b/src/main/java/kr/wisestone/owl/domain/IssueCompany.java index 3b2815f..51e8ba6 100644 --- a/src/main/java/kr/wisestone/owl/domain/IssueCompany.java +++ b/src/main/java/kr/wisestone/owl/domain/IssueCompany.java @@ -25,6 +25,7 @@ private Long childSectorId; private Long regionId; private Long statusId; + private String statusName; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "issue_id") @@ -159,4 +160,11 @@ this.statusId = statusId; } + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } } diff --git a/src/main/java/kr/wisestone/owl/service/CompanyFieldService.java b/src/main/java/kr/wisestone/owl/service/CompanyFieldService.java index 00d8255..66e5cbf 100644 --- a/src/main/java/kr/wisestone/owl/service/CompanyFieldService.java +++ b/src/main/java/kr/wisestone/owl/service/CompanyFieldService.java @@ -40,4 +40,6 @@ void importExcel(MultipartFile multipartFile) throws Exception; CompanyFieldVo CreateCompanyFieldCategory(CompanyFieldVo companyFieldVo, CompanyField companyField); + + List<CompanyField> findAll(); } diff --git a/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java index 80f374d..e6ee02f 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java @@ -142,6 +142,13 @@ return this.companyFieldMapper.find(condition); } + // 紐⑤뱺 �뾽泥댁젙蹂대�� 議고쉶�븳�떎. �씠�뒋 �뿊�� import �뿉�꽌 �궗�슜 + @Override + @Transactional(readOnly = true) + public List<CompanyField> findAll() { + return this.companyFieldRepository.findAll(); + } + /** * companyFieldCategory Name �꽕�젙 * @param companyFieldVo CompanyFieldVo 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 a772639..765ab69 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java @@ -2755,6 +2755,9 @@ excelInfo.addAttrInfos(new ExportExcelAttrVo("register", this.messageAccessor.message("common.register"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // �벑濡앹옄 excelInfo.addAttrInfos(new ExportExcelAttrVo("period", this.messageAccessor.message("common.period"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // 湲곌컙 excelInfo.addAttrInfos(new ExportExcelAttrVo("modifyDate", this.messageAccessor.message("common.modifyDate"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // 理쒖쥌 蹂�寃쎌씪 + excelInfo.addAttrInfos(new ExportExcelAttrVo("companyName", this.messageAccessor.message("common.company"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // �뾽泥� + excelInfo.addAttrInfos(new ExportExcelAttrVo("ispName", this.messageAccessor.message("common.isp"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // ISP + excelInfo.addAttrInfos(new ExportExcelAttrVo("hostingName", this.messageAccessor.message("common.hosting"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // �샇�뒪�똿 // �궗�슜�옄 �젙�쓽 �븘�뱶瑜� �궗�슜�븳 �씠�뒋瑜� 李얜뒗�떎. 留뚯빟 �씠�뒋媛� �뾾�떎硫� �뿬湲곗꽌 �씠�뒋 議고쉶媛� �걹�궃�떎. @@ -2855,8 +2858,12 @@ issueCompanyVo.setRegionName(region.getUseValue()); } if (issueCompany.getStatusId() != null && issueCompany.getStatusId() != -1) { - CompanyFieldCategory status = this.companyFieldCategoryService.find(issueCompany.getStatusId()); - issueCompanyVo.setStatusName(status.getUseValue()); + if (issueCompany.getStatusName() != null && !issueCompany.getStatusName().equals("")) { + issueCompanyVo.setStatusName(issueCompany.getStatusName()); + } else { + CompanyFieldCategory status = this.companyFieldCategoryService.find(issueCompany.getStatusId()); + issueCompanyVo.setStatusName(status.getUseValue()); + } } } issueCompanyVos.add(issueCompanyVo); @@ -2927,6 +2934,9 @@ result.put("departments", CommonUtil.convertDepartmentVosToString(issueVo.getDepartmentVos())); result.put("priorityName", issueVo.getPriorityName()); result.put("severityName", issueVo.getSeverityName()); + result.put("companyName", issueVo.getCompanyName()); + result.put("ispName", issueVo.getIspName()); + result.put("hostingName", issueVo.getHostingName()); UserVo register = this.userService.removeSensitiveUser(issueVo.getRegisterId()); // �벑濡앹옄 @@ -3004,6 +3014,9 @@ excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("common.importance"), 5, ExportExcelAttrVo.ALIGN_CENTER)); // 以묒슂�룄 excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("common.startDate"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // �떆�옉�씪 excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("common.endDate"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // 醫낅즺�씪 + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("common.company"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // �뾽泥� + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("common.isp"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // ISP + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("common.hosting"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // �샇�뒪�똿 // �봽濡쒖젥�듃�뿉 �뿰寃곕맂 �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� 異붿텧�븯�뿬 �뿊�� download �뀥�뵆由우쓣 留뚮뱺�떎. this.makeIssueExcelTemplateCustomFields(excelInfo, conditions); // �뿊���뿉 �꽔�쓣 �뜲�씠�꽣 - IssueVos �뜲�씠�꽣瑜� �뿊���뿉�꽌 �몴�떆�븷 �닔 �엳�뒗 �뜲�씠�꽣濡� 蹂�寃쏀븳�떎. @@ -3043,9 +3056,14 @@ Map<Long, Long> issueNumberMaps = new HashMap<>(); // �씠�뒋 踰덊샇 紐⑥쓬 Map<String, Long> issueTypeCustomFieldMaps = new HashMap<>(); // �씠�뒋 ���엯 + �궗�슜�옄 �젙�쓽 �븘�뱶 �뿰寃� �젙蹂� + Map<String, CompanyField> companyFieldMaps = new HashMap<>(); //�뾽泥� 紐⑥쓬 + Map<String, IspField> ispFieldMaps = new HashMap<>(); //isp 紐⑥쓬 + Map<String, HostingField> hostingFieldMaps = new HashMap<>(); //�샇�뒪�똿 紐⑥쓬 + Workspace workspace = this.workspaceService.getWorkspace(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId()); // �씠�뒋瑜� �꽔�쑝�젮�뒗 �뾽臾� 怨듦컙 // �씠�뒋�쓽 二쇱슂 �냽�꽦�쓣 map �뿉 ���옣�븯�뿬 �뿊�� import �뿉�꽌 吏��젙�븳 ���긽(�씠�뒋 �냽�꽦)�쓣 鍮좊Ⅴ寃� 李얠쓣 �닔 �엳寃� �븳�떎. - this.IssueAttributeMapToList(issueForm, priorityMaps, severityMaps, departmentMaps, customFieldMaps, issueTypeCustomFieldMaps); + this.IssueAttributeMapToList(issueForm, priorityMaps, severityMaps, departmentMaps, customFieldMaps, + issueTypeCustomFieldMaps, companyFieldMaps, ispFieldMaps, hostingFieldMaps); // 0.237 - 0.230 List<IssueForm> issueForms = Lists.newArrayList(); @@ -3088,14 +3106,11 @@ // 1踰� �뿤�뜑遺��꽣 �뜲�씠�꽣 �쁺�뿭 if (rowIndex > 1) { // �씠�뒋濡� �벑濡앺븯湲� �쐞�빐 IssueForm �뿉 �뜲�씠�꽣瑜� �뀑�똿�븳�떎. - IssueForm newIssueForm = this.setIssueFormToExcelField(row, (rowIndex + 1), priorityMaps, severityMaps, departmentMaps, customFieldMaps, headers); + IssueForm newIssueForm = this.setIssueFormToExcelField(row, (rowIndex + 1), priorityMaps, severityMaps, departmentMaps, customFieldMaps, + companyFieldMaps, ispFieldMaps, hostingFieldMaps, headers); ConvertUtil.copyProperties(issueForm, newIssueForm); - - issueForms.add(newIssueForm); - - } } @@ -3147,6 +3162,8 @@ } saveIssueForm.setIssueStatusId(issueStatus.getId()); + + this.setIssuePartners(saveIssueForm, issue); } @@ -3160,7 +3177,7 @@ // �씠�뒋 �떞�떦�옄 踰뚰겕 �벑濡� this.bulkInsertIssueAssignee(issueForms, workspace); // 0.361 - 0.705 - + // 1.816 /*StopWatch serviceStart = new StopWatch(); serviceStart.start();*/ @@ -3179,6 +3196,60 @@ // 利앷��맂 �씠�뒋 踰덊샇瑜� �뾽�뜲�씠�듃 �븳�떎. // issueNumberMaps.put(issueForm.getProjectId(), issueForm.getProjectId()); // this.issueNumberGeneratorService.updateIssueNumber(issueNumberMaps); + } + } + + /** + * �뿊��濡� �엯�젰�븳 �뙆�듃�꼫 �젙蹂� ���옣 + * @param issueForm IssueForm + */ + private void setIssuePartners(IssueForm issueForm, Issue issue) { + //issueCompany �벑濡� + if (issueForm.getIssueCompanyFields() != null && issueForm.getIssueCompanyFields().size() > 0) { + for (Map<String, Object> issueCompanyMap : issueForm.getIssueCompanyFields()) { + CompanyField companyField = ConvertUtil.convertMapToClass(issueCompanyMap, CompanyField.class); + IssueCompany issueCompany = ConvertUtil.convertMapToClass(issueCompanyMap, IssueCompany.class); + issueCompany.setCompanyField(companyField); + issueCompany.setIssue(issue); + this.issueCompanyRepository.saveAndFlush(issueCompany); + + // �뾽泥댁쓽 ISP媛� �엳�뒗 寃쎌슦 issueISP �벑濡� + if (companyField.getIspId() != null) { + IspField ispField = this.ispFieldService.getIsp(companyField.getIspId()); + IssueIsp issueIsp = ConvertUtil.copyProperties(ispField, IssueIsp.class); + issueIsp.setIspField(ispField); + issueIsp.setIssue(issue); + this.issueIspRepository.saveAndFlush(issueIsp); + } + // �뾽泥댁쓽 �샇�뒪�똿�씠 �엳�뒗 寃쎌슦 issueHosting �벑濡� + if (companyField.getHostingId() != null) { + HostingField hostingField = this.hostingFieldService.getHosting(companyField.getHostingId()); + IssueHosting issueHosting = ConvertUtil.copyProperties(hostingField, IssueHosting.class); + issueHosting.setHostingField(hostingField); + issueHosting.setIssue(issue); + this.issueHostingRepository.saveAndFlush(issueHosting); + } + } + } + //issueIsp �벑濡� + if (issueForm.getIssueIspFields() != null && issueForm.getIssueIspFields().size() > 0) { + for (Map<String, Object> issueIspMap : issueForm.getIssueIspFields()) { + IssueIsp issueIsp = ConvertUtil.convertMapToClass(issueIspMap, IssueIsp.class); + IspField ispField = ConvertUtil.convertMapToClass(issueIspMap, IspField.class); + issueIsp.setIspField(ispField); + issueIsp.setIssue(issue); + this.issueIspRepository.saveAndFlush(issueIsp); + } + } + //issueHosting �벑濡� + if (issueForm.getIssueHostingFields() != null && issueForm.getIssueHostingFields().size() > 0) { + for (Map<String, Object> issueHostingMap : issueForm.getIssueHostingFields()) { + IssueHosting issueHosting = ConvertUtil.convertMapToClass(issueHostingMap, IssueHosting.class); + HostingField hostingField = ConvertUtil.convertMapToClass(issueHostingMap, HostingField.class); + issueHosting.setHostingField(hostingField); + issueHosting.setIssue(issue); + this.issueHostingRepository.saveAndFlush(issueHosting); + } } } @@ -3279,27 +3350,39 @@ issueCustomField.put("registerId", this.webAppUtil.getLoginId()); issueCustomFieldValueMaps.add(issueCustomField); } - IssueForm partners = this.findCompanyField(issueForm); // 媛숈� �룄硫붿씤 �뾽泥� 李얘린 - Issue issue = this.findOne(issueForm.getId()); - if (partners.getIssueCompanyFields() != null && partners.getIssueCompanyFields().size() > 0) { - for (Map<String, Object> company : partners.getIssueCompanyFields()) { - IssueCompany issueCompany = ConvertUtil.convertMapToClass(company, IssueCompany.class); - issueCompany.setIssue(issue); - this.issueCompanyRepository.saveAndFlush(issueCompany); + + // �뿊���뿉 �뾽泥대챸�쓣 �엯�젰�븯吏� �븡�븯�쓣 寃쎌슦 媛숈� �룄硫붿씤 �뾽泥� 李얘린 + if (issueForm.getIssueCompanyFields() == null || issueForm.getIssueCompanyFields().size() < 1) { + // 媛숈� �룄硫붿씤 �뾽泥� 李얘린 + IssueForm partners = this.findCompanyField(issueForm); + Issue issue = this.findOne(issueForm.getId()); + if (partners.getIssueCompanyFields() != null && partners.getIssueCompanyFields().size() > 0) { + for (Map<String, Object> company : partners.getIssueCompanyFields()) { + IssueCompany issueCompany = ConvertUtil.convertMapToClass(company, IssueCompany.class); + CompanyField companyField = ConvertUtil.convertMapToClass(company, CompanyField.class); + issueCompany.setCompanyField(companyField); + issueCompany.setIssue(issue); + + this.issueCompanyRepository.saveAndFlush(issueCompany); + } } - } - if (partners.getIssueIspFields() != null && partners.getIssueIspFields().size() > 0) { - for (Map<String, Object> isp : partners.getIssueIspFields()) { - IssueIsp issueIsp = ConvertUtil.convertMapToClass(isp, IssueIsp.class); - issueIsp.setIssue(issue); - this.issueIspRepository.saveAndFlush(issueIsp); + if (partners.getIssueIspFields() != null && partners.getIssueIspFields().size() > 0) { + for (Map<String, Object> isp : partners.getIssueIspFields()) { + IssueIsp issueIsp = ConvertUtil.convertMapToClass(isp, IssueIsp.class); + IspField ispField = ConvertUtil.convertMapToClass(isp, IspField.class); + issueIsp.setIspField(ispField); + issueIsp.setIssue(issue); + this.issueIspRepository.saveAndFlush(issueIsp); + } } - } - if (partners.getIssueHostingFields() != null && partners.getIssueHostingFields().size() > 0) { - for (Map<String, Object> hosting : partners.getIssueHostingFields()) { - IssueHosting issueHosting = ConvertUtil.convertMapToClass(hosting, IssueHosting.class); - issueHosting.setIssue(issue); - this.issueHostingRepository.saveAndFlush(issueHosting); + if (partners.getIssueHostingFields() != null && partners.getIssueHostingFields().size() > 0) { + for (Map<String, Object> hosting : partners.getIssueHostingFields()) { + IssueHosting issueHosting = ConvertUtil.convertMapToClass(hosting, IssueHosting.class); + HostingField hostingField = ConvertUtil.convertMapToClass(hosting, HostingField.class); + issueHosting.setHostingField(hostingField); + issueHosting.setIssue(issue); + this.issueHostingRepository.saveAndFlush(issueHosting); + } } } } @@ -3311,7 +3394,8 @@ // �씠�뒋�쓽 二쇱슂 �냽�꽦�쓣 map �뿉 ���옣�븯�뿬 �뿊�� import �뿉�꽌 吏��젙�븳 ���긽(�씠�뒋 �냽�꽦)�쓣 鍮좊Ⅴ寃� 李얠쓣 �닔 �엳寃� �븳�떎. private void IssueAttributeMapToList(IssueForm issueForm, Map<String, Priority> priorityMaps, Map<String, Severity> severityMaps, - Map<String, DepartmentVo> departmentMaps, Map<String, CustomField> customFieldMaps,Map<String, Long> issueTypeCustomFieldMaps) { + Map<String, DepartmentVo> departmentMaps, Map<String, CustomField> customFieldMaps,Map<String, Long> issueTypeCustomFieldMaps, + Map<String, CompanyField> companyFieldMaps, Map<String, IspField> ispFieldMaps, Map<String, HostingField> hostingFieldMaps) { Project project = this.projectService.getProject(issueForm.getProjectId()); @@ -3338,6 +3422,22 @@ for (CustomField customField : customFields) { customFieldMaps.put(customField.getName(), customField); } + + // �뾽泥� �젙蹂대�� 諛붾줈 李얠쓣 �닔 �엳寃� 以�鍮� + List<CompanyField> companyFields = this.companyFieldService.findAll(); + for (CompanyField companyField : companyFields) { + companyFieldMaps.put(companyField.getName(), companyField); + } + // ISP �젙蹂대�� 諛붾줈 李얠쓣 �닔 �엳寃� 以�鍮� + List<IspField> ispFields = this.ispFieldService.findAll(); + for (IspField ispField : ispFields) { + ispFieldMaps.put(ispField.getName(), ispField); + } + // �샇�뒪�똿 �젙蹂대�� 諛붾줈 李얠쓣 �닔 �엳寃� 以�鍮� + List<HostingField> hostingFields = this.hostingFieldService.findAll(); + for (HostingField hostingField : hostingFields) { + hostingFieldMaps.put(hostingField.getName(), hostingField); + } } /** @@ -3352,7 +3452,9 @@ // �뿊�� �븘�뱶�뿉 �엳�뒗 �젙蹂대�� �씠�뒋 form �쑝濡� �삷湲대떎. private IssueForm setIssueFormToExcelField(Row row, int rowIndex, Map<String, Priority> priorityMaps, Map<String, Severity> severityMaps, Map<String, DepartmentVo> departmentMaps, - Map<String, CustomField> customFieldMaps, List<String> headers) { + Map<String, CustomField> customFieldMaps, Map<String, CompanyField> companyFieldMaps, + Map<String, IspField> ispFieldMaps, Map<String, HostingField> hostingFieldMaps, + List<String> headers) { IssueForm issueForm = new IssueForm(); issueForm.setRegisterId(this.webAppUtil.getLoginId()); Project project = null; @@ -3401,6 +3503,24 @@ this.setIssueFormPeriod(cell, issueForm, false, rowIndex); } break; + case 6: + // �뾽泥대�� IssueForm �뿉 ���옣�븳�떎. + if (cellNullCheck(cell)) { + this.setIssueFormCompanyField(cell, companyFieldMaps, issueForm, rowIndex); + } + break; + case 7: + // ISP瑜� IssueForm �뿉 ���옣�븳�떎. + if (cellNullCheck(cell)) { + this.setIssueFormIspField(cell, ispFieldMaps, issueForm, rowIndex); + } + break; + case 8: + // �샇�뒪�똿�쓣 IssueForm �뿉 ���옣�븳�떎. + if (cellNullCheck(cell)) { + this.setIssueFormHostingField(cell, hostingFieldMaps, issueForm, rowIndex); + } + break; default: // 9踰� 遺��꽣�뒗 �궗�슜�옄 �젙�쓽 �븘�뱶. �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� IssueForm �뿉 ���옣�븳�떎. this.setIssueFormCustomFieldValue(cell, customFieldMaps, issueForm, headers.get(cellIndex), rowIndex); @@ -3410,6 +3530,45 @@ return issueForm; } + private void setIssueFormHostingField(Cell cell, Map<String, HostingField> hostingFieldMaps, IssueForm issueForm, int rowIndex) { + if (cell != null) { + Map<String, Object> issueHostingFields = new HashMap<>(); + HostingField hostingFieldMap = hostingFieldMaps.get(CommonUtil.convertExcelStringToCell(cell)); + if (hostingFieldMap == null) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_HOSTING_NOT_EXIST, rowIndex)); + } + ConvertUtil.copyProperties(hostingFieldMap, issueHostingFields); + issueForm.addIssueHostingField(issueHostingFields); + } + } + + private void setIssueFormIspField(Cell cell, Map<String, IspField> ispFieldMaps, IssueForm issueForm, int rowIndex) { + if (cell != null) { + Map<String, Object> issueIspFields = new HashMap<>(); + IspField ispFieldMap = ispFieldMaps.get(CommonUtil.convertExcelStringToCell(cell)); + if (ispFieldMap == null) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_ISP_NOT_EXIST, rowIndex)); + } + ConvertUtil.copyProperties(ispFieldMap, issueIspFields); + issueForm.addIssueIspField(issueIspFields); + } + } + + private void setIssueFormCompanyField(Cell cell, Map<String, CompanyField> companyFieldMaps, IssueForm issueForm, int rowIndex) { + if (cell != null) { + Map<String, Object> issueCompanyFields = new HashMap<>(); + CompanyField companyFieldMap = companyFieldMaps.get(CommonUtil.convertExcelStringToCell(cell)); + if (companyFieldMap == null) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_COMPANY_NOT_EXIST, rowIndex)); + } + ConvertUtil.copyProperties(companyFieldMap, issueCompanyFields); + issueForm.addissueCompanyField(issueCompanyFields); + } + } + // �씠�뒋 �젣紐⑹쓣 IssueForm �뿉 ���옣�븳�떎. private void setIssueFormTitle(Cell cell, IssueForm issueForm, int rowIndex) { if (cell == null) { 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 4829040..5f04771 100644 --- a/src/main/webapp/WEB-INF/i18n/code_ko_KR.properties +++ b/src/main/webapp/WEB-INF/i18n/code_ko_KR.properties @@ -26,6 +26,9 @@ common.projectKey=\uD504\uB85C\uC81D\uD2B8 \uD0A4 common.startDate=\uC2DC\uC791\uC77C common.endDate=\uC885\uB8CC\uC77C +common.company=\uC5C5\uCCB4\uBA85 +common.isp=ISP\uBA85 +common.hosting=\uD638\uC2A4\uD305\uBA85 common.registerDate=\uB4F1\uB85D\uC77C common.admin=\uAD00\uB9AC\uC790 common.teamMember=\uD300\uC6D0 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 fb92bbc..cb4c0a8 100644 --- a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties +++ b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties @@ -187,6 +187,7 @@ EXCEL_IMPORT_COMPANY_NAME_IS_NULL=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC5C5\uCCB4\uBA85\uC774 \uC785\uB825\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0} EXCEL_IMPORT_URL_IS_NULL=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C URL\uC774 \uC785\uB825\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0} +EXCEL_IMPORT_COMPANY_NOT_EXIST=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC785\uB825\uB41C \uC5C5\uCCB4\uBA85\uC73C\uB85C \uAC80\uC0C9\uB418\uB294 \uC5C5\uCCB4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0} EXCEL_IMPORT_ISP_NOT_EXIST=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC785\uB825\uB41C ISP\uBA85\uC73C\uB85C \uAC80\uC0C9\uB418\uB294 ISP\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0} EXCEL_IMPORT_HOSTING_NOT_EXIST=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC785\uB825\uB41C \uD638\uC2A4\uD305\uBA85\uC73C\uB85C \uAC80\uC0C9\uB418\uB294 \uD638\uC2A4\uD305\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0} EXCEL_IMPORT_PARENT_SECTOR_NOT_EQUAL=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC785\uB825\uB41C \uC5C5\uC885(\uC911\uBD84\uB958)\uC740 \uC5C5\uC885(\uB300\uBD84\uB958)\uC5D0 \uC18D\uD574\uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0} diff --git a/src/main/webapp/i18n/ko/global.json b/src/main/webapp/i18n/ko/global.json index 15468f3..054a277 100644 --- a/src/main/webapp/i18n/ko/global.json +++ b/src/main/webapp/i18n/ko/global.json @@ -771,9 +771,11 @@ "noDate": "湲곌컙 �뾾�쓬", "fullView": "�쟾泥대낫湲�", "comments": "�뙎湲�", + "mails": "硫붿씪", "record": "湲곕줉", "recordDown": "�븯�쐞�씠�뒋 湲곕줉", "downComments": "�븯�쐞�씠�뒋 �뙎湲�", + "downMails": "�븯�쐞�씠�뒋 硫붿씪", "noAssignee": "�떞�떦�옄媛� �뾾�뒿�땲�떎.", "noContent": "�궡�슜�씠 �뾾�뒿�땲�떎.", "noRecord": "湲곕줉�씠 �뾾�뒿�땲�떎.", diff --git a/src/main/webapp/scripts/app/issue/issueDetail.controller.js b/src/main/webapp/scripts/app/issue/issueDetail.controller.js index 3d12685..756ae3c 100644 --- a/src/main/webapp/scripts/app/issue/issueDetail.controller.js +++ b/src/main/webapp/scripts/app/issue/issueDetail.controller.js @@ -1248,19 +1248,46 @@ function makeActiveHistory() { $scope.vm.viewer.activeParentHistory = ""; $scope.vm.viewer.activeHistory = ""; + $scope.vm.viewer.activeParentMailHistory = ""; + var oriMailHistory = []; + + if ($scope.vm.viewer.issueHistoryVos != null && $scope.vm.viewer.issueHistoryVos.length > 0) { + for (var i=0; i<$scope.vm.viewer.issueHistoryVos.length; i++) { + if ($scope.vm.viewer.issueHistoryVos[i].issueHistoryType === "SEND") { + oriMailHistory.push($scope.vm.viewer.issueHistoryVos[i]); + } + } + $scope.vm.viewer.activeParentMailHistory = angular.copy(oriMailHistory); + } + if ($scope.vm.viewer.issueDownVos != null && $scope.vm.viewer.issueDownVos.length > 0) { $scope.vm.viewer.activeDownHistory = ""; //�븯�쐞�씠�뒋 �엳�뒪�넗由щ쭔 $scope.vm.viewer.downComment = ""; //�븯�쐞�씠�뒋 �뙎湲�留� + $scope.vm.viewer.activeDownMailHistory = ""; //�븯�쐞�씠�뒋 硫붿씪留� $scope.vm.viewer.activeDownAllHistory = ""; //�븯�쐞�씠�뒋 �엳�뒪�넗由�+�뙎湲� var downTitle = ""; var oriDownHistory = []; var oriDownCommentHistory = []; + var oriDownMailHistory = []; // �븯�쐞�씠�뒋 �엳�뒪�넗由� for (var i=0; i<$scope.vm.viewer.issueDownVos.length; i++){ oriDownHistory.push($scope.vm.viewer.issueDownVos[i].issueHistoryVos); oriDownCommentHistory.push($scope.vm.viewer.issueDownVos[i].issueCommentVos); + + // �븯�쐞�씠�뒋 硫붿씪 湲곕줉 + for (var j=0; j<$scope.vm.viewer.issueDownVos[i].issueHistoryVos.length; j++) { + if($scope.vm.viewer.issueDownVos[i].issueHistoryVos[j].issueHistoryType === "SEND") { + oriDownMailHistory.push($scope.vm.viewer.issueDownVos[i].issueHistoryVos[j]); + } + } } + // �븯�쐞�씠�뒋 硫붿씪留� ���옣 + $scope.vm.viewer.activeDownMailHistory = angular.copy(oriDownMailHistory); + $scope.vm.viewer.activeDownMailHistory.sort(function (a, b) { //�궡由쇱감�닚 + return a.registerDate > b.registerDate ? -1 : a.registerDate < b.registerDate ? 1 : 0; + }); + for (var i=0; i<oriDownHistory.length; i++){ if ($scope.vm.viewer.activeDownHistory === "") { $scope.vm.viewer.activeDownHistory = oriDownHistory[i]; diff --git a/src/main/webapp/views/companyField/companyFieldAdd.html b/src/main/webapp/views/companyField/companyFieldAdd.html index 4a930c8..c798aaf 100644 --- a/src/main/webapp/views/companyField/companyFieldAdd.html +++ b/src/main/webapp/views/companyField/companyFieldAdd.html @@ -21,13 +21,13 @@ class="form-control" autofocus kr-input - input-regex="[^a-zA-Z0-9 媛�-�옡�꽦-�뀕�뀖-�뀭\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" + input-regex="/[^?a-zA-Z0-9/]/" autocomplete="off" ng-model="vm.form.name" ng-maxlength="100" maxlength="100" required> - <small translate="companyField.enterSpecialCharacters">�뾽泥� �씠由꾩뿉�뒗 �듅�닔 臾몄옄瑜� �엯�젰 �븷�닔 �뾾�뒿�땲�떎.</small> + <!--<small translate="companyField.enterSpecialCharacters">�뾽泥� �씠由꾩뿉�뒗 �듅�닔 臾몄옄瑜� �엯�젰 �븷�닔 �뾾�뒿�땲�떎.</small>--> </div> <div class="form-group"> diff --git a/src/main/webapp/views/companyField/companyFieldModify.html b/src/main/webapp/views/companyField/companyFieldModify.html index 3396052..df293a3 100644 --- a/src/main/webapp/views/companyField/companyFieldModify.html +++ b/src/main/webapp/views/companyField/companyFieldModify.html @@ -21,13 +21,12 @@ class="form-control" autofocus kr-input - input-regex="[^a-zA-Z0-9 媛�-�옡�꽦-�뀕�뀖-�뀭\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" autocomplete="off" ng-model="vm.form.name" ng-maxlength="100" maxlength="100" required> - <small translate="companyField.enterSpecialCharacters">�뾽泥� �씠由꾩뿉�뒗 �듅�닔 臾몄옄瑜� �엯�젰 �븷�닔 �뾾�뒿�땲�떎.</small> + <!--<small translate="companyField.enterSpecialCharacters">�뾽泥� �씠由꾩뿉�뒗 �듅�닔 臾몄옄瑜� �엯�젰 �븷�닔 �뾾�뒿�땲�떎.</small>--> </div> <div class="form-group"> <label for="companyFieldAddForm10" class="issue-label"> diff --git a/src/main/webapp/views/hostingField/hostingFieldAdd.html b/src/main/webapp/views/hostingField/hostingFieldAdd.html index 96a0a2a..b5aa364 100644 --- a/src/main/webapp/views/hostingField/hostingFieldAdd.html +++ b/src/main/webapp/views/hostingField/hostingFieldAdd.html @@ -21,13 +21,12 @@ class="form-control" autofocus kr-input - input-regex="[^a-zA-Z0-9 媛�-�옡�꽦-�뀕�뀖-�뀭\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" autocomplete="off" ng-model="vm.form.name" ng-maxlength="100" maxlength="100" required> - <small translate="hostingField.enterSpecialCharacters">�샇�뒪�똿 �씠由꾩뿉�뒗 �듅�닔 臾몄옄瑜� �엯�젰 �븷�닔 �뾾�뒿�땲�떎.</small> + <!--<small translate="hostingField.enterSpecialCharacters">�샇�뒪�똿 �씠由꾩뿉�뒗 �듅�닔 臾몄옄瑜� �엯�젰 �븷�닔 �뾾�뒿�땲�떎.</small>--> </div> <div class="form-group"> <label for="hostingFieldAddForm10"> diff --git a/src/main/webapp/views/hostingField/hostingFieldModify.html b/src/main/webapp/views/hostingField/hostingFieldModify.html index 9b74b0b..44fc171 100644 --- a/src/main/webapp/views/hostingField/hostingFieldModify.html +++ b/src/main/webapp/views/hostingField/hostingFieldModify.html @@ -21,13 +21,12 @@ class="form-control" autofocus kr-input - input-regex="[^a-zA-Z0-9 媛�-�옡�꽦-�뀕�뀖-�뀭\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" autocomplete="off" ng-model="vm.form.name" ng-maxlength="100" maxlength="100" required> - <small translate="hostingField.enterSpecialCharacters">�샇�뒪�똿 �씠由꾩뿉�뒗 �듅�닔 臾몄옄瑜� �엯�젰 �븷�닔 �뾾�뒿�땲�떎.</small> + <!--<small translate="hostingField.enterSpecialCharacters">�샇�뒪�똿 �씠由꾩뿉�뒗 �듅�닔 臾몄옄瑜� �엯�젰 �븷�닔 �뾾�뒿�땲�떎.</small>--> </div> <div class="form-group"> <label for="hostingFieldModifyForm10"> diff --git a/src/main/webapp/views/ispField/ispFieldAdd.html b/src/main/webapp/views/ispField/ispFieldAdd.html index 509fc5e..3ab7d79 100644 --- a/src/main/webapp/views/ispField/ispFieldAdd.html +++ b/src/main/webapp/views/ispField/ispFieldAdd.html @@ -21,13 +21,12 @@ class="form-control" autofocus kr-input - input-regex="[^a-zA-Z0-9 媛�-�옡�꽦-�뀕�뀖-�뀭\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" autocomplete="off" ng-model="vm.form.name" ng-maxlength="100" maxlength="100" required> - <small translate="ispField.enterSpecialCharacters">ISP �씠由꾩뿉�뒗 �듅�닔 臾몄옄瑜� �엯�젰 �븷�닔 �뾾�뒿�땲�떎.</small> + <!--<small translate="ispField.enterSpecialCharacters">ISP �씠由꾩뿉�뒗 �듅�닔 臾몄옄瑜� �엯�젰 �븷�닔 �뾾�뒿�땲�떎.</small>--> </div> <div class="form-group"> <label for="ispFieldAddForm10"> diff --git a/src/main/webapp/views/ispField/ispFieldModify.html b/src/main/webapp/views/ispField/ispFieldModify.html index 5f9d2d5..f65b565 100644 --- a/src/main/webapp/views/ispField/ispFieldModify.html +++ b/src/main/webapp/views/ispField/ispFieldModify.html @@ -21,13 +21,12 @@ class="form-control" autofocus kr-input - input-regex="[^a-zA-Z0-9 媛�-�옡�꽦-�뀕�뀖-�뀭\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" autocomplete="off" ng-model="vm.form.name" ng-maxlength="100" maxlength="100" required> - <small translate="ispField.enterSpecialCharacters">ISP �씠由꾩뿉�뒗 �듅�닔 臾몄옄瑜� �엯�젰 �븷�닔 �뾾�뒿�땲�떎.</small> + <!--<small translate="ispField.enterSpecialCharacters">ISP �씠由꾩뿉�뒗 �듅�닔 臾몄옄瑜� �엯�젰 �븷�닔 �뾾�뒿�땲�떎.</small>--> </div> <div class="form-group"> <label for="ispFieldModifyForm10"> diff --git a/src/main/webapp/views/issue/issueDetail.html b/src/main/webapp/views/issue/issueDetail.html index 404e999..a24b54f 100644 --- a/src/main/webapp/views/issue/issueDetail.html +++ b/src/main/webapp/views/issue/issueDetail.html @@ -827,22 +827,30 @@ ng-click="fn.updateActiveHistory()"><span translate="common.fullView">�쟾泥대낫湲�</span></a> </li> - <!--<li class="nav-item cursor"> - <a class="nav-link" ng-class="{ 'active' : vm.activeTab == 'REPLY' }" - ng-click="vm.activeTab = 'REPLY'"><span translate="common.comments">�뙎湲�</span></a> - </li>--> <li class="nav-item cursor"> <a class="nav-link" ng-class="{ 'active' : vm.activeTab == 'RECODE' }" ng-click="vm.activeTab = 'RECODE'"><span translate="common.record">湲곕줉</span></a> </li> <li class="nav-item cursor"> + <a class="nav-link" ng-class="{ 'active' : vm.activeTab == 'MAIL' }" + ng-click="vm.activeTab = 'MAIL'"><span translate="common.mails">硫붿씪</span></a> + </li> + <li class="nav-item cursor"> + <a class="nav-link" ng-class="{ 'active' : vm.activeTab == 'REPLY' }" + ng-click="vm.activeTab = 'REPLY'"><span translate="common.comments">�뙎湲�</span></a> + </li> + <li class="nav-item cursor"> <a class="nav-link" ng-class="{ 'active' : vm.activeTab == 'RECODE_DOWN' }" ng-click="vm.activeTab = 'RECODE_DOWN'"><span translate="common.recordDown">�븯�쐞�씠�뒋 湲곕줉</span></a> </li> - <!--<li class="nav-item cursor"> + <li class="nav-item cursor"> + <a class="nav-link" ng-class="{ 'active' : vm.activeTab == 'MAIL_DOWN' }" + ng-click="vm.activeTab = 'MAIL_DOWN'"><span translate="common.downMails">�븯�쐞�씠�뒋 硫붿씪</span></a> + </li> + <li class="nav-item cursor"> <a class="nav-link" ng-class="{ 'active' : vm.activeTab == 'REPLY_DOWN' }" ng-click="vm.activeTab = 'REPLY_DOWN'"><span translate="common.downComments">�븯�쐞�씠�뒋 �뙎湲�</span></a> - </li>--> + </li> </ul> </div> @@ -983,6 +991,20 @@ </div> </div> </div> + + <!-- 硫붿씪 蹂닿린 --> + <div ng-if="vm.activeTab == 'MAIL'"> + <div class="no-cont2" ng-if="vm.viewer.activeParentMailHistory.length < 1" translate="common.noRecord"> + 湲곕줉�씠 �뾾�뒿�땲�떎. + </div> + + <div class="ae-item" ng-repeat="issueHistory in vm.viewer.activeParentMailHistory"> + <div class="aei-content" ng-if="$root.isDefined(issueHistory.issueHistoryType)"> + <div dom-append dom="issueHistory.description"></div> + </div> + </div> + </div> + <!-- �븯�쐞�씠�뒋 湲곕줉 蹂닿린 --> <div ng-if="vm.activeTab == 'RECODE_DOWN'"> <div class="no-cont2" ng-if="!$root.isDefined(vm.viewer.activeDownAllHistory) || vm.viewer.activeDownAllHistory.length < 1" translate="common.noRecord"> @@ -1027,28 +1049,39 @@ </div> </div> + <!-- �븯�쐞�씠�뒋 硫붿씪 蹂닿린 --> + <div ng-if="vm.activeTab == 'MAIL_DOWN'"> + <div class="no-cont2" ng-if="vm.viewer.activeDownMailHistory.length < 1" translate="common.noRecord"> + 湲곕줉�씠 �뾾�뒿�땲�떎. + </div> + + <div class="ae-item" ng-repeat="issueHistory in vm.viewer.activeDownMailHistory"> + <div class="aei-content" ng-if="$root.isDefined(issueHistory.issueHistoryType)"> + <div dom-append dom="issueHistory.description"></div> + </div> + </div> + </div> + <!-- �븯�쐞�씠�뒋 �뙎湲� 蹂닿린 --> <div ng-if="vm.activeTab == 'REPLY_DOWN'"> <div class="no-cont2" ng-if="$scope.vm.viewer.downComment.length < 1" translate="common.noComments"> �뙎湲��씠 �뾾�뒿�땲�떎. </div> - <div class="ae-item" ng-repeat="comment in vm.viewer.downComment"> - <div class="re-title"> - <div class='dot'> - �븯�쐞�씠�뒋: {{::comment.title}} - </div> + <div class="aei-content pb-3" ng-repeat="comment in vm.viewer.downComment"> + <div class='dot mt-10 mb-10'> + *�븯�쐞�씠�뒋: {{::comment.title}} </div> - <div class="aei-image"> + <div class="aei-image" style="position: absolute; top: 30%"> <div class="user-avatar-w"> - <img alt="image" ng-src="{{::comment.profile}}"> + <img style="margin-top: 15px" alt="image" ng-src="{{::comment.profile}}"> </div> </div> <div class="aei-content"> - <h6 class="aei-title"> + <h6 class="aei-title mt-1 ml-3per"> {{::comment.registerName}} </h6> - <div class="date-break"> + <div class="date-break mt-2" style="margin-left: 3.3%"> <span>{{::comment.registerDate}}</span> </div> <div class="aei-delete" @@ -1057,7 +1090,7 @@ <i class="os-icon os-icon-close"></i> </div> <div class="chat-messages"> - <div class="message"> + <div class="message" style="margin-left: 3.3%"> <div class="message-content"> <span class="issue-detail-word-break">{{::comment.description}}</span> </div> -- Gitblit v1.8.0