Created new endpoint for application and fixed amendment issue
This commit is contained in:
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user