From 5ef1f7c942a7efb60299ad6a23a3dbb810e0cc0f Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Tue, 1 Feb 2022 16:35:21 +0700 Subject: [PATCH] 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 --- .../impl/LogbookKinerjaServiceImpl.java | 252 +++++++++++++----- 1 file changed, 191 insertions(+), 61 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaServiceImpl.java index ad235866..ddddb2a2 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaServiceImpl.java @@ -180,7 +180,7 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb @Override public LogbookKinerjaVO update(LogbookKinerjaVO vo) throws JpaSystemException, ServiceVOException { - List> 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 listLogbookDetail = new ArrayList<>(); + + List 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> 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> data = logbookKinerjaDao.findKontrakKinerja(idPegawai, idJabatan, mf.format(new Date(bulan))); + /** + * Mengecek status indikator yang memiliki komponen detail + */ + boolean isKualitasDokterExisted = false; + for (Map map : data) { + if (Master.IndikatorKinerja.KEPATUHAN_PELAYANAN_MEDIS.equals(map.get("indikatorId")) + && Boolean.parseBoolean(map.get("isStatusVerifikasi").toString())) { + isKualitasDokterExisted = true; + + break; + } + } + for (Map 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 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> 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 models = logbookKinerjaDokterDao.save(lkds); - if (CommonUtil.isNotNullOrEmpty(models)) { - List> 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 models = logbookKinerjaDokterDao.save(lkds); + if (CommonUtil.isNotNullOrEmpty(models)) { + List> 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> 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> acuanIndeks = tabelAcuanIndeksIKIDao.findAllAcuanIndeks(); - for (Map 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> acuanIndeks = tabelAcuanIndeksIKIDao + .findAllAcuanIndeks(Master.TabelAcuanIndeksIKI.MAX_DIR_MS); + for (Map 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> acuanIndeks = tabelAcuanIndeksIKIDao + .findAllAcuanIndeks(Master.TabelAcuanIndeksIKI.MAX_OTHERS); + for (Map 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> 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> acuanIndeks = tabelAcuanIndeksIKIDao.findAllAcuanIndeks(); - for (Map 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> acuanIndeks = tabelAcuanIndeksIKIDao + .findAllAcuanIndeks(Master.TabelAcuanIndeksIKI.MAX_DIR_MS); + for (Map 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> acuanIndeks = tabelAcuanIndeksIKIDao + .findAllAcuanIndeks(Master.TabelAcuanIndeksIKI.MAX_OTHERS); + for (Map 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 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 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 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> acuanIndeksLain = new ArrayList<>(); + for (Map aiki : acuanIndeks) { + if (Double.parseDouble( + aiki.get("iki").toString()) <= Master.TabelAcuanIndeksIKI.MAX_OTHERS) { + acuanIndeksLain.add(aiki); + } + } + + for (Map 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);