Done ticket GEPAFINBE-90
This commit is contained in:
@@ -294,5 +294,7 @@ public class GepafinConstant {
|
||||
public static final String DUPLICATE_BENEFICIARY_CALL = "beneficiary.call.duplicate";
|
||||
public static final String COMPANY_ID_REQUIRED_FOR_PREFERRED_CALL = "company.id.required.for.preferred.call";
|
||||
public static final String CREATED_DATE = "createdDate";
|
||||
public static final String RESPONSE_DAYS_NOT_NULL="response.days.not.null";
|
||||
public static final String APPLICATION_CANNOT_APPROVED_OR_REJECTED="application.cannot.approved.or.rejected";
|
||||
}
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@ import java.time.temporal.ChronoUnit;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static java.time.temporal.ChronoUnit.DAYS;
|
||||
import static net.gepafin.tendermanagement.util.Utils.log;
|
||||
import static net.gepafin.tendermanagement.util.Utils.setIfUpdated;
|
||||
|
||||
@@ -97,6 +98,9 @@ public class ApplicationAmendmentRequestDao {
|
||||
@Autowired
|
||||
private EmailLogDao emailLogDao;
|
||||
|
||||
@Autowired
|
||||
private ApplicationAmendmentRequestDao applicationAmendmentRequestDao;
|
||||
|
||||
public ApplicationAmendmentRequestResponse getApplicationDataForAmendment(Long applicationEvaluationId) {
|
||||
log.info("Fetching the application data for the Amendment process {}", applicationEvaluationId);
|
||||
ApplicationEvaluationEntity applicationEvaluationEntity = applicationEvaluationService.validateApplicationEvaluation(applicationEvaluationId);
|
||||
@@ -204,6 +208,11 @@ public class ApplicationAmendmentRequestDao {
|
||||
ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity = new ApplicationAmendmentRequestEntity();
|
||||
applicationAmendmentRequestEntity.setNote(applicationAmendmentRequest.getNote());
|
||||
applicationAmendmentRequestEntity.setResponseDays(applicationAmendmentRequest.getResponseDays());
|
||||
if(applicationAmendmentRequest.getResponseDays()==null && applicationAmendmentRequest.getResponseDays() < 0){
|
||||
throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.RESPONSE_DAYS_NOT_NULL));
|
||||
}
|
||||
applicationAmendmentRequestEntity.setEndDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()).plusDays(applicationAmendmentRequest.getResponseDays()));
|
||||
|
||||
applicationAmendmentRequestEntity.setIsEmail(applicationAmendmentRequest.getIsSendEmail());
|
||||
applicationAmendmentRequestEntity.setIsNotification(applicationAmendmentRequest.getIsSendNotification());
|
||||
applicationAmendmentRequestEntity.setStartDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
|
||||
@@ -228,6 +237,20 @@ public class ApplicationAmendmentRequestDao {
|
||||
String formFieldsJson = Utils.convertObjectToJson(formFieldRequestBean);
|
||||
applicationAmendmentRequestEntity.setFormFields(formFieldsJson);
|
||||
}
|
||||
List<ApplicationAmendmentRequestEntity> amendmentRequest = applicationAmendmentRequestRepository.findAllByApplicationEvaluationIdAndIsDeletedFalse(applicationEvaluationEntity.getId());
|
||||
// Ensure startDate and initialDays are not null to avoid NullPointerException
|
||||
if (amendmentRequest !=null && amendmentRequest.isEmpty() && applicationEvaluationEntity.getStartDate() != null && applicationEvaluationEntity.getInitialDays() != null ) {
|
||||
Long initialDays = applicationEvaluationEntity.getInitialDays();
|
||||
LocalDateTime startDate = applicationEvaluationEntity.getStartDate();
|
||||
LocalDateTime nowInUTC = DateTimeUtil.DateServerToUTC(LocalDateTime.now());
|
||||
// Calculate remaining days
|
||||
Long remainingDays = initialDays - DAYS.between(startDate, nowInUTC);
|
||||
// Set remaining days in the entity
|
||||
applicationEvaluationEntity.setRemainingDays(remainingDays);
|
||||
//Set stop date time in the entity becuase amendment has started
|
||||
applicationEvaluationEntity.setStopDateTime(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
|
||||
}
|
||||
|
||||
UserEntity userEntity = userService.validateUser(applicationEvaluationEntity.getUserId());
|
||||
Long protocolNumber = protocolDao.getProtocolNumber(userEntity.getHub());
|
||||
ProtocolEntity protocolEntity = protocolDao.createProtocolEntity(
|
||||
@@ -238,6 +261,7 @@ public class ApplicationAmendmentRequestDao {
|
||||
|
||||
//Set Status
|
||||
applicationEvaluationEntity.setStatus(ApplicationEvaluationStatusTypeEnum.SOCCORSO.getValue());
|
||||
|
||||
applicationEvaluationRepository.save(applicationEvaluationEntity);
|
||||
|
||||
ApplicationEntity applicationEntity = applicationService.validateApplication(applicationId);
|
||||
@@ -271,10 +295,8 @@ public class ApplicationAmendmentRequestDao {
|
||||
applicationAmendmentRequestResponse.setInternalNote(applicationAmendmentRequestEntity.getInternalNote());
|
||||
LocalDateTime startDate = applicationAmendmentRequestEntity.getStartDate();
|
||||
applicationAmendmentRequestResponse.setStartDate(startDate);
|
||||
|
||||
LocalDateTime expirationDate = startDate.plus(expirationDays, ChronoUnit.DAYS);
|
||||
applicationAmendmentRequestResponse.setExpirationDate(expirationDate);
|
||||
|
||||
applicationAmendmentRequestResponse.setExpirationDate(applicationAmendmentRequestEntity.getEndDate());
|
||||
applicationAmendmentRequestResponse.setEvaluationEndDate(applicationAmendmentRequestEntity.getApplicationEvaluationEntity().getEndDate());
|
||||
applicationAmendmentRequestResponse.setIsSendEmail(applicationAmendmentRequestEntity.getIsEmail());
|
||||
applicationAmendmentRequestResponse.setIsSendNotification(applicationAmendmentRequestEntity.getIsNotification());
|
||||
String callName = application.getCall().getName();
|
||||
@@ -642,6 +664,19 @@ public class ApplicationAmendmentRequestDao {
|
||||
log.info("Closing application amendement with ID: {}", id);
|
||||
ApplicationAmendmentRequestEntity existingApplicationAmendment = validateApplicationAmendmentRequest(id);
|
||||
|
||||
List<ApplicationAmendmentRequestEntity> amendmentRequestList = applicationAmendmentRequestRepository.findAllByApplicationEvaluationIdAndIsDeletedFalse(
|
||||
existingApplicationAmendment.getApplicationEvaluationEntity().getId()
|
||||
);
|
||||
|
||||
// Check if this is the last amendment being closed
|
||||
boolean isLastRemaining = amendmentRequestList.stream()
|
||||
.filter(amendment -> !amendment.getId().equals(id)) // Exclude the current amendment
|
||||
.allMatch(amendment -> amendment.getStatus().equals(ApplicationAmendmentRequestEnum.CLOSE.getValue()));
|
||||
|
||||
if (isLastRemaining) {
|
||||
log.info("The current amendment is the last remaining one to be closed.");
|
||||
applicationAmendmentRequestDao.calculateEndDateAndSuspensionDays(existingApplicationAmendment.getApplicationEvaluationEntity());
|
||||
}
|
||||
setIfUpdated(existingApplicationAmendment::getInternalNote, existingApplicationAmendment::setInternalNote, closeAmendmentRequest.getInternalNote());
|
||||
setIfUpdated(existingApplicationAmendment::getStatus, existingApplicationAmendment::setStatus, ApplicationAmendmentRequestEnum.CLOSE.getValue());
|
||||
|
||||
@@ -669,6 +704,7 @@ public class ApplicationAmendmentRequestDao {
|
||||
if (newResponseDays != null && newResponseDays > 0) {
|
||||
Long currentResponseDays = request.getResponseDays() != null ? request.getResponseDays() : 0L;
|
||||
request.setResponseDays(currentResponseDays + newResponseDays);
|
||||
request.setEndDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now().plusDays(request.getResponseDays())));
|
||||
applicationAmendmentRequestRepository.save(request);
|
||||
}
|
||||
return convertEntityToResponse(request);
|
||||
@@ -762,12 +798,24 @@ public class ApplicationAmendmentRequestDao {
|
||||
LocalDateTime dueDate = amendment.getStartDate().plusDays(amendment.getResponseDays());
|
||||
bodyPlaceholders.put("{{amendment_due_date}}", DateTimeUtil.formatLocalDateTime(dueDate, GepafinConstant.DD_MM_YYYY));
|
||||
} else {
|
||||
|
||||
bodyPlaceholders.put("{{amendment_due_date}}", "Not available");
|
||||
}
|
||||
|
||||
return Utils.replacePlaceholders(template.getHtmlContent(), bodyPlaceholders);
|
||||
}
|
||||
|
||||
public ApplicationEvaluationEntity calculateEndDateAndSuspensionDays(ApplicationEvaluationEntity applicationEvaluationEntity){
|
||||
LocalDateTime currentDate=DateTimeUtil.DateServerToUTC(LocalDateTime.now());
|
||||
LocalDateTime endDate=currentDate.plusDays(applicationEvaluationEntity.getRemainingDays());
|
||||
Long suspendedDays = ChronoUnit.DAYS.between(applicationEvaluationEntity.getStopDateTime(), currentDate);
|
||||
applicationEvaluationEntity.setEndDate(endDate);
|
||||
applicationEvaluationEntity.setSuspendedDays(applicationEvaluationEntity.getSuspendedDays()+suspendedDays);
|
||||
return applicationEvaluationRepository.save(applicationEvaluationEntity);
|
||||
}
|
||||
public List<ApplicationAmendmentRequestEntity> getApplicationAmendmentRequestEntitiesByApplicationEvaluationId(Long applicationEvaluationId){
|
||||
List<ApplicationAmendmentRequestEntity> applicationAmendmentRequestEntities=new ArrayList<>();
|
||||
applicationAmendmentRequestEntities=applicationAmendmentRequestRepository.findAllByApplicationEvaluationIdAndStatusAndIsDeletedFalse(applicationEvaluationId,ApplicationAmendmentRequestEnum.CLOSE.getValue());
|
||||
return applicationAmendmentRequestEntities;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -17,7 +17,9 @@ import net.gepafin.tendermanagement.repositories.*;
|
||||
import net.gepafin.tendermanagement.service.ApplicationService;
|
||||
import net.gepafin.tendermanagement.service.CallService;
|
||||
import net.gepafin.tendermanagement.service.UserService;
|
||||
import net.gepafin.tendermanagement.util.DateTimeUtil;
|
||||
import net.gepafin.tendermanagement.util.Utils;
|
||||
import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException;
|
||||
import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException;
|
||||
import net.gepafin.tendermanagement.web.rest.api.errors.Status;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -96,6 +98,11 @@ public class ApplicationEvaluationDao {
|
||||
entity.setFile(Utils.convertObjectToJson(req.getFiles()));
|
||||
entity.setNote(req.getNote());
|
||||
entity.setIsDeleted(false);
|
||||
entity.setInitialDays(30L);
|
||||
entity.setRemainingDays(30L);
|
||||
entity.setSuspendedDays(0L);
|
||||
entity.setStartDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
|
||||
entity.setEndDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now().plusDays(30)));
|
||||
entity.setStatus(ApplicationEvaluationStatusTypeEnum.OPEN.getValue());
|
||||
return entity;
|
||||
}
|
||||
@@ -127,6 +134,7 @@ public class ApplicationEvaluationDao {
|
||||
response.setAssignedApplicationId(assignedApplications.getId());
|
||||
response.setNote(entity.getNote());
|
||||
response.setStatus(ApplicationEvaluationStatusTypeEnum.valueOf(entity.getStatus()));
|
||||
response.setEvaluationEndDate(entity.getEndDate());
|
||||
response.setCreatedDate(entity.getCreatedDate());
|
||||
response.setUpdatedDate(entity.getUpdatedDate());
|
||||
}
|
||||
@@ -405,7 +413,6 @@ public class ApplicationEvaluationDao {
|
||||
response.setCallName(application.getCall().getName() != null ? application.getCall().getName() : null);
|
||||
response.setProtocolNumber(application.getProtocol() != null ? application.getProtocol().getProtocolNumber() : null);
|
||||
response.setSubmissionDate(application.getSubmissionDate() != null ? application.getSubmissionDate() : null);
|
||||
response.setEvaluationDate(application.getSubmissionDate() != null ? application.getSubmissionDate().plusDays(30) : null);
|
||||
LocalDateTime callEndDate = application.getCall().getEndDate();
|
||||
response.setCallEndDate(callEndDate);
|
||||
}
|
||||
@@ -631,6 +638,7 @@ public class ApplicationEvaluationDao {
|
||||
response.setApplicationStatus(ApplicationStatusTypeEnum.valueOf(application.getStatus()));
|
||||
response.setStatus(ApplicationEvaluationStatusTypeEnum.valueOf(ApplicationEvaluationStatusTypeEnum.OPEN.getValue()));
|
||||
response.setMinScore(call.getThreshold()!=null?call.getThreshold():null);
|
||||
response.setEvaluationEndDate(entity.getEndDate());
|
||||
LocalDateTime callEndDate = application.getCall().getEndDate();
|
||||
response.setCallEndDate(callEndDate);
|
||||
setCriteriaResponses(entity, application.getId(), response, evaluationCriterias);
|
||||
@@ -928,7 +936,6 @@ public class ApplicationEvaluationDao {
|
||||
response.setCallName(application.getCall().getName() != null ? application.getCall().getName() : null);
|
||||
response.setProtocolNumber(application.getProtocol() != null ? application.getProtocol().getProtocolNumber() : null);
|
||||
response.setSubmissionDate(application.getSubmissionDate() != null ? application.getSubmissionDate() : null);
|
||||
response.setEvaluationDate(application.getSubmissionDate() != null ? application.getSubmissionDate().plusDays(30) : null);
|
||||
|
||||
}
|
||||
private Optional<ApplicationFormFieldEntity> findFormFieldValue(Long applicationId, String formFieldId) {
|
||||
@@ -1307,9 +1314,9 @@ public class ApplicationEvaluationDao {
|
||||
entity = applicationEvaluationRepository.save(existingEntity);
|
||||
assignedApplicationsRepository.save(assignedApplicationsEntity);
|
||||
|
||||
List<ApplicationAmendmentRequestEntity> amendmentRequest = applicationAmendmentRequestRepository.findAllByApplicationEvaluationIdAndIsDeletedFalse(entity.getId());
|
||||
for (ApplicationAmendmentRequestEntity request : amendmentRequest) {
|
||||
request.setStatus(ApplicationAmendmentRequestEnum.CLOSE.getValue());
|
||||
List<ApplicationAmendmentRequestEntity> amendmentRequest = applicationAmendmentRequestRepository.findAllByApplicationEvaluationIdAndStatusAndIsDeletedFalse(existingEntity.getId(),ApplicationAmendmentRequestEnum.AWAITING.getValue());
|
||||
if(amendmentRequest !=null && Boolean.FALSE.equals(amendmentRequest.isEmpty())){
|
||||
throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.APPLICATION_CANNOT_APPROVED_OR_REJECTED));
|
||||
}
|
||||
applicationAmendmentRequestRepository.saveAll(amendmentRequest);
|
||||
if (Boolean.TRUE.equals(statusType.equals((ApplicationStatusTypeEnum.APPROVED.getValue())))) {
|
||||
|
||||
@@ -47,4 +47,7 @@ public class ApplicationAmendmentRequestEntity extends BaseEntity {
|
||||
@JoinColumn(name = "PROTOCOL_Id")
|
||||
private ProtocolEntity protocol;
|
||||
|
||||
@Column(name = "end_date")
|
||||
private LocalDateTime endDate;
|
||||
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@ package net.gepafin.tendermanagement.entities;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
@Entity
|
||||
@Table(name = "application_evaluation")
|
||||
@@ -36,4 +38,21 @@ public class ApplicationEvaluationEntity extends BaseEntity{
|
||||
@JoinColumn(name = "assigned_applications_id", nullable = true)
|
||||
private AssignedApplicationsEntity assignedApplicationsEntity;
|
||||
|
||||
@Column(name = "INITIAL_DAYS")
|
||||
private Long initialDays;
|
||||
|
||||
@Column(name = "REMAINING_DAYS")
|
||||
private Long remainingDays;
|
||||
|
||||
@Column(name = "SUSPENDED_DAYS")
|
||||
private Long suspendedDays;
|
||||
|
||||
@Column(name = "START_DATE")
|
||||
private LocalDateTime startDate;
|
||||
|
||||
@Column(name = "END_DATE")
|
||||
private LocalDateTime endDate;
|
||||
|
||||
@Column(name = "STOP_DATE_TIME")
|
||||
private LocalDateTime stopDateTime;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonValue;
|
||||
public enum ApplicationEvaluationStatusTypeEnum {
|
||||
OPEN ("OPEN"),
|
||||
SOCCORSO("SOCCORSO"),
|
||||
EXPIRED("EXPIRED"),
|
||||
CLOSE("CLOSE");
|
||||
|
||||
private String value;
|
||||
|
||||
@@ -23,6 +23,7 @@ public class ApplicationAmendmentRequestResponse {
|
||||
private List<ApplicationFormFieldResponseBean> applicationFormFields;
|
||||
private Long applicationId;
|
||||
private Long applicationEvaluationId;
|
||||
private LocalDateTime evaluationEndDate;
|
||||
private LocalDateTime expirationDate;
|
||||
private List<CommunicationResponseBean> commentsList;
|
||||
private String internalNote;
|
||||
|
||||
@@ -27,6 +27,6 @@ public class ApplicationEvaluationResponse {
|
||||
private Long protocolNumber;
|
||||
private String callName;
|
||||
private LocalDateTime submissionDate;
|
||||
private LocalDateTime evaluationDate;
|
||||
private LocalDateTime evaluationEndDate;
|
||||
private LocalDateTime callEndDate;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@@ -25,6 +26,7 @@ public interface ApplicationAmendmentRequestRepository extends JpaRepository<App
|
||||
|
||||
@Query(value = "SELECT amr FROM ApplicationAmendmentRequestEntity amr " +
|
||||
"WHERE amr.applicationEvaluationEntity.id = :id " +
|
||||
"AND amr.isDeleted = false " +
|
||||
"AND amr.applicationEvaluationEntity.isDeleted = false")
|
||||
List<ApplicationAmendmentRequestEntity> findAllByApplicationEvaluationIdAndIsDeletedFalse(Long id);
|
||||
|
||||
@@ -34,4 +36,19 @@ public interface ApplicationAmendmentRequestRepository extends JpaRepository<App
|
||||
|
||||
List<ApplicationAmendmentRequestEntity> findByApplicationIdAndStatusInAndIsDeletedFalse(Long applicationId, List<String> statuses);
|
||||
|
||||
@Query(value = "SELECT amr " +
|
||||
"FROM ApplicationAmendmentRequestEntity amr " +
|
||||
"WHERE amr.applicationEvaluationEntity.id = :id " +
|
||||
"AND amr.isDeleted = false " +
|
||||
"AND amr.applicationEvaluationEntity.isDeleted = false " +
|
||||
"AND amr.status = :status")
|
||||
List<ApplicationAmendmentRequestEntity> findAllByApplicationEvaluationIdAndStatusAndIsDeletedFalse(Long id, String status);
|
||||
|
||||
@Query("SELECT a FROM ApplicationAmendmentRequestEntity a " +
|
||||
"WHERE a.applicationId = :applicationId " +
|
||||
"AND a.isDeleted = false " +
|
||||
"AND a.status <> 'CLOSE' " +
|
||||
"AND a.endDate < :currentTime")
|
||||
List<ApplicationAmendmentRequestEntity> findActiveAmendments(Long applicationId, LocalDateTime currentTime);
|
||||
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@@ -21,5 +22,6 @@ public interface ApplicationEvaluationRepository extends JpaRepository<Applicati
|
||||
Optional<ApplicationEvaluationEntity> findFirstByIsDeletedFalseOrderByCreatedDateDesc();
|
||||
boolean existsByApplicationIdAndIsDeletedFalse(Long applicationId);
|
||||
|
||||
|
||||
@Query("SELECT a FROM ApplicationEvaluationEntity a WHERE a.isDeleted = false AND a.endDate < :currentDate")
|
||||
List<ApplicationEvaluationEntity> findAllByIsDeletedFalseAndEndDateBefore(@Param("currentDate") LocalDateTime currentDate);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package net.gepafin.tendermanagement.scheduler;
|
||||
|
||||
import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity;
|
||||
import net.gepafin.tendermanagement.enums.ApplicationEvaluationStatusTypeEnum;
|
||||
import net.gepafin.tendermanagement.repositories.ApplicationEvaluationRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
public class ApplicationEvaluationScheduler {
|
||||
|
||||
|
||||
@Autowired
|
||||
private ApplicationEvaluationRepository applicationEvaluationRepository;
|
||||
|
||||
@Scheduled(cron = "0 0 1 * * ?") // Runs daily at midnight
|
||||
public void updateExpiredEvaluations() {
|
||||
LocalDateTime currentDate = LocalDateTime.now();
|
||||
List<ApplicationEvaluationEntity> evaluations = applicationEvaluationRepository.findAllByIsDeletedFalseAndEndDateBefore(currentDate);
|
||||
|
||||
for (ApplicationEvaluationEntity evaluation : evaluations) {
|
||||
evaluation.setStatus(ApplicationEvaluationStatusTypeEnum.EXPIRED.getValue());
|
||||
}
|
||||
applicationEvaluationRepository.saveAll(evaluations);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,20 +1,26 @@
|
||||
package net.gepafin.tendermanagement.scheduler;
|
||||
|
||||
import net.gepafin.tendermanagement.dao.ApplicationAmendmentRequestDao;
|
||||
import net.gepafin.tendermanagement.dao.EmailNotificationDao;
|
||||
import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity;
|
||||
import net.gepafin.tendermanagement.entities.ApplicationEntity;
|
||||
import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity;
|
||||
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.ApplicationEvaluationRepository;
|
||||
import net.gepafin.tendermanagement.repositories.ApplicationRepository;
|
||||
import net.gepafin.tendermanagement.repositories.UserRepository;
|
||||
import net.gepafin.tendermanagement.util.DateTimeUtil;
|
||||
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.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@Component
|
||||
public class NotificationScheduler {
|
||||
@@ -31,6 +37,12 @@ public class NotificationScheduler {
|
||||
@Autowired
|
||||
EmailNotificationDao emailNotificationDao;
|
||||
|
||||
@Autowired
|
||||
private ApplicationAmendmentRequestDao applicationAmendmentRequestDao;
|
||||
|
||||
@Autowired
|
||||
private ApplicationEvaluationRepository applicationEvaluationRepository;
|
||||
|
||||
@Scheduled(cron = "0 0 1 * * ?")
|
||||
void sendNotificationForRejectedApplicationToBeneficiary() {
|
||||
|
||||
@@ -40,17 +52,18 @@ public class NotificationScheduler {
|
||||
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
|
||||
List<ApplicationAmendmentRequestEntity> amendmentRequestEntities = applicationAmendmentRepository.findActiveAmendments(application.getId(), DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
|
||||
List<ApplicationAmendmentRequestEntity> applicationAmendmentRequestEntities = new ArrayList<>();
|
||||
if (amendmentRequestEntities != null && Boolean.FALSE.equals(amendmentRequestEntities.isEmpty())) {
|
||||
for (ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity : amendmentRequestEntities) {
|
||||
if (amendmentRequestEntities.size() == 1) {
|
||||
applicationAmendmentRequestDao.calculateEndDateAndSuspensionDays(applicationAmendmentRequestEntity.getApplicationEvaluationEntity());
|
||||
}
|
||||
application.setStatus(ApplicationStatusTypeEnum.REJECTED.getValue());
|
||||
applicationRepository.save(application);
|
||||
amendmentRequest.setStatus(ApplicationAmendmentRequestEnum.CLOSE.getValue());
|
||||
applicationAmendmentRepository.save(amendmentRequest);
|
||||
emailNotificationDao.sendApplicationFailureNotificationEmail(amendmentRequest);
|
||||
applicationAmendmentRequestEntity.setStatus(ApplicationAmendmentRequestEnum.CLOSE.getValue());
|
||||
applicationAmendmentRepository.save(applicationAmendmentRequestEntity);
|
||||
emailNotificationDao.sendApplicationFailureNotificationEmail(applicationAmendmentRequestEntity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1785,4 +1785,20 @@
|
||||
</dropColumn>
|
||||
</changeSet>
|
||||
|
||||
<changeSet id="25-11-2024_1" author="Nisha Kashyap">
|
||||
<addColumn tableName="application_evaluation">
|
||||
<column name="initial_days" type="INTEGER"></column>
|
||||
<column name="remaining_days" type="INTEGER"></column>
|
||||
<column name="suspended_days" type="INTEGER"></column>
|
||||
<column name="start_date" type="TIMESTAMP WITHOUT TIME ZONE"></column>
|
||||
<column name="end_date" type="TIMESTAMP WITHOUT TIME ZONE"></column>
|
||||
<column name="stop_date_time" type="TIMESTAMP WITHOUT TIME ZONE"></column>
|
||||
</addColumn>
|
||||
</changeSet>
|
||||
|
||||
<changeSet id="25-11-2024_2" author="Nisha kashyap">
|
||||
<addColumn tableName="application_amendment_request">
|
||||
<column name="end_date" type="TIMESTAMP WITHOUT TIME ZONE"></column>
|
||||
</addColumn>
|
||||
</changeSet>
|
||||
</databaseChangeLog>
|
||||
|
||||
@@ -309,3 +309,6 @@ DD_MM_YYYY_HH_MM = dd_MM_yyyy HH:mm
|
||||
application.documents.not.found=No documents found for the application.
|
||||
beneficiary.call.duplicate = A preferred call with this call ID and company ID already exists for this user.
|
||||
company.id.required.for.preferred.call=Company ID is required when requesting only preferred calls.
|
||||
|
||||
response.days.not.null=Response days should not be null and greater than zero.
|
||||
application.cannot.approved.or.rejected=Application cannot be approved and rejected because amendment is active.
|
||||
|
||||
@@ -304,3 +304,5 @@ reminder.email.sent.success.msg=Email di promemoria inviata con successo!
|
||||
application.documents.not.found=Nessun documento trovato per la domanda.
|
||||
beneficiary.call.duplicate = Una chiamata preferita con questo ID di chiamata e ID azienda esiste gi� per questo utente.
|
||||
company.id.required.for.preferred.call=ID azienda obbligatorio quando si richiedono solo chiamate preferite.
|
||||
response.days.not.null=I giorni di risposta non devono essere nulli e maggiori di zero.
|
||||
application.cannot.approved.or.rejected=La domanda non può essere approvata o rifiutata perché l'emendamento è attivo.
|
||||
|
||||
Reference in New Issue
Block a user