From 3f257535157ed538687d7604c5a5caf6df01991e Mon Sep 17 00:00:00 2001 From: rajesh Date: Mon, 30 Mar 2026 19:56:45 +0530 Subject: [PATCH] Created new endpoint for application and fixed amendment issue --- .../constants/GepafinConstant.java | 2 + .../dao/ApplicationAmendmentRequestDao.java | 35 +++++++- .../tendermanagement/dao/ApplicationDao.java | 82 +++++++++++++++++++ .../enums/ApplicationStatusForEvaluation.java | 4 +- .../enums/ApplicationStatusTypeEnum.java | 4 +- .../enums/RoleStatusEnum.java | 3 +- .../service/ApplicationService.java | 2 + .../service/impl/ApplicationServiceImpl.java | 7 ++ .../tendermanagement/util/Validator.java | 20 +++++ .../web/rest/api/ApplicationApi.java | 15 ++++ .../api/impl/ApplicationApiController.java | 14 ++++ src/main/resources/message_en.properties | 2 + src/main/resources/message_it.properties | 4 +- 13 files changed, 186 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index cf39a573..daeef83f 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -205,6 +205,8 @@ public class GepafinConstant { public static final String CALL_ALREADY_ENDED = "call.already.ended"; public static final String APPLICATION_STATUS_UPDATED_SUCCESSFULLY = "application.status.updated.successfully"; public static final String APPLICATION_ALREADY_IN_PREVIOUS_STATUS = "application.already.in.provided.status"; + public static final String APPLICATION_STATUS_TRANSITION_RESTRICTED = "application.status.transition.restricted"; + public static final String APPLICATION_REGISTRY_SEGMENT_INVALID = "application.registry.segment.invalid"; public static final String DELEGATION_NOT_FOUND = "delegation.not.found"; public static final String USER_COMPANY_RELATION_NOT_FOUND = "user.company.relation.not.found"; public static final String DELEGATION_DELETE_SUCCESS = "delegation.delete.success"; diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java index ae26a2a1..d2d3bace 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java @@ -1164,8 +1164,12 @@ public class ApplicationAmendmentRequestDao { applicationEvaluationRepository.save(existingApplicationAmendment.getApplicationEvaluationEntity()); log.info("Updated ApplicationEvaluation status to OPEN for ID: {}", existingApplicationEvaluationEntity.getId()); - if(Boolean.FALSE.equals(existingApplicationAmendment.getType().equals(ApplicationAmendmentRequestTypeEnum.SPECIAL.getValue()))){ - application.setStatus(application.getPreviousStatus()); + 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()); } applicationRepository.save(application); log.info("Updated Application status to previous state for Application ID: {}", application.getId()); @@ -1222,8 +1226,22 @@ public class ApplicationAmendmentRequestDao { applicationAmendmentRequestEntity.setExtensionDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); applicationAmendmentRequestEntity.setEndDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now().plusDays(newResponseDays))); applicationAmendmentRequestEntity.setStatus(ApplicationAmendmentRequestEnum.AWAITING.getValue()); - applicationAmendmentRequestEntity.getApplicationEvaluationEntity().setStatus(ApplicationEvaluationStatusTypeEnum.SOCCORSO.getValue()); - applicationAmendmentRequestEntity.getApplicationEvaluationEntity().getAssignedApplicationsEntity().getApplication().setStatus(ApplicationStatusTypeEnum.SOCCORSO.getValue()); + ApplicationEvaluationEntity evaluationEntity = applicationAmendmentRequestEntity.getApplicationEvaluationEntity(); + ApplicationEvaluationEntity oldEvaluationEntity = Utils.getClonedEntityForData(evaluationEntity); + evaluationEntity.setStatus(ApplicationEvaluationStatusTypeEnum.SOCCORSO.getValue()); + ApplicationEntity applicationEntity = applicationService.validateApplication(applicationAmendmentRequestEntity.getApplicationId()); + ApplicationEntity oldApplicationEntity = Utils.getClonedEntityForData(applicationEntity); + if (ApplicationAmendmentRequestTypeEnum.SPECIAL.getValue().equals(applicationAmendmentRequestEntity.getType())) { + applicationEntity.setStatus(ApplicationStatusTypeEnum.AWAITING_TECHNICAL_EVALUATION.getValue()); + } else { + applicationEntity.setStatus(ApplicationStatusTypeEnum.SOCCORSO.getValue()); + } + applicationEvaluationRepository.save(evaluationEntity); + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldEvaluationEntity).newData(evaluationEntity).build()); + applicationRepository.save(applicationEntity); + /** Version history for application when extending a special amendment (aligned with create special amendment). **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationEntity).newData(applicationEntity).build()); + applicationAmendmentRequestRepository.save(applicationAmendmentRequestEntity); /** This code is responsible for adding a version history log for the "Update Application Amendment" operation. **/ @@ -1910,6 +1928,15 @@ public class ApplicationAmendmentRequestDao { if(Boolean.FALSE.equals(applicationEntity.getStatus().equals(ApplicationStatusTypeEnum.ADMISSIBLE.getValue()))) { throw new CustomValidationException(Status.VALIDATION_ERROR,Translator.toLocale(GepafinConstant.INVALID_APPLICATION_STATUS)); } + List existingAmendmentsForEval = applicationAmendmentRequestRepository.findAllByApplicationEvaluationIdAndIsDeletedFalse(applicationEvaluationEntity.getId()); + boolean noneClosedOrExpiredForSpecial = existingAmendmentsForEval.stream() + .noneMatch(amendment -> + amendment.getStatus().equals(ApplicationAmendmentRequestEnum.CLOSE.getValue()) || + amendment.getStatus().equals(ApplicationAmendmentRequestEnum.EXPIRED.getValue()) + ); + if (Boolean.TRUE.equals(noneClosedOrExpiredForSpecial)) { + applicationEntity.setPreviousStatus(oldApplicationEntity.getStatus()); + } ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity = new ApplicationAmendmentRequestEntity(); if(Boolean.TRUE.equals(applicationAmendmentRequest.getAmendmentDocumentType().equals(AmendmentDocumentTypeEnum.ALTRE_GARANZIE))) { applicationAmendmentRequestEntity.setResponseDays(20l); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index 044e78fc..346554b6 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -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 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)); diff --git a/src/main/java/net/gepafin/tendermanagement/enums/ApplicationStatusForEvaluation.java b/src/main/java/net/gepafin/tendermanagement/enums/ApplicationStatusForEvaluation.java index 1a03e846..3055d749 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/ApplicationStatusForEvaluation.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/ApplicationStatusForEvaluation.java @@ -8,7 +8,9 @@ public enum ApplicationStatusForEvaluation { ADMISSIBLE("ADMISSIBLE"), TECHNICAL_EVALUATION("TECHNICAL_EVALUATION"), AWAITING_TECHNICAL_EVALUATION("AWAITING_TECHNICAL_EVALUATION"), - TECHNICAL_EVALUATION_REJECTED("TECHNICAL_EVALUATION_REJECTED"); + TECHNICAL_EVALUATION_REJECTED("TECHNICAL_EVALUATION_REJECTED"), + DELETED("DELETED"), + DELETED_CONFIRMED("DELETED_CONFIRMED");; private String value; diff --git a/src/main/java/net/gepafin/tendermanagement/enums/ApplicationStatusTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/ApplicationStatusTypeEnum.java index d686a347..0796f22a 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/ApplicationStatusTypeEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/ApplicationStatusTypeEnum.java @@ -20,7 +20,9 @@ public enum ApplicationStatusTypeEnum { TECHNICAL_EVALUATION_REJECTED("TECHNICAL_EVALUATION_REJECTED"), AWAITING_TECHNICAL_EVALUATION("AWAITING_TECHNICAL_EVALUATION"), AWAITING_CONTRACT("AWAITING_CONTRACT"), - CONTRACT_SIGNED("CONTRACT_SIGNED"); + CONTRACT_SIGNED("CONTRACT_SIGNED"), + DELETED("DELETED"), + DELETED_CONFIRMED("DELETED_CONFIRMED"); private String value; diff --git a/src/main/java/net/gepafin/tendermanagement/enums/RoleStatusEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/RoleStatusEnum.java index 0891dc93..e332583f 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/RoleStatusEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/RoleStatusEnum.java @@ -9,7 +9,8 @@ public enum RoleStatusEnum { ROLE_PRE_INSTRUCTOR("ROLE_PRE_INSTRUCTOR"), ROLE_GEPAFIN_OPERATOR("ROLE_GEPAFIN_OPERATOR"), ROLE_INSTRUCTOR_MANAGER("ROLE_INSTRUCTOR_MANAGER"), - ROLE_CONFIDI("ROLE_CONFIDI"); + ROLE_CONFIDI("ROLE_CONFIDI"), + ROLE_DIRECTOR("ROLE_DIRECTOR"); private String value; diff --git a/src/main/java/net/gepafin/tendermanagement/service/ApplicationService.java b/src/main/java/net/gepafin/tendermanagement/service/ApplicationService.java index a1206ee3..bce96ba9 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/ApplicationService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/ApplicationService.java @@ -34,6 +34,8 @@ public interface ApplicationService { public ApplicationResponse updateApplicationStatus(HttpServletRequest request, Long applicationId, ApplicationStatusTypeEnum status); + ApplicationResponse recordApplicationRegistrySegment(HttpServletRequest request, Long applicationId,ApplicationStatusTypeEnum status); + public ApplicationSignedDocumentResponse uploadSignedDocument(HttpServletRequest request, Long applicationId, MultipartFile file); public ApplicationSignedDocumentResponse getSignedDocument(HttpServletRequest request, Long applicationId); diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationServiceImpl.java index 12769ac7..c3abf79e 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationServiceImpl.java @@ -107,6 +107,13 @@ public class ApplicationServiceImpl implements ApplicationService { return applicationDao.updateApplicationStatus(request, applicationId, status); } + @Override + @Transactional(rollbackFor = Exception.class) + public ApplicationResponse recordApplicationRegistrySegment(HttpServletRequest request, Long applicationId,ApplicationStatusTypeEnum status) { + UserEntity userEntity = validator.validateUser(request); + return applicationDao.recordApplicationRegistrySegment(request, applicationId, status); + } + @Override @Transactional(readOnly = true) public List getAllApplications(HttpServletRequest request, Long callId, Long companyId ,List statusList) { diff --git a/src/main/java/net/gepafin/tendermanagement/util/Validator.java b/src/main/java/net/gepafin/tendermanagement/util/Validator.java index 895e63d9..e946c170 100644 --- a/src/main/java/net/gepafin/tendermanagement/util/Validator.java +++ b/src/main/java/net/gepafin/tendermanagement/util/Validator.java @@ -197,6 +197,26 @@ public class Validator { } return false; } + + public Boolean checkIsDirector() { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (authentication != null && authentication.isAuthenticated()) { + for (GrantedAuthority authority : authentication.getAuthorities()) { + if (RoleStatusEnum.ROLE_DIRECTOR.getValue().equals(authority.getAuthority())) { + return true; + } + } + } + return false; + } + + /** Super admin (any hub) or director (hub must match application — enforced separately). */ + public void validateSuperAdminOrDirector() { + if (Boolean.TRUE.equals(checkIsSuperAdmin()) || Boolean.TRUE.equals(checkIsDirector())) { + return; + } + throw new ForbiddenAccessException(Status.FORBIDDEN, Translator.toLocale(GepafinConstant.PERMISSION_DENIED)); + } public Boolean checkIsConfidi() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication != null && authentication.isAuthenticated()) { diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationApi.java index 964418bd..92308f56 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationApi.java @@ -132,6 +132,21 @@ public interface ApplicationApi { @Parameter(description = "The application id", required = true) @PathVariable("applicationId") Long applicationId, @Parameter(description = "status", required = true)@RequestParam(value = "status", required = true) ApplicationStatusTypeEnum status); + @Operation(summary = "Api to update application segment", + responses = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.NOTFOUND_ERROR_EXAMPLE) })), + @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })), + @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) + @PatchMapping(value = "/{applicationId}/segment", produces = { "application/json" }) + @PreAuthorize("hasRole('ROLE_SUPER_ADMIN') || hasRole('ROLE_DIRECTOR')") + ResponseEntity> updateApplicationSegment(HttpServletRequest request, + @Parameter(description = "The application id", required = true) @PathVariable("applicationId") Long applicationId, + @Parameter(description = "Application status", required = true) @RequestParam ApplicationStatusTypeEnum status); + @Operation(summary = "API to generate PDF for an application", responses = { @ApiResponse(responseCode = "200", description = "OK", content = @Content(mediaType = "application/pdf")), diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationApiController.java index c5817500..3e850280 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationApiController.java @@ -22,6 +22,8 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import jakarta.validation.Valid; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; @@ -141,6 +143,18 @@ public class ApplicationApiController implements ApplicationApi { .body(new Response<>(applicationResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_STATUS_UPDATED_SUCCESSFULLY))); } + @Override + public ResponseEntity> updateApplicationSegment(HttpServletRequest request, Long applicationId, + ApplicationStatusTypeEnum status) { + + loggingUtil.logUserAction( + UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.UPDATE).actionContext(UserActionContextEnum.UPDATE_APPLICATION_STATUS).build()); + + ApplicationResponse applicationResponse = applicationService.recordApplicationRegistrySegment(request, applicationId, status); + return ResponseEntity.status(HttpStatus.OK) + .body(new Response<>(applicationResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_STATUS_UPDATED_SUCCESSFULLY))); + } + @Override public ResponseEntity generateApplicationPdf(HttpServletRequest request, Long applicationId) { diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index b223a21d..fb31b0bc 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -230,6 +230,8 @@ call.not.started.yet = The call has not started yet. Please wait until the speci call.already.ended = The call has already ended. You cannot submit the application after the deadline. status.updated.successfully=Status updated successfully. application.status.updated.successfully = Application status updated successfully. +application.status.transition.restricted=This status change is not available through this operation. +application.registry.segment.invalid=Invalid segment value. application.already.in.provided.status=Application is already in provided status. delegation.not.found=Delegation not found. user.company.relation.not.found=User with the specified company relation not found. diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index bcff6a8f..b9acf4f9 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -425,4 +425,6 @@ upload.company.document.to.application=Documento aziendale caricato correttament company.document.not.found.with.ids=Documento aziendale non trovato. ID mancanti: {0} amount.field.not.provided= Si prega di fornire i campi obbligatori per l'importo. vat.or.tax.code.required=È obbligatorio il numero di partita IVA o il codice fiscale. -provide.valid.vat.number=Inserisci un numero di partita IVA valido per procedere con NDG. \ No newline at end of file +provide.valid.vat.number=Inserisci un numero di partita IVA valido per procedere con NDG. +application.status.transition.restricted=Questa modifica di stato non è disponibile tramite questa operazione. +application.registry.segment.invalid=Valore del segmento non valido. \ No newline at end of file