diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SlipGajiDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SlipGajiDao.java index 59223757..c8cc266b 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SlipGajiDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SlipGajiDao.java @@ -19,6 +19,10 @@ public interface SlipGajiDao extends JpaRepository { @Query("select pg.id from SlipGaji sg inner join sg.pegawai pg where sg.bulan between :start and :end") List findPegawaiByBulan(@Param("start") Date start, @Param("end") Date end); + @Query("select distinct pg.id from SlipGajiKomponen sgk " + "inner join sgk.slipGaji sg " + + "inner join sg.pegawai pg where sg.bulan between :start and :end") + List findPegawaiKomponenByBulan(@Param("start") Date start, @Param("end") Date end); + @Query("select new Map(sg.id as id,pg.id as idPegawai,pg.namaLengkap as namaPegawai) " + "from SlipGaji sg " + "inner join sg.pegawai pg " + "where sg.bulan between :start and :end " + "order by pg.namaLengkap") List> findAllByBulan(@Param("start") Date start, @Param("end") Date end); diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/ReportService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/ReportService.java index 49016421..2e71747f 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/ReportService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/ReportService.java @@ -12,6 +12,7 @@ import com.jasamedika.medifirst2000.dto.KartuPulangPasienDto; import com.jasamedika.medifirst2000.dto.KwitansiDto; import com.jasamedika.medifirst2000.dto.LampiranSPPHDto; import com.jasamedika.medifirst2000.dto.RekapPendapatanHarianPoliklinikDto; +import com.jasamedika.medifirst2000.dto.SlipHeaderDto; import com.jasamedika.medifirst2000.dto.SuratPesananSementaraDto; import com.jasamedika.medifirst2000.entities.Pasien; import com.jasamedika.medifirst2000.vo.PasienVO; @@ -133,5 +134,5 @@ public interface ReportService extends BaseVoService Map defineSlipGajiDataSource(Integer pegawaiId, Long bulan); - List> allSlipGajiDataSource(Long bulan); + List allSlipGajiDataSource(Long bulan); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/ReportServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/ReportServiceImpl.java index a9b6e440..90ac99b5 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/ReportServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/ReportServiceImpl.java @@ -65,6 +65,11 @@ import com.jasamedika.medifirst2000.dto.LampiranSPPHDto; import com.jasamedika.medifirst2000.dto.RekapPendapatanHarianPoliklinikDto; import com.jasamedika.medifirst2000.dto.SlipGajiDto; import com.jasamedika.medifirst2000.dto.SlipGajiKomponenDto; +import com.jasamedika.medifirst2000.dto.SlipHeaderDto; +import com.jasamedika.medifirst2000.dto.SlipJumlahDto; +import com.jasamedika.medifirst2000.dto.SlipPegawaiDto; +import com.jasamedika.medifirst2000.dto.SlipPenerimaanDto; +import com.jasamedika.medifirst2000.dto.SlipPotonganDto; import com.jasamedika.medifirst2000.dto.SuratPesananSementaraDto; import com.jasamedika.medifirst2000.entities.Jabatan; import com.jasamedika.medifirst2000.entities.JenisLimbahB3Masuk; @@ -3533,16 +3538,108 @@ public class ReportServiceImpl extends BaseVoServiceImpl implements ReportServic } @Override - public List> allSlipGajiDataSource(Long bulan) { - List> result = new ArrayList<>(); + public List allSlipGajiDataSource(Long bulan) { + List result = new ArrayList<>(); Date month = new Date(bulan); Date start = DateUtil.startMonth(month); Date end = DateUtil.endMonth(month); - List listIdPegawai = slipGajiDao.findPegawaiByBulan(start, end); + List listIdPegawai = slipGajiDao.findPegawaiKomponenByBulan(start, end); for (Integer idPegawai : listIdPegawai) { - result.add(this.defineSlipGajiDataSource(idPegawai, bulan)); + SlipHeaderDto rsDto = this.setSlipGajiDataSource(idPegawai, bulan); + if (CommonUtil.isNotNullOrEmpty(rsDto)) + result.add(rsDto); } return result; } + private SlipHeaderDto setSlipGajiDataSource(Integer pegawaiId, Long bulan) { + SlipHeaderDto.SlipHeaderDtoBuilder resultBuilder = SlipHeaderDto.builder(); + Locale indonesia = new Locale("in", "ID"); + NumberFormat nf = NumberFormat.getCurrencyInstance(indonesia); + SimpleDateFormat df = new SimpleDateFormat("MMMM-yyyy", indonesia); + SimpleDateFormat tglLahir = new SimpleDateFormat("dd-MM-yyyy", indonesia); + SimpleDateFormat tglPrint = new SimpleDateFormat("dd MMMM yyyy", indonesia); + SlipGajiDto dto = slipGajiService.get(pegawaiId, bulan); + Date tglLahirPegawai = pegawaiDao.findTglLahirById(pegawaiId); + List komponenDto = new ArrayList<>(); + if (CommonUtil.isNotNullOrEmpty(dto.getKomponen())) + komponenDto = dto.getKomponen(); + if (komponenDto.size() > 0) { + SlipPegawaiDto.SlipPegawaiDtoBuilder pegawaiDtoBuilder = SlipPegawaiDto.builder(); + pegawaiDtoBuilder.title("Slip Gaji"); + pegawaiDtoBuilder.nama(CommonUtil.isNotNullOrEmpty(dto.getNamaPegawai()) ? dto.getNamaPegawai() : "-"); + pegawaiDtoBuilder.nip(CommonUtil.isNotNullOrEmpty(dto.getNip()) ? dto.getNip() : "-"); + pegawaiDtoBuilder.periode(df.format(new Date(bulan))); + pegawaiDtoBuilder + .tgl_lahir(CommonUtil.isNotNullOrEmpty(tglLahirPegawai) ? tglLahir.format(tglLahirPegawai) : "-"); + pegawaiDtoBuilder.jabatan(CommonUtil.isNotNullOrEmpty(dto.getJabatan()) ? dto.getJabatan() : "-"); + pegawaiDtoBuilder.unit_kerja(CommonUtil.isNotNullOrEmpty(dto.getJabatan()) ? dto.getJabatan() : "-"); + pegawaiDtoBuilder + .sub_unit(CommonUtil.isNotNullOrEmpty(dto.getSubUnitKerja()) ? dto.getSubUnitKerja() : "-"); + SlipPenerimaanDto.SlipPenerimaanDtoBuilder penerimaanDtoBuilder = SlipPenerimaanDto.builder(); + SlipPotonganDto.SlipPotonganDtoBuilder potonganDtoBuilder = SlipPotonganDto.builder(); + SlipJumlahDto.SlipJumlahDtoBuilder jumlahDtoBuilder = SlipJumlahDto.builder(); + BigDecimal jumlahPenerimaan = BigDecimal.ZERO; + BigDecimal jumlahPemotongan = BigDecimal.ZERO; + BigDecimal jumlahPenerimaanBersih = BigDecimal.ZERO; + for (SlipGajiKomponenDto k : komponenDto) { + if (Master.JenisKomponenGaji.PENERIMAAN == k.getIdJenisKomponen()) { + jumlahPenerimaan = jumlahPenerimaan.add(new BigDecimal(k.getNominal().doubleValue())); + } else if (Master.JenisKomponenGaji.PEMOTONGAN == k.getIdJenisKomponen()) { + jumlahPemotongan = jumlahPemotongan.add(new BigDecimal(k.getNominal().doubleValue())); + } + if (Master.KomponenGaji.GAJI == k.getIdKomponen()) { + penerimaanDtoBuilder.gaji(nf.format(k.getNominal())); + } else if (Master.KomponenGaji.REMUNERASI_KINERJA == k.getIdKomponen()) { + penerimaanDtoBuilder.remun_kinerja(nf.format(k.getNominal())); + } else if (Master.KomponenGaji.REMUNERASI_TAMBAHAN == k.getIdKomponen()) { + penerimaanDtoBuilder.remun_tambahan(nf.format(k.getNominal())); + } else if (Master.KomponenGaji.FEE_FOR_SERVICE == k.getIdKomponen()) { + penerimaanDtoBuilder.ffs(nf.format(k.getNominal())); + } else if (Master.KomponenGaji.FEE_FOR_ONSITE == k.getIdKomponen()) { + penerimaanDtoBuilder.ffo(nf.format(k.getNominal())); + } else if (Master.KomponenGaji.UANG_MAKAN == k.getIdKomponen()) { + penerimaanDtoBuilder.uang_makan(nf.format(k.getNominal())); + } else if (Master.KomponenGaji.UANG_LEMBUR == k.getIdKomponen()) { + penerimaanDtoBuilder.uang_lembur(nf.format(k.getNominal())); + } else if (Master.KomponenGaji.PPH_GAJI == k.getIdKomponen()) { + potonganDtoBuilder.pph_gaji(nf.format(k.getNominal())); + } else if (Master.KomponenGaji.PPH_REMUNERASI == k.getIdKomponen()) { + potonganDtoBuilder.pph_remun(nf.format(k.getNominal())); + } else if (Master.KomponenGaji.PPH_FEE_FOR_SERVICE == k.getIdKomponen()) { + potonganDtoBuilder.pph_ffs(nf.format(k.getNominal())); + } else if (Master.KomponenGaji.PPH_FEE_FOR_ONSITE == k.getIdKomponen()) { + potonganDtoBuilder.pph_ffo(nf.format(k.getNominal())); + } else if (Master.KomponenGaji.PPH_UANG_MAKAN == k.getIdKomponen()) { + potonganDtoBuilder.pph_um(nf.format(k.getNominal())); + } else if (Master.KomponenGaji.PPH_UANG_LEMBUR == k.getIdKomponen()) { + potonganDtoBuilder.pph_ul(nf.format(k.getNominal())); + } else if (Master.KomponenGaji.IURAN_WAJIB_KOPERASI == k.getIdKomponen()) { + potonganDtoBuilder.iuran_koperasi(nf.format(k.getNominal())); + } else if (Master.KomponenGaji.PINJAMAN_KOPERASI == k.getIdKomponen()) { + potonganDtoBuilder.pinjam_koperasi(nf.format(k.getNominal())); + } else if (Master.KomponenGaji.BIAYA_OBAT_ALKES == k.getIdKomponen()) { + potonganDtoBuilder.biaya_obat(nf.format(k.getNominal())); + } else if (Master.KomponenGaji.BIAYA_RAWAT_INAP == k.getIdKomponen()) { + potonganDtoBuilder.biaya_ri(nf.format(k.getNominal())); + } else if (Master.KomponenGaji.BIAYA_RAWAT_JALAN == k.getIdKomponen()) { + potonganDtoBuilder.biaya_rj(nf.format(k.getNominal())); + } + } + jumlahDtoBuilder.jumlah_gross(nf.format(jumlahPenerimaan)); + jumlahDtoBuilder.jumlah_potongan(nf.format(jumlahPemotongan)); + jumlahPenerimaanBersih = jumlahPenerimaan.subtract(new BigDecimal(jumlahPemotongan.doubleValue())); + jumlahDtoBuilder.jumlah_nett(nf.format(jumlahPenerimaanBersih)); + resultBuilder.pegawaiDto(pegawaiDtoBuilder.build()); + resultBuilder.penerimaanDto(penerimaanDtoBuilder.build()); + resultBuilder.potonganDto(potonganDtoBuilder.build()); + resultBuilder.jumlahDto(jumlahDtoBuilder.build()); + resultBuilder.print("dicetak melalui aplikasi SMART pada " + tglPrint.format(new Date())); + } + SlipHeaderDto result = resultBuilder.build(); + if (CommonUtil.isNullOrEmpty(result.getPegawai())) { + return null; + } + return result; + } } diff --git a/jasamedika-reporting/src/main/java/com/jasamedika/medifirst2000/controller/ReportingController.java b/jasamedika-reporting/src/main/java/com/jasamedika/medifirst2000/controller/ReportingController.java index 1ef515c6..fab3f9c6 100644 --- a/jasamedika-reporting/src/main/java/com/jasamedika/medifirst2000/controller/ReportingController.java +++ b/jasamedika-reporting/src/main/java/com/jasamedika/medifirst2000/controller/ReportingController.java @@ -95,6 +95,7 @@ import com.jasamedika.medifirst2000.dto.PengkajianAwalPasienRawatJalanAnakDto; import com.jasamedika.medifirst2000.dto.PerjanjianPasienDto; import com.jasamedika.medifirst2000.dto.ReportingPegawaiDto; import com.jasamedika.medifirst2000.dto.SensusHarianDto; +import com.jasamedika.medifirst2000.dto.SlipHeaderDto; import com.jasamedika.medifirst2000.dto.SuratPesananSementaraDto; import com.jasamedika.medifirst2000.entities.Jabatan; import com.jasamedika.medifirst2000.entities.LoginUser; @@ -7856,10 +7857,10 @@ public class ReportingController extends LocaleController } @RequestMapping(value = "/slip-gaji/json", method = RequestMethod.GET) - public ResponseEntity>> jsonSlipGaji(HttpServletRequest request, + public ResponseEntity> jsonSlipGaji(HttpServletRequest request, @RequestParam(value = "bulan", required = true) Long bulan) { try { - List> result = reportService.allSlipGajiDataSource(bulan); + List result = reportService.allSlipGajiDataSource(bulan); mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, getMessage(MessageResource.LABEL_SUCCESS, request)); return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage);