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 1bd5fd62..7a116a80 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 @@ -15,9 +15,13 @@ import com.jasamedika.medifirst2000.entities.SlipGajiKomponen; * @since Jan 30, 2023 */ public interface SlipGajiKomponenDao extends JpaRepository { - @Query("select new Map(sgk.id as id," + "sgk.komponen.id as idKomponen," - + "sgk.komponen.namaKomponen as namaKomponen," + "sgk.nominal as nominal) " + "from SlipGajiKomponen sgk " - + "where sgk.slipGaji.pegawai.id = :pegawaiId " + "and sgk.slipGaji.bulan between :start and :end") + @Query("select new Map(sgk.id as id," + "sgk.komponen.jenisKomponen as idJenisKomponen," + + "case when sgk.komponen.jenisKomponen = 1 then 'Penerimaan' " + + "when sgk.komponen.jenisKomponen = 2 then 'Pemotongan' end as jenisKomponen," + + "sgk.komponen.id as idKomponen," + "sgk.komponen.namaKomponen as namaKomponen," + + "sgk.nominal as nominal) " + "from SlipGajiKomponen sgk " + "where sgk.slipGaji.pegawai.id = :pegawaiId " + + "and sgk.slipGaji.bulan between :start and :end " + + "order by sgk.komponen.jenisKomponen, sgk.komponen.id") List> findAll(@Param("pegawaiId") Integer pegawaiId, @Param("start") Date start, @Param("end") Date end); 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 daf7b76c..886e53f5 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 @@ -10,7 +10,6 @@ import java.util.ArrayList; import java.util.Comparator; import java.util.Date; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; @@ -141,13 +140,20 @@ public class SlipGajiServiceImpl implements SlipGajiService { @Override public void save(SlipGajiDto dto) { SlipGaji.SlipGajiBuilder slipGaji = SlipGaji.builder(); - if (CommonUtil.isNotNullOrEmpty(dto.getId())) + Date month = new Date(dto.getBulan()); + Date start = DateUtil.startMonth(month); + Date end = DateUtil.endMonth(month); + Optional existedSlipGaji = slipGajiDao.findByPegawaiAndBulan(dto.getIdPegawai(), start, end); + if (existedSlipGaji.isPresent()) { + slipGaji.id(existedSlipGaji.get().getId()); + } else if (CommonUtil.isNotNullOrEmpty(dto.getId())) { slipGaji.id(dto.getId()); + } slipGaji.pegawai(pegawaiDao.findById(dto.getIdPegawai())); - slipGaji.bulan(new Date(dto.getBulan())); + slipGaji.bulan(month); SlipGaji savedSlip = slipGajiDao.save(slipGaji.build()); if (CommonUtil.isNotNullOrEmpty(savedSlip)) { - if (CommonUtil.isNullOrEmpty(dto.getId())) { + if (!existedSlipGaji.isPresent() && CommonUtil.isNullOrEmpty(dto.getId())) { List listMapping = mappingJabatanDao.findByPegawaiId(dto.getIdPegawai()); List listDetail = new ArrayList<>(); listMapping.forEach(j -> { @@ -167,7 +173,7 @@ public class SlipGajiServiceImpl implements SlipGajiService { } { List listKomponen = new ArrayList<>(); - Set dtos = dto.getKomponen(); + List dtos = dto.getKomponen(); dtos.forEach(k -> { SlipGajiKomponen.SlipGajiKomponenBuilder kBuilder = SlipGajiKomponen.builder(); if (CommonUtil.isNotNullOrEmpty(k.getId())) @@ -258,15 +264,19 @@ public class SlipGajiServiceImpl implements SlipGajiService { } { List> listKomponen = slipGajiKomponenDao.findAll(pegawaiId, start, end); - Set dtoList = new HashSet<>(); + List dtoList = new ArrayList<>(); listKomponen.forEach(k -> { SlipGajiKomponenDto.SlipGajiKomponenDtoBuilder kBuilder = SlipGajiKomponenDto.builder(); kBuilder.id(k.get("id").toString()); + kBuilder.idJenisKomponen(Integer.valueOf(k.get("idJenisKomponen").toString())); + kBuilder.jenisKomponen(k.get("jenisKomponen").toString()); kBuilder.idKomponen(Integer.valueOf(k.get("idKomponen").toString())); kBuilder.namaKomponen(k.get("namaKomponen").toString()); kBuilder.nominal(new BigDecimal(k.get("nominal").toString())); dtoList.add(kBuilder.build()); }); + dtoList.stream().sorted(Comparator.comparing(o1 -> o1.getIdKomponen())) + .sorted(Comparator.comparing(o2 -> o2.getIdJenisKomponen())).collect(Collectors.toList()); dto.komponen(dtoList); } } diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/dto/SlipGajiDto.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/dto/SlipGajiDto.java index 85499b07..d3099bfb 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/dto/SlipGajiDto.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/dto/SlipGajiDto.java @@ -1,6 +1,6 @@ package com.jasamedika.medifirst2000.dto; -import java.util.Set; +import java.util.List; import javax.validation.constraints.NotNull; @@ -37,13 +37,13 @@ public class SlipGajiDto { private Long bulan; @Caption(value = "Komponen Gaji") - private Set komponen; + private List komponen; public SlipGajiDto() { } public SlipGajiDto(String id, Integer idPegawai, String namaPegawai, String jabatan, String unitKerja, - String subUnitKerja, String grade, Long bulan, Set komponen) { + String subUnitKerja, String grade, Long bulan, List komponen) { super(); this.id = id; this.idPegawai = idPegawai; @@ -120,11 +120,11 @@ public class SlipGajiDto { this.bulan = bulan; } - public Set getKomponen() { + public List getKomponen() { return komponen; } - public void setKomponen(Set komponen) { + public void setKomponen(List komponen) { this.komponen = komponen; } @@ -145,7 +145,7 @@ public class SlipGajiDto { private String subUnitKerja; private String grade; private Long bulan; - private Set komponen; + private List komponen; public SlipGajiDtoBuilder() { } @@ -190,7 +190,7 @@ public class SlipGajiDto { return this; } - public SlipGajiDtoBuilder komponen(final Set komponen) { + public SlipGajiDtoBuilder komponen(final List komponen) { this.komponen = komponen; return this; } diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/dto/SlipGajiKomponenDto.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/dto/SlipGajiKomponenDto.java index b51d3231..cfda7906 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/dto/SlipGajiKomponenDto.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/dto/SlipGajiKomponenDto.java @@ -8,6 +8,12 @@ public class SlipGajiKomponenDto { @Caption(value = "ID") private String id; + @Caption(value = "ID Jenis Komponen Gaji") + private Integer idJenisKomponen; + + @Caption(value = "Jenis Komponen Gaji") + private String jenisKomponen; + @Caption(value = "ID Komponen Gaji") private Integer idKomponen; @@ -20,8 +26,11 @@ public class SlipGajiKomponenDto { public SlipGajiKomponenDto() { } - public SlipGajiKomponenDto(String id, Integer idKomponen, String namaKomponen, BigDecimal nominal) { + public SlipGajiKomponenDto(String id, Integer idJenisKomponen, String jenisKomponen, Integer idKomponen, + String namaKomponen, BigDecimal nominal) { this.id = id; + this.idJenisKomponen = idJenisKomponen; + this.jenisKomponen = jenisKomponen; this.idKomponen = idKomponen; this.namaKomponen = namaKomponen; this.nominal = nominal; @@ -35,6 +44,22 @@ public class SlipGajiKomponenDto { this.id = id; } + public Integer getIdJenisKomponen() { + return idJenisKomponen; + } + + public void setIdJenisKomponen(Integer idJenisKomponen) { + this.idJenisKomponen = idJenisKomponen; + } + + public String getJenisKomponen() { + return jenisKomponen; + } + + public void setJenisKomponen(String jenisKomponen) { + this.jenisKomponen = jenisKomponen; + } + public Integer getIdKomponen() { return idKomponen; } @@ -65,6 +90,8 @@ public class SlipGajiKomponenDto { public static class SlipGajiKomponenDtoBuilder { private String id; + private Integer idJenisKomponen; + private String jenisKomponen; private Integer idKomponen; private String namaKomponen; private BigDecimal nominal; @@ -77,6 +104,16 @@ public class SlipGajiKomponenDto { return this; } + public SlipGajiKomponenDtoBuilder idJenisKomponen(final Integer idJenisKomponen) { + this.idJenisKomponen = idJenisKomponen; + return this; + } + + public SlipGajiKomponenDtoBuilder jenisKomponen(final String jenisKomponen) { + this.jenisKomponen = jenisKomponen; + return this; + } + public SlipGajiKomponenDtoBuilder idKomponen(final Integer idKomponen) { this.idKomponen = idKomponen; return this; @@ -93,7 +130,8 @@ public class SlipGajiKomponenDto { } public SlipGajiKomponenDto build() { - return new SlipGajiKomponenDto(this.id, this.idKomponen, this.namaKomponen, this.nominal); + return new SlipGajiKomponenDto(this.id, this.idJenisKomponen, this.jenisKomponen, this.idKomponen, + this.namaKomponen, this.nominal); } } }