diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/JatahCutiDanIzinServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/JatahCutiDanIzinServiceImpl.java index d91eb7c8..da7142b3 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/JatahCutiDanIzinServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/JatahCutiDanIzinServiceImpl.java @@ -12,6 +12,7 @@ import com.jasamedika.medifirst2000.util.DateUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.*; @@ -54,9 +55,7 @@ public class JatahCutiDanIzinServiceImpl implements JatahCutiDanIzinService { @Override public DataCutiDto getDataCuti(Integer pegawaiId, String year, Integer statusPegawaiId) { - DataCutiDto dto = calculateCutiIzin(pegawaiId, year, statusPegawaiId); - JatahCutiRequest jatahCutiRequest = transform(pegawaiId, year, statusPegawaiId); - return tangguhkanCutiBersama(dto, jatahCutiRequest); + return calculateCutiIzin(pegawaiId, year, statusPegawaiId); } private DataCutiDto calculateCutiIzin(Integer pegawaiId, String year, Integer statusPegawaiId) { @@ -175,7 +174,14 @@ public class JatahCutiDanIzinServiceImpl implements JatahCutiDanIzinService { // Hitung Absen di tanggal cuti bersama List listTglCutiBersama = mapKalenderToHariLiburDao.getTglCutiBersama(year); int countDataHabsen = 0; + Date awal2024 = new Date(1704042000000L); for (String tglStr : listTglCutiBersama) { + Date tglCheck; + try { + tglCheck = sdf.parse(tglStr); + } catch (ParseException e) { + tglCheck = new Date(); + } List dataHabsen = new ArrayList<>(); // cek shift malam String tglPrev = sdf.format(java.sql.Date.valueOf(LocalDate.parse(tglStr).minusDays(1))); @@ -208,7 +214,7 @@ public class JatahCutiDanIzinServiceImpl implements JatahCutiDanIzinService { } else { countDataHabsen += 1; } - } else { + } else if (tglCheck.before(awal2024)) { // cuti tahunan di tanggal cuti bersama List tglCutiTahunanDiTglCutiBersama = jatahCutiDanIzinDao .getCutiTahunanDiTglCutiBersama(CUTI_TAHUNAN, pegawaiId, tglStr); @@ -231,7 +237,6 @@ public class JatahCutiDanIzinServiceImpl implements JatahCutiDanIzinService { } } dataCutiB = countDataHabsen; - cutiIzinBuilder.dataCutiB(dataCutiB); // kondisikan cuti bersama yg sudah berlalu if (cutiTerpakaiN2 > dataCutiB2) { cutiTerpakaiB2 = dataCutiB2; @@ -243,6 +248,10 @@ public class JatahCutiDanIzinServiceImpl implements JatahCutiDanIzinService { } else { cutiTerpakaiB1 = cutiTerpakaiN1; } + JatahCutiRequest jatahCutiRequest = transform(pegawaiId, year, statusPegawaiId); + int jatahCutiBersamaDitangguhkan = tangguhkanCutiBersama(cutiTerpakaiB1, jatahCutiRequest); + dataCutiB += jatahCutiBersamaDitangguhkan; + cutiIzinBuilder.dataCutiB(dataCutiB); // Mendapatkan kondisi penangguhan saat ini cutiIzinBuilder.isTangguhkanB2(false); cutiIzinBuilder.isTangguhkanB1(false); @@ -552,7 +561,7 @@ public class JatahCutiDanIzinServiceImpl implements JatahCutiDanIzinService { return JatahCutiRequest.builder().pegawaiId(pegawaiId).year(year).statusPegawaiId(statusPegawaiId).build(); } - private DataCutiDto tangguhkanCutiBersama(DataCutiDto dto, JatahCutiRequest request) { + private int tangguhkanCutiBersama(Integer cutiBersamaTerpakaiTahunLalu, JatahCutiRequest request) { if (CommonUtil.isNullOrEmpty(request.getYear())) request.setYear(String.valueOf(DateUtil.getYear(new Date()))); Date tahunLalu = DateUtil.getInstanceCalendar(-1); @@ -562,24 +571,25 @@ public class JatahCutiDanIzinServiceImpl implements JatahCutiDanIzinService { .getPresensiByTahun(request.getPegawaiId(), LIBUR_CB, awalTahunLalu, akhirTahunLalu); List listPresensiCutiBersamaBisaDitangguhkan = listPresensiTahunLalu.stream() .filter(HariLiburTerpakai::getIsCutiBersamaDitangguhkan).collect(Collectors.toList()); - List listCutiTahunLalu = tanggalCutiDao.getCutiByTahun(request.getPegawaiId(), LIBUR_CB, - awalTahunLalu, akhirTahunLalu); if (listPresensiCutiBersamaBisaDitangguhkan.isEmpty()) - return dto; + return 0; + List listCutiDiCutiBersamaTahunLalu = tanggalCutiDao.getCutiByTahun(request.getPegawaiId(), + LIBUR_CB, awalTahunLalu, akhirTahunLalu); if (DateUtil.getYear(new Date()) == Integer.parseInt(request.getYear())) { List listCutiTahunLaluBelumDisetujui = tanggalCutiDao .notApprovedByPermohonan(request.getPegawaiId(), CUTI_TAHUNAN, awalTahunLalu, akhirTahunLalu); int presensiCutiBersama = listPresensiTahunLalu.size(); - int cutiDiCutiBersama = listCutiTahunLalu.size(); + int cutiDiCutiBersama = listCutiDiCutiBersamaTahunLalu.size(); + int sisaJatah = presensiCutiBersama + cutiDiCutiBersama - cutiBersamaTerpakaiTahunLalu; int jatahDitangguhkan = listPresensiCutiBersamaBisaDitangguhkan.size() - listCutiTahunLaluBelumDisetujui.size(); - int jatahDipakai = presensiCutiBersama + cutiDiCutiBersama - dto.getCutiTerpakaiB1(); - if (jatahDitangguhkan >= jatahDipakai) { - dto.setDataCutiB(dto.getDataCutiB() + jatahDitangguhkan); - dto.setSisaCutiB(dto.getDataCutiB() - dto.getCutiTerpakaiB()); + if (jatahDitangguhkan >= sisaJatah) { + if (jatahDitangguhkan < 0) + jatahDitangguhkan = 0; + return jatahDitangguhkan; } } - return dto; + return 0; } }