perbaikan get dashboard kinerja pegawai

This commit is contained in:
salmanoe 2021-03-24 21:15:23 +07:00
parent af36a7c45b
commit 70dd1b2cb2
4 changed files with 71 additions and 19 deletions

View File

@ -66,16 +66,16 @@ public interface LogbookKinerjaDao extends PagingAndSortingRepository<LogbookKin
List<Map<String, Object>> 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<Map<String, Object>> findLogbookKinerja(@Param("pegawaiId") Integer idPegawai,
@Param("jabatanId") Integer idJabatan, @Param("bulan") String bulan);

View File

@ -25,7 +25,6 @@ public interface LogbookKinerjaService extends BaseVoService<LogbookKinerja, Log
List<Map<String, Object>> findKontrakKinerja(Integer idIndikator) throws JpaSystemException;
List<Map<String, Object>> findLogbookKinerja(Integer idPegawai, Integer idJabatan, Long bulan)
throws JpaSystemException;
Map<String, Object> findLogbookKinerja(Integer idPegawai, Integer idJabatan, Long bulan) throws JpaSystemException;
}

View File

@ -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<Map<String, Object>> findLogbookKinerja(Integer idPegawai, Integer idJabatan, Long bulan)
public Map<String, Object> findLogbookKinerja(Integer idPegawai, Integer idJabatan, Long bulan)
throws JpaSystemException {
List<Map<String, Object>> result = new ArrayList<>();
Map<String, Object> result = new HashMap<>();
List<Map<String, Object>> 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<Map<String, Object>> 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<Map<String, Object>> data = new ArrayList<>();
Map<String, Object> jenisIndikator = new HashMap<>();
jenisIndikator.put("jenisIndikator", ji);
for (Map<String, Object> 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;
}

View File

@ -708,22 +708,22 @@ public class IkiDanRemunerasiController extends LocaleController<IkiDanRemuneras
}
}
@RequestMapping(value = "/get-detail-dashboard-kinerja", method = RequestMethod.GET)
public ResponseEntity<List<Map<String, Object>>> getDetailDashboardKinerja(HttpServletRequest request,
@RequestMapping(value = "/get-dashboard-kinerja", method = RequestMethod.GET)
public ResponseEntity<Map<String, Object>> 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<Map<String, Object>> result = logbookKinerjaService.findLogbookKinerja(idPegawai, idJabatan, bulan);
Map<String, Object> 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);
}