diff --git a/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java b/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java index dfb7e3c..9953b47 100644 --- a/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java +++ b/src/main/java/com/iconplus/smartproc/controller/ApprovalDrpController.java @@ -24,6 +24,7 @@ public class ApprovalDrpController { private PostDrpApprovalExecutionService postDrpApprovalExecutionService; private GetApprovalService getApprovalService; private GetListRekomendasiService getListRekomendasiService; + private GetHistoryApprovalService getHistoryApprovalService; public ApprovalDrpController(GetListUserVpService getListUserVpService, GetListUserDirekturKomiteService getListUserDirekturKomiteService, PostCreateDrpApprovalService postCreateDrpApprovalService, @@ -31,7 +32,8 @@ public class ApprovalDrpController { PostDrpRekomendasiService postDrpRekomendasiService, PostDrpApprovalExecutionService postDrpApprovalExecutionService, GetApprovalService getApprovalService, - GetListRekomendasiService getListRekomendasiService) { + GetListRekomendasiService getListRekomendasiService, + GetHistoryApprovalService getHistoryApprovalService) { this.getListUserVpService = getListUserVpService; this.getListUserDirekturKomiteService = getListUserDirekturKomiteService; this.postCreateDrpApprovalService = postCreateDrpApprovalService; @@ -40,6 +42,7 @@ public class ApprovalDrpController { this.postDrpApprovalExecutionService = postDrpApprovalExecutionService; this.getApprovalService = getApprovalService; this.getListRekomendasiService = getListRekomendasiService; + this.getHistoryApprovalService = getHistoryApprovalService; } @GetMapping("/vp") @@ -101,4 +104,11 @@ public class ApprovalDrpController { return getListRekomendasiService.execute(drpRekomendasiRequest); } + + @GetMapping("/{id}/history") + public GetListDrpApprovalHistoryResponse getListDrpApprovalResponse(@PathVariable(name = "id") Long id) { + return getHistoryApprovalService.execute(DrpApprovalRequest.builder() + .drpId(id) + .build()); + } } diff --git a/src/main/java/com/iconplus/smartproc/model/entity/DrpApproval.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpApproval.java index 60881bf..04d50b7 100644 --- a/src/main/java/com/iconplus/smartproc/model/entity/DrpApproval.java +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpApproval.java @@ -35,6 +35,9 @@ public class DrpApproval extends BaseEntity { @Column(name = "level") private String level; + @Column(name = "catatan") + private String catatan; + @Column(name = "is_active") @Type(type = "org.hibernate.type.NumericBooleanType") private Boolean isActive; diff --git a/src/main/java/com/iconplus/smartproc/model/entity/DrpApprovalHistory.java b/src/main/java/com/iconplus/smartproc/model/entity/DrpApprovalHistory.java new file mode 100644 index 0000000..306a41d --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/entity/DrpApprovalHistory.java @@ -0,0 +1,43 @@ +package com.iconplus.smartproc.model.entity; + +import com.iconplus.smartproc.helper.base.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import javax.persistence.*; +import java.sql.Date; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "drp_approval_history") +public class DrpApprovalHistory extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "drp_approval_id") + private Long drpApprovalId; + + @Column(name = "date") + private Date date; + + @Column(name = "status") + private String status; + + @Column(name = "is_active") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isActive; + + @Column(name = "is_delete") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isDelete; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalHistoryView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalHistoryView.java new file mode 100644 index 0000000..b10093e --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalHistoryView.java @@ -0,0 +1,22 @@ +package com.iconplus.smartproc.model.projection; + +import java.sql.Date; + +public interface DrpApprovalHistoryView { + + String getStatus(); + void setStatus(String status); + + Date getDate(); + void setDate(Date date); + + String getCatatan(); + void setCatatan(String catatan); + + String getJabatan(); + void setJabatan(String jabatan); + + String getNama(); + void setNama(String nama); + +} diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java index 8ba5585..caf7f22 100644 --- a/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java @@ -32,6 +32,19 @@ public interface DrpApprovalView { Date getPrintDate(); void setPrintDate(Date printDate); + Boolean getIsApprove(); + void setIsApprove(Boolean isApprove); + String getCatatan(); + void setCatatan(String catatan); + + String getJabatan(); + void setJabatan(String jabatan); + + String getNama(); + void setNama(String nama); + + String getLevel(); + void setLevel(String level); } diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java index 4d7f097..655be50 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java @@ -19,6 +19,7 @@ public class DrpApprovalRequest extends BaseRequest { private Long approverUserId; private String level; private Long jenisPengadaanId; + private String catatan; private String search; private transient Pageable pageable; diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalHistoryResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalHistoryResponse.java new file mode 100644 index 0000000..96d0684 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalHistoryResponse.java @@ -0,0 +1,25 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.sql.Date; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DrpApprovalHistoryResponse extends BaseResponse { + + private Long drpId; + private String status; + private Date date; + private String catatan; + private String nama; + private String jabatan; + +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/GetListDrpApprovalHistoryResponse.java b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpApprovalHistoryResponse.java new file mode 100644 index 0000000..1107abb --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/GetListDrpApprovalHistoryResponse.java @@ -0,0 +1,18 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class GetListDrpApprovalHistoryResponse extends BaseResponse { + + private List data; +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpApprovalHistoryRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpApprovalHistoryRepository.java new file mode 100644 index 0000000..f3afa55 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/repository/DrpApprovalHistoryRepository.java @@ -0,0 +1,27 @@ +package com.iconplus.smartproc.repository; + +import com.iconplus.smartproc.model.entity.DrpApprovalHistory; +import com.iconplus.smartproc.model.projection.DrpApprovalHistoryView; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface DrpApprovalHistoryRepository extends JpaRepository { + + @Query(value = "SELECT dah.status as status, " + + "dah.date as date, " + + "da.catatan as catatan, " + + "u.nama as nama, " + + "j.jabatan as jabatan " + + "FROM DrpApprovalHistory dah " + + "JOIN DrpApproval da ON da.id = dah.drpApprovalId " + + "JOIN Users u ON u.id = da.approverUserId " + + "JOIN Jabatan j ON j.id = u.jabatanId " + + "WHERE da.drpId = :drpId " + + "ORDER BY dah.timeCreated desc") + List getRiwayatApprovalByDrpId(Long drpId); + +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java index cd3b839..0fbb868 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java @@ -1,6 +1,7 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.DrpApproval; +import com.iconplus.smartproc.model.projection.DrpApprovalView; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @@ -23,4 +24,26 @@ public interface DrpApprovalRepository extends JpaRepository List getListKomiteApproval(Long drpId); + List findByDrpIdAndIsDeleteFalse(Long drpId); + + @Query(value = "SELECT da.drpId as drpId, " + + "da.isApprove as isApprove, " + + "da.catatan as catatan, " + + "da.approverUserId as approverUserId, " + + "u.nama as nama, " + + "j.jabatan as jabatan, " + + "da.level as level " + + "FROM DrpApproval da " + + "JOIN Users u ON u.id = da.approverUserId " + + "JOIN Jabatan j ON j.id = u.jabatanId " + + "WHERE da.isDelete = false " + + "AND da.isApprove is not null " + + "AND da.drpId = :drpId " + + "ORDER BY da.lastUpdate") + List getDrpApproval(Long drpId); + + Optional findByDrpIdAndLevelAndIsDeleteFalse(Long drpId, String level); + + + } diff --git a/src/main/java/com/iconplus/smartproc/service/approval/GetHistoryApprovalService.java b/src/main/java/com/iconplus/smartproc/service/approval/GetHistoryApprovalService.java new file mode 100644 index 0000000..d91fb1b --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/approval/GetHistoryApprovalService.java @@ -0,0 +1,55 @@ +package com.iconplus.smartproc.service.approval; + +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.DrpApproval; +import com.iconplus.smartproc.model.projection.DrpApprovalHistoryView; +import com.iconplus.smartproc.model.projection.DrpApprovalView; +import com.iconplus.smartproc.model.request.DrpApprovalRequest; +import com.iconplus.smartproc.model.response.DrpApprovalHistoryResponse; +import com.iconplus.smartproc.model.response.DrpApprovalResponse; +import com.iconplus.smartproc.model.response.GetListDrpApprovalHistoryResponse; +import com.iconplus.smartproc.model.response.GetListDrpApprovalResponse; +import com.iconplus.smartproc.repository.DrpApprovalHistoryRepository; +import com.iconplus.smartproc.repository.DrpApprovalRepository; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetHistoryApprovalService implements BaseService { + + private final DrpApprovalRepository drpApprovalRepository; + private final DrpApprovalHistoryRepository drpApprovalHistoryRepository; + public GetHistoryApprovalService(DrpApprovalRepository drpApprovalRepository, + DrpApprovalHistoryRepository drpApprovalHistoryRepository) { + this.drpApprovalRepository = drpApprovalRepository; + this.drpApprovalHistoryRepository = drpApprovalHistoryRepository; + + } + + + @Override + public GetListDrpApprovalHistoryResponse execute(DrpApprovalRequest input) { + + List drpApprovalHistoryResponses = new ArrayList<>(); + var drpApprovalHistoryViewList = drpApprovalHistoryRepository.getRiwayatApprovalByDrpId(input.getDrpId()); + for (DrpApprovalHistoryView drpApprovalHistoryView : drpApprovalHistoryViewList) { + DrpApprovalHistoryResponse drpApprovalHistoryResponse = DrpApprovalHistoryResponse.builder() + .nama(drpApprovalHistoryView.getNama()) + .jabatan(drpApprovalHistoryView.getJabatan()) + .status(drpApprovalHistoryView.getStatus()) + .date(drpApprovalHistoryView.getDate()) + .catatan(drpApprovalHistoryView.getCatatan()) + .build(); + drpApprovalHistoryResponses.add(drpApprovalHistoryResponse); + } + + + return GetListDrpApprovalHistoryResponse.builder() + .data(drpApprovalHistoryResponses) + .build(); + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/approval/PostCreateDrpApprovalService.java b/src/main/java/com/iconplus/smartproc/service/approval/PostCreateDrpApprovalService.java index 1f9b32c..425a0aa 100644 --- a/src/main/java/com/iconplus/smartproc/service/approval/PostCreateDrpApprovalService.java +++ b/src/main/java/com/iconplus/smartproc/service/approval/PostCreateDrpApprovalService.java @@ -4,13 +4,18 @@ 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.DrpApproval; +import com.iconplus.smartproc.model.entity.DrpApprovalHistory; import com.iconplus.smartproc.model.request.DrpApprovalRequest; import com.iconplus.smartproc.model.request.ListDrpApprovalRequest; +import com.iconplus.smartproc.repository.DrpApprovalHistoryRepository; import com.iconplus.smartproc.repository.DrpApprovalRepository; import com.iconplus.smartproc.repository.DrpRepository; import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import java.sql.Date; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; @@ -19,10 +24,13 @@ public class PostCreateDrpApprovalService implements BaseService { + if (StringUtils.equalsIgnoreCase(c.getLevel(), "VP")) { + DrpApprovalHistory drpApprovalHistory = DrpApprovalHistory.builder() + .date(dateNow) + .drpApprovalId(c.getId()) + .status("Dikirim") + .isDelete(false) + .build(); + drpApprovalHistoryRepository.save(drpApprovalHistory); + } + }); return new EmptyResponse(); } diff --git a/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java b/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java index a76cbf7..64094f0 100644 --- a/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java +++ b/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java @@ -3,28 +3,40 @@ package com.iconplus.smartproc.service.approval; 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.DrpApproval; +import com.iconplus.smartproc.model.entity.DrpApprovalHistory; import com.iconplus.smartproc.model.request.DrpApprovalRequest; +import com.iconplus.smartproc.repository.DrpApprovalHistoryRepository; import com.iconplus.smartproc.repository.DrpApprovalRepository; import com.iconplus.smartproc.repository.DrpRepository; import com.iconplus.smartproc.util.Constants; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import javax.transaction.Transactional; import java.sql.Date; import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; @Service public class PostDrpApprovalExecutionService implements BaseService { private final DrpApprovalRepository drpApprovalRepository; private final DrpRepository drpRepository; + private final DrpApprovalHistoryRepository drpApprovalHistoryRepository; public PostDrpApprovalExecutionService(DrpApprovalRepository drpApprovalRepository, - DrpRepository drpRepository) { + DrpRepository drpRepository, + DrpApprovalHistoryRepository drpApprovalHistoryRepository) { this.drpApprovalRepository = drpApprovalRepository; this.drpRepository = drpRepository; + this.drpApprovalHistoryRepository = drpApprovalHistoryRepository; } + @Transactional @Override public EmptyResponse execute(DrpApprovalRequest input) { @@ -40,27 +52,82 @@ public class PostDrpApprovalExecutionService implements BaseService drpApprovalHistoryList = new ArrayList<>(); + var listDrpApproval = drpApprovalRepository.findByDrpIdAndIsDeleteFalse(input.getDrpId()); + + DrpApprovalHistory drpApprovalHistoryExecutor = DrpApprovalHistory.builder() + .drpApprovalId(drpApproval.getId()) + .date(dateNow) + .status(BooleanUtils.isTrue(input.getIsApprove()) ? "Disetujui" : "Ditolak") + .isDelete(false) + .build(); + drpApprovalHistoryList.add(drpApprovalHistoryExecutor); + if (StringUtils.equalsIgnoreCase(drpApproval.getLevel(), "VP")) { drpApproval.setIsApprove(input.getIsApprove()); drp.setVpApproveDate(dateNow); drp.setApproveStatus(Constants.STATUS_APPROVAL_VP); + drpApproval.setCatatan(input.getCatatan()); + + for (DrpApproval drpAppr : listDrpApproval) { + if (StringUtils.equalsIgnoreCase(drpAppr.getLevel(), "KOMITE")) { + DrpApprovalHistory drpApprovalHistory = DrpApprovalHistory.builder() + .drpApprovalId(drpApproval.getId()) + .date(dateNow) + .status("Terkirim") + .isDelete(false) + .build(); + drpApprovalHistoryList.add(drpApprovalHistory); + } + } + } else if (StringUtils.equalsIgnoreCase(drpApproval.getLevel(), "DIREKTUR")) { + + if (ObjectUtils.isEmpty(drp.getKomiteApproveDate())) { + throw new BusinessException(Constants.ERR_CODE_10013, + Constants.ERR_TTL_10013, + String.format(Constants.ERR_MSG_10013, "KOMITE")); + } + drpApproval.setIsApprove(input.getIsApprove()); drp.setDirekturApproveDate(dateNow); drp.setApproveStatus(Constants.STATUS_APPROVAL_DIRUT); + drpApproval.setCatatan(input.getCatatan()); } else { + + if (ObjectUtils.isEmpty(drp.getVpApproveDate())) { + throw new BusinessException(Constants.ERR_CODE_10013, + Constants.ERR_TTL_10013, + String.format(Constants.ERR_MSG_10013, "VP")); + } + var listKomiteApproval = drpApprovalRepository.getListKomiteApproval(input.getDrpId()); if (listKomiteApproval.size() == 1) { drp.setApproveStatus(Constants.STATUS_REKOMENDASI_KOMITE); } drpApproval.setIsApprove(input.getIsApprove()); + drpApproval.setCatatan(input.getCatatan()); drp.setKomiteApproveDate(dateNow); + + for (DrpApproval drpAppr : listDrpApproval) { + if (StringUtils.equalsIgnoreCase(drpAppr.getLevel(), "DIREKTUR")) { + DrpApprovalHistory drpApprovalHistory = DrpApprovalHistory.builder() + .drpApprovalId(drpApproval.getId()) + .date(dateNow) + .status("Terkirim") + .isDelete(false) + .build(); + drpApprovalHistoryList.add(drpApprovalHistory); + } + } + } drpApprovalRepository.save(drpApproval); drpRepository.save(drp); + drpApprovalHistoryRepository.saveAll(drpApprovalHistoryList); return new EmptyResponse(); } diff --git a/src/main/java/com/iconplus/smartproc/service/print/GetListPrintDrpService.java b/src/main/java/com/iconplus/smartproc/service/print/GetListPrintDrpService.java index 985f117..e9e39fe 100644 --- a/src/main/java/com/iconplus/smartproc/service/print/GetListPrintDrpService.java +++ b/src/main/java/com/iconplus/smartproc/service/print/GetListPrintDrpService.java @@ -1,12 +1,15 @@ package com.iconplus.smartproc.service.print; +import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.model.Pagination; import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.projection.DrpView; import com.iconplus.smartproc.model.request.PrintDrpRequest; import com.iconplus.smartproc.model.response.GetListPrintDrpResponse; import com.iconplus.smartproc.model.response.PrintDrpResponse; +import com.iconplus.smartproc.repository.DrpApprovalRepository; import com.iconplus.smartproc.repository.DrpRepository; +import com.iconplus.smartproc.util.Constants; import org.apache.commons.lang3.BooleanUtils; import org.springframework.stereotype.Service; @@ -17,9 +20,11 @@ import java.util.List; public class GetListPrintDrpService implements BaseService { private DrpRepository drpRepository; - - public GetListPrintDrpService(DrpRepository drpRepository) { + private DrpApprovalRepository drpApprovalRepository; + public GetListPrintDrpService(DrpRepository drpRepository, + DrpApprovalRepository drpApprovalRepository) { this.drpRepository = drpRepository; + this.drpApprovalRepository = drpApprovalRepository; } @@ -35,8 +40,16 @@ public class GetListPrintDrpService implements BaseService new BusinessException(Constants.ERR_CODE_10001, + Constants.ERR_TTL_10001, + String.format(Constants.ERR_MSG_10001, "DRP Approvel", drpView.getId()))); + if (BooleanUtils.isTrue(drpView.getIsPrint())) { printDrpResponse.setStatus("Tercetak"); + } else if (drpApprovalOptional.getIsApprove() == null) { + printDrpResponse.setStatus("Belum Dicetak"); } else { printDrpResponse.setStatus("Belum Bisa Dicetak"); } diff --git a/src/main/java/com/iconplus/smartproc/util/Constants.java b/src/main/java/com/iconplus/smartproc/util/Constants.java index 971e7c2..8526165 100644 --- a/src/main/java/com/iconplus/smartproc/util/Constants.java +++ b/src/main/java/com/iconplus/smartproc/util/Constants.java @@ -52,6 +52,10 @@ public class Constants { public static final String ERR_TTL_10012 = "Proses Gagal"; public static final String ERR_MSG_10012 = "Pastikan directori penimpanan file tersedia : %s"; + public static final String ERR_CODE_10013 = "10013"; + 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_40041 = "40041"; public static final String ERR_TTL_40041 = "Terjadi Gangguan"; public static final String ERR_MSG_40041 = "Masalah Koneksi System";