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