diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java index d2d3bace..e8430b3a 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java @@ -1164,15 +1164,12 @@ public class ApplicationAmendmentRequestDao { applicationEvaluationRepository.save(existingApplicationAmendment.getApplicationEvaluationEntity()); log.info("Updated ApplicationEvaluation status to OPEN for ID: {}", existingApplicationEvaluationEntity.getId()); - String previousApplicationStatus = application.getPreviousStatus(); - if (previousApplicationStatus != null) { - application.setStatus(previousApplicationStatus); - } else if (ApplicationAmendmentRequestTypeEnum.SPECIAL.getValue().equals(existingApplicationAmendment.getType())) { - application.setStatus(ApplicationStatusTypeEnum.ADMISSIBLE.getValue()); - log.warn("Special amendment close: previousStatus was null for applicationId={}, defaulting to ADMISSIBLE", application.getId()); + if(Boolean.FALSE.equals(existingApplicationAmendment.getType().equals(ApplicationAmendmentRequestTypeEnum.SPECIAL.getValue()))){ + application.setStatus(application.getPreviousStatus()); + applicationRepository.save(application); + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationEntityData).newData(application).build()); } - applicationRepository.save(application); - log.info("Updated Application status to previous state for Application ID: {}", application.getId()); existingApplicationAmendment.getApplicationEvaluationEntity().getAssignedApplicationsEntity().setStatus(AssignedApplicationEnum.OPEN.getValue()); @@ -1193,9 +1190,6 @@ public class ApplicationAmendmentRequestDao { loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationEvaluationEntity) .newData(existingApplicationEvaluationEntity).build()); - /** This code is responsible for adding a version history log for the "Update Application status" operation. **/ - loggingUtil.addVersionHistory( - VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationEntityData).newData(application).build()); /** This code is responsible for adding a version history log for the "Update assigned application " operation. **/ loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldAssignedApplicationData) diff --git a/src/main/java/net/gepafin/tendermanagement/scheduler/ApplicationAmendmentScheduler.java b/src/main/java/net/gepafin/tendermanagement/scheduler/ApplicationAmendmentScheduler.java index b96eb137..7ba784e2 100644 --- a/src/main/java/net/gepafin/tendermanagement/scheduler/ApplicationAmendmentScheduler.java +++ b/src/main/java/net/gepafin/tendermanagement/scheduler/ApplicationAmendmentScheduler.java @@ -24,8 +24,8 @@ import org.springframework.stereotype.Component; import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity; import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity; import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum; +import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestTypeEnum; import net.gepafin.tendermanagement.enums.ApplicationEvaluationStatusTypeEnum; -import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; import net.gepafin.tendermanagement.enums.NotificationTypeEnum; import net.gepafin.tendermanagement.enums.UserActionContextEnum; @@ -129,9 +129,22 @@ public class ApplicationAmendmentScheduler { // Update AssignedApplicationsEntity status updateAssignedApplicationStatus(evaluation.getAssignedApplicationsEntity()); - // Update ApplicationEntity status - updateApplicationStatus(evaluation.getAssignedApplicationsEntity().getApplication()); - + // Skip application status restore only when every amendment expired *in this run* for this + // evaluation is SPECIAL. (Do not use all amendments on the eval — a closed non-SPECIAL + // record from the past would wrongly force a previousStatus restore after special expiry.) + List expiredThisRunForEval = amendmentRequests.stream() + .filter(req -> req.getApplicationEvaluationEntity().getId().equals(evaluation.getId())) + .toList(); + boolean skipApplicationStatusRestore = !expiredThisRunForEval.isEmpty() + && expiredThisRunForEval.stream() + .allMatch(req -> ApplicationAmendmentRequestTypeEnum.SPECIAL.getValue().equals(req.getType())); + if (!skipApplicationStatusRestore) { + updateApplicationStatus(evaluation.getAssignedApplicationsEntity().getApplication()); + } else { + log.info( + "Amendment expiration: skipping Application status restore (all amendments expired this run are SPECIAL), evaluationId={}", + evaluation.getId()); + } log.info("Updated EndDate and suspension days for ApplicationEvaluation with ID: {}", evaluation.getId());