diff --git a/pom.xml b/pom.xml
index ce75179..bdc98a3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -135,6 +135,18 @@
spring-security-test
test
+
+
+ org.apache.poi
+ poi
+ 5.2.0
+
+
+ org.apache.poi
+ poi-ooxml
+ 5.2.0
+
+
diff --git a/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java b/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java
index 450cae0..d67dd5f 100644
--- a/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java
+++ b/src/main/java/com/iconplus/smartproc/controller/DrpPengadaanController.java
@@ -25,6 +25,7 @@ public class DrpPengadaanController {
private final EditUploadDrpPengadaanService editUploadDrpPengadaanService;
private final GetDrpPengadaanService getDrpPengadaanService;
private final PutDrpPengadaanService putDrpPengadaanService;
+ private final UploadBulkUploadPengadaanService uploadBulkUploadPengadaanService;
public DrpPengadaanController(PostCreateDrpPengadaanService postCreateDrpPengadaanService,
GetListDrpPengadaanService getListDrpPengadaanService,
@@ -33,7 +34,8 @@ public class DrpPengadaanController {
DeleteDokumenPendukungService deleteDokumenPendukungService,
EditUploadDrpPengadaanService editUploadDrpPengadaanService,
GetDrpPengadaanService getDrpPengadaanService,
- PutDrpPengadaanService putDrpPengadaanService) {
+ PutDrpPengadaanService putDrpPengadaanService,
+ UploadBulkUploadPengadaanService uploadBulkUploadPengadaanService) {
this.postCreateDrpPengadaanService = postCreateDrpPengadaanService;
this.getListDrpPengadaanService = getListDrpPengadaanService;
this.postDrpUploadDokumenPendukungService = postDrpUploadDokumenPendukungService;
@@ -42,6 +44,7 @@ public class DrpPengadaanController {
this.editUploadDrpPengadaanService = editUploadDrpPengadaanService;
this.getDrpPengadaanService = getDrpPengadaanService;
this.putDrpPengadaanService = putDrpPengadaanService;
+ this.uploadBulkUploadPengadaanService = uploadBulkUploadPengadaanService;
}
@GetMapping("/list/{id}")
@@ -110,4 +113,11 @@ public class DrpPengadaanController {
return deleteDokumenPendukungService.execute(drpPengadaanDokumenRequest);
}
+ @PostMapping("/bulk/upload")
+ public EmptyResponse bulkUploadPengadaan(@RequestParam(name = "file") MultipartFile file) throws IOException {
+ return uploadBulkUploadPengadaanService.execute(DrpPengadaanRequest.builder()
+ .file(file)
+ .build());
+ }
+
}
diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanRequest.java
index 7b80947..ebd9e26 100644
--- a/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanRequest.java
+++ b/src/main/java/com/iconplus/smartproc/model/request/DrpPengadaanRequest.java
@@ -6,6 +6,7 @@ import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.domain.Pageable;
+import org.springframework.web.multipart.MultipartFile;
import java.math.BigDecimal;
import java.sql.Date;
@@ -20,18 +21,28 @@ public class DrpPengadaanRequest extends BaseRequest {
private Long id;
private Long drpId;
+ private Integer tahun;
private String nomor;
private String namaPengadaan;
private Long lokasiId;
+ private String lokasi;
private Long jenisPengadaanId;
+ private String jenisPengadaan;
private Long unitInisiatorId;
+ private String unitInisiator;
private BigDecimal pagu;
private Long sumberDanaId;
+ private String sumberDana;
private Long supplyPositioningMatrixId;
+ private String supplyPositioningMatrix;
private Long metodePengadaanId;
+ private String metodePengadaan;
private Long metodePenyampaianId;
+ private String metodePenyampaian;
private Long jenisKontrakId;
+ private String jenisKontrak;
private Long strategiPengadaanId;
+ private String strategiPengadaan;
private Date rencanaTanggal;
private Date targetTanggal;
private BigDecimal hpe;
@@ -42,4 +53,6 @@ public class DrpPengadaanRequest extends BaseRequest {
private transient Pageable pageable;
+ private MultipartFile file;
+
}
diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java
index df816a1..c9c4c1b 100644
--- a/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java
+++ b/src/main/java/com/iconplus/smartproc/repository/DrpPengadaanRepository.java
@@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
+import java.util.List;
import java.util.Optional;
@Repository
@@ -98,5 +99,11 @@ public interface DrpPengadaanRepository extends JpaRepository findByIdAndIsDeleteFalse(Long id);
+ @Query(value = "SELECT dp " +
+ "FROM DrpPengadaan dp " +
+ "WHERE dp.namaPengadaan in (:namaPengadaan) " +
+ "AND dp.isDelete = false")
+ List getDrpPengadaanByListNamaPengadaan(List namaPengadaan);
+
}
diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java
index fc0f1d9..eebdfa8 100644
--- a/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java
+++ b/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java
@@ -47,8 +47,6 @@ public interface DrpRepository extends JpaRepository {
"WHERE d.isDelete = false")
Page getListApprovalDrp(Pageable pageable);
-
-
@Query(value = "SELECT d.id as id, " +
"d.tahun as tahun, " +
"d.isPrint as isPrint, " +
@@ -57,4 +55,10 @@ public interface DrpRepository extends JpaRepository {
"WHERE d.isDelete = false")
Page getListPrintDrp(Pageable pageable);
+ @Query(value = "SELECT d " +
+ "FROM Drp d " +
+ "WHERE d.isDelete = false " +
+ "AND d.tahun in (:tahun)")
+ List getListDrpByList(List tahun);
+
}
diff --git a/src/main/java/com/iconplus/smartproc/repository/JenisKontrakRepository.java b/src/main/java/com/iconplus/smartproc/repository/JenisKontrakRepository.java
index 187e656..3ec1212 100644
--- a/src/main/java/com/iconplus/smartproc/repository/JenisKontrakRepository.java
+++ b/src/main/java/com/iconplus/smartproc/repository/JenisKontrakRepository.java
@@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
+import java.util.List;
import java.util.Optional;
@Repository
@@ -29,4 +30,10 @@ public interface JenisKontrakRepository extends JpaRepository findByJenisKontrakAndIsDeleteFalse(String jenisKontrak);
+ @Query("SELECT jk " +
+ "FROM JenisKontrak jk " +
+ "WHERE jk.isDelete = false " +
+ "AND jk.jenisKontrak in (:listJenisKontrak)")
+ List getListJenisKontrakByList(List listJenisKontrak);
+
}
\ No newline at end of file
diff --git a/src/main/java/com/iconplus/smartproc/repository/JenisPengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/JenisPengadaanRepository.java
index 79cd333..a59dabf 100644
--- a/src/main/java/com/iconplus/smartproc/repository/JenisPengadaanRepository.java
+++ b/src/main/java/com/iconplus/smartproc/repository/JenisPengadaanRepository.java
@@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
+import java.util.List;
import java.util.Optional;
@Repository
@@ -25,5 +26,11 @@ public interface JenisPengadaanRepository extends JpaRepository getListJenisPengadaan(String search, Pageable pageable);
+
+ @Query(value = "SELECT jp " +
+ "FROM JenisPengadaan jp " +
+ "WHERE jp.jenisPengadaan in (:jenisPengadaan) " +
+ "AND jp.isDelete = false ")
+ List getListPengadaan(List jenisPengadaan);
}
\ No newline at end of file
diff --git a/src/main/java/com/iconplus/smartproc/repository/LokasiRepository.java b/src/main/java/com/iconplus/smartproc/repository/LokasiRepository.java
index b48a040..bf32073 100644
--- a/src/main/java/com/iconplus/smartproc/repository/LokasiRepository.java
+++ b/src/main/java/com/iconplus/smartproc/repository/LokasiRepository.java
@@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
+import java.util.List;
import java.util.Optional;
@Repository
@@ -28,5 +29,11 @@ public interface LokasiRepository extends JpaRepository {
Optional findByIdAndIsDeleteFalse(Long id);
Optional findByLokasiAndIsDeleteFalse(String lokasi);
+
+ @Query(value = "SELECT l " +
+ "FROM Lokasi l " +
+ "WHERE l.lokasi in (:lokasi) " +
+ "AND l.isDelete = false")
+ List getListLokasi(List lokasi);
}
diff --git a/src/main/java/com/iconplus/smartproc/repository/MetodePengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/MetodePengadaanRepository.java
index b8a18aa..1437153 100644
--- a/src/main/java/com/iconplus/smartproc/repository/MetodePengadaanRepository.java
+++ b/src/main/java/com/iconplus/smartproc/repository/MetodePengadaanRepository.java
@@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
+import java.util.List;
import java.util.Optional;
@Repository
@@ -28,5 +29,11 @@ public interface MetodePengadaanRepository extends JpaRepository findByIdAndIsDeleteFalse(Long id);
Optional findByMetodePengadaanAndIsDeleteFalse(String metodePengadaan);
+
+ @Query(value = "SELECT mp " +
+ "FROM MetodePengadaan mp " +
+ "WHERE mp.isDelete = false " +
+ "AND mp.metodePengadaan in (:metodePengadaan)")
+ List getListMetodePengadaanByList(List metodePengadaan);
}
diff --git a/src/main/java/com/iconplus/smartproc/repository/MetodePenyampaianRepository.java b/src/main/java/com/iconplus/smartproc/repository/MetodePenyampaianRepository.java
index 2c4f633..2fd535b 100644
--- a/src/main/java/com/iconplus/smartproc/repository/MetodePenyampaianRepository.java
+++ b/src/main/java/com/iconplus/smartproc/repository/MetodePenyampaianRepository.java
@@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
+import java.util.List;
import java.util.Optional;
@Repository
@@ -28,5 +29,11 @@ public interface MetodePenyampaianRepository extends JpaRepository findByIdAndIsDeleteFalse(Long id);
Optional findByMetodePenyampaianAndIsDeleteFalse(String metodePenyampaian);
+
+ @Query(value = "SELECT mp " +
+ "FROM MetodePenyampaian mp " +
+ "WHERE mp.isDelete = false " +
+ "AND mp.metodePenyampaian in (:metodePenyampaians)")
+ List getListMetodePenyampaianByList(List metodePenyampaians);
}
diff --git a/src/main/java/com/iconplus/smartproc/repository/StrategiPengadaanRepository.java b/src/main/java/com/iconplus/smartproc/repository/StrategiPengadaanRepository.java
index df56f9e..4deefeb 100644
--- a/src/main/java/com/iconplus/smartproc/repository/StrategiPengadaanRepository.java
+++ b/src/main/java/com/iconplus/smartproc/repository/StrategiPengadaanRepository.java
@@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
+import java.util.List;
import java.util.Optional;
@Repository
@@ -28,5 +29,11 @@ public interface StrategiPengadaanRepository extends JpaRepository findByIdAndIsDeleteFalse(Long id);
Optional findByStrategiPengadaanAndIsDeleteFalse(String strategiPengadaan);
+
+ @Query(value = "SELECT sp " +
+ "FROM StrategiPengadaan sp " +
+ "WHERE sp.isDelete = false " +
+ "AND sp.strategiPengadaan in (:listStrategiPengadaan)")
+ List getListStrategiPengadaanByList(List listStrategiPengadaan);
}
diff --git a/src/main/java/com/iconplus/smartproc/repository/SumberDanaRepository.java b/src/main/java/com/iconplus/smartproc/repository/SumberDanaRepository.java
index 8769890..83827ac 100644
--- a/src/main/java/com/iconplus/smartproc/repository/SumberDanaRepository.java
+++ b/src/main/java/com/iconplus/smartproc/repository/SumberDanaRepository.java
@@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
+import java.util.List;
import java.util.Optional;
@Repository
@@ -26,5 +27,11 @@ public interface SumberDanaRepository extends JpaRepository {
"ORDER BY sd.id")
Page getListSumberDana(String search, Pageable pageable);
+ @Query(value = "SELECT sd " +
+ "FROM SumberDana sd " +
+ "WHERE sd.isDelete = false " +
+ "AND sd.sumberDana in (:sumberDanas)")
+ List getListSumberDanaByList(List sumberDanas);
+
}
diff --git a/src/main/java/com/iconplus/smartproc/repository/SupplyPositioningMatrixRepository.java b/src/main/java/com/iconplus/smartproc/repository/SupplyPositioningMatrixRepository.java
index 85c2c48..7203afd 100644
--- a/src/main/java/com/iconplus/smartproc/repository/SupplyPositioningMatrixRepository.java
+++ b/src/main/java/com/iconplus/smartproc/repository/SupplyPositioningMatrixRepository.java
@@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import com.iconplus.smartproc.model.entity.SupplyPositioningMatrix;
+import java.util.List;
import java.util.Optional;
@Repository
@@ -28,5 +29,10 @@ public interface SupplyPositioningMatrixRepository extends JpaRepository findByIdAndIsDeleteFalse(Long id);
Optional findBySupplyPositioningMatrixAndIsDeleteFalse(String supplyPositioningMatrix);
+
+ @Query(value = "SELECT spm " +
+ "FROM SupplyPositioningMatrix spm " +
+ "WHERE spm.supplyPositioningMatrix in (:supplyPositioningMatrix)")
+ List getListSupplyPositioningMatrix(List supplyPositioningMatrix);
}
diff --git a/src/main/java/com/iconplus/smartproc/repository/UnitInisiatorRepository.java b/src/main/java/com/iconplus/smartproc/repository/UnitInisiatorRepository.java
index 0670075..edded65 100644
--- a/src/main/java/com/iconplus/smartproc/repository/UnitInisiatorRepository.java
+++ b/src/main/java/com/iconplus/smartproc/repository/UnitInisiatorRepository.java
@@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import com.iconplus.smartproc.model.entity.UnitInisiator;
+import java.util.List;
import java.util.Optional;
@Repository
@@ -26,5 +27,11 @@ public interface UnitInisiatorRepository extends JpaRepository getListUnitInisiator(String search, Pageable pageable);
+ @Query(value = "SELECT ui " +
+ "FROM UnitInisiator ui " +
+ "WHERE ui.isDelete = false " +
+ "AND ui.unitInisiator in (:unitInisiators)")
+ List getListUnitInisiatorByList(List unitInisiators);
+
}
diff --git a/src/main/java/com/iconplus/smartproc/service/CommonService.java b/src/main/java/com/iconplus/smartproc/service/CommonService.java
index 9e2b363..510195f 100644
--- a/src/main/java/com/iconplus/smartproc/service/CommonService.java
+++ b/src/main/java/com/iconplus/smartproc/service/CommonService.java
@@ -14,6 +14,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
import java.awt.image.BufferedImage;
import java.sql.Timestamp;
@@ -118,4 +119,9 @@ public class CommonService {
return MatrixToImageWriter.toBufferedImage(bitMatrix);
}
+
+ public boolean hasExcelFormat(MultipartFile file) {
+ String type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
+ return type.equals(file.getContentType());
+ }
}
diff --git a/src/main/java/com/iconplus/smartproc/service/drppengadaan/UploadBulkUploadPengadaanService.java b/src/main/java/com/iconplus/smartproc/service/drppengadaan/UploadBulkUploadPengadaanService.java
new file mode 100644
index 0000000..8c0b851
--- /dev/null
+++ b/src/main/java/com/iconplus/smartproc/service/drppengadaan/UploadBulkUploadPengadaanService.java
@@ -0,0 +1,350 @@
+package com.iconplus.smartproc.service.drppengadaan;
+
+import com.iconplus.smartproc.exception.BusinessException;
+import com.iconplus.smartproc.helper.model.EmptyResponse;
+import com.iconplus.smartproc.helper.service.BaseService;
+import com.iconplus.smartproc.model.entity.*;
+import com.iconplus.smartproc.model.request.DrpPengadaanRequest;
+import com.iconplus.smartproc.repository.*;
+import com.iconplus.smartproc.service.CommonService;
+import com.iconplus.smartproc.util.Constants;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class UploadBulkUploadPengadaanService implements BaseService {
+
+ private final DrpPengadaanRepository drpPengadaanRepository;
+ private final CommonService commonService;
+ private final LokasiRepository lokasiRepository;
+ private final JenisPengadaanRepository jenisPengadaanRepository;
+ private final UnitInisiatorRepository unitInisiatorRepository;
+ private final SumberDanaRepository sumberDanaRepository;
+ private final SupplyPositioningMatrixRepository supplyPositioningMatrixRepository;
+ private final MetodePengadaanRepository metodePengadaanRepository;
+ private final MetodePenyampaianRepository metodePenyampaianRepository;
+ private final JenisKontrakRepository jenisKontrakRepository;
+ private final StrategiPengadaanRepository strategiPengadaanRepository;
+ private final DrpRepository drpRepository;
+
+ public UploadBulkUploadPengadaanService(DrpPengadaanRepository drpPengadaanRepository,
+ CommonService commonService,
+ LokasiRepository lokasiRepository,
+ JenisPengadaanRepository jenisPengadaanRepository,
+ UnitInisiatorRepository unitInisiatorRepository,
+ SumberDanaRepository sumberDanaRepository,
+ SupplyPositioningMatrixRepository supplyPositioningMatrixRepository,
+ MetodePengadaanRepository metodePengadaanRepository,
+ MetodePenyampaianRepository metodePenyampaianRepository,
+ JenisKontrakRepository jenisKontrakRepository,
+ StrategiPengadaanRepository strategiPengadaanRepository,
+ DrpRepository drpRepository) {
+ this.drpPengadaanRepository = drpPengadaanRepository;
+ this.commonService = commonService;
+ this.lokasiRepository = lokasiRepository;
+ this.jenisPengadaanRepository = jenisPengadaanRepository;
+ this.unitInisiatorRepository = unitInisiatorRepository;
+ this.sumberDanaRepository = sumberDanaRepository;
+ this.supplyPositioningMatrixRepository = supplyPositioningMatrixRepository;
+ this.metodePengadaanRepository = metodePengadaanRepository;
+ this.metodePenyampaianRepository = metodePenyampaianRepository;
+ this.jenisKontrakRepository = jenisKontrakRepository;
+ this.strategiPengadaanRepository = strategiPengadaanRepository;
+ this.drpRepository = drpRepository;
+ }
+
+ @Override
+ public EmptyResponse execute(DrpPengadaanRequest input) throws IOException {
+
+ var isExcelFormat = commonService.hasExcelFormat(input.getFile());
+ if (!isExcelFormat) {
+ throw new BusinessException(Constants.ERR_CODE_10014,
+ Constants.ERR_TTL_10014,
+ Constants.ERR_MSG_10014);
+ }
+
+ var listDataExcel = transformFile(input);
+ validateDrpRequest(listDataExcel);
+
+ List drpPengadaanList = new ArrayList<>();
+
+ List lokasiList = getListLokasi(listDataExcel);
+ List jenisPengadaanList = getJenisPengadaans(listDataExcel);
+ List unitInisiatorList = getUnitInisiators(listDataExcel);
+ List sumberDanaList = getSumberDanas(listDataExcel);
+ List supplyPositioningMatrixList = getSupplyPositioningMatrices(listDataExcel);
+ List metodePengadaanList = getMetodePengadaans(listDataExcel);
+ List metodePenyampaianList = getMetodePenyampaians(listDataExcel);
+ List jenisKontrakList = getJenisKontraks(listDataExcel);
+ List strategiPengadaanList = getStrategiPengadaans(listDataExcel);
+ List listDrp = listDataExcel.stream().map(DrpPengadaanRequest::getTahun).collect(Collectors.toList());
+ List drpList = drpRepository.getListDrpByList(listDrp);
+
+
+ for (DrpPengadaanRequest drpPengadaanRequest : listDataExcel) {
+
+ DrpPengadaan drpPengadaanEntity = DrpPengadaan.builder()
+ .namaPengadaan(drpPengadaanRequest.getNamaPengadaan())
+ .nomor(drpPengadaanRequest.getNomor())
+ .pagu(drpPengadaanRequest.getPagu())
+ .rencanaTanggal(drpPengadaanRequest.getRencanaTanggal())
+ .targetTanggal(drpPengadaanRequest.getTargetTanggal())
+ .hpe(drpPengadaanRequest.getHpe())
+ .isDelete(false)
+ .build();
+
+ lokasiList.forEach(c-> {
+ if (StringUtils.equalsIgnoreCase(c.getLokasi(), drpPengadaanRequest.getLokasi())) {
+ drpPengadaanEntity.setLokasiId(c.getId());
+ }
+ });
+
+ jenisPengadaanList.forEach(c-> {
+ if (StringUtils.equalsIgnoreCase(c.getJenisPengadaan(), drpPengadaanRequest.getJenisPengadaan())) {
+ drpPengadaanEntity.setJenisPengadaanId(c.getId());
+ }
+ });
+
+ unitInisiatorList.forEach(c-> {
+ if (StringUtils.equalsIgnoreCase(c.getUnitInisiator(), drpPengadaanRequest.getUnitInisiator())) {
+ drpPengadaanEntity.setUnitInisiatorId(c.getId());
+ }
+ });
+
+ sumberDanaList.forEach(c-> {
+ if (StringUtils.equalsIgnoreCase(c.getSumberDana(), drpPengadaanRequest.getSumberDana())) {
+ drpPengadaanEntity.setSumberDanaId(c.getId());
+ }
+ });
+
+ supplyPositioningMatrixList.forEach(c-> {
+ if (StringUtils.equalsIgnoreCase(c.getSupplyPositioningMatrix(), drpPengadaanRequest.getSupplyPositioningMatrix())) {
+ drpPengadaanEntity.setSupplyPositioningMatrixId(c.getId());
+ }
+ });
+
+ metodePengadaanList.forEach(c-> {
+ if (StringUtils.equalsIgnoreCase(c.getMetodePengadaan(), drpPengadaanRequest.getMetodePengadaan())) {
+ drpPengadaanEntity.setMetodePengadaanId(c.getId());
+ }
+ });
+
+ metodePenyampaianList.forEach(c-> {
+ if (StringUtils.equalsIgnoreCase(c.getMetodePenyampaian(), drpPengadaanRequest.getMetodePenyampaian())) {
+ drpPengadaanEntity.setMetodePenyampaianId(c.getId());
+ }
+ });
+
+ jenisKontrakList.forEach(c-> {
+ if (StringUtils.equalsIgnoreCase(c.getJenisKontrak(), drpPengadaanRequest.getJenisKontrak())) {
+ drpPengadaanEntity.setJenisKontrakId(c.getId());
+ }
+ });
+
+ strategiPengadaanList.forEach(c-> {
+ if (StringUtils.equalsIgnoreCase(c.getStrategiPengadaan(), drpPengadaanRequest.getStrategiPengadaan())) {
+ drpPengadaanEntity.setStrategiPengadaanId(c.getId());
+ }
+ });
+
+ drpList.forEach(c-> {
+ if (c.getTahun().equals(drpPengadaanRequest.getTahun())) {
+ drpPengadaanEntity.setDrpId(c.getId());
+ }
+ });
+
+ drpPengadaanList.add(drpPengadaanEntity);
+ }
+
+ drpPengadaanRepository.saveAll(drpPengadaanList);
+
+ return new EmptyResponse();
+ }
+
+ private void validateDrpRequest(List listDataExcel) {
+ var drpPengadaan = listDataExcel.stream()
+ .map(DrpPengadaanRequest::getNamaPengadaan)
+ .collect(Collectors.toList());
+
+ List drpPengadaans = drpPengadaanRepository.getDrpPengadaanByListNamaPengadaan(drpPengadaan);
+ if (ObjectUtils.isNotEmpty(drpPengadaans)) {
+ List existDrpPengadaan = drpPengadaans.stream().map(DrpPengadaan::getNamaPengadaan).collect(Collectors.toList());
+ throw new BusinessException(Constants.ERR_CODE_10015,
+ Constants.ERR_TTL_10015,
+ String.format(Constants.ERR_MSG_10015, existDrpPengadaan));
+ }
+ }
+
+ private List getStrategiPengadaans(List listDataExcel) {
+ var listStrategiPengadaan = listDataExcel.stream().map(DrpPengadaanRequest::getStrategiPengadaan).collect(Collectors.toList());
+ return strategiPengadaanRepository.getListStrategiPengadaanByList(listStrategiPengadaan);
+ }
+
+ private List getJenisKontraks(List listDataExcel) {
+ var jenisKontraks = listDataExcel.stream().map(DrpPengadaanRequest::getJenisKontrak).collect(Collectors.toList());
+ return jenisKontrakRepository.getListJenisKontrakByList(jenisKontraks);
+ }
+
+ private List getMetodePenyampaians(List listDataExcel) {
+ var listMetodePenyampaian = listDataExcel.stream()
+ .map(DrpPengadaanRequest::getMetodePenyampaian)
+ .collect(Collectors.toList());
+ return metodePenyampaianRepository.getListMetodePenyampaianByList(listMetodePenyampaian);
+ }
+
+ private List getMetodePengadaans(List listDataExcel) {
+ var listMetodePengadaan = listDataExcel.stream()
+ .map(DrpPengadaanRequest::getMetodePengadaan)
+ .collect(Collectors.toList());
+ return metodePengadaanRepository.getListMetodePengadaanByList(listMetodePengadaan);
+ }
+
+ private List getSupplyPositioningMatrices(List listDataExcel) {
+ var listSupplyPositioningMatrix = listDataExcel.stream()
+ .map(DrpPengadaanRequest::getSupplyPositioningMatrix)
+ .collect(Collectors.toList());
+ return supplyPositioningMatrixRepository.getListSupplyPositioningMatrix(listSupplyPositioningMatrix);
+ }
+
+ private List getSumberDanas(List listDataExcel) {
+ var listSumberDana = listDataExcel.stream()
+ .map(DrpPengadaanRequest::getSumberDana)
+ .collect(Collectors.toList());
+ return sumberDanaRepository.getListSumberDanaByList(listSumberDana);
+ }
+
+ private List getUnitInisiators(List listDataExcel) {
+ var listUnitInisiator = listDataExcel.stream()
+ .map(DrpPengadaanRequest::getUnitInisiator)
+ .collect(Collectors.toList());
+ return unitInisiatorRepository.getListUnitInisiatorByList(listUnitInisiator);
+ }
+
+ private List getJenisPengadaans(List listDataExcel) {
+ var listJenisPengadaan = listDataExcel.stream()
+ .map(DrpPengadaanRequest::getJenisPengadaan)
+ .collect(Collectors.toList());
+ return jenisPengadaanRepository.getListPengadaan(listJenisPengadaan);
+ }
+
+ private List getListLokasi(List listDataExcel) {
+ var listLokasi = listDataExcel.stream()
+ .map(DrpPengadaanRequest::getLokasi)
+ .collect(Collectors.toList());
+ return lokasiRepository.getListLokasi(listLokasi);
+ }
+
+ private List transformFile(DrpPengadaanRequest input) throws IOException {
+ try {
+ Workbook workbook = new XSSFWorkbook(input.getFile().getInputStream());
+ Sheet sheet = workbook.getSheetAt(0);
+
+ List drpPengadaanRequestList = new ArrayList<>();
+ Iterator rows = sheet.iterator();
+
+ int rowNumber = 0;
+ while (rows.hasNext()) {
+ Row currentRow = rows.next();
+
+ // skip header
+ if (rowNumber <= 7) {
+ rowNumber++;
+ continue;
+ }
+
+ Iterator cellsInRow = currentRow.iterator();
+ DrpPengadaanRequest drpPengadaanRequest = DrpPengadaanRequest.builder().build();
+
+ int cellIdx = 0;
+ while (cellsInRow.hasNext()) {
+ Cell currentCell = cellsInRow.next();
+
+ switch (cellIdx) {
+ case 0:
+ drpPengadaanRequest.setId((long) currentCell.getNumericCellValue());
+ break;
+ case 1:
+ drpPengadaanRequest.setNamaPengadaan(currentCell.getStringCellValue());
+ break;
+ case 2:
+ drpPengadaanRequest.setLokasi(currentCell.getStringCellValue());
+ break;
+ case 3:
+ drpPengadaanRequest.setJenisPengadaan(currentCell.getStringCellValue());
+ break;
+ case 4:
+ drpPengadaanRequest.setUnitInisiator(currentCell.getStringCellValue());
+ break;
+ case 5:
+ drpPengadaanRequest.setNomor(currentCell.getStringCellValue());
+ break;
+ case 6:
+ drpPengadaanRequest.setPagu(BigDecimal.valueOf(currentCell.getNumericCellValue()));
+ break;
+ case 7:
+ drpPengadaanRequest.setSumberDana(currentCell.getStringCellValue());
+ break;
+ case 8:
+ drpPengadaanRequest.setSupplyPositioningMatrix(currentCell.getStringCellValue());
+ break;
+ case 9:
+ drpPengadaanRequest.setMetodePengadaan(currentCell.getStringCellValue());
+ break;
+ case 10:
+ drpPengadaanRequest.setMetodePenyampaian(currentCell.getStringCellValue());
+ break;
+ case 11:
+ drpPengadaanRequest.setJenisKontrak(currentCell.getStringCellValue());
+ break;
+ case 12:
+ drpPengadaanRequest.setStrategiPengadaan(currentCell.getStringCellValue());
+ break;
+ case 13:
+ drpPengadaanRequest.setRencanaTanggal(new Date(currentCell.getDateCellValue().getTime()));
+ break;
+ case 14:
+ drpPengadaanRequest.setTargetTanggal(new Date(currentCell.getDateCellValue().getTime()));
+ break;
+ case 15:
+ drpPengadaanRequest.setHpe(BigDecimal.valueOf(currentCell.getNumericCellValue()));
+ break;
+ case 16:
+ drpPengadaanRequest.setTahun((int) currentCell.getNumericCellValue());
+ break;
+ default:
+ break;
+ }
+
+ cellIdx++;
+ }
+
+ if (drpPengadaanRequest.getId() == null || drpPengadaanRequest.getId() != 0) {
+ drpPengadaanRequestList.add(drpPengadaanRequest);
+ }
+
+ }
+ workbook.close();
+ return drpPengadaanRequestList;
+ } catch (IOException e) {
+ throw new BusinessException(Constants.ERR_CODE_10016,
+ Constants.ERR_TTL_10016,
+ String.format(Constants.ERR_MSG_10016, e.getMessage()));
+ }
+ }
+
+
+}
diff --git a/src/main/java/com/iconplus/smartproc/util/Constants.java b/src/main/java/com/iconplus/smartproc/util/Constants.java
index 8526165..f8207ec 100644
--- a/src/main/java/com/iconplus/smartproc/util/Constants.java
+++ b/src/main/java/com/iconplus/smartproc/util/Constants.java
@@ -56,6 +56,18 @@ public class Constants {
public static final String ERR_TTL_10013 = "Gagal Approve";
public static final String ERR_MSG_10013 = "Silahkan menunggu appoval %s terlebih dahulu";
+ public static final String ERR_CODE_10014 = "10014";
+ public static final String ERR_TTL_10014 = "Failed Import";
+ public static final String ERR_MSG_10014 = "Silahkan upload format document excel";
+
+ public static final String ERR_CODE_10015 = "10015";
+ public static final String ERR_TTL_10015 = "Failed Import";
+ public static final String ERR_MSG_10015 = "Nama DRP Pengadaan sudah tersedia : %s";
+
+ public static final String ERR_CODE_10016 = "10016";
+ public static final String ERR_TTL_10016 = "Failed Import";
+ public static final String ERR_MSG_10016 = "fail to parse Excel file: %s";
+
public static final String ERR_CODE_40041 = "40041";
public static final String ERR_TTL_40041 = "Terjadi Gangguan";
public static final String ERR_MSG_40041 = "Masalah Koneksi System";
|