Merge pull request #89 from Kitzanos/new-feature/GEPAFINBE-85

GEAPAFINBE-85(Update get amendment api)
This commit is contained in:
rbonazzo-KZ
2024-11-13 08:43:20 +01:00
committed by GitHub
4 changed files with 221 additions and 87 deletions

View File

@@ -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;
@@ -8,6 +9,7 @@ import jakarta.servlet.http.HttpServletRequest;
import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.config.Translator;
import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.entities.*; import net.gepafin.tendermanagement.entities.*;
import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum;
import net.gepafin.tendermanagement.enums.*; import net.gepafin.tendermanagement.enums.*;
import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest;
import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean;
@@ -17,9 +19,8 @@ import net.gepafin.tendermanagement.model.response.*;
import net.gepafin.tendermanagement.repositories.*; import net.gepafin.tendermanagement.repositories.*;
import net.gepafin.tendermanagement.service.*; import net.gepafin.tendermanagement.service.*;
import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.util.DateTimeUtil;
import net.gepafin.tendermanagement.util.Validator;
import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum;
import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.util.Utils;
import net.gepafin.tendermanagement.util.Validator;
import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException;
import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException;
import net.gepafin.tendermanagement.web.rest.api.errors.Status; import net.gepafin.tendermanagement.web.rest.api.errors.Status;
@@ -28,10 +29,8 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.time.temporal.ChronoUnit;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -174,7 +173,8 @@ public class ApplicationAmendmentRequestDao {
try { try {
List<Map<String, Object>> dataList = objectMapper.readValue( List<Map<String, Object>> dataList = objectMapper.readValue(
content, new TypeReference<List<Map<String, Object>>>() {}); content, new TypeReference<List<Map<String, Object>>>() {
});
for (Map<String, Object> data : dataList) { for (Map<String, Object> data : dataList) {
if (target.equals(data.get("name"))) { if (target.equals(data.get("name"))) {
@@ -194,7 +194,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 +216,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 +275,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 +293,64 @@ public class ApplicationAmendmentRequestDao {
applicationAmendmentRequestResponse.setProtocolNumber(protocolNumber); applicationAmendmentRequestResponse.setProtocolNumber(protocolNumber);
applicationAmendmentRequestResponse.setBeneficiaryName(beneficiaryName); applicationAmendmentRequestResponse.setBeneficiaryName(beneficiaryName);
String formFieldsString = applicationAmendmentRequestEntity.getFormFields(); List<ApplicationFormEntity> forms = applicationFormRepository.findByApplicationId(applicationId);
List<String> storedFieldIds = (formFieldsString != null) ? Arrays.asList(formFieldsString.split(",")) : Collections.emptyList(); List<AmendmentFormFieldResponse> allFormFields = new ArrayList<>();
List<ApplicationFormEntity> applicationForms = applicationFormRepository.findByApplicationId(application.getId());
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() for (ApplicationFormEntity form : forms) {
.filter(field -> storedFieldIds.contains(field.getFieldId())) String content = form.getForm().getContent();
.collect(Collectors.toList()); List<Map<String, Object>> result = filterByName(content, "fileupload");
formFields.addAll(matchingFields); allFormFields.addAll(getIdAndLabelFromResult(result));
} }
Map<String, String> fieldIdToLabelMap = allFormFields.stream()
.collect(Collectors.toMap(AmendmentFormFieldResponse::getFieldId, AmendmentFormFieldResponse::getLabel));
String formFieldsJson = applicationAmendmentRequestEntity.getFormFields();
List<AmendmentFormFieldResponse> formFields = Utils.convertJsonToList(
formFieldsJson, new TypeReference<List<AmendmentFormFieldResponse>>() {
});
for (AmendmentFormFieldResponse formField : formFields) {
String label = fieldIdToLabelMap.get(formField.getFieldId());
formField.setLabel(label);
formField.setSelected(true);
}
// Set the filtered formFields in the response
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());
String[] documentIds = formFieldEntity.getFieldValue().split(","); Optional<ApplicationFormFieldEntity> formFieldEntity = Optional.empty();
for (ApplicationFormEntity form : forms) {
formFieldEntity = applicationFormFieldRepository
.findByApplicationFormIdAndFieldId(form.getId(), field.getFieldId());
if (formFieldEntity.isPresent()) {
// Set the applicationFormId from the matching form
responseBean.setApplicationFormId(form.getId());
responseBean.setId(formFieldEntity.get().getId());
responseBean.setCreatedDate(formFieldEntity.get().getCreatedDate());
responseBean.setUpdatedDate(formFieldEntity.get().getUpdatedDate());
break;
}
}
// 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 +364,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 +443,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 +507,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 +579,54 @@ 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);
@@ -547,7 +671,8 @@ public class ApplicationAmendmentRequestDao {
if (statuses != null && !statuses.isEmpty()) { if (statuses != null && !statuses.isEmpty()) {
List<String> statusStrings = statuses.stream().map(Enum::name).collect(Collectors.toList()); List<String> statusStrings = statuses.stream().map(Enum::name).collect(Collectors.toList());
applicationAmendmentRequestEntity = applicationAmendmentRequestRepository.findByApplicationIdAndStatusInAndIsDeletedFalse(application.getId(), statusStrings); applicationAmendmentRequestEntity = applicationAmendmentRequestRepository.findByApplicationIdAndStatusInAndIsDeletedFalse(application.getId(), statusStrings);
} if(!applicationAmendmentRequestEntity.isEmpty()) { }
if (!applicationAmendmentRequestEntity.isEmpty()) {
ApplicationAmendmentRequestEntity applicationAmendmentRequest = applicationAmendmentRequestEntity.get(0); ApplicationAmendmentRequestEntity applicationAmendmentRequest = applicationAmendmentRequestEntity.get(0);
Optional<ApplicationEvaluationEntity> entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(applicationAmendmentRequest.getApplicationEvaluationEntity().getId()); Optional<ApplicationEvaluationEntity> entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(applicationAmendmentRequest.getApplicationEvaluationEntity().getId());
if (entityOptional.isPresent()) { if (entityOptional.isPresent()) {
@@ -556,7 +681,8 @@ public class ApplicationAmendmentRequestDao {
} else { } else {
validator.validateUserId(request, entityOptional.get().getAssignedApplicationsEntity().getApplication().getUserId()); validator.validateUserId(request, entityOptional.get().getAssignedApplicationsEntity().getApplication().getUserId());
} }
}} }
}
List<ApplicationAmendmentRequestResponse> response = new ArrayList<>(); List<ApplicationAmendmentRequestResponse> response = new ArrayList<>();
if (applicationAmendmentRequestEntity != null) { if (applicationAmendmentRequestEntity != null) {
response = applicationAmendmentRequestEntity.stream() response = applicationAmendmentRequestEntity.stream()
@@ -565,6 +691,7 @@ public class ApplicationAmendmentRequestDao {
} }
return response; return response;
} }
public ApplicationAmendmentRequestResponse updateApplicationAmendmentStatus( public ApplicationAmendmentRequestResponse updateApplicationAmendmentStatus(
Long id, ApplicationAmendmentRequestEnum statusTypeEnum) { Long id, ApplicationAmendmentRequestEnum statusTypeEnum) {
@@ -579,6 +706,7 @@ public class ApplicationAmendmentRequestDao {
log.info("Amendment status updated successfully: {}", response); log.info("Amendment status updated successfully: {}", response);
return response; return response;
} }
public void sendReminderEmail(Long amendmentId) { public void sendReminderEmail(Long amendmentId) {
ApplicationAmendmentRequestEntity amendment = applicationAmendmentRequestRepository.findByIdAndIsDeletedFalse(amendmentId) ApplicationAmendmentRequestEntity amendment = applicationAmendmentRequestRepository.findByIdAndIsDeletedFalse(amendmentId)
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND,

View File

@@ -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;

View File

@@ -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;

View File

@@ -1720,4 +1720,8 @@
<sqlFile dbms="postgresql" <sqlFile dbms="postgresql"
path="db/dump/update_system_email_template_for_notification_mail_05_11_2024_4.sql"/> path="db/dump/update_system_email_template_for_notification_mail_05_11_2024_4.sql"/>
</changeSet> </changeSet>
<changeSet id="13-11-2024_1" author="Rajesh Khore">
<dropNotNullConstraint tableName="application_amendment_request" columnName="is_email"/>
<dropNotNullConstraint tableName="application_amendment_request" columnName="is_notification"/>
</changeSet>
</databaseChangeLog> </databaseChangeLog>