diff --git a/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java b/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java index cc281df7..f9a3476f 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java @@ -8,7 +8,6 @@ import net.gepafin.tendermanagement.entities.ApplicationEntity; import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity; import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity; import net.gepafin.tendermanagement.entities.CompanyEntity; -import net.gepafin.tendermanagement.entities.FaqEntity; import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; @@ -80,8 +79,13 @@ public class AssignedApplicationsDao { log.info("Assigning application to pre-Instructor with details: {}", applicationId, userId); AssignedApplicationsEntity assignedApplications = assignedApplicationsRepository.findByApplicationIdAndIsDeletedFalse(applicationId).orElse(null); - if (assignedApplications != null) { + if (assignedApplications != null && assignedApplications.getUserId().equals(userId)) { throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.APPLICATION_ALREADY_ASSIGNED)); + } else if(assignedApplications != null) { + assignedApplications = reassignApplication(userId, assignedByUser, assignedApplications); + AssignedApplicationsResponse assignApplicationToInstructorResponse = convertEntityToResponse(assignedApplications); + log.info("Application re-assigned succesfully {}", assignApplicationToInstructorResponse); + return assignApplicationToInstructorResponse; } ApplicationEntity application = applicationService.validateApplication(applicationId); @@ -107,6 +111,30 @@ public class AssignedApplicationsDao { return assignApplicationToInstructorResponse; } + private AssignedApplicationsEntity reassignApplication(Long userId, UserEntity assignedByUser, + AssignedApplicationsEntity assignedApplication) { + + AssignedApplicationsEntity oldAssignedApplicationEntity = Utils.getClonedEntityForData(assignedApplication); + + setIfUpdated(assignedApplication::getAssignedBy, assignedApplication::setAssignedBy, assignedByUser.getId()); + setIfUpdated(assignedApplication::getUserId, assignedApplication::setUserId, userId); + assignedApplication.setAssignedAt(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); + Optional entityOptional = applicationEvaluationRepository.findByAssignedApplicationsEntity_IdAndIsDeletedFalse(assignedApplication.getId()); + if(entityOptional.isPresent()) { + ApplicationEvaluationEntity oldApplicationEvaluationEntity = Utils.getClonedEntityForData(entityOptional.get()); + setIfUpdated(entityOptional.get()::getUserId, entityOptional.get()::setUserId, userId); + applicationEvaluationRepository.save(entityOptional.get()); + /** This code is responsible for adding a version history log for the "Create Application" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationEvaluationEntity).newData(entityOptional.get()).build()); + + }; + assignedApplication = assignedApplicationsRepository.save(assignedApplication); + /** This code is responsible for adding a version history log for the "Create Application" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldAssignedApplicationEntity).newData(assignedApplication).build()); + + return assignedApplication; + } + public AssignedApplicationsEntity createAssignmentEntity(ApplicationEntity application, Long userId, UserEntity assignedByUser, AssignedApplicationsRequest assignedApplicationsRequest) { AssignedApplicationsEntity assignApplication = new AssignedApplicationsEntity(); assignApplication.setApplication(application); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java index b9b4da07..1c7ed019 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java @@ -465,17 +465,27 @@ public class FormDao { String value = (String) formFieldMap.get(fieldId); FieldValidatorBean fieldValidatorBean = Utils.convertSourceObjectToDestinationObject(contentResponseBean.getValidators(), FieldValidatorBean.class); - validator - .isRequired(value,fieldValidatorBean.getIsRequired(),contentResponseBean.getLabel()); + String fieldValue = getFieldValue(contentResponseBean); + validator.isRequired(value, fieldValidatorBean.getIsRequired(), fieldValue); }); if (Boolean.TRUE.equals(isSendValidationError)) { validator.validate(); } - if (validator.hasErrors()) { - return false; - } - return true; + return !validator.hasErrors(); } + + private String getFieldValue(ContentResponseBean contentResponseBean) { + // Use Optional with pattern matching for type checks + return contentResponseBean.getSettings().stream().filter(setting -> "label".equals(setting.getName()) && setting.getValue() != null) + .map(setting -> { + if (setting.getValue() instanceof String value) { + return value.trim(); + } else { + return String.valueOf(setting.getValue()).trim(); + } + }).filter(value -> !value.isEmpty()).findFirst().orElse(contentResponseBean.getId()); + } + public String validateVatNumber(String value,String customRule,String fieldId){ String error=null;