diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java index a5d13936..048430bb 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java @@ -265,16 +265,19 @@ public class Master { public static final class Remunerasi { public static final Integer[] JENIS_INDIKATOR = { 1, 2, 3 }; - + public static final Double BOBOT_KUANTITAS = 40.0; public static final Double BOBOT_KUALITAS = 30.0; public static final Double BOBOT_PERILAKU = 30.0; + public static final Double IKI_STANDAR = 1.0; - - public static final Double PERSEN_SKOR_ASISTEN_SPESIALIS = 0.3; - public static final Double PERSEN_SKOR_EKSEKUTIF = 1.15; + public static final Double IKU = 1.0; + public static final Double PERSEN_P1 = 0.3; public static final Double PERSEN_P2 = 0.7; + + public static final Double PERSEN_SKOR_ASISTEN_SPESIALIS = 0.3; + public static final Double PERSEN_SKOR_EKSEKUTIF = 1.15; } public static final class Ruangan { diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/AnggaranRemunerasiDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/AnggaranRemunerasiDao.java index fff180a8..bd65d29f 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/AnggaranRemunerasiDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/AnggaranRemunerasiDao.java @@ -20,15 +20,30 @@ public interface AnggaranRemunerasiDao extends PagingAndSortingRepository> findTahunIni(); - @Query("select new Map(ar.anggaranRemunTahun as anggaranTahun," + "ar.anggaranRemunBulan as anggaranBulan," - + "ar.poinIndeksRupiah as pir," + "ar.gajiHonorarium as plafonGaji," + "ar.maxInsentif as plafonInsentif," - + "ar.tanggalPembaharuanData as tglPembaharuanData) " + "from AnggaranRemunerasi ar, " - + "MapPegawaiJabatanToUnitKerja mj " + "inner join ar.grade gr " + "inner join mj.grade nj " - + "where nj.gradeId = gr.id " + "and ar.statusEnabled is true " + "and mj.statusEnabled is true " + String strQryAnggaran = "select new Map(pg.id as pegawaiId,pg.namaLengkap as namaLengkap," + + "mj.jabatanId as jabatanId," + "ar.anggaranRemunTahun as anggaranTahun," + + "ar.anggaranRemunBulan as anggaranBulan," + "ar.poinIndeksRupiah as pir," + + "ar.gajiHonorarium as plafonGaji," + "ar.maxInsentif as plafonInsentif," + + "ar.tanggalPembaharuanData as tglPembaharuanData) " + + "from AnggaranRemunerasi ar, MapPegawaiJabatanToUnitKerja mj " + "inner join ar.grade gr " + + "inner join mj.pegawai pg " + "inner join mj.grade nj " + "where nj.gradeId = gr.id " + + "and ar.statusEnabled is true " + "and mj.statusEnabled is true " + "and pg.statusEnabled is true " + "and gr.statusEnabled is true " + "and nj.statusEnabled is true " - + "and to_char(ar.tahun,'yyyy') = to_char(now(),'yyyy') " + "and mj.pegawaiId = :pegawaiId " - + "and mj.jabatanId = :jabatanId " + "order by ar.tanggalPembaharuanData desc") - List> findTahunIniByPegawai(@Param("pegawaiId") Integer idPegawai, - @Param("jabatanId") Integer idJabatan); + + "and to_char(ar.tahun,'yyyy') = :tahun "; + + String cdtPegawai = "and mj.pegawaiId = :pegawaiId "; + + String cdtJabatan = "and mj.jabatanId = :jabatanId "; + + String sortDateUpdate = "order by ar.tanggalPembaharuanData desc"; + + String sortPegawai = "order by pg.namaLengkap asc, ar.tanggalPembaharuanData desc"; + + @Query(strQryAnggaran + cdtPegawai + cdtJabatan + sortDateUpdate) + List> findAnggaran(@Param("pegawaiId") Integer idPegawai, @Param("jabatanId") Integer idJabatan, + @Param("tahun") String tahun); + + @Query(strQryAnggaran + sortPegawai) + List> findAnggaran(@Param("tahun") String tahun); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/LogbookKinerjaDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/LogbookKinerjaDao.java index b9b55958..7900e81b 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/LogbookKinerjaDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/LogbookKinerjaDao.java @@ -119,4 +119,61 @@ public interface LogbookKinerjaDao extends PagingAndSortingRepository> findUsedKontrakByMapping(@Param("indikatorId") Integer idIndikator, @Param("jabatanId") Integer idJabatan); + @Query("select new Map(ikm.jenisIndikator as jenisIndikatorId," + + "(case when ikm.jenisIndikator = 1 then 'Kuantitas' " + "when ikm.jenisIndikator = 2 then 'Kualitas' " + + "when ikm.jenisIndikator = 3 then 'Perilaku' end) as jenisIndikator," + + "ikm.id as indikatorId,ikm.namaIndikator as namaIndikator," + "lkt.bobot as bobot," + + "lkt.target as target," + "lkt.capaian as realisasi) " + "from LogbookKinerja lkt " + + "inner join lkt.indikatorKinerja ikm " + + "where lkt.statusEnabled is true and lkt.statusVerifikasi is true " + + "and ikm.statusEnabled is true and ikm.statusVerifikasi is true " + "and lkt.pegawaiId = :pegawaiId " + + "and lkt.jabatanId = :jabatanId " + "and to_char(lkt.bulan,'yyyy-MM') = :bulan") + List> findPenilaianKinerja(@Param("pegawaiId") Integer idPegawai, + @Param("jabatanId") Integer idJabatan, @Param("bulan") String bulan); + + String strQryIKI = "select new Map(uk.id as unitKerjaId,uk.name as unitKerja," + + "sk.id as subunitKerjaId,sk.name as subunitKerja," + "pg.id as pegawaiId,pg.namaLengkap as namaLengkap," + + "jb.id as jabatanId,jb.namaJabatan as namaJabatan,mj.nilaiJabatan as nilaiJabatan," + + "ikm.jenisIndikator as jenisIndikatorId," + "(case when ikm.jenisIndikator = 1 then 'Kuantitas' " + + "when ikm.jenisIndikator = 2 then 'Kualitas' " + + "when ikm.jenisIndikator = 3 then 'Perilaku' end) as jenisIndikator," + + "ikm.id as indikatorId,ikm.namaIndikator as namaIndikator," + + "lkt.bobot as bobot,lkt.target as target,lkt.capaian as realisasi) " + + "from LogbookKinerja lkt, MapPegawaiJabatanToUnitKerja mj " + "inner join lkt.indikatorKinerja ikm " + + "inner join mj.pegawai pg " + "inner join mj.jabatan jb " + "inner join mj.unitKerjaPegawai uk " + + "inner join mj.subUnitKerjaPegawai sk " + "where lkt.pegawaiId = mj.pegawaiId " + + "and lkt.pegawaiId = pg.id " + "and lkt.jabatanId = mj.jabatanId " + "and lkt.jabatanId = jb.id " + + "and uk.id = sk.unitKerjaId " + "and lkt.statusEnabled is true and lkt.statusVerifikasi is true " + + "and mj.statusEnabled is true " + "and ikm.statusEnabled is true and ikm.statusVerifikasi is true " + + "and pg.statusEnabled is true " + "and jb.statusEnabled is true " + "and uk.statusEnabled is true " + + "and sk.statusEnabled is true " + "and to_char(lkt.bulan,'yyyy-MM') = :bulan "; + + String cdtUnitKerja = "and uk.id = :unitKerjaId "; + + String cdtSubunitKerja = "and sk.id = :subunitKerjaId "; + + String cdtPegawai = "and pg.id = :pegawaiId "; + + String sortIKI = "order by uk.name, sk.name, pg.namaLengkap"; + + @Query(strQryIKI + sortIKI) + List> findPenilaianKinerja(@Param("bulan") String bulan); + + @Query(strQryIKI + cdtUnitKerja + sortIKI) + List> findPenilaianKinerjaUnitKerja(@Param("bulan") String bulan, + @Param("unitKerjaId") Integer idUnitKerja); + + @Query(strQryIKI + cdtUnitKerja + cdtSubunitKerja + sortIKI) + List> findPenilaianKinerjaSubunitKerja(@Param("bulan") String bulan, + @Param("unitKerjaId") Integer idUnitKerja, @Param("subunitKerjaId") Integer idSubunitKerja); + + @Query(strQryIKI + cdtPegawai + sortIKI) + List> findPenilaianKinerjaPegawai(@Param("bulan") String bulan, + @Param("pegawaiId") Integer idPegawai); + + @Query(strQryIKI + cdtUnitKerja + cdtSubunitKerja + cdtPegawai + sortIKI) + List> findPenilaianKinerjaPegawai(@Param("bulan") String bulan, + @Param("unitKerjaId") Integer idUnitKerja, @Param("subunitKerjaId") Integer idSubunitKerja, + @Param("pegawaiId") Integer idPegawai); + } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/TabelAcuanIndeksIKIDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/TabelAcuanIndeksIKIDao.java index e0767756..0ad6865a 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/TabelAcuanIndeksIKIDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/TabelAcuanIndeksIKIDao.java @@ -1,16 +1,29 @@ package com.jasamedika.medifirst2000.dao; import java.util.List; +import java.util.Map; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; import com.jasamedika.medifirst2000.entities.TabelAcuanIndeksIKI; -public interface TabelAcuanIndeksIKIDao extends PagingAndSortingRepository{ - - @Query("select tabelAcuanIndeksIKI "+ - "from TabelAcuanIndeksIKI tabelAcuanIndeksIKI ") +@Repository("AcuanIndeksIKIDao") +public interface TabelAcuanIndeksIKIDao extends PagingAndSortingRepository { + + @Query("select tabelAcuanIndeksIKI " + "from TabelAcuanIndeksIKI tabelAcuanIndeksIKI ") public List findAllAcuan(); + @Query("select aiki.indeks from TabelAcuanIndeksIKI aiki " + "where aiki.statusEnabled is true " + + "and ((:hasil between aiki.nilaiBawah and aiki.nilaiAtas) " + + "or (:hasil > 1000 and aiki.nilaiAtas = 1000))") + public Double findIKI(@Param("hasil") Double hasil); + + @Query("select new Map(aiki.nilaiBawah as nilaiBawah,aiki.nilaiAtas as nilaiAtas," + + "aiki.indeks as iki,aiki.kriteria as kriteria) " + "from TabelAcuanIndeksIKI aiki " + + "where aiki.statusEnabled is true " + "order by aiki.indeks") + public List> findAllAcuanIndeks(); + } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/LogbookKinerjaService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/LogbookKinerjaService.java index 13296915..20f50d8b 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/LogbookKinerjaService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/LogbookKinerjaService.java @@ -38,4 +38,10 @@ public interface LogbookKinerjaService extends BaseVoService> findDetailPasienLogbook(Integer idPegawai, Integer idIndikator, Integer idProduk, String tglPelayanan, Integer idJenisPetugas, Double skor); + public Map findPenilaianKinerja(Integer idPegawai, Integer idJabatan, Long bulan) + throws JpaSystemException; + + public List> findRekapPenilaianKinerja(Long bulan, Integer idUnitKerja, Integer idSubunitKerja, + Integer idPegawai) throws JpaSystemException; + } 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 028e77c7..7f0d96d0 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 @@ -30,6 +30,7 @@ import com.jasamedika.medifirst2000.dao.LogbookKinerjaDetailDao; import com.jasamedika.medifirst2000.dao.LogbookKinerjaDokterDao; import com.jasamedika.medifirst2000.dao.PegawaiDao; import com.jasamedika.medifirst2000.dao.SkoringTindakanMedisDao; +import com.jasamedika.medifirst2000.dao.TabelAcuanIndeksIKIDao; import com.jasamedika.medifirst2000.entities.IndikatorKinerja; import com.jasamedika.medifirst2000.entities.Jabatan; import com.jasamedika.medifirst2000.entities.LogbookKinerja; @@ -89,6 +90,9 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb @Autowired private IndikatorKinerjaDetailDao indikatorKinerjaDetailDao; + @Autowired + private TabelAcuanIndeksIKIDao tabelAcuanIndeksIKIDao; + @Override public LogbookKinerjaVO add(LogbookKinerjaVO vo) throws JpaSystemException, ServiceVOException { Pegawai pegawai = pegawaiConverter.transferVOToModel(vo.getPegawai(), new Pegawai()); @@ -348,11 +352,11 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb } if (idJenisIndikator.equals(1)) { - result.put("Kuantitas", resByJenisIndikator); + result.put("kuantitas", resByJenisIndikator); } else if (idJenisIndikator.equals(2)) { - result.put("Kualitas", resByJenisIndikator); + result.put("kualitas", resByJenisIndikator); } else if (idJenisIndikator.equals(3)) { - result.put("Perilaku", resByJenisIndikator); + result.put("perilaku", resByJenisIndikator); } } @@ -366,10 +370,11 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb return result; } - public Map findAnggaranRemunerasi(Integer idPegawai, Integer idJabatan) throws JpaSystemException { + public Map findAnggaranRemunerasi(Integer idPegawai, Integer idJabatan, String tahun) + throws JpaSystemException { Map result = new HashMap<>(); - List> data = anggaranRemunerasiDao.findTahunIniByPegawai(idPegawai, idJabatan); + List> data = anggaranRemunerasiDao.findAnggaran(idPegawai, idJabatan, tahun); if (CommonUtil.isNotNullOrEmpty(data) && data.size() > 0) { result = data.get(0); } @@ -382,7 +387,8 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb throws JpaSystemException { Map result = new HashMap<>(); List> listJenisIndikator = new ArrayList<>(); - DateFormat df = new SimpleDateFormat("yyyy-MM"); + DateFormat mf = new SimpleDateFormat("yyyy-MM"); + DateFormat yf = new SimpleDateFormat("yyyy"); double totAllPersen = 0.0; double nilaiJabatan = 0.0; double pir = 0.0; @@ -398,8 +404,8 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb kursINA.setDecimalFormatSymbols(formatRp); List> rs = logbookKinerjaDao.findLogbookKinerja(idPegawai, idJabatan, - df.format(new Date(bulan))); - Map anggaran = findAnggaranRemunerasi(idPegawai, idJabatan); + mf.format(new Date(bulan))); + Map anggaran = findAnggaranRemunerasi(idPegawai, idJabatan, yf.format(new Date(bulan))); if (CommonUtil.isNotNullOrEmpty(rs) && rs.size() > 0) { nilaiJabatan = Double.valueOf(rs.get(0).get("nilaiJabatan").toString()); @@ -466,25 +472,32 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb listJenisIndikator.add(jenisIndikator); } + Double iki = tabelAcuanIndeksIKIDao.findIKI(totAllPersen); + if (CommonUtil.isNullOrEmpty(iki)) { + iki = 0.0; + } + + double targetRupiahP1 = nilaiJabatan * Master.Remunerasi.IKI_STANDAR * pir * Master.Remunerasi.PERSEN_P1; + double targetRupiahP2 = nilaiJabatan * Master.Remunerasi.IKU * Master.Remunerasi.IKI_STANDAR * pir + * Master.Remunerasi.PERSEN_P2; + + double capaianRupiahP1 = nilaiJabatan * iki * pir * Master.Remunerasi.PERSEN_P1; + double capaianRupiahP2 = nilaiJabatan * Master.Remunerasi.IKU * iki * pir * Master.Remunerasi.PERSEN_P2; + result.put("listJenisIndikator", listJenisIndikator); - result.put("rupiahCapaianP1", totAllPersen / 100.0 * nilaiJabatan * Master.Remunerasi.IKI_STANDAR * pir - * Master.Remunerasi.PERSEN_P1); - result.put("rupiahCapaianP1Format", kursINA.format( - totAllPersen / 100.0 * nilaiJabatan * Master.Remunerasi.IKI_STANDAR * pir * Master.Remunerasi.PERSEN_P1) - .toString()); + result.put("plafonP1", kursINA.format(plafonGaji).toString()); - result.put("rupiahCapaianP2", totAllPersen / 100.0 * nilaiJabatan * Master.Remunerasi.IKI_STANDAR * pir - * Master.Remunerasi.PERSEN_P2); - result.put("rupiahCapaianP2Format", kursINA.format( - totAllPersen / 100.0 * nilaiJabatan * Master.Remunerasi.IKI_STANDAR * pir * Master.Remunerasi.PERSEN_P2) - .toString()); + result.put("rupiahTargetP1", targetRupiahP1); + result.put("rupiahTargetFormatP1", kursINA.format(targetRupiahP1).toString()); + result.put("rupiahCapaianP1", capaianRupiahP1); + result.put("rupiahCapaianP1Format", kursINA.format(capaianRupiahP1).toString()); + result.put("plafonP2", kursINA.format(plafonInsentif).toString()); - result.put("rupiahTargetP1", nilaiJabatan * Master.Remunerasi.IKI_STANDAR * pir * Master.Remunerasi.PERSEN_P1); - result.put("rupiahTargetFormatP1", kursINA - .format(nilaiJabatan * Master.Remunerasi.IKI_STANDAR * pir * Master.Remunerasi.PERSEN_P1).toString()); - result.put("rupiahTargetP2", nilaiJabatan * Master.Remunerasi.IKI_STANDAR * pir * Master.Remunerasi.PERSEN_P2); - result.put("rupiahTargetFormatP2", kursINA - .format(nilaiJabatan * Master.Remunerasi.IKI_STANDAR * pir * Master.Remunerasi.PERSEN_P2).toString()); + result.put("rupiahTargetP2", targetRupiahP2); + result.put("rupiahTargetFormatP2", kursINA.format(targetRupiahP2).toString()); + result.put("rupiahCapaianP2", capaianRupiahP2); + result.put("rupiahCapaianP2Format", kursINA.format(capaianRupiahP2).toString()); + result.put("persenCapaian", totAllPersen); result.put("persenCapaianDibulatkan", new BigDecimal(Double.valueOf(totAllPersen)).setScale(2, RoundingMode.HALF_UP)); @@ -1098,4 +1111,228 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb return result; } + @Override + public Map findPenilaianKinerja(Integer idPegawai, Integer idJabatan, Long bulan) + throws JpaSystemException { + Map result = new HashMap<>(); + + DateFormat mf = new SimpleDateFormat("yyyy-MM"); + + DecimalFormat df = new DecimalFormat("0.00"); + df.setRoundingMode(RoundingMode.HALF_UP); + + List> data = logbookKinerjaDao.findPenilaianKinerja(idPegawai, idJabatan, + mf.format(new Date(bulan))); + + double tBobot = 0.00; + double tHasil = 0.00; + for (Integer idJenisIndikator : Arrays.asList(Master.Remunerasi.JENIS_INDIKATOR)) { + Map jiData = new HashMap<>(); + List> jiDetail = new ArrayList<>(); + double jiBobot = 0.00; + double jiHasil = 0.00; + for (Map map : data) { + if (idJenisIndikator.equals(map.get("jenisIndikatorId"))) { + String nilai = df.format(Double.valueOf(map.get("realisasi").toString()) + / Double.valueOf(map.get("target").toString())); + String hasil = df.format(Double.parseDouble(nilai) * Double.valueOf(map.get("bobot").toString())); + map.put("nilai", Double.parseDouble(nilai)); + map.put("hasil", Double.parseDouble(hasil)); + jiDetail.add(map); + + jiBobot += Double.valueOf(map.get("bobot").toString()); + jiHasil += Double.valueOf(map.get("hasil").toString()); + + tBobot += Double.valueOf(map.get("bobot").toString()); + tHasil += Double.valueOf(map.get("hasil").toString()); + } + } + jiData.put("detail", jiDetail); + jiData.put("stBobot", jiBobot); + jiData.put("stHasil", jiHasil); + + if (idJenisIndikator == 1) { + result.put("kuantitas", jiData); + } else if (idJenisIndikator == 2) { + result.put("kualitas", jiData); + } else if (idJenisIndikator == 3) { + result.put("perilaku", jiData); + } + } + Double iki = tabelAcuanIndeksIKIDao.findIKI(Double.parseDouble(df.format(tHasil))); + if (CommonUtil.isNullOrEmpty(iki)) { + iki = 0.00; + } + + result.put("tBobot", tBobot); + result.put("tHasil", Double.parseDouble(df.format(tHasil))); + result.put("iki", iki); + + return result; + } + + @Override + public List> findRekapPenilaianKinerja(Long bulan, Integer idUnitKerja, Integer idSubunitKerja, + Integer idPegawai) throws JpaSystemException { + List> result = new ArrayList<>(); + List> data = new ArrayList<>(); + List> recapData = new ArrayList<>(); + List listIdUnitKerja = new ArrayList<>(); + List listIdSubunitKerja = new ArrayList<>(); + List listIdPegawai = new ArrayList<>(); + List listIdJabatan = new ArrayList<>(); + + DecimalFormatSymbols formatRp = new DecimalFormatSymbols(); + formatRp.setCurrencySymbol("Rp"); + formatRp.setMonetaryDecimalSeparator(','); + formatRp.setGroupingSeparator('.'); + + DecimalFormat kursINA = (DecimalFormat) DecimalFormat.getCurrencyInstance(); + kursINA.setDecimalFormatSymbols(formatRp); + + DateFormat mf = new SimpleDateFormat("yyyy-MM"); + DateFormat yf = new SimpleDateFormat("yyyy"); + + DecimalFormat df = new DecimalFormat("0.00"); + df.setRoundingMode(RoundingMode.HALF_UP); + + List> anggaran = anggaranRemunerasiDao.findAnggaran(yf.format(new Date(bulan))); + + List> acuanIndeks = tabelAcuanIndeksIKIDao.findAllAcuanIndeks(); + + if (CommonUtil.isNotNullOrEmpty(bulan) && CommonUtil.isNullOrEmpty(idUnitKerja) + && CommonUtil.isNullOrEmpty(idSubunitKerja) && CommonUtil.isNullOrEmpty(idPegawai)) { + data = logbookKinerjaDao.findPenilaianKinerja(mf.format(new Date(bulan))); + } else if (CommonUtil.isNotNullOrEmpty(bulan) && CommonUtil.isNotNullOrEmpty(idUnitKerja) + && CommonUtil.isNullOrEmpty(idSubunitKerja) && CommonUtil.isNullOrEmpty(idPegawai)) { + data = logbookKinerjaDao.findPenilaianKinerjaUnitKerja(mf.format(new Date(bulan)), idUnitKerja); + } else if (CommonUtil.isNotNullOrEmpty(bulan) && CommonUtil.isNotNullOrEmpty(idUnitKerja) + && CommonUtil.isNotNullOrEmpty(idSubunitKerja) && CommonUtil.isNullOrEmpty(idPegawai)) { + data = logbookKinerjaDao.findPenilaianKinerjaSubunitKerja(mf.format(new Date(bulan)), idUnitKerja, + idSubunitKerja); + } else if (CommonUtil.isNotNullOrEmpty(bulan) && CommonUtil.isNullOrEmpty(idUnitKerja) + && CommonUtil.isNullOrEmpty(idSubunitKerja) && CommonUtil.isNotNullOrEmpty(idPegawai)) { + data = logbookKinerjaDao.findPenilaianKinerjaPegawai(mf.format(new Date(bulan)), idPegawai); + } else if (CommonUtil.isNotNullOrEmpty(bulan) && CommonUtil.isNotNullOrEmpty(idUnitKerja) + && CommonUtil.isNotNullOrEmpty(idSubunitKerja) && CommonUtil.isNotNullOrEmpty(idPegawai)) { + data = logbookKinerjaDao.findPenilaianKinerjaPegawai(mf.format(new Date(bulan)), idUnitKerja, + idSubunitKerja, idPegawai); + } + + for (Map map : data) { + if (!listIdUnitKerja.contains(map.get("unitKerjaId"))) { + listIdUnitKerja.add(Integer.valueOf(map.get("unitKerjaId").toString())); + } + if (!listIdSubunitKerja.contains(map.get("subunitKerjaId"))) { + listIdSubunitKerja.add(Integer.valueOf(map.get("subunitKerjaId").toString())); + } + if (!listIdPegawai.contains(map.get("pegawaiId"))) { + listIdPegawai.add(Integer.valueOf(map.get("pegawaiId").toString())); + } + if (!listIdJabatan.contains(map.get("jabatanId"))) { + listIdJabatan.add(Integer.valueOf(map.get("jabatanId").toString())); + } + } + + for (Integer idUK : listIdUnitKerja) { + for (Integer idSK : listIdSubunitKerja) { + for (Integer idP : listIdPegawai) { + for (Integer idJ : listIdJabatan) { + Map rsMap = new HashMap<>(); + double tHasil = 0.00; + for (Integer idJI : Arrays.asList(Master.Remunerasi.JENIS_INDIKATOR)) { + double jiBobot = 0.00; + double jiHasil = 0.00; + for (Map map : data) { + if (idUK.equals(map.get("unitKerjaId")) && idSK.equals(map.get("subunitKerjaId")) + && idP.equals(map.get("pegawaiId")) && idJ.equals(map.get("jabatanId")) + && idJI.equals(map.get("jenisIndikatorId"))) { + String nilai = df.format(Double.valueOf(map.get("realisasi").toString()) + / Double.valueOf(map.get("target").toString())); + String hasil = df.format( + Double.parseDouble(nilai) * Double.valueOf(map.get("bobot").toString())); + + jiBobot += Double.valueOf(map.get("bobot").toString()); + jiHasil += Double.parseDouble(hasil); + tHasil += Double.parseDouble(hasil); + + rsMap.put("unitKerjaId", map.get("unitKerjaId")); + rsMap.put("unitKerja", map.get("unitKerja")); + rsMap.put("subunitKerjaId", map.get("subunitKerjaId")); + rsMap.put("subunitKerja", map.get("subunitKerja")); + rsMap.put("pegawaiId", map.get("pegawaiId")); + rsMap.put("namaLengkap", map.get("namaLengkap")); + rsMap.put("jabatanId", map.get("jabatanId")); + rsMap.put("namaJabatan", map.get("namaJabatan")); + rsMap.put("nilaiJabatan", map.get("nilaiJabatan")); + } + } + if (idJI == 1) { + rsMap.put("bobotKuantitas", jiBobot); + rsMap.put("hasilKuantitas", jiHasil); + } else if (idJI == 2) { + rsMap.put("bobotKualitas", jiBobot); + rsMap.put("hasilKualitas", jiHasil); + } else if (idJI == 3) { + rsMap.put("bobotPerilaku", jiBobot); + rsMap.put("hasilPerilaku", jiHasil); + } + } + if (CommonUtil.isNotNullOrEmpty(rsMap.get("unitKerjaId")) + && CommonUtil.isNotNullOrEmpty(rsMap.get("subunitKerjaId")) + && CommonUtil.isNotNullOrEmpty(rsMap.get("pegawaiId")) + && CommonUtil.isNotNullOrEmpty(rsMap.get("jabatanId")) + && 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(); + + break; + } + } + rsMap.put("totalHasil", Double.parseDouble(df.format(tHasil))); + rsMap.put("iki", iki); + rsMap.put("kriteria", kriteria); + + recapData.add(rsMap); + } + } + } + } + } + + for (Map rd : recapData) { + for (Map ag : anggaran) { + if (rd.get("pegawaiId").equals(ag.get("pegawaiId")) + && rd.get("jabatanId").equals(ag.get("jabatanId"))) { + rd.put("pir", ag.get("pir")); + + break; + } + } + double p1 = Double.valueOf(rd.get("nilaiJabatan").toString()) * Double.valueOf(rd.get("iki").toString()) + * Double.valueOf(rd.get("pir").toString()) * Master.Remunerasi.PERSEN_P1; + double p2 = Double.valueOf(rd.get("nilaiJabatan").toString()) * Double.valueOf(rd.get("iki").toString()) + * Master.Remunerasi.IKU * Double.valueOf(rd.get("pir").toString()) * Master.Remunerasi.PERSEN_P2; + + rd.put("p1", p1); + rd.put("p2", p2); + + rd.put("rpP1", kursINA.format(p1).toString()); + rd.put("rpP2", kursINA.format(p2).toString()); + + result.add(rd); + } + + return result; + } + } diff --git a/jasamedika-domain/src/main/resources/hibernate.cfg.xml b/jasamedika-domain/src/main/resources/hibernate.cfg.xml index aab89c85..e6b1f1e8 100644 --- a/jasamedika-domain/src/main/resources/hibernate.cfg.xml +++ b/jasamedika-domain/src/main/resources/hibernate.cfg.xml @@ -688,5 +688,6 @@ + diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java index bb826ee9..53db7022 100644 --- a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java @@ -1178,4 +1178,48 @@ public class IkiDanRemunerasiController extends LocaleController> getPenilaianKinerjaIndividu(HttpServletRequest request, + @RequestParam(value = "pegawaiId", required = true) Integer idPegawai, + @RequestParam(value = "jabatanId", required = true) Integer idJabatan, + @RequestParam(value = "bulan", required = true) Long bulan) { + try { + Map result = logbookKinerjaService.findPenilaianKinerja(idPegawai, idJabatan, bulan); + mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, + getMessage(MessageResource.LABEL_SUCCESS, request)); + return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage); + } catch (ServiceVOException sve) { + LOGGER.error("Got exception {} when get penilaian kinerja individu", sve.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, sve.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.INTERNAL_SERVER_ERROR, mapHeaderMessage); + } catch (JpaSystemException jse) { + LOGGER.error("Got exception {} when get penilaian kinerja individu", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + + @RequestMapping(value = "/get-rekap-penilaian-kinerja-individu", method = RequestMethod.GET) + public ResponseEntity>> getRekapPenilaianKinerjaIndividu(HttpServletRequest request, + @RequestParam(value = "bulan", required = true) Long bulan, + @RequestParam(value = "unitKerjaId", required = false) Integer idUnitKerja, + @RequestParam(value = "subunitKerjaId", required = false) Integer idSubunitKerja, + @RequestParam(value = "pegawaiId", required = false) Integer idPegawai) { + try { + List> result = logbookKinerjaService.findRekapPenilaianKinerja(bulan, idUnitKerja, + idSubunitKerja, idPegawai); + mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, + getMessage(MessageResource.LABEL_SUCCESS, request)); + return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage); + } catch (ServiceVOException sve) { + LOGGER.error("Got exception {} when get rekapitulasi penilaian kinerja individu", sve.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, sve.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.INTERNAL_SERVER_ERROR, mapHeaderMessage); + } catch (JpaSystemException jse) { + LOGGER.error("Got exception {} when get rekapitulasi penilaian kinerja individu", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } }