Pengerjaan Fitur Intervensi Cuti (SDM)

This commit is contained in:
adesyawal 2025-09-16 14:55:07 +07:00
parent 7ea34b1ec6
commit e5b8c39bf5
7 changed files with 110 additions and 31 deletions

View File

@ -17,15 +17,13 @@ public interface JatahCutiDanIzinDao extends JpaRepository<JatahCutiDanIzin, Str
@Query("select jatahCuti " + "from JatahCutiDanIzin jatahCuti " + "left join jatahCuti.pegawai pegawai "
+ "left join jatahCuti.komponenIndex komponenIndex "
+ "where jatahCuti.tahun = :tahun and pegawai.id = :idPegawai " + "and komponenIndex.id = :komponenIndexId")
JatahCutiDanIzin getJatahCuti(@Param("tahun") String tahun, @Param("idPegawai") Integer idPegawai,
@Param("komponenIndexId") Integer komponenIndexId);
JatahCutiDanIzin getJatahCuti(@Param("tahun") String tahun, @Param("idPegawai") Integer idPegawai, @Param("komponenIndexId") Integer komponenIndexId);
@Query("select jatahCuti " + "from JatahCutiDanIzin jatahCuti " + "left join jatahCuti.pegawai pegawai "
+ "left join jatahCuti.komponenIndex komponenIndex "
+ "where jatahCuti.tahun = :tahun and pegawai.id = :idPegawai "
+ "and komponenIndex.id in (:komponenIndexId)")
JatahCutiDanIzin getJatahCuti(@Param("tahun") String tahun, @Param("idPegawai") Integer idPegawai,
@Param("komponenIndexId") List<Integer> komponenIndexId);
JatahCutiDanIzin getJatahCuti(@Param("tahun") String tahun, @Param("idPegawai") Integer idPegawai, @Param("komponenIndexId") List<Integer> 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<JatahCutiDanIzin, Str
Integer getDataCuti(@Param("tahun") String tahun, @Param("idPegawai") Integer idPegawai,
@Param("komponenIndexId") Integer komponenIndexId);
/* Penambahan Query Untuk Mendapatkan Data Intervensi Cuti 16/09/2025 */
@Query("select coalesce(jatahCuti.intervensiCuti, 0) " + "from JatahCutiDanIzin jatahCuti "
+ "left join jatahCuti.pegawai pegawai " + "left join jatahCuti.komponenIndex komponenIndex "
+ "where jatahCuti.tahun = :tahun and pegawai.id = :idPegawai " + "and komponenIndex.id = :komponenIndexId")
Integer getDataIntervensiCuti(@Param("tahun") String tahun, @Param("idPegawai") Integer idPegawai,
@Param("komponenIndexId") Integer komponenIndexId);
@Query("select jatahCuti.isTangguhkan " + "from JatahCutiDanIzin jatahCuti "
+ "left join jatahCuti.pegawai pegawai " + "left join jatahCuti.komponenIndex komponenIndex "
+ "where jatahCuti.tahun = :tahun and pegawai.id = :idPegawai " + "and komponenIndex.id = :komponenIndexId")
@ -54,6 +59,7 @@ public interface JatahCutiDanIzinDao extends JpaRepository<JatahCutiDanIzin, Str
@Query("select new map(" + "jatahCuti.noRec as noRec, " + "jatahCuti.komponenIndexId as komponenIndexId, "
+ "komponenIndex.komponenIndex as komponenIndex, " + "jatahCuti.tahun as tahun, "
+ "jatahCuti.intervensiCuti as intervensiCuti, "
+ "jatahCuti.value as value, " + "jatahCuti.sisaCuti as sisaCuti, "
+ "jatahCuti.cutiTerpakai as cutiTerpakai, " + "jatahCuti.isTangguhkan as isTangguhkan, "
+ "pegawai.id as idPegawai, " + "pegawai.namaLengkap as namaPegawai, " + "pegawai.nipPns as nipPegawai, "

View File

@ -147,6 +147,15 @@ public class JatahCutiDanIzinServiceImpl implements JatahCutiDanIzinService {
Integer dataCutiN1 = jatahCutiDanIzinDao.getDataCuti(yearN1, pegawaiId, Integer.valueOf(komponen)); // dataCutiTahunan_tahun_n-1
Integer dataCutiN = jatahCutiDanIzinDao.getDataCuti(year, pegawaiId, Integer.valueOf(komponen)); // dataCutiTahunan_tahun_n
Integer dataCutiN3 = jatahCutiDanIzinDao.getDataCuti(yearN3, pegawaiId, Integer.valueOf(komponen)); // dataCutiTahunan_tahun_n+1
/* Start Pengambilan Data Intervensi Cuti Untuk 3 Tahun Kebelakang */
Integer getDataIntervensiCutiN2 = jatahCutiDanIzinDao.getDataIntervensiCuti(yearN2, pegawaiId, Integer.valueOf(komponen));
Integer getDataIntervensiCutiN1 = jatahCutiDanIzinDao.getDataIntervensiCuti(yearN1, pegawaiId, Integer.valueOf(komponen));
Integer getDataIntervensiCutiN = jatahCutiDanIzinDao.getDataIntervensiCuti(year, pegawaiId, Integer.valueOf(komponen));
Integer getDataIntervensiCutiB2 = jatahCutiDanIzinDao.getDataIntervensiCuti(yearN2, pegawaiId, Integer.valueOf(komponenIndeksCutiBersama));
Integer getDataIntervensiCutiB1 = jatahCutiDanIzinDao.getDataIntervensiCuti(yearN1, pegawaiId, Integer.valueOf(komponenIndeksCutiBersama));
Integer getDataIntervensiCutiB = jatahCutiDanIzinDao.getDataIntervensiCuti(year, pegawaiId, Integer.valueOf(komponenIndeksCutiBersama));
/* End Pengambilan Data Intervensi Cuti Untuk 3 Tahun Kebelakang */
// Validasi existing data
if (CommonUtil.isNullOrEmpty(dataCutiB2))
dataCutiB2 = 0;
@ -171,6 +180,15 @@ public class JatahCutiDanIzinServiceImpl implements JatahCutiDanIzinService {
cutiIzinBuilder.dataCutiN(dataCutiN);
cutiIzinBuilder.dataCutiN3(dataCutiN3);
/* Start Set Data Intervensi Cuti Untuk 3 Tahun Kebelakang */
cutiIzinBuilder.intervensiCutiN(getDataIntervensiCutiN);
cutiIzinBuilder.intervensiCutiN1(getDataIntervensiCutiN1);
cutiIzinBuilder.intervensiCutiN2(getDataIntervensiCutiN2);
cutiIzinBuilder.intervensiCutiB(getDataIntervensiCutiB);
cutiIzinBuilder.intervensiCutiB1(getDataIntervensiCutiB1);
cutiIzinBuilder.intervensiCutiB2(getDataIntervensiCutiB2);
/* End Pengambilan Data Intervensi Cuti Untuk 3 Tahun Kebelakang */
// Hitung Absen di tanggal cuti bersama
List<String> 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("-");

View File

@ -2025,6 +2025,16 @@ public class PermohonanStatusPegawaiImpl implements PermohonanStatusPegawaiServi
public Map<String, Object> setJatahCutiPegawai(JatahCutiDanIzinVO vo) {
Map<String, Object> 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<Map<String, Object>> listDataCuti = getMaps(cutiIzin, todaysYear);
KomponenIndexVO kompIndexVoB = new KomponenIndexVO();
kompIndexVoB.setId(21);
KomponenIndexVO kompIndexVoT = new KomponenIndexVO();
kompIndexVoT.setId(5);
for (Map<String, Object> 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);

View File

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

View File

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

View File

@ -26,4 +26,6 @@ public class JatahCutiDanIzinVO extends BaseTransactionVO {
private Boolean isTangguhkan;
private Integer intervensiCuti;
}

View File

@ -4236,6 +4236,12 @@ public class SdmController extends LocaleController<AkunVO> {
public ResponseEntity<Map<String, Object>> 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<String, Object> result = servicePermohonanStatus.setJatahCutiPegawaiRecursive(vo);
if (null != result)
mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS,