From c687445e3a7af9aeac6ed92d1e56d0c3afd57857 Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Wed, 16 Aug 2023 15:45:44 +0700 Subject: [PATCH] Update service pelayanan pasien Penyesuaian diskon paket di verifikasi pasien pulang --- .../medifirst2000/dao/VoucherPaketDao.java | 8 ++ .../service/PelayananPasienService.java | 2 +- .../impl/PelayananPasienServiceImpl.java | 74 +++++++++++++++---- .../controller/PelayananController.java | 11 +-- .../controller/PelayananController.java | 3 +- 5 files changed, 78 insertions(+), 20 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/VoucherPaketDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/VoucherPaketDao.java index 335198f6..e15a4a2a 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/VoucherPaketDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/VoucherPaketDao.java @@ -9,4 +9,12 @@ import org.springframework.data.jpa.repository.JpaRepository; * @since 16 Aug 2023 */ public interface VoucherPaketDao extends JpaRepository { + /** + * Query untuk mendapatkan data voucher paket berdasarkan kode yang diminta + * + * @param kode + * sebuah String 7 karakter kode voucher + * @return data entitas VoucherPaket + */ + VoucherPaket findByKode(String kode); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/PelayananPasienService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/PelayananPasienService.java index d36bb2fe..568a02fa 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/PelayananPasienService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/PelayananPasienService.java @@ -32,5 +32,5 @@ public interface PelayananPasienService { List tagihan(String noRegistrasi); - void diskonTagihan(List dtoList); + void diskonTagihan(String kodeVoucher, List dtoList); } 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 1df788c6..94280db5 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 @@ -44,7 +44,7 @@ import static com.jasamedika.medifirst2000.constants.Master.TipePegawai.PURNA_WA /** * Implement class for PelayananPasienService - * + * * @author Generator */ @Service("pelayananPasienService") @@ -92,6 +92,12 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel @Autowired private MapPegawaiLaboratRadiologiDao mapPegawaiLaboratRadiologiDao; + @Autowired + private VoucherPaketDao voucherPaketDao; + + @Autowired + private MapProdukPaketToProdukDao mapProdukPaketToProdukDao; + @Override public Map savePelayananPasien(PelayananPasienVO vo) { Map result = new HashMap<>(); @@ -2198,25 +2204,67 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel } @Override - public void diskonTagihan(List dtoList) { - { + public void diskonTagihan(String kodeVoucher, List dtoList) { + if (CommonUtil.isNullOrEmpty(kodeVoucher)) { List listIdPegawai = mapPegawaiJabatanToUnitKerjaDao.findPegawaiIdByUnitKerjaIdAndJabatanId(48, 1075); boolean accessGranted = loginUserService.accessGranted(loginUserService.getLoginUser(), listIdPegawai); if (!accessGranted) throw new ServiceVOException("Tidak memiliki akses diskon total"); } - List listNoRec = dtoList.stream().map(TagihanPendaftaranDto::getNoRec).collect(Collectors.toList()); - List listPelayanan = pelayananPasienDao.findAll(listNoRec); - 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()); + if (CommonUtil.isNotNullOrEmpty(kodeVoucher)) { + VoucherPaket voucher = voucherPaketDao.findByKode(kodeVoucher); + if (CommonUtil.isNullOrEmpty(voucher)) + throw new ServiceVOException("Kode voucher tidak ditemukan"); + if (voucher.getTglKedaluwarsa().before(new Date())) + throw new ServiceVOException("Kode voucher sudah kedaluwarsa pada " + + new SimpleDateFormat("dd MMMM yyyy HH:mm:ss", new Locale("in", "ID")) + .format(voucher.getTglKedaluwarsa())); + List listNoRec = dtoList.stream().filter(TagihanPendaftaranDto::getIsPaket) + .map(TagihanPendaftaranDto::getNoRec).collect(Collectors.toList()); + List listPelayanan = pelayananPasienDao.findAll(listNoRec); + { + Optional byPasien = listPelayanan.stream().filter( + p -> p.getPasien().getPasienDaftar().getPasien().getId().equals(voucher.getPasien().getId())) + .findFirst(); + if (!byPasien.isPresent()) + throw new ServiceVOException("Kode voucher tidak sesuai dengan pasien yang diperuntukkan"); + } + { + List listId = dtoList.stream().map(TagihanPendaftaranDto::getIdProduk) + .collect(Collectors.toList()); + List detail = mapProdukPaketToProdukDao + .findAllByPaketId(voucher.getPaket().getId()); + Optional byProduk = detail.stream() + .filter(d -> !listId.contains(d.getProduk().getId())).findFirst(); + if (byProduk.isPresent()) + throw new ServiceVOException("Produk " + byProduk.get().getProduk().getNamaProduk() + + " tidak dapat didiskon karena belum dilakukan mapping"); + } + 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.setIsPasien(tagihanPendaftaranDto.getIsPaket()); + }); }); - }); - pelayananPasienDao.save(listPelayanan); + pelayananPasienDao.save(listPelayanan); + } else { + List listNoRec = dtoList.stream().map(TagihanPendaftaranDto::getNoRec).collect(Collectors.toList()); + List listPelayanan = pelayananPasienDao.findAll(listNoRec); + 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()); + }); + }); + pelayananPasienDao.save(listPelayanan); + } + } } \ No newline at end of file diff --git a/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/controller/PelayananController.java b/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/controller/PelayananController.java index 0599abfd..2f9d4002 100644 --- a/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/controller/PelayananController.java +++ b/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/controller/PelayananController.java @@ -219,19 +219,20 @@ public class PelayananController extends LocaleController { @RequestMapping(value = "/tagihan/diskon/save", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity simpanDiskonTagihan(HttpServletRequest request, + @RequestParam(value = "kode-voucher", required = false) String kodeVoucher, @RequestBody List dtoList) { try { - pelayananPasienService.diskonTagihan(dtoList); + pelayananPasienService.diskonTagihan(kodeVoucher, dtoList); mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, getMessage(MessageResource.LABEL_SUCCESS, request)); return RestUtil.getJsonResponse(dtoList, HttpStatus.OK, mapHeaderMessage); } catch (ServiceVOException e) { - LOGGER.error("Got exception {} when simpan diskon tagihan {}", e.getMessage(), null); - Map error = new HashMap(); - error.put("bad-request", e.getMessage()); + LOGGER.error("Got exception {} when simpan diskon tagihan", e.getMessage()); + Map error = new HashMap<>(); + error.put("bad_request", e.getMessage()); return RestUtil.getJsonResponse(null, HttpStatus.BAD_REQUEST, error); } catch (JpaSystemException jse) { - LOGGER.error("Got exception {} when simpan diskon tagihan {}", jse.getMessage(), null); + LOGGER.error("Got exception {} when simpan diskon tagihan", jse.getMessage()); addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); } diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/PelayananController.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/PelayananController.java index 467549cf..2f9d4002 100644 --- a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/PelayananController.java +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/PelayananController.java @@ -219,9 +219,10 @@ public class PelayananController extends LocaleController { @RequestMapping(value = "/tagihan/diskon/save", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity simpanDiskonTagihan(HttpServletRequest request, + @RequestParam(value = "kode-voucher", required = false) String kodeVoucher, @RequestBody List dtoList) { try { - pelayananPasienService.diskonTagihan(dtoList); + pelayananPasienService.diskonTagihan(kodeVoucher, dtoList); mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, getMessage(MessageResource.LABEL_SUCCESS, request)); return RestUtil.getJsonResponse(dtoList, HttpStatus.OK, mapHeaderMessage);