Merge branch 'dev/pegawai/cuti' into dev/no-cron

This commit is contained in:
Salman Manoe 2025-01-22 13:24:55 +07:00
commit c45ee3f864

View File

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