Update service jatah cuti dan izin

Penerapana hitungan presensi dan komparasi data cuti tahun sebelumnya untuk validasi penangguhan cuti bersama ke tahun berjalan
This commit is contained in:
Salman Manoe 2025-01-13 13:23:26 +07:00
parent c72352c294
commit c65caf2afb
4 changed files with 47 additions and 7 deletions

View File

@ -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;

View File

@ -41,8 +41,17 @@ public interface MapKalenderToHariLiburDao extends PagingAndSortingRepository<Ma
@Query("select distinct new com.jasamedika.medifirst2000.dto.PresensiHariLibur("
+ "pg.id as idPegawai, pg.namaLengkap as namaLengkap, kld.tanggal as tanggal) "
+ "from Pegawai pg, Habsen hab, MapKalenderToHariLibur mkl " + "inner join mkl.tanggal kld "
+ "where pg.idFinger = hab.empl_code " + "and cast(hab.tr_date as date) = kld.tanggal "
+ "where pg.id = :idPegawai " +
"and pg.idFinger = hab.empl_code " + "and cast(hab.tr_date as date) = kld.tanggal "
+ "and mkl.isCutiBersamaDitangguhkan is true " + "and kld.tanggal between :tglAwal and :tglAkhir")
List<PresensiHariLibur> getByTahun(@Param("tglAwal") Date tglAwal, @Param("tglAkhir") Date tglAkhir);
List<PresensiHariLibur> 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<MapKalenderToHariLibur> getByTahun(@Param("idHariLibur") Integer idHariLibur,
@Param("tglAwal") Date tglAwal, @Param("tglAkhir") Date tglAkhir);
}

View File

@ -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<PresensiHariLibur> 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<PresensiHariLibur> listPresensiPrevYear = mapKalenderToHariLiburDao.getPresensiByTahun(request.getPegawaiId(),
janFirstPrevYear, decEndPrevYear);
List<MapKalenderToHariLibur> listCBPrevYear = mapKalenderToHariLiburDao.getByTahun(LIBUR_CB, janFirstPrevYear, decEndPrevYear);
int countCBPrevYear = listCBPrevYear.size();
List<MapKalenderToHariLibur> 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;
}

View File

@ -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);