148 lines
6.3 KiB
Java
148 lines
6.3 KiB
Java
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<DrpApprovalRequest, EmptyResponse> {
|
|
|
|
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<DrpApprovalHistory> 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();
|
|
}
|
|
}
|