From 70dd1b2cb21ab8883b51b63835a18a1c7ffe54e2 Mon Sep 17 00:00:00 2001 From: salmanoe Date: Wed, 24 Mar 2021 21:15:23 +0700 Subject: [PATCH] perbaikan get dashboard kinerja pegawai --- .../medifirst2000/dao/LogbookKinerjaDao.java | 18 +++--- .../service/LogbookKinerjaService.java | 3 +- .../impl/LogbookKinerjaServiceImpl.java | 59 ++++++++++++++++++- .../IkiDanRemunerasiController.java | 10 ++-- 4 files changed, 71 insertions(+), 19 deletions(-) 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 b0bf5892..74912e21 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 @@ -66,16 +66,16 @@ public interface LogbookKinerjaDao extends PagingAndSortingRepository> findKontrakKinerja(@Param("indikatorId") Integer idIndikator); @Query("select new Map(lk.noRec as noRec," + "pg.id as idPegawai,pg.namaLengkap as namaPegawai," - + "jb.id as idJabatan,jb.namaJabatan as namaJabatan," + + "jb.id as idJabatan,jb.namaJabatan as namaJabatan," + "ik.jenisIndikator as idJenisIndikator," + + "(case when ik.jenisIndikator = 1 then 'Kuantitas' " + "when ik.jenisIndikator = 2 then 'Kualitas'" + + " when ik.jenisIndikator = 3 then 'Perilaku' end) as jenisIndikator," + "ik.id as idIndikator,ik.namaIndikator as namaIndikator," - + "ik.jenisIndikator as idJenisIndikator,(case when ik.jenisIndikator = 1 then 'Kuantitas' " - + "when ik.jenisIndikator = 2 then 'Kualitas' " - + "when ik.jenisIndikator = 3 then 'Perilaku' end) as jenisIndikator," - + "lk.capaian/lk.target*100 as persenCapaian) " + "from LogbookKinerja lk " - + "inner join lk.indikatorKinerja ik " + "inner join lk.pegawai pg " + "inner join lk.jabatan jb " - + "where lk.statusEnabled is true and ik.statusEnabled is true " - + "and lk.statusVerifikasi is true and ik.statusVerifikasi is true " + "and lk.pegawaiId = :pegawaiId " - + "and lk.jabatanId = :jabatanId " + "and to_char(lk.bulan,'yyyy-MM') = :bulan") + + "si.id as satuanId,si.satuanIndikator as satuanIndikator," + "lk.capaian/lk.target*100 as persenCapaian) " + + "from LogbookKinerja lk " + "inner join lk.indikatorKinerja ik " + "inner join ik.satuanIndikator si " + + "inner join lk.pegawai pg " + "inner join lk.jabatan jb " + "where lk.statusEnabled is true " + + "and ik.statusEnabled is true " + "and lk.statusVerifikasi is true " + "and ik.statusVerifikasi is true " + + "and si.statusEnabled is true " + "and lk.pegawaiId = :pegawaiId " + "and lk.jabatanId = :jabatanId " + + "and to_char(lk.bulan,'yyyy-MM') = :bulan") List> findLogbookKinerja(@Param("pegawaiId") Integer idPegawai, @Param("jabatanId") Integer idJabatan, @Param("bulan") String bulan); 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 12d60d2f..80dd756d 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 @@ -25,7 +25,6 @@ public interface LogbookKinerjaService extends BaseVoService> findKontrakKinerja(Integer idIndikator) throws JpaSystemException; - List> findLogbookKinerja(Integer idPegawai, Integer idJabatan, Long bulan) - throws JpaSystemException; + Map findLogbookKinerja(Integer idPegawai, Integer idJabatan, Long bulan) 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 8ffd24c0..ebaeb391 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 @@ -1,6 +1,10 @@ package com.jasamedika.medifirst2000.service.impl; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.text.DateFormat; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; @@ -25,6 +29,7 @@ import com.jasamedika.medifirst2000.entities.SatuanIndikator; import com.jasamedika.medifirst2000.exception.ServiceVOException; import com.jasamedika.medifirst2000.service.LogbookKinerjaService; import com.jasamedika.medifirst2000.util.CommonUtil; +import com.jasamedika.medifirst2000.util.IndonesianNumberToWords; import com.jasamedika.medifirst2000.vo.IndikatorKinerjaVO; import com.jasamedika.medifirst2000.vo.JabatanVO; import com.jasamedika.medifirst2000.vo.LogbookKinerjaVO; @@ -298,26 +303,74 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb } @Override - public List> findLogbookKinerja(Integer idPegawai, Integer idJabatan, Long bulan) + public Map findLogbookKinerja(Integer idPegawai, Integer idJabatan, Long bulan) throws JpaSystemException { - List> result = new ArrayList<>(); + Map result = new HashMap<>(); + List> listJenisIndikator = new ArrayList<>(); DateFormat df = new SimpleDateFormat("yyyy-MM"); + double totAllPersen = 0.0; + int jmlAllJenisIndikator = Arrays.asList(Master.JENIS_INDIKATOR).size(); + + DecimalFormatSymbols formatRp = new DecimalFormatSymbols(); + formatRp.setCurrencySymbol("Rp"); + formatRp.setMonetaryDecimalSeparator(','); + formatRp.setGroupingSeparator('.'); + + DecimalFormat kursINA = (DecimalFormat) DecimalFormat.getCurrencyInstance(); + kursINA.setDecimalFormatSymbols(formatRp); List> rs = logbookKinerjaDao.findLogbookKinerja(idPegawai, idJabatan, df.format(new Date(bulan))); for (String ji : Arrays.asList(Master.JENIS_INDIKATOR)) { + double totPersen = 0.0; + int jmlIndikator = 0; List> data = new ArrayList<>(); Map jenisIndikator = new HashMap<>(); jenisIndikator.put("jenisIndikator", ji); for (Map map : rs) { if (map.get("jenisIndikator").equals(ji)) { + jmlIndikator++; + totPersen += new BigDecimal(Double.valueOf(map.get("persenCapaian").toString())) + .setScale(2, RoundingMode.HALF_UP).doubleValue(); + + map.put("persenCapaianDibulatkan", + new BigDecimal(Double.valueOf(map.get("persenCapaian").toString())).setScale(2, + RoundingMode.HALF_UP)); data.add(map); } } + + // divided by zero exception + if (jmlIndikator == 0) { + jmlIndikator = 1; + } + + totAllPersen += new BigDecimal(Double.valueOf(totPersen / jmlIndikator)).setScale(2, RoundingMode.HALF_UP) + .doubleValue(); + jenisIndikator.put("data", data); - result.add(jenisIndikator); + jenisIndikator.put("persenCapaian", totPersen / jmlIndikator); + jenisIndikator.put("persenCapaianDibulatkan", + new BigDecimal(Double.valueOf(totPersen / jmlIndikator)).setScale(2, RoundingMode.HALF_UP)); + + listJenisIndikator.add(jenisIndikator); } + // divided by zero exception + if (jmlAllJenisIndikator == 0) { + jmlAllJenisIndikator = 1; + } + + result.put("listJenisIndikator", listJenisIndikator); + result.put("rupiahCapaian", (totAllPersen / jmlAllJenisIndikator) / 100 * 9999999); + result.put("rupiahCapaianFormat", + kursINA.format((totAllPersen / jmlAllJenisIndikator) / 100 * 9999999).toString()); + result.put("rupiahTarget", 9999999); + result.put("rupiahTargetFormat", kursINA.format(9999999).toString()); + result.put("persenCapaian", totAllPersen / jmlAllJenisIndikator); + result.put("persenCapaianDibulatkan", + new BigDecimal(Double.valueOf(totAllPersen / jmlAllJenisIndikator)).setScale(2, RoundingMode.HALF_UP)); + return result; } 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 3f1509a8..9f1e7afb 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 @@ -708,22 +708,22 @@ public class IkiDanRemunerasiController extends LocaleController>> getDetailDashboardKinerja(HttpServletRequest request, + @RequestMapping(value = "/get-dashboard-kinerja", method = RequestMethod.GET) + public ResponseEntity> getDashboardKinerja(HttpServletRequest request, @RequestParam(value = "pegawaiId", required = true) Integer idPegawai, @RequestParam(value = "jabatanId", required = true) Integer idJabatan, @RequestParam(value = "bulan", required = true) Long bulan) throws ParseException { try { - List> result = logbookKinerjaService.findLogbookKinerja(idPegawai, idJabatan, bulan); + Map result = logbookKinerjaService.findLogbookKinerja(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 detail dashboard kinerja", sve.getMessage()); + LOGGER.error("Got exception {} when get dashboard kinerja", 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 detail dashboard kinerja", jse.getMessage()); + LOGGER.error("Got exception {} when get dashboard kinerja", jse.getMessage()); addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); }