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
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());
@ -200,13 +200,56 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
}
LogbookKinerjaVO resultVO = new LogbookKinerjaVO();
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!");
if (vo.getIndikatorKinerja().getId().equals(Master.IndikatorKinerja.KEPATUHAN_PELAYANAN_MEDIS)) {
List<LogbookKinerjaDokter> listLogbookDetail = new ArrayList<>();
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 {
LogbookKinerja resultModel = logbookKinerjaDao.save(logbookKinerjaBaru);
resultVO = logbookKinerjaConverter.transferModelToVO(resultModel, resultVO);
List<Map<String, Object>> existedWorkingRecord = findUsedWorkingRecordByKontrak(vo.getNoRec());
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;
@ -424,6 +467,19 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
List<Map<String, Object>> data = logbookKinerjaDao.findKontrakKinerja(idPegawai, idJabatan,
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) {
if (!listIdIndikator.contains(map.get("indikatorId"))) {
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)) {
List<Double> target = targetSkorDokterDetailDao.findTargetByPegawai(idPegawai,
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
*/
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(
mf.format(new Date(bulan)), idPegawai, idJabatan,
Integer.valueOf(map.get("indikatorId").toString()));
@ -454,24 +515,31 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
Jabatan jb = jabatanDao.findOne(idJabatan);
Pegawai pg = pegawaiDao.findOne(idPegawai);
LogbookKinerjaDokter lkd = new LogbookKinerjaDokter();
lkd.setBulan(new Date(bulan));
lkd.setDetailTarget(70.0);
lkd.setKdProfile((short) 0);
lkd.setStatusEnabled(true);
lkd.setTglHitung(new Date());
lkd.setIndikatorDetail(ikd);
lkd.setJabatan(jb);
lkd.setPegawai(pg);
lkds.add(lkd);
LogbookKinerjaDokter logbookKinerjaLama = logbookKinerjaDokterDao
.findOne(mf.format(new Date(bulan)), idPegawai, idJabatan, ikd.getId());
if (CommonUtil.isNullOrEmpty(logbookKinerjaLama)) {
LogbookKinerjaDokter logbookKinerjaBaru = new LogbookKinerjaDokter();
logbookKinerjaBaru.setBulan(new Date(bulan));
logbookKinerjaBaru.setDetailTarget(70.0);
logbookKinerjaBaru.setKdProfile((short) 0);
logbookKinerjaBaru.setStatusEnabled(true);
logbookKinerjaBaru.setTglHitung(new Date());
logbookKinerjaBaru.setIndikatorDetail(ikd);
logbookKinerjaBaru.setJabatan(jb);
logbookKinerjaBaru.setPegawai(pg);
lkds.add(logbookKinerjaBaru);
}
}
Iterable<LogbookKinerjaDokter> models = logbookKinerjaDokterDao.save(lkds);
if (CommonUtil.isNotNullOrEmpty(models)) {
List<Map<String, Object>> detailIndikator3 = logbookKinerjaDokterDao
.findDetailLogbookDokter(mf.format(new Date(bulan)), idPegawai, idJabatan,
Integer.valueOf(map.get("indikatorId").toString()));
if (CommonUtil.isNotNullOrEmpty(detailIndikator3)) {
map.put("detail", detailIndikator3);
if (CommonUtil.isNotNullOrEmpty(lkds)) {
Iterable<LogbookKinerjaDokter> models = logbookKinerjaDokterDao.save(lkds);
if (CommonUtil.isNotNullOrEmpty(models)) {
List<Map<String, Object>> detailIndikator3 = logbookKinerjaDokterDao
.findDetailLogbookDokter(mf.format(new Date(bulan)), idPegawai, idJabatan,
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<>();
DateFormat mf = new SimpleDateFormat("yyyy-MM");
DateFormat yf = new SimpleDateFormat("yyyy");
Integer idKelompokJabatan = null;
double totAllPersen = 0.0;
double nilaiJabatan = 0.0;
double pir = 0.0;
@ -609,6 +678,7 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
if (CommonUtil.isNotNullOrEmpty(rs) && rs.size() > 0) {
nilaiJabatan = Double.valueOf(rs.get(0).get("nilaiJabatan").toString());
idKelompokJabatan = Integer.parseInt(rs.get(0).get("kelompokJabatanId").toString());
}
if (CommonUtil.isNotNullOrEmpty(anggaran)) {
pir = Double.valueOf(anggaran.get("pir").toString());
@ -660,12 +730,6 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
/ 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;
List<Map<String, Object>> acuanIndeks = tabelAcuanIndeksIKIDao.findAllAcuanIndeks();
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)) > 1000
&& Double.valueOf(aiki.get("nilaiAtas").toString()) == 1000)) {
iki = Double.valueOf(aiki.get("iki").toString());
if (Arrays.asList(Master.KelompokJabatan.DIR_MS).contains(idKelompokJabatan)) {
List<Map<String, Object>> acuanIndeks = tabelAcuanIndeksIKIDao
.findAllAcuanIndeks(Master.TabelAcuanIndeksIKI.MAX_DIR_MS);
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)) > 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,
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 tHasil = 0.00;
for (Integer idJenisIndikator : Arrays.asList(Master.Remunerasi.JENIS_INDIKATOR)) {
@ -2368,16 +2454,33 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
Double iki = 0.0;
String kriteria = "-";
List<Map<String, Object>> acuanIndeks = tabelAcuanIndeksIKIDao.findAllAcuanIndeks();
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)) > 1000
&& Double.valueOf(aiki.get("nilaiAtas").toString()) == 1000)) {
iki = Double.valueOf(aiki.get("iki").toString());
kriteria = aiki.get("kriteria").toString();
if (Arrays.asList(Master.KelompokJabatan.DIR_MS).contains(idKelompokJabatan)) {
List<Map<String, Object>> acuanIndeks = tabelAcuanIndeksIKIDao
.findAllAcuanIndeks(Master.TabelAcuanIndeksIKI.MAX_DIR_MS);
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)) > 1000
&& 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 idP : listIdPegawai) {
for (Integer idJ : listIdJabatan) {
Integer idKelompokJabatan = Integer.parseInt(data.get(0).get("kelompokJabatanId").toString());
Map<String, Object> rsMap = new HashMap<>();
double tHasil = 0.00;
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"))) {
Double iki = 0.00;
String kriteria = "";
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)) > 1000
&& Double.valueOf(aiki.get("nilaiAtas").toString()) == 1000)) {
iki = Double.valueOf(aiki.get("iki").toString());
kriteria = aiki.get("kriteria").toString();
if (Arrays.asList(Master.KelompokJabatan.DIR_MS).contains(idKelompokJabatan)) {
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)) > 1000
&& 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>> 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("iki", iki);
rsMap.put("kriteria", kriteria);