Update service pelayanan pasien

Pembuatan split child relation : pelayanan pasien detail saat split jumlah produk paket saat diskon paket
This commit is contained in:
Salman Manoe 2023-08-25 15:39:05 +07:00
parent f13ba6dcf6
commit 1e7ace5f42
2 changed files with 86 additions and 10 deletions

View File

@ -16,7 +16,7 @@ import java.util.List;
@Repository("PelayananPasienDetailDao")
public interface PelayananPasienDetailDao extends PagingAndSortingRepository<PelayananPasienDetail, String> {
@Query("select model from PelayananPasienDetail model left join model.pelayananPasien a where a.noRec=:noRec")
List<PelayananPasienDetail> getPelayananPasienDetail(@Param("noRec") String noRec);
List<PelayananPasienDetail> findByPelayananPasien(@Param("noRec") String noRec);
@Query("select sum(ppd.hargaDiscount) " + "from PelayananPasienDetail ppd "
+ "where ppd.pelayananPasienId = :noRec " + "and ppd.komponenHargaId = 35")

View File

@ -2265,7 +2265,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
pelayananPaket.forEach(p -> {
if (p.getHargaDiscount() > 0.0) {
List<PelayananPasienDetail> detailPelayanan = pelayananPasienDetailDao
.getPelayananPasienDetail(p.getNoRec());
.findByPelayananPasien(p.getNoRec());
List<PelayananPasienDetail> 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<PelayananPasien> pelayanan = new ArrayList<>();
List<PelayananPasienDetail> detailPelayanan = new ArrayList<>();
dtoList.forEach(dto -> {
Optional<PelayananPasien> pelayananSplitQty = pelayananChecked.stream()
Optional<PelayananPasien> pelayananReducedQty = pelayananChecked.stream()
.filter(p -> p.getNoRec().equals(dto.getNoRec()))
.filter(p -> !p.getJumlah().equals(dto.getJumlah())).findFirst();
pelayananSplitQty.ifPresent(p -> {
List<PelayananPasien> copyPelayanan = copyPelayananSplitQty(p);
Optional<PelayananPasien> origin = copyPelayanan.stream()
.filter(cp -> cp.getNoRec() != null)
pelayananReducedQty.ifPresent(p -> {
List<PelayananPasienDetail> splitDetailPelayanan = new ArrayList<>();
List<PelayananPasien> splitPelayanan = copyPelayananSplitQty(p);
Optional<PelayananPasien> 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<PelayananPasienDetail> detailOrigin = pelayananPasienDetailDao
.findByPelayananPasien(origin.get().getNoRec());
splitDetailPelayanan = copyPelayananDetailSplitQty(detailOrigin);
List<PelayananPasienDetail> originDetail = splitDetailPelayanan.stream()
.filter(d -> d.getNoRec() != null).collect(Collectors.toList());
detailOrigin.addAll(originDetail);
}
pelayanan.add(origin.get());
}
Optional<PelayananPasien> duplicate = copyPelayanan.stream()
.filter(cp -> cp.getNoRec() == null)
Optional<PelayananPasien> 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<PelayananPasienDetail> 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<String> listNoRec = dtoList.stream().map(TagihanPendaftaranDto::getNoRec).collect(Collectors.toList());
@ -2491,4 +2516,55 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
return result;
}
private List<PelayananPasienDetail> copyPelayananDetailSplitQty(List<PelayananPasienDetail> originDetail) {
List<PelayananPasienDetail> 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;
}
}