Done the changes related to get Amendment API for the ticket GEPAFINBE-85
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package net.gepafin.tendermanagement.dao;
|
package net.gepafin.tendermanagement.dao;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import jakarta.persistence.criteria.Join;
|
import jakarta.persistence.criteria.Join;
|
||||||
@@ -194,7 +195,7 @@ public class ApplicationAmendmentRequestDao {
|
|||||||
ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity = createApplicationAmendmentRequestEntity(applicationAmendmentRequest, applicationEvaluationId);
|
ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity = createApplicationAmendmentRequestEntity(applicationAmendmentRequest, applicationEvaluationId);
|
||||||
ApplicationAmendmentRequestResponse applicationAmendmentRequestResponse = convertEntityToResponse(applicationAmendmentRequestEntity);
|
ApplicationAmendmentRequestResponse applicationAmendmentRequestResponse = convertEntityToResponse(applicationAmendmentRequestEntity);
|
||||||
log.info("Application submitted successfully for amendment", applicationAmendmentRequestResponse);
|
log.info("Application submitted successfully for amendment", applicationAmendmentRequestResponse);
|
||||||
if(Boolean.TRUE.equals(applicationAmendmentRequestResponse.isSendEmail())){
|
if(Boolean.TRUE.equals(applicationAmendmentRequestResponse.getIsSendEmail())){
|
||||||
emailNotificationDao.sendMailToNotifyBeneficiaryRegardingNewAmendment(applicationAmendmentRequestEntity);
|
emailNotificationDao.sendMailToNotifyBeneficiaryRegardingNewAmendment(applicationAmendmentRequestEntity);
|
||||||
}
|
}
|
||||||
return applicationAmendmentRequestResponse;
|
return applicationAmendmentRequestResponse;
|
||||||
@@ -216,11 +217,17 @@ public class ApplicationAmendmentRequestDao {
|
|||||||
applicationAmendmentRequestEntity.setApplicationId(applicationId);
|
applicationAmendmentRequestEntity.setApplicationId(applicationId);
|
||||||
|
|
||||||
if (applicationAmendmentRequest.getFormFields() != null) {
|
if (applicationAmendmentRequest.getFormFields() != null) {
|
||||||
String fieldIdsString = applicationAmendmentRequest.getFormFields().stream()
|
List<ApplicationFormFieldRequestBean> formFieldRequestBean = applicationAmendmentRequest.getFormFields().stream()
|
||||||
.filter(AmendmentFormFieldResponse::isSelected)
|
.filter(AmendmentFormFieldResponse::isSelected)
|
||||||
.map(AmendmentFormFieldResponse::getFieldId)
|
.map(amendmentFormFieldRequest->{
|
||||||
.collect(Collectors.joining(","));
|
ApplicationFormFieldRequestBean formField = new ApplicationFormFieldRequestBean();
|
||||||
applicationAmendmentRequestEntity.setFormFields(fieldIdsString);
|
formField.setFieldId(amendmentFormFieldRequest.getFieldId());
|
||||||
|
formField.setFieldValue(null);
|
||||||
|
return formField;
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
String formFieldsJson = Utils.convertObjectToJson(formFieldRequestBean);
|
||||||
|
applicationAmendmentRequestEntity.setFormFields(formFieldsJson);
|
||||||
}
|
}
|
||||||
UserEntity userEntity = userService.validateUser(applicationEvaluationEntity.getUserId());
|
UserEntity userEntity = userService.validateUser(applicationEvaluationEntity.getUserId());
|
||||||
Long protocolNumber = protocolDao.getProtocolNumber(userEntity.getHub());
|
Long protocolNumber = protocolDao.getProtocolNumber(userEntity.getHub());
|
||||||
@@ -269,8 +276,8 @@ public class ApplicationAmendmentRequestDao {
|
|||||||
LocalDateTime expirationDate = startDate.plus(expirationDays, ChronoUnit.DAYS);
|
LocalDateTime expirationDate = startDate.plus(expirationDays, ChronoUnit.DAYS);
|
||||||
applicationAmendmentRequestResponse.setExpirationDate(expirationDate);
|
applicationAmendmentRequestResponse.setExpirationDate(expirationDate);
|
||||||
|
|
||||||
applicationAmendmentRequestResponse.setSendEmail(applicationAmendmentRequestEntity.getIsEmail());
|
applicationAmendmentRequestResponse.setIsSendEmail(applicationAmendmentRequestEntity.getIsEmail());
|
||||||
applicationAmendmentRequestResponse.setSendNotification(applicationAmendmentRequestEntity.getIsNotification());
|
applicationAmendmentRequestResponse.setIsSendNotification(applicationAmendmentRequestEntity.getIsNotification());
|
||||||
String callName = application.getCall().getName();
|
String callName = application.getCall().getName();
|
||||||
Long protocolNumber = (applicationAmendmentRequestEntity.getProtocol() != null && applicationAmendmentRequestEntity.getProtocol().getProtocolNumber() != null)
|
Long protocolNumber = (applicationAmendmentRequestEntity.getProtocol() != null && applicationAmendmentRequestEntity.getProtocol().getProtocolNumber() != null)
|
||||||
? applicationAmendmentRequestEntity.getProtocol().getProtocolNumber()
|
? applicationAmendmentRequestEntity.getProtocol().getProtocolNumber()
|
||||||
@@ -287,48 +294,36 @@ public class ApplicationAmendmentRequestDao {
|
|||||||
applicationAmendmentRequestResponse.setProtocolNumber(protocolNumber);
|
applicationAmendmentRequestResponse.setProtocolNumber(protocolNumber);
|
||||||
applicationAmendmentRequestResponse.setBeneficiaryName(beneficiaryName);
|
applicationAmendmentRequestResponse.setBeneficiaryName(beneficiaryName);
|
||||||
|
|
||||||
String formFieldsString = applicationAmendmentRequestEntity.getFormFields();
|
String formFieldsJson = applicationAmendmentRequestEntity.getFormFields();
|
||||||
List<String> storedFieldIds = (formFieldsString != null) ? Arrays.asList(formFieldsString.split(",")) : Collections.emptyList();
|
List<AmendmentFormFieldResponse> formFields = Utils.convertJsonToList(
|
||||||
List<ApplicationFormEntity> applicationForms = applicationFormRepository.findByApplicationId(application.getId());
|
formFieldsJson, new TypeReference<List<AmendmentFormFieldResponse>>() {});
|
||||||
List<AmendmentFormFieldResponse> formFields = new ArrayList<>();
|
|
||||||
for (ApplicationFormEntity formEntity : applicationForms) {
|
|
||||||
String content = formEntity.getForm().getContent();
|
|
||||||
List<Map<String, Object>> result = filterByName(content, "fileupload");
|
|
||||||
|
|
||||||
List<AmendmentFormFieldResponse> matchingFields = getIdAndLabelFromResult(result).stream()
|
|
||||||
.filter(field -> storedFieldIds.contains(field.getFieldId()))
|
// Set the filtered formFields in the response
|
||||||
.collect(Collectors.toList());
|
|
||||||
formFields.addAll(matchingFields);
|
|
||||||
}
|
|
||||||
applicationAmendmentRequestResponse.setFormFields(formFields);
|
applicationAmendmentRequestResponse.setFormFields(formFields);
|
||||||
|
|
||||||
List<AmendmentFormFieldResponse> formField = formFields.stream()
|
String applicationFormFieldsJson = applicationAmendmentRequestEntity.getFormFields();
|
||||||
.map(field -> {
|
List<ApplicationFormFieldResponseBean> applicationFormFields = Utils.convertJsonToList(
|
||||||
AmendmentFormFieldResponse responseField = new AmendmentFormFieldResponse();
|
formFieldsJson, new TypeReference<List<ApplicationFormFieldResponseBean>>() {});
|
||||||
responseField.setFieldId(field.getFieldId());
|
|
||||||
responseField.setLabel(field.getLabel());
|
|
||||||
responseField.setSelected(true);
|
|
||||||
return responseField;
|
|
||||||
})
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
applicationAmendmentRequestResponse.setFormFields(formField);
|
|
||||||
|
|
||||||
List<ApplicationFormFieldEntity> formFieldEntities = applicationFormFieldRepository.findByApplicationFormIdIn(
|
|
||||||
applicationForms.stream().map(ApplicationFormEntity::getId).collect(Collectors.toList())
|
|
||||||
);
|
|
||||||
|
|
||||||
List<ApplicationFormFieldResponseBean> fileDetailResponses = new ArrayList<>();
|
List<ApplicationFormFieldResponseBean> fileDetailResponses = new ArrayList<>();
|
||||||
for (AmendmentFormFieldResponse field : formFields) {
|
for (ApplicationFormFieldResponseBean field : applicationFormFields) {
|
||||||
for (ApplicationFormFieldEntity formFieldEntity : formFieldEntities) {
|
|
||||||
if (formFieldEntity.getFieldId().equals(field.getFieldId()) && formFieldEntity.getFieldValue() != null) {
|
|
||||||
ApplicationFormFieldResponseBean responseBean = new ApplicationFormFieldResponseBean();
|
ApplicationFormFieldResponseBean responseBean = new ApplicationFormFieldResponseBean();
|
||||||
responseBean.setFieldId(formFieldEntity.getFieldId());
|
responseBean.setFieldId(field.getFieldId());
|
||||||
|
responseBean.setApplicationFormId(field.getApplicationFormId());
|
||||||
|
responseBean.setId(field.getId());
|
||||||
|
responseBean.setCreatedDate(field.getCreatedDate());
|
||||||
|
responseBean.setUpdatedDate(field.getUpdatedDate());
|
||||||
|
|
||||||
String[] documentIds = formFieldEntity.getFieldValue().split(",");
|
// Check if fieldValue is not null and is a String
|
||||||
|
if (field.getFieldValue() instanceof String && field.getFieldValue() != null && !((String) field.getFieldValue()).isBlank()) {
|
||||||
|
String fieldValueString = (String) field.getFieldValue();
|
||||||
|
String[] documentIds = fieldValueString.split(",");
|
||||||
List<DocumentResponseBean> documentResponseBeans = new ArrayList<>();
|
List<DocumentResponseBean> documentResponseBeans = new ArrayList<>();
|
||||||
|
|
||||||
|
// Process each document ID
|
||||||
for (String docId : documentIds) {
|
for (String docId : documentIds) {
|
||||||
|
try {
|
||||||
Long documentId = Long.valueOf(docId.trim());
|
Long documentId = Long.valueOf(docId.trim());
|
||||||
documentRepository.findByIdAndNotDeleted(documentId).ifPresent(documentEntity -> {
|
documentRepository.findByIdAndNotDeleted(documentId).ifPresent(documentEntity -> {
|
||||||
DocumentResponseBean docBean = new DocumentResponseBean();
|
DocumentResponseBean docBean = new DocumentResponseBean();
|
||||||
@@ -342,13 +337,18 @@ public class ApplicationAmendmentRequestDao {
|
|||||||
docBean.setUpdatedDate(documentEntity.getUpdatedDate());
|
docBean.setUpdatedDate(documentEntity.getUpdatedDate());
|
||||||
documentResponseBeans.add(docBean);
|
documentResponseBeans.add(docBean);
|
||||||
});
|
});
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
// Handle the case where documentId is not a valid number
|
||||||
|
// Log the error if necessary
|
||||||
|
}
|
||||||
|
}
|
||||||
|
responseBean.setFieldValue(documentResponseBeans);
|
||||||
|
} else {
|
||||||
|
responseBean.setFieldValue(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
responseBean.setFieldValue(documentResponseBeans);
|
|
||||||
fileDetailResponses.add(responseBean);
|
fileDetailResponses.add(responseBean);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
applicationAmendmentRequestResponse.setApplicationFormFields(fileDetailResponses);
|
applicationAmendmentRequestResponse.setApplicationFormFields(fileDetailResponses);
|
||||||
|
|
||||||
@@ -416,6 +416,7 @@ public class ApplicationAmendmentRequestDao {
|
|||||||
setIfUpdated(existingApplicationAmendment::getNote, existingApplicationAmendment::setNote, updateRequest.getNote());
|
setIfUpdated(existingApplicationAmendment::getNote, existingApplicationAmendment::setNote, updateRequest.getNote());
|
||||||
if (updateRequest.getApplicationFormFields() != null) {
|
if (updateRequest.getApplicationFormFields() != null) {
|
||||||
updateApplicationFormFields(existingApplicationAmendment, updateRequest.getApplicationFormFields());
|
updateApplicationFormFields(existingApplicationAmendment, updateRequest.getApplicationFormFields());
|
||||||
|
updateFormFieldsJson(existingApplicationAmendment, updateRequest.getApplicationFormFields());
|
||||||
}
|
}
|
||||||
existingApplicationAmendment.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
|
existingApplicationAmendment.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
|
||||||
|
|
||||||
@@ -479,23 +480,71 @@ public class ApplicationAmendmentRequestDao {
|
|||||||
|
|
||||||
boolean fieldUpdated = false;
|
boolean fieldUpdated = false;
|
||||||
|
|
||||||
|
// Parse the formFields JSON string to get amendment field values
|
||||||
|
String amendmentFieldValue = null;
|
||||||
|
try {
|
||||||
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
|
List<ApplicationFormFieldRequestBean> amendmentFields = mapper.readValue(
|
||||||
|
applicationAmendment.getFormFields(),
|
||||||
|
mapper.getTypeFactory().constructCollectionType(List.class, ApplicationFormFieldRequestBean.class)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Find the matching field value and convert to string if found
|
||||||
|
Optional<Object> amendmentFieldObj = amendmentFields.stream()
|
||||||
|
.filter(field -> updatedFormField.getFieldId().equals(field.getFieldId()))
|
||||||
|
.map(ApplicationFormFieldRequestBean::getFieldValue)
|
||||||
|
.findFirst();
|
||||||
|
|
||||||
|
if (amendmentFieldObj.isPresent() && amendmentFieldObj.get() instanceof String) {
|
||||||
|
amendmentFieldValue = (String) amendmentFieldObj.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
log.error("Error parsing formFields JSON: {}", e.getMessage());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (amendmentFieldValue == null) {
|
||||||
|
log.warn("No matching field found in amendment for field ID {}", updatedFormField.getFieldId());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> amendmentDocumentIds = Arrays.asList(amendmentFieldValue.split(","));
|
||||||
|
|
||||||
for (ApplicationFormEntity applicationForm : applicationForms) {
|
for (ApplicationFormEntity applicationForm : applicationForms) {
|
||||||
Optional<ApplicationFormFieldEntity> formFieldEntityOptional = applicationFormFieldRepository
|
Optional<ApplicationFormFieldEntity> formFieldEntityOptional = applicationFormFieldRepository
|
||||||
.findByApplicationFormIdAndFieldId(applicationForm.getId(), updatedFormField.getFieldId());
|
.findByApplicationFormIdAndFieldId(applicationForm.getId(), updatedFormField.getFieldId());
|
||||||
|
|
||||||
if (formFieldEntityOptional.isPresent()) {
|
if (formFieldEntityOptional.isPresent()) {
|
||||||
ApplicationFormFieldEntity formEntity = formFieldEntityOptional.get();
|
ApplicationFormFieldEntity formEntity = formFieldEntityOptional.get();
|
||||||
formEntity.setFieldValue(String.join(",", validDocumentIds));
|
|
||||||
|
// Retrieve existing document IDs in ApplicationFormFieldTable
|
||||||
|
String existingFieldValue = formEntity.getFieldValue();
|
||||||
|
Set<String> existingDocumentIds = existingFieldValue != null
|
||||||
|
? new HashSet<>(Arrays.asList(existingFieldValue.split(",")))
|
||||||
|
: new HashSet<>();
|
||||||
|
|
||||||
|
// Remove amendment documents from existing document IDs
|
||||||
|
existingDocumentIds.removeAll(amendmentDocumentIds);
|
||||||
|
|
||||||
|
// Add valid new document IDs from the request
|
||||||
|
existingDocumentIds.addAll(validDocumentIds);
|
||||||
|
|
||||||
|
// Set the combined document IDs back as the field value
|
||||||
|
formEntity.setFieldValue(String.join(",", existingDocumentIds));
|
||||||
applicationFormFieldRepository.save(formEntity);
|
applicationFormFieldRepository.save(formEntity);
|
||||||
|
|
||||||
log.info("Updated field value for application ID {} and field ID {} with document IDs {}",
|
log.info("Updated field value for application ID {} and field ID {} with document IDs {}",
|
||||||
applicationAmendment.getApplicationId(), updatedFormField.getFieldId(), String.join(",", validDocumentIds));
|
applicationAmendment.getApplicationId(), updatedFormField.getFieldId(), String.join(",", existingDocumentIds));
|
||||||
fieldUpdated = true;
|
fieldUpdated = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!fieldUpdated) {
|
if (!fieldUpdated) {
|
||||||
throw new CustomValidationException(Status.NOT_FOUND,"No ApplicationFormField found for application ID {} and field ID {}. Skipping update.");
|
throw new CustomValidationException(Status.NOT_FOUND,
|
||||||
|
String.format("No ApplicationFormField found for application ID %s and field ID %s. Skipping update.",
|
||||||
|
applicationAmendment.getApplicationId(), updatedFormField.getFieldId()));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log.warn("No valid document IDs found for update. Skipping field ID {}", updatedFormField.getFieldId());
|
log.warn("No valid document IDs found for update. Skipping field ID {}", updatedFormField.getFieldId());
|
||||||
@@ -503,6 +552,53 @@ public class ApplicationAmendmentRequestDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void updateFormFieldsJson(ApplicationAmendmentRequestEntity applicationAmendment, ApplicationFormFieldRequestBean updatedFormField) {
|
||||||
|
if (updatedFormField != null) {
|
||||||
|
try {
|
||||||
|
// Step 1: Fetch the existing form fields JSON
|
||||||
|
String existingFormFieldsJson = applicationAmendment.getFormFields();
|
||||||
|
List<ApplicationFormFieldRequestBean> formFieldsList;
|
||||||
|
|
||||||
|
if (existingFormFieldsJson == null || existingFormFieldsJson.isEmpty()) {
|
||||||
|
formFieldsList = new ArrayList<>(); // If no existing data, start with an empty list
|
||||||
|
} else {
|
||||||
|
// Step 2: Deserialize the existing JSON into a list of objects
|
||||||
|
formFieldsList = new ObjectMapper().readValue(existingFormFieldsJson, new TypeReference<List<ApplicationFormFieldRequestBean>>() {});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 3: Check if the field ID already exists in the list and update it
|
||||||
|
boolean fieldUpdated = false;
|
||||||
|
for (ApplicationFormFieldRequestBean field : formFieldsList) {
|
||||||
|
if (field.getFieldId().equals(updatedFormField.getFieldId())) {
|
||||||
|
field.setFieldValue(updatedFormField.getFieldValue()); // Update field value
|
||||||
|
fieldUpdated = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If field wasn't updated, log a warning message instead of adding a new field
|
||||||
|
if (!fieldUpdated) {
|
||||||
|
log.warn("Field ID {} does not exist in the form fields for application amendment ID {}", updatedFormField.getFieldId(), applicationAmendment.getId());
|
||||||
|
throw new CustomValidationException(Status.NOT_FOUND,"Field ID {} does not exist in the form fields for application amendment ID {}");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 4: Serialize the updated list back to JSON if the update was successful
|
||||||
|
String updatedFormFieldsJson = new ObjectMapper().writeValueAsString(formFieldsList);
|
||||||
|
applicationAmendment.setFormFields(updatedFormFieldsJson); // Update the form fields with the modified list
|
||||||
|
|
||||||
|
log.info("Updated form fields JSON for application amendment ID {}: {}", applicationAmendment.getId(), updatedFormFieldsJson);
|
||||||
|
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
log.error("Error processing JSON for form fields for application amendment ID {}: {}", applicationAmendment.getId(), e.getMessage());
|
||||||
|
throw new CustomValidationException(Status.BAD_REQUEST, "Error processing JSON for form fields");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.warn("No form field data to update for application amendment ID {}", applicationAmendment.getId());
|
||||||
|
throw new CustomValidationException(Status.NOT_FOUND,"No form field data to update for application amendment ID {}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public List<ApplicationAmendmentRequestResponse> getAllAmendmentRequestByBeneficiaryId(Long beneficiaryId) {
|
public List<ApplicationAmendmentRequestResponse> getAllAmendmentRequestByBeneficiaryId(Long beneficiaryId) {
|
||||||
UserEntity userEntity = userService.validateUser(beneficiaryId);
|
UserEntity userEntity = userService.validateUser(beneficiaryId);
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
package net.gepafin.tendermanagement.model.response;
|
package net.gepafin.tendermanagement.model.response;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
public class AmendmentFormFieldResponse {
|
public class AmendmentFormFieldResponse {
|
||||||
private String fieldId;
|
private String fieldId;
|
||||||
private String label;
|
private String label;
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ public class ApplicationAmendmentRequestResponse {
|
|||||||
private String note;
|
private String note;
|
||||||
private Long responseDays;
|
private Long responseDays;
|
||||||
private LocalDateTime startDate;
|
private LocalDateTime startDate;
|
||||||
private boolean isSendNotification;
|
private Boolean isSendNotification;
|
||||||
private boolean isSendEmail;
|
private Boolean isSendEmail;
|
||||||
private Long protocolNumber;
|
private Long protocolNumber;
|
||||||
private String callName;
|
private String callName;
|
||||||
private String beneficiaryName;
|
private String beneficiaryName;
|
||||||
|
|||||||
Reference in New Issue
Block a user