diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SkoringTindakanFarmakologiDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SkoringTindakanFarmakologiDao.java new file mode 100644 index 00000000..69d375c0 --- /dev/null +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SkoringTindakanFarmakologiDao.java @@ -0,0 +1,87 @@ +package com.jasamedika.medifirst2000.dao; + +import java.util.List; +import java.util.Map; + +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 com.jasamedika.medifirst2000.entities.SkoringTindakanFarmakologi; +import com.jasamedika.medifirst2000.entities.SkoringTindakanNakes; + +/** + * @author salmanoe + * @since Jun 20, 2022 + * + */ +@Repository("skoringTindakanFarmakologiDao") +public interface SkoringTindakanFarmakologiDao extends PagingAndSortingRepository { + + String strAllEnabled = "select new Map(stf.noRec as noRec,stf.statusEnabled as statusEnabled," + + "stf.skor as skor,stf.statusVerifikasi as kdVerif," + + "(case when stf.statusVerifikasi is false then 'Belum Verifikasi' " + + "when stf.statusVerifikasi is true then 'Terverifikasi' end) as stVerif," + + "stf.tanggalMulaiBerlaku as tglMulaiBerlaku,stf.tanggalPembaharuanData as tglPembaharuanData," + + "prf.id as produkId,prf.namaProduk as namaProduk," + + "(case when prf.kdProduk = 1 then 'Pelayanan Pasien (Tarif)' " + + "when prf.kdProduk = 2 then 'Pelayanan Pasien (Nontarif)' " + + "when prf.kdProduk = 3 then 'Pelayanan Nonpasien' end) as jenisProduk) " + + "from SkoringTindakanFarmakologi stf " + "inner join stf.produk prf " + "where stf.statusEnabled is true " + + "and to_char(stf.tanggalMulaiBerlaku,'yyyy-MM-dd') <= to_char(now(),'yyyy-MM-dd') "; + + String produk = "and lower(prf.namaProduk) like %:namaProduk% "; + + String statusVerifikasi = "and stf.statusVerifikasi = :isVerif "; + + String sortSearch = "order by prf.namaProduk asc, stf.tanggalMulaiBerlaku desc, stf.tanggalPembaharuanData desc"; + + @Query(strAllEnabled + sortSearch) + List> findAllEnabled(); + + @Query(strAllEnabled + produk + sortSearch) + List> findAllEnabledByProduk(@Param("namaProduk") String namaProduk); + + @Query(strAllEnabled + statusVerifikasi + sortSearch) + List> findAllEnabledByVerif(@Param("isVerif") Boolean isVerif); + + @Query(strAllEnabled + produk + statusVerifikasi + sortSearch) + List> findAllEnabledByProdukVerif(@Param("namaProduk") String namaProduk, + @Param("isVerif") Boolean isVerif); + + String strCekDupSkoring = "select stf.noRec from SkoringTindakanFarmakologi stf " + "inner join stf.produk prf " + + "where stf.statusEnabled is true " + + "and lower(regexp_replace(prf.namaProduk,:patternText,'','g')) = :namaProduk "; + + String skor = " and stf.skor = :skor"; + + String tglBerlaku = " and to_char(stf.tanggalMulaiBerlaku,'yyyy-MM-dd') = :tglMulaiBerlaku"; + + String idSkoring = " and stf.noRec <> :noRec"; + + String sortTglBerlaku = " order by stf.tanggalMulaiBerlaku desc"; + + @Query(strCekDupSkoring + skor + sortTglBerlaku) + List findLastDupSkoring(@Param("namaProduk") String namaProduk, @Param("skor") Double skor, + @Param("patternText") String patternText); + + @Query(strCekDupSkoring + tglBerlaku) + List findDupSkoring(@Param("namaProduk") String namaProduk, + @Param("tglMulaiBerlaku") String tglMulaiBerlaku, @Param("patternText") String patternText); + + @Query(strCekDupSkoring + skor + idSkoring + sortTglBerlaku) + List findLastDupSkoring(@Param("namaProduk") String namaProduk, @Param("skor") Double skor, + @Param("patternText") String patternText, @Param("noRec") String noRec); + + @Query(strCekDupSkoring + tglBerlaku + idSkoring) + List findDupSkoring(@Param("namaProduk") String namaProduk, + @Param("tglMulaiBerlaku") String tglMulaiBerlaku, @Param("patternText") String patternText, + @Param("noRec") String noRec); + + @Query("select new Map(stf.noRec as noRec," + "stf.skor as skor,prf.namaProduk as namaProduk) " + + "from SkoringTindakanFarmakologi stf " + "inner join stf.produk prf " + "where stf.statusEnabled is true " + + "and stf.noRec in (:listNorec)") + List> findAllDup(@Param("listNorec") List listNorec); + +} diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/SkoringTindakanFarmakologiService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/SkoringTindakanFarmakologiService.java new file mode 100644 index 00000000..e7e909d7 --- /dev/null +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/SkoringTindakanFarmakologiService.java @@ -0,0 +1,27 @@ +package com.jasamedika.medifirst2000.service; + +import java.util.List; +import java.util.Map; + +import org.springframework.orm.jpa.JpaSystemException; + +import com.jasamedika.medifirst2000.entities.SkoringTindakanFarmakologi; +import com.jasamedika.medifirst2000.vo.SkoringTindakanFarmakologiVO; + +/** + * @author salmanoe + * @since Jun 20, 2022 + * + */ +public interface SkoringTindakanFarmakologiService + extends BaseVoService { + + List> findAllEnabled(String namaProduk, Boolean isVerif, Integer idProfesi) + throws JpaSystemException; + + List> findDuplicateSkoring(String namaProduk, Double skor, Integer idProfesi, + Long tglMulaiBerlaku, String noRec) throws JpaSystemException; + + Map findAkses(Integer idPegawai) throws JpaSystemException; + +} diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/SkoringTindakanFarmakologiServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/SkoringTindakanFarmakologiServiceImpl.java new file mode 100644 index 00000000..01a57163 --- /dev/null +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/SkoringTindakanFarmakologiServiceImpl.java @@ -0,0 +1,171 @@ +package com.jasamedika.medifirst2000.service.impl; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.orm.jpa.JpaSystemException; + +import com.jasamedika.medifirst2000.converter.BaseConverterImpl; +import com.jasamedika.medifirst2000.dao.LoggingUserDao; +import com.jasamedika.medifirst2000.dao.SkoringTindakanFarmakologiDao; +import com.jasamedika.medifirst2000.entities.LoggingUser; +import com.jasamedika.medifirst2000.entities.LoginUser; +import com.jasamedika.medifirst2000.entities.ProdukFarmakologi; +import com.jasamedika.medifirst2000.entities.SkoringTindakanFarmakologi; +import com.jasamedika.medifirst2000.entities.SkoringTindakanNakes; +import com.jasamedika.medifirst2000.exception.ServiceVOException; +import com.jasamedika.medifirst2000.service.SkoringTindakanFarmakologiService; +import com.jasamedika.medifirst2000.util.CommonUtil; +import com.jasamedika.medifirst2000.vo.ProdukFarmakologiVO; +import com.jasamedika.medifirst2000.vo.SkoringTindakanFarmakologiVO; +import com.jasamedika.medifirst2000.vo.SkoringTindakanNakesVO; + +/** + * @author salmanoe + * @since Jun 20, 2022 + * + */ +public class SkoringTindakanFarmakologiServiceImpl extends BaseVoServiceImpl + implements SkoringTindakanFarmakologiService { + + @Autowired + private BaseConverterImpl skoringTindakanConverter; + + @Autowired + private BaseConverterImpl produkFarmakologiConverter; + + @Autowired + private SkoringTindakanFarmakologiDao skoringTindakanDao; + + @Autowired + private LoggingUserDao loggingUserDao; + + public void addLoggingUser(Integer idLoginUser, String idReferensi, String keterangan) { + LoggingUser loggingUser = new LoggingUser(); + LoginUser loginUser = new LoginUser(); + + loggingUser.setKdProfile((short) 0); + loggingUser.setStatusEnabled(true); + loggingUser.setTanggal(new Date()); + loginUser.setId(idLoginUser); + loggingUser.setLoginUser(loginUser); + loggingUser.setJenisLog("Skoring Tindakan Farmakologi"); + loggingUser.setReferensiId(idReferensi); + loggingUser.setReferensi("sdm_skoringtindakanfarmakologi_t"); + loggingUser.setKeterangan(keterangan); + + loggingUserDao.save(loggingUser); + } + + @Override + public SkoringTindakanFarmakologiVO add(SkoringTindakanFarmakologiVO vo) + throws JpaSystemException, ServiceVOException { + ProdukFarmakologi produk = produkFarmakologiConverter.transferVOToModel(vo.getProduk(), + new ProdukFarmakologi()); + SkoringTindakanFarmakologi skoringTindakan = skoringTindakanConverter.transferVOToModel(vo, + new SkoringTindakanFarmakologi()); + + skoringTindakan.setProduk(produk); + skoringTindakan.setTanggalPembaharuanData(new Date()); + SkoringTindakanFarmakologi resultModel = skoringTindakanDao.save(skoringTindakan); + + addLoggingUser(vo.getLoginUserId(), resultModel.getNoRec(), "Buat data"); + + SkoringTindakanFarmakologiVO resultVO = new SkoringTindakanFarmakologiVO(); + resultVO = skoringTindakanConverter.transferModelToVO(resultModel, resultVO); + + return resultVO; + } + + @Override + public SkoringTindakanFarmakologiVO update(SkoringTindakanFarmakologiVO vo) + throws JpaSystemException, ServiceVOException { + SkoringTindakanFarmakologi skoringTindakanLama = skoringTindakanDao.findOne(vo.getNoRec()); + + ProdukFarmakologi produk = produkFarmakologiConverter.transferVOToModel(vo.getProduk(), + new ProdukFarmakologi()); + SkoringTindakanFarmakologi skoringTindakanBaru = skoringTindakanConverter.transferVOToModel(vo, + skoringTindakanLama); + + skoringTindakanBaru.setProduk(produk); + skoringTindakanBaru.setTanggalPembaharuanData(new Date()); + SkoringTindakanFarmakologi resultModel = skoringTindakanDao.save(skoringTindakanBaru); + + if (vo.getStatusEnabled()) { + addLoggingUser(vo.getLoginUserId(), resultModel.getNoRec(), "Edit data"); + } else if (!vo.getStatusEnabled()) { + addLoggingUser(vo.getLoginUserId(), resultModel.getNoRec(), "Hapus data"); + } + + SkoringTindakanFarmakologiVO resultVO = new SkoringTindakanFarmakologiVO(); + resultVO = skoringTindakanConverter.transferModelToVO(resultModel, resultVO); + + return resultVO; + } + + @Override + public Boolean delete(String key) throws JpaSystemException { + skoringTindakanDao.delete(key); + + return true; + } + + @Override + public SkoringTindakanFarmakologiVO findById(String key) throws JpaSystemException { + SkoringTindakanFarmakologiVO result = new SkoringTindakanFarmakologiVO(); + + SkoringTindakanFarmakologi skoringTindakan = skoringTindakanDao.findOne(key); + if (CommonUtil.isNotNullOrEmpty(skoringTindakan)) { + result = skoringTindakanConverter.transferModelToVO(skoringTindakan, result); + } + + return result; + } + + @Override + public List findAll() throws JpaSystemException { + List result = new ArrayList(); + + Iterable models = skoringTindakanDao.findAll(); + if (CommonUtil.isNotNullOrEmpty(models)) { + for (SkoringTindakanFarmakologi model : models) { + SkoringTindakanFarmakologiVO vo = new SkoringTindakanFarmakologiVO(); + vo = skoringTindakanConverter.transferModelToVO(model, vo); + result.add(vo); + } + } + + return result; + } + + @Override + public Map findAllWithPageAndLimitAndSortByAndDirectionParameter(Integer page, Integer limit, + String sort, String dir) { + + return null; + } + + @Override + public List> findAllEnabled(String namaProduk, Boolean isVerif, Integer idProfesi) + throws JpaSystemException { + // TODO Auto-generated method stub + return null; + } + + @Override + public List> findDuplicateSkoring(String namaProduk, Double skor, Integer idProfesi, + Long tglMulaiBerlaku, String noRec) throws JpaSystemException { + // TODO Auto-generated method stub + return null; + } + + @Override + public Map findAkses(Integer idPegawai) throws JpaSystemException { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/SkoringTindakanFarmakologi.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/SkoringTindakanFarmakologi.java new file mode 100644 index 00000000..523f72eb --- /dev/null +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/SkoringTindakanFarmakologi.java @@ -0,0 +1,101 @@ +package com.jasamedika.medifirst2000.entities; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.validation.constraints.NotNull; + +import com.jasamedika.medifirst2000.base.BaseTransaction; +import com.jasamedika.medifirst2000.helper.Caption; + +/** + * @author salmanoe + * @since Jun 20, 2022 + * + */ +@Entity +@Table(name = "sdm_skoringtindakanfarmakologi_t") +public class SkoringTindakanFarmakologi extends BaseTransaction { + + @Column(name = "skor", nullable = false) + @Caption(value = "Nilai Skor") + private Double skor; + + @Column(name = "statusverifikasi", nullable = false) + @Caption(value = "Status Verifikasi") + private Boolean statusVerifikasi; + + @Caption(value = "Tanggal Mulai Berlaku") + @Column(name = "tanggalmulaiberlaku", nullable = false) + @Temporal(TemporalType.DATE) + private Date tanggalMulaiBerlaku; + + @Caption(value = "Tanggal Pembaharuan Data") + @Column(name = "tanggalpembaharuandata", nullable = false) + @Temporal(TemporalType.TIMESTAMP) + private Date tanggalPembaharuanData; + + @ManyToOne + @NotNull(message = "Produk Farmakologi tidak boleh kosong") + @JoinColumn(name = "objectprodukfarmakologifk") + @Caption(value = "Produk Farmakologi") + private ProdukFarmakologi produk; + + @Column(name = "objectprodukfarmakologifk", insertable = false, updatable = false, nullable = false) + private Integer produkId; + + public Double getSkor() { + return skor; + } + + public void setSkor(Double skor) { + this.skor = skor; + } + + public Boolean getStatusVerifikasi() { + return statusVerifikasi; + } + + public void setStatusVerifikasi(Boolean statusVerifikasi) { + this.statusVerifikasi = statusVerifikasi; + } + + public Date getTanggalMulaiBerlaku() { + return tanggalMulaiBerlaku; + } + + public void setTanggalMulaiBerlaku(Date tanggalMulaiBerlaku) { + this.tanggalMulaiBerlaku = tanggalMulaiBerlaku; + } + + public Date getTanggalPembaharuanData() { + return tanggalPembaharuanData; + } + + public void setTanggalPembaharuanData(Date tanggalPembaharuanData) { + this.tanggalPembaharuanData = tanggalPembaharuanData; + } + + public ProdukFarmakologi getProduk() { + return produk; + } + + public void setProduk(ProdukFarmakologi produk) { + this.produk = produk; + } + + public Integer getProdukId() { + return produkId; + } + + public void setProdukId(Integer produkId) { + this.produkId = produkId; + } + +} diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/SkoringTindakanFarmakologiVO.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/SkoringTindakanFarmakologiVO.java new file mode 100644 index 00000000..a8bce960 --- /dev/null +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/SkoringTindakanFarmakologiVO.java @@ -0,0 +1,90 @@ +package com.jasamedika.medifirst2000.vo; + +import java.util.Date; + +import com.jasamedika.medifirst2000.base.vo.BaseTransactionVO; +import com.jasamedika.medifirst2000.helper.Caption; + +/** + * @author salmanoe + * @since Jun 20, 2022 + * + */ +public class SkoringTindakanFarmakologiVO extends BaseTransactionVO { + + @Caption(value = "Nilai Skor") + private Double skor; + + @Caption(value = "Status Verifikasi") + private Boolean statusVerifikasi; + + @Caption(value = "Tanggal Mulai Berlaku") + private Date tanggalMulaiBerlaku; + + @Caption(value = "Tanggal Pembaharuan Data") + private Date tanggalPembaharuanData; + + @Caption(value = "Produk Perawat") + private ProdukFarmakologiVO produk; + + private Integer produkId; + + private Integer loginUserId; + + public Double getSkor() { + return skor; + } + + public void setSkor(Double skor) { + this.skor = skor; + } + + public Boolean getStatusVerifikasi() { + return statusVerifikasi; + } + + public void setStatusVerifikasi(Boolean statusVerifikasi) { + this.statusVerifikasi = statusVerifikasi; + } + + public Date getTanggalMulaiBerlaku() { + return tanggalMulaiBerlaku; + } + + public void setTanggalMulaiBerlaku(Date tanggalMulaiBerlaku) { + this.tanggalMulaiBerlaku = tanggalMulaiBerlaku; + } + + public Date getTanggalPembaharuanData() { + return tanggalPembaharuanData; + } + + public void setTanggalPembaharuanData(Date tanggalPembaharuanData) { + this.tanggalPembaharuanData = tanggalPembaharuanData; + } + + public ProdukFarmakologiVO getProduk() { + return produk; + } + + public void setProduk(ProdukFarmakologiVO produk) { + this.produk = produk; + } + + public Integer getProdukId() { + return produkId; + } + + public void setProdukId(Integer produkId) { + this.produkId = produkId; + } + + public Integer getLoginUserId() { + return loginUserId; + } + + public void setLoginUserId(Integer loginUserId) { + this.loginUserId = loginUserId; + } + +} diff --git a/jasamedika-domain/src/main/resources/hibernate.cfg.xml b/jasamedika-domain/src/main/resources/hibernate.cfg.xml index a269562b..51212510 100644 --- a/jasamedika-domain/src/main/resources/hibernate.cfg.xml +++ b/jasamedika-domain/src/main/resources/hibernate.cfg.xml @@ -704,5 +704,6 @@ +