Resolved Conflicts

This commit is contained in:
harish
2024-10-29 17:07:04 +05:30
10 changed files with 451 additions and 458 deletions

View File

@@ -59,7 +59,7 @@ public class ApplicationAmendmentRequestDao {
private ApplicationFormFieldRepository applicationFormFieldRepository; private ApplicationFormFieldRepository applicationFormFieldRepository;
@Autowired @Autowired
private CommunicationDao communicationDao; private EmailNotificationDao emailNotificationDao;
@Autowired @Autowired
private ApplicationEvaluationService applicationEvaluationService; private ApplicationEvaluationService applicationEvaluationService;
@@ -177,7 +177,7 @@ public class ApplicationAmendmentRequestDao {
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.isSendEmail())){
communicationDao.sendMailToNotifyBeneficiaryRegardingNewAmendment(applicationAmendmentRequestEntity); emailNotificationDao.sendMailToNotifyBeneficiaryRegardingNewAmendment(applicationAmendmentRequestEntity);
} }
return applicationAmendmentRequestResponse; return applicationAmendmentRequestResponse;
} }

View File

@@ -14,7 +14,6 @@ import net.gepafin.tendermanagement.repositories.*;
import net.gepafin.tendermanagement.service.ApplicationService; import net.gepafin.tendermanagement.service.ApplicationService;
import net.gepafin.tendermanagement.service.UserService; import net.gepafin.tendermanagement.service.UserService;
import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.util.Utils;
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.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -31,33 +30,51 @@ public class ApplicationEvaluationDao {
@Autowired @Autowired
private ApplicationEvaluationRepository applicationEvaluationRepository; private ApplicationEvaluationRepository applicationEvaluationRepository;
@Autowired @Autowired
private ApplicationService applicationService; private ApplicationService applicationService;
@Autowired @Autowired
private CallRepository callRepository; private CallRepository callRepository;
@Autowired @Autowired
private ApplicationRepository applicationRepository; private ApplicationRepository applicationRepository;
@Autowired @Autowired
private UserService userService; private UserService userService;
@Autowired @Autowired
private EvaluationCriteriaRepository evaluationCriteriaRepository; private EvaluationCriteriaRepository evaluationCriteriaRepository;
@Autowired @Autowired
private FormRepository formRepository; private FormRepository formRepository;
@Autowired @Autowired
private CallTargetAudienceChecklistRepository callTargetAudienceChecklistRepository; private CallTargetAudienceChecklistRepository callTargetAudienceChecklistRepository;
@Autowired @Autowired
private DocumentRepository documentRepository; private DocumentRepository documentRepository;
@Autowired @Autowired
private ApplicationFormRepository applicationFormRepository; private ApplicationFormRepository applicationFormRepository;
@Autowired @Autowired
private ApplicationFormFieldRepository applicationFormFieldRepository; private ApplicationFormFieldRepository applicationFormFieldRepository;
@Autowired @Autowired
private AssignedApplicationsRepository assignedApplicationsRepository; private AssignedApplicationsRepository assignedApplicationsRepository;
@Autowired @Autowired
private CriteriaFormFieldRepository criteriaFormFieldRepository; private CriteriaFormFieldRepository criteriaFormFieldRepository;
@Autowired
private EmailNotificationDao emailNotificationDao;
@Autowired
ApplicationAmendmentRequestRepository applicationAmendmentRequestRepository;
private ApplicationEvaluationEntity convertToEntity(UserEntity user, ApplicationEvaluationRequest req, Long assignedApplciationId) { private ApplicationEvaluationEntity convertToEntity(UserEntity user, ApplicationEvaluationRequest req, Long assignedApplciationId) {
ApplicationEvaluationEntity entity = new ApplicationEvaluationEntity(); ApplicationEvaluationEntity entity = new ApplicationEvaluationEntity();
AssignedApplicationsEntity assignedApplications = assignedApplicationsRepository.findByIdAndIsDeletedFalse(assignedApplciationId).orElse(null); AssignedApplicationsEntity assignedApplications = assignedApplicationsRepository.findByIdAndIsDeletedFalse(assignedApplciationId).orElse(null);
@@ -75,6 +92,7 @@ public class ApplicationEvaluationDao {
} }
private ApplicationEvaluationResponse convertToResponse(ApplicationEvaluationEntity entity) { private ApplicationEvaluationResponse convertToResponse(ApplicationEvaluationEntity entity) {
ApplicationEvaluationResponse response = new ApplicationEvaluationResponse(); ApplicationEvaluationResponse response = new ApplicationEvaluationResponse();
populateBasicDetails(entity, response); populateBasicDetails(entity, response);
@@ -93,6 +111,7 @@ public class ApplicationEvaluationDao {
} }
private void populateBasicDetails(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response) { private void populateBasicDetails(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response) {
response.setId(entity.getId()); response.setId(entity.getId());
response.setApplicationId(entity.getApplicationId()); response.setApplicationId(entity.getApplicationId());
AssignedApplicationsEntity assignedApplications = assignedApplicationsRepository.findByIdAndIsDeletedFalse(entity.getAssignedApplicationsEntity().getId()).orElse(null); AssignedApplicationsEntity assignedApplications = assignedApplicationsRepository.findByIdAndIsDeletedFalse(entity.getAssignedApplicationsEntity().getId()).orElse(null);
@@ -106,18 +125,17 @@ public class ApplicationEvaluationDao {
private void setCriteriaResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List<EvaluationCriteriaEntity> evaluationCriterias) { private void setCriteriaResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List<EvaluationCriteriaEntity> evaluationCriterias) {
List<CriteriaResponse> criteriaResponsesFromEntity = entity.getCriteria() != null
? Utils.convertJsonToList(entity.getCriteria(), new TypeReference<List<CriteriaResponse>>() { List<CriteriaResponse> criteriaResponsesFromEntity = entity.getCriteria() != null ?
}) Utils.convertJsonToList(entity.getCriteria(), new TypeReference<List<CriteriaResponse>>() {
: new ArrayList<>(); }) :
new ArrayList<>();
List<CriteriaResponse> criteriaResponsesFromDB = getCriteriaResponse(entity.getApplicationId()); List<CriteriaResponse> criteriaResponsesFromDB = getCriteriaResponse(entity.getApplicationId());
addMissingCriteriaResponses(criteriaResponsesFromEntity, criteriaResponsesFromDB, entity.getApplicationId()); addMissingCriteriaResponses(criteriaResponsesFromEntity, criteriaResponsesFromDB, entity.getApplicationId());
criteriaResponsesFromEntity.forEach(criteriaResponse -> { criteriaResponsesFromEntity.forEach(criteriaResponse -> {
EvaluationCriteriaEntity matchingEvaluationCriteria = evaluationCriterias.stream() EvaluationCriteriaEntity matchingEvaluationCriteria = evaluationCriterias.stream()
.filter(evaluationCriteria -> evaluationCriteria.getId().equals(criteriaResponse.getId())) .filter(evaluationCriteria -> evaluationCriteria.getId().equals(criteriaResponse.getId())).findFirst().orElse(null);
.findFirst()
.orElse(null);
if (matchingEvaluationCriteria != null) { if (matchingEvaluationCriteria != null) {
criteriaResponse.setLabel(matchingEvaluationCriteria.getLookupData().getValue()); criteriaResponse.setLabel(matchingEvaluationCriteria.getLookupData().getValue());
@@ -132,9 +150,8 @@ public class ApplicationEvaluationDao {
} }
private void addMissingCriteriaResponses(List<CriteriaResponse> criteriaResponsesFromEntity, List<CriteriaResponse> criteriaResponsesFromDB, Long applicationId) { private void addMissingCriteriaResponses(List<CriteriaResponse> criteriaResponsesFromEntity, List<CriteriaResponse> criteriaResponsesFromDB, Long applicationId) {
Set<Long> existingCriteriaIds = criteriaResponsesFromEntity.stream()
.map(CriteriaResponse::getId) Set<Long> existingCriteriaIds = criteriaResponsesFromEntity.stream().map(CriteriaResponse::getId).collect(Collectors.toSet());
.collect(Collectors.toSet());
for (CriteriaResponse dbResponse : criteriaResponsesFromDB) { for (CriteriaResponse dbResponse : criteriaResponsesFromDB) {
if (!existingCriteriaIds.contains(dbResponse.getId())) { if (!existingCriteriaIds.contains(dbResponse.getId())) {
@@ -146,8 +163,8 @@ public class ApplicationEvaluationDao {
} }
private List<CriteriaMappedField> getMappedFieldsForCriteria(Long evaluationCriteriaId, Long applicationId) { private List<CriteriaMappedField> getMappedFieldsForCriteria(Long evaluationCriteriaId, Long applicationId) {
List<CriteriaFormFieldEntity> criteriaFormFields = criteriaFormFieldRepository
.findByEvaluationCriteriaIdAndIsDeletedFalse(evaluationCriteriaId); List<CriteriaFormFieldEntity> criteriaFormFields = criteriaFormFieldRepository.findByEvaluationCriteriaIdAndIsDeletedFalse(evaluationCriteriaId);
List<CriteriaMappedField> mappedFields = new ArrayList<>(); List<CriteriaMappedField> mappedFields = new ArrayList<>();
Set<String> uniqueFieldIds = new HashSet<>(); Set<String> uniqueFieldIds = new HashSet<>();
@@ -164,25 +181,22 @@ public class ApplicationEvaluationDao {
FormEntity formEntity = formRepository.findById(formField.getFormId()).orElse(null); FormEntity formEntity = formRepository.findById(formField.getFormId()).orElse(null);
if (formEntity != null) { if (formEntity != null) {
List<ContentResponseBean> contentBeans = Utils.convertJsonStringToList(formEntity.getContent(), ContentResponseBean.class); List<ContentResponseBean> contentBeans = Utils.convertJsonStringToList(formEntity.getContent(), ContentResponseBean.class);
contentBeans.stream() contentBeans.stream().filter(contentBean -> contentBean.getId().equals(formFieldId)).findFirst().ifPresent(contentBean -> {
.filter(contentBean -> contentBean.getId().equals(formFieldId)) String label = contentBean.getLabel();
.findFirst() if (contentBean.getSettings() != null) {
.ifPresent(contentBean -> { for (SettingResponseBean setting : contentBean.getSettings()) {
String label = contentBean.getLabel(); if ("label".equals(setting.getName())) {
if (contentBean.getSettings() != null) { label = setting.getValue() != null ? setting.getValue().toString() : label;
for (SettingResponseBean setting : contentBean.getSettings()) { break;
if ("label".equals(setting.getName())) {
label = setting.getValue() != null ? setting.getValue().toString() : label;
break;
}
}
} }
mappedField.setFieldLabel(label); }
}); }
mappedField.setFieldLabel(label);
});
} }
Optional<ApplicationFormFieldEntity> formFieldEntityOptional = applicationFormFieldRepository Optional<ApplicationFormFieldEntity> formFieldEntityOptional = applicationFormFieldRepository.findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId(
.findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId(formFieldId, applicationForm.getId(), applicationId); formFieldId, applicationForm.getId(), applicationId);
formFieldEntityOptional.ifPresent(field -> mappedField.setFieldValue(field.getFieldValue())); formFieldEntityOptional.ifPresent(field -> mappedField.setFieldValue(field.getFieldValue()));
@@ -195,19 +209,18 @@ public class ApplicationEvaluationDao {
} }
private void setChecklistResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List<CallTargetAudienceChecklistEntity> checklistEntities) { private void setChecklistResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List<CallTargetAudienceChecklistEntity> checklistEntities) {
List<ChecklistResponse> checklistResponsesFromEntity = entity.getChecklist() != null
? Utils.convertJsonToList(entity.getChecklist(), new TypeReference<List<ChecklistResponse>>() { List<ChecklistResponse> checklistResponsesFromEntity = entity.getChecklist() != null ?
}) Utils.convertJsonToList(entity.getChecklist(), new TypeReference<List<ChecklistResponse>>() {
: new ArrayList<>(); }) :
new ArrayList<>();
List<ChecklistResponse> checklistResponsesFromDB = getChecklistResponse(entity.getApplicationId()); List<ChecklistResponse> checklistResponsesFromDB = getChecklistResponse(entity.getApplicationId());
addMissingChecklistResponses(checklistResponsesFromEntity, checklistResponsesFromDB); addMissingChecklistResponses(checklistResponsesFromEntity, checklistResponsesFromDB);
checklistResponsesFromEntity.forEach(checklistResponse -> { checklistResponsesFromEntity.forEach(checklistResponse -> {
CallTargetAudienceChecklistEntity matchingChecklist = checklistEntities.stream() CallTargetAudienceChecklistEntity matchingChecklist = checklistEntities.stream().filter(checklistEntity -> checklistEntity.getId().equals(checklistResponse.getId()))
.filter(checklistEntity -> checklistEntity.getId().equals(checklistResponse.getId())) .findFirst().orElse(null);
.findFirst()
.orElse(null);
if (matchingChecklist != null) { if (matchingChecklist != null) {
checklistResponse.setLabel(matchingChecklist.getLookupData().getValue()); checklistResponse.setLabel(matchingChecklist.getLookupData().getValue());
@@ -218,9 +231,8 @@ public class ApplicationEvaluationDao {
} }
private void addMissingChecklistResponses(List<ChecklistResponse> checklistResponsesFromEntity, List<ChecklistResponse> checklistResponsesFromDB) { private void addMissingChecklistResponses(List<ChecklistResponse> checklistResponsesFromEntity, List<ChecklistResponse> checklistResponsesFromDB) {
Set<Long> existingChecklistIds = checklistResponsesFromEntity.stream()
.map(ChecklistResponse::getId) Set<Long> existingChecklistIds = checklistResponsesFromEntity.stream().map(ChecklistResponse::getId).collect(Collectors.toSet());
.collect(Collectors.toSet());
for (ChecklistResponse dbResponse : checklistResponsesFromDB) { for (ChecklistResponse dbResponse : checklistResponsesFromDB) {
if (!existingChecklistIds.contains(dbResponse.getId())) { if (!existingChecklistIds.contains(dbResponse.getId())) {
@@ -230,10 +242,9 @@ public class ApplicationEvaluationDao {
} }
private void setFieldResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List<ApplicationFormEntity> applicationFormEntities) { private void setFieldResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List<ApplicationFormEntity> applicationFormEntities) {
List<FieldResponse> fieldResponsesFromEntity = entity.getFile() != null
? Utils.convertJsonToList(entity.getFile(), new TypeReference<List<FieldResponse>>() { List<FieldResponse> fieldResponsesFromEntity = entity.getFile() != null ? Utils.convertJsonToList(entity.getFile(), new TypeReference<List<FieldResponse>>() {
}) }) : new ArrayList<>();
: new ArrayList<>();
List<FieldResponse> fieldResponsesFromDB = getFieldResponses(entity.getApplicationId()); List<FieldResponse> fieldResponsesFromDB = getFieldResponses(entity.getApplicationId());
addMissingFieldResponses(fieldResponsesFromEntity, fieldResponsesFromDB); addMissingFieldResponses(fieldResponsesFromEntity, fieldResponsesFromDB);
@@ -261,10 +272,9 @@ public class ApplicationEvaluationDao {
} }
fieldResponse.setLabel(label); fieldResponse.setLabel(label);
Optional<ApplicationFormFieldEntity> optionalFormField = applicationFormFieldRepository Optional<ApplicationFormFieldEntity> optionalFormField =
.findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId( applicationFormFieldRepository.findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId(
fieldResponse.getId(), applicationForm.getId(), entity.getApplicationId() fieldResponse.getId(), applicationForm.getId(), entity.getApplicationId());
);
if (optionalFormField.isPresent()) { if (optionalFormField.isPresent()) {
ApplicationFormFieldEntity formField = optionalFormField.get(); ApplicationFormFieldEntity formField = optionalFormField.get();
@@ -301,9 +311,8 @@ public class ApplicationEvaluationDao {
} }
private void addMissingFieldResponses(List<FieldResponse> fieldResponsesFromEntity, List<FieldResponse> fieldResponsesFromDB) { private void addMissingFieldResponses(List<FieldResponse> fieldResponsesFromEntity, List<FieldResponse> fieldResponsesFromDB) {
Set<String> existingFieldIds = fieldResponsesFromEntity.stream()
.map(FieldResponse::getId) Set<String> existingFieldIds = fieldResponsesFromEntity.stream().map(FieldResponse::getId).collect(Collectors.toSet());
.collect(Collectors.toSet());
for (FieldResponse dbResponse : fieldResponsesFromDB) { for (FieldResponse dbResponse : fieldResponsesFromDB) {
if (!existingFieldIds.contains(dbResponse.getId())) { if (!existingFieldIds.contains(dbResponse.getId())) {
@@ -313,6 +322,7 @@ public class ApplicationEvaluationDao {
} }
private void setApplicationDetails(ApplicationEvaluationResponse response, ApplicationEvaluationEntity entity) { private void setApplicationDetails(ApplicationEvaluationResponse response, ApplicationEvaluationEntity entity) {
ApplicationEntity application = applicationService.validateApplication(entity.getApplicationId() != null ? entity.getApplicationId() : null); ApplicationEntity application = applicationService.validateApplication(entity.getApplicationId() != null ? entity.getApplicationId() : null);
UserEntity user = userService.validateUser(application.getUserId()); UserEntity user = userService.validateUser(application.getUserId());
@@ -323,8 +333,8 @@ public class ApplicationEvaluationDao {
String beneficiary = String.join(" ", firstName, lastName).trim(); String beneficiary = String.join(" ", firstName, lastName).trim();
response.setApplicationStatus(ApplicationStatusTypeEnum.valueOf(application.getStatus())); response.setApplicationStatus(ApplicationStatusTypeEnum.valueOf(application.getStatus()));
response.setBeneficiary(beneficiary); response.setBeneficiary(beneficiary);
response.setMinScore(call.getThreshold()!=null?call.getThreshold():null); response.setMinScore(call.getThreshold() != null ? call.getThreshold() : null);
response.setCallName(application.getCall().getName()!=null?application.getCall().getName():null); response.setCallName(application.getCall().getName() != null ? application.getCall().getName() : null);
response.setProtocolNumber(application.getProtocol() != null ? application.getProtocol().getProtocolNumber() : null); response.setProtocolNumber(application.getProtocol() != null ? application.getProtocol().getProtocolNumber() : null);
response.setSubmissionDate(application.getSubmissionDate() != null ? application.getSubmissionDate() : null); response.setSubmissionDate(application.getSubmissionDate() != null ? application.getSubmissionDate() : null);
response.setEvaluationDate(application.getSubmissionDate() != null ? application.getSubmissionDate().plusDays(30) : null); response.setEvaluationDate(application.getSubmissionDate() != null ? application.getSubmissionDate().plusDays(30) : null);
@@ -367,151 +377,123 @@ public class ApplicationEvaluationDao {
private List<ChecklistRequest> filterNonNullChecklist(List<ChecklistRequest> checklistRequests) { private List<ChecklistRequest> filterNonNullChecklist(List<ChecklistRequest> checklistRequests) {
return checklistRequests.stream()
.filter(request -> request.getValid() != null) return checklistRequests.stream().filter(request -> request.getValid() != null).collect(Collectors.toList());
.collect(Collectors.toList());
} }
private List<CriteriaRequest> filterNonNullCriteria(List<CriteriaRequest> criteriaRequests) { private List<CriteriaRequest> filterNonNullCriteria(List<CriteriaRequest> criteriaRequests) {
return criteriaRequests.stream()
.filter(request -> request.getScore() != null && request.getValid() != null) return criteriaRequests.stream().filter(request -> request.getScore() != null && request.getValid() != null).collect(Collectors.toList());
.collect(Collectors.toList());
} }
private List<FieldRequest> filterNonNullFields(List<FieldRequest> fieldRequests) { private List<FieldRequest> filterNonNullFields(List<FieldRequest> fieldRequests) {
return fieldRequests.stream()
.filter(request -> request.getValid() != null) return fieldRequests.stream().filter(request -> request.getValid() != null).collect(Collectors.toList());
.collect(Collectors.toList());
} }
private List<CriteriaRequest> processCriteria(ApplicationEvaluationEntity entity, ApplicationEvaluationRequest req) { private List<CriteriaRequest> processCriteria(ApplicationEvaluationEntity entity, ApplicationEvaluationRequest req) {
List<CriteriaResponse> existingCriteriaList = entity.getCriteria() != null
? Utils.convertJsonToList(entity.getCriteria(), new TypeReference<List<CriteriaResponse>>() {
})
: new ArrayList<>();
Map<Long, CriteriaResponse> existingCriteriaMap = existingCriteriaList.stream() List<CriteriaResponse> existingCriteriaList = entity.getCriteria() != null ? Utils.convertJsonToList(entity.getCriteria(), new TypeReference<List<CriteriaResponse>>() {
.collect(Collectors.toMap(CriteriaResponse::getId, criteria -> criteria)); }) : new ArrayList<>();
List<CriteriaRequest> updatedCriteriaList = req.getCriteria().stream() Map<Long, CriteriaResponse> existingCriteriaMap = existingCriteriaList.stream().collect(Collectors.toMap(CriteriaResponse::getId, criteria -> criteria));
.map(incoming -> {
CriteriaRequest request = new CriteriaRequest();
request.setId(incoming.getId());
request.setScore(incoming.getScore());
request.setValid(incoming.getValid());
CriteriaResponse existingCriteria = existingCriteriaMap.get(incoming.getId()); List<CriteriaRequest> updatedCriteriaList = req.getCriteria().stream().map(incoming -> {
if (existingCriteria != null) { CriteriaRequest request = new CriteriaRequest();
request.setScore(incoming.getScore() != null ? incoming.getScore() : null); request.setId(incoming.getId());
request.setValid(incoming.getValid() != null ? incoming.getValid() : null); request.setScore(incoming.getScore());
} request.setValid(incoming.getValid());
return request;
}) CriteriaResponse existingCriteria = existingCriteriaMap.get(incoming.getId());
.collect(Collectors.toList()); if (existingCriteria != null) {
request.setScore(incoming.getScore() != null ? incoming.getScore() : null);
request.setValid(incoming.getValid() != null ? incoming.getValid() : null);
}
return request;
}).collect(Collectors.toList());
List<CriteriaRequest> missingCriteriaRequests = existingCriteriaList.stream() List<CriteriaRequest> missingCriteriaRequests = existingCriteriaList.stream()
.filter(existing -> !updatedCriteriaList.stream() .filter(existing -> !updatedCriteriaList.stream().map(CriteriaRequest::getId).toList().contains(existing.getId())).map(existing -> {
.map(CriteriaRequest::getId)
.toList()
.contains(existing.getId()))
.map(existing -> {
CriteriaRequest request = new CriteriaRequest(); CriteriaRequest request = new CriteriaRequest();
request.setId(existing.getId()); request.setId(existing.getId());
request.setScore(existing.getScore()); request.setScore(existing.getScore());
request.setValid(existing.getValid()); request.setValid(existing.getValid());
return request; return request;
}) }).toList();
.toList();
updatedCriteriaList.addAll(missingCriteriaRequests); updatedCriteriaList.addAll(missingCriteriaRequests);
return updatedCriteriaList; return updatedCriteriaList;
} }
private List<ChecklistRequest> processChecklist(ApplicationEvaluationEntity entity, ApplicationEvaluationRequest req) { private List<ChecklistRequest> processChecklist(ApplicationEvaluationEntity entity, ApplicationEvaluationRequest req) {
List<ChecklistResponse> existingChecklistList = entity.getChecklist() != null
? Utils.convertJsonToList(entity.getChecklist(), new TypeReference<List<ChecklistResponse>>() {
})
: new ArrayList<>();
Map<Long, ChecklistResponse> existingChecklistMap = existingChecklistList.stream() List<ChecklistResponse> existingChecklistList = entity.getChecklist() != null ?
.collect(Collectors.toMap(ChecklistResponse::getId, checklist -> checklist)); Utils.convertJsonToList(entity.getChecklist(), new TypeReference<List<ChecklistResponse>>() {
}) :
new ArrayList<>();
List<ChecklistRequest> updatedChecklistList = req.getChecklist().stream() Map<Long, ChecklistResponse> existingChecklistMap = existingChecklistList.stream().collect(Collectors.toMap(ChecklistResponse::getId, checklist -> checklist));
.map(incoming -> {
ChecklistRequest request = new ChecklistRequest();
request.setId(incoming.getId());
request.setValid(incoming.getValid());
ChecklistResponse existingChecklist = existingChecklistMap.get(incoming.getId()); List<ChecklistRequest> updatedChecklistList = req.getChecklist().stream().map(incoming -> {
if (existingChecklist != null && incoming.getValid() == null) { ChecklistRequest request = new ChecklistRequest();
request.setValid(null); request.setId(incoming.getId());
} request.setValid(incoming.getValid());
return request;
}) ChecklistResponse existingChecklist = existingChecklistMap.get(incoming.getId());
.collect(Collectors.toList()); if (existingChecklist != null && incoming.getValid() == null) {
request.setValid(null);
}
return request;
}).collect(Collectors.toList());
List<ChecklistRequest> missingChecklistRequests = existingChecklistList.stream() List<ChecklistRequest> missingChecklistRequests = existingChecklistList.stream()
.filter(existing -> !updatedChecklistList.stream() .filter(existing -> !updatedChecklistList.stream().map(ChecklistRequest::getId).toList().contains(existing.getId())).map(existing -> {
.map(ChecklistRequest::getId)
.toList()
.contains(existing.getId()))
.map(existing -> {
ChecklistRequest request = new ChecklistRequest(); ChecklistRequest request = new ChecklistRequest();
request.setId(existing.getId()); request.setId(existing.getId());
request.setValid(existing.getValid() != null ? existing.getValid() : null); request.setValid(existing.getValid() != null ? existing.getValid() : null);
return request; return request;
}) }).toList();
.toList();
updatedChecklistList.addAll(missingChecklistRequests); updatedChecklistList.addAll(missingChecklistRequests);
return updatedChecklistList; return updatedChecklistList;
} }
private List<FieldRequest> processField(ApplicationEvaluationEntity entity, ApplicationEvaluationRequest req) { private List<FieldRequest> processField(ApplicationEvaluationEntity entity, ApplicationEvaluationRequest req) {
List<FieldResponse> existingFieldList = entity.getFile() != null
? Utils.convertJsonToList(entity.getFile(), new TypeReference<List<FieldResponse>>() {
})
: new ArrayList<>();
Map<String, FieldResponse> existingFieldMap = existingFieldList.stream() List<FieldResponse> existingFieldList = entity.getFile() != null ? Utils.convertJsonToList(entity.getFile(), new TypeReference<List<FieldResponse>>() {
.collect(Collectors.toMap(FieldResponse::getId, field -> field)); }) : new ArrayList<>();
List<FieldRequest> updatedFieldList = req.getFiles().stream() Map<String, FieldResponse> existingFieldMap = existingFieldList.stream().collect(Collectors.toMap(FieldResponse::getId, field -> field));
.map(incoming -> {
FieldRequest request = new FieldRequest();
request.setId(incoming.getId());
request.setValid(incoming.getValid());
FieldResponse existingField = existingFieldMap.get(incoming.getId()); List<FieldRequest> updatedFieldList = req.getFiles().stream().map(incoming -> {
if (existingField != null) { FieldRequest request = new FieldRequest();
request.setValid(incoming.getValid() != null ? incoming.getValid() : null); request.setId(incoming.getId());
} request.setValid(incoming.getValid());
return request;
}) FieldResponse existingField = existingFieldMap.get(incoming.getId());
.collect(Collectors.toList()); if (existingField != null) {
request.setValid(incoming.getValid() != null ? incoming.getValid() : null);
}
return request;
}).collect(Collectors.toList());
List<FieldRequest> missingFieldRequests = existingFieldList.stream() List<FieldRequest> missingFieldRequests = existingFieldList.stream()
.filter(existing -> !updatedFieldList.stream() .filter(existing -> !updatedFieldList.stream().map(FieldRequest::getId).toList().contains(existing.getId())).map(existing -> {
.map(FieldRequest::getId)
.toList()
.contains(existing.getId()))
.map(existing -> {
FieldRequest request = new FieldRequest(); FieldRequest request = new FieldRequest();
request.setId(existing.getId()); request.setId(existing.getId());
request.setValid(existing.getValid()); request.setValid(existing.getValid());
return request; return request;
}) }).toList();
.toList();
updatedFieldList.addAll(missingFieldRequests); updatedFieldList.addAll(missingFieldRequests);
return updatedFieldList; return updatedFieldList;
} }
public ApplicationEvaluationEntity validateApplicationEvaluation(Long id) { public ApplicationEvaluationEntity validateApplicationEvaluation(Long id) {
Optional<ApplicationEvaluationEntity> entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(id); Optional<ApplicationEvaluationEntity> entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(id);
if (entityOptional.isEmpty()) { if (entityOptional.isEmpty()) {
throw new ResourceNotFoundException(Status.NOT_FOUND, throw new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.APPLICATION_EVALUATION_NOT_FOUND, id));
Translator.toLocale(GepafinConstant.APPLICATION_EVALUATION_NOT_FOUND, id));
} }
return entityOptional.get(); return entityOptional.get();
} }
@@ -539,18 +521,19 @@ public class ApplicationEvaluationDao {
} }
public ApplicationEvaluationResponse getEvaluationResponseByApplicationid(UserEntity user, Long applicationId, Long assignedApplicationId) { public ApplicationEvaluationResponse getEvaluationResponseByApplicationid(UserEntity user, Long applicationId, Long assignedApplicationId) {
ApplicationEvaluationEntity entity = new ApplicationEvaluationEntity(); ApplicationEvaluationEntity entity = new ApplicationEvaluationEntity();
ApplicationEvaluationResponse response = new ApplicationEvaluationResponse(); ApplicationEvaluationResponse response = new ApplicationEvaluationResponse();
CallEntity call = null; CallEntity call = null;
ApplicationEntity application=null; ApplicationEntity application = null;
AssignedApplicationsEntity assignedApplications = null; AssignedApplicationsEntity assignedApplications = null;
if (applicationId != null && assignedApplicationId==null) { if (applicationId != null && assignedApplicationId == null) {
application = applicationService.validateApplication(applicationId); application = applicationService.validateApplication(applicationId);
call = callRepository.findCallEntityByApplicationId(applicationId); call = callRepository.findCallEntityByApplicationId(applicationId);
assignedApplications = assignedApplicationsRepository.findByApplicationIdAndIsDeletedFalse(applicationId).orElse(null); assignedApplications = assignedApplicationsRepository.findByApplicationIdAndIsDeletedFalse(applicationId).orElse(null);
} else if (assignedApplicationId != null) { } else if (assignedApplicationId != null) {
assignedApplications = assignedApplicationsRepository.findByIdAndIsDeletedFalse(assignedApplicationId).orElseThrow(() -> assignedApplications = assignedApplicationsRepository.findByIdAndIsDeletedFalse(assignedApplicationId)
new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_NOT_FOUND_MSG))); .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_NOT_FOUND_MSG)));
application = applicationService.validateApplication(assignedApplications.getApplication().getId()); application = applicationService.validateApplication(assignedApplications.getApplication().getId());
call = callRepository.findCallEntityByApplicationId(application.getId()); call = callRepository.findCallEntityByApplicationId(application.getId());
@@ -578,17 +561,15 @@ public class ApplicationEvaluationDao {
return response; return response;
} }
private void setCriteriaResponses(ApplicationEvaluationEntity entity, Long applicationId, ApplicationEvaluationResponse response, List<EvaluationCriteriaEntity> evaluationCriterias) { private void setCriteriaResponses(ApplicationEvaluationEntity entity, Long applicationId, ApplicationEvaluationResponse response,
List<CriteriaResponse> criteriaResponses = entity.getCriteria() != null List<EvaluationCriteriaEntity> evaluationCriterias) {
? Utils.convertJsonToList(entity.getCriteria(), new TypeReference<List<CriteriaResponse>>() {
}) List<CriteriaResponse> criteriaResponses = entity.getCriteria() != null ? Utils.convertJsonToList(entity.getCriteria(), new TypeReference<List<CriteriaResponse>>() {
: getCriteriaResponse(applicationId); }) : getCriteriaResponse(applicationId);
criteriaResponses.forEach(criteriaResponse -> { criteriaResponses.forEach(criteriaResponse -> {
EvaluationCriteriaEntity matchingEvaluationCriteria = evaluationCriterias.stream() EvaluationCriteriaEntity matchingEvaluationCriteria = evaluationCriterias.stream()
.filter(evaluationCriteria -> evaluationCriteria.getId().equals(criteriaResponse.getId())) .filter(evaluationCriteria -> evaluationCriteria.getId().equals(criteriaResponse.getId())).findFirst().orElse(null);
.findFirst()
.orElse(null);
List<ApplicationFormEntity> applicationForms = applicationFormRepository.findByApplicationId(applicationId); List<ApplicationFormEntity> applicationForms = applicationFormRepository.findByApplicationId(applicationId);
Map<String, CriteriaMappedField> mappedFieldMap = new HashMap<>(); Map<String, CriteriaMappedField> mappedFieldMap = new HashMap<>();
@@ -597,8 +578,7 @@ public class ApplicationEvaluationDao {
criteriaResponse.setLabel(matchingEvaluationCriteria.getLookupData().getValue()); criteriaResponse.setLabel(matchingEvaluationCriteria.getLookupData().getValue());
criteriaResponse.setMaxScore(matchingEvaluationCriteria.getScore()); criteriaResponse.setMaxScore(matchingEvaluationCriteria.getScore());
List<CriteriaFormFieldEntity> criteriaFormFields = criteriaFormFieldRepository List<CriteriaFormFieldEntity> criteriaFormFields = criteriaFormFieldRepository.findByEvaluationCriteriaIdAndIsDeletedFalse(matchingEvaluationCriteria.getId());
.findByEvaluationCriteriaIdAndIsDeletedFalse(matchingEvaluationCriteria.getId());
for (ApplicationFormEntity applicationForm : applicationForms) { for (ApplicationFormEntity applicationForm : applicationForms) {
for (CriteriaFormFieldEntity criteriaFormField : criteriaFormFields) { for (CriteriaFormFieldEntity criteriaFormField : criteriaFormFields) {
@@ -610,24 +590,22 @@ public class ApplicationEvaluationDao {
if (formEntity != null) { if (formEntity != null) {
List<ContentResponseBean> contentResponseBeans = Utils.convertJsonStringToList(formEntity.getContent(), ContentResponseBean.class); List<ContentResponseBean> contentResponseBeans = Utils.convertJsonStringToList(formEntity.getContent(), ContentResponseBean.class);
contentResponseBeans.stream() contentResponseBeans.stream().filter(bean -> bean.getId().equals(formFieldId)).findFirst().ifPresent(contentResponseBean -> {
.filter(bean -> bean.getId().equals(formFieldId)) String label = contentResponseBean.getLabel();
.findFirst() if (contentResponseBean.getSettings() != null) {
.ifPresent(contentResponseBean -> { for (SettingResponseBean setting : contentResponseBean.getSettings()) {
String label = contentResponseBean.getLabel(); if ("label".equals(setting.getName())) {
if (contentResponseBean.getSettings() != null) { label = setting.getValue() != null ? setting.getValue().toString() : label;
for (SettingResponseBean setting : contentResponseBean.getSettings()) { break;
if ("label".equals(setting.getName())) {
label = setting.getValue() != null ? setting.getValue().toString() : label;
break;
}
}
} }
mappedField.setFieldLabel(label); }
}); }
mappedField.setFieldLabel(label);
});
} }
Optional<ApplicationFormFieldEntity> formFieldEntityOptional = applicationFormFieldRepository Optional<ApplicationFormFieldEntity> formFieldEntityOptional =
.findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId(formFieldId, applicationForm.getId(), applicationId); applicationFormFieldRepository.findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId(
formFieldId, applicationForm.getId(), applicationId);
formFieldEntityOptional.ifPresent(formField -> mappedField.setFieldValue(formField.getFieldValue())); formFieldEntityOptional.ifPresent(formField -> mappedField.setFieldValue(formField.getFieldValue()));
mappedFieldMap.put(formFieldId, mappedField); mappedFieldMap.put(formFieldId, mappedField);
@@ -641,17 +619,15 @@ public class ApplicationEvaluationDao {
response.setCriteria(criteriaResponses); response.setCriteria(criteriaResponses);
} }
private void setChecklistResponses(ApplicationEvaluationEntity entity, Long applicationId, ApplicationEvaluationResponse response, List<CallTargetAudienceChecklistEntity> checklistEntities) { private void setChecklistResponses(ApplicationEvaluationEntity entity, Long applicationId, ApplicationEvaluationResponse response,
List<ChecklistResponse> checklistResponses = entity.getChecklist() != null List<CallTargetAudienceChecklistEntity> checklistEntities) {
? Utils.convertJsonToList(entity.getChecklist(), new TypeReference<List<ChecklistResponse>>() {
}) List<ChecklistResponse> checklistResponses = entity.getChecklist() != null ? Utils.convertJsonToList(entity.getChecklist(), new TypeReference<List<ChecklistResponse>>() {
: getChecklistResponse(applicationId); }) : getChecklistResponse(applicationId);
checklistResponses.forEach(checklistResponse -> { checklistResponses.forEach(checklistResponse -> {
CallTargetAudienceChecklistEntity matchingChecklist = checklistEntities.stream() CallTargetAudienceChecklistEntity matchingChecklist = checklistEntities.stream().filter(checklistEntity -> checklistEntity.getId().equals(checklistResponse.getId()))
.filter(checklistEntity -> checklistEntity.getId().equals(checklistResponse.getId())) .findFirst().orElse(null);
.findFirst()
.orElse(null);
if (matchingChecklist != null) { if (matchingChecklist != null) {
checklistResponse.setLabel(matchingChecklist.getLookupData().getValue()); checklistResponse.setLabel(matchingChecklist.getLookupData().getValue());
@@ -661,11 +637,11 @@ public class ApplicationEvaluationDao {
response.setChecklist(checklistResponses); response.setChecklist(checklistResponses);
} }
private void setFileResponses(ApplicationEvaluationEntity entity, Long applicationId, ApplicationEvaluationResponse response, List<ApplicationFormEntity> applicationFormEntities) { private void setFileResponses(ApplicationEvaluationEntity entity, Long applicationId, ApplicationEvaluationResponse response,
List<FieldResponse> fieldResponses = entity.getFile() != null List<ApplicationFormEntity> applicationFormEntities) {
? Utils.convertJsonToList(entity.getFile(), new TypeReference<List<FieldResponse>>() {
}) List<FieldResponse> fieldResponses = entity.getFile() != null ? Utils.convertJsonToList(entity.getFile(), new TypeReference<List<FieldResponse>>() {
: getFieldResponses(applicationId); }) : getFieldResponses(applicationId);
Set<String> processedFieldIds = new HashSet<>(); Set<String> processedFieldIds = new HashSet<>();
fieldResponses.forEach(fieldResponse -> { fieldResponses.forEach(fieldResponse -> {
@@ -690,8 +666,9 @@ public class ApplicationEvaluationDao {
} }
fieldResponse.setLabel(label); fieldResponse.setLabel(label);
Optional<ApplicationFormFieldEntity> optionalFormField = applicationFormFieldRepository Optional<ApplicationFormFieldEntity> optionalFormField =
.findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId(fieldResponse.getId(), applicationForm.getId(), applicationId); applicationFormFieldRepository.findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId(
fieldResponse.getId(), applicationForm.getId(), applicationId);
if (optionalFormField.isPresent() && optionalFormField.get().getFieldValue() != null) { if (optionalFormField.isPresent() && optionalFormField.get().getFieldValue() != null) {
String[] documentIds = optionalFormField.get().getFieldValue().split(","); String[] documentIds = optionalFormField.get().getFieldValue().split(",");
@@ -727,8 +704,8 @@ public class ApplicationEvaluationDao {
response.setFiles(fieldResponses); response.setFiles(fieldResponses);
} }
private void setApplicationDetails(ApplicationEvaluationResponse response, Long applicationId, UserEntity user) { private void setApplicationDetails(ApplicationEvaluationResponse response, Long applicationId, UserEntity user) {
ApplicationEntity application = applicationService.validateApplication(applicationId); ApplicationEntity application = applicationService.validateApplication(applicationId);
userService.validateUser(application.getUserId()); userService.validateUser(application.getUserId());
String firstName = user.getFirstName() != null ? user.getFirstName() : ""; String firstName = user.getFirstName() != null ? user.getFirstName() : "";
@@ -737,7 +714,7 @@ public class ApplicationEvaluationDao {
String beneficiary = String.join(" ", firstName, lastName).trim(); String beneficiary = String.join(" ", firstName, lastName).trim();
response.setBeneficiary(beneficiary); response.setBeneficiary(beneficiary);
response.setCallName(application.getCall().getName()!=null?application.getCall().getName():null); response.setCallName(application.getCall().getName() != null ? application.getCall().getName() : null);
response.setProtocolNumber(application.getProtocol() != null ? application.getProtocol().getProtocolNumber() : null); response.setProtocolNumber(application.getProtocol() != null ? application.getProtocol().getProtocolNumber() : null);
response.setSubmissionDate(application.getSubmissionDate() != null ? application.getSubmissionDate() : null); response.setSubmissionDate(application.getSubmissionDate() != null ? application.getSubmissionDate() : null);
response.setEvaluationDate(application.getSubmissionDate() != null ? application.getSubmissionDate().plusDays(30) : null); response.setEvaluationDate(application.getSubmissionDate() != null ? application.getSubmissionDate().plusDays(30) : null);
@@ -745,6 +722,7 @@ public class ApplicationEvaluationDao {
} }
List<CriteriaResponse> getCriteriaResponse(Long applicationId) { List<CriteriaResponse> getCriteriaResponse(Long applicationId) {
CallEntity call = callRepository.findCallEntityByApplicationId(applicationId); CallEntity call = callRepository.findCallEntityByApplicationId(applicationId);
List<EvaluationCriteriaEntity> evaluationCriterias = evaluationCriteriaRepository.findByCallId(call.getId()); List<EvaluationCriteriaEntity> evaluationCriterias = evaluationCriteriaRepository.findByCallId(call.getId());
@@ -756,8 +734,7 @@ public class ApplicationEvaluationDao {
response.setMaxScore(criteria.getScore()); response.setMaxScore(criteria.getScore());
response.setValid(null); response.setValid(null);
List<CriteriaFormFieldEntity> criteriaFormFields = criteriaFormFieldRepository List<CriteriaFormFieldEntity> criteriaFormFields = criteriaFormFieldRepository.findByEvaluationCriteriaIdAndIsDeletedFalse(criteria.getId());
.findByEvaluationCriteriaIdAndIsDeletedFalse(criteria.getId());
List<CriteriaMappedField> mappedFields = new ArrayList<>(); List<CriteriaMappedField> mappedFields = new ArrayList<>();
Set<String> processedFormFieldIds = new HashSet<>(); Set<String> processedFormFieldIds = new HashSet<>();
@@ -772,32 +749,24 @@ public class ApplicationEvaluationDao {
FormEntity formEntity = formRepository.findById(criteriaFormField.getFormId()).orElse(null); FormEntity formEntity = formRepository.findById(criteriaFormField.getFormId()).orElse(null);
if (formEntity != null) { if (formEntity != null) {
List<ContentResponseBean> contentResponseBeans = Utils.convertJsonStringToList( List<ContentResponseBean> contentResponseBeans = Utils.convertJsonStringToList(formEntity.getContent(), ContentResponseBean.class);
formEntity.getContent(), ContentResponseBean.class); contentResponseBeans.stream().filter(bean -> bean.getId().equals(criteriaFormField.getFormFieldId())).findFirst().ifPresent(contentResponseBean -> {
contentResponseBeans.stream() String label = contentResponseBean.getLabel();
.filter(bean -> bean.getId().equals(criteriaFormField.getFormFieldId())) if (contentResponseBean.getSettings() != null) {
.findFirst() for (SettingResponseBean setting : contentResponseBean.getSettings()) {
.ifPresent(contentResponseBean -> { if ("label".equals(setting.getName())) {
String label = contentResponseBean.getLabel(); label = setting.getValue() != null ? setting.getValue().toString() : label;
if (contentResponseBean.getSettings() != null) { break;
for (SettingResponseBean setting : contentResponseBean.getSettings()) {
if ("label".equals(setting.getName())) {
label = setting.getValue() != null ? setting.getValue().toString() : label;
break;
}
}
} }
mappedField.setFieldLabel(label); }
}); }
mappedField.setFieldLabel(label);
});
} }
applicationFormRepository.findByApplicationId(applicationId).stream() applicationFormRepository.findByApplicationId(applicationId).stream().flatMap(
.flatMap(applicationForm -> applicationFormFieldRepository applicationForm -> applicationFormFieldRepository.findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId(criteriaFormField.getFormFieldId(),
.findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId( applicationForm.getId(), applicationId).stream()).findFirst().ifPresent(formField -> mappedField.setFieldValue(formField.getFieldValue()));
criteriaFormField.getFormFieldId(), applicationForm.getId(), applicationId)
.stream())
.findFirst()
.ifPresent(formField -> mappedField.setFieldValue(formField.getFieldValue()));
mappedFields.add(mappedField); mappedFields.add(mappedField);
processedFormFieldIds.add(criteriaFormField.getFormFieldId()); processedFormFieldIds.add(criteriaFormField.getFormFieldId());
@@ -811,6 +780,7 @@ public class ApplicationEvaluationDao {
} }
List<ChecklistResponse> getChecklistResponse(Long applicationId) { List<ChecklistResponse> getChecklistResponse(Long applicationId) {
CallEntity call = callRepository.findCallEntityByApplicationId(applicationId); CallEntity call = callRepository.findCallEntityByApplicationId(applicationId);
List<CallTargetAudienceChecklistEntity> checklistEntities = callTargetAudienceChecklistRepository.findByCallId(call.getId()); List<CallTargetAudienceChecklistEntity> checklistEntities = callTargetAudienceChecklistRepository.findByCallId(call.getId());
List<ChecklistResponse> checklistResponses = checklistEntities.stream().map(checklist -> { List<ChecklistResponse> checklistResponses = checklistEntities.stream().map(checklist -> {
@@ -826,6 +796,7 @@ public class ApplicationEvaluationDao {
} }
public List<FieldResponse> getFieldResponses(Long applicationId) { public List<FieldResponse> getFieldResponses(Long applicationId) {
List<ApplicationFormEntity> applicationFormEntities = applicationFormRepository.findByApplicationId(applicationId); List<ApplicationFormEntity> applicationFormEntities = applicationFormRepository.findByApplicationId(applicationId);
List<FieldResponse> fieldResponses = new ArrayList<>(); List<FieldResponse> fieldResponses = new ArrayList<>();
@@ -840,8 +811,8 @@ public class ApplicationEvaluationDao {
String fieldId = contentResponseBean.getId(); String fieldId = contentResponseBean.getId();
Long applicationFormId = applicationForm.getId(); Long applicationFormId = applicationForm.getId();
Optional<ApplicationFormFieldEntity> optionalFormField = applicationFormFieldRepository Optional<ApplicationFormFieldEntity> optionalFormField = applicationFormFieldRepository.findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId(
.findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId(fieldId, applicationFormId, applicationId); fieldId, applicationFormId, applicationId);
if (optionalFormField.isPresent()) { if (optionalFormField.isPresent()) {
ApplicationFormFieldEntity formField = optionalFormField.get(); ApplicationFormFieldEntity formField = optionalFormField.get();
@@ -893,36 +864,46 @@ public class ApplicationEvaluationDao {
} }
public void deleteById(Long id) { public void deleteById(Long id) {
ApplicationEvaluationEntity applicationEvaluationEntity = validateApplicationEvaluation(id); ApplicationEvaluationEntity applicationEvaluationEntity = validateApplicationEvaluation(id);
applicationEvaluationEntity.setIsDeleted(true); applicationEvaluationEntity.setIsDeleted(true);
applicationEvaluationEntity = saveApplicationEvaluationEntity(applicationEvaluationEntity); saveApplicationEvaluationEntity(applicationEvaluationEntity);
} }
public ApplicationEvaluationEntity saveApplicationEvaluationEntity(ApplicationEvaluationEntity applicationEvaluationEntityData) { public ApplicationEvaluationEntity saveApplicationEvaluationEntity(ApplicationEvaluationEntity applicationEvaluationEntityData) {
return applicationEvaluationRepository.save(applicationEvaluationEntityData); return applicationEvaluationRepository.save(applicationEvaluationEntityData);
} }
public ApplicationEvaluationResponse updateApplicationEvaluationStatus(ApplicationEntity application, AssignedApplicationsEntity assignedApplicationsEntity, AssignedEvaluationStatus newStatus) { public ApplicationEvaluationResponse updateApplicationEvaluationStatus(ApplicationEntity application, AssignedApplicationsEntity assignedApplicationsEntity,
Optional<ApplicationEvaluationEntity> existingEntityOptional = applicationEvaluationRepository.findByAssignedApplicationsEntity_IdAndIsDeletedFalse(assignedApplicationsEntity.getId()); AssignedEvaluationStatus newStatus) {
ApplicationEvaluationEntity entity = null;
Optional<ApplicationEvaluationEntity> existingEntityOptional = applicationEvaluationRepository.findByAssignedApplicationsEntity_IdAndIsDeletedFalse(
assignedApplicationsEntity.getId());
ApplicationEvaluationEntity entity;
String statusType = application.getStatus();
if (existingEntityOptional.isPresent()) { if (existingEntityOptional.isPresent()) {
ApplicationEvaluationEntity existingEntity = existingEntityOptional.get(); ApplicationEvaluationEntity existingEntity = existingEntityOptional.get();
application.setStatus(newStatus.getValue()); application.setStatus(newStatus.getValue());
application = applicationRepository.save(application); application = applicationRepository.save(application);
if (application.getStatus().equals(ApplicationStatusTypeEnum.APPROVED.getValue()) || if (application.getStatus().equals(ApplicationStatusTypeEnum.APPROVED.getValue()) || application.getStatus().equals(ApplicationStatusTypeEnum.REJECTED.getValue())) {
application.getStatus().equals(ApplicationStatusTypeEnum.REJECTED.getValue())) {
existingEntity.setStatus(ApplicationEvaluationStatusTypeEnum.CLOSE.getValue()); existingEntity.setStatus(ApplicationEvaluationStatusTypeEnum.CLOSE.getValue());
assignedApplicationsEntity.setStatus(AssignedApplicationEnum.CLOSE.getValue()); assignedApplicationsEntity.setStatus(AssignedApplicationEnum.CLOSE.getValue());
} }
entity = applicationEvaluationRepository.save(existingEntity); entity = applicationEvaluationRepository.save(existingEntity);
assignedApplicationsEntity = assignedApplicationsRepository.save(assignedApplicationsEntity); assignedApplicationsRepository.save(assignedApplicationsEntity);
ApplicationAmendmentRequestEntity amendmentRequest = applicationAmendmentRequestRepository.findByApplicationEvaluationIdAndIsDeletedFalse(existingEntity.getId());
if (Boolean.TRUE.equals(statusType.equals((ApplicationStatusTypeEnum.APPROVED.getValue())))) {
emailNotificationDao.sendAdmissibilityNotificationEmailForApprovedApplication(amendmentRequest);
}
if (Boolean.TRUE.equals(statusType.equals((ApplicationStatusTypeEnum.REJECTED.getValue())))) {
emailNotificationDao.sendInadmissibilityEmailForRejectedApplication(amendmentRequest);
}
return convertToResponse(entity); return convertToResponse(entity);
} }
return null; return null;
} }
} }

View File

@@ -3,25 +3,12 @@ package net.gepafin.tendermanagement.dao;
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.ApplicationAmendmentRequestEntity; import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity;
import net.gepafin.tendermanagement.entities.ApplicationEntity;
import net.gepafin.tendermanagement.entities.CallEntity;
import net.gepafin.tendermanagement.entities.CommunicationEntity; import net.gepafin.tendermanagement.entities.CommunicationEntity;
import net.gepafin.tendermanagement.entities.CompanyEntity;
import net.gepafin.tendermanagement.entities.ProtocolEntity;
import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity;
import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.model.request.CommunicationRequestBean; import net.gepafin.tendermanagement.model.request.CommunicationRequestBean;
import net.gepafin.tendermanagement.model.response.ApplicationAmendmentResponse; import net.gepafin.tendermanagement.model.response.ApplicationAmendmentResponse;
import net.gepafin.tendermanagement.model.response.CommunicationResponseBean; import net.gepafin.tendermanagement.model.response.CommunicationResponseBean;
import net.gepafin.tendermanagement.model.response.SystemEmailTemplateResponse;
import net.gepafin.tendermanagement.repositories.CommunicationRepository; import net.gepafin.tendermanagement.repositories.CommunicationRepository;
import net.gepafin.tendermanagement.service.ApplicationAmendmentRequestService; import net.gepafin.tendermanagement.service.ApplicationAmendmentRequestService;
import net.gepafin.tendermanagement.service.ApplicationService;
import net.gepafin.tendermanagement.service.SystemEmailTemplatesService;
import net.gepafin.tendermanagement.service.UserService;
import net.gepafin.tendermanagement.util.DateTimeUtil;
import net.gepafin.tendermanagement.util.MailUtil;
import net.gepafin.tendermanagement.util.Utils;
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.Status; import net.gepafin.tendermanagement.web.rest.api.errors.Status;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -30,9 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
@Component @Component
public class CommunicationDao { public class CommunicationDao {
@@ -44,19 +29,6 @@ public class CommunicationDao {
@Autowired @Autowired
ApplicationAmendmentRequestService applicationAmendmentRequestService; ApplicationAmendmentRequestService applicationAmendmentRequestService;
@Autowired
private MailUtil mailUtil;
@Autowired
private SystemEmailTemplatesService systemEmailTemplatesService;
@Autowired
private ApplicationService applicationService;
@Autowired
private UserService userService;
public CommunicationResponseBean addCommentToAmendmentRequest(CommunicationRequestBean communicationReq, Long amendmentId) { public CommunicationResponseBean addCommentToAmendmentRequest(CommunicationRequestBean communicationReq, Long amendmentId) {
log.info("Adding communication request..."); log.info("Adding communication request...");
@@ -127,123 +99,4 @@ public class CommunicationDao {
communicationEntity.setCommentedDate(LocalDateTime.now()); communicationEntity.setCommentedDate(LocalDateTime.now());
return communicationEntity; return communicationEntity;
} }
public void sendMailToNotifyBeneficiaryRegardingNewAmendment(ApplicationAmendmentRequestEntity applicationAmendmentRequest) {
ApplicationEntity applicationEntity = applicationService.validateApplication(applicationAmendmentRequest.getApplicationId());
SystemEmailTemplateResponse systemEmailTemplateResponse = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(
SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.DOCUMENTATION_INTEGRATION_REQUEST, applicationEntity.getCall(), null);
// Create the map for subject placeholders
Map<String, String> subjectPlaceholders = new HashMap<>();
subjectPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
subjectPlaceholders.put("{{company_name}}", applicationEntity.getCompany().getCompanyName());
// Create the map for body placeholders
Map<String, String> bodyPlaceholders = new HashMap<>();
bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
bodyPlaceholders.put("{{protocol_number}}", applicationEntity.getProtocol().getProtocolNumber().toString());
bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatLocalDateTime(applicationAmendmentRequest.getProtocol().getCreatedDate(), GepafinConstant.DD_MM_YYYY));
bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(applicationAmendmentRequest.getProtocol().getTime(), GepafinConstant.HH_MM_SS));
bodyPlaceholders.put("{{form_dataInput}}", "");
// Replace placeholders in the subject and body
String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders);
String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders);
UserEntity userEntity = userService.validateUser(applicationEntity.getUserId());
mailUtil.sendByMailGun(subject, body, List.of(userEntity.getBeneficiary().getEmail()), null);
}
public void sendApplicationFailureNotificationEmail(String userEmail, ApplicationEntity applicationEntity) {
CallEntity call = applicationEntity.getCall();
CompanyEntity company = applicationEntity.getCompany();
ProtocolEntity protocol = applicationEntity.getProtocol();
SystemEmailTemplateResponse systemEmailTemplateResponse = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(
SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE, call, null);
// Create the map for subject placeholders
Map<String, String> subjectPlaceholders = new HashMap<>();
subjectPlaceholders.put("{{call_name}}", call.getName());
subjectPlaceholders.put("{{company_name}}", company.getCompanyName());
// Create the map for body placeholders
Map<String, String> bodyPlaceholders = new HashMap<>();
bodyPlaceholders.put("{{call_name}}", call.getName());
bodyPlaceholders.put("{{date_time_emailSend}}", DateTimeUtil.formatLocalDateTime(protocol.getCreatedDate(), GepafinConstant.DD_MM_YYYY_HH_MM));
// Replace placeholders in the subject and body
String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders);
String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders);
mailUtil.sendByMailGun(subject, body, List.of(userEmail), null);
mailUtil.sendByMailGun(subject, body, List.of(applicationEntity.getCompany().getEmail()), null);
}
private void sendAdmissibilityNotificationEmail(UserEntity userEntity, ApplicationEntity applicationEntity) {
CallEntity call = applicationEntity.getCall();
CompanyEntity company = applicationEntity.getCompany();
ProtocolEntity protocol = applicationEntity.getProtocol();
SystemEmailTemplateResponse systemEmailTemplateResponse = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(
SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.ADMISSIBILITY_NOTIFICATION, call, null);
// Create the map for subject placeholders
Map<String, String> subjectPlaceholders = new HashMap<>();
subjectPlaceholders.put("{{call_name}}", call.getName());
subjectPlaceholders.put("{{company_name}}", company.getCompanyName());
// Create the map for body placeholders
Map<String, String> bodyPlaceholders = new HashMap<>();
bodyPlaceholders.put("{{call_name}}", call.getName());
bodyPlaceholders.put("{{protocol_number}}", protocol.getProtocolNumber().toString());
bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatCreatedDate(protocol.getCreatedDate()));
bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(protocol.getTime(), GepafinConstant.HH_MM_SS));
// Replace placeholders in the subject and body
String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders);
String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders);
String email = userEntity.getEmail();
if (userEntity.getBeneficiary() != null) {
email = userEntity.getBeneficiary().getEmail();
}
mailUtil.sendByMailGun(subject, body, List.of(email), null);
mailUtil.sendByMailGun(subject, body, List.of(applicationEntity.getCompany().getEmail()), null);
}
private void sendInadmissibilityTemplateEmail(UserEntity userEntity, ApplicationEntity applicationEntity) {
CallEntity call = applicationEntity.getCall();
CompanyEntity company = applicationEntity.getCompany();
ProtocolEntity protocol = applicationEntity.getProtocol();
SystemEmailTemplateResponse systemEmailTemplateResponse = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(
SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_TEMPLATE, call, null);
// Create the map for subject placeholders
Map<String, String> subjectPlaceholders = new HashMap<>();
subjectPlaceholders.put("{{call_name}}", call.getName());
subjectPlaceholders.put("{{company_name}}", company.getCompanyName());
// Create the map for body placeholders
Map<String, String> bodyPlaceholders = new HashMap<>();
bodyPlaceholders.put("{{call_name}}", call.getName());
bodyPlaceholders.put("{{protocol_number}}", protocol.getProtocolNumber().toString());
bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatCreatedDate(protocol.getCreatedDate()));
bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(protocol.getTime(), GepafinConstant.HH_MM_SS));
bodyPlaceholders.put("{{form_text}}", "YOUR_FORM_TEXT_HERE"); // Replace with actual data input if available
// Replace placeholders in the subject and body
String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders);
String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders);
String email = userEntity.getEmail();
if (userEntity.getBeneficiary() != null) {
email = userEntity.getBeneficiary().getEmail();
}
mailUtil.sendByMailGun(subject, body, List.of(email), null);
mailUtil.sendByMailGun(subject, body, List.of(applicationEntity.getCompany().getEmail()), null);
}
} }

View File

@@ -0,0 +1,160 @@
package net.gepafin.tendermanagement.dao;
import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity;
import net.gepafin.tendermanagement.entities.ApplicationEntity;
import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity;
import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.model.response.SystemEmailTemplateResponse;
import net.gepafin.tendermanagement.repositories.CallRepository;
import net.gepafin.tendermanagement.service.ApplicationService;
import net.gepafin.tendermanagement.service.SystemEmailTemplatesService;
import net.gepafin.tendermanagement.service.UserService;
import net.gepafin.tendermanagement.util.DateTimeUtil;
import net.gepafin.tendermanagement.util.MailUtil;
import net.gepafin.tendermanagement.util.Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
public class EmailNotificationDao {
@Autowired
private MailUtil mailUtil;
@Autowired
private SystemEmailTemplatesService systemEmailTemplatesService;
@Autowired
private ApplicationService applicationService;
@Autowired
private UserService userService;
@Autowired
CallRepository callRepository;
public void sendMailToNotifyBeneficiaryRegardingNewAmendment(ApplicationAmendmentRequestEntity applicationAmendmentRequest) {
ApplicationEntity applicationEntity = applicationService.validateApplication(applicationAmendmentRequest.getApplicationId());
SystemEmailTemplateResponse systemEmailTemplateResponse = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(
SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.DOCUMENTATION_INTEGRATION_REQUEST, applicationEntity.getCall(), null);
// Create the map for subject placeholders
Map<String, String> subjectPlaceholders = new HashMap<>();
subjectPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
subjectPlaceholders.put("{{company_name}}", applicationEntity.getCompany().getCompanyName());
// Create the map for body placeholders
Map<String, String> bodyPlaceholders = new HashMap<>();
bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
bodyPlaceholders.put("{{protocol_number}}", applicationEntity.getProtocol().getProtocolNumber().toString());
bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatLocalDateTime(applicationAmendmentRequest.getProtocol().getCreatedDate(), GepafinConstant.DD_MM_YYYY));
bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(applicationAmendmentRequest.getProtocol().getTime(), GepafinConstant.HH_MM_SS));
bodyPlaceholders.put("{{form_dataInput}}", "");
// Replace placeholders in the subject and body
String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders);
String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders);
UserEntity userEntity = userService.validateUser(applicationEntity.getUserId());
mailUtil.sendByMailGun(subject, body, List.of(userEntity.getBeneficiary().getEmail()), null);
}
public void sendApplicationFailureNotificationEmail(ApplicationAmendmentRequestEntity amendmentRequest) {
ApplicationEntity applicationEntity = applicationService.validateApplication(amendmentRequest.getApplicationId());
SystemEmailTemplateResponse systemEmailTemplateResponse = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(
SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE, applicationEntity.getCall(), null);
// Create the map for subject placeholders
Map<String, String> subjectPlaceholders = new HashMap<>();
subjectPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
subjectPlaceholders.put("{{company_name}}", applicationEntity.getCompany().getCompanyName());
// Create the map for body placeholders
Map<String, String> bodyPlaceholders = new HashMap<>();
bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
bodyPlaceholders.put("{{date_time_emailSend}}", DateTimeUtil.formatLocalDateTime(amendmentRequest.getCreatedDate(), GepafinConstant.DD_MM_YYYY_HH_MM));
// Replace placeholders in the subject and body
String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders);
String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders);
UserEntity userEntity = userService.validateUser(applicationEntity.getUserId());
if (userEntity.getBeneficiary().getEmail() != null) {
mailUtil.sendByMailGun(subject, body, List.of(userEntity.getBeneficiary().getEmail()), null);
}
}
public void sendAdmissibilityNotificationEmailForApprovedApplication(ApplicationAmendmentRequestEntity amendmentRequest) {
ApplicationEntity applicationEntity = applicationService.validateApplication(amendmentRequest.getApplicationId());
SystemEmailTemplateResponse systemEmailTemplateResponse = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(
SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.ADMISSIBILITY_NOTIFICATION, applicationEntity.getCall(), null);
// Create the map for subject placeholders
Map<String, String> subjectPlaceholders = new HashMap<>();
subjectPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
subjectPlaceholders.put("{{company_name}}", applicationEntity.getCompany().getCompanyName());
// Create the map for body placeholders
Map<String, String> bodyPlaceholders = new HashMap<>();
bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
bodyPlaceholders.put("{{protocol_number}}", applicationEntity.getProtocol().getProtocolNumber().toString());
bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatCreatedDate(applicationEntity.getProtocol().getCreatedDate()));
bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(applicationEntity.getProtocol().getTime(), GepafinConstant.HH_MM_SS));
// Replace placeholders in the subject and body
String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders);
String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders);
UserEntity userEntity = userService.validateUser(applicationEntity.getUserId());
String userEmail;
String companyEmail;
if (userEntity.getBeneficiary().getEmail() != null && applicationEntity.getCompany().getEmail() != null) {
userEmail = userEntity.getBeneficiary().getEmail();
companyEmail = applicationEntity.getCompany().getEmail();
mailUtil.sendByMailGun(subject, body, List.of(userEmail), null);
mailUtil.sendByMailGun(subject, body, List.of(companyEmail), null);
}
}
public void sendInadmissibilityEmailForRejectedApplication(ApplicationAmendmentRequestEntity amendmentRequest) {
ApplicationEntity applicationEntity = applicationService.validateApplication(amendmentRequest.getApplicationId());
SystemEmailTemplateResponse systemEmailTemplateResponse = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(
SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_TEMPLATE, applicationEntity.getCall(), null);
// Create the map for subject placeholders
Map<String, String> subjectPlaceholders = new HashMap<>();
subjectPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
subjectPlaceholders.put("{{company_name}}", applicationEntity.getCompany().getCompanyName());
// Create the map for body placeholders
Map<String, String> bodyPlaceholders = new HashMap<>();
bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
bodyPlaceholders.put("{{protocol_number}}", applicationEntity.getProtocol().getProtocolNumber().toString());
bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatCreatedDate(applicationEntity.getProtocol().getCreatedDate()));
bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(applicationEntity.getProtocol().getTime(), GepafinConstant.HH_MM_SS));
bodyPlaceholders.put("{{form_text}}", "");
// Replace placeholders in the subject and body
String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders);
String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders);
UserEntity userEntity = userService.validateUser(applicationEntity.getUserId());
String userEmail;
String companyEmail;
if (userEntity.getBeneficiary().getEmail() != null && applicationEntity.getCompany().getEmail() != null) {
userEmail = userEntity.getBeneficiary().getEmail();
companyEmail = applicationEntity.getCompany().getEmail();
mailUtil.sendByMailGun(subject, body, List.of(userEmail), null);
mailUtil.sendByMailGun(subject, body, List.of(companyEmail), null);
}
}
}

View File

@@ -17,4 +17,10 @@ public interface ApplicationAmendmentRequestRepository extends JpaRepository<App
"WHERE app.user_id = :userId AND ar.is_deleted = false", "WHERE app.user_id = :userId AND ar.is_deleted = false",
nativeQuery = true) nativeQuery = true)
List<ApplicationAmendmentRequestEntity> findByUserId(@Param("userId") Long userId); List<ApplicationAmendmentRequestEntity> findByUserId(@Param("userId") Long userId);
List<ApplicationAmendmentRequestEntity> findByIsDeletedFalse();
@Query(value = "SELECT amr FROM ApplicationAmendmentRequestEntity amr " + "WHERE amr.applicationEvaluationEntity.id = :id " + "AND amr.applicationEvaluationEntity.isDeleted = false")
ApplicationAmendmentRequestEntity findByApplicationEvaluationIdAndIsDeletedFalse(Long id);
} }

View File

@@ -1,72 +1,65 @@
//package net.gepafin.tendermanagement.scheduler; package net.gepafin.tendermanagement.scheduler;
//
//import net.gepafin.tendermanagement.dao.CommunicationDao; import net.gepafin.tendermanagement.dao.EmailNotificationDao;
//import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity; import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity;
//import net.gepafin.tendermanagement.entities.ApplicationEntity; import net.gepafin.tendermanagement.entities.ApplicationEntity;
//import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.entities.UserEntity;
//import net.gepafin.tendermanagement.repositories.ApplicationAmendmentRepository; import net.gepafin.tendermanagement.repositories.ApplicationAmendmentRequestRepository;
//import net.gepafin.tendermanagement.repositories.ApplicationRepository; import net.gepafin.tendermanagement.repositories.ApplicationRepository;
//import net.gepafin.tendermanagement.repositories.UserRepository; import net.gepafin.tendermanagement.repositories.UserRepository;
//import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
//
//import java.time.LocalDateTime; import java.time.LocalDateTime;
//import java.util.List; import java.util.List;
//
//@Component @Component
//public class NotificationScheduler { public class NotificationScheduler {
//
// @Autowired @Autowired
// UserRepository userRepository; UserRepository userRepository;
//
// @Autowired @Autowired
// ApplicationRepository applicationRepository; ApplicationRepository applicationRepository;
//
// @Autowired @Autowired
// ApplicationAmendmentRepository applicationAmendmentRepository; ApplicationAmendmentRequestRepository applicationAmendmentRepository;
//
// @Autowired @Autowired
// CommunicationDao communicationDao; EmailNotificationDao emailNotificationDao;
//
// @Scheduled(cron = "0 0/10 * * * ?", zone = "Asia/Kolkata") @Scheduled(cron = "0 0/1 * * * ?")
// void sendNotificationForRejectedApplicationToBeneficiary() { void sendNotificationForRejectedApplicationToBeneficiary() {
//
// List<ApplicationEntity> applicationsList = applicationRepository.findByIsDeletedFalse(); List<ApplicationEntity> applicationsList = applicationRepository.findByIsDeletedFalse();
// List<ApplicationAmendmentRequestEntity> amendmentRequestList = applicationAmendmentRepository.findByIsDeletedFalse(); List<ApplicationAmendmentRequestEntity> amendmentRequestList = applicationAmendmentRepository.findByIsDeletedFalse();
//
// LocalDateTime today = LocalDateTime.now(); LocalDateTime today = LocalDateTime.now();
//
// for (ApplicationEntity application : applicationsList) { for (ApplicationEntity application : applicationsList) {
// ApplicationAmendmentRequestEntity amendmentRequest = getAmendmentRequestForApplication(application, amendmentRequestList); ApplicationAmendmentRequestEntity amendmentRequest = getAmendmentRequestForApplication(application, amendmentRequestList);
//
// if (amendmentRequest != null) { if (amendmentRequest != null) {
// LocalDateTime requestDate = amendmentRequest.getStartedDate(); LocalDateTime requestDate = amendmentRequest.getCreatedDate();
//
// // Check if requestDate + 7 days is less than or equal to today // Eg :- Check if requestDate + 7 days is less than or equal to today
// if (requestDate.plusDays(7).isAfter(today)) { if (requestDate.plusDays(amendmentRequest.getResponseDays()).isAfter(today)) {
// // Update the application status to REJECTED // Update the application status to REJECTED
// application.setStatus("REJECTED"); application.setStatus("REJECTED");
// applicationRepository.save(application); // Save updated application applicationRepository.save(application); // Save updated application
//
// // Update the amendment request status to CLOSED // Update the amendment request status to CLOSED
// amendmentRequest.setStatus("CLOSED"); // amendmentRequest.setStatus("CLOSE");
// applicationAmendmentRepository.save(amendmentRequest); // Save updated amendment request // applicationAmendmentRepository.save(amendmentRequest); // Save updated amendment request
// emailNotificationDao.sendApplicationFailureNotificationEmail(amendmentRequest);
// // Get the user associated with the application }
// UserEntity user = userRepository.findById(application.getUserId()).orElse(null); // Adjust according to your UserRepository's method }
// }
// // Send email notification if user is found }
// if (user != null && user.getEmail() != null) {
// communicationDao.sendApplicationFailureNotificationEmail(user.getEmail(), application); private ApplicationAmendmentRequestEntity getAmendmentRequestForApplication(ApplicationEntity application, List<ApplicationAmendmentRequestEntity> amendmentRequestList) {
// }
// } return amendmentRequestList.stream().filter(request -> request.getId().equals(application.getId())).findFirst().orElse(null);
// } }
// } }
// }
//
// private ApplicationAmendmentRequestEntity getAmendmentRequestForApplication(ApplicationEntity application, List<ApplicationAmendmentRequestEntity> amendmentRequestList) {
//
// return amendmentRequestList.stream().filter(request -> request.getId().equals(application.getId())).findFirst().orElse(null);
// }
//}

View File

@@ -72,7 +72,7 @@ public interface ApplicationAmendmentRequestApi {
@GetMapping(value = "", produces = "application/json") @GetMapping(value = "", produces = "application/json")
ResponseEntity<Response<ApplicationAmendmentRequestResponse>> getApplicationAmendmentRequestById(HttpServletRequest request,@Parameter(description = "The application amendment id", required = true) @RequestParam(value = "id", required = true) Long id); ResponseEntity<Response<ApplicationAmendmentRequestResponse>> getApplicationAmendmentRequestById(HttpServletRequest request,@Parameter(description = "The application amendment id", required = true) @RequestParam(value = "id", required = true) Long id);
@Operation(summary = "Api to get all applications amendment request", @Operation(summary = "Api to get all applications amendment request by preInstructor user Id",
responses = { responses = {
@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "200", description = "OK"),
@ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = {
@@ -109,7 +109,7 @@ public interface ApplicationAmendmentRequestApi {
@ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })), @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })),
@ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = {
@ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) })
@GetMapping(value = "/beneficiary/{id}", produces = "application/json") @GetMapping(value = "/beneficiary/user/{id}", produces = "application/json")
ResponseEntity<Response<List<ApplicationAmendmentRequestResponse>>> getAllAmendmentRequestByBeneficiaryId(HttpServletRequest request, ResponseEntity<Response<List<ApplicationAmendmentRequestResponse>>> getAllAmendmentRequestByBeneficiaryId(HttpServletRequest request,
@Parameter(description = "Id", required = false) @PathVariable(value = "id",required = false) Long beneficiaryId); @Parameter(description = "Id", required = false) @PathVariable(value = "id",required = false) Long beneficiaryId);
@Operation(summary = "Api to extend response days for an amendment request", @Operation(summary = "Api to extend response days for an amendment request",

View File

@@ -47,7 +47,7 @@ VALUES
( (
4, 4,
'Notification of Inadmissibility Due to Failure to Respond Template', 'Notification of Inadmissibility Due to Failure to Respond Template',
'INADMISSIBILITY_NOTIFICATION', 'INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE',
'<html> '<html>
<body style="font-family: Arial, sans-serif; color: #000; line-height: 1.6;"> <body style="font-family: Arial, sans-serif; color: #000; line-height: 1.6;">
<div style="padding: 20px; border: 1px solid #ddd; border-radius: 8px; max-width: 600px; margin: auto;"> <div style="padding: 20px; border: 1px solid #ddd; border-radius: 8px; max-width: 600px; margin: auto;">

View File

@@ -295,11 +295,11 @@ application.amendment.get.success = Application Amendment details fetched succes
application.amendment.update.successfully = Application Amendment Updated Successfully. application.amendment.update.successfully = Application Amendment Updated Successfully.
response.days.extended.success=Response days extended successfully. response.days.extended.success=Response days extended successfully.
added.comment.to.amendment.request.success = Application Amendment Comment Added Successfully.; added.comment.to.amendment.request.success = Application Amendment Comment Added Successfully.
comment.not.found = Comment Not Found."; comment.not.found = Comment Not Found.
comment.updated.successfully = Comment Updated Successfully."; comment.updated.successfully = Comment Updated Successfully.
comment.deleted.successfully = Comment Deleted Successfully."; comment.deleted.successfully = Comment Deleted Successfully.
comment.not.associate.with.amendment = Comment Not Associated with Amendment Request."; comment.not.associate.with.amendment = Comment Not Associated with Amendment Request.
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

View File

@@ -296,5 +296,5 @@ comment.deleted.successfully = Commento eliminato con successo.
comment.not.associate.with.amendment = Il commento non � associato alla richiesta di emendamento. comment.not.associate.with.amendment = Il commento non � associato alla richiesta di emendamento.
amendment.found.success = Richiesta di emendamento trovata con successo. amendment.found.success = Richiesta di emendamento trovata con successo.
invalid.amendment.for.comment = Richiesta di emendamento non valida per il commento fornito. invalid.amendment.for.comment = Richiesta di emendamento non valida per il commento fornito.
DD_MM_YYYY_HH_MM = DD-MM-YYYY HH:MM. 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