diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java index 7ba3ca41..51e622d1 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java @@ -80,16 +80,16 @@ public class Master { } public static final class IndikatorKinerja { - public static final Integer KONSUL_EKS = 447; - public static final Integer KONSUL_GADAR = 448; - public static final Integer KONSUL_REG = 449; - public static final Integer TINDAKAN_EKS = 450; - public static final Integer TINDAKAN_GADAR = 451; - public static final Integer TINDAKAN_OPS = 452; - public static final Integer TINDAKAN_REG = 453; - public static final Integer VISITE = 454; + public static final Integer KONSUL_EKS = 1; + public static final Integer KONSUL_GADAR = 2; + public static final Integer KONSUL_REG = 3; + public static final Integer TINDAKAN_EKS = 4; + public static final Integer TINDAKAN_GADAR = 5; + public static final Integer TINDAKAN_OPS = 6; + public static final Integer TINDAKAN_REG = 7; + public static final Integer VISITE = 8; - public static final Integer[] INDIKATOR_PELAYANAN_MEDIS = { 447, 448, 449, 454, 450, 451, 452, 453 }; + public static final Integer[] INDIKATOR_PELAYANAN_MEDIS = { 1, 2, 3, 4, 5, 6, 7, 8 }; } public static final class Jabatan { diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/BobotJenisIndikatorDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/BobotJenisIndikatorDao.java index 8773a903..184d853a 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/BobotJenisIndikatorDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/BobotJenisIndikatorDao.java @@ -14,8 +14,10 @@ import com.jasamedika.medifirst2000.entities.BobotJenisIndikator; @Repository("BobotJenisIndikatorDao") public interface BobotJenisIndikatorDao extends PagingAndSortingRepository { - @Query("select new Map(bj.noRec as noRec,bj.bulan as bulanBerlaku," + "bj.jenisIndikator as jenisIndikatorId," - + "(case when bj.jenisIndikator = 1 then 'Kuantitas' " + "when bj.jenisIndikator = 2 then 'Kualitas' " + @Query("select new Map(bj.noRec as noRec," + + "bj.bulan as bulanBerlaku,to_char(bj.bulan,'MM-yyyy') as bulanBerlakuFormatted," + + "bj.jenisIndikator as jenisIndikatorId," + "(case when bj.jenisIndikator = 1 then 'Kuantitas' " + + "when bj.jenisIndikator = 2 then 'Kualitas' " + "when bj.jenisIndikator = 3 then 'Perilaku' end) as jenisIndikator," + "kj.id as kelompokJabatanId,kj.namaKelompokJabatan as kelompokJabatan," + "bj.persentase as persentase) " + "from BobotJenisIndikator bj " + "left join bj.kelompokJabatan kj " + "where bj.statusEnabled is true " diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapPegawaiJabatanToUnitKerjaDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapPegawaiJabatanToUnitKerjaDao.java index d92eca2b..c5d733a7 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapPegawaiJabatanToUnitKerjaDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapPegawaiJabatanToUnitKerjaDao.java @@ -463,4 +463,9 @@ public interface MapPegawaiJabatanToUnitKerjaDao extends CrudRepository> findNilaiJabatanByPegawai(@Param("pegawaiId") Integer idPegawai); + @Query("select new Map(mj.pegawaiId as pegawaiId,mj.jabatanId as jabatanId) " + + "from MapPegawaiJabatanToUnitKerja mj " + "where mj.statusEnabled is true " + + "and mj.subUnitKerjaPegawaiId = :subunitKerjaId") + List> findPegawaiJabatanBySubunitKerja(@Param("subunitKerjaId") Integer idSubunitKerja); + } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/TargetLayananDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/TargetLayananDao.java index 4dd893e7..6a0d2165 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/TargetLayananDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/TargetLayananDao.java @@ -1,5 +1,6 @@ package com.jasamedika.medifirst2000.dao; +import java.util.Date; import java.util.List; import java.util.Map; @@ -13,24 +14,39 @@ import com.jasamedika.medifirst2000.entities.TargetLayanan; @Repository("targetLayananDao") public interface TargetLayananDao extends CrudRepository { - @Query("select new Map(sk.id as kelompokKerjaId," + "ikm.id as indikatorId," - + "tl.target as target,to_char(tl.periode,'yyyy-MM') as periode,tl.tglHitung as tglHitung) " - + "from TargetLayanan tl " + "inner join tl.subUnitKerjaPegawai sk " + "inner join tl.indikator ikm " - + "where sk.statusEnabled is true " + "and ikm.statusEnabled is true and ikm.statusVerifikasi is true " + @Query("select new Map(sk.id as kelompokKerjaId," + "ikd.id as indikatorId," + "tl.target as target," + + "to_char(tl.periode,'yyyy-MM') as periode," + "tl.tglHitung as tglHitung) " + "from TargetLayanan tl " + + "inner join tl.subUnitKerjaPegawai sk " + "inner join tl.indikatorDetail ikd " + + "inner join ikd.indikatorKinerja ikm " + "where sk.statusEnabled is true " + + "and ikd.statusEnabled is true " + "and ikm.statusEnabled is true and ikm.statusVerifikasi is true " + "and to_char(tl.periode,'yyyy-MM') between :tglAwal and :tglAkhir " + "order by sk.name, tl.tglHitung desc") public List> getLastTargetLayanan(@Param("tglAwal") String tglAwal, @Param("tglAkhir") String tglAkhir); - @Query("select distinct new Map(tl.subUnitKerjaPegawaiId as kelompokKerjaId," + "tl.indikatorId as indikatorId," - + "pg.id as pegawaiId," + "tl.target as target," + "tl.capaian as capaian," + "tl.tglHitung as tglHitung) " + @Query("select distinct new Map(tl.subUnitKerjaPegawaiId as kelompokKerjaId," + + "tl.indikatorDetailId as indikatorId," + "pg.id as pegawaiId," + + "tl.target as target,tl.capaian as capaian,tl.tglHitung as tglHitung) " + "from TargetLayanan tl, MapPegawaiJabatanToUnitKerja mj " + "inner join mj.pegawai pg " + "where tl.subUnitKerjaPegawaiId = mj.subUnitKerjaPegawaiId " + "and tl.statusEnabled is true " + "and mj.statusEnabled is true " + "and pg.statusEnabled is true " + "and pg.kategoryPegawaiId in (:listKategoryId) " + "and pg.jenisPegawaiId = :jenisPegawaiId " + "and to_char(tl.periode,'yyyy-MM') = :bulan " - + "order by tl.subUnitKerjaPegawaiId, tl.indikatorId, tl.tglHitung desc, pg.namaLengkap") + + "order by tl.subUnitKerjaPegawaiId, tl.indikatorDetailId, tl.tglHitung desc, pg.namaLengkap") public List> findDataPembagianTarget(@Param("listKategoryId") List listIdKategori, @Param("jenisPegawaiId") Integer idJenisPegawai, @Param("bulan") String bulan); + @Query("select tl from TargetLayanan tl " + "where tl.statusEnabled is true " + + "and to_char(tl.periode,'yyyy-MM') between :tglAwal and :tglAkhir " + + "order by tl.subUnitKerjaPegawaiId, indikatorDetailId, tl.periode, tl.tglHitung desc") + public List findAllTargetLayanan(@Param("tglAwal") String tglAwal, + @Param("tglAkhir") String tglAkhir); + + @Query("select tl from TargetLayanan tl " + "where tl.statusEnabled is true " + + "and to_char(tl.periode,'yyyy-MM') between :tglAwal and :tglAkhir " + + "and tl.subUnitKerjaPegawaiId = :kelompokKerjaId " + + "order by tl.subUnitKerjaPegawaiId, indikatorDetailId, tl.periode, tl.tglHitung desc") + public List findAllTargetLayanan(@Param("tglAwal") String tglAwal, + @Param("tglAkhir") String tglAkhir, @Param("kelompokKerjaId") Integer idKelompokKerja); + } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/IkiDanRemunerasiService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/IkiDanRemunerasiService.java index 1c312628..2468be4d 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/IkiDanRemunerasiService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/IkiDanRemunerasiService.java @@ -30,7 +30,8 @@ public interface IkiDanRemunerasiService { public Map savePirDanIku(List vo); - public List findAllTargetCapaianLayanan(String strPeriode, Integer idKsm) - throws ParseException; + public List calcTargetCapaianLayanan(String strPeriode, Integer idKsm) throws ParseException; + + public List findAllTargetCapaianLayanan(String strPeriode, Integer idKsm) throws ParseException; } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/TargetLayananService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/TargetLayananService.java index 58d996c7..86b17e3f 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/TargetLayananService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/TargetLayananService.java @@ -12,7 +12,7 @@ import com.jasamedika.medifirst2000.vo.custom.TargetLayananCustomVO; public interface TargetLayananService extends BaseVoService { - List addAll(List vos) + List addAll(List vos, Long periodeHitung) throws JpaSystemException, ServiceVOException, ParseException; } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/IkiDanRemunerasiServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/IkiDanRemunerasiServiceImpl.java index 43fb9fb3..b37c43ba 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/IkiDanRemunerasiServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/IkiDanRemunerasiServiceImpl.java @@ -21,7 +21,7 @@ import org.springframework.transaction.annotation.Transactional; import com.jasamedika.medifirst2000.constants.Master; import com.jasamedika.medifirst2000.converter.BaseConverterImpl; import com.jasamedika.medifirst2000.dao.IkiDanRemunerasiDao; -import com.jasamedika.medifirst2000.dao.IndikatorKinerjaDao; +import com.jasamedika.medifirst2000.dao.IndikatorKinerjaDetailDao; import com.jasamedika.medifirst2000.dao.MonitoringAbsenDao; import com.jasamedika.medifirst2000.dao.RunningNumberDao; import com.jasamedika.medifirst2000.dao.SettingPirSdmDao; @@ -32,7 +32,7 @@ import com.jasamedika.medifirst2000.dao.SubUnitKerjaDao; import com.jasamedika.medifirst2000.dao.TargetLayananDao; import com.jasamedika.medifirst2000.entities.EvaluasiJabatan; import com.jasamedika.medifirst2000.entities.IkiDanRemunerasi; -import com.jasamedika.medifirst2000.entities.IndikatorKinerja; +import com.jasamedika.medifirst2000.entities.IndikatorKinerjaDetail; import com.jasamedika.medifirst2000.entities.KelompokTransaksi; import com.jasamedika.medifirst2000.entities.Pegawai; import com.jasamedika.medifirst2000.entities.PegawaiHistoriRekap; @@ -43,6 +43,7 @@ import com.jasamedika.medifirst2000.entities.StrukHistori; import com.jasamedika.medifirst2000.entities.StrukPelayanan; import com.jasamedika.medifirst2000.entities.SubUnitKerjaPegawai; import com.jasamedika.medifirst2000.entities.SuratKeputusan; +import com.jasamedika.medifirst2000.entities.TargetLayanan; import com.jasamedika.medifirst2000.entities.UnitKerjaPegawai; import com.jasamedika.medifirst2000.service.IkiDanRemunerasiService; import com.jasamedika.medifirst2000.util.CommonUtil; @@ -50,7 +51,7 @@ import com.jasamedika.medifirst2000.util.CurrencyUtil; import com.jasamedika.medifirst2000.util.StringUtil; import com.jasamedika.medifirst2000.vo.EvaluasiJabatanVO; import com.jasamedika.medifirst2000.vo.IkiDanRemunerasiVO; -import com.jasamedika.medifirst2000.vo.IndikatorKinerjaVO; +import com.jasamedika.medifirst2000.vo.IndikatorKinerjaDetailVO; import com.jasamedika.medifirst2000.vo.KelompokTransaksiVO; import com.jasamedika.medifirst2000.vo.PegawaiVO; import com.jasamedika.medifirst2000.vo.RuanganVO; @@ -65,39 +66,9 @@ import com.jasamedika.medifirst2000.vo.custom.TargetLayananCustomVO; @Service("IkiDanRemunerasiService") public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements IkiDanRemunerasiService { - @Autowired - private IkiDanRemunerasiDao ikiDanRemunerasiDao; - - @Autowired - private StrukPelayananDao strukPelayananDao; - - @Autowired - private MonitoringAbsenDao monitoringAbsenDao; - - @Autowired - private SettingPirSdmDao settingPirSdmDao; - - @Autowired - private RunningNumberDao runningNumberDao; - - @Autowired - private StrukHistoriDao strukHistoriDao; - @Autowired private BaseConverterImpl strukHistoriConverter; - @Autowired - private TargetLayananDao targetLayananDao; - - @Autowired - private SkoringTindakanMedisDao skoringTindakanMedisDao; - - @Autowired - private IndikatorKinerjaDao indikatorKinerjaDao; - - @Autowired - private SubUnitKerjaDao subunitKerjaDao; - @Autowired private BaseConverterImpl ikiDanRemunerasiConverter; @@ -126,7 +97,37 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik private BaseConverterImpl pegawaiConverter; @Autowired - private BaseConverterImpl indikatorKinerjaConverter; + private BaseConverterImpl indikatorKinerjaDetailConverter; + + @Autowired + private IkiDanRemunerasiDao ikiDanRemunerasiDao; + + @Autowired + private StrukPelayananDao strukPelayananDao; + + @Autowired + private MonitoringAbsenDao monitoringAbsenDao; + + @Autowired + private SettingPirSdmDao settingPirSdmDao; + + @Autowired + private RunningNumberDao runningNumberDao; + + @Autowired + private StrukHistoriDao strukHistoriDao; + + @Autowired + private TargetLayananDao targetLayananDao; + + @Autowired + private SkoringTindakanMedisDao skoringTindakanMedisDao; + + @Autowired + private IndikatorKinerjaDetailDao indikatorKinerjaDetailDao; + + @Autowired + private SubUnitKerjaDao subunitKerjaDao; @Override public Map loadData() { @@ -459,7 +460,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik } @Override - public List findAllTargetCapaianLayanan(String strPeriode, Integer idKsm) + public List calcTargetCapaianLayanan(String strPeriode, Integer idKsm) throws ParseException { List result = new ArrayList<>(); @@ -469,14 +470,13 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik Date periode = sdf.parse(strPeriode); // get_few_months_earlier - Integer jmlBulan = Integer.valueOf(GetSettingDataFixed("jmlBlnHitungTargetMedis")); Calendar calTglAwal = Calendar.getInstance(); calTglAwal.setTime(periode); calTglAwal.set(Calendar.HOUR_OF_DAY, 0); calTglAwal.set(Calendar.MINUTE, 0); calTglAwal.set(Calendar.SECOND, 0); calTglAwal.set(Calendar.DAY_OF_MONTH, 1); - calTglAwal.add(Calendar.MONTH, -jmlBulan); + calTglAwal.add(Calendar.MONTH, -Integer.valueOf(GetSettingDataFixed("jmlBlnHitungTargetMedis"))); // get_this_period Calendar bulan = Calendar.getInstance(); @@ -488,8 +488,8 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik List listRuangEks = splitDataSettingDatafixed("IdRuanganEksekutif"); - List listIndikatorPelayanan = indikatorKinerjaDao - .findIndikatorById(Arrays.asList(Master.IndikatorKinerja.INDIKATOR_PELAYANAN_MEDIS)); + List listIndikatorPelayanan = indikatorKinerjaDetailDao + .findByListId(Arrays.asList(Master.IndikatorKinerja.INDIKATOR_PELAYANAN_MEDIS)); List> dataLayananRaw = new ArrayList<>(); if (CommonUtil.isNotNullOrEmpty(idKsm)) { @@ -609,7 +609,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik } for (SubUnitKerjaPegawai kelompokKerja : listKelompokKerja) { - for (IndikatorKinerja indikator : listIndikatorPelayanan) { + for (IndikatorKinerjaDetail indikator : listIndikatorPelayanan) { TargetLayananCustomVO resultVo = new TargetLayananCustomVO(); List listDetail = new ArrayList<>(); @@ -784,8 +784,98 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik resultVo.setDetail(listDetail); resultVo.setKelompokKerja( subunitKerjaConverter.transferModelToVO(kelompokKerja, new SubUnitKerjaPegawaiVO())); - resultVo.setIndikator( - indikatorKinerjaConverter.transferModelToVO(indikator, new IndikatorKinerjaVO())); + resultVo.setIndikator(indikatorKinerjaDetailConverter.transferModelToVO(indikator, + new IndikatorKinerjaDetailVO())); + + result.add(resultVo); + } + } + } + + return result; + } + + @Override + public List findAllTargetCapaianLayanan(String strPeriode, Integer idKsm) + throws ParseException { + List result = new ArrayList<>(); + List data = new ArrayList<>(); + List listKelompokKerja = new ArrayList<>(); + List listIdKelompokKerja = new ArrayList<>(); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); + SimpleDateFormat sdfINA = new SimpleDateFormat("MMMM yyyy", new Locale("in", "ID")); + + Date periode = sdf.parse(strPeriode); + + // get_few_months_earlier + Calendar calTglAwal = Calendar.getInstance(); + calTglAwal.setTime(periode); + calTglAwal.set(Calendar.HOUR_OF_DAY, 0); + calTglAwal.set(Calendar.MINUTE, 0); + calTglAwal.set(Calendar.SECOND, 0); + calTglAwal.set(Calendar.DAY_OF_MONTH, 1); + calTglAwal.add(Calendar.MONTH, -Integer.valueOf(GetSettingDataFixed("jmlBlnHitungTargetMedis"))); + + // get_this_period + Calendar bulan = Calendar.getInstance(); + bulan.setTime(periode); + bulan.set(Calendar.HOUR_OF_DAY, 23); + bulan.set(Calendar.MINUTE, 59); + bulan.set(Calendar.SECOND, 0); + bulan.set(Calendar.DAY_OF_MONTH, bulan.getActualMaximum(Calendar.DAY_OF_MONTH)); + + if (CommonUtil.isNotNullOrEmpty(idKsm)) { + data = targetLayananDao.findAllTargetLayanan(sdf.format(calTglAwal.getTime()), sdf.format(bulan.getTime()), + idKsm); + } else { + data = targetLayananDao.findAllTargetLayanan(sdf.format(calTglAwal.getTime()), sdf.format(bulan.getTime())); + } + + for (TargetLayanan map : data) { + if (!listIdKelompokKerja.contains(map.getSubUnitKerjaPegawai().getId())) { + listIdKelompokKerja.add(map.getSubUnitKerjaPegawai().getId()); + } + } + + if (CommonUtil.isNotNullOrEmpty(listIdKelompokKerja)) { + listKelompokKerja = subunitKerjaDao.findSubunitKerjaById(listIdKelompokKerja); + } + + List listIndikatorPelayanan = indikatorKinerjaDetailDao + .findByListId(Arrays.asList(Master.IndikatorKinerja.INDIKATOR_PELAYANAN_MEDIS)); + + for (SubUnitKerjaPegawai kelompokKerja : listKelompokKerja) { + for (IndikatorKinerjaDetail indikator : listIndikatorPelayanan) { + + List paramPeriode = new ArrayList<>(); + TargetLayananCustomVO resultVo = new TargetLayananCustomVO(); + List listDetail = new ArrayList<>(); + for (TargetLayanan targetLayanan : data) { + if (kelompokKerja.getId().equals(targetLayanan.getSubUnitKerjaPegawai().getId()) + && indikator.getId().equals(targetLayanan.getIndikatorDetail().getId())) { + TargetLayananCustomDetailVO detail = new TargetLayananCustomDetailVO(); + detail.setDate(sdf.format(targetLayanan.getPeriode())); + detail.setBulan(sdfINA.format(targetLayanan.getPeriode())); + detail.setTarget(targetLayanan.getTarget()); + detail.setCapaian(targetLayanan.getCapaian()); + + if (!paramPeriode.contains(sdf.format(targetLayanan.getPeriode()))) { + listDetail.add(detail); + + if (!paramPeriode.contains(sdf.format(targetLayanan.getPeriode()))) { + paramPeriode.add(sdf.format(targetLayanan.getPeriode())); + } + } + } + } + + if (listDetail.size() == 4 && listDetail.get(listDetail.size() - 1).getTarget() > 0.0) { + resultVo.setDetail(listDetail); + resultVo.setKelompokKerja( + subunitKerjaConverter.transferModelToVO(kelompokKerja, new SubUnitKerjaPegawaiVO())); + resultVo.setIndikator(indikatorKinerjaDetailConverter.transferModelToVO(indikator, + new IndikatorKinerjaDetailVO())); result.add(resultVo); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/TargetLayananServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/TargetLayananServiceImpl.java index 946c0a2b..9c935ed7 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/TargetLayananServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/TargetLayananServiceImpl.java @@ -13,15 +13,20 @@ import org.springframework.stereotype.Service; import com.jasamedika.medifirst2000.converter.BaseConverterImpl; import com.jasamedika.medifirst2000.converter.TargetLayananConverter; +import com.jasamedika.medifirst2000.dao.LogbookKinerjaDokterDao; +import com.jasamedika.medifirst2000.dao.MapPegawaiJabatanToUnitKerjaDao; import com.jasamedika.medifirst2000.dao.TargetLayananDao; -import com.jasamedika.medifirst2000.entities.IndikatorKinerja; +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.entities.SubUnitKerjaPegawai; import com.jasamedika.medifirst2000.entities.TargetLayanan; import com.jasamedika.medifirst2000.entities.UnitKerjaPegawai; import com.jasamedika.medifirst2000.exception.ServiceVOException; import com.jasamedika.medifirst2000.service.TargetLayananService; import com.jasamedika.medifirst2000.util.CommonUtil; -import com.jasamedika.medifirst2000.vo.IndikatorKinerjaVO; +import com.jasamedika.medifirst2000.vo.IndikatorKinerjaDetailVO; import com.jasamedika.medifirst2000.vo.SubUnitKerjaPegawaiVO; import com.jasamedika.medifirst2000.vo.TargetLayananVO; import com.jasamedika.medifirst2000.vo.custom.TargetLayananCustomDetailVO; @@ -37,13 +42,19 @@ public class TargetLayananServiceImpl implements TargetLayananService { private BaseConverterImpl subunitKerjaConverter; @Autowired - private BaseConverterImpl indikatorKinerjaConverter; + private BaseConverterImpl indikatorKinerjaDetailConverter; @Autowired private TargetLayananDao targetLayananDao; + @Autowired + private MapPegawaiJabatanToUnitKerjaDao mapPegawaiJabatanToUnitKerjaDao; + + @Autowired + private LogbookKinerjaDokterDao logbookKinerjaDokterDao; + @Override - public List addAll(List vos) + public List addAll(List vos, Long periodeHitung) throws JpaSystemException, ServiceVOException, ParseException { List resultListVO = new ArrayList<>(); List listTargetLayanan = new ArrayList<>(); @@ -57,8 +68,8 @@ public class TargetLayananServiceImpl implements TargetLayananService { SubUnitKerjaPegawai kelompokKerja = subunitKerjaConverter.transferVOToModel(vo.getKelompokKerja(), new SubUnitKerjaPegawai()); - IndikatorKinerja indikator = indikatorKinerjaConverter.transferVOToModel(vo.getIndikator(), - new IndikatorKinerja()); + IndikatorKinerjaDetail indikator = indikatorKinerjaDetailConverter.transferVOToModel(vo.getIndikator(), + new IndikatorKinerjaDetail()); TargetLayanan targetLayanan = new TargetLayanan(); targetLayanan.setKdProfile((short) 0); @@ -67,7 +78,7 @@ public class TargetLayananServiceImpl implements TargetLayananService { targetLayanan.setSubUnitKerjaPegawai(kelompokKerja); targetLayanan.setTglHitung(tglHitung); targetLayanan.setPeriode(sdf.parse(detail.getDate())); - targetLayanan.setIndikator(indikator); + targetLayanan.setIndikatorDetail(indikator); targetLayanan.setTarget(detail.getTarget()); targetLayanan.setCapaian(detail.getCapaian()); @@ -80,12 +91,50 @@ public class TargetLayananServiceImpl implements TargetLayananService { TargetLayananVO resultVo = new TargetLayananVO(); resultVo = targetLayananConverter.transferModelToVO(resultModel, resultVo); + // pembagian target untuk anggota kelompok kerja + if (sdf.format(resultModel.getPeriode()).equals(sdf.format(new Date(periodeHitung)))) { + setKontrakKinerjaDokter(resultModel); + } + resultListVO.add(resultVo.getNoRec()); } return resultListVO; } + public void setKontrakKinerjaDokter(TargetLayanan targetLayanan) throws JpaSystemException, ServiceVOException { + List models = new ArrayList<>(); + + List> dataPegawai = mapPegawaiJabatanToUnitKerjaDao + .findPegawaiJabatanBySubunitKerja(targetLayanan.getSubUnitKerjaPegawai().getId()); + + Double detailTarget = Math.floor(targetLayanan.target / dataPegawai.size()); + if (detailTarget < 1.0) { + detailTarget = 1.0; + } + + for (Map map : dataPegawai) { + LogbookKinerjaDokter logbook = new LogbookKinerjaDokter(); + logbook.setKdProfile((short) 0); + logbook.setStatusEnabled(true); + logbook.setBulan(targetLayanan.getPeriode()); + logbook.setDetailTarget(detailTarget); + logbook.setDetailCapaian( + CommonUtil.isNotNullOrEmpty(targetLayanan.getCapaian()) ? targetLayanan.getCapaian() : 0); + logbook.setIndikatorDetail(targetLayanan.getIndikatorDetail()); + Jabatan jabatan = new Jabatan(); + jabatan.setId(Integer.valueOf(map.get("jabatanId").toString())); + logbook.setJabatan(jabatan); + Pegawai pegawai = new Pegawai(); + pegawai.setId(Integer.valueOf(map.get("pegawaiId").toString())); + logbook.setPegawai(pegawai); + + models.add(logbook); + } + + logbookKinerjaDokterDao.save(models); + } + @Override public TargetLayananVO add(TargetLayananVO vo) throws JpaSystemException, ServiceVOException { TargetLayanan targetLayanan = targetLayananConverter.transferVOToModel(vo, new TargetLayanan()); diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/TargetLayanan.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/TargetLayanan.java index 664d845a..35dfcb05 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/TargetLayanan.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/TargetLayanan.java @@ -46,12 +46,12 @@ public class TargetLayanan extends BaseTransaction { public Date periode; @ManyToOne - @JoinColumn(name = "objectindikatorfk") + @JoinColumn(name = "objectindikatordetailfk") @Caption(value = "Indikator Kinerja") - public IndikatorKinerja indikator; + public IndikatorKinerjaDetail indikatorDetail; - @Column(name = "objectindikatorfk", insertable = false, updatable = false) - public Integer indikatorId; + @Column(name = "objectindikatordetailfk", insertable = false, updatable = false) + public Integer indikatorDetailId; @Column(name = "capaian") @Caption(value = "Capaian") @@ -109,20 +109,20 @@ public class TargetLayanan extends BaseTransaction { this.periode = periode; } - public IndikatorKinerja getIndikator() { - return indikator; + public IndikatorKinerjaDetail getIndikatorDetail() { + return indikatorDetail; } - public void setIndikator(IndikatorKinerja indikator) { - this.indikator = indikator; + public void setIndikatorDetail(IndikatorKinerjaDetail indikatorDetail) { + this.indikatorDetail = indikatorDetail; } - public Integer getIndikatorId() { - return indikatorId; + public Integer getIndikatorDetailId() { + return indikatorDetailId; } - public void setIndikatorId(Integer indikatorId) { - this.indikatorId = indikatorId; + public void setIndikatorDetailId(Integer indikatorDetailId) { + this.indikatorDetailId = indikatorDetailId; } public Double getCapaian() { diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/TargetLayananVO.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/TargetLayananVO.java index 727ac290..88929b9d 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/TargetLayananVO.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/TargetLayananVO.java @@ -27,11 +27,11 @@ public class TargetLayananVO extends BaseTransactionVO { @Caption(value = "Periode") public Date periode; - @Caption(value = "Indikator Kinerja") - public IndikatorKinerjaVO indikator; + @Caption(value = "Indikator Kinerja Detail") + public IndikatorKinerjaDetailVO indikatorDetail; - @Caption(value = "Id Indikator Kinerja") - public Integer indikatorId; + @Caption(value = "Id Indikator Kinerja Detail") + public Integer indikatorDetailId; @Caption(value = "Capaian") public Double capaian; @@ -87,20 +87,20 @@ public class TargetLayananVO extends BaseTransactionVO { this.periode = periode; } - public IndikatorKinerjaVO getIndikator() { - return indikator; + public IndikatorKinerjaDetailVO getIndikatorDetail() { + return indikatorDetail; } - public void setIndikator(IndikatorKinerjaVO indikator) { - this.indikator = indikator; + public void setIndikatorDetail(IndikatorKinerjaDetailVO indikatorDetail) { + this.indikatorDetail = indikatorDetail; } - public Integer getIndikatorId() { - return indikatorId; + public Integer getIndikatorDetailId() { + return indikatorDetailId; } - public void setIndikatorId(Integer indikatorId) { - this.indikatorId = indikatorId; + public void setIndikatorDetailId(Integer indikatorDetailId) { + this.indikatorDetailId = indikatorDetailId; } public Double getCapaian() { diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananCustomVO.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananCustomVO.java index ee61174c..66d9d718 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananCustomVO.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/custom/TargetLayananCustomVO.java @@ -4,6 +4,7 @@ import java.util.List; import com.jasamedika.medifirst2000.base.vo.BaseTransactionVO; import com.jasamedika.medifirst2000.helper.Caption; +import com.jasamedika.medifirst2000.vo.IndikatorKinerjaDetailVO; import com.jasamedika.medifirst2000.vo.IndikatorKinerjaVO; import com.jasamedika.medifirst2000.vo.SubUnitKerjaPegawaiVO; @@ -12,7 +13,7 @@ public class TargetLayananCustomVO extends BaseTransactionVO { private static final long serialVersionUID = 3163629696201167352L; @Caption(value = "Indikator Kinerja") - public IndikatorKinerjaVO indikator; + public IndikatorKinerjaDetailVO indikator; @Caption(value = "Id Indikator Kinerja") public Integer indikatorId; @@ -26,11 +27,11 @@ public class TargetLayananCustomVO extends BaseTransactionVO { @Caption(value = "Detail") public List detail; - public IndikatorKinerjaVO getIndikator() { + public IndikatorKinerjaDetailVO getIndikator() { return indikator; } - public void setIndikator(IndikatorKinerjaVO indikator) { + public void setIndikator(IndikatorKinerjaDetailVO indikator) { this.indikator = indikator; } diff --git a/jasamedika-domain/src/main/resources/hibernate.cfg.xml b/jasamedika-domain/src/main/resources/hibernate.cfg.xml index 99700321..aab89c85 100644 --- a/jasamedika-domain/src/main/resources/hibernate.cfg.xml +++ b/jasamedika-domain/src/main/resources/hibernate.cfg.xml @@ -686,5 +686,7 @@ + + diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/asynctask/TargetLayananGenerating.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/asynctask/TargetLayananGenerating.java index 6f238de5..88a334f9 100644 --- a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/asynctask/TargetLayananGenerating.java +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/asynctask/TargetLayananGenerating.java @@ -50,8 +50,8 @@ public class TargetLayananGenerating extends LocaleController { try { if (CommonUtil.isNotNullOrEmpty(remunerasiService)) { LOGGER.info("Task Target Layanan : Running Generate Target Layanan"); - List rsList = targetLayananService.addAll(remunerasiService - .findAllTargetCapaianLayanan(new SimpleDateFormat("yyyy-MM").format(new Date()), null)); + List rsList = targetLayananService.addAll(remunerasiService.calcTargetCapaianLayanan( + new SimpleDateFormat("yyyy-MM").format(new Date()), null), new Date().getTime()); if (CommonUtil.isNullOrEmpty(rsList)) { LOGGER.info("Task Target Layanan : No Generating Target Layanan"); } 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 43f0eebe..fd09003b 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 @@ -239,6 +239,27 @@ public class IkiDanRemunerasiController extends LocaleController> calculateTargetLayanan(HttpServletRequest request, + @RequestParam(value = "periode", required = true) String periode, + @RequestParam(value = "ksmId", required = false) Integer idKsm) throws ParseException { + try { + List result = service.calcTargetCapaianLayanan(periode, idKsm); + 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 calculate target dan capaian layanan", 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 calculate target dan capaian layanan", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + @RequestMapping(value = "/get-all-target-dan-capaian-layanan", method = RequestMethod.GET) public ResponseEntity> getAllTargetLayanan(HttpServletRequest request, @RequestParam(value = "periode", required = true) String periode, @@ -986,7 +1007,7 @@ public class IkiDanRemunerasiController extends LocaleController deleteMasterBobotJenisIndikator(HttpServletRequest request, @RequestParam(value = "noRec", required = true) String norec) throws ParseException { try { diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java index 96d25526..8408aa45 100644 --- a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java @@ -5531,10 +5531,11 @@ public class SdmController extends LocaleController { } @RequestMapping(value = "/save-target-layanan/", method = RequestMethod.POST) - public ResponseEntity> addAllTargetLayanan(@RequestBody List vos, - HttpServletRequest request) throws ParseException { + public ResponseEntity> saveTargetLayanan(HttpServletRequest request, + @RequestBody List vos, + @RequestParam(value = "periodeHitung", required = true) Long periodeHitung) throws ParseException { try { - List result = targetLayananService.addAll(vos); + List result = targetLayananService.addAll(vos, periodeHitung); if (null != result) mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, getMessage(MessageResource.LABEL_SUCCESS, request));