From c65caf2afb3297a9079f88e9c8738fee8862a3aa Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Mon, 13 Jan 2025 13:23:26 +0700 Subject: [PATCH] Update service jatah cuti dan izin Penerapana hitungan presensi dan komparasi data cuti tahun sebelumnya untuk validasi penangguhan cuti bersama ke tahun berjalan --- .../medifirst2000/constants/Master.java | 4 +++ .../dao/MapKalenderToHariLiburDao.java | 13 ++++++-- .../impl/JatahCutiDanIzinServiceImpl.java | 31 ++++++++++++++++--- .../medifirst2000/util/DateUtil.java | 6 ++++ 4 files changed, 47 insertions(+), 7 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java index 9f661fd5..436c2c5c 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java @@ -58,6 +58,10 @@ public final class Master { public static final Integer VISIT = 29; } + public static final class HariLibur { + public static final Integer LIBUR_CB = 8; + } + public static final class IndikatorKinerja { public static final Integer KEPATUHAN_PELAYANAN_MEDIS = 674; public static final Integer KETEPATAN_KEHADIRAN = 357; diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapKalenderToHariLiburDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapKalenderToHariLiburDao.java index 359a0813..b8031150 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapKalenderToHariLiburDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapKalenderToHariLiburDao.java @@ -41,8 +41,17 @@ public interface MapKalenderToHariLiburDao extends PagingAndSortingRepository getByTahun(@Param("tglAwal") Date tglAwal, @Param("tglAkhir") Date tglAkhir); + List getPresensiByTahun(@Param("idPegawai") Integer idPegawai, @Param("tglAwal") Date tglAwal, @Param("tglAkhir") Date tglAkhir); + + @Query("select mkl from MapKalenderToHariLibur mkl " + + "inner join mkl.tanggal kld " + + "where mkl.statusEnabled is true " + + "and kld.tanggal between :tglAwal and :tglAkhir " + + "and mkl.hariLiburId = :idHariLibur") + List getByTahun(@Param("idHariLibur") Integer idHariLibur, + @Param("tglAwal") Date tglAwal, @Param("tglAkhir") Date tglAkhir); } 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 0cd8851c..2edf231a 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 @@ -5,6 +5,7 @@ import com.jasamedika.medifirst2000.dao.*; import com.jasamedika.medifirst2000.dto.DataCutiDto; import com.jasamedika.medifirst2000.dto.JatahCutiRequest; import com.jasamedika.medifirst2000.dto.PresensiHariLibur; +import com.jasamedika.medifirst2000.entities.MapKalenderToHariLibur; import com.jasamedika.medifirst2000.service.JatahCutiDanIzinService; import com.jasamedika.medifirst2000.util.CommonUtil; import com.jasamedika.medifirst2000.util.DateUtil; @@ -14,6 +15,9 @@ import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.*; +import java.util.stream.Collectors; + +import static com.jasamedika.medifirst2000.constants.Master.HariLibur.LIBUR_CB; /** * @author Salman @@ -544,11 +548,28 @@ public class JatahCutiDanIzinServiceImpl implements JatahCutiDanIzinService { } private DataCutiDto tangguhkanCutiBersama(DataCutiDto dto, JatahCutiRequest request) { - DataCutiDto.DataCutiDtoBuilder builder = DataCutiDto.builder(); - Calendar calendar = Calendar.getInstance(); - calendar.add(Calendar.YEAR, -1); - List listPresensi = mapKalenderToHariLiburDao - .getByTahun(DateUtil.startYear(calendar.getTime()), DateUtil.endYear(calendar.getTime())); + Date previousYear = DateUtil.getInstanceCalendar(-1); + Date janFirstPrevYear = DateUtil.startYear(previousYear); + Date decEndPrevYear = DateUtil.endYear(previousYear); + List listPresensiPrevYear = mapKalenderToHariLiburDao.getPresensiByTahun(request.getPegawaiId(), + janFirstPrevYear, decEndPrevYear); + List listCBPrevYear = mapKalenderToHariLiburDao.getByTahun(LIBUR_CB, janFirstPrevYear, decEndPrevYear); + int countCBPrevYear = listCBPrevYear.size(); + List listCBPrevYearSuspended = listCBPrevYear.stream() + .filter(MapKalenderToHariLibur::getIsCutiBersamaDitangguhkan) + .collect(Collectors.toList()); + int countCBSuspended = listCBPrevYearSuspended.size(); + int countCBAllocated = 0; + for (PresensiHariLibur presensiPrevYear : listPresensiPrevYear) { + for (MapKalenderToHariLibur cbPrevYearSuspended : listCBPrevYearSuspended) { + if (presensiPrevYear.getTanggal().equals(cbPrevYearSuspended.getTanggal().getTanggal())) { + countCBAllocated++; + break; + } + } + } + if (dto.getCutiTerpakaiB1() < countCBPrevYear && countCBPrevYear - dto.getCutiTerpakaiB1() > countCBSuspended) + dto.setDataCutiB(countCBSuspended); return dto; } diff --git a/jasamedika-core/src/main/java/com/jasamedika/medifirst2000/util/DateUtil.java b/jasamedika-core/src/main/java/com/jasamedika/medifirst2000/util/DateUtil.java index 7e9b4f58..a4a80dee 100644 --- a/jasamedika-core/src/main/java/com/jasamedika/medifirst2000/util/DateUtil.java +++ b/jasamedika-core/src/main/java/com/jasamedika/medifirst2000/util/DateUtil.java @@ -237,6 +237,12 @@ public final class DateUtil implements Serializable { return now.get(Calendar.YEAR); } + public static Date getInstanceCalendar(int addYear) { + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.YEAR, addYear); + return calendar.getTime(); + } + public static final synchronized Integer getYearFromDate(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date);