Resolved conflict of PR Updated Application Rejection Flow

This commit is contained in:
rajesh
2025-10-16 17:40:56 +05:30
parent 42538bfb19
commit e51bee3fa5
23 changed files with 166 additions and 54 deletions

View File

@@ -604,6 +604,8 @@ public class ApplicationAmendmentRequestDao {
String body = emailContent.getBody();
response.setEmailTemplate(body);
}
response.setAmendmentType(entity.getType());
response.setAmendmentDocumentType(entity.getAmendmentDocumentType());
return response;
}

View File

@@ -19,8 +19,10 @@ import net.gepafin.tendermanagement.web.rest.api.errors.Status;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import java.math.BigDecimal;
import java.text.MessageFormat;
@@ -146,6 +148,11 @@ public class ApplicationEvaluationDao {
@Autowired
private EmailDao emailDao;
@Autowired
private DocumentDao documentDao;
@Value("${default.hub.uuid}")
private String defaultHubUuid;
private ApplicationEvaluationEntity convertToEntity(UserEntity user, ApplicationEvaluationRequest req, Long assignedApplciationId) {
@@ -182,7 +189,7 @@ public class ApplicationEvaluationDao {
ApplicationEvaluationResponse response = new ApplicationEvaluationResponse();
populateBasicDetails(entity, response);
ApplicationEntity applicationEntity=entity.getAssignedApplicationsEntity().getApplication();
CallEntity call = callRepository.findCallEntityByApplicationId(entity.getApplicationId());
List<EvaluationCriteriaEntity> evaluationCriterias = evaluationCriteriaRepository
.findByCallIdAndLookupDataTypeAndIsDeletedFalse(call.getId(), LookUpDataEntity.LookUpDataTypeEnum.EVALUATION_CRITERIA.getValue());
@@ -201,10 +208,39 @@ public class ApplicationEvaluationDao {
List<EvaluationDocumentRequest> allDocs = prepareEvaluationDocumentBeanList(entity);
setEvaluationDocResponse(response, allDocs);
setApplicationDetails(response, entity);
setRejectedDocuments(applicationEntity, response);
return response;
}
private void setRejectedDocuments(ApplicationEntity applicationEntity, ApplicationEvaluationResponse response) {
List<DocumentResponseBean> initialDocumentBeans = new ArrayList<>();
String initialDocuments = applicationEntity.getRejectedDocument();
if (initialDocuments != null && !initialDocuments.trim().isEmpty()) {
// Split the comma-separated values and process them
List<String> documentIds = Arrays.stream(initialDocuments.split(","))
.map(String::trim)
.filter(id -> !id.isEmpty())
.collect(Collectors.toList());
initialDocumentBeans.addAll(
documentIds.stream()
.map(id -> {
try {
return applicationAmendmentRequestDao.createDocumentResponseBean(id); // Convert to Long
} catch (NumberFormatException e) {
// Handle invalid document IDs gracefully
return null;
}
})
.filter(Objects::nonNull) // Skip null responses
.collect(Collectors.toList())
);
}
response.setRejectedDocument(initialDocumentBeans);
}
private void setAmendmentDetails(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response) {
List<ApplicationAmendmentRequestEntity> amendmentRequests=applicationAmendmentRequestRepository.findAllByApplicationEvaluationIdAndIsDeletedFalse(entity.getId());
List<AmendmentDocumentResponseBean> amendmentDocumentResponseBeans=new ArrayList<>();
@@ -653,7 +689,7 @@ public class ApplicationEvaluationDao {
public ApplicationEvaluationResponse createOrUpdateApplicationEvaluation(
UserEntity user,
ApplicationEvaluationRequest req,
Long assignedApplicationId) {
Long assignedApplicationId, List<MultipartFile> rejectedDocuments) {
log.info("Start createOrUpdateApplicationEvaluation: assignedApplicationId={}, userId={}", assignedApplicationId, user.getId());
Optional<ApplicationEvaluationEntity> existingEntityOptional =
@@ -741,7 +777,7 @@ public class ApplicationEvaluationDao {
if (status != null) {
AssignedApplicationsEntity assignedApplicationsEntity = assignedApplications.get();
return updateApplicationEvaluationStatus(application, assignedApplicationsEntity, status);
return updateApplicationEvaluationStatus(application, assignedApplicationsEntity, status,rejectedDocuments,req);
} else {
return convertToResponse(entity);
}
@@ -1903,7 +1939,7 @@ public class ApplicationEvaluationDao {
}
public ApplicationEvaluationResponse updateApplicationEvaluationStatus(ApplicationEntity application, AssignedApplicationsEntity assignedApplicationsEntity,
ApplicationStatusForEvaluation newStatus) {
ApplicationStatusForEvaluation newStatus, List<MultipartFile> files,ApplicationEvaluationRequest applicationEvaluationRequest) {
log.info("Starting updateApplicationEvaluationStatus for applicationId: {}, assignedApplicationId: {}, newStatus: {}",
application.getId(), assignedApplicationsEntity.getId(), newStatus);
@@ -1942,17 +1978,17 @@ public class ApplicationEvaluationDao {
log.info("Application status updated to {} for applicationId: {}", newStatus, application.getId());
}
// if(newStatus.equals(ApplicationStatusForEvaluation.TECHNICAL_EVALUATION_REJECTED)) {
// application.setStatus(newStatus.getValue());
// log.info("Application status updated to {} for applicationId: {}", newStatus, application.getId());
// emailNotificationDao.sendMailForApplicationTechnicalEvaluationRejected(application,hub,existingEntity);
// application.setDateRejected(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
// emailSendResponse = emailDao.buildEmailSendResponseFromRequest(request);
// responses = List.of(emailSendResponse);
// if (!Boolean.TRUE.equals(emailSendResponse.getIsEmailSend())) {
// saveEmailSendResponseToEvaluation(emailSendResponse, existingEntity);
// }
// }
if(newStatus.equals(ApplicationStatusForEvaluation.TECHNICAL_EVALUATION_REJECTED)) {
application.setStatus(newStatus.getValue());
log.info("Application status updated to {} for applicationId: {}", newStatus, application.getId());
emailNotificationDao.sendMailForApplicationTechnicalEvaluationRejected(application,hub,existingEntity);
application.setDateRejected(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
emailSendResponse = emailDao.buildEmailSendResponseFromRequest(request);
responses = List.of(emailSendResponse);
if (!Boolean.TRUE.equals(emailSendResponse.getIsEmailSend())) {
saveEmailSendResponseToEvaluation(emailSendResponse, existingEntity);
}
}
application = applicationRepository.save(application);
ApplicationEvaluationEntity oldApplicationEvaluation = Utils.getClonedEntityForData(existingEntity);
@@ -1997,10 +2033,28 @@ public class ApplicationEvaluationDao {
notificationDao.sendNotificationToBeneficiary(application, NotificationTypeEnum.EVALUATION_RESULT);
}
if (Boolean.TRUE.equals(statusType.equals((ApplicationStatusTypeEnum.REJECTED.getValue())))) {
String tipoInammissibilita =null;
if(Boolean.TRUE.equals(hub.getUniqueUuid().equals(defaultHubUuid))) {
if (applicationEvaluationRequest.getMotivation() == null || applicationEvaluationRequest.getRejectedReason() == null) {
throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.MORE_FIELDS_REQUIRED_FOR_REJECTION));
}
if (files != null) {
List<DocumentResponseBean> documentResponseBeans = uploadRejectedDocument(user.getId(), files, application);
List<Long> rejectedDocumentIds = documentResponseBeans.stream()
.map(DocumentResponseBean::getId)
.collect(Collectors.toList());
String rejectedDocumentId = rejectedDocumentIds.stream()
.map(String::valueOf)
.collect(Collectors.joining(","));
application.setRejectedDocument(rejectedDocumentId);
}
tipoInammissibilita=applicationEvaluationRequest.getRejectedReason();
application.setRejectedReason(applicationEvaluationRequest.getRejectedReason());
}
application.setDateRejected(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
application.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
application = applicationRepository.save(application);
emailNotificationDao.sendInadmissibilityEmailForRejectedApplication(application,existingEntity);
emailNotificationDao.sendInadmissibilityEmailForRejectedApplication(application,existingEntity,tipoInammissibilita);
emailSendResponse = emailDao.buildEmailSendResponseFromRequest(request);
responses = List.of(emailSendResponse);
if (!Boolean.TRUE.equals(emailSendResponse.getIsEmailSend())) {
@@ -2083,7 +2137,7 @@ public class ApplicationEvaluationDao {
return convertToResponse(savedEntity);
}
public ApplicationEvaluationFormResponse createApplicationEvaluation(HttpServletRequest request, ApplicationEvaluationFormRequestBean applicationEvaluationFormRequestBean, Long evaluationFormId, Long assignedApplicationId){
public ApplicationEvaluationFormResponse createApplicationEvaluation(HttpServletRequest request, List<MultipartFile> files, ApplicationEvaluationFormRequestBean applicationEvaluationFormRequestBean, Long evaluationFormId, Long assignedApplicationId){
log.info("Start createApplicationEvaluation - assignedApplicationId: {}, evaluationFormId: {}", assignedApplicationId, evaluationFormId);
UserEntity user = validator.validateUser(request);
@@ -2094,7 +2148,7 @@ public class ApplicationEvaluationDao {
ApplicationEvaluationRequest req = convertToApplicationEvaluationRequest(applicationEvaluationFormRequestBean);
// Call the existing method to create or update evaluation
ApplicationEvaluationResponse evaluationResponse = createOrUpdateApplicationEvaluation(user, req, assignedApplicationId);
ApplicationEvaluationResponse evaluationResponse = createOrUpdateApplicationEvaluation(user, req, assignedApplicationId,files);
ApplicationEvaluationEntity entity = applicationEvaluationService.validateApplicationEvaluation(evaluationResponse.getId());
@@ -2415,7 +2469,7 @@ public class ApplicationEvaluationDao {
request.setApplicationStatus(formRequestBean.getApplicationStatus());
request.setMotivation(formRequestBean.getMotivation());
request.setAmountAccepted(formRequestBean.getAmountAccepted());
request.setRejectedReason(formRequestBean.getRejectedReason());
request.setCriteria(null);
request.setChecklist(null);
@@ -2625,7 +2679,6 @@ public class ApplicationEvaluationDao {
log.info("Application status updated to {} for applicationId: {}", ApplicationStatusForEvaluation.TECHNICAL_EVALUATION_REJECTED, application.getId());
emailNotificationDao.sendMailForApplicationTechnicalEvaluationRejected(application, hub, existingEntity);
application.setDateRejected(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
application.setEmailJson(Utils.convertMapIntoJsonString(applicationRequest.getEmailJson()));
emailSendResponse = emailDao.buildEmailSendResponseFromRequest(request);
responses = List.of(emailSendResponse);
if (!Boolean.TRUE.equals(emailSendResponse.getIsEmailSend())) {
@@ -2643,5 +2696,11 @@ public class ApplicationEvaluationDao {
}
return null;
}
public List<DocumentResponseBean> uploadRejectedDocument(Long userId,List<MultipartFile> files,ApplicationEntity application){
if(files!=null) {
return documentDao.uploadFiles(userId, files, application.getId(), DocumentSourceTypeEnum.APPLICATION, DocumentTypeEnum.DOCUMENT);
}
return new ArrayList<>();
}
}

View File

@@ -116,7 +116,7 @@ public class AssignedApplicationsDao {
UserEntity user = userService.validateUser(userId);
AssignedApplicationsEntity assignment = createAssignmentEntity(application, user.getId(), assignedByUser, assignedApplicationsRequest);
applicationEvaluationDao.createOrUpdateApplicationEvaluation(user, new ApplicationEvaluationRequest(), assignment.getId());
applicationEvaluationDao.createOrUpdateApplicationEvaluation(user, new ApplicationEvaluationRequest(), assignment.getId(),null);
AssignedApplicationsResponse assignApplicationToInstructorResponse = convertEntityToResponse(assignment);
log.info("Application assigned succesfully {}", assignApplicationToInstructorResponse);
return assignApplicationToInstructorResponse;

View File

@@ -12,7 +12,6 @@ import net.gepafin.tendermanagement.enums.DocumentTypeEnum;
import net.gepafin.tendermanagement.enums.VersionActionTypeEnum;
import net.gepafin.tendermanagement.model.request.CommunicationRequestBean;
import net.gepafin.tendermanagement.model.request.VersionHistoryRequest;
import net.gepafin.tendermanagement.model.response.ApplicationAmendmentResponse;
import net.gepafin.tendermanagement.model.response.CommunicationResponseBean;
import net.gepafin.tendermanagement.model.response.DocumentResponseBean;
import net.gepafin.tendermanagement.repositories.CommunicationRepository;
@@ -117,7 +116,7 @@ public class CommunicationDao {
return "Deleted Comment Successfully.";
}
public ApplicationAmendmentResponse getAmendmentComments(Long amendmentId) {
public List<CommunicationResponseBean> getAmendmentComments(Long amendmentId) {
ApplicationAmendmentRequestEntity amendmentData = applicationAmendmentRequestService.validateApplicationAmendmentRequest(amendmentId);
List<CommunicationEntity> commentsList = communicationRepository.findByApplicationAmendmentRequestIdAndIsDeletedFalse(amendmentId);
@@ -130,7 +129,7 @@ public class CommunicationDao {
CommunicationResponseBean communicationResponseBean=convertToCommunicationResponseBean(communicationEntity,communicationDocumentBeans);
communicationResponseBeans.add(communicationResponseBean);
}
return new ApplicationAmendmentResponse(amendmentData, communicationResponseBeans);
return communicationResponseBeans;
}
public CommunicationResponseBean updateAmendmentComment(CommunicationRequestBean communicationRequestBean, Long amendmentId, Long commentId) {

View File

@@ -158,8 +158,15 @@ public class EmailNotificationDao {
: new HashSet<>(documentIds);
documentEntities=documentRepository.findAllByIdInAndIsDeletedFalse(setOfDocumentIds);
}
if(Boolean.TRUE.equals(userEntity.getHub().getUniqueUuid().equals(defaultHubUuid)) && Boolean.TRUE.equals(systemEmailTemplateResponse.getEmailScenario().equals(EmailScenarioTypeEnum.APPLICATION_REJECTED))) {
List<Long> documentIds=applicationDao.validateDocumentIds(applicationEntity.getRejectedDocument());
Set<Long> setOfDocumentIds = (documentIds == null)
? Collections.emptySet()
: new HashSet<>(documentIds);
documentEntities=documentRepository.findAllByIdInAndIsDeletedFalse(setOfDocumentIds);
}
urls = documentEntities.stream()
urls = documentEntities.stream()
.map(DocumentEntity::getFilePath) // or getUrl()
.collect(Collectors.toList());
if(Boolean.FALSE.equals(urls.isEmpty())) {
@@ -376,7 +383,7 @@ public class EmailNotificationDao {
sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.ADMISSIBILITY_NOTIFICATION, bodyPlaceholders, null,null);
}
public void sendInadmissibilityEmailForRejectedApplication(ApplicationEntity applicationEntity,ApplicationEvaluationEntity applicationEvaluationEntity) {
public void sendInadmissibilityEmailForRejectedApplication(ApplicationEntity applicationEntity,ApplicationEvaluationEntity applicationEvaluationEntity,String tipoInammissibilita) {
Map<String, String> bodyPlaceholders = new HashMap<>();
bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
String protocolNumber=applicationEntity.getProtocol().getExternalProtocolNumber();
@@ -390,8 +397,9 @@ public class EmailNotificationDao {
}
bodyPlaceholders.put("{{protocol_date}}", protocolDate);
bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(applicationEntity.getProtocol().getTime(), GepafinConstant.HH_MM_SS));
HubEntity hubEntity = hubService.valdateHub(applicationEntity.getHubId());
bodyPlaceholders.put("{{tipo_inammissibilita}}", tipoInammissibilita);
bodyPlaceholders.put("{{form_text}}", applicationEvaluationEntity.getMotivation());
sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_TEMPLATE, bodyPlaceholders, null,null);
}