From e5b8c39bf58d19c443a1cdb875fc33f7eb4abd86 Mon Sep 17 00:00:00 2001 From: adesyawal <52590145+adesyawal@users.noreply.github.com> Date: Tue, 16 Sep 2025 14:55:07 +0700 Subject: [PATCH] Pengerjaan Fitur Intervensi Cuti (SDM) --- .../dao/JatahCutiDanIzinDao.java | 14 +++-- .../impl/JatahCutiDanIzinServiceImpl.java | 48 ++++++++++++++++- .../impl/PermohonanStatusPegawaiImpl.java | 54 ++++++++++--------- .../medifirst2000/dto/DataCutiDto.java | 13 ++++- .../entities/JatahCutiDanIzin.java | 4 ++ .../medifirst2000/vo/JatahCutiDanIzinVO.java | 2 + .../controller/SdmController.java | 6 +++ 7 files changed, 110 insertions(+), 31 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/JatahCutiDanIzinDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/JatahCutiDanIzinDao.java index 93330594..5069770b 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/JatahCutiDanIzinDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/JatahCutiDanIzinDao.java @@ -17,15 +17,13 @@ public interface JatahCutiDanIzinDao extends JpaRepository komponenIndexId); + JatahCutiDanIzin getJatahCuti(@Param("tahun") String tahun, @Param("idPegawai") Integer idPegawai, @Param("komponenIndexId") List komponenIndexId); @Query("select coalesce(jatahCuti.value,0) " + "from JatahCutiDanIzin jatahCuti " + "left join jatahCuti.pegawai pegawai " + "left join jatahCuti.komponenIndex komponenIndex " @@ -33,6 +31,13 @@ public interface JatahCutiDanIzinDao extends JpaRepository listTglCutiBersama = mapKalenderToHariLiburDao.getTglCutiBersama(year); int countDataHabsen = 0; @@ -277,7 +295,15 @@ public class JatahCutiDanIzinServiceImpl implements JatahCutiDanIzinService { cutiIzinBuilder.isTangguhkanN(false); } if (dataCutiB >= cutiTerpakaiN) { - sisaCutiB = dataCutiB - cutiTerpakaiN; + // Intervensi Cuti Bersama + sisaCutiB = (dataCutiB - cutiTerpakaiN) + getDataIntervensiCutiB; + + if(sisaCutiB < 0){ + sisaCutiB = 0; + }else{ + sisaCutiB = sisaCutiB; + } + cutiTerpakaiB = cutiTerpakaiN; } else { sisaCutiB = 0; @@ -475,11 +501,29 @@ public class JatahCutiDanIzinServiceImpl implements JatahCutiDanIzinService { sisaCutiN1 = dataCutiN1 - jatahCutiTerpakaiN1; } sisaCutiN = dataCutiN - jatahCutiTerpakaiN; + // put all data sisa cuti + // Intervensi Cuti Tahun -2 + sisaCutiN2 = sisaCutiN2 + getDataIntervensiCutiN2; + if(sisaCutiN2 < 0){ + sisaCutiN2 = 0; + } cutiIzinBuilder.sisaCutiN2(sisaCutiN2); + + // Intervensi Cuti Tahun -1 + sisaCutiN1 = sisaCutiN1 + getDataIntervensiCutiN1; + if(sisaCutiN1 < 0){ + sisaCutiN1 = 0; + } cutiIzinBuilder.sisaCutiN1(sisaCutiN1); + + // Intervensi Cuti Tahun Sekarang + sisaCutiN = sisaCutiN + getDataIntervensiCutiN; + if(sisaCutiN < 0){ + sisaCutiN = 0; + } cutiIzinBuilder.sisaCutiN(sisaCutiN); - } + } if (statusPegawaiId == 24) { if (CommonUtil.isNotNullOrEmpty(jatahCuti)) cutiIzinBuilder.jatahCuti("-"); diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PermohonanStatusPegawaiImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PermohonanStatusPegawaiImpl.java index c496815e..690a251f 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PermohonanStatusPegawaiImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PermohonanStatusPegawaiImpl.java @@ -2025,6 +2025,16 @@ public class PermohonanStatusPegawaiImpl implements PermohonanStatusPegawaiServi public Map setJatahCutiPegawai(JatahCutiDanIzinVO vo) { Map result = new HashMap<>(); if (CommonUtil.isNotNullOrEmpty(vo)) { + KomponenIndexVO kompIndexVoB = new KomponenIndexVO(); + kompIndexVoB.setId(21); + KomponenIndexVO kompIndexVoT = new KomponenIndexVO(); + kompIndexVoT.setId(5); + // Cek Ketika Update Jatah Cuti Otomatis Apakah Mengirimkan Intervensi Cuti Apa Tidak + if (CommonUtil.isNullOrEmpty(vo.getIntervensiCuti())) { + JatahCutiDanIzin currentDataBaseJatahCuti = jatahCutiDanIzinDao.getJatahCuti(vo.getTahun().toString(), vo.getPegawai().getId(), kompIndexVoB.getId()); + vo.setIntervensiCuti(currentDataBaseJatahCuti.getIntervensiCuti()); + } + int todaysYear = Calendar.getInstance().get(Calendar.YEAR); int todaysYear1 = todaysYear - 1; @@ -2035,60 +2045,55 @@ public class PermohonanStatusPegawaiImpl implements PermohonanStatusPegawaiServi DataCutiDto cutiIzin = jatahCutiDanIzinService.getDataCuti(vo.getPegawai().getId(), String.valueOf(todaysYear), vo.getKomponenIndex().getId()); List> listDataCuti = getMaps(cutiIzin, todaysYear); - KomponenIndexVO kompIndexVoB = new KomponenIndexVO(); - kompIndexVoB.setId(21); - KomponenIndexVO kompIndexVoT = new KomponenIndexVO(); - kompIndexVoT.setId(5); - for (Map mapDataCuti : listDataCuti) { JatahCutiDanIzin jatahCutiDanIzin = new JatahCutiDanIzin(); jatahCutiDanIzin.setPegawai(pegawaiConverter.transferVOToModel(vo.getPegawai(), new Pegawai())); if (mapDataCuti.get("komponenIndex").equals(kompIndexVoB.getId())) { - jatahCutiDanIzin.setKomponenIndex( - komponenIndexConverter.transferVOToModel(kompIndexVoB, new KomponenIndex())); - JatahCutiDanIzin currentData = jatahCutiDanIzinDao.getJatahCuti(mapDataCuti.get("tahun").toString(), - vo.getPegawai().getId(), kompIndexVoB.getId()); + jatahCutiDanIzin.setKomponenIndex(komponenIndexConverter.transferVOToModel(kompIndexVoB, new KomponenIndex())); + JatahCutiDanIzin currentData = jatahCutiDanIzinDao.getJatahCuti(mapDataCuti.get("tahun").toString(), vo.getPegawai().getId(), kompIndexVoB.getId()); if (CommonUtil.isNotNullOrEmpty(currentData)) { jatahCutiDanIzin.setNoRec(currentData.getNoRec()); - if (vo.getKomponenIndex().getId().equals(mapDataCuti.get("komponenIndex")) - && vo.getTahun().equals(mapDataCuti.get("tahun").toString())) { + if (vo.getKomponenIndex().getId().equals(mapDataCuti.get("komponenIndex")) && vo.getTahun().equals(mapDataCuti.get("tahun").toString())) { jatahCutiDanIzin.setValue(vo.getValue()); - } else if (todaysYear == Integer.parseInt(vo.getTahun()) - && todaysYear1 == Integer.parseInt(mapDataCuti.get("tahun").toString())) { + jatahCutiDanIzin.setIntervensiCuti(vo.getIntervensiCuti()); + } else if (todaysYear == Integer.parseInt(vo.getTahun()) && todaysYear1 == Integer.parseInt(mapDataCuti.get("tahun").toString())) { jatahCutiDanIzin.setValue(cutiIzin.getDataCutiB1()); + jatahCutiDanIzin.setIntervensiCuti(cutiIzin.getIntervensiCutiB1()); } else { jatahCutiDanIzin.setValue(currentData.getValue()); + jatahCutiDanIzin.setIntervensiCuti(currentData.getIntervensiCuti()); } } else { - if (vo.getKomponenIndex().getId().equals(mapDataCuti.get("komponenIndex")) - && vo.getTahun().equals(mapDataCuti.get("tahun").toString())) { + if (vo.getKomponenIndex().getId().equals(mapDataCuti.get("komponenIndex")) && vo.getTahun().equals(mapDataCuti.get("tahun").toString())) { jatahCutiDanIzin.setValue(vo.getValue()); + jatahCutiDanIzin.setIntervensiCuti(vo.getIntervensiCuti()); } else { jatahCutiDanIzin.setValue(0); + jatahCutiDanIzin.setIntervensiCuti(0); } } } else { - jatahCutiDanIzin.setKomponenIndex( - komponenIndexConverter.transferVOToModel(kompIndexVoT, new KomponenIndex())); - JatahCutiDanIzin currentData = jatahCutiDanIzinDao.getJatahCuti(mapDataCuti.get("tahun").toString(), - vo.getPegawai().getId(), kompIndexVoT.getId()); + jatahCutiDanIzin.setKomponenIndex(komponenIndexConverter.transferVOToModel(kompIndexVoT, new KomponenIndex())); + JatahCutiDanIzin currentData = jatahCutiDanIzinDao.getJatahCuti(mapDataCuti.get("tahun").toString(), vo.getPegawai().getId(), kompIndexVoT.getId()); if (CommonUtil.isNotNullOrEmpty(currentData)) { jatahCutiDanIzin.setNoRec(currentData.getNoRec()); - if (vo.getKomponenIndex().getId().equals(mapDataCuti.get("komponenIndex")) - && vo.getTahun().equals(mapDataCuti.get("tahun").toString())) { + if (vo.getKomponenIndex().getId().equals(mapDataCuti.get("komponenIndex")) && vo.getTahun().equals(mapDataCuti.get("tahun").toString())) { jatahCutiDanIzin.setValue(vo.getValue()); + jatahCutiDanIzin.setIntervensiCuti(vo.getIntervensiCuti()); } else { jatahCutiDanIzin.setValue(currentData.getValue()); + jatahCutiDanIzin.setIntervensiCuti(currentData.getIntervensiCuti()); } } else { - if (vo.getKomponenIndex().getId().equals(mapDataCuti.get("komponenIndex")) - && vo.getTahun().equals(mapDataCuti.get("tahun").toString())) { + if (vo.getKomponenIndex().getId().equals(mapDataCuti.get("komponenIndex")) && vo.getTahun().equals(mapDataCuti.get("tahun").toString())) { jatahCutiDanIzin.setValue(vo.getValue()); + jatahCutiDanIzin.setIntervensiCuti(vo.getIntervensiCuti()); } else { jatahCutiDanIzin.setValue(0); + jatahCutiDanIzin.setIntervensiCuti(0); } } - } + } if (Integer.parseInt(vo.getTahun()) > todaysYear) { jatahCutiDanIzin.setKomponenIndex( komponenIndexConverter.transferVOToModel(vo.getKomponenIndex(), new KomponenIndex())); @@ -2097,6 +2102,7 @@ public class PermohonanStatusPegawaiImpl implements PermohonanStatusPegawaiServi if (CommonUtil.isNotNullOrEmpty(currentData)) { jatahCutiDanIzin.setNoRec(currentData.getNoRec()); } + jatahCutiDanIzin.setIntervensiCuti(vo.getIntervensiCuti()); jatahCutiDanIzin.setValue(vo.getValue()); jatahCutiDanIzin.setTahun(vo.getTahun()); jatahCutiDanIzin.setCutiTerpakai(0); diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/dto/DataCutiDto.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/dto/DataCutiDto.java index bd9670ac..10fcdc46 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/dto/DataCutiDto.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/dto/DataCutiDto.java @@ -62,7 +62,7 @@ public class DataCutiDto { private Integer dataCutiB1; private Integer dataCutiB2; - + private Integer dataCutiN; private Integer dataCutiN1; @@ -75,4 +75,15 @@ public class DataCutiDto { private Integer jatahIzin; + private Integer intervensiCutiB; + + private Integer intervensiCutiB1; + + private Integer intervensiCutiB2; + + private Integer intervensiCutiN; + + private Integer intervensiCutiN1; + + private Integer intervensiCutiN2; } diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/JatahCutiDanIzin.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/JatahCutiDanIzin.java index d07d20f1..5b5b67bb 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/JatahCutiDanIzin.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/JatahCutiDanIzin.java @@ -52,4 +52,8 @@ public class JatahCutiDanIzin extends BaseTransaction { @Caption(value = "Tangguhkan Sisa Cuti") private Boolean isTangguhkan; + @Column(name = "IntervensiCuti", insertable = true, updatable = true, nullable = true) + @Caption(value = "IntervensiCuti") + private Integer intervensiCuti; + } diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/JatahCutiDanIzinVO.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/JatahCutiDanIzinVO.java index 6057266a..3d4e5d30 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/JatahCutiDanIzinVO.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/JatahCutiDanIzinVO.java @@ -26,4 +26,6 @@ public class JatahCutiDanIzinVO extends BaseTransactionVO { private Boolean isTangguhkan; + private Integer intervensiCuti; + } diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java index e0b1f3b8..24c0cd8e 100644 --- a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java @@ -4236,6 +4236,12 @@ public class SdmController extends LocaleController { public ResponseEntity> saveJatahCutiDanIzinPegawai(@Valid @RequestBody JatahCutiDanIzinVO vo, HttpServletRequest request) { try { + /* + Routing Untuk Update Jatah Cuti Pegawai Baik Otomatis ataupun manual. + Berikut URL FE yang terdeteksi akses ke route ini : + 1. /app/#/DataCutiPegawai + 2. /app/#/PermohonanPerubahanStatusPegawai + */ Map result = servicePermohonanStatus.setJatahCutiPegawaiRecursive(vo); if (null != result) mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS,