diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukPaketDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukPaketDao.java index 915b8e55..8faf45d6 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukPaketDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukPaketDao.java @@ -3,10 +3,14 @@ package com.jasamedika.medifirst2000.dao; import com.jasamedika.medifirst2000.entities.MapProdukPaket; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; +import java.util.Set; + /** * @author Salman Manoe * @version 1.0.0 * @since 21 Sep 2023 */ public interface MapProdukPaketDao extends JpaRepository { + List findByPaketIdIn(Set setPaketId); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukPaketToProdukDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukPaketToProdukDao.java index 5458b388..3164348b 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukPaketToProdukDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukPaketToProdukDao.java @@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import java.util.List; +import java.util.Set; /** * @author Salman @@ -18,7 +19,9 @@ public interface MapProdukPaketToProdukDao extends JpaRepository findAllByPaketId(@Param("paketId") Integer paketId); + @Query("select mproduk from MapProdukPaketToProduk mproduk " + "inner join mproduk.mapProdukPaket mpaket " + + "where mpaket.paketId = :paketId") + List findByPaketId(@Param("paketId") Integer paketId); + + List findByProdukIdIn(Set setProdukId); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDao.java index c9af4388..f8cbe417 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDao.java @@ -12,6 +12,7 @@ import org.springframework.stereotype.Repository; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.Set; /** * Repository class for PelayananPasien @@ -183,7 +184,7 @@ public interface PelayananPasienDao extends JpaRepository findAll(@Param("listNoRec") List listNoRec); - @Query("select new Map(pr.id as idProduk,pr.namaProduk as namaProduk," + String LOGBOOK_DOKTER = "select new Map(pr.id as idProduk,pr.namaProduk as namaProduk," + "pr.detailJenisProdukId as idDetailJenisProduk,pr.golonganProdukId as idGolonganProduk," + "djp.jenisProdukId as idJenisProduk," + "pd.voucherPaketId as idVoucherDaftar," + "pd.kelompokPasienId as idKelompokPasien," + "case when pd.kelompokPasienId = 2 then 1 " @@ -202,34 +203,40 @@ public interface PelayananPasienDao extends JpaRepository> findPelayananPasienByPetugasAndTanggal(@Param("pegawaiId") Integer idPegawai, @Param("tglAwal") Date tglAwal, @Param("tglAkhir") Date tglAkhir); + String PARAMETER_LOGBOOK_PAKET = "and pd.voucherPaketId in (:setIdVoucher) " + "and pp.produkId in (:listIdPaket) "; + + @Query(LOGBOOK_DOKTER + WHERE_LOGBOOK_DOKTER + PARAMETER_LOGBOOK_PAKET + GROUP_LOGBOOK_DOKTER + + ORDER_LOGBOOK_DOKTER) + List> findPelayananPasienByPaket(@Param("setIdVoucher") Set setIdVoucher, + @Param("listIdPaket") List listIdPaket); + @Query("select new Map(jp.jenisPetugasPe as jenisPelaksana," + "pr.namaProduk as namaProduk," + "coalesce(pp.hargaJual,0) as hargaJual," + "coalesce(pp.hargaDiscount,0) as diskon," + "coalesce(pp.jumlah,0) as jumlah," + "kp.kelompokPasien as kelompokPasien," @@ -276,4 +293,11 @@ public interface PelayananPasienDao extends JpaRepository> findPelayananPasienByTagihanPendaftaran(@Param("noRegistrasi") String noRegistrasi); List findByPasienDaftarPasienDaftarNoRecIn(List idDaftarList); + + @Query("select new Map(pd.voucherPaketId as norecVoucher," + "pp.produkId as idProduk," + "pp.jumlah as jumlah) " + + "from PelayananPasien pp " + "inner join pp.pasienDaftar apd " + "inner join apd.pasienDaftar pd " + + "where (pp.statusEnabled is true or pp.statusEnabled is null) " + + "and (pd.statusEnabled is true or pd.statusEnabled is null) " + "and pp.strukResepId is null " + + "and pd.voucherPaketId in (:listIdVoucher)") + List> findJumlahLayananByVoucherIn(@Param("listIdVoucher") Set listIdVoucher); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienPetugasDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienPetugasDao.java index 29b17e99..ff9e6c26 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienPetugasDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienPetugasDao.java @@ -49,5 +49,8 @@ public interface PelayananPasienPetugasDao extends PagingAndSortingRepository findByPelayananPasien(@Param("noRec") String noRec); - List findAllByPelayananPasienNoRecIn(List listNoRecPelayanan); + @Query("select ppp from PelayananPasienPetugas ppp " + "left join ppp.pelayananPasien pp " + + "where pp.noRec in (:listNoRecPelayanan)") + List findAllByPelayananPasienNoRecIn( + @Param("listNoRecPelayanan") List listNoRecPelayanan); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/VoucherPaketDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/VoucherPaketDao.java index 35615af9..e33c8fb7 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/VoucherPaketDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/VoucherPaketDao.java @@ -2,11 +2,9 @@ package com.jasamedika.medifirst2000.dao; import com.jasamedika.medifirst2000.entities.VoucherPaket; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; import java.util.List; -import java.util.Map; +import java.util.Set; /** * @author Salman @@ -23,10 +21,13 @@ public interface VoucherPaketDao extends JpaRepository { */ VoucherPaket findByKode(String kode); - @Query("select new Map(vp.noRec as idVoucher,vp.paketId as idPaket," + "mpaket.produkId as idProduk," - + "mproduk.produkPaketId as idProdukPaket," + "mproduk.jenisMapping as jenisMapping) " - + "from MapProdukPaketToProduk mpaket " + "inner join mpaket.produkPaket mproduk, VoucherPaket vp " - + "where vp.paketId = mproduk.paketId " + "and vp.isSelesai is true and vp.isBatal is false " - + "and vp.noRec in (:listNorec)") - List> findPelayananPaket(@Param("listNorec") List listIdVoucherPaket); + /** + * Query untuk mendapatkan data voucher paket bedasarkan kumpulan no record + * tertentu + * + * @param norecs + * daftar no record data voucher + * @return data entitas VoucherPaket + */ + List findAllByNoRecIn(Set norecs); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MapProdukPaketToProdukServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MapProdukPaketToProdukServiceImpl.java index e5ade9a4..04cc2598 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MapProdukPaketToProdukServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MapProdukPaketToProdukServiceImpl.java @@ -48,7 +48,7 @@ public class MapProdukPaketToProdukServiceImpl implements MapProdukPaketToProduk { MapProdukPaket mapProdukPaket = new MapProdukPaket(); mapProdukPaket.setNoRec(vo.getProdukPaket().getNoRec()); - model.setProdukPaket(mapProdukPaket); + model.setMapProdukPaket(mapProdukPaket); } { Produk produk = new Produk(); @@ -68,7 +68,7 @@ public class MapProdukPaketToProdukServiceImpl implements MapProdukPaketToProduk { MapProdukPaket mapProdukPaket = new MapProdukPaket(); mapProdukPaket.setNoRec(vo.getProdukPaket().getNoRec()); - model.setProdukPaket(mapProdukPaket); + model.setMapProdukPaket(mapProdukPaket); } { Produk produk = new Produk(); @@ -96,7 +96,7 @@ public class MapProdukPaketToProdukServiceImpl implements MapProdukPaketToProduk return null; MapProdukPaketToProdukVO result = mapPaketProdukConverter.transferModelToVO(model, new MapProdukPaketToProdukVO()); - MapProdukPaket mapProdukPaket = model.getProdukPaket(); + MapProdukPaket mapProdukPaket = model.getMapProdukPaket(); MapProdukPaketVO mapProdukPaketVO = mapProdukPaketConverter.transferModelToVO(mapProdukPaket, new MapProdukPaketVO()); { diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PelayananPasienServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PelayananPasienServiceImpl.java index beea14d8..bfb536cb 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PelayananPasienServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PelayananPasienServiceImpl.java @@ -44,6 +44,7 @@ import static com.jasamedika.medifirst2000.constants.Master.Ruangan.*; import static com.jasamedika.medifirst2000.constants.Master.SubUnitKerja.*; import static com.jasamedika.medifirst2000.constants.Master.TipePegawai.PURNA_WAKTU; import static com.jasamedika.medifirst2000.enums.JenisMappingProdukPaket.TINDAKAN_UTAMA; +import static com.jasamedika.medifirst2000.enums.JenisMappingProdukPaket.VISITE_UTAMA; /** * Implement class for PelayananPasienService @@ -117,6 +118,9 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel @Autowired private VoucherPaketDao voucherPaketDao; + @Autowired + private MapProdukPaketDao mapProdukPaketDao; + @Autowired private MapProdukPaketToProdukDao mapProdukPaketToProdukDao; @@ -552,27 +556,32 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel */ List> listData = pelayananPasienDao.findPelayananPasienByPetugasAndTanggal(idPegawai, tglAwal, tglAkhir); - /* - * Filtering selain logbook fixed pay - */ - List> listRatedPay = listData.stream().filter( - d -> (CommonUtil.isNullOrEmpty(d.get("isPaket")) || !Boolean.parseBoolean(d.get("isPaket").toString())) - && (CommonUtil.isNullOrEmpty(d.get("idPaketLayanan")) - && !Integer.valueOf(d.get("idProduk").toString()).equals(d.get("idPaketLayanan")))) - .collect(Collectors.toList()); - /* - * Set awal logbook fixed pay - */ - List> listFixedPay = listData.stream() - .filter(d -> (CommonUtil.isNotNullOrEmpty(d.get("idVoucherDaftar")) - && !Boolean.parseBoolean(d.get("isPaket").toString()) - && CommonUtil.isNotNullOrEmpty(d.get("idPaketLayanan")) - && Integer.valueOf(d.get("idProduk").toString()).equals(d.get("idPaketLayanan"))) - || (CommonUtil.isNotNullOrEmpty(d.get("idVoucherLayanan")) - && Boolean.parseBoolean(d.get("isPaket").toString()) && CommonUtil - .isNotNullOrEmpty(d.get("idPaketLayanan")) - && !Integer.valueOf(d.get("idProduk").toString()).equals(d.get("idPaketLayanan")))) - .collect(Collectors.toList()); + List> listRatedPay = new ArrayList<>(listData); + List> listFixedPay = new ArrayList<>(); + Set listIdVoucher = listData.stream().filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idVoucherDaftar"))) + .map(d -> d.get("idVoucherDaftar").toString()).collect(Collectors.toSet()); + if (CommonUtil.isNotNullOrEmpty(listIdVoucher)) { + List listVoucher = voucherPaketDao.findAllByNoRecIn(listIdVoucher); + Set listIdPaket = listVoucher.stream().map(VoucherPaket::getPaketId).collect(Collectors.toSet()); + /* + * Filtering selain logbook fixed pay + */ + listRatedPay = listData.stream() + .filter(d -> !Boolean.parseBoolean(d.get("isPaket").toString()) + && !listIdPaket.contains(Integer.parseInt(d.get("idProduk").toString()))) + .collect(Collectors.toList()); + /* + * Set awal logbook fixed pay + */ + listFixedPay = listData.stream() + .filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idVoucherDaftar")) + && (!Boolean.parseBoolean(d.get("isPaket").toString()) + && listIdPaket.contains(Integer.parseInt(d.get("idProduk").toString()))) + || (CommonUtil.isNotNullOrEmpty(d.get("idVoucherLayanan")) + && Boolean.parseBoolean(d.get("isPaket").toString()) && !listIdPaket + .contains(Integer.parseInt(d.get("idProduk").toString())))) + .collect(Collectors.toList()); + } /* * Set persen jasa dan harga jasa pasien bpjs di ibs, icu */ @@ -581,7 +590,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel /* * Mapping set awal persentase jasa remunerasi dan harga jasa remunerasi */ - for (Map d : listData) + for (Map d : listRatedPay) if (DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana")) && CommonUtil.isNotNullOrEmpty(d.get("totalDiskon")) && Double.parseDouble(d.get("totalDiskon").toString()) > 0.0 && CommonUtil.isNullOrEmpty(d.get("idSayatan"))) { @@ -682,7 +691,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel * Alokasi data diambil terlebih dahulu untuk kelompok BPJS, Jaminan * Kemenkes */ - List> rawDataBpjs0 = listData + List> rawDataBpjs0 = listRatedPay .stream().filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idKelompokPasien")) && Arrays .asList(KELOMPOK_BPJS).contains(Integer.parseInt(d.get("idKelompokPasien").toString()))) .collect(Collectors.toList()); @@ -996,7 +1005,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel * nonshift */ List> listDataJamKerja = new ArrayList<>(); - for (Map d : listData) { + for (Map d : listRatedPay) { if (CommonUtil.isNotNullOrEmpty(d.get("tglPelayanan"))) { LocalDate tglPelayanan = ((Date) d.get("tglPelayanan")).toInstant().atZone(ZoneId.systemDefault()) .toLocalDate(); @@ -1028,7 +1037,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel * Asumsi jam kerja dokter nonshift */ List> listDataLuarJamKerja = new ArrayList<>(); - for (Map d : listData) { + for (Map d : listRatedPay) { if (CommonUtil.isNotNullOrEmpty(d.get("tglPelayanan"))) { LocalDate tglPelayanan = ((Date) d.get("tglPelayanan")).toInstant().atZone(ZoneId.systemDefault()) .toLocalDate(); @@ -1486,68 +1495,19 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel .sorted(Comparator.comparing(o -> o.get("namaProduk").toString())).collect(Collectors.toList()); result.put("klaim-mpp", listPelayananKlaimMpp); } - // { - // List> listPelayananFixedPay = - // setPelayananFixedPay(listFixedPay); - // result.put("fixed-pay", listPelayananFixedPay); - // } + if (CommonUtil.isNotNullOrEmpty(listFixedPay)) { + List> listPelayananFixedPay = setPelayananPaket(listFixedPay); + result.put("fixed-pay", listPelayananFixedPay); + } return result; } - private List> setPelayananFixedPay(List> listData) { - List listIdProduk = new ArrayList<>(); - List listPersenJasa = new ArrayList<>(); - List listHargaJasa = new ArrayList<>(); - List listHargaJual = new ArrayList<>(); - List listIdKelompokPasien = new ArrayList<>(); - List listTanggal = new ArrayList<>(); - List listJenisRuangan = new ArrayList<>(); - List> listFixedPay = new ArrayList<>(); - { - List> listKepalaPaket = listData.stream() - .filter(d -> (CommonUtil.isNotNullOrEmpty(d.get("idVoucherDaftar")) - && !Boolean.parseBoolean(d.get("isPaket").toString()) - && CommonUtil.isNotNullOrEmpty(d.get("idPaketLayanan")) - && Integer.valueOf(d.get("idProduk").toString()).equals(d.get("idPaketLayanan")))) - .collect(Collectors.toList()); - Set listIdVoucherKepalaPaket = listKepalaPaket.stream() - .map(p -> p.get("idVoucherLayanan").toString()).collect(Collectors.toSet()); - List> pelayananKepalaPaket = voucherPaketDao - .findPelayananPaket(new ArrayList<>(listIdVoucherKepalaPaket)); - Set listIdEntri = pelayananKepalaPaket.stream() - .filter(kp -> TINDAKAN_UTAMA.name().equals(kp.get("jenisMapping").toString())) - .map(kp -> Integer.valueOf(kp.get("idProduk").toString())).collect(Collectors.toSet()); - List> listDataUtama = listData.stream() - .filter(d -> listIdEntri.contains(Integer.parseInt(d.get("idProduk").toString()))) - .collect(Collectors.toList()); - listIdVoucherKepalaPaket.forEach(idVoucher -> { - List> dataUtama = listDataUtama.stream() - .filter(d -> idVoucher.equals(d.get("idVoucherLayanan"))).collect(Collectors.toList()); - }); - } + private List> setPelayananPaket(List> listData) { + List> listFixedPay = transformPelayananPaket(listData); /* * Populate data filter */ - listFixedPay.forEach(d -> { - if (!listIdProduk.contains(Integer.parseInt(d.get("idProduk").toString()))) - listIdProduk.add(Integer.valueOf(d.get("idProduk").toString())); - if (!listPersenJasa.contains(d.get("persenJasa").toString())) - listPersenJasa.add(d.get("persenJasa").toString()); - if (!listHargaJasa.contains(Double.parseDouble(d.get("hargaJasa").toString()))) - listHargaJasa.add(Double.valueOf(d.get("hargaJasa").toString())); - if (!listHargaJual.contains(Double.parseDouble(d.get("hargaJual").toString()))) - listHargaJual.add(Double.valueOf(d.get("hargaJual").toString())); - if (!listIdKelompokPasien.contains(Integer.parseInt(d.get("idKelompokPasien").toString()))) - listIdKelompokPasien.add(Integer.valueOf(d.get("idKelompokPasien").toString())); - if (!listTanggal.contains(d.get("tanggal").toString())) - listTanggal.add(d.get("tanggal").toString()); - if (!listJenisRuangan.contains(d.get("jenisRuangan").toString())) - listJenisRuangan.add(d.get("jenisRuangan").toString()); - }); - /* - * Pengelompokkan tanggal pelayanan - */ - List> dataTanggal = groupingTanggalFfs(listFixedPay); + List> dataTanggal = groupingTanggalPaket(listFixedPay); /* * Pengelompokkan produk layanan */ @@ -1585,6 +1545,143 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel return result; } + private List> groupingTanggalPaket(List> listFixedPay) { + List listIdProduk = new ArrayList<>(); + List listPersenJasa = new ArrayList<>(); + List listHargaJasa = new ArrayList<>(); + List listHargaJual = new ArrayList<>(); + List listIdKelompokPasien = new ArrayList<>(); + List listTanggal = new ArrayList<>(); + List listJenisRuangan = new ArrayList<>(); + listFixedPay.forEach(d -> { + if (!listIdProduk.contains(Integer.parseInt(d.get("idProduk").toString()))) + listIdProduk.add(Integer.valueOf(d.get("idProduk").toString())); + if (!listPersenJasa.contains(d.get("persenJasa").toString())) + listPersenJasa.add(d.get("persenJasa").toString()); + if (!listHargaJasa.contains(Double.parseDouble(d.get("hargaJasa").toString()))) + listHargaJasa.add(Double.valueOf(d.get("hargaJasa").toString())); + if (!listHargaJual.contains(Double.parseDouble(d.get("hargaJual").toString()))) + listHargaJual.add(Double.valueOf(d.get("hargaJual").toString())); + if (!listIdKelompokPasien.contains(Integer.parseInt(d.get("idKelompokPasien").toString()))) + listIdKelompokPasien.add(Integer.valueOf(d.get("idKelompokPasien").toString())); + if (!listTanggal.contains(d.get("tanggal").toString())) + listTanggal.add(d.get("tanggal").toString()); + if (!listJenisRuangan.contains(d.get("jenisRuangan").toString())) + listJenisRuangan.add(d.get("jenisRuangan").toString()); + }); + /* + * Pengelompokkan tanggal pelayanan + */ + return groupingTanggalFfs(listFixedPay); + } + + private List> transformPelayananPaket(List> listData) { + Set setIdVoucher = listData.stream().map(d -> d.get("idVoucherDaftar").toString()) + .collect(Collectors.toSet()); + List listVoucher = voucherPaketDao.findAllByNoRecIn(setIdVoucher); + List listMapPaket = mapProdukPaketDao + .findByPaketIdIn(listVoucher.stream().map(VoucherPaket::getPaketId).collect(Collectors.toSet())); + List listMapProduk = mapProdukPaketToProdukDao.findByProdukIdIn( + listData.stream().map(d -> Integer.parseInt(d.get("idProduk").toString())).collect(Collectors.toSet())); + List listUndonePaketUtama = new ArrayList<>(); + { + /* + * Mengecek seluruh data layanan lintas logbook untuk paket tindakan + * utama yang belum selesai + */ + List> listPelayanan = pelayananPasienDao.findJumlahLayananByVoucherIn(setIdVoucher); + listVoucher.forEach(voucher -> { + List listPaketUtama = listMapPaket.stream() + .filter(mpaket -> mpaket.getPaketId().equals(voucher.getPaketId()) + && (TINDAKAN_UTAMA.equals(mpaket.getJenisMapping()) + || VISITE_UTAMA.equals(mpaket.getJenisMapping()))) + .collect(Collectors.toList()); + boolean paketUtamaSelesai = true; + for (MapProdukPaket paket : listPaketUtama) { + List listIdEntri = listMapProduk.stream() + .filter(mproduk -> paket.getNoRec().equals(mproduk.getMapProdukPaketId())) + .map(MapProdukPaketToProduk::getProdukId).collect(Collectors.toList()); + Double jumlahLayanan = listPelayanan.stream() + .filter(p -> listIdEntri.contains(Integer.parseInt(p.get("idProduk").toString()))) + .map(p -> Double.parseDouble(p.get("jumlah").toString())).reduce(Double::sum).orElse(0.0); + if (paket.getJumlah().doubleValue() < jumlahLayanan) { + paketUtamaSelesai = false; + break; + } + } + if (!paketUtamaSelesai) + listUndonePaketUtama.add(voucher.getNoRec()); + }); + } + List> listData1; + { + /* + * Penerapan hasil pengecekan lintas logbook untuk logbook yang + * dievaluasi + */ + List setIdPaket = listVoucher.stream().map(VoucherPaket::getPaketId).collect(Collectors.toList()); + List listPaketUtama = listMapPaket.stream() + .filter(mpaket -> setIdPaket.contains(mpaket.getPaketId()) + && (TINDAKAN_UTAMA.equals(mpaket.getJenisMapping()) + || VISITE_UTAMA.equals(mpaket.getJenisMapping()))) + .collect(Collectors.toList()); + List listIdMapPaket = listPaketUtama.stream().map(MapProdukPaket::getNoRec) + .collect(Collectors.toList()); + List listIdEntri = listMapProduk.stream() + .filter(mproduk -> listIdMapPaket.contains(mproduk.getMapProdukPaketId())) + .map(MapProdukPaketToProduk::getProdukId).collect(Collectors.toList()); + List> listDataUndone = listData.stream() + .filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idVoucherLayanan")) + && listUndonePaketUtama.contains(d.get("idVoucherLayanan").toString()) + && listIdEntri.contains(Integer.parseInt(d.get("idProduk").toString()))) + .collect(Collectors.toList()); + Set setIdPelayanan = listDataUndone.stream().map(d -> d.get("idPelayananPasien").toString()) + .collect(Collectors.toSet()); + listData1 = listData.stream().filter(d -> !setIdPelayanan.contains(d.get("idPelayananPasien").toString())) + .collect(Collectors.toList()); + } + Set setIdVoucherFiltered = listData1.stream().map(d -> d.get("idVoucherDaftar").toString()) + .collect(Collectors.toSet()); + List listVoucherFiltered = voucherPaketDao.findAllByNoRecIn(setIdVoucherFiltered); + List listIdPaket = listVoucherFiltered.stream().map(VoucherPaket::getPaketId) + .collect(Collectors.toList()); + List> listData3 = new ArrayList<>(); + { + /* + * Transformasi data tindakan utama dan reduce visite utama + */ + List> listData2 = pelayananPasienDao.findPelayananPasienByPaket(setIdVoucherFiltered, + listIdPaket); + listData3.addAll(listData2); + } + { + /* + * Transformasi data tindakan lain-lain + */ + List listPaketUtama = listMapPaket.stream() + .filter(mpaket -> listIdPaket.contains(mpaket.getPaketId()) + && (TINDAKAN_UTAMA.equals(mpaket.getJenisMapping()) + || VISITE_UTAMA.equals(mpaket.getJenisMapping()))) + .collect(Collectors.toList()); + List listIdMapPaket = listPaketUtama.stream().map(MapProdukPaket::getNoRec) + .collect(Collectors.toList()); + List listIdEntri = listMapProduk.stream() + .filter(mproduk -> listIdMapPaket.contains(mproduk.getMapProdukPaketId())) + .map(MapProdukPaketToProduk::getProdukId).collect(Collectors.toList()); + List> listDataUtama = listData1.stream() + .filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idVoucherDaftar")) + && setIdVoucherFiltered.contains(d.get("idVoucherDaftar").toString()) + && listIdEntri.contains(Integer.parseInt(d.get("idProduk").toString()))) + .collect(Collectors.toList()); + Set setIdPelayananUtama = listDataUtama.stream().map(d -> d.get("idPelayananPasien").toString()) + .collect(Collectors.toSet()); + listData3.addAll( + listData1.stream().filter(d -> !setIdPelayananUtama.contains(d.get("idPelayananPasien").toString())) + .collect(Collectors.toList())); + } + return listData3; + } + @Override public Map logbookRemunTarifDokter(Integer idPegawai, String bulan) { Map result = new HashMap<>(); @@ -2571,7 +2668,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel } { List mappingProdukPaket = mapProdukPaketToProdukDao - .findAllByPaketId(voucher.getPaket().getId()); + .findByPaketId(voucher.getPaket().getId()); List idProdukMapping = mappingProdukPaket.stream().map(MapProdukPaketToProduk::getProdukId) .collect(Collectors.toList()); Optional dtoPaket = dtoList.stream().filter(TagihanPendaftaranDto::getIsPaket) @@ -2584,7 +2681,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel List idProdukPaketDto = dtoList.stream().map(TagihanPendaftaranDto::getIdProduk) .filter(dto -> !dto.equals(voucher.getPaketId())).collect(Collectors.toList()); mappingProdukPaket.stream().filter(d -> idProdukPaketDto.contains(d.getProdukId())).forEach(d -> { - Produk produkPaket = d.getProdukPaket().getProdukPaket(); + Produk produkPaket = d.getMapProdukPaket().getProdukPaket(); List> tarifProdukPaket = hargaNettoProdukByKelasDao .checkExisting(voucher.getKelasId(), produkPaket.getId()); if (CommonUtil.isNullOrEmpty(tarifProdukPaket) && tarifProdukPaket.isEmpty()) @@ -2801,7 +2898,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel } List idDaftarList = listPendaftaran.stream().map(PasienDaftar::getNoRec).collect(Collectors.toList()); List listPelayanan = pelayananPasienDao.findByPasienDaftarPasienDaftarNoRecIn(idDaftarList); - List produkMapping = mapProdukPaketToProdukDao.findAllByPaketId(voucher.getPaketId()); + List produkMapping = mapProdukPaketToProdukDao.findByPaketId(voucher.getPaketId()); List idProdukMapping = produkMapping.stream().map(MapProdukPaketToProduk::getProdukId) .collect(Collectors.toList()); { diff --git a/jasamedika-core/src/main/java/com/jasamedika/medifirst2000/enums/JenisMappingProdukPaket.java b/jasamedika-core/src/main/java/com/jasamedika/medifirst2000/enums/JenisMappingProdukPaket.java index 3f990f77..c229c59e 100644 --- a/jasamedika-core/src/main/java/com/jasamedika/medifirst2000/enums/JenisMappingProdukPaket.java +++ b/jasamedika-core/src/main/java/com/jasamedika/medifirst2000/enums/JenisMappingProdukPaket.java @@ -11,6 +11,12 @@ public enum JenisMappingProdukPaket { * Produk ditandai sebagai tindakan utama di dalam sebuah paket layanan. * Digunakan untuk mengelompokkan hak remunerasi dokter yang bersangkutan */ - TINDAKAN_UTAMA + TINDAKAN_UTAMA, + + /** + * Produk ditandai sebagai visite utama dalam sebuah paket layanan. + * Digunakan untuk mengelompokkan hak remunerasi dokter yang bersangkutan + */ + VISITE_UTAMA } diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/MapProdukPaket.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/MapProdukPaket.java index 28e654d5..1e759092 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/MapProdukPaket.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/MapProdukPaket.java @@ -1,18 +1,24 @@ package com.jasamedika.medifirst2000.entities; +import static javax.persistence.EnumType.STRING; +import static javax.persistence.FetchType.LAZY; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Enumerated; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; +import javax.validation.constraints.NotNull; + import com.jasamedika.medifirst2000.base.BaseTransaction; import com.jasamedika.medifirst2000.enums.JenisMappingProdukPaket; import com.jasamedika.medifirst2000.helper.Caption; + import lombok.Getter; import lombok.Setter; -import javax.persistence.*; -import javax.validation.constraints.NotNull; -import java.io.Serializable; - -import static javax.persistence.EnumType.STRING; -import static javax.persistence.FetchType.LAZY; - /** * @author Salman Manoe * @version 1.0.0 @@ -23,9 +29,7 @@ import static javax.persistence.FetchType.LAZY; @Entity @Table(name = "mapprodukpaket_m", uniqueConstraints = { @UniqueConstraint(columnNames = { "paketfk", "produkPaketfk" }), }) -public class MapProdukPaket extends BaseTransaction implements Serializable { - private static final long serialVersionUID = 8425001074293272466L; - +public class MapProdukPaket extends BaseTransaction { @ManyToOne(fetch = LAZY) @JoinColumn(name = "paketfk") @NotNull(message = "Paket tidak boleh kosong") diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/MapProdukPaketToProduk.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/MapProdukPaketToProduk.java index 6334bf46..2ec8054a 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/MapProdukPaketToProduk.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/MapProdukPaketToProduk.java @@ -26,10 +26,10 @@ public class MapProdukPaketToProduk extends BaseTransaction { @JoinColumn(name = "mappaketfk") @NotNull(message = "Mapping produk paket tidak boleh kosong") @Caption(value = "Mapping produk paket") - private MapProdukPaket produkPaket; + private MapProdukPaket mapProdukPaket; @Column(name = "mappaketfk", columnDefinition = "CHAR(32)", insertable = false, updatable = false, nullable = false) - private String produkPaketId; + private String mapProdukPaketId; @ManyToOne(fetch = LAZY) @JoinColumn(name = "produkfk") diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/PelayananPasienPetugas.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/PelayananPasienPetugas.java index 118cea6a..749bef73 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/PelayananPasienPetugas.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/PelayananPasienPetugas.java @@ -1,16 +1,21 @@ package com.jasamedika.medifirst2000.entities; +import static javax.persistence.FetchType.LAZY; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.validation.constraints.NotNull; + +import org.joda.time.DateTime; + import com.jasamedika.medifirst2000.base.BaseTransaction; import com.jasamedika.medifirst2000.helper.Caption; + import lombok.Getter; import lombok.Setter; -import org.joda.time.DateTime; - -import javax.persistence.*; -import javax.validation.constraints.NotNull; -import java.io.Serializable; - -import static javax.persistence.FetchType.LAZY; /** * class PelayananPasienPetugas @@ -21,7 +26,9 @@ import static javax.persistence.FetchType.LAZY; @Setter @Entity @Table(name = "PelayananPasienPetugas_T") -public class PelayananPasienPetugas extends BaseTransaction implements Serializable { +public class PelayananPasienPetugas extends BaseTransaction { + private static final long serialVersionUID = -2586717488353074662L; + @Caption(value = "Deskripsi Tugas Fungsi") private String deskripsitugasfungsi; diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/Sayatan.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/Sayatan.java index 6c446078..7935acbf 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/Sayatan.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/Sayatan.java @@ -1,18 +1,25 @@ package com.jasamedika.medifirst2000.entities; -import com.jasamedika.medifirst2000.base.BaseMaster; -import com.jasamedika.medifirst2000.helper.Caption; -import lombok.Getter; -import lombok.Setter; - -import javax.persistence.*; - -import java.io.Serializable; -import java.util.Date; - import static javax.persistence.FetchType.LAZY; import static javax.persistence.GenerationType.SEQUENCE; +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.SequenceGenerator; +import javax.persistence.Table; + +import com.jasamedika.medifirst2000.base.BaseMaster; +import com.jasamedika.medifirst2000.helper.Caption; + +import lombok.Getter; +import lombok.Setter; + /** * @author Salman Manoe * @version 1.0.0 @@ -22,7 +29,7 @@ import static javax.persistence.GenerationType.SEQUENCE; @Setter @Entity @Table(name = "sayatan_operasi_m") -public class Sayatan extends BaseMaster implements Serializable { +public class Sayatan extends BaseMaster { @Id @GeneratedValue(strategy = SEQUENCE, generator = "sayatan_operasi_t_pkey") diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/MapRuanganToKelasMVO.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/MapRuanganToKelasMVO.java deleted file mode 100644 index d8b0ed93..00000000 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/MapRuanganToKelasMVO.java +++ /dev/null @@ -1,89 +0,0 @@ -/*package com.jasamedika.medifirst2000.vo; - -import java.io.Serializable; - -import javax.persistence.AssociationOverride; -import javax.persistence.AssociationOverrides; -import javax.persistence.Column; -import javax.persistence.EmbeddedId; -import javax.persistence.Entity; -import javax.persistence.JoinColumn; -import javax.persistence.Table; -import javax.persistence.Transient; - -import com.jasamedika.medifirst2000.base.vo.BaseMapping; - - - - - - -//@Entity -//@Table(name = "MapRuanganToKelas_M_SAMPLE") -@AssociationOverrides({ - @AssociationOverride(name = "pk.ruanganM", joinColumns = @JoinColumn(name = "kdRuangan")), - @AssociationOverride(name = "pk.kelasM", joinColumns = @JoinColumn(name = "kdKelas")) -}) -public class MapRuanganToKelasMVO extends BaseMapping implements Serializable{ - - - private static final long serialVersionUID = 1L; - @EmbeddedId - protected MapRuanganToKelasMIdVO pk = new MapRuanganToKelasMId(); - - - public MapRuanganToKelasMIdVO getPk() { - return pk; - } - - public void setPk(MapRuanganToKelasMIdVO pk) { - this.pk = pk; - } - - @Column(name = "kdRuangan", insertable = false, updatable = false) - private Integer kdRuangan; - - @Column(name = "kdKelas", insertable = false, updatable = false) - private Integer kdKelas; - - - @Transient - public RuanganMVO getRuanganM() { - return getPk().getRuanganM(); - } - - public void setRuanganM(RuanganMVO ruanganM) { - getPk().setRuanganM(ruanganM); - } - - @Transient - public KelasMVO getKelasM() { - return getPk().getKelasM(); - } - - public void setKelasM(KelasMVO kelasM) { - getPk().setKelasM(kelasM); - } - - public Integer getKdRuangan() { - return kdRuangan; - } - - public void setKdRuangan(Integer kdRuangan) { - this.kdRuangan = kdRuangan; - } - - public Integer getKdKelas() { - return kdKelas; - } - - public void setKdKelas(Integer kdKelas) { - this.kdKelas = kdKelas; - } - - - - - -} -*/ \ No newline at end of file diff --git a/jasamedika-domain/src/main/resources/hibernate.cfg.xml b/jasamedika-domain/src/main/resources/hibernate.cfg.xml index f78e1a80..63871bd3 100644 --- a/jasamedika-domain/src/main/resources/hibernate.cfg.xml +++ b/jasamedika-domain/src/main/resources/hibernate.cfg.xml @@ -2,723 +2,880 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/controller/PelayananController.java b/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/controller/PelayananController.java index 2f9d4002..9f8a1405 100644 --- a/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/controller/PelayananController.java +++ b/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/controller/PelayananController.java @@ -4,13 +4,13 @@ import com.jasamedika.medifirst2000.constants.Constants; import com.jasamedika.medifirst2000.constants.MessageResource; import com.jasamedika.medifirst2000.controller.base.LocaleController; import com.jasamedika.medifirst2000.core.web.WebConstants; +import com.jasamedika.medifirst2000.dto.BatalPaketProdukDto; import com.jasamedika.medifirst2000.dto.TagihanPendaftaranDto; import com.jasamedika.medifirst2000.exception.ServiceVOException; -import com.jasamedika.medifirst2000.service.PasienDaftarService; -import com.jasamedika.medifirst2000.service.PelayananPasienService; -import com.jasamedika.medifirst2000.service.ProdukService; -import com.jasamedika.medifirst2000.service.SatuanStandarService; +import com.jasamedika.medifirst2000.service.*; import com.jasamedika.medifirst2000.util.rest.RestUtil; +import com.jasamedika.medifirst2000.vo.MapProdukPaketToProdukVO; +import com.jasamedika.medifirst2000.vo.MapProdukPaketVO; import com.jasamedika.medifirst2000.vo.PelayananPasienVO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -22,7 +22,6 @@ import org.springframework.orm.jpa.JpaSystemException; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; - import java.util.HashMap; import java.util.List; import java.util.Map; @@ -45,9 +44,15 @@ public class PelayananController extends LocaleController { @Autowired private SatuanStandarService satuanStandarService; + @Autowired + private MapProdukPaketService mapProdukPaketService; + + @Autowired + private MapProdukPaketToProdukService mapProdukPaketToProdukService; + @RequestMapping(value = "/calculate-indikator-pelayanan", method = RequestMethod.GET) public ResponseEntity>> calculateIndikatorPelayanan(HttpServletRequest request, - @RequestParam("tahun") String tahun) { + @RequestParam("tahun") String tahun) { try { List> result = pasienDaftarService.findIndikatorPelayanan(tahun); mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, @@ -66,8 +71,8 @@ public class PelayananController extends LocaleController { @RequestMapping(value = "/validate-nama-produk", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity> validateNamaProduk(HttpServletRequest request, - @RequestParam(value = "idProduk", required = false) Integer idProduk, - @RequestParam(value = "namaProduk") String namaProduk) { + @RequestParam(value = "idProduk", required = false) Integer idProduk, + @RequestParam(value = "namaProduk") String namaProduk) { try { Map result = produkService.validateNamaProduk(idProduk, namaProduk); @@ -85,7 +90,7 @@ public class PelayananController extends LocaleController { @RequestMapping(value = "/paket-to-produk", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity> getMappingPaketToProduk(HttpServletRequest request, - @RequestParam(value = "idMapping") Integer idMapping) { + @RequestParam(value = "idMapping") Integer idMapping) { try { Map result = produkService.getMappingPaketToProduk(idMapping); return RestUtil.getJsonResponse(result, HttpStatus.OK); @@ -138,9 +143,9 @@ public class PelayananController extends LocaleController { @RequestMapping(value = "/klaim-diskon", method = RequestMethod.GET) public ResponseEntity> KlaimDiskon(HttpServletRequest request, - @RequestParam(value = "noRegistrasi") String noRegistrasi, - @RequestParam(value = "totalKlaim") Double totalKlaim, - @RequestParam(value = "jenisDiskon") Integer jenisDiskon) { + @RequestParam(value = "noRegistrasi") String noRegistrasi, + @RequestParam(value = "totalKlaim") Double totalKlaim, + @RequestParam(value = "jenisDiskon") Integer jenisDiskon) { try { List result = pelayananPasienService.updateKlaimDiskon(noRegistrasi, totalKlaim, jenisDiskon); mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, @@ -159,7 +164,7 @@ public class PelayananController extends LocaleController { @RequestMapping(value = "/reset-klaim-diskon", method = RequestMethod.GET) public ResponseEntity ResetKlaimDiskon(HttpServletRequest request, - @RequestParam(value = "noRegistrasi") String noRegistrasi) { + @RequestParam(value = "noRegistrasi") String noRegistrasi) { try { String result = pelayananPasienService.resetKlaimDiskon(noRegistrasi); @@ -179,8 +184,8 @@ public class PelayananController extends LocaleController { @RequestMapping(value = "/check-existing-harga-produk-kelas", method = RequestMethod.GET) public ResponseEntity>> checkExistingHargaProdukKelas(HttpServletRequest request, - @RequestParam(value = "kelasId") Integer idKelas, @RequestParam(value = "produkId") Integer idProduk, - @RequestParam(value = "mappingId", required = false) Integer idMapping) { + @RequestParam(value = "kelasId") Integer idKelas, @RequestParam(value = "produkId") Integer idProduk, + @RequestParam(value = "mappingId", required = false) Integer idMapping) { try { List> result = produkService.findExistingMapHargaKelas(idKelas, idProduk, idMapping); @@ -200,7 +205,7 @@ public class PelayananController extends LocaleController { @RequestMapping(value = "/tagihan/daftar/{noRegistrasi}", method = RequestMethod.GET) public ResponseEntity> daftarTagihan(HttpServletRequest request, - @PathVariable String noRegistrasi) { + @PathVariable String noRegistrasi) { try { List result = pelayananPasienService.tagihan(noRegistrasi); mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, @@ -219,8 +224,8 @@ public class PelayananController extends LocaleController { @RequestMapping(value = "/tagihan/diskon/save", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity simpanDiskonTagihan(HttpServletRequest request, - @RequestParam(value = "kode-voucher", required = false) String kodeVoucher, - @RequestBody List dtoList) { + @RequestParam(value = "kode-voucher", required = false) String kodeVoucher, + @RequestBody List dtoList) { try { pelayananPasienService.diskonTagihan(kodeVoucher, dtoList); mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, @@ -237,4 +242,83 @@ public class PelayananController extends LocaleController { return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); } } + + @RequestMapping(value = "/tagihan/diskon/batal-paket", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity batalPaket(HttpServletRequest request, @RequestBody BatalPaketProdukDto dto) { + try { + pelayananPasienService.batalPaketProduk(dto); + mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, + getMessage(MessageResource.LABEL_SUCCESS, request)); + return RestUtil.getJsonResponse(dto, HttpStatus.OK, mapHeaderMessage); + } catch (ServiceVOException e) { + LOGGER.error("Got exception {} when batal diskon paket", e.getMessage()); + Map error = new HashMap<>(); + error.put("bad_request", e.getMessage()); + return RestUtil.getJsonResponse(null, HttpStatus.BAD_REQUEST, error); + } catch (JpaSystemException jse) { + LOGGER.error("Got exception {} when batal diskon paket", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + + @RequestMapping(value = "/vouchers/validity", method = RequestMethod.GET) + public ResponseEntity isValidVoucher(HttpServletRequest request, + @RequestParam("kode-voucher") String kodeVoucher, @RequestParam("no-registrasi") String noRegistrasi) { + try { + boolean validVoucher = pelayananPasienService.isValidVoucher(kodeVoucher, noRegistrasi); + mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, + getMessage(MessageResource.LABEL_SUCCESS, request)); + return RestUtil.getJsonResponse(validVoucher, HttpStatus.OK, mapHeaderMessage); + } catch (ServiceVOException e) { + LOGGER.error("Got exception {} when check voucher validity", e.getMessage()); + Map error = new HashMap<>(); + error.put("bad_request", e.getMessage()); + return RestUtil.getJsonResponse(false, HttpStatus.BAD_REQUEST, error); + } catch (JpaSystemException jse) { + LOGGER.error("Got exception {} when check voucher validity", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + + @RequestMapping(value = "/produk-paket/paket", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity simpanMappingListProdukPaket(HttpServletRequest request, + @RequestBody List vos) { + try { + mapProdukPaketService.saveAll(vos); + mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, + getMessage(MessageResource.LABEL_SUCCESS, request)); + return RestUtil.getJsonResponse(vos, HttpStatus.OK, mapHeaderMessage); + } catch (ServiceVOException e) { + LOGGER.error("Got exception {} when simpan mapping list produk paket", e.getMessage()); + Map error = new HashMap<>(); + error.put("bad_request", e.getMessage()); + return RestUtil.getJsonResponse(null, HttpStatus.BAD_REQUEST, error); + } catch (JpaSystemException jse) { + LOGGER.error("Got exception {} when simpan mapping list produk paket", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + + @RequestMapping(value = "/produk-paket/produk", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity simpanMappingEntriProdukPaket(HttpServletRequest request, + @RequestBody List vos) { + try { + mapProdukPaketToProdukService.saveAll(vos); + mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, + getMessage(MessageResource.LABEL_SUCCESS, request)); + return RestUtil.getJsonResponse(vos, HttpStatus.OK, mapHeaderMessage); + } catch (ServiceVOException e) { + LOGGER.error("Got exception {} when simpan mapping entri produk paket", e.getMessage()); + Map error = new HashMap<>(); + error.put("bad_request", e.getMessage()); + return RestUtil.getJsonResponse(null, HttpStatus.BAD_REQUEST, error); + } catch (JpaSystemException jse) { + LOGGER.error("Got exception {} when simpan mapping entri produk paket", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } }