Resolve Conflict

This commit is contained in:
harish
2024-10-28 16:15:27 +05:30
11 changed files with 244 additions and 140 deletions

View File

@@ -241,7 +241,7 @@ public class GepafinConstant {
public static final String APPLICATION_EVALUATION_NOT_FOUND = "application.evaluation.not.found";
public static final String APPLICATION_EVALUATION_STATUS_UPDATED_SUCCESSFULLY = "application.evaluation.status.updated.successfully";
public static final String ASSIGNED_APPLICATION_NOT_FOUND_WITH_ID_MSG = "assigned.application.not.found.with.id";
public static final String EITHER_APPLICATION_OR_ASSIGNED_APPLICATION_ID_REQUIRED_MSG = "either.application.or.assigned.application.id.required";
public static final String APPLICATION_ASSIGNED= "application.assigned.success.msg";
public static final String APPLICATION_ALREADY_ASSIGNED = "application.already.assigned.msg";

View File

@@ -4,9 +4,7 @@ import com.fasterxml.jackson.core.type.TypeReference;
import net.gepafin.tendermanagement.config.Translator;
import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.entities.*;
import net.gepafin.tendermanagement.enums.ApplicationEvaluationStatusTypeEnum;
import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum;
import net.gepafin.tendermanagement.enums.DocumentTypeEnum;
import net.gepafin.tendermanagement.enums.*;
import net.gepafin.tendermanagement.model.request.ApplicationEvaluationRequest;
import net.gepafin.tendermanagement.model.request.ChecklistRequest;
import net.gepafin.tendermanagement.model.request.CriteriaRequest;
@@ -52,15 +50,16 @@ public class ApplicationEvaluationDao {
@Autowired
private ApplicationFormFieldRepository applicationFormFieldRepository;
@Autowired
private AssignedApplicationsRepository assignedApplicationsRepository;
private AssignedApplicationsRepository assignedApplicationsRepository;
@Autowired
private CriteriaFormFieldRepository criteriaFormFieldRepository;
private CriteriaFormFieldRepository criteriaFormFieldRepository;
private ApplicationEvaluationEntity convertToEntity(UserEntity user, ApplicationEvaluationRequest req,Long applicationId) {
private ApplicationEvaluationEntity convertToEntity(UserEntity user, ApplicationEvaluationRequest req, Long assignedApplciationId) {
ApplicationEvaluationEntity entity = new ApplicationEvaluationEntity();
ApplicationEntity application = applicationService.validateApplication(applicationId);
AssignedApplicationsEntity assignedApplications = assignedApplicationsRepository.findByApplicationIdAndIsDeletedFalse(applicationId).orElse(null);
AssignedApplicationsEntity assignedApplications = assignedApplicationsRepository.findByIdAndIsDeletedFalse(assignedApplciationId).orElse(null);
ApplicationEntity application = applicationService.validateApplication(assignedApplications.getApplication().getId());
entity.setApplicationId(application.getId());
entity.setAssignedApplicationsEntity(assignedApplications);
entity.setUserId(user.getId());
@@ -94,21 +93,32 @@ public class ApplicationEvaluationDao {
private void populateBasicDetails(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response) {
response.setId(entity.getId());
response.setApplicationId(entity.getApplicationId());
AssignedApplicationsEntity assignedApplications = assignedApplicationsRepository.findByApplicationIdAndIsDeletedFalse(entity.getApplicationId()).orElse(null);
response.setAssignedApplicationId(assignedApplications.getId());
List<AssignedApplicationsEntity> assignedApplicationsList =
assignedApplicationsRepository.findAllByApplicationId(entity.getApplicationId());
if (assignedApplicationsList.isEmpty()) {
response.setAssignedApplicationId(null);
} else {
AssignedApplicationsEntity assignedApplications = assignedApplicationsList.get(0);
response.setAssignedApplicationId(assignedApplications.getId());
}
response.setNote(entity.getNote());
response.setStatus(ApplicationEvaluationStatusTypeEnum.valueOf(entity.getStatus()));
response.setCreatedDate(entity.getCreatedDate());
response.setUpdatedDate(entity.getUpdatedDate());
}
private void setCriteriaResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List<EvaluationCriteriaEntity> evaluationCriterias) {
List<CriteriaResponse> criteriaResponsesFromEntity = entity.getCriteria() != null
? Utils.convertJsonToList(entity.getCriteria(), new TypeReference<List<CriteriaResponse>>() {})
? Utils.convertJsonToList(entity.getCriteria(), new TypeReference<List<CriteriaResponse>>() {
})
: new ArrayList<>();
List<CriteriaResponse> criteriaResponsesFromDB = getCriteriaResponse(entity.getApplicationId());
addMissingCriteriaResponses(criteriaResponsesFromEntity, criteriaResponsesFromDB,entity.getApplicationId());
addMissingCriteriaResponses(criteriaResponsesFromEntity, criteriaResponsesFromDB, entity.getApplicationId());
criteriaResponsesFromEntity.forEach(criteriaResponse -> {
EvaluationCriteriaEntity matchingEvaluationCriteria = evaluationCriterias.stream()
.filter(evaluationCriteria -> evaluationCriteria.getId().equals(criteriaResponse.getId()))
@@ -126,7 +136,8 @@ public class ApplicationEvaluationDao {
response.setCriteria(criteriaResponsesFromEntity);
}
private void addMissingCriteriaResponses(List<CriteriaResponse> criteriaResponsesFromEntity, List<CriteriaResponse> criteriaResponsesFromDB,Long applicationId) {
private void addMissingCriteriaResponses(List<CriteriaResponse> criteriaResponsesFromEntity, List<CriteriaResponse> criteriaResponsesFromDB, Long applicationId) {
Set<Long> existingCriteriaIds = criteriaResponsesFromEntity.stream()
.map(CriteriaResponse::getId)
.collect(Collectors.toSet());
@@ -139,6 +150,7 @@ public class ApplicationEvaluationDao {
}
}
}
private List<CriteriaMappedField> getMappedFieldsForCriteria(Long evaluationCriteriaId, Long applicationId) {
List<CriteriaFormFieldEntity> criteriaFormFields = criteriaFormFieldRepository
.findByEvaluationCriteriaIdAndIsDeletedFalse(evaluationCriteriaId);
@@ -190,7 +202,8 @@ public class ApplicationEvaluationDao {
private void setChecklistResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List<CallTargetAudienceChecklistEntity> checklistEntities) {
List<ChecklistResponse> checklistResponsesFromEntity = entity.getChecklist() != null
? Utils.convertJsonToList(entity.getChecklist(), new TypeReference<List<ChecklistResponse>>() {})
? Utils.convertJsonToList(entity.getChecklist(), new TypeReference<List<ChecklistResponse>>() {
})
: new ArrayList<>();
List<ChecklistResponse> checklistResponsesFromDB = getChecklistResponse(entity.getApplicationId());
@@ -224,7 +237,8 @@ public class ApplicationEvaluationDao {
private void setFieldResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List<ApplicationFormEntity> applicationFormEntities) {
List<FieldResponse> fieldResponsesFromEntity = entity.getFile() != null
? Utils.convertJsonToList(entity.getFile(), new TypeReference<List<FieldResponse>>() {})
? Utils.convertJsonToList(entity.getFile(), new TypeReference<List<FieldResponse>>() {
})
: new ArrayList<>();
List<FieldResponse> fieldResponsesFromDB = getFieldResponses(entity.getApplicationId());
addMissingFieldResponses(fieldResponsesFromEntity, fieldResponsesFromDB);
@@ -305,46 +319,67 @@ public class ApplicationEvaluationDao {
}
private void setApplicationDetails(ApplicationEvaluationResponse response, ApplicationEvaluationEntity entity) {
ApplicationEntity application = applicationService.validateApplication(entity.getApplicationId() != null ? entity.getApplicationId(): null);
ApplicationEntity application = applicationService.validateApplication(entity.getApplicationId() != null ? entity.getApplicationId() : null);
UserEntity user = userService.validateUser(application.getUserId());
CallEntity call = callRepository.findCallEntityByApplicationId(entity.getApplicationId());
String firstName = user.getFirstName() != null ? user.getFirstName() : "";
String lastName = user.getLastName() != null ? user.getLastName() : "";
String beneficiary = String.join(" ", firstName, lastName).trim();
response.setApplicationStatus(ApplicationStatusTypeEnum.valueOf(application.getStatus()));
response.setBeneficiary(beneficiary);
response.setMinScore(call.getThreshold());
response.setCallName(application.getCall().getName());
response.setMinScore(call.getThreshold()!=null?call.getThreshold():null);
response.setCallName(application.getCall().getName()!=null?application.getCall().getName():null);
response.setProtocolNumber(application.getProtocol() != null ? application.getProtocol().getProtocolNumber() : null);
response.setSubmissionDate(application.getSubmissionDate()!= null ? application.getSubmissionDate(): null);
response.setEvaluationDate(application.getSubmissionDate()!= null ? application.getSubmissionDate().plusDays(30):null);
response.setSubmissionDate(application.getSubmissionDate() != null ? application.getSubmissionDate() : null);
response.setEvaluationDate(application.getSubmissionDate() != null ? application.getSubmissionDate().plusDays(30) : null);
}
public ApplicationEvaluationResponse createOrUpdateApplicationEvaluation(UserEntity user, ApplicationEvaluationRequest req,Long applicationId) {
Optional<ApplicationEvaluationEntity> existingEntityOptional = applicationEvaluationRepository.findByApplicationIdAndIsDeletedFalse(applicationId);
public ApplicationEvaluationResponse createOrUpdateApplicationEvaluation(UserEntity user, ApplicationEvaluationRequest req, Long assignedApplciationId) {
Optional<ApplicationEvaluationEntity> existingEntityOptional = applicationEvaluationRepository.findByAssignedApplicationsEntity_IdAndIsDeletedFalse(assignedApplciationId);
ApplicationEvaluationEntity entity;
if (existingEntityOptional.isPresent()) {
entity = existingEntityOptional.get();
entity.setCriteria(Utils.convertObjectToJson(processCriteria(entity, req)));
entity.setChecklist(Utils.convertObjectToJson(processChecklist(entity, req)));
entity.setFile(Utils.convertObjectToJson(processField(entity, req)));
entity.setCriteria(Utils.convertObjectToJson(filterNonNullCriteria(processCriteria(entity, req))));
entity.setChecklist(Utils.convertObjectToJson(filterNonNullChecklist(processChecklist(entity, req))));
entity.setFile(Utils.convertObjectToJson(filterNonNullFields(processField(entity, req))));
entity.setIsDeleted(false);
setIfUpdated(entity::getNote, entity::setNote, req.getNote());
} else {
entity = convertToEntity(user, req,applicationId);
entity = convertToEntity(user, req, assignedApplciationId);
}
ApplicationEvaluationEntity savedEntity = applicationEvaluationRepository.save(entity);
return convertToResponse(savedEntity);
}
private List<ChecklistRequest> filterNonNullChecklist(List<ChecklistRequest> checklistRequests) {
return checklistRequests.stream()
.filter(request -> request.getValid() != null)
.collect(Collectors.toList());
}
private List<CriteriaRequest> filterNonNullCriteria(List<CriteriaRequest> criteriaRequests) {
return criteriaRequests.stream()
.filter(request -> request.getScore() != null && request.getValid() != null)
.collect(Collectors.toList());
}
private List<FieldRequest> filterNonNullFields(List<FieldRequest> fieldRequests) {
return fieldRequests.stream()
.filter(request -> request.getValid() != null)
.collect(Collectors.toList());
}
private List<CriteriaRequest> processCriteria(ApplicationEvaluationEntity entity, ApplicationEvaluationRequest req) {
List<CriteriaResponse> existingCriteriaList = entity.getCriteria() != null ?
Utils.convertJsonToList(entity.getCriteria(), new TypeReference<List<CriteriaResponse>>() {}) : new ArrayList<>();
List<CriteriaResponse> existingCriteriaList = entity.getCriteria() != null
? Utils.convertJsonToList(entity.getCriteria(), new TypeReference<List<CriteriaResponse>>() {
})
: new ArrayList<>();
Map<Long, CriteriaResponse> existingCriteriaMap = existingCriteriaList.stream()
.collect(Collectors.toMap(CriteriaResponse::getId, criteria -> criteria));
@@ -358,8 +393,8 @@ public class ApplicationEvaluationDao {
CriteriaResponse existingCriteria = existingCriteriaMap.get(incoming.getId());
if (existingCriteria != null) {
request.setScore(incoming.getScore() != null ? incoming.getScore() : existingCriteria.getScore());
request.setValid(incoming.getValid() != null ? incoming.getValid() : existingCriteria.getValid());
request.setScore(incoming.getScore() != null ? incoming.getScore() : null);
request.setValid(incoming.getValid() != null ? incoming.getValid() : null);
}
return request;
})
@@ -384,8 +419,10 @@ public class ApplicationEvaluationDao {
}
private List<ChecklistRequest> processChecklist(ApplicationEvaluationEntity entity, ApplicationEvaluationRequest req) {
List<ChecklistResponse> existingChecklistList = entity.getChecklist() != null ?
Utils.convertJsonToList(entity.getChecklist(), new TypeReference<List<ChecklistResponse>>() {}) : new ArrayList<>();
List<ChecklistResponse> existingChecklistList = entity.getChecklist() != null
? Utils.convertJsonToList(entity.getChecklist(), new TypeReference<List<ChecklistResponse>>() {
})
: new ArrayList<>();
Map<Long, ChecklistResponse> existingChecklistMap = existingChecklistList.stream()
.collect(Collectors.toMap(ChecklistResponse::getId, checklist -> checklist));
@@ -397,8 +434,8 @@ public class ApplicationEvaluationDao {
request.setValid(incoming.getValid());
ChecklistResponse existingChecklist = existingChecklistMap.get(incoming.getId());
if (existingChecklist != null) {
request.setValid(incoming.getValid() != null ? incoming.getValid() : existingChecklist.getValid());
if (existingChecklist != null && incoming.getValid() == null) {
request.setValid(null);
}
return request;
})
@@ -412,7 +449,7 @@ public class ApplicationEvaluationDao {
.map(existing -> {
ChecklistRequest request = new ChecklistRequest();
request.setId(existing.getId());
request.setValid(existing.getValid());
request.setValid(existing.getValid() != null ? existing.getValid() : null);
return request;
})
.toList();
@@ -422,8 +459,10 @@ public class ApplicationEvaluationDao {
}
private List<FieldRequest> processField(ApplicationEvaluationEntity entity, ApplicationEvaluationRequest req) {
List<FieldResponse> existingFieldList = entity.getFile() != null ?
Utils.convertJsonToList(entity.getFile(), new TypeReference<List<FieldResponse>>() {}) : new ArrayList<>();
List<FieldResponse> existingFieldList = entity.getFile() != null
? Utils.convertJsonToList(entity.getFile(), new TypeReference<List<FieldResponse>>() {
})
: new ArrayList<>();
Map<String, FieldResponse> existingFieldMap = existingFieldList.stream()
.collect(Collectors.toMap(FieldResponse::getId, field -> field));
@@ -436,7 +475,7 @@ public class ApplicationEvaluationDao {
FieldResponse existingField = existingFieldMap.get(incoming.getId());
if (existingField != null) {
request.setValid(incoming.getValid() != null ? incoming.getValid() : existingField.getValid());
request.setValid(incoming.getValid() != null ? incoming.getValid() : null);
}
return request;
})
@@ -460,7 +499,7 @@ public class ApplicationEvaluationDao {
}
public ApplicationEvaluationEntity validateApplicationEvaluation(Long id) {
Optional<ApplicationEvaluationEntity> entityOptional = applicationEvaluationRepository.findById(id);
Optional<ApplicationEvaluationEntity> entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(id);
if (entityOptional.isEmpty()) {
throw new ResourceNotFoundException(Status.NOT_FOUND,
Translator.toLocale(GepafinConstant.APPLICATION_EVALUATION_NOT_FOUND, id));
@@ -469,63 +508,68 @@ public class ApplicationEvaluationDao {
}
public ApplicationEvaluationResponse getApplicationEvaluationByApplicationId(UserEntity user, Long applicationId, Long assignedApplicationId) {
applicationService.validateApplication(applicationId);
Optional<ApplicationEvaluationEntity> entityOptional;
if (applicationId != null && assignedApplicationId != null) {
entityOptional = applicationEvaluationRepository.findByApplicationIdAndAssignedApplicationsEntity_IdAndIsDeletedFalse(applicationId, assignedApplicationId);
} else if (applicationId != null) {
entityOptional = applicationEvaluationRepository.findByApplicationIdAndIsDeletedFalse(applicationId);
} else if (assignedApplicationId != null) {
entityOptional = applicationEvaluationRepository.findByAssignedApplicationsEntity_IdAndIsDeletedFalse(assignedApplicationId);
} else {
entityOptional = applicationEvaluationRepository.findFirstByIsDeletedFalseOrderByCreatedDateDesc();
public List<ApplicationEvaluationResponse> getApplicationEvaluationByApplicationId(UserEntity user, Long applicationId, Long assignedApplicationId) {
if (applicationId != null && assignedApplicationId == null) {
applicationService.validateApplication(applicationId);
List<ApplicationEvaluationEntity> evaluationEntities = applicationEvaluationRepository.findByApplicationIdAndIsDeletedFalse(applicationId);
return evaluationEntities.stream()
.map(this::convertToResponse)
.collect(Collectors.toList());
}
return entityOptional.map(this::convertToResponse)
.orElseGet(() -> {
return getEvaluationResponseByApplicationid(user, applicationId, assignedApplicationId);
});
Optional<ApplicationEvaluationEntity> entityOptional =
(applicationId != null && assignedApplicationId != null)
? applicationEvaluationRepository.findByApplicationIdAndAssignedApplicationsEntity_IdAndIsDeletedFalse(applicationId, assignedApplicationId)
: applicationEvaluationRepository.findByAssignedApplicationsEntity_IdAndIsDeletedFalse(assignedApplicationId);
return entityOptional
.map(entity -> Collections.singletonList(convertToResponse(entity)))
.orElseGet(() -> Collections.singletonList(getEvaluationResponseByApplicationid(user, applicationId, assignedApplicationId)));
}
public ApplicationEvaluationResponse getEvaluationResponseByApplicationid(UserEntity user, Long applicationId,Long assignedApplicationId) {
public ApplicationEvaluationResponse getEvaluationResponseByApplicationid(UserEntity user, Long applicationId, Long assignedApplicationId) {
ApplicationEvaluationEntity entity = new ApplicationEvaluationEntity();
ApplicationEvaluationResponse response = new ApplicationEvaluationResponse();
CallEntity call=null;
AssignedApplicationsEntity assignedApplications=null;
if (applicationId != null) {
CallEntity call = null;
ApplicationEntity application=null;
AssignedApplicationsEntity assignedApplications = null;
if (applicationId != null && assignedApplicationId==null) {
application = applicationService.validateApplication(applicationId);
call = callRepository.findCallEntityByApplicationId(applicationId);
assignedApplications = assignedApplicationsRepository.findByApplicationIdAndIsDeletedFalse(applicationId).orElse(null);
} else if (assignedApplicationId != null) {
call = callRepository.findCallEntityByApplicationId(assignedApplicationId);
assignedApplications = assignedApplicationsRepository.findByIdAndIsDeletedFalse(assignedApplicationId).orElseThrow(()->
new ResourceNotFoundException(Status.NOT_FOUND,Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_NOT_FOUND_MSG)));
}
else {
assignedApplications = assignedApplicationsRepository.findByIdAndIsDeletedFalse(assignedApplicationId).orElseThrow(() ->
new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_NOT_FOUND_MSG)));
application = applicationService.validateApplication(assignedApplications.getApplication().getId());
call = callRepository.findCallEntityByApplicationId(application.getId());
} else {
call = callRepository.findCallEntityByApplicationId(applicationId);
assignedApplications = assignedApplicationsRepository.findByApplicationIdAndIsDeletedFalse(applicationId).orElse(null);}
assignedApplications = assignedApplicationsRepository.findByApplicationIdAndIsDeletedFalse(applicationId).orElse(null);
}
List<EvaluationCriteriaEntity> evaluationCriterias = evaluationCriteriaRepository.findByCallId(call.getId());
List<CallTargetAudienceChecklistEntity> checklistEntities = callTargetAudienceChecklistRepository.findByCallId(call.getId());
List<ApplicationFormEntity> applicationFormEntities = applicationFormRepository.findByApplicationId(applicationId);
response.setApplicationId(applicationId);
response.setApplicationId(application.getId());
response.setAssignedApplicationId(assignedApplications.getId());
response.setNote(null);
response.setApplicationStatus(ApplicationStatusTypeEnum.valueOf(application.getStatus()));
response.setStatus(ApplicationEvaluationStatusTypeEnum.valueOf(ApplicationEvaluationStatusTypeEnum.OPEN.getValue()));
response.setMinScore(call.getThreshold());
setCriteriaResponses(entity, applicationId, response, evaluationCriterias);
setChecklistResponses(entity, applicationId, response, checklistEntities);
setFileResponses(entity, applicationId, response, applicationFormEntities);
response.setMinScore(call.getThreshold()!=null?call.getThreshold():null);
setCriteriaResponses(entity, application.getId(), response, evaluationCriterias);
setChecklistResponses(entity, application.getId(), response, checklistEntities);
setFileResponses(entity, application.getId(), response, applicationFormEntities);
setApplicationDetails(response, applicationId, user);
setApplicationDetails(response, application.getId(), user);
return response;
}
private void setCriteriaResponses(ApplicationEvaluationEntity entity, Long applicationId, ApplicationEvaluationResponse response, List<EvaluationCriteriaEntity> evaluationCriterias) {
List<CriteriaResponse> criteriaResponses = entity.getCriteria() != null
? Utils.convertJsonToList(entity.getCriteria(), new TypeReference<List<CriteriaResponse>>() {})
? Utils.convertJsonToList(entity.getCriteria(), new TypeReference<List<CriteriaResponse>>() {
})
: getCriteriaResponse(applicationId);
criteriaResponses.forEach(criteriaResponse -> {
@@ -587,7 +631,8 @@ public class ApplicationEvaluationDao {
private void setChecklistResponses(ApplicationEvaluationEntity entity, Long applicationId, ApplicationEvaluationResponse response, List<CallTargetAudienceChecklistEntity> checklistEntities) {
List<ChecklistResponse> checklistResponses = entity.getChecklist() != null
? Utils.convertJsonToList(entity.getChecklist(), new TypeReference<List<ChecklistResponse>>() {})
? Utils.convertJsonToList(entity.getChecklist(), new TypeReference<List<ChecklistResponse>>() {
})
: getChecklistResponse(applicationId);
checklistResponses.forEach(checklistResponse -> {
@@ -603,9 +648,11 @@ public class ApplicationEvaluationDao {
response.setChecklist(checklistResponses);
}
private void setFileResponses(ApplicationEvaluationEntity entity, Long applicationId, ApplicationEvaluationResponse response, List<ApplicationFormEntity> applicationFormEntities) {
List<FieldResponse> fieldResponses = entity.getFile() != null
? Utils.convertJsonToList(entity.getFile(), new TypeReference<List<FieldResponse>>() {})
? Utils.convertJsonToList(entity.getFile(), new TypeReference<List<FieldResponse>>() {
})
: getFieldResponses(applicationId);
Set<String> processedFieldIds = new HashSet<>();
@@ -678,10 +725,10 @@ public class ApplicationEvaluationDao {
String beneficiary = String.join(" ", firstName, lastName).trim();
response.setBeneficiary(beneficiary);
response.setCallName(application.getCall().getName());
response.setCallName(application.getCall().getName()!=null?application.getCall().getName():null);
response.setProtocolNumber(application.getProtocol() != null ? application.getProtocol().getProtocolNumber() : null);
response.setSubmissionDate(application.getSubmissionDate()!= null ? application.getSubmissionDate(): null);
response.setEvaluationDate(application.getSubmissionDate()!= null ? application.getSubmissionDate().plusDays(30):null);
response.setSubmissionDate(application.getSubmissionDate() != null ? application.getSubmissionDate() : null);
response.setEvaluationDate(application.getSubmissionDate() != null ? application.getSubmissionDate().plusDays(30) : null);
}
@@ -751,7 +798,8 @@ public class ApplicationEvaluationDao {
return criteriaResponses;
}
List<ChecklistResponse> getChecklistResponse(Long applicationId){ CallEntity call = callRepository.findCallEntityByApplicationId(applicationId);
List<ChecklistResponse> getChecklistResponse(Long applicationId) {
CallEntity call = callRepository.findCallEntityByApplicationId(applicationId);
List<CallTargetAudienceChecklistEntity> checklistEntities = callTargetAudienceChecklistRepository.findByCallId(call.getId());
List<ChecklistResponse> checklistResponses = checklistEntities.stream().map(checklist -> {
ChecklistResponse response = new ChecklistResponse();
@@ -764,6 +812,7 @@ public class ApplicationEvaluationDao {
return checklistResponses;
}
public List<FieldResponse> getFieldResponses(Long applicationId) {
List<ApplicationFormEntity> applicationFormEntities = applicationFormRepository.findByApplicationId(applicationId);
List<FieldResponse> fieldResponses = new ArrayList<>();
@@ -832,21 +881,34 @@ public class ApplicationEvaluationDao {
}
public void deleteById(Long id) {
ApplicationEvaluationEntity applicationEvaluationEntity= validateApplicationEvaluation(id);
ApplicationEvaluationEntity applicationEvaluationEntity = validateApplicationEvaluation(id);
applicationEvaluationEntity.setIsDeleted(true);
applicationEvaluationEntity=saveApplicationEvaluationEntity(applicationEvaluationEntity);
applicationEvaluationEntity = saveApplicationEvaluationEntity(applicationEvaluationEntity);
}
public ApplicationEvaluationEntity saveApplicationEvaluationEntity(ApplicationEvaluationEntity applicationEvaluationEntityData){
public ApplicationEvaluationEntity saveApplicationEvaluationEntity(ApplicationEvaluationEntity applicationEvaluationEntityData) {
return applicationEvaluationRepository.save(applicationEvaluationEntityData);
}
public ApplicationEvaluationResponse updateApplicationEvaluationStatus(Long applicationId, ApplicationEvaluationStatusTypeEnum status) {
ApplicationEvaluationEntity existingEntity = validateApplicationEvaluation(applicationId);
if (status != null && !status.getValue().equals(existingEntity.getStatus())) {
existingEntity.setStatus(status.getValue());
}
ApplicationEvaluationEntity updatedEntity = applicationEvaluationRepository.save(existingEntity);
return convertToResponse(updatedEntity);
}
public ApplicationEvaluationResponse updateApplicationEvaluationStatus(ApplicationEntity application, AssignedApplicationsEntity assignedApplicationsEntity) {
Optional<ApplicationEvaluationEntity> existingEntityOptional = applicationEvaluationRepository.findByAssignedApplicationsEntity_IdAndIsDeletedFalse(assignedApplicationsEntity.getId());
ApplicationEvaluationEntity entity = null;
if (existingEntityOptional.isPresent()) {
ApplicationEvaluationEntity existingEntity = existingEntityOptional.get();
if (Boolean.TRUE.equals(
application.getStatus().equals(ApplicationStatusTypeEnum.APPROVED.getValue()) ||
application.getStatus().equals(ApplicationStatusTypeEnum.REJECTED.getValue())
)) {
existingEntity.setStatus(ApplicationEvaluationStatusTypeEnum.CLOSE.getValue());
assignedApplicationsEntity.setStatus(AssignedApplicationEnum.CLOSE.getValue());
} entity = applicationEvaluationRepository.save(existingEntity);
assignedApplicationsEntity=assignedApplicationsRepository.save(assignedApplicationsEntity);
return convertToResponse(entity);}return null;
}
}

View File

@@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.model.response;
import lombok.Data;
import net.gepafin.tendermanagement.enums.ApplicationEvaluationStatusTypeEnum;
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
import java.time.LocalDateTime;
import java.util.List;
@@ -12,6 +13,7 @@ public class ApplicationEvaluationResponse {
private Long id;
private Long applicationId;
private ApplicationStatusTypeEnum applicationStatus;
private Long assignedApplicationId;
private String note;
private ApplicationEvaluationStatusTypeEnum status;

View File

@@ -6,13 +6,14 @@ import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
@Repository
public interface ApplicationEvaluationRepository extends JpaRepository<ApplicationEvaluationEntity, Long> {
Optional<ApplicationEvaluationEntity> findByApplicationIdAndIsDeletedFalse(Long applicationId);
List<ApplicationEvaluationEntity> findByApplicationIdAndIsDeletedFalse(Long applicationId);
Optional<ApplicationEvaluationEntity> findByIdAndIsDeletedFalse(Long id);
Optional<ApplicationEvaluationEntity> findByAssignedApplicationsEntity_IdAndIsDeletedFalse(Long assignedApplicationId);
Optional<ApplicationEvaluationEntity> findByApplicationIdAndAssignedApplicationsEntity_IdAndIsDeletedFalse(Long applicationId, Long assignedApplicationId);

View File

@@ -5,17 +5,23 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
@Repository
public interface AssignedApplicationsRepository extends JpaRepository<AssignedApplicationsEntity,Long>, JpaSpecificationExecutor<AssignedApplicationsEntity>{
Optional<AssignedApplicationsEntity> findByApplicationIdAndIsDeletedFalse(Long applicationId);
Optional<AssignedApplicationsEntity> findByIdAndIsDeletedFalse(Long id);
@Query("SELECT aa FROM AssignedApplicationsEntity aa WHERE aa.isDeleted = false " +
"AND (:applicationId IS NULL OR aa.application.id = :applicationId) " +
"AND (:id IS NULL OR aa.id = :id)")
Optional<AssignedApplicationsEntity> findByApplicationIdOrId(@Param("applicationId") Long applicationId,
@Param("id") Long id);
@Query("SELECT aa FROM AssignedApplicationsEntity aa WHERE aa.isDeleted = false AND aa.application.id = :applicationId")
List<AssignedApplicationsEntity> findAllByApplicationId(@Param("applicationId") Long applicationId);
@Query("SELECT aa FROM AssignedApplicationsEntity aa WHERE aa.isDeleted = false AND aa.application.id = :applicationId AND aa.id = :assignedApplicationId")
Optional<AssignedApplicationsEntity> findByApplicationIdAndAssignedApplicationId(
@Param("applicationId") Long applicationId,
@Param("assignedApplicationId") Long assignedApplicationId);
@Query("SELECT aa FROM AssignedApplicationsEntity aa WHERE aa.isDeleted = false AND aa.id = :assignedApplicationId")
Optional<AssignedApplicationsEntity> findByAssignedApplicationId(@Param("assignedApplicationId") Long assignedApplicationId);
}

View File

@@ -13,8 +13,8 @@ public interface ApplicationEvaluationService {
ApplicationEvaluationResponse createOrUpdateApplicationEvaluation(HttpServletRequest request, ApplicationEvaluationRequest applicationEvaluationRequest,Long assignedApplicationsId);
void deleteApplicationEvaluation(HttpServletRequest request,Long id);
ApplicationEvaluationResponse getApplicationEvaluationByApplicationId(HttpServletRequest request,Long applicationId,Long assignedApplicationId);
ApplicationEvaluationResponse updateApplicationEvaluationStatus(HttpServletRequest request, Long applicationEvaluationId, ApplicationEvaluationStatusTypeEnum status);
List<ApplicationEvaluationResponse> getApplicationEvaluationByApplicationId(HttpServletRequest request,Long applicationId,Long assignedApplicationId);
ApplicationEvaluationResponse updateApplicationEvaluationStatus(HttpServletRequest request, Long assignedApplicationId);
ApplicationEvaluationEntity validateApplicationEvaluation(Long applicationEvaluationId);

View File

@@ -22,7 +22,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
@Service
@@ -41,30 +42,61 @@ public class ApplicationEvaluationServiceImpl implements ApplicationEvaluationSe
AssignedApplicationsEntity assignedApplication = assignedApplicationsRepository.findByIdAndIsDeletedFalse(assignedApplicationsId).orElseThrow(()->
new ResourceNotFoundException(Status.NOT_FOUND,Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_NOT_FOUND_MSG)));
UserEntity user=validator.validatePreInstructor(request,assignedApplication.getUserId());
return applicationEvaluationDao.createOrUpdateApplicationEvaluation(user,req,assignedApplication.getApplication().getId());
return applicationEvaluationDao.createOrUpdateApplicationEvaluation(user,req,assignedApplication.getId());
}
@Override
@Transactional(readOnly = true)
public ApplicationEvaluationResponse getApplicationEvaluationByApplicationId(
public List<ApplicationEvaluationResponse> getApplicationEvaluationByApplicationId(
HttpServletRequest request, Long applicationId, Long assignedApplicationId) {
if (applicationId == null && assignedApplicationId == null) {
throw new CustomValidationException(
Status.BAD_REQUEST,
Translator.toLocale(GepafinConstant.EITHER_APPLICATION_OR_ASSIGNED_APPLICATION_ID_REQUIRED_MSG)
);
}
AssignedApplicationsEntity assignedApplications;
Optional<AssignedApplicationsEntity> assignedApplicationsOptional =
assignedApplicationsRepository.findByApplicationIdOrId(applicationId, assignedApplicationId);
if (applicationId != null && assignedApplicationId != null) {
assignedApplications = assignedApplicationsRepository
.findByApplicationIdAndAssignedApplicationId(applicationId, assignedApplicationId)
.orElseThrow(() -> new CustomValidationException(
Status.BAD_REQUEST,
Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_NOT_FOUND_WITH_ID_MSG)
));
} else if (assignedApplicationId != null) {
assignedApplications = assignedApplicationsRepository
.findByAssignedApplicationId(assignedApplicationId)
.orElseThrow(() -> new CustomValidationException(
Status.BAD_REQUEST,
Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_NOT_FOUND_WITH_ID_MSG)
));
} else {
List<AssignedApplicationsEntity> assignedApplicationsList = assignedApplicationsRepository
.findAllByApplicationId(applicationId);
AssignedApplicationsEntity assignedApplications = assignedApplicationsOptional
.orElseThrow(() -> new CustomValidationException(
if (assignedApplicationsList.isEmpty()) {
throw new CustomValidationException(
Status.BAD_REQUEST,
Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_NOT_FOUND_WITH_ID_MSG)
));
);
}
assignedApplications = assignedApplicationsList.get(0);
}
UserEntity user = validator.validatePreInstructor(request, assignedApplications.getUserId());
return applicationEvaluationDao.getApplicationEvaluationByApplicationId(
user,
assignedApplications.getApplication().getId(),
assignedApplications.getId()
);
if (applicationId != null && assignedApplicationId == null) {
return applicationEvaluationDao.getApplicationEvaluationByApplicationId(user, assignedApplications.getApplication().getId(), null);
}
if (applicationId != null && assignedApplicationId != null) {
return applicationEvaluationDao.getApplicationEvaluationByApplicationId(user, assignedApplications.getApplication().getId(), assignedApplications.getId());
}
return applicationEvaluationDao.getApplicationEvaluationByApplicationId(user, null, assignedApplications.getId());
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteApplicationEvaluation(HttpServletRequest request,Long id) {
@@ -74,13 +106,11 @@ public class ApplicationEvaluationServiceImpl implements ApplicationEvaluationSe
@Override
@Transactional(rollbackFor = Exception.class)
public ApplicationEvaluationResponse updateApplicationEvaluationStatus(HttpServletRequest request, Long applicationId, ApplicationEvaluationStatusTypeEnum status) {
AssignedApplicationsEntity assignedApplications = assignedApplicationsRepository.findByApplicationIdAndIsDeletedFalse(applicationId).orElse(null);
if(assignedApplications==null){
throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_NOT_FOUND_WITH_ID_MSG));
}
validator.validatePreInstructor(request, assignedApplications.getUserId());
return applicationEvaluationDao.updateApplicationEvaluationStatus(applicationId, status);
public ApplicationEvaluationResponse updateApplicationEvaluationStatus(HttpServletRequest request, Long assignedApplicationId) {
AssignedApplicationsEntity assignedApplication = assignedApplicationsRepository.findByIdAndIsDeletedFalse(assignedApplicationId).orElseThrow(()->
new ResourceNotFoundException(Status.NOT_FOUND,Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_NOT_FOUND_MSG)));
validator.validatePreInstructor(request,assignedApplication.getUserId());
return applicationEvaluationDao.updateApplicationEvaluationStatus(assignedApplication.getApplication(),assignedApplication);
}

View File

@@ -38,18 +38,20 @@ public interface ApplicationEvaluationApi {
@Parameter(required = true) @PathVariable("assignedApplicationsId") Long assignedApplicationsId,
@Parameter( required = true) @Valid @RequestBody ApplicationEvaluationRequest evaluationRequest);
@Operation(summary = "API to get ApplicationEvaluation data for evaluation process",
@Operation(
summary = "API to get ApplicationEvaluation data for evaluation process",
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) }))
@ExampleObject(value = ErrorConstants.NOTFOUND_ERROR_EXAMPLE) })),
@ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = {
@ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) }))
})
@GetMapping(value = "/application", produces = MediaType.APPLICATION_JSON_VALUE)
ResponseEntity<Response<ApplicationEvaluationResponse>> getApplicationEvaluationByApplicationId(
ResponseEntity<Response<List<ApplicationEvaluationResponse>>> getApplicationEvaluationByApplicationId(
HttpServletRequest request,
@Parameter(description = "Application ID", required = false) @RequestParam(value = "applicationId", required = false) Long applicationId,
@Parameter(description = "Assigned Application ID", required = false) @RequestParam(value = "assignedApplicationId", required = false) Long assignedApplicationId);
@Parameter(required = false) @RequestParam(value = "applicationId", required = false) Long applicationId,
@Parameter(required = false) @RequestParam(value = "assignedApplicationId", required = false) Long assignedApplicationId);
@Operation(summary = "API to delete ApplicationEvaluation",
responses = {
@@ -59,7 +61,7 @@ public interface ApplicationEvaluationApi {
})
@DeleteMapping(value = "/{id}")
ResponseEntity<Response<Void>> deleteApplicationEvaluation(HttpServletRequest request,
@Parameter(description = "The evaluation ID", required = true) @PathVariable("id") Long id);
@Parameter( required = true) @PathVariable("id") Long id);
@Operation(summary = "Api to update application evaluation status",
responses = {
@@ -70,9 +72,8 @@ public interface ApplicationEvaluationApi {
@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) })) })
@PutMapping(value = "/{applicationId}/status", produces = MediaType.APPLICATION_JSON_VALUE)
@PutMapping(value = "/{assignedApplicationId}/status", produces = MediaType.APPLICATION_JSON_VALUE)
ResponseEntity<Response<ApplicationEvaluationResponse>> updateApplicationEvaluationStatus(HttpServletRequest request,
@Parameter( required = true) @PathVariable("applicationId") Long applicationId,
@Parameter(description = "status", required = true)@RequestParam(value = "status", required = true) ApplicationEvaluationStatusTypeEnum status);
@Parameter( required = true) @PathVariable("assignedApplicationId") Long assignedApplicationId);
}

View File

@@ -37,15 +37,17 @@ public class ApplicationEvaluationApiController implements ApplicationEvaluation
}
@Override
public ResponseEntity<Response<ApplicationEvaluationResponse>> getApplicationEvaluationByApplicationId(
public ResponseEntity<Response<List<ApplicationEvaluationResponse>>> getApplicationEvaluationByApplicationId(
HttpServletRequest request, Long applicationId, Long assignedApplicationId) {
ApplicationEvaluationResponse response = null;
response = applicationEvaluationService.getApplicationEvaluationByApplicationId(request, applicationId,assignedApplicationId);
List<ApplicationEvaluationResponse> responseList =
applicationEvaluationService.getApplicationEvaluationByApplicationId(request, applicationId, assignedApplicationId);
return ResponseEntity.status(HttpStatus.OK)
.body(new Response<>(response, Status.SUCCESS, Translator.toLocale(GepafinConstant.EVALUATION_FETCHED_SUCCESSFULLY)));
.body(new Response<>(responseList, Status.SUCCESS, Translator.toLocale(GepafinConstant.EVALUATION_FETCHED_SUCCESSFULLY)));
}
@Override
public ResponseEntity<Response<Void>> deleteApplicationEvaluation(HttpServletRequest request,
Long id) {
@@ -55,9 +57,8 @@ public class ApplicationEvaluationApiController implements ApplicationEvaluation
}
@Override
public ResponseEntity<Response<ApplicationEvaluationResponse>> updateApplicationEvaluationStatus(HttpServletRequest request, Long applicationId,
ApplicationEvaluationStatusTypeEnum status) {
ApplicationEvaluationResponse applicationEvaluationResponse = applicationEvaluationService.updateApplicationEvaluationStatus(request, applicationId, status);
public ResponseEntity<Response<ApplicationEvaluationResponse>> updateApplicationEvaluationStatus(HttpServletRequest request, Long assignedApplicationId) {
ApplicationEvaluationResponse applicationEvaluationResponse = applicationEvaluationService.updateApplicationEvaluationStatus(request, assignedApplicationId);
return ResponseEntity.status(HttpStatus.OK)
.body(new Response<>(applicationEvaluationResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_EVALUATION_STATUS_UPDATED_SUCCESSFULLY)));
}