Update LogbookKinerjaService

Perbaikan service update kontrak kinerja tidak lagi membentuk detail indikator kualitas dokter setiap kali update. Penerapan validasi maksimal iki berdasarkan kelompok jabatan di dashboard pencatatan kinerja, penilaian kinerja individu, dan rekap penilaian kinerja individu
This commit is contained in:
Salman Manoe 2022-02-01 16:35:21 +07:00
parent 470aa31395
commit 5ef1f7c942

View File

@ -180,7 +180,7 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
@Override @Override
public LogbookKinerjaVO update(LogbookKinerjaVO vo) throws JpaSystemException, ServiceVOException { public LogbookKinerjaVO update(LogbookKinerjaVO vo) throws JpaSystemException, ServiceVOException {
List<Map<String, Object>> existedWorkingRecord = findUsedWorkingRecordByKontrak(vo.getNoRec()); DateFormat mf = new SimpleDateFormat("yyyy-MM");
LogbookKinerja logbookKinerjaLama = logbookKinerjaDao.findOne(vo.getNoRec()); LogbookKinerja logbookKinerjaLama = logbookKinerjaDao.findOne(vo.getNoRec());
@ -200,13 +200,56 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
} }
LogbookKinerjaVO resultVO = new LogbookKinerjaVO(); LogbookKinerjaVO resultVO = new LogbookKinerjaVO();
if (existedWorkingRecord.size() > 0 && !vo.getStatusVerifikasi() && vo.getStatusEnabled()) { if (vo.getIndikatorKinerja().getId().equals(Master.IndikatorKinerja.KEPATUHAN_PELAYANAN_MEDIS)) {
resultVO.setResponseMessage("Catatan kegiatan kinerja sudah diisi, tidak dapat batal verifikasi!"); List<LogbookKinerjaDokter> listLogbookDetail = new ArrayList<>();
} else if (existedWorkingRecord.size() > 0 && !vo.getStatusVerifikasi() && !vo.getStatusEnabled()) {
resultVO.setResponseMessage("Catatan kegiatan kinerja sudah diisi, tidak dapat hapus kontrak!"); List<IndikatorKinerjaDetail> listIndikatorDetail = indikatorKinerjaDetailDao
.findByIndikator(vo.getIndikatorKinerja().getId());
for (IndikatorKinerjaDetail indikatorDetail : listIndikatorDetail) {
LogbookKinerjaDokter logbookDetail = logbookKinerjaDokterDao.findOne(mf.format(vo.getBulan()),
vo.getPegawai().getId(), vo.getJabatan().getId(), indikatorDetail.getId());
listLogbookDetail.add(logbookDetail);
}
for (LogbookKinerjaDokter logbookDetail : listLogbookDetail) {
if (CommonUtil.isNotNullOrEmpty(logbookDetail)
&& CommonUtil.isNotNullOrEmpty(logbookDetail.getDetailCapaian()) && !vo.getStatusVerifikasi()
&& vo.getStatusEnabled()) {
resultVO.setResponseMessage(
"Catatan kegiatan kinerja sudah diverifikasi, tidak dapat batal verifikasi kontrak!");
break;
} else if (CommonUtil.isNotNullOrEmpty(logbookDetail)
&& CommonUtil.isNotNullOrEmpty(logbookDetail.getDetailCapaian()) && !vo.getStatusVerifikasi()
&& !vo.getStatusEnabled()) {
resultVO.setResponseMessage(
"Catatan kegiatan kinerja sudah diverifikasi, tidak dapat hapus kontrak!");
break;
}
}
if (CommonUtil.isNullOrEmpty(resultVO.getResponseMessage()) && !vo.getStatusEnabled()) {
/**
* Hapus komponen detail kontrak kinerja
*/
logbookKinerjaDokterDao.delete(listLogbookDetail);
LogbookKinerja resultModel = logbookKinerjaDao.save(logbookKinerjaBaru);
resultVO = logbookKinerjaConverter.transferModelToVO(resultModel, resultVO);
} else if (CommonUtil.isNullOrEmpty(resultVO.getResponseMessage())) {
LogbookKinerja resultModel = logbookKinerjaDao.save(logbookKinerjaBaru);
resultVO = logbookKinerjaConverter.transferModelToVO(resultModel, resultVO);
}
} else { } else {
LogbookKinerja resultModel = logbookKinerjaDao.save(logbookKinerjaBaru); List<Map<String, Object>> existedWorkingRecord = findUsedWorkingRecordByKontrak(vo.getNoRec());
resultVO = logbookKinerjaConverter.transferModelToVO(resultModel, resultVO); if (existedWorkingRecord.size() > 0 && !vo.getStatusVerifikasi() && vo.getStatusEnabled()) {
resultVO.setResponseMessage("Catatan kegiatan kinerja sudah diisi, tidak dapat batal verifikasi!");
} else if (existedWorkingRecord.size() > 0 && !vo.getStatusVerifikasi() && !vo.getStatusEnabled()) {
resultVO.setResponseMessage("Catatan kegiatan kinerja sudah diisi, tidak dapat hapus kontrak!");
} else {
LogbookKinerja resultModel = logbookKinerjaDao.save(logbookKinerjaBaru);
resultVO = logbookKinerjaConverter.transferModelToVO(resultModel, resultVO);
}
} }
return resultVO; return resultVO;
@ -424,6 +467,19 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
List<Map<String, Object>> data = logbookKinerjaDao.findKontrakKinerja(idPegawai, idJabatan, List<Map<String, Object>> data = logbookKinerjaDao.findKontrakKinerja(idPegawai, idJabatan,
mf.format(new Date(bulan))); mf.format(new Date(bulan)));
/**
* Mengecek status indikator yang memiliki komponen detail
*/
boolean isKualitasDokterExisted = false;
for (Map<String, Object> map : data) {
if (Master.IndikatorKinerja.KEPATUHAN_PELAYANAN_MEDIS.equals(map.get("indikatorId"))
&& Boolean.parseBoolean(map.get("isStatusVerifikasi").toString())) {
isKualitasDokterExisted = true;
break;
}
}
for (Map<String, Object> map : listMap) { for (Map<String, Object> map : listMap) {
if (!listIdIndikator.contains(map.get("indikatorId"))) { if (!listIdIndikator.contains(map.get("indikatorId"))) {
listIdIndikator.add(Integer.valueOf(map.get("indikatorId").toString())); listIdIndikator.add(Integer.valueOf(map.get("indikatorId").toString()));
@ -434,13 +490,18 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
if (map.get("indikatorId").equals(Master.IndikatorKinerja.PELAYANAN_MEDIS_JAM_KERJA)) { if (map.get("indikatorId").equals(Master.IndikatorKinerja.PELAYANAN_MEDIS_JAM_KERJA)) {
List<Double> target = targetSkorDokterDetailDao.findTargetByPegawai(idPegawai, List<Double> target = targetSkorDokterDetailDao.findTargetByPegawai(idPegawai,
mf.format(new Date(bulan)), yf.format(new Date(bulan))); mf.format(new Date(bulan)), yf.format(new Date(bulan)));
map.put("target", Math.floor(target.get(0))); if (CommonUtil.isNotNullOrEmpty(target)) {
} map.put("target", Math.floor(target.get(0)));
} else {
map.put("target", 0);
}
}
/** /**
* Komponen target kualitas indikator pelayanan medis * Komponen target kualitas indikator pelayanan medis
*/ */
if (map.get("indikatorId").equals(Master.IndikatorKinerja.KEPATUHAN_PELAYANAN_MEDIS)) { if (map.get("indikatorId").equals(Master.IndikatorKinerja.KEPATUHAN_PELAYANAN_MEDIS)
&& isKualitasDokterExisted) {
List<Map<String, Object>> detailIndikator2 = logbookKinerjaDokterDao.findDetailLogbookDokter( List<Map<String, Object>> detailIndikator2 = logbookKinerjaDokterDao.findDetailLogbookDokter(
mf.format(new Date(bulan)), idPegawai, idJabatan, mf.format(new Date(bulan)), idPegawai, idJabatan,
Integer.valueOf(map.get("indikatorId").toString())); Integer.valueOf(map.get("indikatorId").toString()));
@ -454,24 +515,31 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
Jabatan jb = jabatanDao.findOne(idJabatan); Jabatan jb = jabatanDao.findOne(idJabatan);
Pegawai pg = pegawaiDao.findOne(idPegawai); Pegawai pg = pegawaiDao.findOne(idPegawai);
LogbookKinerjaDokter lkd = new LogbookKinerjaDokter(); LogbookKinerjaDokter logbookKinerjaLama = logbookKinerjaDokterDao
lkd.setBulan(new Date(bulan)); .findOne(mf.format(new Date(bulan)), idPegawai, idJabatan, ikd.getId());
lkd.setDetailTarget(70.0); if (CommonUtil.isNullOrEmpty(logbookKinerjaLama)) {
lkd.setKdProfile((short) 0); LogbookKinerjaDokter logbookKinerjaBaru = new LogbookKinerjaDokter();
lkd.setStatusEnabled(true); logbookKinerjaBaru.setBulan(new Date(bulan));
lkd.setTglHitung(new Date()); logbookKinerjaBaru.setDetailTarget(70.0);
lkd.setIndikatorDetail(ikd); logbookKinerjaBaru.setKdProfile((short) 0);
lkd.setJabatan(jb); logbookKinerjaBaru.setStatusEnabled(true);
lkd.setPegawai(pg); logbookKinerjaBaru.setTglHitung(new Date());
lkds.add(lkd); logbookKinerjaBaru.setIndikatorDetail(ikd);
logbookKinerjaBaru.setJabatan(jb);
logbookKinerjaBaru.setPegawai(pg);
lkds.add(logbookKinerjaBaru);
}
} }
Iterable<LogbookKinerjaDokter> models = logbookKinerjaDokterDao.save(lkds);
if (CommonUtil.isNotNullOrEmpty(models)) { if (CommonUtil.isNotNullOrEmpty(lkds)) {
List<Map<String, Object>> detailIndikator3 = logbookKinerjaDokterDao Iterable<LogbookKinerjaDokter> models = logbookKinerjaDokterDao.save(lkds);
.findDetailLogbookDokter(mf.format(new Date(bulan)), idPegawai, idJabatan, if (CommonUtil.isNotNullOrEmpty(models)) {
Integer.valueOf(map.get("indikatorId").toString())); List<Map<String, Object>> detailIndikator3 = logbookKinerjaDokterDao
if (CommonUtil.isNotNullOrEmpty(detailIndikator3)) { .findDetailLogbookDokter(mf.format(new Date(bulan)), idPegawai, idJabatan,
map.put("detail", detailIndikator3); Integer.valueOf(map.get("indikatorId").toString()));
if (CommonUtil.isNotNullOrEmpty(detailIndikator3)) {
map.put("detail", detailIndikator3);
}
} }
} }
} }
@ -571,6 +639,7 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
List<Map<String, Object>> listJenisIndikator = new ArrayList<>(); List<Map<String, Object>> listJenisIndikator = new ArrayList<>();
DateFormat mf = new SimpleDateFormat("yyyy-MM"); DateFormat mf = new SimpleDateFormat("yyyy-MM");
DateFormat yf = new SimpleDateFormat("yyyy"); DateFormat yf = new SimpleDateFormat("yyyy");
Integer idKelompokJabatan = null;
double totAllPersen = 0.0; double totAllPersen = 0.0;
double nilaiJabatan = 0.0; double nilaiJabatan = 0.0;
double pir = 0.0; double pir = 0.0;
@ -609,6 +678,7 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
if (CommonUtil.isNotNullOrEmpty(rs) && rs.size() > 0) { if (CommonUtil.isNotNullOrEmpty(rs) && rs.size() > 0) {
nilaiJabatan = Double.valueOf(rs.get(0).get("nilaiJabatan").toString()); nilaiJabatan = Double.valueOf(rs.get(0).get("nilaiJabatan").toString());
idKelompokJabatan = Integer.parseInt(rs.get(0).get("kelompokJabatanId").toString());
} }
if (CommonUtil.isNotNullOrEmpty(anggaran)) { if (CommonUtil.isNotNullOrEmpty(anggaran)) {
pir = Double.valueOf(anggaran.get("pir").toString()); pir = Double.valueOf(anggaran.get("pir").toString());
@ -660,12 +730,6 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
/ Double.valueOf(detail.get("detailTarget").toString()); / Double.valueOf(detail.get("detailTarget").toString());
} }
} }
} else {
/**
* TODO inserted by salmanoe [Nov 19, 2021,
* 5:14:28 PM] : Detail Indikator Kinerja
* lainnya
*/
} }
} }
@ -740,16 +804,33 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
} }
Double iki = 0.0; Double iki = 0.0;
List<Map<String, Object>> acuanIndeks = tabelAcuanIndeksIKIDao.findAllAcuanIndeks(); if (Arrays.asList(Master.KelompokJabatan.DIR_MS).contains(idKelompokJabatan)) {
for (Map<String, Object> aiki : acuanIndeks) { List<Map<String, Object>> acuanIndeks = tabelAcuanIndeksIKIDao
if ((Double.valueOf(aiki.get("nilaiBawah").toString()) < Double.parseDouble(df.format(totAllPersen)) .findAllAcuanIndeks(Master.TabelAcuanIndeksIKI.MAX_DIR_MS);
&& Double.parseDouble(df.format(totAllPersen)) <= Double for (Map<String, Object> aiki : acuanIndeks) {
.valueOf(aiki.get("nilaiAtas").toString())) if ((Double.valueOf(aiki.get("nilaiBawah").toString()) < Double.parseDouble(df.format(totAllPersen))
|| (Double.parseDouble(df.format(totAllPersen)) > 1000 && Double.parseDouble(df.format(totAllPersen)) <= Double
&& Double.valueOf(aiki.get("nilaiAtas").toString()) == 1000)) { .valueOf(aiki.get("nilaiAtas").toString()))
iki = Double.valueOf(aiki.get("iki").toString()); || (Double.parseDouble(df.format(totAllPersen)) > 1000
&& Double.valueOf(aiki.get("nilaiAtas").toString()) == 1000)) {
iki = Double.valueOf(aiki.get("iki").toString());
break; break;
}
}
} else {
List<Map<String, Object>> acuanIndeks = tabelAcuanIndeksIKIDao
.findAllAcuanIndeks(Master.TabelAcuanIndeksIKI.MAX_OTHERS);
for (Map<String, Object> aiki : acuanIndeks) {
if ((Double.valueOf(aiki.get("nilaiBawah").toString()) < Double.parseDouble(df.format(totAllPersen))
&& Double.parseDouble(df.format(totAllPersen)) <= Double
.valueOf(aiki.get("nilaiAtas").toString()))
|| (Double.parseDouble(df.format(totAllPersen)) > 160
&& Double.valueOf(aiki.get("nilaiAtas").toString()) == 160)) {
iki = Double.valueOf(aiki.get("iki").toString());
break;
}
} }
} }
@ -2328,6 +2409,11 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
List<Map<String, Object>> data = logbookKinerjaDao.findPenilaianKinerja(idPegawai, idJabatan, List<Map<String, Object>> data = logbookKinerjaDao.findPenilaianKinerja(idPegawai, idJabatan,
mf.format(new Date(bulan))); mf.format(new Date(bulan)));
Integer idKelompokJabatan = null;
if (CommonUtil.isNotNullOrEmpty(data) && data.size() > 0) {
idKelompokJabatan = Integer.parseInt(data.get(0).get("kelompokJabatanId").toString());
}
double tBobot = 0.00; double tBobot = 0.00;
double tHasil = 0.00; double tHasil = 0.00;
for (Integer idJenisIndikator : Arrays.asList(Master.Remunerasi.JENIS_INDIKATOR)) { for (Integer idJenisIndikator : Arrays.asList(Master.Remunerasi.JENIS_INDIKATOR)) {
@ -2368,16 +2454,33 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
Double iki = 0.0; Double iki = 0.0;
String kriteria = "-"; String kriteria = "-";
List<Map<String, Object>> acuanIndeks = tabelAcuanIndeksIKIDao.findAllAcuanIndeks(); if (Arrays.asList(Master.KelompokJabatan.DIR_MS).contains(idKelompokJabatan)) {
for (Map<String, Object> aiki : acuanIndeks) { List<Map<String, Object>> acuanIndeks = tabelAcuanIndeksIKIDao
if ((Double.valueOf(aiki.get("nilaiBawah").toString()) < Double.parseDouble(df.format(tHasil)) .findAllAcuanIndeks(Master.TabelAcuanIndeksIKI.MAX_DIR_MS);
&& Double.parseDouble(df.format(tHasil)) <= Double.valueOf(aiki.get("nilaiAtas").toString())) for (Map<String, Object> aiki : acuanIndeks) {
|| (Double.parseDouble(df.format(tHasil)) > 1000 if ((Double.valueOf(aiki.get("nilaiBawah").toString()) < Double.parseDouble(df.format(tHasil))
&& Double.valueOf(aiki.get("nilaiAtas").toString()) == 1000)) { && Double.parseDouble(df.format(tHasil)) <= Double.valueOf(aiki.get("nilaiAtas").toString()))
iki = Double.valueOf(aiki.get("iki").toString()); || (Double.parseDouble(df.format(tHasil)) > 1000
kriteria = aiki.get("kriteria").toString(); && Double.valueOf(aiki.get("nilaiAtas").toString()) == 1000)) {
iki = Double.valueOf(aiki.get("iki").toString());
kriteria = aiki.get("kriteria").toString();
break; break;
}
}
} else {
List<Map<String, Object>> acuanIndeks = tabelAcuanIndeksIKIDao
.findAllAcuanIndeks(Master.TabelAcuanIndeksIKI.MAX_OTHERS);
for (Map<String, Object> aiki : acuanIndeks) {
if ((Double.valueOf(aiki.get("nilaiBawah").toString()) < Double.parseDouble(df.format(tHasil))
&& Double.parseDouble(df.format(tHasil)) <= Double.valueOf(aiki.get("nilaiAtas").toString()))
|| (Double.parseDouble(df.format(tHasil)) > 160
&& Double.valueOf(aiki.get("nilaiAtas").toString()) == 160)) {
iki = Double.valueOf(aiki.get("iki").toString());
kriteria = aiki.get("kriteria").toString();
break;
}
} }
} }
@ -2456,6 +2559,8 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
for (Integer idSK : listIdSubunitKerja) { for (Integer idSK : listIdSubunitKerja) {
for (Integer idP : listIdPegawai) { for (Integer idP : listIdPegawai) {
for (Integer idJ : listIdJabatan) { for (Integer idJ : listIdJabatan) {
Integer idKelompokJabatan = Integer.parseInt(data.get(0).get("kelompokJabatanId").toString());
Map<String, Object> rsMap = new HashMap<>(); Map<String, Object> rsMap = new HashMap<>();
double tHasil = 0.00; double tHasil = 0.00;
for (Integer idJI : Arrays.asList(Master.Remunerasi.JENIS_INDIKATOR)) { for (Integer idJI : Arrays.asList(Master.Remunerasi.JENIS_INDIKATOR)) {
@ -2503,19 +2608,44 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
&& CommonUtil.isNotNullOrEmpty(rsMap.get("nilaiJabatan"))) { && CommonUtil.isNotNullOrEmpty(rsMap.get("nilaiJabatan"))) {
Double iki = 0.00; Double iki = 0.00;
String kriteria = ""; String kriteria = "";
for (Map<String, Object> aiki : acuanIndeks) { if (Arrays.asList(Master.KelompokJabatan.DIR_MS).contains(idKelompokJabatan)) {
if ((Double.valueOf(aiki.get("nilaiBawah").toString()) < Double for (Map<String, Object> aiki : acuanIndeks) {
.parseDouble(df.format(tHasil)) if ((Double.valueOf(aiki.get("nilaiBawah").toString()) < Double
&& Double.parseDouble(df.format(tHasil)) <= Double .parseDouble(df.format(tHasil))
.valueOf(aiki.get("nilaiAtas").toString())) && Double.parseDouble(df.format(tHasil)) <= Double
|| (Double.parseDouble(df.format(tHasil)) > 1000 .valueOf(aiki.get("nilaiAtas").toString()))
&& Double.valueOf(aiki.get("nilaiAtas").toString()) == 1000)) { || (Double.parseDouble(df.format(tHasil)) > 1000
iki = Double.valueOf(aiki.get("iki").toString()); && Double.valueOf(aiki.get("nilaiAtas").toString()) == 1000)) {
kriteria = aiki.get("kriteria").toString(); iki = Double.valueOf(aiki.get("iki").toString());
kriteria = aiki.get("kriteria").toString();
break; break;
}
}
} else {
List<Map<String, Object>> acuanIndeksLain = new ArrayList<>();
for (Map<String, Object> aiki : acuanIndeks) {
if (Double.parseDouble(
aiki.get("iki").toString()) <= Master.TabelAcuanIndeksIKI.MAX_OTHERS) {
acuanIndeksLain.add(aiki);
}
}
for (Map<String, Object> aiki : acuanIndeksLain) {
if ((Double.valueOf(aiki.get("nilaiBawah").toString()) < Double
.parseDouble(df.format(tHasil))
&& Double.parseDouble(df.format(tHasil)) <= Double
.valueOf(aiki.get("nilaiAtas").toString()))
|| (Double.parseDouble(df.format(tHasil)) > 160
&& Double.valueOf(aiki.get("nilaiAtas").toString()) == 160)) {
iki = Double.valueOf(aiki.get("iki").toString());
kriteria = aiki.get("kriteria").toString();
break;
}
} }
} }
rsMap.put("totalHasil", Double.parseDouble(df.format(tHasil))); rsMap.put("totalHasil", Double.parseDouble(df.format(tHasil)));
rsMap.put("iki", iki); rsMap.put("iki", iki);
rsMap.put("kriteria", kriteria); rsMap.put("kriteria", kriteria);