Update service pelayanan pasien

Perbaikan validasi voucher untuk pasien anak
This commit is contained in:
Salman Manoe 2023-08-30 11:01:17 +07:00
parent bea9b0903e
commit d10ec1fa10
2 changed files with 53 additions and 41 deletions

View File

@ -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<Pasien, Integer> {
public interface PasienDao extends JpaRepository<Pasien, Integer> {
@Query("select model from Pasien model where model.noCm = :noCm")
List<Pasien> findPasienBynoCm(@Param("noCm") String noCm);
@ -47,6 +49,9 @@ public interface PasienDao extends PagingAndSortingRepository<Pasien, Integer> {
@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, "

View File

@ -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<Pasien> 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<Pasien> 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<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 -> {
@ -2337,25 +2339,28 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
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);
if (CommonUtil.isNotNullOrEmpty(norecPelayananPaket)) {
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);
p.setVoucherPaket(voucher);
p.setHargaDiscount(0.0);
});
}
if (CommonUtil.isNotNullOrEmpty(detailPelayanan))
pelayananPasienDetailDao.save(detailPelayanan);
}
{
List<PelayananPasien> 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<PelayananPasien> 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<Pasien> 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");