Done Ticket GEPAFINBE-171

This commit is contained in:
Piyush
2025-05-28 11:56:17 +05:30
parent 9699964b09
commit f9b9c5f2e0
10 changed files with 361 additions and 64 deletions

View File

@@ -653,6 +653,7 @@ public class ApplicationEvaluationDao {
ApplicationEvaluationRequest req,
Long assignedApplicationId) {
log.info("Start createOrUpdateApplicationEvaluation: assignedApplicationId={}, userId={}", assignedApplicationId, user.getId());
Optional<ApplicationEvaluationEntity> existingEntityOptional =
applicationEvaluationRepository.findByAssignedApplicationsEntity_IdAndIsDeletedFalse(assignedApplicationId);
ApplicationEvaluationEntity entity = null;
@@ -663,6 +664,7 @@ public class ApplicationEvaluationDao {
VersionActionTypeEnum actionType = VersionActionTypeEnum.INSERT;
validateApplicationEvaluationRequest(req, application);
if (existingEntityOptional.isPresent()) {
log.info("Updating existing application evaluation for assignedApplicationId={}", assignedApplicationId);
entity = existingEntityOptional.get();
oldApplicationEvaluation = Utils.getClonedEntityForData(entity);
if(req.getCriteria()!=null) {
@@ -688,6 +690,7 @@ public class ApplicationEvaluationDao {
entity = applicationEvaluationRepository.save(entity);
} else {
log.info("Creating new application evaluation for assignedApplicationId={}", assignedApplicationId);
AssignedApplicationsEntity assignedApplicationsEntity = assignedApplicationsService.validateAssignedApplication(assignedApplicationId);
entity = convertToEntity(user, req, assignedApplicationId);
actionType = VersionActionTypeEnum.INSERT;
@@ -716,12 +719,13 @@ public class ApplicationEvaluationDao {
List<ApplicationAmendmentRequestEntity> applicationAmendmentRequestEntities =
applicationAmendmentRequestRepository.findAllByApplicationEvaluationIdAndIsDeletedFalse(entity.getId());
if(req.getEvaluationDocument()!=null) {
log.info("Updating evaluation document for assignedApplicationId={}", assignedApplicationId);
updateApplicationEvaluation(assignedApplicationId, req.getEvaluationDocument());
}
// Fetch amendment details from the request
if(req.getAmendmentDetails()!=null) {
log.debug("Processing amendment details for evaluationId={}", entity.getId());
List<AmendmentDetailsRequest> amendmentDetailsRequests = req.getAmendmentDetails();
updateAmendmentDocumentsAndFormFields(applicationAmendmentRequestEntities, amendmentDetailsRequests);
}
@@ -734,7 +738,10 @@ public class ApplicationEvaluationDao {
}
private void validateApplicationEvaluationRequest(ApplicationEvaluationRequest req, ApplicationEntity application) {
log.debug("Validating evaluation request for applicationId={}, evaluationVersion={}",
application.getId(), application.getEvaluationVersion());
if(EvaluationVersionEnum.V2.getValue().equals(application.getEvaluationVersion())) {
log.info("Evaluation version is V2 for applicationId={}; setting checklist and criteria to null", application.getId());
req.setChecklist(null);
req.setCriteria(null);
}
@@ -1059,15 +1066,18 @@ public class ApplicationEvaluationDao {
}
public ApplicationEvaluationEntity validateApplicationEvaluation(Long id) {
log.debug("Validating existence of ApplicationEvaluationEntity with ID: {}", id);
Optional<ApplicationEvaluationEntity> entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(id);
if (entityOptional.isEmpty()) {
log.warn("ApplicationEvaluationEntity not found or marked as deleted for ID: {}", id);
throw new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.APPLICATION_EVALUATION_NOT_FOUND, id));
}
log.info("Successfully validated ApplicationEvaluationEntity with ID: {}", id);
return entityOptional.get();
}
public void validatePreinstructor(HttpServletRequest request,Long applicationId,Long assignedApplicationId){
log.debug("Validating preinstructor access: applicationId={}, assignedApplicationId={}", applicationId, assignedApplicationId);
if (applicationId == null && assignedApplicationId == null) {
throw new CustomValidationException(
Status.BAD_REQUEST,
@@ -1091,12 +1101,14 @@ public class ApplicationEvaluationDao {
validator.validatePreInstructor(request, assignedApplications.getUserId());
}
public ApplicationEvaluationResponse getApplicationEvaluationByApplicationId(HttpServletRequest request, UserEntity user, Long applicationID, Long assignedApplicationID) {
log.info("Entering getApplicationEvaluationByApplicationId: applicationID={}, assignedApplicationID={}", applicationID, assignedApplicationID);
Long applicationId;
Long assignedApplicationId;
validatePreinstructor(request, applicationID, assignedApplicationID);
if (applicationID == null && assignedApplicationID != null) {
assignedApplicationId = assignedApplicationID;
log.debug("applicationID is null, fetching from assignedApplicationID={}", assignedApplicationId);
Optional<AssignedApplicationsEntity> assignedApplicationsOptional =
assignedApplicationsRepository.findByIdAndIsDeletedFalse(assignedApplicationId);
@@ -1140,6 +1152,7 @@ public class ApplicationEvaluationDao {
public ApplicationEvaluationResponse getEvaluationResponseByApplicationid(UserEntity user, Long applicationId, Long assignedApplicationId) {
log.debug("Entering getEvaluationResponseByApplicationid with applicationId={}, assignedApplicationId={}, userId={}", applicationId, assignedApplicationId, user.getId());
ApplicationEvaluationEntity entity = new ApplicationEvaluationEntity();
ApplicationEvaluationResponse response = new ApplicationEvaluationResponse();
CallEntity call = null;
@@ -1193,6 +1206,7 @@ public class ApplicationEvaluationDao {
ApplicationEvaluationResponse response,
List<EvaluationCriteriaEntity> evaluationCriterias) {
log.info("Setting criteria responses for applicationId: {}", applicationId);
List<CriteriaResponse> criteriaResponses = getInitialCriteriaResponses(entity, applicationId);
criteriaResponses.forEach(criteriaResponse -> {
@@ -1388,6 +1402,7 @@ public class ApplicationEvaluationDao {
private void setChecklistResponses(ApplicationEvaluationEntity entity, Long applicationId, ApplicationEvaluationResponse response,
List<CallTargetAudienceChecklistEntity> checklistEntities) {
log.info("Setting checklist responses for applicationId: {}", applicationId);
List<ChecklistResponse> checklistResponses = entity.getChecklist() != null ? Utils.convertJsonToList(entity.getChecklist(), new TypeReference<List<ChecklistResponse>>() {
}) : getChecklistResponse(applicationId);
@@ -1506,6 +1521,7 @@ public class ApplicationEvaluationDao {
}
List<CriteriaResponse> getCriteriaResponse(Long applicationId) {
log.info("Getting criteria response for applicationId: {}", applicationId);
CallEntity call = getCallEntityByApplicationId(applicationId);
List<EvaluationCriteriaEntity> evaluationCriterias = getEvaluationCriterias(call);
@@ -1515,10 +1531,12 @@ public class ApplicationEvaluationDao {
}
private CallEntity getCallEntityByApplicationId(Long applicationId) {
log.info("Fetching CallEntity for applicationId: {}", applicationId);
return callRepository.findCallEntityByApplicationId(applicationId);
}
private List<EvaluationCriteriaEntity> getEvaluationCriterias(CallEntity call) {
log.info("Fetching evaluation criterias for callId: {}", call.getId());
return evaluationCriteriaRepository
.findByCallIdAndLookupDataTypeAndIsDeletedFalse(call.getId(), LookUpDataEntity.LookUpDataTypeEnum.EVALUATION_CRITERIA.getValue());
}
@@ -1765,6 +1783,7 @@ public class ApplicationEvaluationDao {
List<ChecklistResponse> getChecklistResponse(Long applicationId) {
log.info("Fetching checklist responses for applicationId: {}", applicationId);
CallEntity call = callRepository.findCallEntityByApplicationId(applicationId);
List<CallTargetAudienceChecklistEntity> checklistEntities = callTargetAudienceChecklistRepository
.findByCallIdAndLookupDataTypeAndIsDeletedFalse(call.getId(), LookUpDataEntity.LookUpDataTypeEnum.CHECKLIST.getValue());
@@ -1850,7 +1869,7 @@ public class ApplicationEvaluationDao {
}
public void deleteById(Long id) {
log.info("Starting soft delete for ApplicationEvaluation with id: {}", id);
ApplicationEvaluationEntity applicationEvaluationEntity = validateApplicationEvaluation(id);
ApplicationEvaluationEntity oldApplicationEvaluation = Utils.getClonedEntityForData(applicationEvaluationEntity);
applicationEvaluationEntity.setIsDeleted(true);
@@ -1872,6 +1891,8 @@ public class ApplicationEvaluationDao {
public ApplicationEvaluationResponse updateApplicationEvaluationStatus(ApplicationEntity application, AssignedApplicationsEntity assignedApplicationsEntity,
ApplicationStatusForEvaluation newStatus) {
log.info("Starting updateApplicationEvaluationStatus for applicationId: {}, assignedApplicationId: {}, newStatus: {}",
application.getId(), assignedApplicationsEntity.getId(), newStatus);
Optional<ApplicationEvaluationEntity> existingEntityOptional = applicationEvaluationRepository.findByAssignedApplicationsEntity_IdAndIsDeletedFalse(
assignedApplicationsEntity.getId());
ApplicationEvaluationEntity entity;
@@ -1891,11 +1912,13 @@ public class ApplicationEvaluationDao {
}
if(newStatus.equals(ApplicationStatusForEvaluation.TECHNICAL_EVALUATION) && Boolean.TRUE.equals(application.getStatus().equals(ApplicationStatusTypeEnum.ADMISSIBLE.getValue()))){
log.info("Processing technical evaluation for applicationId: {}", application.getId());
processTechnicalEvaluation(application.getId(), application, newStatus);
}
if((newStatus.equals(ApplicationStatusForEvaluation.APPROVED) || newStatus.equals(ApplicationStatusForEvaluation.REJECTED)) && application.getStatus().equals(ApplicationStatusTypeEnum.EVALUATION.getValue())) {
application.setStatus(newStatus.getValue());
log.info("Application status updated to {} for applicationId: {}", newStatus, application.getId());
}
application = applicationRepository.save(application);
@@ -1907,6 +1930,7 @@ public class ApplicationEvaluationDao {
List<ApplicationAmendmentRequestEntity> amendmentRequest = applicationAmendmentRequestRepository.findAllByApplicationEvaluationIdAndStatusAndIsDeletedFalse(existingEntity.getId(),List.of(ApplicationAmendmentRequestEnum.AWAITING.getValue(),ApplicationAmendmentRequestEnum.RESPONSE_RECEIVED.getValue()));
if(amendmentRequest !=null && Boolean.FALSE.equals(amendmentRequest.isEmpty())){
log.warn("Application cannot be approved or rejected due to pending amendment requests. applicationEvaluationId: {}", existingEntity.getId());
throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.APPLICATION_CANNOT_APPROVED_OR_REJECTED));
}
String statusType = application.getStatus();
@@ -1914,11 +1938,13 @@ public class ApplicationEvaluationDao {
existingEntity.setStatus(ApplicationEvaluationStatusTypeEnum.CLOSE.getValue());
existingEntity.setClosingDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
assignedApplicationsEntity.setStatus(AssignedApplicationEnum.CLOSE.getValue());
log.info("Closing ApplicationEvaluation and AssignedApplication for applicationId: {}", application.getId());
}
if (existingEntity.getStartDate() != null && existingEntity.getClosingDate() != null) {
long activeDays = ChronoUnit.DAYS.between(existingEntity.getStartDate(), existingEntity.getClosingDate());
activeDays -= existingEntity.getSuspendedDays() != null ? existingEntity.getSuspendedDays() : 0;
existingEntity.setActiveDays(activeDays);
log.debug("Calculated active days for ApplicationEvaluationEntity id {}: {}", existingEntity.getId(), activeDays);
}
entity = applicationEvaluationRepository.save(existingEntity);
assignedApplicationsRepository.save(assignedApplicationsEntity);
@@ -1956,15 +1982,20 @@ public class ApplicationEvaluationDao {
}
public ApplicationEvaluationEntity validateApplicationEvaluationByApplicationId(Long applicationId) {
log.info("Validating ApplicationEvaluation for applicationId: {}", applicationId);
return applicationEvaluationRepository
.findByApplicationIdAndIsDeletedFalse(applicationId)
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND,
Translator.toLocale(GepafinConstant.APPLICATION_EVALUATION_NOT_FOUND)));
.orElseThrow(() -> {
log.error("ApplicationEvaluation not found for applicationId: {}", applicationId);
return new ResourceNotFoundException(Status.NOT_FOUND,
Translator.toLocale(GepafinConstant.APPLICATION_EVALUATION_NOT_FOUND));
});
}
public ApplicationEvaluationResponse updateApplicationEvaluation(
Long assignedApplicationId,
List<EvaluationDocumentRequest> docRequest) {
log.info("Starting updateApplicationEvaluation for assignedApplicationId: {}", assignedApplicationId);
Optional<ApplicationEvaluationEntity> entityOptional=applicationEvaluationRepository.findByAssignedApplicationsEntity_IdAndIsDeletedFalse(assignedApplicationId);
ApplicationEvaluationEntity applicationEvaluationEntity =null;
ApplicationEvaluationEntity oldApplicationEvaluation = Utils.getClonedEntityForData(entityOptional.get());
@@ -1986,14 +2017,17 @@ public class ApplicationEvaluationDao {
applicationEvaluationEntity.setEvaluationDocument(updatedEvaluationDocJson);
}
ApplicationEvaluationEntity savedEntity = applicationEvaluationRepository.save(applicationEvaluationEntity);
log.info("Saved ApplicationEvaluationEntity with id: {}", savedEntity.getId());
/** This code is responsible for adding a version history log for the "Upload Document in Application Evaluation" operation. **/
loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationEvaluation).newData(savedEntity).build());
log.info("Version history logged for update on ApplicationEvaluationEntity id: {}", savedEntity.getId());
return convertToResponse(savedEntity);
}
public ApplicationEvaluationFormResponse createApplicationEvaluation(HttpServletRequest request, ApplicationEvaluationFormRequestBean applicationEvaluationFormRequestBean, Long evaluationFormId, Long assignedApplicationId){
log.info("Start createApplicationEvaluation - assignedApplicationId: {}, evaluationFormId: {}", assignedApplicationId, evaluationFormId);
UserEntity user = validator.validateUser(request);
AssignedApplicationsEntity assignedApplicationsEntity = assignedApplicationsService.validateAssignedApplication(assignedApplicationId);
ApplicationEntity application = applicationService.validateApplication(assignedApplicationsEntity.getApplication().getId());
@@ -2054,6 +2088,7 @@ public class ApplicationEvaluationDao {
String fieldId = requestField.getFieldId();
if (!contentMap.containsKey(fieldId)) {
log.warn("Field ID not found in evaluation form: {}", fieldId);
validator.addError(MessageFormat.format(Translator.toLocale(GepafinConstant.FIELD_ID_NOT_FOUND), fieldId));
}
@@ -2081,6 +2116,7 @@ public class ApplicationEvaluationDao {
ApplicationEvaluationFormEntity applicationEvaluationFormEntity,
List<ApplicationEvaluationFormFieldEntity> applicationEvaluationFormFieldEntities,
EvaluationFormEntity evaluationFormEntity,FieldValidator fieldValidator){
log.debug("Starting createOrUpdateApplicationEvaluationFormField for fieldId: {}", applicationFormFieldRequestBean.getFieldId());
ApplicationEvaluationFormFieldEntity applicationEvaluationFormFieldEntity = new ApplicationEvaluationFormFieldEntity();
validateFileUploadDocuments(applicationFormFieldRequestBean, evaluationFormEntity);
VersionActionTypeEnum actionType = VersionActionTypeEnum.INSERT;
@@ -2121,6 +2157,7 @@ public class ApplicationEvaluationDao {
}
private List<Long> validateFileUploadDocuments(ApplicationFormFieldRequestBean applicationFormFieldRequestBean, EvaluationFormEntity evaluationFormEntity) {
log.debug("Validating file upload documents for fieldId: {}", applicationFormFieldRequestBean.getFieldId());
List<Long> documentIds=null;
List<ContentResponseBean> contentResponseBeans=evaluationFormDao.convertEvaluationFormEntityToEvaluationFormResponseBean(evaluationFormEntity).getContent();
@@ -2145,6 +2182,9 @@ public class ApplicationEvaluationDao {
private List<ApplicationEvaluationFormFieldReponseBean> createEvaluationFormFieldResponse(
List<ApplicationEvaluationFormFieldEntity> evaluationFormFieldEntities,
ApplicationEvaluationFormEntity applicationEvaluationFormEntity){
log.info("Starting to create evaluation form field response for EvaluationFormEntity ID: {}",
applicationEvaluationFormEntity.getEvaluationForm().getId());
List<ApplicationEvaluationFormFieldReponseBean> evaluationFormFieldResponseBeans = new ArrayList<>();
List<ContentResponseBean> contentResponseBeans =evaluationFormDao.convertEvaluationFormEntityToEvaluationFormResponseBean(applicationEvaluationFormEntity.getEvaluationForm()).getContent();
@@ -2236,6 +2276,7 @@ public class ApplicationEvaluationDao {
public ApplicationEvaluationFormResponse getApplicationEvaluationForm(HttpServletRequest request, Long applicationId, Long assignedApplicationId ){
log.debug("Fetching evaluation form. applicationId: {}, assignedApplicationId: {}", applicationId, assignedApplicationId);
if (applicationId == null && assignedApplicationId == null) {
throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.EITHER_APPLICATION_ID_OR_ASSIGNED_APPLICATION_ID_MUST_BE_PROVIDED));
}
@@ -2464,6 +2505,7 @@ public class ApplicationEvaluationDao {
return false;
}
private void processTechnicalEvaluation(Long applicationId, ApplicationEntity applicationEntity, ApplicationStatusForEvaluation status){
log.info("Starting technical evaluation processing for applicationId: {}", applicationId);
Optional<ApplicationEvaluationEntity> evaluationEntityOpt = applicationEvaluationRepository.findByApplicationIdAndIsDeletedFalse(applicationId);
if (evaluationEntityOpt.isPresent()){
ApplicationEvaluationEntity evaluationEntity = evaluationEntityOpt.get();
@@ -2472,9 +2514,10 @@ public class ApplicationEvaluationDao {
Integer totalScore = calculateTotalScore(evaluationEntity.getCriteria());
if (totalScore > 40) {
applicationEntity.setStatus(status.getValue());
log.info("Status updated to TECHNICAL_EVALUATION for applicationId: " + applicationId);
log.info("Status updated to TECHNICAL_EVALUATION for applicationId: {}", applicationId);
}
else{
log.warn("Insufficient score ({}) for applicationId: {}. Throwing validation exception.", totalScore, applicationId);
throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.INSUFFICIENT_SCORE_MESSAGE));
}
}
@@ -2493,10 +2536,11 @@ public class ApplicationEvaluationDao {
.mapToInt(obj -> obj.get("score") != null ? ((Number) obj.get("score")).intValue() : 0)
.sum();
log.info("Total score calculated successfully: {}", totalScore);
return totalScore;
}
catch (Exception e) {
log.error(" Error parsing criteria JSON: {}", e.getMessage());
log.error("Error parsing criteria JSON. Input: {}. Exception: {}", criteriaJson, e.getMessage(), e);
return 0;
}
}