diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SlipGajiKomponenDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SlipGajiKomponenDao.java index 2feac00e..1033f9da 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SlipGajiKomponenDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SlipGajiKomponenDao.java @@ -35,8 +35,6 @@ public interface SlipGajiKomponenDao extends JpaRepository findAllByKomponen(@Param("listIdSlipGaji") List listIdSlipGaji, - @Param("idKomponen") Integer idKomponen); + @Query("select sgk from SlipGajiKomponen sgk " + "where sgk.slipGaji.id in (:listIdSlipGaji)") + List findAllBySlipGaji(@Param("listIdSlipGaji") List listIdSlipGaji); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/SlipGajiServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/SlipGajiServiceImpl.java index 91b2e82f..91986bea 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/SlipGajiServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/SlipGajiServiceImpl.java @@ -180,9 +180,93 @@ public class SlipGajiServiceImpl implements SlipGajiService { @Override public void save(List dtoList) { - dtoList.forEach(dto -> { - this.save(dto); - }); + List listSlip = new ArrayList<>(); + List listDetail = new ArrayList<>(); + List listKomponen = new ArrayList<>(); + Optional first = dtoList.stream().findFirst(); + if (first.isPresent()) { + Date month = new Date(first.get().getBulan()); + Date start = DateUtil.startMonth(month); + Date end = DateUtil.endMonth(month); + List slipByBulan = slipGajiDao.findByBulan(start, end); + List allJabatan = mappingJabatanDao.findAllEnabled(); + List listExistIdSlip = slipByBulan.stream().map(SlipGaji::getId).collect(Collectors.toList()); + { + List collectNew = dtoList.stream().filter(d -> !listExistIdSlip.contains(d.getId())) + .collect(Collectors.toList()); + collectNew.forEach(s -> { + SlipGaji.SlipGajiBuilder slipGajiBuilder = SlipGaji.builder(); + slipGajiBuilder.id(s.getId()); + Pegawai pegawai = new Pegawai(); + pegawai.setId(s.getIdPegawai()); + slipGajiBuilder.pegawai(pegawai); + slipGajiBuilder.bulan(month); + SlipGaji slipGaji = slipGajiBuilder.build(); + listSlip.add(slipGaji); + List collectJabatan = allJabatan.stream() + .filter(j -> j.getPegawaiId().equals(s.getIdPegawai())).collect(Collectors.toList()); + collectJabatan.forEach(j -> { + SlipGajiDetail.SlipGajiDetailBuilder detail = SlipGajiDetail.builder(); + detail.slipGaji(slipGaji); + if (CommonUtil.isNotNullOrEmpty(j.getJabatanId())) { + Jabatan jabatan = new Jabatan(); + jabatan.setId(j.getJabatanId()); + detail.jabatan(jabatan); + } + if (CommonUtil.isNotNullOrEmpty(j.getUnitKerjaPegawaiId())) { + UnitKerjaPegawai unitKerja = new UnitKerjaPegawai(); + unitKerja.setId(j.getUnitKerjaPegawaiId()); + detail.unitKerja(unitKerja); + } + if (CommonUtil.isNotNullOrEmpty(j.getSubUnitKerjaPegawaiId())) { + SubUnitKerjaPegawai subUnit = new SubUnitKerjaPegawai(); + subUnit.setId(j.getSubUnitKerjaPegawaiId()); + detail.subUnitKerja(subUnit); + } + if (CommonUtil.isNotNullOrEmpty(j.getGradeId())) { + NilaiKelompokJabatan grade = new NilaiKelompokJabatan(); + grade.setId(j.getGradeId()); + detail.grade(grade); + } + listDetail.add(detail.build()); + }); + List komponen = s.getKomponen(); + komponen.stream().filter(k -> CommonUtil.isNotNullOrEmpty(k.getNominal())).forEach(k -> { + SlipGajiKomponen.SlipGajiKomponenBuilder kBuilder = SlipGajiKomponen.builder(); + if (CommonUtil.isNotNullOrEmpty(k.getId())) + kBuilder.id(k.getId()); + KomponenGaji kGaji = new KomponenGaji(); + kGaji.setId(k.getIdKomponen()); + kBuilder.komponen(kGaji); + kBuilder.nominal(k.getNominal()); + kBuilder.slipGaji(slipGaji); + listKomponen.add(kBuilder.build()); + }); + }); + } + { + List collectEdit = dtoList.stream().filter(d -> listExistIdSlip.contains(d.getId())) + .collect(Collectors.toList()); + List allKomponen = slipGajiKomponenDao.findAllBySlipGaji(listExistIdSlip); + collectEdit.forEach(e -> { + SlipGaji.SlipGajiBuilder slipGajiBuilder = SlipGaji.builder(); + slipGajiBuilder.id(e.getId()); + Pegawai pegawai = new Pegawai(); + pegawai.setId(e.getIdPegawai()); + slipGajiBuilder.pegawai(pegawai); + slipGajiBuilder.bulan(month); + SlipGaji slipGaji = slipGajiBuilder.build(); + listSlip.add(slipGaji); + List komponen = e.getKomponen(); + /** + * TODO + */ + }); + } + slipGajiDao.save(listSlip); + slipGajiDetailDao.save(listDetail); + slipGajiKomponenDao.save(listKomponen); + } } @Override