package com.iconplus.smartproc.service.approval; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.entity.DrpPengadaanDokumen; import com.iconplus.smartproc.model.projection.DrpRekomendasiView; import com.iconplus.smartproc.model.request.DrpApprovalRequest; import com.iconplus.smartproc.model.response.DrpApprovalResponse; import com.iconplus.smartproc.model.response.DrpPengadaanDokumenResponse; import com.iconplus.smartproc.model.response.DrpPengadaanResponse; import com.iconplus.smartproc.model.response.DrpRekomendasiResponse; import com.iconplus.smartproc.repository.DrpPengadaanDokumenRepository; import com.iconplus.smartproc.repository.DrpPengadaanRepository; import com.iconplus.smartproc.repository.DrpRekomendasiRepository; import com.iconplus.smartproc.service.drppengadaan.GetDrpPengadaanService; import com.iconplus.smartproc.util.Constants; import org.apache.commons.lang3.BooleanUtils; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; @Service public class GetApprovalService implements BaseService { private final DrpPengadaanRepository drpPengadaanRepository; private final DrpPengadaanDokumenRepository drpPengadaanDokumenRepository; private final DrpRekomendasiRepository drpRekomendasiRepository; public GetApprovalService(DrpPengadaanRepository drpPengadaanRepository, DrpPengadaanDokumenRepository drpPengadaanDokumenRepository, DrpRekomendasiRepository drpRekomendasiRepository) { this.drpPengadaanRepository = drpPengadaanRepository; this.drpPengadaanDokumenRepository = drpPengadaanDokumenRepository; this.drpRekomendasiRepository = drpRekomendasiRepository; } @Override public DrpApprovalResponse execute(DrpApprovalRequest input) { var drpPengadaan = drpPengadaanRepository.getDrpPengadaanById(input.getJenisPengadaanId()) .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, String.format(Constants.ERR_MSG_10001, "DRP Pengadaan", input.getJenisPengadaanId()))); List drpPengadaanDokumenResponseList = new ArrayList<>(); var drpPengadaanDokumenList = drpPengadaanDokumenRepository.findByDrpPengadaanIdAndIsDeleteFalse(drpPengadaan.getId()); for (DrpPengadaanDokumen drpPengadaanDokumen : drpPengadaanDokumenList) { DrpPengadaanDokumenResponse drpPengadaanDokumenResponse = DrpPengadaanDokumenResponse.builder() .id(drpPengadaanDokumen.getId()) .drpId(drpPengadaanDokumen.getDrpId()) .jenisDokumenId(drpPengadaanDokumen.getJenisDokumenId()) .filename(drpPengadaanDokumen.getFilename()) .keterangan(drpPengadaanDokumen.getKeterangan()) .build(); drpPengadaanDokumenResponseList.add(drpPengadaanDokumenResponse); } var pengadaan = DrpPengadaanResponse.builder() .id(drpPengadaan.getId()) .drpId(drpPengadaan.getDrpId()) .nomor(drpPengadaan.getNomor()) .namaPengadaan(drpPengadaan.getNamaPengadaan()) .lokasiId(drpPengadaan.getLokasiId()) .lokasi(drpPengadaan.getLokasi()) .jenisPengadaanId(drpPengadaan.getJenisPengadaanId()) .jenisPengadaan(drpPengadaan.getJenisPengadaan()) .unitInisiatorId(drpPengadaan.getUnitInisiatorId()) .unitInisiator(drpPengadaan.getUnitInisiator()) .hpe(drpPengadaan.getHpe()) .pagu(drpPengadaan.getPagu()) .sumberDanaId(drpPengadaan.getSumberDanaId()) .sumberDana(drpPengadaan.getSumberDana()) .metodePengadaanId(drpPengadaan.getMetodePengadaanId()) .metodePengadaan(drpPengadaan.getMetodePengadaan()) .supplyPositioningMatrixId(drpPengadaan.getSupplyPositioningMatrixId()) .supplyPositioningMatrix(drpPengadaan.getSupplyPositioningMatrix()) .metodePenyampaianId(drpPengadaan.getMetodePenyampaianId()) .metodePenyampaian(drpPengadaan.getMetodePenyampaian()) .jenisKontrakId(drpPengadaan.getJenisKontrakId()) .jenisKontrak(drpPengadaan.getJenisKontrak()) .strategiPengadaanId(drpPengadaan.getStrategiPengadaanId()) .strategiPengadaan(drpPengadaan.getStrategiPengadaan()) .rencanaTanggal(drpPengadaan.getRencanaTanggal()) .targetTanggal(drpPengadaan.getTargetTanggal()) .isActive(drpPengadaan.getIsActive()) .build(); List drpRekomendasiResponseList = new ArrayList<>(); var listDrpRekomendasi = drpRekomendasiRepository.getListDrpRekomendasi(input.getJenisPengadaanId()); for (DrpRekomendasiView drpRekomendasiView : listDrpRekomendasi) { DrpRekomendasiResponse drpRekomendasiResponse = DrpRekomendasiResponse.builder() .id(drpRekomendasiView.getId()) .jabatan(drpRekomendasiView.getJabatan()) .rekomendasi(drpRekomendasiView.getRekomendasi()) .rekomendasiDate(drpRekomendasiView.getRekomendasiDate()) .build(); if (drpRekomendasiView.getIsApprove() != null) { if (BooleanUtils.isTrue(drpRekomendasiView.getIsApprove())) { drpRekomendasiResponse.setStatus("Setuju"); } else { drpRekomendasiResponse.setStatus("Tolak"); } } drpRekomendasiResponseList.add(drpRekomendasiResponse); } return DrpApprovalResponse.builder() .dataPengadaan(pengadaan) .dataPengadaanDokumen(drpPengadaanDokumenResponseList) .dataRekomendasi(drpRekomendasiResponseList) .build(); } }