diff --git a/src/main/java/com/dbnt/faisp/main/translator/TranslatorController.java b/src/main/java/com/dbnt/faisp/main/translator/TranslatorController.java index fa8b646f..a0308cb9 100644 --- a/src/main/java/com/dbnt/faisp/main/translator/TranslatorController.java +++ b/src/main/java/com/dbnt/faisp/main/translator/TranslatorController.java @@ -126,14 +126,16 @@ public class TranslatorController { } @GetMapping("/careerInsertTr") - public ModelAndView careerInsertTr(){ - return new ModelAndView("translator/careerTr"); + public ModelAndView careerInsertTr(TranslatorCrr translatorCrr){ + ModelAndView mav = new ModelAndView("translator/careerTr"); + mav.addObject("career", translatorCrr); + return mav; } - @PostMapping("/insertTranslatorCareer") + @PostMapping("/saveTranslatorCareer") @ResponseBody - public int insertTranslatorCareer(@RequestBody List translatorCrr){ - int trKey = translatorSevice.insertTranslatorCareer(translatorCrr); + public int saveTranslatorCareer(@RequestBody List translatorCrr){ + int trKey = translatorSevice.saveTranslatorCareer(translatorCrr); return trKey; } diff --git a/src/main/java/com/dbnt/faisp/main/translator/model/TranslatorCrr.java b/src/main/java/com/dbnt/faisp/main/translator/model/TranslatorCrr.java index a6e04e34..9af75146 100644 --- a/src/main/java/com/dbnt/faisp/main/translator/model/TranslatorCrr.java +++ b/src/main/java/com/dbnt/faisp/main/translator/model/TranslatorCrr.java @@ -40,21 +40,16 @@ public class TranslatorCrr extends BaseModel implements Serializable{ private LocalDate tcDt; @Column(name = "remark") private String remark; - - -@Override -public String toString() { - return "TranslatorCrr [careerSeq=" + careerSeq + ", translatorKey=" + translatorKey + ", hisGubun=" + hisGubun - + ", contents=" + contents + ", tcDt=" + tcDt + ", remark=" + remark + "]"; -} - -@Embeddable -@Data -@NoArgsConstructor -@AllArgsConstructor -public static class TranslatorCrrId implements Serializable { - private Integer careerSeq; - private Integer translatorKey; -} + @Transient + private String state; + + @Embeddable + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class TranslatorCrrId implements Serializable { + private Integer careerSeq; + private Integer translatorKey; + } } diff --git a/src/main/java/com/dbnt/faisp/main/translator/repository/TranslatorCareerRepository.java b/src/main/java/com/dbnt/faisp/main/translator/repository/TranslatorCareerRepository.java index d9faa671..b8b8d712 100644 --- a/src/main/java/com/dbnt/faisp/main/translator/repository/TranslatorCareerRepository.java +++ b/src/main/java/com/dbnt/faisp/main/translator/repository/TranslatorCareerRepository.java @@ -9,7 +9,7 @@ import java.util.Optional; public interface TranslatorCareerRepository extends JpaRepository { - TranslatorCrr findTopByTranslatorKeyOrderByCareerSeqDesc(Integer translatorKey); + Optional findTopByTranslatorKeyOrderByCareerSeqDesc(Integer translatorKey); Optional findByCareerSeqAndTranslatorKey(Integer careerSeq, Integer translatorKey); diff --git a/src/main/java/com/dbnt/faisp/main/translator/service/TranslatorService.java b/src/main/java/com/dbnt/faisp/main/translator/service/TranslatorService.java index 3b9a3e2a..9f8665ae 100644 --- a/src/main/java/com/dbnt/faisp/main/translator/service/TranslatorService.java +++ b/src/main/java/com/dbnt/faisp/main/translator/service/TranslatorService.java @@ -57,19 +57,27 @@ public class TranslatorService { return translatorCareerRepository.findByTranslatorKeyOrderByCareerSeqDesc(translatorKey); } - public int insertTranslatorCareer(List translatorCrr) { - int trKey = 0; - for(TranslatorCrr tCrr : translatorCrr ) { - TranslatorCrr dbCareer = translatorCareerRepository.findTopByTranslatorKeyOrderByCareerSeqDesc(tCrr.getTranslatorKey()); - if (dbCareer == null) { - tCrr.setCareerSeq(1); - translatorCareerRepository.save(tCrr); - } else { - tCrr.setCareerSeq(dbCareer.getCareerSeq()+ 1); - translatorCareerRepository.save(tCrr); - } - trKey = tCrr.getTranslatorKey(); + @Transactional + public int saveTranslatorCareer(List crrList) { + int trKey = crrList.get(0).getTranslatorKey(); + TranslatorCrr dbCareer = translatorCareerRepository.findTopByTranslatorKeyOrderByCareerSeqDesc(trKey).orElse(null); + int lastSeq = dbCareer==null?1:(dbCareer.getCareerSeq()+1); + List saveList = new ArrayList<>(); + List deleteList = new ArrayList<>(); + for(TranslatorCrr tCrr : crrList ) { + switch (tCrr.getState()){ + case "new": + tCrr.setCareerSeq(lastSeq++); + case "updated": + saveList.add(tCrr); + break; + case "deleted": + deleteList.add(tCrr); + break; + } } + translatorCareerRepository.deleteAll(deleteList); + translatorCareerRepository.saveAll(saveList); return trKey; } diff --git a/src/main/resources/static/js/translator/translator.js b/src/main/resources/static/js/translator/translator.js index de3ef24f..75e5cb81 100644 --- a/src/main/resources/static/js/translator/translator.js +++ b/src/main/resources/static/js/translator/translator.js @@ -24,6 +24,10 @@ $(document).on('click', '.infoTr', function (){ getTranslatorEditModal($(this).find(".trKey").val(), $(this).find(".verNo").val()); }) +$(document).on('change', '.careerInfo', function (){ + $(this).parents('tr').find('.state').val('updated') +}) + function getTranslatorEditModal(translatorKey, versionNo){ $.ajax({ @@ -34,6 +38,11 @@ function getTranslatorEditModal(translatorKey, versionNo){ success: function(html){ $("#translatorEditModalContent").empty().append(html) $("#translatorEditModal").modal('show'); + $(".tcDt").datepicker({ + format: "yyyy-mm-dd", + language: "ko", + autoclose: true + }); $("#viewAptDt").datepicker({ format: "yyyy-mm-dd", language: "ko", @@ -103,39 +112,6 @@ $(document).on('click', '#approvalTab', function (){ document.getElementById('approvalTab').classList.add('active'); }) -$(document).on('click', '#accessTab', function (){ - const trKey = (Number($('.tapTrKey').val())); - const verNo = (Number($('.tapVerNo').val())); - const url = '/translator/translatorEditModal'; - revisionHistory(trKey,verNo,url); - document.getElementById('approvalTab').classList.remove('active'); - document.getElementById('accessTab').classList.add('active'); -}) - -function revisionHistory(trKey,verNo,url){ - $.ajax({ - url: url, - data: { - translatorKey: trKey, - versionNo : verNo - }, - type: 'GET', - dataType:"html", - success: function(html){ - $("#translatorEditContent").empty().append(html) - $("#translatorEditModal").modal('show'); - $("#viewAptDt").datepicker({ - format: "yyyy-mm-dd", - language: "ko", - autoclose: true - }); - }, - error:function(e){ - ajaxErrorAction(e); - } - }); -} - $(document).on('change', '#trNny', function (){ if($(this).val() === "NNY001"){ $("#trVisa").attr("disabled", "disabled"); @@ -160,6 +136,7 @@ $(document).on('click', '.addCareerBtn', function (){ const hisGubun = $(this).attr('data-hisgubun') $.ajax({ url: '/translator/careerInsertTr', + data: {hisGubun: hisGubun}, type: 'GET', dataType:"html", success: function(html){ @@ -181,30 +158,49 @@ $(document).on('click', '.addCareerBtn', function (){ }); }) -$(document).on('click', '#crrInsertBtn', function (){ - -}) - $(document).on('click', '#crrSaveBtn', function (){ if(confirm("저장하시겠습니까?")){ contentFade("in"); + const translatorKey = $(this).attr('data-translatorkey'); + const careerList = []; + $.each($(".kcgCareerTr"), function (idx, tr){ + careerList.push({ + translatorKey: translatorKey, + careerSeq: $(tr).find(".careerSeq").val(), + hisGubun: $(tr).find(".hisGubun").val(), + tcDt: $(tr).find(".tcDt").val(), + contents: $(tr).find(".contents").val(), + remark: $(tr).find(".remark").val(), + state: $(tr).find(".state").val(), + }) + }) + $.each($(".otherCareerTr"), function (idx, tr){ + careerList.push({ + translatorKey: translatorKey, + careerSeq: $(tr).find(".careerSeq").val(), + hisGubun: $(tr).find(".hisGubun").val(), + tcDt: $(tr).find(".tcDt").val(), + contents: $(tr).find(".contents").val(), + remark: $(tr).find(".remark").val(), + state: $(tr).find(".state").val(), + }) + }) $.ajax({ type : 'POST', - data : JSON.stringify(trCarrerList), - url : "/translator/insertTranslatorCareer", + data : JSON.stringify(careerList), + url : "/translator/saveTranslatorCareer", contentType: 'application/json', beforeSend: function (xhr){ xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val()); }, success : function(data) { contentFade("out"); - alert("이력등록이 완료되었습니다."); - showCareer(data); - trCarrerList.length = 0; + alert("경력이 저장되었습니다."); + location.reload(); }, error : function(xhr, status) { contentFade("out"); - alert("이력등록을 실패하였습니다"); + alert("경력 저장을 실패하였습니다"); } }) } @@ -212,23 +208,18 @@ $(document).on('click', '#crrSaveBtn', function (){ $(document).on('click', '.deleteCareerBtn', function (){ if(confirm("삭제하시겠습니까?")){ - /*$.ajax({ - type : 'POST', - url : "/translator/deleteCareer", - data : JSON.stringify({careerSeq:crrSeq, - translatorKey:trKey}), - contentType: 'application/json', - beforeSend: function (xhr){ - xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val()); - }, - success : function(data) { - alert("삭제 처리되었습니다."); - showCareer(data); - }, - error : function(xhr, status) { - alert("삭제 처리에 실패하였습니다"); - } - })*/ + const tr = $(this).parents('tr') + const state = tr.find('.state'); + switch (state.val()){ + case "new": + tr.remove(); + break; + case "saved": + case "update": + state.val("deleted"); + tr.hide(); + break; + } } }) @@ -245,12 +236,12 @@ $(document).on('click', '#trDeleteBtn', function (){ xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val()); }, success : function() { - alert("해임되었습니다."); + alert("삭제되었습니다."); contentFade("out"); location.reload(); }, error : function(xhr, status) { - alert("해임을 실패하였습니다."); + alert("삭제를 실패하였습니다."); contentFade("out"); } }) diff --git a/src/main/resources/templates/translator/careerTr.html b/src/main/resources/templates/translator/careerTr.html index 4b8702cb..bd465787 100644 --- a/src/main/resources/templates/translator/careerTr.html +++ b/src/main/resources/templates/translator/careerTr.html @@ -2,7 +2,10 @@ - + + + + diff --git a/src/main/resources/templates/translator/translatorEditModal.html b/src/main/resources/templates/translator/translatorEditModal.html index 6cb8b1a8..a2fc2a82 100644 --- a/src/main/resources/templates/translator/translatorEditModal.html +++ b/src/main/resources/templates/translator/translatorEditModal.html @@ -141,7 +141,7 @@
- +
@@ -201,8 +201,8 @@
- - + + @@ -216,11 +216,14 @@ - + + + + - - - + + +
@@ -244,8 +247,8 @@ - - + + @@ -259,11 +262,14 @@ - + + + + - - - + + +
@@ -283,7 +289,7 @@
- +