From d10ec1fa10d1a5005afade8227ee2f9fa818306d Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Wed, 30 Aug 2023 11:01:17 +0700 Subject: [PATCH] Update service pelayanan pasien Perbaikan validasi voucher untuk pasien anak --- .../medifirst2000/dao/PasienDao.java | 19 +++-- .../impl/PelayananPasienServiceImpl.java | 75 ++++++++++--------- 2 files changed, 53 insertions(+), 41 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PasienDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PasienDao.java index bf7b6ae7..4fdf8eb0 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PasienDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PasienDao.java @@ -1,16 +1,18 @@ package com.jasamedika.medifirst2000.dao; -import com.jasamedika.medifirst2000.entities.Alamat; -import com.jasamedika.medifirst2000.entities.Pasien; +import java.util.List; +import java.util.Map; + +import javax.persistence.LockModeType; + +import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Lock; import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; -import javax.persistence.LockModeType; -import java.util.List; -import java.util.Map; +import com.jasamedika.medifirst2000.entities.Alamat; +import com.jasamedika.medifirst2000.entities.Pasien; /** * Repository class for Pasien @@ -18,7 +20,7 @@ import java.util.Map; * @author Askur */ @Repository("PasienDao") -public interface PasienDao extends PagingAndSortingRepository { +public interface PasienDao extends JpaRepository { @Query("select model from Pasien model where model.noCm = :noCm") List findPasienBynoCm(@Param("noCm") String noCm); @@ -47,6 +49,9 @@ public interface PasienDao extends PagingAndSortingRepository { @Query("select model from Pasien model where model.noCm = :noCm") Pasien findPasienByNoCm(@Param("noCm") String noCm); + @Query(nativeQuery = true, value = "select ps.id from pasien_m ps where ps.nocm = :noCm") + Integer findIdByNoCm(@Param("noCm") String noCm); + @Query("select NEW Map (" + "a.id as id, " + "a.namaPasien as namaPasien, " + "a.tempatLahir as tempatLahir, " + "a.tglLahir as tglLahir, " + "a.noBpjs as noBpjs, " + "a.noAsuransiLain as noAsuransiLain, " + "a.noTelepon as noTelepon, " + "a.noHp as noHp, " + "a.namaIbu as namaIbu, " + "a.namaAyah as namaAyah, " 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 129445fc..6e6b7ab1 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 @@ -2280,10 +2280,11 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel pendaftaran.ifPresent(p -> { Integer pasienId = p.getPasien().getId(); String ibuNoCm = p.getPasien().getReportDisplay(); - if (CommonUtil.isNotNullOrEmpty(ibuNoCm)) { - List ibu = pasienDao.findByNoCm(ibuNoCm.trim()); - if (CommonUtil.isNotNullOrEmpty(ibu) && !voucher.getPasienId().equals(ibu.get(0).getId())) - throw new ServiceVOException("Kode voucher tidak sesuai dengan pasien yang diperuntukkan"); + Integer ibuId = null; + if (CommonUtil.isNotNullOrEmpty(ibuNoCm)) + ibuId = pasienDao.findIdByNoCm(ibuNoCm); + if (CommonUtil.isNotNullOrEmpty(ibuId) && !voucher.getPasienId().equals(ibuId)) { + throw new ServiceVOException("Kode voucher tidak sesuai dengan pasien yang diperuntukkan"); } else if (!voucher.getPasienId().equals(pasienId)) { throw new ServiceVOException("Kode voucher tidak sesuai dengan pasien yang diperuntukkan"); } @@ -2298,10 +2299,11 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel pendaftaran.ifPresent(p -> { Integer pasienId = p.getPasien().getId(); String ibuNoCm = p.getPasien().getReportDisplay(); - if (CommonUtil.isNotNullOrEmpty(ibuNoCm)) { - List ibu = pasienDao.findByNoCm(ibuNoCm.trim()); - if (CommonUtil.isNotNullOrEmpty(ibu) && !voucher.getPasienId().equals(ibu.get(0).getId())) - throw new ServiceVOException("Kode voucher tidak sesuai dengan pasien yang diperuntukkan"); + Integer ibuId = null; + if (CommonUtil.isNotNullOrEmpty(ibuNoCm)) + ibuId = pasienDao.findIdByNoCm(ibuNoCm); + if (CommonUtil.isNotNullOrEmpty(ibuId) && !voucher.getPasienId().equals(ibuId)) { + throw new ServiceVOException("Kode voucher tidak sesuai dengan pasien yang diperuntukkan"); } else if (!voucher.getPasienId().equals(pasienId)) { throw new ServiceVOException("Kode voucher tidak sesuai dengan pasien yang diperuntukkan"); } @@ -2318,9 +2320,9 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel .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"); + throw new ServiceVOException( + "Produk: " + dtoPaket.get().getNamaProduk() + " - Paket: " + voucher.getPaket().getNamaProduk() + + " belum dilakukan mapping /" + " tidak dapat dilakukan diskon"); 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 -> { @@ -2337,25 +2339,28 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel 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 -> { - Double hargaDiscount = p.getHargaDiscount(); - if (CommonUtil.isNotNullOrEmpty(hargaDiscount) && hargaDiscount > 0.0) { - // Cek Detail Diskon - List detailPelayananPaket = pelayananPasienDetailDao - .findByPelayananPasien(p.getNoRec()); - List 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); + if (CommonUtil.isNotNullOrEmpty(norecPelayananPaket)) { + List pelayananPaket = pelayananPasienDao.findAll(norecPelayananPaket); + pelayananPaket.forEach(p -> { + Double hargaDiscount = p.getHargaDiscount(); + if (CommonUtil.isNotNullOrEmpty(hargaDiscount) && hargaDiscount > 0.0) { + // Cek Detail Diskon + List detailPelayananPaket = pelayananPasienDetailDao + .findByPelayananPasien(p.getNoRec()); + List 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); + p.setVoucherPaket(voucher); + p.setHargaDiscount(0.0); + }); + } + if (CommonUtil.isNotNullOrEmpty(detailPelayanan)) + pelayananPasienDetailDao.save(detailPelayanan); } { List pelayanan = new ArrayList<>(); @@ -2371,7 +2376,8 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel pelayanan.add(p); }); }); - pelayananPasienDao.save(pelayanan); + if (CommonUtil.isNotNullOrEmpty(pelayanan)) + pelayananPasienDao.save(pelayanan); } { List pelayanan = new ArrayList<>(); @@ -2549,10 +2555,11 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel VoucherPaket voucher = getVoucher(kodeVoucher, basicValidation); PasienDaftar pendaftaran = pasienDaftarDao.findByNoRegistrasi(noRegistrasi); String ibuNoCm = pendaftaran.getPasien().getReportDisplay(); - if (CommonUtil.isNotNullOrEmpty(ibuNoCm)) { - List ibu = pasienDao.findByNoCm(ibuNoCm.trim()); - if (CommonUtil.isNotNullOrEmpty(ibu) && !voucher.getPasienId().equals(ibu.get(0).getId())) - throw new ServiceVOException("Kode voucher tidak sesuai dengan pasien yang diperuntukkan"); + Integer ibuId = null; + if (CommonUtil.isNotNullOrEmpty(ibuNoCm)) + ibuId = pasienDao.findIdByNoCm(ibuNoCm); + if (CommonUtil.isNotNullOrEmpty(ibuId) && !voucher.getPasienId().equals(ibuId)) { + throw new ServiceVOException("Kode voucher tidak sesuai dengan pasien yang diperuntukkan"); } else if (CommonUtil.isNotNullOrEmpty(pendaftaran) && !pendaftaran.getPasien().getId().equals(voucher.getPasienId())) { throw new ServiceVOException("Kode voucher tidak sesuai dengan pasien yang diperuntukkan");