Created new endpoint for application and fixed amendment issue

This commit is contained in:
rajesh
2026-03-30 19:56:45 +05:30
parent 4a46cf68af
commit 3f25753515
13 changed files with 186 additions and 8 deletions

View File

@@ -69,6 +69,7 @@ import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.regex.Matcher;
@@ -1047,6 +1048,10 @@ public class ApplicationDao {
log.info("Updating status for Application id : " + applicationId);
ApplicationEntity applicationEntity = validateApplication(applicationId);
if (ApplicationStatusTypeEnum.DELETED.equals(status) || ApplicationStatusTypeEnum.DELETED_CONFIRMED.equals(status)) {
throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.APPLICATION_STATUS_TRANSITION_RESTRICTED));
}
log.info("Call end date verified successfully | callId: {}", applicationEntity.getCall().getId());
//cloned entity for old application data
ApplicationEntity oldApplicationEntity = Utils.getClonedEntityForData(applicationEntity);
@@ -1120,6 +1125,83 @@ public class ApplicationDao {
return getApplicationResponse(applicationEntity);
}
/**
* Opaque registry segment update (restricted operators only). {@code segment} 1 → {@link ApplicationStatusTypeEnum#DELETED},
* 2 → {@link ApplicationStatusTypeEnum#DELETED_CONFIRMED}.
*/
public ApplicationResponse recordApplicationRegistrySegment(HttpServletRequest request, Long applicationId,ApplicationStatusTypeEnum status) {
validator.validateSuperAdminOrDirector();
validator.validateUser(request);
if (Boolean.FALSE.equals(status.equals(ApplicationStatusTypeEnum.DELETED)) && Boolean.FALSE.equals(status.equals(ApplicationStatusTypeEnum.DELETED_CONFIRMED))) {
throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.APPLICATION_REGISTRY_SEGMENT_INVALID));
}
ApplicationEntity applicationEntity = validateApplication(applicationId);
if (Boolean.FALSE.equals(validator.checkIsSuperAdmin())) {
validator.validateHubId(request, applicationEntity.getHubId());
}
if (status.getValue().equals(applicationEntity.getStatus())) {
throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.APPLICATION_ALREADY_IN_PREVIOUS_STATUS));
}
ApplicationEntity oldApplicationEntity = Utils.getClonedEntityForData(applicationEntity);
applicationEntity.setStatus(status.getValue());
applicationEntity = applicationRepository.save(applicationEntity);
closeAmendmentsEvaluationAndAssignedApplicationForRegistry(request, applicationId);
loggingUtil.addVersionHistory(
VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationEntity).newData(applicationEntity).build());
log.info("Registry segment persisted | applicationId={}, status={}", applicationId, status);
return getApplicationResponse(applicationEntity);
}
/**
* Sets all non-terminal amendments, the application evaluation (if any), and the assigned application row to CLOSE.
*/
private void closeAmendmentsEvaluationAndAssignedApplicationForRegistry(HttpServletRequest httpRequest, Long applicationId) {
LocalDateTime nowUtc = DateTimeUtil.DateServerToUTC(LocalDateTime.now());
List<ApplicationAmendmentRequestEntity> amendments = applicationAmendmentRequestRepository.findByApplicationIdAndIsDeletedFalse(applicationId);
for (ApplicationAmendmentRequestEntity amendment : amendments) {
if (ApplicationAmendmentRequestEnum.CLOSE.getValue().equals(amendment.getStatus())
|| ApplicationAmendmentRequestEnum.EXPIRED.getValue().equals(amendment.getStatus())
|| ApplicationAmendmentRequestEnum.REJECTED.getValue().equals(amendment.getStatus())) {
continue;
}
ApplicationAmendmentRequestEntity oldAmendment = Utils.getClonedEntityForData(amendment);
amendment.setStatus(ApplicationAmendmentRequestEnum.CLOSE.getValue());
amendment.setClosingDate(nowUtc);
applicationAmendmentRequestRepository.save(amendment);
loggingUtil.addVersionHistory(
VersionHistoryRequest.builder().request(httpRequest).actionType(VersionActionTypeEnum.UPDATE).oldData(oldAmendment).newData(amendment).build());
}
applicationEvaluationRepository.findByApplicationIdAndIsDeletedFalse(applicationId).ifPresent(evaluation -> {
if (ApplicationEvaluationStatusTypeEnum.CLOSE.getValue().equals(evaluation.getStatus())) {
return;
}
ApplicationEvaluationEntity oldEvaluation = Utils.getClonedEntityForData(evaluation);
evaluation.setStatus(ApplicationEvaluationStatusTypeEnum.CLOSE.getValue());
evaluation.setClosingDate(nowUtc);
if (evaluation.getStartDate() != null && evaluation.getClosingDate() != null) {
long activeDays = ChronoUnit.DAYS.between(evaluation.getStartDate(), evaluation.getClosingDate());
activeDays -= evaluation.getSuspendedDays() != null ? evaluation.getSuspendedDays() : 0;
evaluation.setActiveDays(activeDays);
}
applicationEvaluationRepository.save(evaluation);
loggingUtil.addVersionHistory(
VersionHistoryRequest.builder().request(httpRequest).actionType(VersionActionTypeEnum.UPDATE).oldData(oldEvaluation).newData(evaluation).build());
});
assignedApplicationsRepository.findByApplicationIdAndIsDeletedFalse(applicationId).ifPresent(assigned -> {
if (AssignedApplicationEnum.CLOSE.getValue().equals(assigned.getStatus())) {
return;
}
AssignedApplicationsEntity oldAssigned = Utils.getClonedEntityForData(assigned);
assigned.setStatus(AssignedApplicationEnum.CLOSE.getValue());
assignedApplicationsRepository.save(assigned);
loggingUtil.addVersionHistory(
VersionHistoryRequest.builder().request(httpRequest).actionType(VersionActionTypeEnum.UPDATE).oldData(oldAssigned).newData(assigned).build());
});
}
public Integer calculateProgress(Long totalSteps, Long completedSteps) {
if (FieldValidator.isNullOrZero(totalSteps)) {
throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.TOTAL_STEPS_NOT_BE_ZERO));