- perbaikan service mendapatkan nilai pir sesuai tahun yang dipilih

- pembuatan service penilaian kinerja individu
- pembautan service rekapitulasi penilaian kinerja individu
- pembuatan service mendapatkan nilai iki acuan dari persen capaian kinerja
- pendaftaran tabel acuan iki ke dalam konfigurasi hibernate
This commit is contained in:
salmanoe 2021-06-28 07:55:28 +07:00
parent b50c762870
commit a46e4f3ed1
8 changed files with 417 additions and 41 deletions

View File

@ -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 {

View File

@ -20,15 +20,30 @@ public interface AnggaranRemunerasiDao extends PagingAndSortingRepository<Anggar
+ "and to_char(ar.tahun,'yyyy') = to_char(now(),'yyyy') " + "order by ar.tanggalPembaharuanData desc")
List<Map<String, Object>> 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<Map<String, Object>> 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<Map<String, Object>> findAnggaran(@Param("pegawaiId") Integer idPegawai, @Param("jabatanId") Integer idJabatan,
@Param("tahun") String tahun);
@Query(strQryAnggaran + sortPegawai)
List<Map<String, Object>> findAnggaran(@Param("tahun") String tahun);
}

View File

@ -119,4 +119,61 @@ public interface LogbookKinerjaDao extends PagingAndSortingRepository<LogbookKin
List<Map<String, Object>> 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<Map<String, Object>> 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<Map<String, Object>> findPenilaianKinerja(@Param("bulan") String bulan);
@Query(strQryIKI + cdtUnitKerja + sortIKI)
List<Map<String, Object>> findPenilaianKinerjaUnitKerja(@Param("bulan") String bulan,
@Param("unitKerjaId") Integer idUnitKerja);
@Query(strQryIKI + cdtUnitKerja + cdtSubunitKerja + sortIKI)
List<Map<String, Object>> findPenilaianKinerjaSubunitKerja(@Param("bulan") String bulan,
@Param("unitKerjaId") Integer idUnitKerja, @Param("subunitKerjaId") Integer idSubunitKerja);
@Query(strQryIKI + cdtPegawai + sortIKI)
List<Map<String, Object>> findPenilaianKinerjaPegawai(@Param("bulan") String bulan,
@Param("pegawaiId") Integer idPegawai);
@Query(strQryIKI + cdtUnitKerja + cdtSubunitKerja + cdtPegawai + sortIKI)
List<Map<String, Object>> findPenilaianKinerjaPegawai(@Param("bulan") String bulan,
@Param("unitKerjaId") Integer idUnitKerja, @Param("subunitKerjaId") Integer idSubunitKerja,
@Param("pegawaiId") Integer idPegawai);
}

View File

@ -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<TabelAcuanIndeksIKI, String>{
@Query("select tabelAcuanIndeksIKI "+
"from TabelAcuanIndeksIKI tabelAcuanIndeksIKI ")
@Repository("AcuanIndeksIKIDao")
public interface TabelAcuanIndeksIKIDao extends PagingAndSortingRepository<TabelAcuanIndeksIKI, String> {
@Query("select tabelAcuanIndeksIKI " + "from TabelAcuanIndeksIKI tabelAcuanIndeksIKI ")
public List<TabelAcuanIndeksIKI> 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<Map<String, Object>> findAllAcuanIndeks();
}

View File

@ -38,4 +38,10 @@ public interface LogbookKinerjaService extends BaseVoService<LogbookKinerja, Log
public List<Map<String, Object>> findDetailPasienLogbook(Integer idPegawai, Integer idIndikator, Integer idProduk,
String tglPelayanan, Integer idJenisPetugas, Double skor);
public Map<String, Object> findPenilaianKinerja(Integer idPegawai, Integer idJabatan, Long bulan)
throws JpaSystemException;
public List<Map<String, Object>> findRekapPenilaianKinerja(Long bulan, Integer idUnitKerja, Integer idSubunitKerja,
Integer idPegawai) throws JpaSystemException;
}

View File

@ -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<String, Object> findAnggaranRemunerasi(Integer idPegawai, Integer idJabatan) throws JpaSystemException {
public Map<String, Object> findAnggaranRemunerasi(Integer idPegawai, Integer idJabatan, String tahun)
throws JpaSystemException {
Map<String, Object> result = new HashMap<>();
List<Map<String, Object>> data = anggaranRemunerasiDao.findTahunIniByPegawai(idPegawai, idJabatan);
List<Map<String, Object>> 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<String, Object> result = new HashMap<>();
List<Map<String, Object>> 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<Map<String, Object>> rs = logbookKinerjaDao.findLogbookKinerja(idPegawai, idJabatan,
df.format(new Date(bulan)));
Map<String, Object> anggaran = findAnggaranRemunerasi(idPegawai, idJabatan);
mf.format(new Date(bulan)));
Map<String, Object> 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<String, Object> findPenilaianKinerja(Integer idPegawai, Integer idJabatan, Long bulan)
throws JpaSystemException {
Map<String, Object> result = new HashMap<>();
DateFormat mf = new SimpleDateFormat("yyyy-MM");
DecimalFormat df = new DecimalFormat("0.00");
df.setRoundingMode(RoundingMode.HALF_UP);
List<Map<String, Object>> 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<String, Object> jiData = new HashMap<>();
List<Map<String, Object>> jiDetail = new ArrayList<>();
double jiBobot = 0.00;
double jiHasil = 0.00;
for (Map<String, Object> 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<Map<String, Object>> findRekapPenilaianKinerja(Long bulan, Integer idUnitKerja, Integer idSubunitKerja,
Integer idPegawai) throws JpaSystemException {
List<Map<String, Object>> result = new ArrayList<>();
List<Map<String, Object>> data = new ArrayList<>();
List<Map<String, Object>> recapData = new ArrayList<>();
List<Integer> listIdUnitKerja = new ArrayList<>();
List<Integer> listIdSubunitKerja = new ArrayList<>();
List<Integer> listIdPegawai = new ArrayList<>();
List<Integer> 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<Map<String, Object>> anggaran = anggaranRemunerasiDao.findAnggaran(yf.format(new Date(bulan)));
List<Map<String, Object>> 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<String, Object> 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<String, Object> 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<String, Object> 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<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;
}
}
rsMap.put("totalHasil", Double.parseDouble(df.format(tHasil)));
rsMap.put("iki", iki);
rsMap.put("kriteria", kriteria);
recapData.add(rsMap);
}
}
}
}
}
for (Map<String, Object> rd : recapData) {
for (Map<String, Object> 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;
}
}

View File

@ -688,5 +688,6 @@
<mapping class="com.jasamedika.medifirst2000.entities.BobotJenisIndikator"/>
<mapping class="com.jasamedika.medifirst2000.entities.IndikatorKinerjaDetail"/>
<mapping class="com.jasamedika.medifirst2000.entities.LogbookKinerjaDokter"/>
<mapping class="com.jasamedika.medifirst2000.entities.TabelAcuanIndeksIKI"/>
</session-factory>
</hibernate-configuration>

View File

@ -1178,4 +1178,48 @@ public class IkiDanRemunerasiController extends LocaleController<IkiDanRemuneras
return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage);
}
}
@RequestMapping(value = "/get-penilaian-kinerja-individu", method = RequestMethod.GET)
public ResponseEntity<Map<String, Object>> 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<String, Object> 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<List<Map<String, Object>>> 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<Map<String, Object>> 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);
}
}
}