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 65651c68..5656a810 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 @@ -178,4 +178,11 @@ public interface LogbookKinerjaDao extends PagingAndSortingRepository findKontrakByLogbook(@Param("bulan") String bulan, @Param("pegawaiId") Integer idPegawai, + @Param("indikatorId") Integer idIndikator); + } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/LogbookKinerjaDokterDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/LogbookKinerjaDokterDao.java index 7b548263..d2ce7e8f 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/LogbookKinerjaDokterDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/LogbookKinerjaDokterDao.java @@ -39,4 +39,43 @@ public interface LogbookKinerjaDokterDao extends PagingAndSortingRepository findAllTargetLayanan(@Param("tglAwal") String tglAwal, @Param("tglAkhir") String tglAkhir); + @Query("select new Map (pg.id as id,pg.namaLengkap as namaLengkap,pg.tglMasuk as tglMasuk) " + + "from MapPegawaiJabatanToUnitKerja mj " + "inner join mj.pegawai pg " + "inner join mj.jabatan jb " + + "where mj.statusEnabled is true " + "and pg.statusEnabled is true " + "and jb.statusEnabled is true " + + "and pg.kategoryPegawaiId in (:listKategoryPegawaiId) " + "and jb.kelompokJabatanId in (3,4)") + public List> findPegawaiByListKategori( + @Param("listKategoryPegawaiId") List listIdKategoriPegawai); + + @Query("select distinct new Map(pg.id as id,pg.namaLengkap as namaLengkap,pg.tglMasuk as tglMasuk) " + + "from MapPegawaiJabatanToUnitKerja mj " + "inner join mj.pegawai pg " + "inner join mj.jabatan jb " + + "where mj.statusEnabled is true " + "and pg.statusEnabled is true " + "and jb.statusEnabled is true " + + "and pg.id = :pegawaiId " + "and pg.kategoryPegawaiId in (:listKategoryPegawaiId) " + + "and jb.unitKerjaId in (:listKsmId)") + List> findAksesPegawaiByStaf(@Param("pegawaiId") Integer idPegawai, + @Param("listKategoryPegawaiId") List listIdKategoriPegawai, + @Param("listKsmId") List listIdKsm); + + @Query("select distinct new Map(pgb.id as id,pgb.namaLengkap as namaLengkap,pgb.tglMasuk as tglMasuk) " + + "from MapPegawaiJabatanToUnitKerja mjp, MapPegawaiJabatanToUnitKerja mja " + "inner join mjp.pegawai pgb " + + "inner join mjp.atasanLangsung pg " + "inner join mja.jabatan jb " + + "where mjp.atasanLangsungId = mja.pegawaiId " + "and mja.pegawaiId = pg.id " + + "and mjp.statusEnabled is true " + "and mja.statusEnabled is true " + "and pgb.statusEnabled is true " + + "and pg.statusEnabled is true " + "and jb.statusEnabled is true " + "and pg.id = :pegawaiId " + + "and pgb.kategoryPegawaiId in (:listKategoryPegawaiId) " + "and pgb.jenisPegawaiId = 1 " + + "and jb.unitKerjaId in (:listKsmId)") + List> findAksesPegawaiByAtasan(@Param("pegawaiId") Integer idPegawai, + @Param("listKategoryPegawaiId") List listIdKategoriPegawai, + @Param("listKsmId") List listIdKsm); + + @Query("select distinct new Map(pgb.id as id,pgb.namaLengkap as namaLengkap,pgb.tglMasuk as tglMasuk) " + + "from MapPegawaiJabatanToUnitKerja mjp, MapPegawaiJabatanToUnitKerja mjn " + "inner join mjp.pegawai pgb " + + "inner join mjp.pejabatPenilai pg " + "inner join mjn.jabatan jb " + + "where mjp.pejabatPenilaiId = mjn.pegawaiId " + "and mjn.pegawaiId = pg.id " + + "and mjp.statusEnabled is true " + "and mjn.statusEnabled is true " + "and pgb.statusEnabled is true " + + "and pg.statusEnabled is true " + "and jb.statusEnabled is true " + "and pg.id = :pegawaiId " + + "and pgb.kategoryPegawaiId in (:listKategoryPegawaiId) " + "and pgb.jenisPegawaiId = 1 " + + "and jb.unitKerjaId = :direksiId") + List> findAksesPegawaiByPenilai(@Param("pegawaiId") Integer idPegawai, + @Param("listKategoryPegawaiId") List listIdKategoriPegawai, @Param("direksiId") Integer idDireksi); + } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/LogbookKinerjaDokterService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/LogbookKinerjaDokterService.java new file mode 100644 index 00000000..1a8ebf73 --- /dev/null +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/LogbookKinerjaDokterService.java @@ -0,0 +1,16 @@ +package com.jasamedika.medifirst2000.service; + +import java.util.List; +import java.util.Map; + +import org.springframework.orm.jpa.JpaSystemException; + +import com.jasamedika.medifirst2000.entities.LogbookKinerjaDokter; +import com.jasamedika.medifirst2000.vo.LogbookKinerjaDokterVO; + +public interface LogbookKinerjaDokterService + extends BaseVoService { + + public List> findAksesPegawai(Integer idPegawai) throws JpaSystemException; + +} 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 7f05b083..a97338c4 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 @@ -11,6 +11,8 @@ import com.jasamedika.medifirst2000.vo.LogbookKinerjaVO; public interface LogbookKinerjaService extends BaseVoService { + public LogbookKinerjaVO verify(LogbookKinerjaVO vo) throws JpaSystemException, ServiceVOException; + public LogbookKinerjaVO addPengajuanKontrakKinerja(LogbookKinerjaVO vo) throws JpaSystemException, ServiceVOException; diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaDokterServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaDokterServiceImpl.java new file mode 100644 index 00000000..faab910a --- /dev/null +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaDokterServiceImpl.java @@ -0,0 +1,192 @@ +package com.jasamedika.medifirst2000.service.impl; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.orm.jpa.JpaSystemException; +import org.springframework.stereotype.Service; + +import com.jasamedika.medifirst2000.constants.Master; +import com.jasamedika.medifirst2000.converter.BaseConverterImpl; +import com.jasamedika.medifirst2000.dao.LogbookKinerjaDokterDao; +import com.jasamedika.medifirst2000.dao.PegawaiDao; +import com.jasamedika.medifirst2000.entities.IndikatorKinerjaDetail; +import com.jasamedika.medifirst2000.entities.Jabatan; +import com.jasamedika.medifirst2000.entities.LogbookKinerjaDokter; +import com.jasamedika.medifirst2000.entities.Pegawai; +import com.jasamedika.medifirst2000.exception.ServiceVOException; +import com.jasamedika.medifirst2000.service.LogbookKinerjaDokterService; +import com.jasamedika.medifirst2000.util.CommonUtil; +import com.jasamedika.medifirst2000.vo.IndikatorKinerjaDetailVO; +import com.jasamedika.medifirst2000.vo.JabatanVO; +import com.jasamedika.medifirst2000.vo.LogbookKinerjaDokterVO; +import com.jasamedika.medifirst2000.vo.PegawaiVO; + +@Service("LogbookKinerjaDokterService") +public class LogbookKinerjaDokterServiceImpl extends BaseVoServiceImpl implements LogbookKinerjaDokterService { + + @Autowired + private BaseConverterImpl logbookDokterConverter; + + @Autowired + private BaseConverterImpl pegawaiConverter; + + @Autowired + private BaseConverterImpl jabatanConverter; + + @Autowired + private BaseConverterImpl indikatorDetailConverter; + + @Autowired + private LogbookKinerjaDokterDao logbookDokterDao; + + @Autowired + private PegawaiDao pegawaiDao; + + @Override + public LogbookKinerjaDokterVO add(LogbookKinerjaDokterVO vo) throws JpaSystemException, ServiceVOException { + Pegawai pegawai = pegawaiConverter.transferVOToModel(vo.getPegawai(), new Pegawai()); + Jabatan jabatan = jabatanConverter.transferVOToModel(vo.getJabatan(), new Jabatan()); + IndikatorKinerjaDetail indikatorDetail = indikatorDetailConverter.transferVOToModel(vo.getIndikatorDetail(), + new IndikatorKinerjaDetail()); + LogbookKinerjaDokter logbookDokter = logbookDokterConverter.transferVOToModel(vo, new LogbookKinerjaDokter()); + + logbookDokter.setPegawai(pegawai); + logbookDokter.setJabatan(jabatan); + logbookDokter.setIndikatorDetail(indikatorDetail); + LogbookKinerjaDokter resultModel = logbookDokterDao.save(logbookDokter); + + LogbookKinerjaDokterVO resultVO = new LogbookKinerjaDokterVO(); + resultVO = logbookDokterConverter.transferModelToVO(resultModel, resultVO); + + return resultVO; + } + + @Override + public LogbookKinerjaDokterVO update(LogbookKinerjaDokterVO vo) throws JpaSystemException, ServiceVOException { + LogbookKinerjaDokter logbookLamaDokter = logbookDokterDao.findOne(vo.getNoRec()); + + Pegawai pegawai = pegawaiConverter.transferVOToModel(vo.getPegawai(), new Pegawai()); + Jabatan jabatan = jabatanConverter.transferVOToModel(vo.getJabatan(), new Jabatan()); + IndikatorKinerjaDetail indikatorDetail = indikatorDetailConverter.transferVOToModel(vo.getIndikatorDetail(), + new IndikatorKinerjaDetail()); + LogbookKinerjaDokter logbookBaruDokter = logbookDokterConverter.transferVOToModel(vo, logbookLamaDokter); + + logbookBaruDokter.setPegawai(pegawai); + logbookBaruDokter.setJabatan(jabatan); + logbookBaruDokter.setIndikatorDetail(indikatorDetail); + LogbookKinerjaDokter resultModel = logbookDokterDao.save(logbookBaruDokter); + + LogbookKinerjaDokterVO resultVO = new LogbookKinerjaDokterVO(); + resultVO = logbookDokterConverter.transferModelToVO(resultModel, resultVO); + + return resultVO; + } + + @Override + public Boolean delete(String key) throws JpaSystemException { + logbookDokterDao.delete(key); + + return true; + } + + @Override + public LogbookKinerjaDokterVO findById(String key) throws JpaSystemException { + LogbookKinerjaDokterVO result = new LogbookKinerjaDokterVO(); + + LogbookKinerjaDokter logbookDokter = logbookDokterDao.findOne(key); + if (CommonUtil.isNotNullOrEmpty(logbookDokter)) { + result = logbookDokterConverter.transferModelToVO(logbookDokter, result); + } + + return result; + } + + @Override + public List findAll() throws JpaSystemException { + List result = new ArrayList<>(); + + Iterable models = logbookDokterDao.findAll(); + if (CommonUtil.isNotNullOrEmpty(models)) { + for (LogbookKinerjaDokter model : models) { + LogbookKinerjaDokterVO vo = new LogbookKinerjaDokterVO(); + vo = logbookDokterConverter.transferModelToVO(model, vo); + result.add(vo); + } + } + + return result; + } + + @Override + public Map findAllWithPageAndLimitAndSortByAndDirectionParameter(Integer page, Integer limit, + String sort, String dir) { + + return null; + } + + @Override + public List> findAksesPegawai(Integer idPegawai) throws JpaSystemException { + List> result = new ArrayList<>(); + List> rsAll = new ArrayList<>(); + List listPurnaWaktu = Arrays.asList(Master.KategoryPegawai.PURNA_WAKTU); + + List listIdSDM = pegawaiDao.getPegawaiSDMforCred(Master.UnitKerja.BAG_SDM, + Master.SubUnitKerja.SUBBAG_KESEJAHTERAAN); + if (listIdSDM.contains(idPegawai)) { + rsAll = logbookDokterDao.findPegawaiByListKategori(listPurnaWaktu); + result.addAll(rsAll); + for (Map map : result) { + map.put("isVerifAkses", false); + } + } + + List> aksesByStaf = logbookDokterDao.findAksesPegawaiByStaf(idPegawai, listPurnaWaktu, + Arrays.asList(Master.UnitKerja.KSM)); + List> aksesByAtasan = logbookDokterDao.findAksesPegawaiByAtasan(idPegawai, listPurnaWaktu, + Arrays.asList(Master.UnitKerja.KSM)); + List> aksesByPenilai = logbookDokterDao.findAksesPegawaiByPenilai(idPegawai, listPurnaWaktu, + Master.UnitKerja.DIREKSI); + + if (CommonUtil.isNotNullOrEmpty(aksesByStaf) && CommonUtil.isNullOrEmpty(rsAll)) { + for (Map map : aksesByStaf) { + map.put("isVerifAkses", false); + } + result.addAll(aksesByStaf); + } + if (CommonUtil.isNotNullOrEmpty(aksesByAtasan)) { + if (CommonUtil.isNullOrEmpty(rsAll)) { + for (Map map : aksesByAtasan) { + map.put("isVerifAkses", true); + } + result.addAll(aksesByAtasan); + } else { + for (Map res : result) { + for (Map map : aksesByAtasan) { + if (res.get("id").equals(map.get("id"))) { + res.put("isVerifAkses", true); + break; + } + } + } + } + } + if (CommonUtil.isNotNullOrEmpty(aksesByPenilai) && CommonUtil.isNullOrEmpty(rsAll)) { + for (Map map : aksesByPenilai) { + map.put("isVerifAkses", false); + } + result.addAll(aksesByPenilai); + } + + if (CommonUtil.isNotNullOrEmpty(result)) { + result.sort(Comparator.comparing(m -> (String) m.get("namaLengkap"), String.CASE_INSENSITIVE_ORDER)); + } + + return result; + } + +} 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 ef27943e..c734968e 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 @@ -191,6 +191,32 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb return null; } + @Override + public LogbookKinerjaVO verify(LogbookKinerjaVO vo) throws JpaSystemException, ServiceVOException { + DateFormat df = new SimpleDateFormat("yyyy-MM"); + + Map kontrak = logbookKinerjaDao.findKontrakByLogbook(df.format(vo.getBulan()), + vo.getPegawai().getId(), vo.getIndikatorKinerja().getId()); + LogbookKinerja logbookKinerjaLama = logbookKinerjaDao.findOne(kontrak.get("noRec").toString()); + + Pegawai pegawai = pegawaiConverter.transferVOToModel(vo.getPegawai(), new Pegawai()); + Jabatan jabatan = new Jabatan(); + jabatan.setId(Integer.valueOf(kontrak.get("jabatanId").toString())); + IndikatorKinerja indikatorKinerja = indikatorKinerjaConverter.transferVOToModel(vo.getIndikatorKinerja(), + new IndikatorKinerja()); + LogbookKinerja logbookKinerjaBaru = logbookKinerjaConverter.transferVOToModel(vo, logbookKinerjaLama); + + logbookKinerjaBaru.setPegawai(pegawai); + logbookKinerjaBaru.setJabatan(jabatan); + logbookKinerjaBaru.setIndikatorKinerja(indikatorKinerja); + LogbookKinerja resultModel = logbookKinerjaDao.save(logbookKinerjaBaru); + + LogbookKinerjaVO resultVO = new LogbookKinerjaVO(); + resultVO = logbookKinerjaConverter.transferModelToVO(resultModel, resultVO); + + return resultVO; + } + @Override public LogbookKinerjaVO addPengajuanKontrakKinerja(LogbookKinerjaVO vo) throws JpaSystemException, ServiceVOException { 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 ed3590b9..09e9104e 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 @@ -33,6 +33,7 @@ import com.jasamedika.medifirst2000.service.IkiDanRemunerasiService; import com.jasamedika.medifirst2000.service.IndikatorKinerjaJabatanService; import com.jasamedika.medifirst2000.service.IndikatorKinerjaService; import com.jasamedika.medifirst2000.service.LogbookKinerjaDetailService; +import com.jasamedika.medifirst2000.service.LogbookKinerjaDokterService; import com.jasamedika.medifirst2000.service.LogbookKinerjaService; import com.jasamedika.medifirst2000.service.RemunerasiOperasionalService; import com.jasamedika.medifirst2000.service.SkoringTindakanMedisService; @@ -83,6 +84,9 @@ public class IkiDanRemunerasiController extends LocaleController>> getAksesPegawaiVerifikasiLogbookDokter(HttpServletRequest request, + @RequestParam(value = "pegawaiId", required = true) Integer idPegawai) throws ParseException { + try { + List> result = logbookKinerjaDokterService.findAksesPegawai(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 akses pegawai verifikasi logbook dokter", 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 akses pegawai verifikasi logbook dokter", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + + @RequestMapping(value = "/verifikasi-logbook-dokter", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity verifikasiLogbookDokter(HttpServletRequest request, + @Valid @RequestBody LogbookKinerjaVO vo) { + try { + LogbookKinerjaVO result = logbookKinerjaService.verify(vo); + if (CommonUtil.isNotNullOrEmpty(result)) { + mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, + getMessage(MessageResource.LABEL_SUCCESS, request)); + return RestUtil.getJsonResponse(result, HttpStatus.CREATED, mapHeaderMessage); + } else { + return RestUtil.getJsonHttptatus(HttpStatus.NOT_ACCEPTABLE); + } + } catch (ServiceVOException sve) { + LOGGER.error("Got exception {} when verifikasi logbook dokter", 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 verifikasi logbook dokter", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } }