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, DrpApprovalHistoryRepository drpApprovalHistoryRepository) { this.drpApprovalRepository = drpApprovalRepository; this.drpRepository = drpRepository; this.drpApprovalHistoryRepository = drpApprovalHistoryRepository; } @Transactional @Override public EmptyResponse execute(DrpApprovalRequest input) { var drpApproval = drpApprovalRepository.findByDrpIdAndApproverUserIdAndIsDeleteFalse(input.getDrpId(), input.getUserId()) .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, String.format(Constants.ERR_MSG_10001, "DRP", input.getDrpId()))); var drp = drpRepository.findByIdAndIsDeleteFalse(input.getDrpId()) .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001, Constants.ERR_TTL_10001, String.format(Constants.ERR_MSG_10001, "DRP", input.getDrpId()))); Date dateNow = Date.valueOf(LocalDate.now()); drpApproval.setIsApprove(input.getIsApprove()); drpApproval.setCatatan(input.getCatatan()); List 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")) { drp.setVpApproveDate(dateNow); if (BooleanUtils.isTrue(input.getIsApprove())) { drp.setApproveStatus(Constants.STATUS_APPROVAL_VP); 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 { drp.setApproveStatus(Constants.STATUS_PENYUSUNAN); drpApproval.setIsDelete(true); drpApprovalRepository.deleteApprovalByDrpId(input.getDrpId()); } } 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")); } if (BooleanUtils.isTrue(input.getIsApprove())) { drp.setApproveStatus(Constants.STATUS_APPROVAL_DIRUT); } else { drp.setApproveStatus(Constants.STATUS_PENYUSUNAN); drpApproval.setIsDelete(true); drpApprovalRepository.deleteApprovalByDrpId(input.getDrpId()); } drp.setDirekturApproveDate(dateNow); } 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); } 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(); } }