Resolved conflicts

This commit is contained in:
nisha
2024-11-15 20:06:33 +05:30
23 changed files with 362 additions and 242 deletions

View File

@@ -290,5 +290,6 @@ public class GepafinConstant {
public static final String REMINDER_EMAIL_SENT_SUCCESS_MSG = "reminder.email.sent.success.msg"; public static final String REMINDER_EMAIL_SENT_SUCCESS_MSG = "reminder.email.sent.success.msg";
public static final String ENCRYPT_INIT_VECTOR = "IG8*(*@&)*#biVVD"; public static final String ENCRYPT_INIT_VECTOR = "IG8*(*@&)*#biVVD";
public static final String ENCRYPT_KEY = "U2VjdXJlRW5jcnlwdEtleQ=="; public static final String ENCRYPT_KEY = "U2VjdXJlRW5jcnlwdEtleQ==";
public static final String DUPLICATE_BENEFICIARY_CALL = "beneficiary.call.duplicate";
} }

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,15 +9,15 @@ 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.*; import net.gepafin.tendermanagement.model.request.*;
import net.gepafin.tendermanagement.model.response.*; 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;
@@ -25,10 +26,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"))) {
@@ -188,19 +188,19 @@ public class ApplicationAmendmentRequestDao {
return filteredList; return filteredList;
} }
public ApplicationAmendmentRequestResponse createApplicationAmendmentRequest(Long applicationEvaluationId, ApplicationAmendmentRequest applicationAmendmentRequest){ public ApplicationAmendmentRequestResponse createApplicationAmendmentRequest(Long applicationEvaluationId, ApplicationAmendmentRequest applicationAmendmentRequest) {
log.info("Submiting application data for amendment Process with details: {}", applicationEvaluationId); log.info("Submiting application data for amendment Process with details: {}", applicationEvaluationId);
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;
} }
public ApplicationAmendmentRequestEntity createApplicationAmendmentRequestEntity(ApplicationAmendmentRequest applicationAmendmentRequest,Long applicationEvaluationId){ public ApplicationAmendmentRequestEntity createApplicationAmendmentRequestEntity(ApplicationAmendmentRequest applicationAmendmentRequest,Long applicationEvaluationId) {
ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity = new ApplicationAmendmentRequestEntity(); ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity = new ApplicationAmendmentRequestEntity();
applicationAmendmentRequestEntity.setNote(applicationAmendmentRequest.getNote()); applicationAmendmentRequestEntity.setNote(applicationAmendmentRequest.getNote());
applicationAmendmentRequestEntity.setResponseDays(applicationAmendmentRequest.getResponseDays()); applicationAmendmentRequestEntity.setResponseDays(applicationAmendmentRequest.getResponseDays());
@@ -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());
@@ -245,15 +251,15 @@ public class ApplicationAmendmentRequestDao {
return applicationAmendment; return applicationAmendment;
} }
public ApplicationAmendmentRequestEntity saveApplicationAmendmentRequestEntity(ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity){ public ApplicationAmendmentRequestEntity saveApplicationAmendmentRequestEntity(ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity) {
ApplicationAmendmentRequestEntity applicationAmendmentRequest= applicationAmendmentRequestRepository.save(applicationAmendmentRequestEntity); ApplicationAmendmentRequestEntity applicationAmendmentRequest = applicationAmendmentRequestRepository.save(applicationAmendmentRequestEntity);
return applicationAmendmentRequest; return applicationAmendmentRequest;
} }
public ApplicationAmendmentRequestResponse convertEntityToResponse(ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity){ public ApplicationAmendmentRequestResponse convertEntityToResponse(ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity) {
ApplicationAmendmentRequestResponse applicationAmendmentRequestResponse = new ApplicationAmendmentRequestResponse(); ApplicationAmendmentRequestResponse applicationAmendmentRequestResponse = new ApplicationAmendmentRequestResponse();
applicationAmendmentRequestResponse.setId(applicationAmendmentRequestEntity.getId()); applicationAmendmentRequestResponse.setId(applicationAmendmentRequestEntity.getId());
Long applicationId= applicationAmendmentRequestEntity.getApplicationId(); Long applicationId = applicationAmendmentRequestEntity.getApplicationId();
ApplicationEntity application = applicationService.validateApplication(applicationId); ApplicationEntity application = applicationService.validateApplication(applicationId);
applicationAmendmentRequestResponse.setApplicationId(applicationId); applicationAmendmentRequestResponse.setApplicationId(applicationId);
@@ -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);
@@ -363,7 +390,7 @@ public class ApplicationAmendmentRequestDao {
public void deleteById(Long id) { public void deleteById(Long id) {
log.info("Deleting assigned application with ID: {}", id); log.info("Deleting assigned application with ID: {}", id);
ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity= validateApplicationAmendmentRequest(id); ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity = validateApplicationAmendmentRequest(id);
applicationAmendmentRequestEntity.setIsDeleted(true); applicationAmendmentRequestEntity.setIsDeleted(true);
saveApplicationAmendmentRequestEntity(applicationAmendmentRequestEntity); saveApplicationAmendmentRequestEntity(applicationAmendmentRequestEntity);
log.info(" Application amendment deleted with ID: {}", id); log.info(" Application amendment deleted with ID: {}", id);
@@ -377,11 +404,11 @@ public class ApplicationAmendmentRequestDao {
return response; return response;
} }
public List<ApplicationAmendmentRequestResponse> getAllApplicationAmendmentRequest(HttpServletRequest request,Long userId) { public List<ApplicationAmendmentRequestResponse> getAllApplicationAmendmentRequest(HttpServletRequest request, Long userId) {
if(validator.checkIsPreInstructor() && userId == null) { if (validator.checkIsPreInstructor() && userId == null) {
throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.USER_ID_NOT_NULL_MSG)); throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.USER_ID_NOT_NULL_MSG));
} }
if(userId != null) { if (userId != null) {
validator.validatePreInstructor(request, userId); validator.validatePreInstructor(request, userId);
} }
Specification<ApplicationAmendmentRequestEntity> spec = search(userId); Specification<ApplicationAmendmentRequestEntity> spec = search(userId);
@@ -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);
@@ -514,7 +638,7 @@ public class ApplicationAmendmentRequestDao {
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
public ApplicationAmendmentRequestResponse closeAmendmentRequest(Long id, CloseAmendmentRequest closeAmendmentRequest){ public ApplicationAmendmentRequestResponse closeAmendmentRequest(Long id, CloseAmendmentRequest closeAmendmentRequest) {
log.info("Closing application amendement with ID: {}", id); log.info("Closing application amendement with ID: {}", id);
ApplicationAmendmentRequestEntity existingApplicationAmendment = validateApplicationAmendmentRequest(id); ApplicationAmendmentRequestEntity existingApplicationAmendment = validateApplicationAmendmentRequest(id);
@@ -523,6 +647,16 @@ public class ApplicationAmendmentRequestDao {
ApplicationAmendmentRequestEntity updatedApplicationAmendment = saveApplicationAmendmentRequestEntity(existingApplicationAmendment); ApplicationAmendmentRequestEntity updatedApplicationAmendment = saveApplicationAmendmentRequestEntity(existingApplicationAmendment);
ApplicationAmendmentRequestResponse response = convertEntityToResponse(updatedApplicationAmendment); ApplicationAmendmentRequestResponse response = convertEntityToResponse(updatedApplicationAmendment);
List<ApplicationAmendmentRequestEntity> amendmentRequests = applicationAmendmentRequestRepository.findAllByApplicationEvaluationIdAndIsDeletedFalse(existingApplicationAmendment.getApplicationEvaluationEntity().getId());
boolean allClosed = amendmentRequests.stream()
.allMatch(amendment -> amendment.getStatus().equals(ApplicationAmendmentRequestEnum.CLOSE.getValue()));
if (allClosed) {
existingApplicationAmendment.getApplicationEvaluationEntity().setStatus(ApplicationEvaluationStatusTypeEnum.OPEN.getValue());
applicationEvaluationRepository.save(existingApplicationAmendment.getApplicationEvaluationEntity());
log.info("All amendments are closed. Application Evaluation status set to OPEN.");
}
log.info("Application Amendment closed successfully: {}", response); log.info("Application Amendment closed successfully: {}", response);
return response; return response;
} }
@@ -540,15 +674,16 @@ public class ApplicationAmendmentRequestDao {
return convertEntityToResponse(request); return convertEntityToResponse(request);
} }
public List<ApplicationAmendmentRequestResponse> getAmendmentByApplicationId(HttpServletRequest request, Long applicationId,List<ApplicationAmendmentRequestEnum> statuses) { public List<ApplicationAmendmentRequestResponse> getAmendmentByApplicationId(HttpServletRequest request, Long applicationId, List<ApplicationAmendmentRequestEnum> statuses) {
log.info("Fetching the Amendment data from application id {}", applicationId); log.info("Fetching the Amendment data from application id {}", applicationId);
ApplicationEntity application = applicationService.validateApplication(applicationId); ApplicationEntity application = applicationService.validateApplication(applicationId);
List<ApplicationAmendmentRequestEntity> applicationAmendmentRequestEntity=applicationAmendmentRequestRepository.findByApplicationIdAndIsDeletedFalse(applicationId); List<ApplicationAmendmentRequestEntity> applicationAmendmentRequestEntity = applicationAmendmentRequestRepository.findByApplicationIdAndIsDeletedFalse(applicationId);
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()) { }
ApplicationAmendmentRequestEntity applicationAmendmentRequest=applicationAmendmentRequestEntity.get(0); if (!applicationAmendmentRequestEntity.isEmpty()) {
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()) {
if (Boolean.FALSE.equals(validator.checkIsBeneficiary())) { if (Boolean.FALSE.equals(validator.checkIsBeneficiary())) {
@@ -556,21 +691,23 @@ 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<>(); }
if(applicationAmendmentRequestEntity!=null) { List<ApplicationAmendmentRequestResponse> response = new ArrayList<>();
response= applicationAmendmentRequestEntity.stream() if (applicationAmendmentRequestEntity != null) {
response = applicationAmendmentRequestEntity.stream()
.map(this::convertEntityToResponse) .map(this::convertEntityToResponse)
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
return response; return response;
} }
public ApplicationAmendmentRequestResponse updateApplicationAmendmentStatus( public ApplicationAmendmentRequestResponse updateApplicationAmendmentStatus(
Long id,ApplicationAmendmentRequestEnum statusTypeEnum) { Long id, ApplicationAmendmentRequestEnum statusTypeEnum) {
log.info("Updating application amendement with status: {}", id); log.info("Updating application amendement with status: {}", id);
ApplicationAmendmentRequestEntity existingApplicationAmendment = validateApplicationAmendmentRequest(id); ApplicationAmendmentRequestEntity existingApplicationAmendment = validateApplicationAmendmentRequest(id);
if(Boolean.TRUE.equals(existingApplicationAmendment.getStatus().equals(ApplicationAmendmentRequestEnum.AWAITING.getValue())) && Boolean.TRUE.equals(statusTypeEnum.equals(ApplicationAmendmentRequestEnum.RESPONSE_RECEIVED))){ if (Boolean.TRUE.equals(existingApplicationAmendment.getStatus().equals(ApplicationAmendmentRequestEnum.AWAITING.getValue())) && Boolean.TRUE.equals(statusTypeEnum.equals(ApplicationAmendmentRequestEnum.RESPONSE_RECEIVED))) {
existingApplicationAmendment.setStatus(ApplicationAmendmentRequestEnum.RESPONSE_RECEIVED.getValue()); existingApplicationAmendment.setStatus(ApplicationAmendmentRequestEnum.RESPONSE_RECEIVED.getValue());
existingApplicationAmendment.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); existingApplicationAmendment.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
applicationAmendmentRequestRepository.save(existingApplicationAmendment); applicationAmendmentRequestRepository.save(existingApplicationAmendment);
@@ -579,6 +716,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

@@ -93,9 +93,6 @@ public class ApplicationDao {
@Value("${default_System_Receiver_Email}") @Value("${default_System_Receiver_Email}")
private String defaultSystemReceiverEmail; private String defaultSystemReceiverEmail;
@Value("${gepafin_email}")
private String gepafinEmail;
@Value("${rinaldo_email}") @Value("${rinaldo_email}")
private String rinaldoEmail; private String rinaldoEmail;

View File

@@ -1307,14 +1307,17 @@ public class ApplicationEvaluationDao {
entity = applicationEvaluationRepository.save(existingEntity); entity = applicationEvaluationRepository.save(existingEntity);
assignedApplicationsRepository.save(assignedApplicationsEntity); assignedApplicationsRepository.save(assignedApplicationsEntity);
ApplicationAmendmentRequestEntity amendmentRequest = applicationAmendmentRequestRepository.findByApplicationEvaluationIdAndIsDeletedFalse(entity.getId()); List<ApplicationAmendmentRequestEntity> amendmentRequest = applicationAmendmentRequestRepository.findAllByApplicationEvaluationIdAndIsDeletedFalse(entity.getId());
if(amendmentRequest!=null){ for (ApplicationAmendmentRequestEntity request : amendmentRequest) {
request.setStatus(ApplicationAmendmentRequestEnum.CLOSE.getValue());
}
applicationAmendmentRequestRepository.saveAll(amendmentRequest);
if (Boolean.TRUE.equals(statusType.equals((ApplicationStatusTypeEnum.APPROVED.getValue())))) { if (Boolean.TRUE.equals(statusType.equals((ApplicationStatusTypeEnum.APPROVED.getValue())))) {
emailNotificationDao.sendAdmissibilityNotificationEmailForApprovedApplication(amendmentRequest); emailNotificationDao.sendAdmissibilityNotificationEmailForApprovedApplication(application);
} }
if (Boolean.TRUE.equals(statusType.equals((ApplicationStatusTypeEnum.REJECTED.getValue())))) { if (Boolean.TRUE.equals(statusType.equals((ApplicationStatusTypeEnum.REJECTED.getValue())))) {
emailNotificationDao.sendInadmissibilityEmailForRejectedApplication(amendmentRequest); emailNotificationDao.sendInadmissibilityEmailForRejectedApplication(application,existingEntity);
}} }
return convertToResponse(entity); return convertToResponse(entity);
} }
return null; return null;

View File

@@ -10,6 +10,7 @@ import net.gepafin.tendermanagement.model.request.BeneficiaryPreferredCallReq;
import net.gepafin.tendermanagement.model.response.BeneficiaryPreferredCallResponseBean; import net.gepafin.tendermanagement.model.response.BeneficiaryPreferredCallResponseBean;
import net.gepafin.tendermanagement.repositories.BeneficiaryPreferredCallRepository; import net.gepafin.tendermanagement.repositories.BeneficiaryPreferredCallRepository;
import net.gepafin.tendermanagement.util.Validator; import net.gepafin.tendermanagement.util.Validator;
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;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -20,6 +21,7 @@ import org.springframework.stereotype.Component;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import java.util.List; import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -35,10 +37,19 @@ public class BeneficiaryPreferredCallDao {
private Validator validator; private Validator validator;
public BeneficiaryPreferredCallResponseBean createBeneficiaryPreferredCall(HttpServletRequest httpServletRequest, BeneficiaryPreferredCallReq request,UserEntity user) { public BeneficiaryPreferredCallResponseBean createBeneficiaryPreferredCall(HttpServletRequest httpServletRequest, BeneficiaryPreferredCallReq request, UserEntity user) {
log.info("Creating new beneficiary preferred call with details: {}", request); log.info("Creating new beneficiary preferred call with details: {}", request);
validator.validateUserWithCompany(httpServletRequest, request.getCompanyId()); validator.validateUserWithCompany(httpServletRequest, request.getCompanyId());
BeneficiaryPreferredCallEntity entity = convertRequestToEntity(request,user);
Optional<BeneficiaryPreferredCallEntity> existingCall = beneficiaryPreferredCallRepository
.findByUserIdAndCallIdAndCompanyIdAndIsDeletedFalse(user.getId(), request.getCallId(), request.getCompanyId());
if (existingCall.isPresent()) {
log.warn("Duplicate beneficiary preferred call detected: {}", existingCall.get());
throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.DUPLICATE_BENEFICIARY_CALL));
}
BeneficiaryPreferredCallEntity entity = convertRequestToEntity(request, user);
entity = beneficiaryPreferredCallRepository.save(entity); entity = beneficiaryPreferredCallRepository.save(entity);
log.info("Beneficiary preferred call created with ID: {}", entity.getId()); log.info("Beneficiary preferred call created with ID: {}", entity.getId());
return convertEntityToResponse(entity); return convertEntityToResponse(entity);
@@ -53,6 +64,7 @@ public class BeneficiaryPreferredCallDao {
entity.setCallId(request.getCallId()); entity.setCallId(request.getCallId());
entity.setUserId(userEntity.getId()); entity.setUserId(userEntity.getId());
entity.setCompanyId(request.getCompanyId()); entity.setCompanyId(request.getCompanyId());
entity.setIsDeleted( false);
return entity; return entity;
} }
@@ -77,17 +89,18 @@ public class BeneficiaryPreferredCallDao {
// } // }
public void deleteBeneficiaryPreferredCallById(HttpServletRequest request, Long id) { public void deleteBeneficiaryPreferredCallById(HttpServletRequest request, Long id) {
log.info("Deleting beneficiary preferred call with ID: {}", id); log.info("Soft deleting beneficiary preferred call with ID: {}", id);
BeneficiaryPreferredCallEntity entity = validateBeneficiaryPreferredCall(id); BeneficiaryPreferredCallEntity entity = validateBeneficiaryPreferredCall(id);
validator.validateUserId(request, entity.getUserId()); validator.validateUserId(request, entity.getUserId());
beneficiaryPreferredCallRepository.deleteById(id); entity.setIsDeleted(true);
log.info("Beneficiary preferred call deleted with ID: {}", id); beneficiaryPreferredCallRepository.save(entity);
log.info("Beneficiary preferred call soft deleted with ID: {}", id);
} }
public List<BeneficiaryPreferredCallResponseBean> getAllBeneficiaryPreferredCalls(HttpServletRequest request) { public List<BeneficiaryPreferredCallResponseBean> getAllBeneficiaryPreferredCalls(HttpServletRequest request) {
UserEntity userEntity = validator.validateUser(request); UserEntity userEntity = validator.validateUser(request);
log.info("Fetching all beneficiary preferred calls"); log.info("Fetching all beneficiary preferred calls");
List<BeneficiaryPreferredCallResponseBean> calls = beneficiaryPreferredCallRepository.findByUserId(userEntity.getId()) List<BeneficiaryPreferredCallResponseBean> calls = beneficiaryPreferredCallRepository.findByUserIdAndIsDeletedFalse(userEntity.getId())
.stream() .stream()
.map(this::convertEntityToResponse) .map(this::convertEntityToResponse)
.collect(Collectors.toList()); .collect(Collectors.toList());
@@ -97,7 +110,7 @@ public class BeneficiaryPreferredCallDao {
private BeneficiaryPreferredCallEntity validateBeneficiaryPreferredCall(Long id) { private BeneficiaryPreferredCallEntity validateBeneficiaryPreferredCall(Long id) {
log.info("Validating beneficiary preferred call with ID: {}", id); log.info("Validating beneficiary preferred call with ID: {}", id);
return beneficiaryPreferredCallRepository.findById(id) return beneficiaryPreferredCallRepository.findByIdAndIsDeletedFalse(id)
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.BENEFICIARY_CALL_NOT_FOUND))); .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.BENEFICIARY_CALL_NOT_FOUND)));
} }
@@ -123,7 +136,7 @@ public class BeneficiaryPreferredCallDao {
} }
public List<BeneficiaryPreferredCallResponseBean> getBeneficiaryPreferredCallByUserId(UserEntity userEntity, Long companyId) { public List<BeneficiaryPreferredCallResponseBean> getBeneficiaryPreferredCallByUserId(UserEntity userEntity, Long companyId) {
List<BeneficiaryPreferredCallEntity> calls = beneficiaryPreferredCallRepository.findByUserIdAndCompanyId(userEntity.getId(), companyId); List<BeneficiaryPreferredCallEntity> calls = beneficiaryPreferredCallRepository.findByUserIdAndCompanyIdAndIsDeletedFalse(userEntity.getId(), companyId);
return calls.stream() return calls.stream()
.map(this::convertEntityToResponse) .map(this::convertEntityToResponse)
.collect(Collectors.toList()); .collect(Collectors.toList());

View File

@@ -10,12 +10,15 @@ import java.time.LocalTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; import java.util.zip.ZipOutputStream;
import net.gepafin.tendermanagement.entities.*;
import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum; import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum;
import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.model.response.*;
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.Utils; import net.gepafin.tendermanagement.util.Utils;
@@ -26,16 +29,7 @@ import org.springframework.util.StringUtils;
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.CallEntity;
import net.gepafin.tendermanagement.entities.CallTargetAudienceChecklistEntity;
import net.gepafin.tendermanagement.entities.CriteriaFormFieldEntity;
import net.gepafin.tendermanagement.entities.DocumentEntity;
import net.gepafin.tendermanagement.entities.EvaluationCriteriaEntity;
import net.gepafin.tendermanagement.entities.FaqEntity;
import net.gepafin.tendermanagement.entities.LookUpDataEntity;
import net.gepafin.tendermanagement.entities.LookUpDataEntity.LookUpDataTypeEnum; import net.gepafin.tendermanagement.entities.LookUpDataEntity.LookUpDataTypeEnum;
import net.gepafin.tendermanagement.entities.RegionEntity;
import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.enums.CallStatusEnum; import net.gepafin.tendermanagement.enums.CallStatusEnum;
import net.gepafin.tendermanagement.enums.DocumentTypeEnum; import net.gepafin.tendermanagement.enums.DocumentTypeEnum;
import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1; import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1;
@@ -45,13 +39,6 @@ import net.gepafin.tendermanagement.model.request.EvaluationCriteriaReq;
import net.gepafin.tendermanagement.model.request.FaqReq; import net.gepafin.tendermanagement.model.request.FaqReq;
import net.gepafin.tendermanagement.model.request.LookUpDataReq; import net.gepafin.tendermanagement.model.request.LookUpDataReq;
import net.gepafin.tendermanagement.model.request.UpdateCallRequestStep1; import net.gepafin.tendermanagement.model.request.UpdateCallRequestStep1;
import net.gepafin.tendermanagement.repositories.CallRepository;
import net.gepafin.tendermanagement.repositories.CallTargetAudienceChecklistRepository;
import net.gepafin.tendermanagement.repositories.CriteriaFormFieldRepository;
import net.gepafin.tendermanagement.repositories.DocumentRepository;
import net.gepafin.tendermanagement.repositories.EvaluationCriteriaRepository;
import net.gepafin.tendermanagement.repositories.FaqRepository;
import net.gepafin.tendermanagement.repositories.RegionRepository;
import net.gepafin.tendermanagement.service.impl.CallValidatorServiceImpl; import net.gepafin.tendermanagement.service.impl.CallValidatorServiceImpl;
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;
@@ -104,6 +91,9 @@ public class CallDao {
@Autowired @Autowired
private S3PathConfig s3PathConfig; private S3PathConfig s3PathConfig;
@Autowired
private BeneficiaryPreferredCallRepository beneficiaryPreferredCallRepository;
public CallResponse createCallStep1(CreateCallRequestStep1 createCallRequest, UserEntity userEntity) { public CallResponse createCallStep1(CreateCallRequestStep1 createCallRequest, UserEntity userEntity) {
createCallRequest.setRegionId(userEntity.getRoleEntity().getRegion().getId()); createCallRequest.setRegionId(userEntity.getRoleEntity().getRegion().getId());
@@ -435,12 +425,24 @@ public class CallDao {
Translator.toLocale(GepafinConstant.CALL_NOT_FOUND))); Translator.toLocale(GepafinConstant.CALL_NOT_FOUND)));
} }
public CallResponse getCallById(CallEntity callEntity) { public CallResponse getCallById(UserEntity user, CallEntity callEntity) {
return getCallResponseBean(callEntity); Long userId = user.getId();
Long callId = callEntity.getId();
BeneficiaryPreferredCallEntity preferredCall = beneficiaryPreferredCallRepository
.findByUserIdAndCallIdInAndIsDeletedFalse(userId, List.of(callId))
.stream()
.findFirst()
.orElse(null);
CallResponse callResponse = getCallResponseBean(callEntity);
callResponse.setPreferredCallId(preferredCall != null ? preferredCall.getId() : null);
return callResponse;
} }
public CallResponse createCallStep2(CallEntity callEntity, CreateCallRequestStep2 createCallRequest, UserEntity user) { public CallResponse createCallStep2(CallEntity callEntity, CreateCallRequestStep2 createCallRequest, UserEntity user) {
validateUpdate(callEntity); // validateUpdate(callEntity);
setIfUpdated(callEntity::getThreshold, callEntity::setThreshold, createCallRequest.getThreshold()); setIfUpdated(callEntity::getThreshold, callEntity::setThreshold, createCallRequest.getThreshold());
callRepository.save(callEntity); callRepository.save(callEntity);
convertToEvaluationCriteriaEntities(createCallRequest.getCriteria(), callEntity, LookUpDataTypeEnum.EVALUATION_CRITERIA); convertToEvaluationCriteriaEntities(createCallRequest.getCriteria(), callEntity, LookUpDataTypeEnum.EVALUATION_CRITERIA);
@@ -500,13 +502,6 @@ public class CallDao {
} }
public CallResponse updateCallStep1(CallEntity callEntity, UpdateCallRequestStep1 updateCallRequest, UserEntity userEntity) { public CallResponse updateCallStep1(CallEntity callEntity, UpdateCallRequestStep1 updateCallRequest, UserEntity userEntity) {
if(Boolean.TRUE.equals(callEntity.getStatus().equals(CallStatusEnum.PUBLISH.getValue()))) {
try {
Utils.retainOnlySpecificFields(updateCallRequest, Collections.singletonList("faq"));
} catch (IllegalAccessException e) {
throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.FAILED_RETAIN_FIELD));
}
}
isValidDateRange(updateCallRequest, callEntity); isValidDateRange(updateCallRequest, callEntity);
setIfUpdated(callEntity::getName, callEntity::setName, updateCallRequest.getName()); setIfUpdated(callEntity::getName, callEntity::setName, updateCallRequest.getName());
setIfUpdated(callEntity::getDescriptionShort, callEntity::setDescriptionShort, setIfUpdated(callEntity::getDescriptionShort, callEntity::setDescriptionShort,
@@ -652,17 +647,44 @@ public class CallDao {
} }
public List<CallDetailsResponseBean> getAllCalls(UserEntity user) { public List<CallDetailsResponseBean> getAllCalls(UserEntity user) {
String type=user.getRoleEntity().getRoleType(); String type = user.getRoleEntity().getRoleType();
List<String> callStatusList =CallStatusEnum.getStatusValues(); List<String> callStatusList = CallStatusEnum.getStatusValues();
if (Boolean.FALSE.equals(ROLE_SUPER_ADMIN.getValue().equals(type))) { if (Boolean.FALSE.equals(ROLE_SUPER_ADMIN.getValue().equals(type))) {
callStatusList = List.of(CallStatusEnum.PUBLISH.getValue()); callStatusList = List.of(CallStatusEnum.PUBLISH.getValue());
} }
List<CallEntity> calls = callRepository.findByStatusInAndHubId(callStatusList, user.getHub().getId()); List<CallEntity> calls = callRepository.findByStatusInAndHubId(callStatusList, user.getHub().getId());
List<Long> callIds = calls.stream().map(CallEntity::getId).collect(Collectors.toList());
Map<String, BeneficiaryPreferredCallEntity> preferredCallsMap = getBeneficiaryPreferredCallsForUser(user, callIds);
return calls.stream() return calls.stream()
.map(this::convertToCallDetailsResponseBean) .map(call -> {
CallDetailsResponseBean responseBean = convertToCallDetailsResponseBean(call);
String key = user.getId() + "_" + call.getId();
BeneficiaryPreferredCallEntity preferredCall = preferredCallsMap.get(key);
Long preferredId = (preferredCall != null && !preferredCall.getIsDeleted()) ? preferredCall.getId() : null;
responseBean.setPreferredCallId(preferredId);
return responseBean;
})
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
public Map<String, BeneficiaryPreferredCallEntity> getBeneficiaryPreferredCallsForUser(UserEntity user, List<Long> callIds) {
List<BeneficiaryPreferredCallEntity> beneficiaryPreferredCalls = beneficiaryPreferredCallRepository
.findByUserIdAndCallIdInAndIsDeletedFalse(user.getId(), callIds);
return beneficiaryPreferredCalls.stream()
.collect(Collectors.toMap(
call -> user.getId() + "_" + call.getCallId(),
call -> call
));
}
public CallResponse validateCallData(CallEntity callEntity) { public CallResponse validateCallData(CallEntity callEntity) {
validateUpdate(callEntity); validateUpdate(callEntity);
CallResponse callResponseBean = getCallResponseBean(callEntity); CallResponse callResponseBean = getCallResponseBean(callEntity);

View File

@@ -97,7 +97,7 @@ public class DocumentDao {
private Long resolveSourceId(Long sourceId, DocumentSourceTypeEnum sourceType) { private Long resolveSourceId(Long sourceId, DocumentSourceTypeEnum sourceType) {
if (sourceType == DocumentSourceTypeEnum.CALL) { if (sourceType == DocumentSourceTypeEnum.CALL) {
CallEntity callEntity = callService.validateCall(sourceId); CallEntity callEntity = callService.validateCall(sourceId);
callDao.validateUpdate(callEntity); // callDao.validateUpdate(callEntity);
return callEntity.getId(); return callEntity.getId();
} }
// else if (sourceType == SourceTypeEnum.APPLICATION) { // else if (sourceType == SourceTypeEnum.APPLICATION) {

View File

@@ -8,6 +8,7 @@ import net.gepafin.tendermanagement.entities.*;
import net.gepafin.tendermanagement.enums.EmailEntityTypeEnum; import net.gepafin.tendermanagement.enums.EmailEntityTypeEnum;
import net.gepafin.tendermanagement.enums.RecipientTypeEnum; import net.gepafin.tendermanagement.enums.RecipientTypeEnum;
import net.gepafin.tendermanagement.enums.StatusTypeEnum; import net.gepafin.tendermanagement.enums.StatusTypeEnum;
import net.gepafin.tendermanagement.entities.*;
import net.gepafin.tendermanagement.model.request.EmailConfig; import net.gepafin.tendermanagement.model.request.EmailConfig;
import net.gepafin.tendermanagement.model.request.EmailLogRequest; import net.gepafin.tendermanagement.model.request.EmailLogRequest;
import net.gepafin.tendermanagement.model.response.SystemEmailTemplateResponse; import net.gepafin.tendermanagement.model.response.SystemEmailTemplateResponse;
@@ -59,10 +60,9 @@ public class EmailNotificationDao {
private EmailLogRepository emailLogRepository; private EmailLogRepository emailLogRepository;
private void sendEmail(ApplicationAmendmentRequestEntity amendmentRequest, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum templateType, private void sendEmail(ApplicationEntity applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum templateType,
Map<String, String> bodyPlaceholders, List<String> additionalRecipients) { Map<String, String> bodyPlaceholders, List<String> additionalRecipients) {
ApplicationEntity applicationEntity = applicationService.validateApplication(amendmentRequest.getApplicationId());
HubEntity hubEntity = hubService.valdateHub(applicationEntity.getHubId()); HubEntity hubEntity = hubService.valdateHub(applicationEntity.getHubId());
String service = determineService(applicationEntity.getHubId()); String service = determineService(applicationEntity.getHubId());
String legalMail = service.equals("Gepafin S.p.a.") ? "bandi.gepafin@legalmail.it" : "bandi.sviluppumbria@legalmail.it"; String legalMail = service.equals("Gepafin S.p.a.") ? "bandi.gepafin@legalmail.it" : "bandi.sviluppumbria@legalmail.it";
@@ -77,7 +77,7 @@ public class EmailNotificationDao {
UserEntity userEntity = userService.validateUser(applicationEntity.getUserId()); UserEntity userEntity = userService.validateUser(applicationEntity.getUserId());
List<String> recipientEmails = getRecipientEmails(applicationEntity, userEntity, additionalRecipients); List<String> recipientEmails = getRecipientEmails(applicationEntity, userEntity, additionalRecipients);
EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY,userEntity.getBeneficiary().getId(),subject,body, StatusTypeEnum.SUCCESS.getValue(), null, amendmentRequest.getId(), EmailEntityTypeEnum.AMENDMENT,Utils.listToCommaSeparatedString(recipientEmails),userEntity.getId()); EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY,userEntity.getBeneficiary().getId(),subject,body, StatusTypeEnum.SUCCESS.getValue(), null, applicationEntity.getId(), EmailEntityTypeEnum.AMENDMENT,Utils.listToCommaSeparatedString(recipientEmails),userEntity.getId());
sendMail(applicationEntity.getHubId(), subject, body, recipientEmails,emailLogRequest); sendMail(applicationEntity.getHubId(), subject, body, recipientEmails,emailLogRequest);
} }
@@ -138,7 +138,7 @@ public class EmailNotificationDao {
log.error("Failed to parse form fields JSON: ", e); log.error("Failed to parse form fields JSON: ", e);
} }
bodyPlaceholders.put("{{note}}", applicationAmendmentRequest.getNote()); bodyPlaceholders.put("{{note}}", applicationAmendmentRequest.getNote());
sendEmail(applicationAmendmentRequest, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.DOCUMENTATION_INTEGRATION_REQUEST, bodyPlaceholders, null); sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.DOCUMENTATION_INTEGRATION_REQUEST, bodyPlaceholders, null);
} }
public void sendApplicationFailureNotificationEmail(ApplicationAmendmentRequestEntity amendmentRequest) { public void sendApplicationFailureNotificationEmail(ApplicationAmendmentRequestEntity amendmentRequest) {
@@ -155,32 +155,28 @@ public class EmailNotificationDao {
} }
bodyPlaceholders.put("{{date_time_emailSend}}", DateTimeUtil.formatLocalDateTime(lastReminderDateTime, GepafinConstant.DD_MM_YYYY)); bodyPlaceholders.put("{{date_time_emailSend}}", DateTimeUtil.formatLocalDateTime(lastReminderDateTime, GepafinConstant.DD_MM_YYYY));
sendEmail(amendmentRequest, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE, bodyPlaceholders, null); sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE, bodyPlaceholders, null);
} }
public void sendAdmissibilityNotificationEmailForApprovedApplication(ApplicationAmendmentRequestEntity amendmentRequest) { public void sendAdmissibilityNotificationEmailForApprovedApplication(ApplicationEntity applicationEntity) {
ApplicationEntity applicationEntity = applicationService.validateApplication(amendmentRequest.getApplicationId());
Map<String, String> bodyPlaceholders = new HashMap<>(); Map<String, String> bodyPlaceholders = new HashMap<>();
bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName()); bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
bodyPlaceholders.put("{{protocol_number}}", amendmentRequest.getProtocol().getProtocolNumber().toString()); bodyPlaceholders.put("{{protocol_number}}", applicationEntity.getProtocol().getProtocolNumber().toString());
bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatCreatedDate(amendmentRequest.getProtocol().getCreatedDate())); bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatCreatedDate(applicationEntity.getProtocol().getCreatedDate()));
bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(amendmentRequest.getProtocol().getTime(), GepafinConstant.HH_MM_SS)); bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(applicationEntity.getProtocol().getTime(), GepafinConstant.HH_MM_SS));
sendEmail(amendmentRequest, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.ADMISSIBILITY_NOTIFICATION, bodyPlaceholders, null); sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.ADMISSIBILITY_NOTIFICATION, bodyPlaceholders, null);
} }
public void sendInadmissibilityEmailForRejectedApplication(ApplicationAmendmentRequestEntity amendmentRequest) { public void sendInadmissibilityEmailForRejectedApplication(ApplicationEntity applicationEntity,ApplicationEvaluationEntity applicationEvaluationEntity) {
ApplicationEntity applicationEntity = applicationService.validateApplication(amendmentRequest.getApplicationId());
Map<String, String> bodyPlaceholders = new HashMap<>(); Map<String, String> bodyPlaceholders = new HashMap<>();
bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName()); bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
bodyPlaceholders.put("{{protocol_number}}", amendmentRequest.getProtocol().getProtocolNumber().toString()); bodyPlaceholders.put("{{protocol_number}}", applicationEntity.getProtocol().getProtocolNumber().toString());
bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatCreatedDate(amendmentRequest.getProtocol().getCreatedDate())); bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatCreatedDate(applicationEntity.getProtocol().getCreatedDate()));
bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(amendmentRequest.getProtocol().getTime(), GepafinConstant.HH_MM_SS)); bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(applicationEntity.getProtocol().getTime(), GepafinConstant.HH_MM_SS));
bodyPlaceholders.put("{{form_text}}", amendmentRequest.getNote()); bodyPlaceholders.put("{{form_text}}", applicationEvaluationEntity.getNote());
sendEmail(amendmentRequest, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_TEMPLATE, bodyPlaceholders, null); sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_TEMPLATE, bodyPlaceholders, null);
} }
public void sendMail(Long hubId, String subject, String body, List<String> recipientEmails, EmailLogRequest emailLogRequest) { public void sendMail(Long hubId, String subject, String body, List<String> recipientEmails, EmailLogRequest emailLogRequest) {

View File

@@ -72,7 +72,7 @@ public class FlowDao {
} }
public void checkIfFlowExits(CallEntity call) { public void checkIfFlowExits(CallEntity call) {
callDao.validateUpdate(call); // callDao.validateUpdate(call);
List<FlowDataEntity> flowDataEntities = flowDataRepository.findByCallId(call.getId()); List<FlowDataEntity> flowDataEntities = flowDataRepository.findByCallId(call.getId());
List<FlowEdgesEntity> flowEdgesEntities = flowEdgesRepository.findByCallId(call.getId()); List<FlowEdgesEntity> flowEdgesEntities = flowEdgesRepository.findByCallId(call.getId());
if (Boolean.FALSE.equals(flowDataEntities.isEmpty()) || Boolean.FALSE.equals(flowEdgesEntities.isEmpty())) { if (Boolean.FALSE.equals(flowDataEntities.isEmpty()) || Boolean.FALSE.equals(flowEdgesEntities.isEmpty())) {

View File

@@ -173,7 +173,7 @@ public class FormDao {
String choosenField=null; String choosenField=null;
FormEntity formEntity = validateForm(formId); FormEntity formEntity = validateForm(formId);
validator.validateUserWithCall(user, formEntity.getCall().getId()); validator.validateUserWithCall(user, formEntity.getCall().getId());
callDao.validateUpdate(formEntity.getCall()); // callDao.validateUpdate(formEntity.getCall());
List<ContentRequestBean> contentRequestBean = Utils.convertJsonStringToList(formEntity.getContent(), ContentRequestBean.class); List<ContentRequestBean> contentRequestBean = Utils.convertJsonStringToList(formEntity.getContent(), ContentRequestBean.class);
for (ContentRequestBean contentRequestBean1 : contentRequestBean) { for (ContentRequestBean contentRequestBean1 : contentRequestBean) {
FlowDataEntity flowDataEntity = flowDataRepository.findByFormIdAndChoosenField(formEntity.getId(), contentRequestBean1.getId()); FlowDataEntity flowDataEntity = flowDataRepository.findByFormIdAndChoosenField(formEntity.getId(), contentRequestBean1.getId());

View File

@@ -34,4 +34,6 @@ public class BeneficiaryPreferredCallEntity extends BaseEntity{
@Column(name = "STATUS", length = 255) @Column(name = "STATUS", length = 255)
private String status; private String status;
@Column(name="IS_DELETED")
private Boolean isDeleted;
} }

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

@@ -54,4 +54,5 @@ public class CallDetailsResponseBean {
private LocalDateTime updatedDate; private LocalDateTime updatedDate;
private Long preferredCallId;
} }

View File

@@ -73,6 +73,7 @@ public class CallResponse {
private String currentStep; private String currentStep;
private Long preferredCallId;
} }

View File

@@ -23,6 +23,11 @@ public interface ApplicationAmendmentRequestRepository extends JpaRepository<App
@Query(value = "SELECT amr FROM ApplicationAmendmentRequestEntity amr " + "WHERE amr.applicationEvaluationEntity.id = :id " + "AND amr.applicationEvaluationEntity.isDeleted = false") @Query(value = "SELECT amr FROM ApplicationAmendmentRequestEntity amr " + "WHERE amr.applicationEvaluationEntity.id = :id " + "AND amr.applicationEvaluationEntity.isDeleted = false")
ApplicationAmendmentRequestEntity findByApplicationEvaluationIdAndIsDeletedFalse(Long id); ApplicationAmendmentRequestEntity findByApplicationEvaluationIdAndIsDeletedFalse(Long id);
@Query(value = "SELECT amr FROM ApplicationAmendmentRequestEntity amr " +
"WHERE amr.applicationEvaluationEntity.id = :id " +
"AND amr.applicationEvaluationEntity.isDeleted = false")
List<ApplicationAmendmentRequestEntity> findAllByApplicationEvaluationIdAndIsDeletedFalse(Long id);
// ApplicationAmendmentRequestEntity findByApplicationIdAndIsDeletedFalse(Long applicationId); // ApplicationAmendmentRequestEntity findByApplicationIdAndIsDeletedFalse(Long applicationId);
List<ApplicationAmendmentRequestEntity> findByApplicationIdAndIsDeletedFalse(Long applicationId); List<ApplicationAmendmentRequestEntity> findByApplicationIdAndIsDeletedFalse(Long applicationId);

View File

@@ -6,13 +6,19 @@ import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
import java.util.Optional;
@Repository @Repository
public interface BeneficiaryPreferredCallRepository extends JpaRepository<BeneficiaryPreferredCallEntity, Long> { public interface BeneficiaryPreferredCallRepository extends JpaRepository<BeneficiaryPreferredCallEntity, Long> {
List<BeneficiaryPreferredCallEntity> findByBeneficiaryId(Long beneficiaryId); List<BeneficiaryPreferredCallEntity> findByBeneficiaryIdAndIsDeletedFalse(Long beneficiaryId);
List<BeneficiaryPreferredCallEntity> findByUserId(Long userId); List<BeneficiaryPreferredCallEntity> findByUserIdAndIsDeletedFalse(Long userId);
@Query("SELECT preferredCall FROM BeneficiaryPreferredCallEntity preferredCall where preferredCall.userId=:userId AND (:companyId is null OR preferredCall.companyId=:companyId)") @Query("SELECT preferredCall FROM BeneficiaryPreferredCallEntity preferredCall where preferredCall.userId=:userId AND (:companyId is null OR preferredCall.companyId=:companyId)")
List<BeneficiaryPreferredCallEntity> findByUserIdAndCompanyId(@Param("userId") Long userId, @Param("companyId") Long companyId); List<BeneficiaryPreferredCallEntity> findByUserIdAndCompanyIdAndIsDeletedFalse(@Param("userId") Long userId, @Param("companyId") Long companyId);
List<BeneficiaryPreferredCallEntity> findByBeneficiaryIdAndCompanyId(Long beneficiaryId,Long companyId); List<BeneficiaryPreferredCallEntity> findByBeneficiaryIdAndCompanyId(Long beneficiaryId,Long companyId);
public List<BeneficiaryPreferredCallEntity> findByUserIdAndCallIdInAndIsDeletedFalse(Long userId, List<Long> callIds);
Optional<BeneficiaryPreferredCallEntity> findByIdAndIsDeletedFalse(Long id);
Optional<BeneficiaryPreferredCallEntity> findByUserIdAndCallIdAndCompanyIdAndIsDeletedFalse(Long userId, Long callId, Long companyId);
} }

View File

@@ -57,7 +57,7 @@ public class CallServiceImpl implements CallService {
public CallResponse getCallById(HttpServletRequest request, Long callId) { public CallResponse getCallById(HttpServletRequest request, Long callId) {
UserEntity user = validator.validateUser(request); UserEntity user = validator.validateUser(request);
CallEntity call = validator.validateUserWithCall(user, callId); CallEntity call = validator.validateUserWithCall(user, callId);
return callDao.getCallById(call); return callDao.getCallById(user,call);
} }
@Override @Override

View File

@@ -1,78 +0,0 @@
package net.gepafin.tendermanagement.util;
import java.util.Arrays;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import com.mailgun.api.v3.MailgunMessagesApi;
import com.mailgun.client.MailgunClient;
@Component
public class MailUtil {
@Value("${apiKey}")
private String apiKeyValue;
@Value("${mailGun_user}")
private String mailGunUser;
@Value("${mailGun_apiKey}")
private String mailGunApiKey;
@Value("${mailGun_domainName}")
private String mailGunDomainName;
@Value("${mailGun_base_url}")
private String mailGunBaseUrl;
@Value("${isMailSendingEnabled}")
private String isEmailSendingEnabled;
@Autowired
private Environment environment;
public Boolean isTestProfileActivated() {
String[] activeProfiles = environment.getActiveProfiles();
return Arrays.stream(activeProfiles).anyMatch("test"::equals);
}
public void sendMailByMailGunAPI(List<String> recipents, List<String> CC, List<String> BCC, String subject,
String body, String replyTo) {
if (Boolean.FALSE.equals(Boolean.parseBoolean(isEmailSendingEnabled))) {
return;
}
MailgunMessagesApi mailgunMessagesApi = MailgunClient.config(mailGunBaseUrl, mailGunApiKey)
.createApi(MailgunMessagesApi.class);
String mailFrom = mailGunUser;
com.mailgun.model.message.Message.MessageBuilder temp = com.mailgun.model.message.Message.builder()
.replyTo(replyTo).from(mailFrom).to(recipents).subject(subject).html(body);
if (Boolean.FALSE.equals(CollectionUtils.isEmpty(CC))) {
temp.cc(CC);
}
if (Boolean.FALSE.equals(CollectionUtils.isEmpty(BCC))) {
temp.bcc(BCC);
}
if (Boolean.FALSE.equals(isTestProfileActivated())) {
com.mailgun.model.message.Message message = temp.build();
mailgunMessagesApi.sendMessage(mailGunDomainName, message);
}
}
public void sendByMailGun(String subject, String body, List<String> receiverEmails, String replyTo) {
sendMailByMailGunAPI(receiverEmails, null, null, subject, body, replyTo);
}
}

View File

@@ -53,13 +53,10 @@ vatCheckNewToken: 66026bd891a51044e90e08c4
spid.ipd.base.url=https://federatest.umbriadigitale.it spid.ipd.base.url=https://federatest.umbriadigitale.it
active.profile.folder=dev active.profile.folder=dev
# MailGun API Key # MailGun API
mailGun_apiKey= 398e3dea1911fe941af261906ec99362-07e2c238-8094421f
mailGun_user=comunicazione@paghiamoci.ai
mailGun_domainName=paghiamoci.ai
mailGun_base_url=https://api.eu.mailgun.net/ mailGun_base_url=https://api.eu.mailgun.net/
# SendinBlue API key
apiKey=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
api.pecUrl=https://ws.pecmassiva.com api.pecUrl=https://ws.pecmassiva.com
#senderEmail=mailer@bflows.net #senderEmail=mailer@bflows.net

View File

@@ -1760,4 +1760,16 @@
</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>
<changeSet id="13-11-2024_2" author="Harish Bagora">
<addColumn tableName="beneficiary_preferred_call">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
</changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -306,3 +306,4 @@ comment.not.associate.with.amendment = Comment Not Associated with Amendment Req
amendment.found.success = Amendment Request Found Successfully. amendment.found.success = Amendment Request Found Successfully.
invalid.amendment.for.comment = Invalid Amendment Request for the Given Comment. invalid.amendment.for.comment = Invalid Amendment Request for the Given Comment.
DD_MM_YYYY_HH_MM = dd_MM_yyyy HH:mm DD_MM_YYYY_HH_MM = dd_MM_yyyy HH:mm
beneficiary.call.duplicate = A preferred call with this call ID and company ID already exists for this user.

View File

@@ -301,3 +301,4 @@ DD_MM_YYYY_HH_MM = dd_MM_yyyy HH:mm
create.application.data.amendment.msg =Emendamento alla domanda inviato con successo create.application.data.amendment.msg =Emendamento alla domanda inviato con successo
beneficiary.email.not.found.msg=L'indirizzo email per il beneficiario non è stato trovato. Si prega di assicurarsi che il beneficiario abbia un indirizzo email valido. beneficiary.email.not.found.msg=L'indirizzo email per il beneficiario non è stato trovato. Si prega di assicurarsi che il beneficiario abbia un indirizzo email valido.
reminder.email.sent.success.msg=Email di promemoria inviata con successo! reminder.email.sent.success.msg=Email di promemoria inviata con successo!
beneficiary.call.duplicate = Una chiamata preferita con questo ID di chiamata e ID azienda esiste già per questo utente.