From b2210f374c480281a7d7a6964ed0ace3156cda63 Mon Sep 17 00:00:00 2001 From: salmanoe Date: Fri, 27 Jan 2023 08:26:00 +0700 Subject: [PATCH] Update SlipGajiService Pembuatan service initialisasi data untuk download template slip gaji --- .../dao/MapPegawaiJabatanToUnitKerjaDao.java | 4 + .../medifirst2000/dao/SlipGajiDao.java | 6 +- .../service/SlipGajiService.java | 2 + .../service/impl/SlipGajiServiceImpl.java | 93 ++++++++++++++----- .../controller/SlipGajiController.java | 11 +++ 5 files changed, 92 insertions(+), 24 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapPegawaiJabatanToUnitKerjaDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapPegawaiJabatanToUnitKerjaDao.java index 1e8d78ef..f0695265 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapPegawaiJabatanToUnitKerjaDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapPegawaiJabatanToUnitKerjaDao.java @@ -352,6 +352,10 @@ public interface MapPegawaiJabatanToUnitKerjaDao extends CrudRepository findByPegawaiId(@Param("pegawaiId") Integer pegawaiId); + @Query("select model from MapPegawaiJabatanToUnitKerja model " + "inner join model.pegawai pg " + + "where model.statusEnabled is true " + "and pg.statusEnabled is true") + List findAll(); + @Query("select new Map(mapp.id as idMapping, mapp.pegawaiId as idPegawai, mapp.atasanLangsungId as idAtasan, mapp.pejabatPenilaiId as idPenilai) " + "from MapPegawaiJabatanToUnitKerja mapp " + "where mapp.statusEnabled is true and mapp.jabatanId is not null and mapp.unitKerjaPegawaiId is not null and mapp.subUnitKerjaPegawaiId is not null " 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 7ef30098..ffb37f66 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 @@ -1,7 +1,8 @@ package com.jasamedika.medifirst2000.dao; +import java.util.Date; +import java.util.List; import java.util.Optional; -import java.util.UUID; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; @@ -12,4 +13,7 @@ import com.jasamedika.medifirst2000.entities.SlipGaji; public interface SlipGajiDao extends JpaRepository { @Query("select sg from SlipGaji sg where sg.pegawai.id = :pegawaiId") Optional findByPegawai(@Param("pegawaiId") Integer pegawaiId); + + @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); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/SlipGajiService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/SlipGajiService.java index 8af06ed1..45f68dd7 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/SlipGajiService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/SlipGajiService.java @@ -7,6 +7,8 @@ import com.jasamedika.medifirst2000.dto.SlipGajiDto; * @since Jan 20, 2023 */ public interface SlipGajiService { + void init(); + void save(SlipGajiDto dto); SlipGajiDto get(Integer pegawaiId); 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 ec6c3d47..8bc6f5a9 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 @@ -1,6 +1,7 @@ package com.jasamedika.medifirst2000.service.impl; import java.util.ArrayList; +import java.util.Comparator; import java.util.Date; import java.util.List; import java.util.Optional; @@ -10,24 +11,26 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import com.jasamedika.medifirst2000.dao.JabatanDao; import com.jasamedika.medifirst2000.dao.MapPegawaiJabatanToUnitKerjaDao; -import com.jasamedika.medifirst2000.dao.NilaiKelompokJabatanDao; import com.jasamedika.medifirst2000.dao.PegawaiDao; import com.jasamedika.medifirst2000.dao.PenerimaanGajiDao; import com.jasamedika.medifirst2000.dao.PenguranganGajiDao; import com.jasamedika.medifirst2000.dao.SlipGajiDao; import com.jasamedika.medifirst2000.dao.SlipGajiDetailDao; -import com.jasamedika.medifirst2000.dao.SubUnitKerjaDao; -import com.jasamedika.medifirst2000.dao.UnitKerjaDao; import com.jasamedika.medifirst2000.dto.SlipGajiDto; +import com.jasamedika.medifirst2000.entities.Jabatan; import com.jasamedika.medifirst2000.entities.MapPegawaiJabatanToUnitKerja; +import com.jasamedika.medifirst2000.entities.NilaiKelompokJabatan; +import com.jasamedika.medifirst2000.entities.Pegawai; import com.jasamedika.medifirst2000.entities.PenerimaanGaji; import com.jasamedika.medifirst2000.entities.PenguranganGaji; import com.jasamedika.medifirst2000.entities.SlipGaji; import com.jasamedika.medifirst2000.entities.SlipGajiDetail; +import com.jasamedika.medifirst2000.entities.SubUnitKerjaPegawai; +import com.jasamedika.medifirst2000.entities.UnitKerjaPegawai; import com.jasamedika.medifirst2000.service.SlipGajiService; import com.jasamedika.medifirst2000.util.CommonUtil; +import com.jasamedika.medifirst2000.util.DateUtil; /** * @author salmanoe @@ -54,17 +57,69 @@ public class SlipGajiServiceImpl implements SlipGajiService { @Autowired private MapPegawaiJabatanToUnitKerjaDao mappingJabatanDao; - @Autowired - private JabatanDao jabatanDao; - - @Autowired - private UnitKerjaDao unitKerjaDao; - - @Autowired - private SubUnitKerjaDao subUnitKerjaDao; - - @Autowired - private NilaiKelompokJabatanDao gradeDao; + @Override + public void init() { + Date now = new Date(); + Date startMonth = DateUtil.startMonth(now); + Date endMonth = DateUtil.endMonth(now); + List listIdPegawaiSlip = slipGajiDao.findPegawaiByBulan(startMonth, endMonth); + List listJabatan = mappingJabatanDao.findAll(); + listJabatan = listJabatan.stream().filter(j -> !listIdPegawaiSlip.contains(j.getPegawaiId())) + .sorted(Comparator.comparingInt(MapPegawaiJabatanToUnitKerja::getPegawaiId)) + .collect(Collectors.toList()); + List listIdPegawai = new ArrayList<>(); + listJabatan.forEach(j -> { + if (!listIdPegawai.contains(j.getPegawaiId())) + listIdPegawai.add(j.getPegawaiId()); + }); + List listSlipGaji = new ArrayList<>(); + List listSlipGajiDetail = new ArrayList<>(); + for (Integer idPegawai : listIdPegawai) { + SlipGaji.SlipGajiBuilder b = SlipGaji.builder(); + for (MapPegawaiJabatanToUnitKerja j : listJabatan) { + if (idPegawai.equals(j.getPegawaiId())) { + Pegawai pegawai = new Pegawai(); + pegawai.setId(j.getPegawaiId()); + b.pegawai(pegawai); + b.bulan(now); + break; + } + } + SlipGaji slipGaji = b.build(); + listSlipGaji.add(slipGaji); + if (CommonUtil.isNotNullOrEmpty(slipGaji)) { + for (MapPegawaiJabatanToUnitKerja j : listJabatan) { + if (idPegawai.equals(j.getPegawaiId())) { + 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 subunitKerja = new SubUnitKerjaPegawai(); + subunitKerja.setId(j.getSubUnitKerjaPegawaiId()); + detail.subUnitKerja(subunitKerja); + } + if (CommonUtil.isNotNullOrEmpty(j.getGradeId())) { + NilaiKelompokJabatan grade = new NilaiKelompokJabatan(); + grade.setId(j.getGradeId()); + detail.grade(grade); + } + listSlipGajiDetail.add(detail.build()); + } + } + } + slipGajiDao.save(listSlipGaji); + slipGajiDetailDao.save(listSlipGajiDetail); + } + } @Override public void save(SlipGajiDto dto) { @@ -79,14 +134,6 @@ public class SlipGajiServiceImpl implements SlipGajiService { listMapping.forEach(j -> { SlipGajiDetail.SlipGajiDetailBuilder detail = SlipGajiDetail.builder(); detail.slipGaji(savedSlip); -// if (CommonUtil.isNotNullOrEmpty(j.getJabatanId())) -// detail.jabatan(jabatanDao.findOne(j.getJabatanId())); -// if (CommonUtil.isNotNullOrEmpty(j.getUnitKerjaPegawaiId())) -// detail.unitKerja(unitKerjaDao.findOne(j.getUnitKerjaPegawaiId())); -// if (CommonUtil.isNotNullOrEmpty(j.getSubUnitKerjaPegawaiId())) -// detail.subUnitKerja(subUnitKerjaDao.findOne(j.getSubUnitKerjaPegawaiId())); -// if (CommonUtil.isNotNullOrEmpty(j.getGradeId())) -// detail.grade(gradeDao.findOne(j.getGradeId())); if (CommonUtil.isNotNullOrEmpty(j.getJabatan())) detail.jabatan(j.getJabatan()); if (CommonUtil.isNotNullOrEmpty(j.getUnitKerjaPegawai())) diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SlipGajiController.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SlipGajiController.java index f5273fcc..6b13a192 100644 --- a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SlipGajiController.java +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SlipGajiController.java @@ -21,6 +21,17 @@ public class SlipGajiController { @Autowired private SlipGajiService slipGajiService; + @RequestMapping(value = "/init", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity init() { + try { + slipGajiService.init(); + return new ResponseEntity<>(true, HttpStatus.CREATED); + } catch (Exception e) { + e.printStackTrace(); + return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); + } + } + @RequestMapping(value = "/save", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity save(@RequestBody @Valid SlipGajiDto dto) { try {