Update PelayananPasienServiceImpl.java
Perbaikan split jumlah pelayanan dan simpan ke database
This commit is contained in:
parent
20b38c760f
commit
691ce8418f
@ -2221,132 +2221,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
|
|||||||
throw new ServiceVOException("Tidak memiliki akses diskon total");
|
throw new ServiceVOException("Tidak memiliki akses diskon total");
|
||||||
}
|
}
|
||||||
if (CommonUtil.isNotNullOrEmpty(kodeVoucher)) {
|
if (CommonUtil.isNotNullOrEmpty(kodeVoucher)) {
|
||||||
VoucherPaket voucher = getVoucher(kodeVoucher, false);
|
diskonPaket(kodeVoucher, dtoList);
|
||||||
List<String> norecPelayananChecked = dtoList.stream().filter(TagihanPendaftaranDto::getIsPaket)
|
|
||||||
.map(TagihanPendaftaranDto::getNoRec).collect(Collectors.toList());
|
|
||||||
List<PelayananPasien> pelayananChecked = pelayananPasienDao.findAll(norecPelayananChecked);
|
|
||||||
Optional<PasienDaftar> pendaftaran = pelayananChecked.stream().map(p -> p.getPasien().getPasienDaftar())
|
|
||||||
.findFirst();
|
|
||||||
pendaftaran.ifPresent(p -> {
|
|
||||||
Integer pasienId = p.getPasien().getId();
|
|
||||||
if (!voucher.getPasienId().equals(pasienId))
|
|
||||||
throw new ServiceVOException("Kode voucher tidak sesuai dengan pasien yang diperuntukkan");
|
|
||||||
p.setVoucherPaket(voucher);
|
|
||||||
pasienDaftarDao.save(p);
|
|
||||||
});
|
|
||||||
{
|
|
||||||
List<MapProdukPaketToProduk> mappingProdukPaket = mapProdukPaketToProdukDao
|
|
||||||
.findAllByPaketId(voucher.getPaket().getId());
|
|
||||||
List<Integer> idProdukMapping = mappingProdukPaket.stream().map(MapProdukPaketToProduk::getProdukId)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
Optional<TagihanPendaftaranDto> dtoPaket = dtoList.stream()
|
|
||||||
.filter(dto -> !idProdukMapping.contains(dto.getIdProduk()))
|
|
||||||
.filter(dto -> !dto.getIdProduk().equals(voucher.getPaketId())).findFirst();
|
|
||||||
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<Integer> 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 -> {
|
|
||||||
List<Map<String, Object>> 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());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
{
|
|
||||||
List<PelayananPasienDetail> detailPelayanan = new ArrayList<>();
|
|
||||||
List<String> norecPelayananPaket = dtoList.stream()
|
|
||||||
.filter(d -> voucher.getPaketId().equals(d.getIdProduk())).map(TagihanPendaftaranDto::getNoRec)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
List<PelayananPasien> pelayananPaket = pelayananPasienDao.findAll(norecPelayananPaket);
|
|
||||||
pelayananPaket.forEach(p -> {
|
|
||||||
Double hargaDiscount = p.getHargaDiscount();
|
|
||||||
if (CommonUtil.isNotNullOrEmpty(hargaDiscount) && hargaDiscount > 0.0) {
|
|
||||||
// Cek Detail Diskon
|
|
||||||
List<PelayananPasienDetail> detailPelayananPaket = pelayananPasienDetailDao
|
|
||||||
.findByPelayananPasien(p.getNoRec());
|
|
||||||
List<PelayananPasienDetail> detailDiskon = detailPelayananPaket.stream()
|
|
||||||
.filter(d -> d.getHargaDiscount() > 0.0).collect(Collectors.toList());
|
|
||||||
if (CommonUtil.isNotNullOrEmpty(detailDiskon) && !detailDiskon.isEmpty()) {
|
|
||||||
// Reset Diskon
|
|
||||||
detailDiskon.forEach(d -> d.setHargaDiscount(0.0));
|
|
||||||
detailPelayanan.addAll(detailDiskon);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.setVoucherPaket(voucher);
|
|
||||||
p.setHargaDiscount(0.0);
|
|
||||||
});
|
|
||||||
pelayananPasienDetailDao.save(detailPelayanan);
|
|
||||||
}
|
|
||||||
{
|
|
||||||
List<PelayananPasien> pelayanan = new ArrayList<>();
|
|
||||||
dtoList.forEach(dto -> {
|
|
||||||
Optional<PelayananPasien> pelayananFixedQty = pelayananChecked.stream()
|
|
||||||
.filter(p -> p.getNoRec().equals(dto.getNoRec()))
|
|
||||||
.filter(p -> p.getJumlah().equals(dto.getJumlah())).findFirst();
|
|
||||||
pelayananFixedQty.ifPresent(p -> {
|
|
||||||
p.setHargaDiscount(dto.getHargaDiskon());
|
|
||||||
p.setJasa(dto.getHargaJasa());
|
|
||||||
p.setIsPaket(dto.getIsPaket());
|
|
||||||
p.setVoucherPaket(voucher);
|
|
||||||
pelayanan.add(p);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
pelayananPasienDao.save(pelayanan);
|
|
||||||
}
|
|
||||||
{
|
|
||||||
List<PelayananPasien> pelayanan = new ArrayList<>();
|
|
||||||
List<PelayananPasienDetail> detailPelayanan = new ArrayList<>();
|
|
||||||
dtoList.forEach(dto -> {
|
|
||||||
Optional<PelayananPasien> pelayananReducedQty = pelayananChecked.stream()
|
|
||||||
.filter(p -> p.getNoRec().equals(dto.getNoRec()))
|
|
||||||
.filter(p -> !p.getJumlah().equals(dto.getJumlah())).findFirst();
|
|
||||||
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());
|
|
||||||
origin.get().setHargaDiscount(dto.getHargaDiskon());
|
|
||||||
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 = splitPelayanan.stream()
|
|
||||||
.filter(cp -> cp.getNoRec() == null).findFirst();
|
|
||||||
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 {
|
} else {
|
||||||
List<String> listNoRec = dtoList.stream().map(TagihanPendaftaranDto::getNoRec).collect(Collectors.toList());
|
List<String> listNoRec = dtoList.stream().map(TagihanPendaftaranDto::getNoRec).collect(Collectors.toList());
|
||||||
List<PelayananPasien> listPelayanan = pelayananPasienDao.findAll(listNoRec);
|
List<PelayananPasien> listPelayanan = pelayananPasienDao.findAll(listNoRec);
|
||||||
@ -2362,6 +2237,135 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void diskonPaket(String kodeVoucher, List<TagihanPendaftaranDto> dtoList) {
|
||||||
|
VoucherPaket voucher = getVoucher(kodeVoucher, false);
|
||||||
|
List<String> norecPelayananChecked = dtoList.stream().filter(TagihanPendaftaranDto::getIsPaket)
|
||||||
|
.map(TagihanPendaftaranDto::getNoRec).collect(Collectors.toList());
|
||||||
|
List<PelayananPasien> pelayananChecked = pelayananPasienDao.findAll(norecPelayananChecked);
|
||||||
|
Optional<PasienDaftar> pendaftaran = pelayananChecked.stream().map(p -> p.getPasien().getPasienDaftar())
|
||||||
|
.findFirst();
|
||||||
|
pendaftaran.ifPresent(p -> {
|
||||||
|
Integer pasienId = p.getPasien().getId();
|
||||||
|
if (!voucher.getPasienId().equals(pasienId))
|
||||||
|
throw new ServiceVOException("Kode voucher tidak sesuai dengan pasien yang diperuntukkan");
|
||||||
|
p.setVoucherPaket(voucher);
|
||||||
|
pasienDaftarDao.save(p);
|
||||||
|
});
|
||||||
|
{
|
||||||
|
List<MapProdukPaketToProduk> mappingProdukPaket = mapProdukPaketToProdukDao
|
||||||
|
.findAllByPaketId(voucher.getPaket().getId());
|
||||||
|
List<Integer> idProdukMapping = mappingProdukPaket.stream().map(MapProdukPaketToProduk::getProdukId)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
Optional<TagihanPendaftaranDto> dtoPaket = dtoList.stream()
|
||||||
|
.filter(dto -> !idProdukMapping.contains(dto.getIdProduk()))
|
||||||
|
.filter(dto -> !dto.getIdProduk().equals(voucher.getPaketId())).findFirst();
|
||||||
|
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<Integer> 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 -> {
|
||||||
|
List<Map<String, Object>> 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());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
{
|
||||||
|
List<PelayananPasienDetail> detailPelayanan = new ArrayList<>();
|
||||||
|
List<String> norecPelayananPaket = dtoList.stream()
|
||||||
|
.filter(d -> voucher.getPaketId().equals(d.getIdProduk())).map(TagihanPendaftaranDto::getNoRec)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
List<PelayananPasien> pelayananPaket = pelayananPasienDao.findAll(norecPelayananPaket);
|
||||||
|
pelayananPaket.forEach(p -> {
|
||||||
|
Double hargaDiscount = p.getHargaDiscount();
|
||||||
|
if (CommonUtil.isNotNullOrEmpty(hargaDiscount) && hargaDiscount > 0.0) {
|
||||||
|
// Cek Detail Diskon
|
||||||
|
List<PelayananPasienDetail> detailPelayananPaket = pelayananPasienDetailDao
|
||||||
|
.findByPelayananPasien(p.getNoRec());
|
||||||
|
List<PelayananPasienDetail> detailDiskon = detailPelayananPaket.stream()
|
||||||
|
.filter(d -> d.getHargaDiscount() > 0.0).collect(Collectors.toList());
|
||||||
|
if (CommonUtil.isNotNullOrEmpty(detailDiskon) && !detailDiskon.isEmpty()) {
|
||||||
|
// Reset Diskon
|
||||||
|
detailDiskon.forEach(d -> d.setHargaDiscount(0.0));
|
||||||
|
detailPelayanan.addAll(detailDiskon);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p.setVoucherPaket(voucher);
|
||||||
|
p.setHargaDiscount(0.0);
|
||||||
|
});
|
||||||
|
pelayananPasienDetailDao.save(detailPelayanan);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
List<PelayananPasien> pelayanan = new ArrayList<>();
|
||||||
|
dtoList.forEach(dto -> {
|
||||||
|
Optional<PelayananPasien> pelayananFixedQty = pelayananChecked.stream()
|
||||||
|
.filter(p -> p.getNoRec().equals(dto.getNoRec()))
|
||||||
|
.filter(p -> p.getJumlah().equals(dto.getJumlah())).findFirst();
|
||||||
|
pelayananFixedQty.ifPresent(p -> {
|
||||||
|
p.setHargaDiscount(dto.getHargaDiskon());
|
||||||
|
p.setJasa(dto.getHargaJasa());
|
||||||
|
p.setIsPaket(dto.getIsPaket());
|
||||||
|
p.setVoucherPaket(voucher);
|
||||||
|
pelayanan.add(p);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
pelayananPasienDao.save(pelayanan);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
List<PelayananPasien> pelayanan = new ArrayList<>();
|
||||||
|
List<PelayananPasienDetail> detailPelayanan = new ArrayList<>();
|
||||||
|
dtoList.forEach(dto -> {
|
||||||
|
Optional<PelayananPasien> pelayananReducedQty = pelayananChecked.stream()
|
||||||
|
.filter(p -> p.getNoRec().equals(dto.getNoRec()))
|
||||||
|
.filter(p -> !p.getJumlah().equals(dto.getJumlah())).findFirst();
|
||||||
|
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());
|
||||||
|
origin.get().setHargaDiscount(dto.getHargaDiskon());
|
||||||
|
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());
|
||||||
|
detailPelayanan.addAll(originDetail);
|
||||||
|
}
|
||||||
|
pelayanan.add(origin.get());
|
||||||
|
}
|
||||||
|
Optional<PelayananPasien> duplicate = splitPelayanan.stream()
|
||||||
|
.filter(cp -> cp.getNoRec() == null).findFirst();
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isValidVoucher(String kodeVoucher, String noRegistrasi) {
|
public boolean isValidVoucher(String kodeVoucher, String noRegistrasi) {
|
||||||
VoucherPaket voucher = getVoucher(kodeVoucher, noRegistrasi, false);
|
VoucherPaket voucher = getVoucher(kodeVoucher, noRegistrasi, false);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user