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 8c72dc03..3f141271 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 @@ -2222,10 +2222,10 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel } if (CommonUtil.isNotNullOrEmpty(kodeVoucher)) { VoucherPaket voucher = getVoucher(kodeVoucher, false); - List listNoRec = dtoList.stream().filter(TagihanPendaftaranDto::getIsPaket) + List norecPelayananChecked = dtoList.stream().filter(TagihanPendaftaranDto::getIsPaket) .map(TagihanPendaftaranDto::getNoRec).collect(Collectors.toList()); - List listPelayanan = pelayananPasienDao.findAll(listNoRec); - Optional pendaftaran = listPelayanan.stream().map(p -> p.getPasien().getPasienDaftar()) + List pelayananChecked = pelayananPasienDao.findAll(norecPelayananChecked); + Optional pendaftaran = pelayananChecked.stream().map(p -> p.getPasien().getPasienDaftar()) .findFirst(); pendaftaran.ifPresent(p -> { Integer pasienId = p.getPasien().getId(); @@ -2235,38 +2235,34 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel pasienDaftarDao.save(p); }); { - List detail = mapProdukPaketToProdukDao + List mappingProdukPaket = mapProdukPaketToProdukDao .findAllByPaketId(voucher.getPaket().getId()); - List listIdDetail = detail.stream().map(MapProdukPaketToProduk::getProdukId) + List idProdukMapping = mappingProdukPaket.stream().map(MapProdukPaketToProduk::getProdukId) .collect(Collectors.toList()); - Optional byProduk = dtoList.stream() - .filter(dto -> !listIdDetail.contains(dto.getIdProduk())) + Optional dtoPaket = dtoList.stream() + .filter(dto -> !idProdukMapping.contains(dto.getIdProduk())) .filter(dto -> !dto.getIdProduk().equals(voucher.getPaketId())).findFirst(); - if (byProduk.isPresent()) - throw new ServiceVOException("Produk " + byProduk.get().getNamaProduk() + if (dtoPaket.isPresent()) + throw new ServiceVOException("Produk " + dtoPaket.get().getNamaProduk() + " tidak dapat didiskon karena belum dilakukan mapping /" + " tidak termasuk detail paket yang dapat diskon"); - List listIdDto = dtoList.stream().map(TagihanPendaftaranDto::getIdProduk) + List idProdukPaketDto = dtoList.stream().map(TagihanPendaftaranDto::getIdProduk) .filter(dto -> !dto.equals(voucher.getPaketId())).collect(Collectors.toList()); - detail.stream().filter(d -> listIdDto.contains(d.getProdukId())).forEach(d -> { - List> maps = hargaNettoProdukByKelasDao.checkExisting(voucher.getKelasId(), - d.getProdukPaketId()); - if (CommonUtil.isNullOrEmpty(maps) && maps.isEmpty()) + mappingProdukPaket.stream().filter(d -> idProdukPaketDto.contains(d.getProdukId())).forEach(d -> { + List> tarifProdukPaket = hargaNettoProdukByKelasDao + .checkExisting(voucher.getKelasId(), d.getProdukPaketId()); + if (CommonUtil.isNullOrEmpty(tarifProdukPaket) && tarifProdukPaket.isEmpty()) throw new ServiceVOException("Harga tarif tidak ditemukan untuk produk " + d.getProduk().getNamaProduk() + " (" + d.getProdukPaket().getNamaProduk() + ") dan kelas " + voucher.getKelas().getNamaKelas()); }); } - listPelayanan.forEach(p -> { - Optional dto = dtoList.stream().filter(d -> d.getNoRec().equals(p.getNoRec())) - .findFirst(); - dto.ifPresent(tagihanPendaftaranDto -> { - p.setHargaDiscount(tagihanPendaftaranDto.getHargaDiskon()); - p.setJasa(tagihanPendaftaranDto.getHargaJasa()); - p.setIsPaket(tagihanPendaftaranDto.getIsPaket()); - p.setVoucherPaket(voucher); - }); - if (p.getProdukId().equals(voucher.getPaketId())) { + { + List norecPelayananPaket = dtoList.stream() + .filter(d -> voucher.getPaketId().equals(d.getIdProduk())).map(TagihanPendaftaranDto::getNoRec) + .collect(Collectors.toList()); + List pelayananPaket = pelayananPasienDao.findAll(norecPelayananPaket); + pelayananPaket.forEach(p -> { if (p.getHargaDiscount() > 0.0) { List detailPelayanan = pelayananPasienDetailDao .getPelayananPasienDetail(p.getNoRec()); @@ -2277,10 +2273,23 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel pelayananPasienDetailDao.save(detailDiscount); } } + p.setVoucherPaket(voucher); p.setHargaDiscount(0.0); - } - }); - pelayananPasienDao.save(listPelayanan); + }); + } + { + pelayananChecked.forEach(p -> { + Optional dtoChecked = dtoList.stream() + .filter(d -> d.getNoRec().equals(p.getNoRec())).findFirst(); + dtoChecked.ifPresent(d -> { + p.setHargaDiscount(d.getHargaDiskon()); + p.setJasa(d.getHargaJasa()); + p.setIsPaket(d.getIsPaket()); + p.setVoucherPaket(voucher); + }); + }); + pelayananPasienDao.save(pelayananChecked); + } } else { List listNoRec = dtoList.stream().map(TagihanPendaftaranDto::getNoRec).collect(Collectors.toList()); List listPelayanan = pelayananPasienDao.findAll(listNoRec);