From 1e7ace5f42eb762309274d0a9760b17d044bab27 Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Fri, 25 Aug 2023 15:39:05 +0700 Subject: [PATCH] Update service pelayanan pasien Pembuatan split child relation : pelayanan pasien detail saat split jumlah produk paket saat diskon paket --- .../dao/PelayananPasienDetailDao.java | 2 +- .../impl/PelayananPasienServiceImpl.java | 94 +++++++++++++++++-- 2 files changed, 86 insertions(+), 10 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDetailDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDetailDao.java index 60f340af..a831dcf8 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDetailDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienDetailDao.java @@ -16,7 +16,7 @@ import java.util.List; @Repository("PelayananPasienDetailDao") public interface PelayananPasienDetailDao extends PagingAndSortingRepository { @Query("select model from PelayananPasienDetail model left join model.pelayananPasien a where a.noRec=:noRec") - List getPelayananPasienDetail(@Param("noRec") String noRec); + List findByPelayananPasien(@Param("noRec") String noRec); @Query("select sum(ppd.hargaDiscount) " + "from PelayananPasienDetail ppd " + "where ppd.pelayananPasienId = :noRec " + "and ppd.komponenHargaId = 35") 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 acf03fdf..12f35457 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 @@ -2265,7 +2265,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel pelayananPaket.forEach(p -> { if (p.getHargaDiscount() > 0.0) { List detailPelayanan = pelayananPasienDetailDao - .getPelayananPasienDetail(p.getNoRec()); + .findByPelayananPasien(p.getNoRec()); List detailDiscount = detailPelayanan.stream() .filter(d -> d.getHargaDiscount() > 0.0).collect(Collectors.toList()); if (CommonUtil.isNotNullOrEmpty(detailDiscount) && !detailDiscount.isEmpty()) { @@ -2292,14 +2292,16 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel pelayananPasienDao.save(pelayananChecked); } { + List pelayanan = new ArrayList<>(); + List detailPelayanan = new ArrayList<>(); dtoList.forEach(dto -> { - Optional pelayananSplitQty = pelayananChecked.stream() + Optional pelayananReducedQty = pelayananChecked.stream() .filter(p -> p.getNoRec().equals(dto.getNoRec())) .filter(p -> !p.getJumlah().equals(dto.getJumlah())).findFirst(); - pelayananSplitQty.ifPresent(p -> { - List copyPelayanan = copyPelayananSplitQty(p); - Optional origin = copyPelayanan.stream() - .filter(cp -> cp.getNoRec() != null) + pelayananReducedQty.ifPresent(p -> { + List splitDetailPelayanan = new ArrayList<>(); + List splitPelayanan = copyPelayananSplitQty(p); + Optional origin = splitPelayanan.stream().filter(cp -> cp.getNoRec() != null) .findFirst(); if (origin.isPresent()) { origin.get().setJumlah(dto.getJumlah()); @@ -2307,13 +2309,36 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel origin.get().setJasa(dto.getHargaJasa()); origin.get().setIsPaket(dto.getIsPaket()); origin.get().setVoucherPaket(voucher); + { + List detailOrigin = pelayananPasienDetailDao + .findByPelayananPasien(origin.get().getNoRec()); + splitDetailPelayanan = copyPelayananDetailSplitQty(detailOrigin); + List originDetail = splitDetailPelayanan.stream() + .filter(d -> d.getNoRec() != null).collect(Collectors.toList()); + detailOrigin.addAll(originDetail); + } + pelayanan.add(origin.get()); } - Optional duplicate = copyPelayanan.stream() - .filter(cp -> cp.getNoRec() == null) + Optional duplicate = splitPelayanan.stream().filter(cp -> cp.getNoRec() == null) .findFirst(); - duplicate.ifPresent(d -> d.setJumlah(pelayananSplitQty.get().getJumlah() - dto.getJumlah())); + if (duplicate.isPresent()) { + duplicate.get().setJumlah(pelayananReducedQty.get().getJumlah() - dto.getJumlah()); + duplicate.get().setIsPaket(false); + duplicate.get().setVoucherPaket(voucher); + { + List duplicateDetail = splitDetailPelayanan.stream() + .filter(d -> d.getNoRec() == null).collect(Collectors.toList()); + duplicateDetail.forEach(d -> d.setPelayananPasien(duplicate.get())); + detailPelayanan.addAll(duplicateDetail); + } + pelayanan.add(duplicate.get()); + } }); }); + if (CommonUtil.isNotNullOrEmpty(pelayanan)) { + pelayananPasienDao.save(pelayanan); + pelayananPasienDetailDao.save(detailPelayanan); + } } } else { List listNoRec = dtoList.stream().map(TagihanPendaftaranDto::getNoRec).collect(Collectors.toList()); @@ -2491,4 +2516,55 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel return result; } + private List copyPelayananDetailSplitQty(List originDetail) { + List duplicateDetail = new ArrayList<>(); + originDetail.forEach(origin -> { + PelayananPasienDetail duplicate; + duplicate = origin; + { + AntrianPasienDiPeriksa pasien = origin.getPasien(); + if (CommonUtil.isNotNullOrEmpty(pasien)) + duplicate.setPasien(pasien); + } + { + KomponenHarga komponenHarga = origin.getKomponenHarga(); + if (CommonUtil.isNotNullOrEmpty(komponenHarga)) + duplicate.setKomponenHarga(komponenHarga); + } + { + Produk produk = origin.getProduk(); + if (CommonUtil.isNotNullOrEmpty(produk)) + duplicate.setProduk(produk); + } + { + Generik generik = origin.getGenerik(); + if (CommonUtil.isNotNullOrEmpty(generik)) + duplicate.setGenerik(generik); + } + { + JenisObat jenisObat = origin.getJenisObat(); + if (CommonUtil.isNotNullOrEmpty(jenisObat)) + duplicate.setJenisObat(jenisObat); + } + { + RouteFarmasi route = origin.getRoute(); + if (CommonUtil.isNotNullOrEmpty(route)) + duplicate.setRoute(route); + } + { + Stigma keteranganPakai = origin.getKeteranganPakai(); + if (CommonUtil.isNotNullOrEmpty(keteranganPakai)) + duplicate.setKeteranganPakai(keteranganPakai); + } + { + StrukOrder strukOrder = origin.getStrukOrder(); + if (CommonUtil.isNotNullOrEmpty(strukOrder)) + duplicate.setStrukOrder(strukOrder); + } + duplicate.setNoRec(null); + duplicateDetail.add(duplicate); + duplicateDetail.add(origin); + }); + return duplicateDetail; + } } \ No newline at end of file