Files
bflows-bandi-be/src/main/java/net/gepafin/tendermanagement/scheduler/NotificationScheduler.java
2024-11-25 19:10:24 +05:30

64 lines
2.8 KiB
Java

package net.gepafin.tendermanagement.scheduler;
import net.gepafin.tendermanagement.dao.EmailNotificationDao;
import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity;
import net.gepafin.tendermanagement.entities.ApplicationEntity;
import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum;
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
import net.gepafin.tendermanagement.repositories.ApplicationAmendmentRequestRepository;
import net.gepafin.tendermanagement.repositories.ApplicationRepository;
import net.gepafin.tendermanagement.repositories.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.List;
@Component
public class NotificationScheduler {
@Autowired
UserRepository userRepository;
@Autowired
ApplicationRepository applicationRepository;
@Autowired
ApplicationAmendmentRequestRepository applicationAmendmentRepository;
@Autowired
EmailNotificationDao emailNotificationDao;
// @Scheduled(cron = "0 0 1 * * ?")
void sendNotificationForRejectedApplicationToBeneficiary() {
List<ApplicationEntity> applicationsList = applicationRepository.findByIsDeletedFalse();
List<ApplicationAmendmentRequestEntity> amendmentRequestList = applicationAmendmentRepository.findByIsDeletedFalse();
LocalDateTime today = LocalDateTime.now();
for (ApplicationEntity application : applicationsList) {
ApplicationAmendmentRequestEntity amendmentRequest = getAmendmentRequestForApplication(application, amendmentRequestList);
if (amendmentRequest != null) {
LocalDateTime requestDate = amendmentRequest.getStartDate();
if (requestDate.plusDays(amendmentRequest.getResponseDays()).isBefore(today)) {
// Update the application status to REJECTED
application.setStatus(ApplicationStatusTypeEnum.REJECTED.getValue());
applicationRepository.save(application);
amendmentRequest.setStatus(ApplicationAmendmentRequestEnum.CLOSE.getValue());
applicationAmendmentRepository.save(amendmentRequest);
emailNotificationDao.sendApplicationFailureNotificationEmail(amendmentRequest);
}
}
}
}
private ApplicationAmendmentRequestEntity getAmendmentRequestForApplication(ApplicationEntity application, List<ApplicationAmendmentRequestEntity> amendmentRequestList) {
return amendmentRequestList.stream().filter(request -> request.getApplicationId().equals(application.getId())).findFirst().orElse(null);
}
}