- pemisahan label rupiah capaian untuk info syarat dan ketentuan P1 dan P2

- pembuatan service daftar indikator usulan baru di kontrak kinerja
- pembuatan formula indikator dengan satuan yang hitungannya harus rata-rata
- penambahan informasi tanggal batas akhir verifikasi catatan kegiatan harian
This commit is contained in:
salmanoe 2021-04-22 21:42:23 +07:00
parent 5d76c8e23c
commit cb05042a90
10 changed files with 173 additions and 11 deletions

View File

@ -252,6 +252,9 @@ public class Master {
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_P1 = 0.3;
public static final Double PERSEN_P2 = 0.7;
}
public static final class Ruangan {
@ -267,6 +270,10 @@ public class Master {
public static final int RADIOLOGI = 35;
}
public static final class SatuanIndikator {
public static final Integer[] RATA_RATA = { 11743 };
}
public static final class ShiftKerja {
public static final Integer[] HOLIDAY_INCLUDED = { 7, 13, 67, 69, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
83 };

View File

@ -5,6 +5,7 @@ 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.AnggaranRemunerasi;
@ -19,4 +20,15 @@ public interface AnggaranRemunerasiDao extends PagingAndSortingRepository<Anggar
+ "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 "
+ "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);
}

View File

@ -59,4 +59,13 @@ public interface IndikatorKinerjaJabatanDao extends PagingAndSortingRepository<I
List<Map<String, Object>> findDupMap(@Param("indikatorId") Integer idIndikator,
@Param("jabatanId") Integer idJabatan, @Param("tglBerlaku") Date tglBerlaku);
@Query("select distinct new Map(ikm.id as id,ikm.namaIndikator as namaIndikator,jb.levelJabatan as levelJabatan) "
+ "from IndikatorKinerjaJabatan ikt " + "inner join ikt.indikatorKinerja ikm "
+ "inner join ikt.jabatan jb " + "where ikt.statusEnabled is true " + "and ikm.statusEnabled is true "
+ "and jb.statusEnabled is true "
+ "and to_char(ikt.tanggalMulaiBerlaku,'yyyy-MM') <= to_char(now(),'yyyy-MM') "
+ "and ikm.jenisIndikator = :jenisIndikator " + "and jb.unitKerjaId = :unitKerjaId")
List<Map<String, Object>> findIndikatorByUnit(@Param("jenisIndikator") Integer jenisIndikator,
@Param("unitKerjaId") Integer idUnitKerja);
}

View File

@ -31,4 +31,12 @@ public interface LogbookKinerjaDetailDao extends PagingAndSortingRepository<Logb
List<Map<String, Object>> findWorkingRecord(@Param("pegawaiId") Integer idPegawai,
@Param("jabatanId") Integer idJabatan, @Param("bulan") String bulan);
@Query("select new Map(lkd.logbookIndikatorId as logbookId,avg(lkd.capaian) as avgCapaian,ikm.satuanIndikatorId as satuanId) "
+ "from LogbookKinerjaDetail lkd " + "inner join lkd.logbookKinerja lk "
+ "inner join lk.indikatorKinerja ikm " + "where lkd.statusEnabled is true "
+ "and lk.statusEnabled is true " + "and ikm.statusEnabled is true " + "and lk.noRec = :noRec "
+ "and ikm.satuanIndikatorId in (:listSatuanId) " + "group by lkd.logbookIndikatorId")
List<Map<String, Object>> findAvgCapaianByKontrak(@Param("noRec") String noRec,
@Param("listSatuanId") List<Integer> listIdSatuan);
}

View File

@ -22,4 +22,7 @@ public interface IndikatorKinerjaJabatanService
public List<Map<String, Object>> findDupMap(Integer idIndikator, Integer idJabatan, Long tglBerlaku)
throws JpaSystemException;
public List<Map<String, Object>> findIndikatorByUnit(Integer jenisIndikator, Integer idUnitKerja,
Integer levelJabatan) throws JpaSystemException;
}

View File

@ -3,14 +3,17 @@ package com.jasamedika.medifirst2000.service;
import java.util.List;
import java.util.Map;
import org.springframework.orm.jpa.JpaSystemException;
import com.jasamedika.medifirst2000.entities.LogbookKinerjaDetail;
import com.jasamedika.medifirst2000.vo.LogbookKinerjaDetailVO;
public interface LogbookKinerjaDetailService
extends BaseVoService<LogbookKinerjaDetail, LogbookKinerjaDetailVO, String> {
List<Map<String, Object>> findWorkingRecord(Integer idPegawai, Integer idJabatan, Long bulan);
List<Map<String, Object>> findAksesPegawai(Integer idPegawai);
public List<Map<String, Object>> findWorkingRecord(Integer idPegawai, Integer idJabatan, Long bulan)
throws JpaSystemException;
public List<Map<String, Object>> findAksesPegawai(Integer idPegawai) throws JpaSystemException;
}

View File

@ -394,4 +394,37 @@ public class IndikatorKinerjaJabatanServiceImpl extends BaseVoServiceImpl implem
return result;
}
@Override
public List<Map<String, Object>> findIndikatorByUnit(Integer jenisIndikator, Integer idUnitKerja,
Integer levelJabatan) throws JpaSystemException {
List<Map<String, Object>> result = new ArrayList<>();
List<Integer> listIdIndikator = new ArrayList<>();
List<Map<String, Object>> data = indikatorKinerjaJabatanDao.findIndikatorByUnit(jenisIndikator, idUnitKerja);
if (levelJabatan > 1) {
for (Map<String, Object> map : data) {
if (map.get("levelJabatan").equals(levelJabatan) || map.get("levelJabatan").equals(levelJabatan - 1)) {
if (!listIdIndikator.contains(map.get("id"))) {
listIdIndikator.add(Integer.valueOf(map.get("id").toString()));
map.remove("levelJabatan");
result.add(map);
}
}
}
} else {
for (Map<String, Object> map : data) {
if (map.get("levelJabatan").equals(levelJabatan)) {
if (!listIdIndikator.contains(map.get("id"))) {
listIdIndikator.add(Integer.valueOf(map.get("id").toString()));
map.remove("levelJabatan");
result.add(map);
}
}
}
}
return result;
}
}

View File

@ -2,6 +2,10 @@ package com.jasamedika.medifirst2000.service.impl;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
@ -44,6 +48,10 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement
LogbookKinerjaDetail logbookKinerjaDetail = logbookKinerjaDetailConverter.transferVOToModel(vo,
new LogbookKinerjaDetail());
/**
* menghitung capaian indikator satuan yang harus dihitung secara
* akumulatif
*/
if (vo.getStatusEnabled() && vo.getStatusVerifikasi()) {
logbookKinerja.setCapaian(logbookKinerja.getCapaian() + vo.getCapaian());
}
@ -53,6 +61,24 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement
logbookKinerjaDao.save(logbookKinerja);
LogbookKinerjaDetail resultModel = logbookKinerjaDetailDao.save(logbookKinerjaDetail);
/**
* menghitung capaian indikator satuan yang harus dihitung secara
* rata-rata
*/
if (CommonUtil.isNotNullOrEmpty(resultModel)) {
List<Map<String, Object>> dataSatuanRatarata = logbookKinerjaDetailDao.findAvgCapaianByKontrak(
vo.getLogbookKinerja().getNoRec(), Arrays.asList(Master.SatuanIndikator.RATA_RATA));
if (CommonUtil.isNotNullOrEmpty(dataSatuanRatarata)) {
List<LogbookKinerja> models = new ArrayList<>();
for (Map<String, Object> map : dataSatuanRatarata) {
LogbookKinerja model = logbookKinerjaDao.findOne(map.get("logbookId").toString());
model.setCapaian(Double.valueOf(map.get("avgCapaian").toString()));
models.add(model);
}
logbookKinerjaDao.save(models);
}
}
LogbookKinerjaDetailVO resultVO = new LogbookKinerjaDetailVO();
resultVO = logbookKinerjaDetailConverter.transferModelToVO(resultModel, resultVO);
@ -64,6 +90,10 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement
LogbookKinerja logbookKinerja = logbookKinerjaDao.findOne(vo.getLogbookKinerja().getNoRec());
LogbookKinerjaDetail logbookKinerjaDetailLama = logbookKinerjaDetailDao.findOne(vo.getNoRec());
/**
* menghitung indikator capaian satuan yang harus dihitung secara
* akumulatif
*/
if (!vo.getStatusEnabled() && !vo.getStatusVerifikasi()) {
logbookKinerja.setCapaian(logbookKinerja.getCapaian() - vo.getCapaian());
} else if (vo.getStatusEnabled() && vo.getStatusVerifikasi()) {
@ -76,10 +106,28 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement
logbookKinerjaDetailBaru.setLogbookKinerja(logbookKinerja);
logbookKinerjaDao.save(logbookKinerja);
LogbookKinerjaDetail resutlModel = logbookKinerjaDetailDao.save(logbookKinerjaDetailBaru);
LogbookKinerjaDetail resultModel = logbookKinerjaDetailDao.save(logbookKinerjaDetailBaru);
/**
* menghitung capaian indikator satuan yang harus dihitung secara
* rata-rata
*/
if (CommonUtil.isNotNullOrEmpty(resultModel)) {
List<Map<String, Object>> dataSatuanRatarata = logbookKinerjaDetailDao.findAvgCapaianByKontrak(
vo.getLogbookKinerja().getNoRec(), Arrays.asList(Master.SatuanIndikator.RATA_RATA));
if (CommonUtil.isNotNullOrEmpty(dataSatuanRatarata)) {
List<LogbookKinerja> models = new ArrayList<>();
for (Map<String, Object> map : dataSatuanRatarata) {
LogbookKinerja model = logbookKinerjaDao.findOne(map.get("logbookId").toString());
model.setCapaian(Double.valueOf(map.get("avgCapaian").toString()));
models.add(model);
}
logbookKinerjaDao.save(models);
}
}
LogbookKinerjaDetailVO resultVO = new LogbookKinerjaDetailVO();
resultVO = logbookKinerjaDetailConverter.transferModelToVO(resutlModel, resultVO);
resultVO = logbookKinerjaDetailConverter.transferModelToVO(resultModel, resultVO);
return resultVO;
}
@ -121,14 +169,17 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement
@Override
public Map<String, Object> findAllWithPageAndLimitAndSortByAndDirectionParameter(Integer page, Integer limit,
String sort, String dir) {
String sort, String dir) throws JpaSystemException {
return null;
}
@Override
public List<Map<String, Object>> findWorkingRecord(Integer idPegawai, Integer idJabatan, Long bulan) {
public List<Map<String, Object>> findWorkingRecord(Integer idPegawai, Integer idJabatan, Long bulan)
throws JpaSystemException {
DateFormat df = new SimpleDateFormat("yyyy-MM");
LocalDateTime tglLimitVerif = LocalDateTime
.of(LocalDate.parse(df.format(new Date(bulan)) + "-04").plusMonths(1), LocalTime.MAX);
List<Map<String, Object>> result = logbookKinerjaDetailDao.findWorkingRecord(idPegawai, idJabatan,
df.format(new Date(bulan)));
@ -136,6 +187,7 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement
Map<String, Object> logbook = new HashMap<String, Object>();
logbook.put("noRec", map.get("logbookNoRec"));
map.put("logbookKinerja", logbook);
map.put("tglBatasAkhirVerif", Date.from(tglLimitVerif.atZone(ZoneId.systemDefault()).toInstant()));
map.remove("logbookNoRec");
}
@ -143,7 +195,7 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement
}
@Override
public List<Map<String, Object>> findAksesPegawai(Integer idPegawai) {
public List<Map<String, Object>> findAksesPegawai(Integer idPegawai) throws JpaSystemException {
List<Map<String, Object>> result = logbookKinerjaDao.findAksesPegawaiByAtasan(idPegawai,
Arrays.asList(Master.KategoryPegawai.PURNA_WAKTU));

View File

@ -318,10 +318,10 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
return result;
}
public Map<String, Object> findAnggaranRemunerasi() throws JpaSystemException {
public Map<String, Object> findAnggaranRemunerasi(Integer idPegawai, Integer idJabatan) throws JpaSystemException {
Map<String, Object> result = new HashMap<>();
List<Map<String, Object>> data = anggaranRemunerasiDao.findTahunIni();
List<Map<String, Object>> data = anggaranRemunerasiDao.findTahunIniByPegawai(idPegawai, idJabatan);
result = data.get(0);
return result;
@ -345,9 +345,10 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
List<Map<String, Object>> rs = logbookKinerjaDao.findLogbookKinerja(idPegawai, idJabatan,
df.format(new Date(bulan)));
Map<String, Object> anggaran = findAnggaranRemunerasi(idPegawai, idJabatan);
double nilaiJabatan = Double.valueOf(rs.get(0).get("nilaiJabatan").toString());
double pir = Double.valueOf(findAnggaranRemunerasi().get("pir").toString());
double pir = Double.valueOf(anggaran.get("pir").toString());
for (String ji : Arrays.asList(Master.JENIS_INDIKATOR)) {
double hasil = 0.0;
@ -393,6 +394,18 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
result.put("rupiahCapaian", totAllPersen / 100.0 * nilaiJabatan * Master.Remunerasi.IKI_STANDAR * pir);
result.put("rupiahCapaianFormat",
kursINA.format(totAllPersen / 100.0 * nilaiJabatan * Master.Remunerasi.IKI_STANDAR * pir).toString());
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(Double.valueOf(anggaran.get("plafonGaji").toString())).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("plafonP2", kursINA.format(Double.valueOf(anggaran.get("plafonInsentif").toString())).toString());
result.put("rupiahTarget", nilaiJabatan * Master.Remunerasi.IKI_STANDAR * pir);
result.put("rupiahTargetFormat", kursINA.format(nilaiJabatan * Master.Remunerasi.IKI_STANDAR * pir).toString());
result.put("persenCapaian", totAllPersen);

View File

@ -788,6 +788,28 @@ public class IkiDanRemunerasiController extends LocaleController<IkiDanRemuneras
}
}
@RequestMapping(value = "/daftar-indikator-di-unit-kerja", method = RequestMethod.GET)
public ResponseEntity<List<Map<String, Object>>> getDaftarIndikatorDiUnitKerja(HttpServletRequest request,
@RequestParam(value = "jenisIndikator", required = true) Integer jenisIndikator,
@RequestParam(value = "unitKerjaId", required = true) Integer idUnitKerja,
@RequestParam(value = "levelJabatan", required = true) Integer levelJabatan) throws ParseException {
try {
List<Map<String, Object>> result = indikatorKinerjaJabatanService.findIndikatorByUnit(jenisIndikator,
idUnitKerja, levelJabatan);
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 daftar indikator di unit kerja", 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 daftar indikator di unit kerja", jse.getMessage());
addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage());
return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage);
}
}
@RequestMapping(value = "/get-duplicate-kontrak-kinerja", method = RequestMethod.GET)
public ResponseEntity<List<Map<String, Object>>> getDuplicateKontrakKinerja(HttpServletRequest request,
@RequestParam(value = "pegawaiId", required = true) Integer idPegawai,