Resolved conflict

This commit is contained in:
rajesh
2025-09-30 20:24:55 +05:30
parent 53500decd7
commit 193283e99a
27 changed files with 523 additions and 77 deletions

View File

@@ -35,6 +35,7 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*;
@@ -578,54 +579,57 @@ public class ApplicationAmendmentRequestDao {
private Map<String, ApplicationFormFieldEntity> getApplicationFormFieldEntityMap(
ApplicationAmendmentRequestEntity entity, List<AmendmentFormField> amendmentFormFields) {
List<String> fieldIds = amendmentFormFields.stream()
.map(AmendmentFormField::getFieldId)
.toList();
return getApplicationFormFieldList(entity, fieldIds).stream()
.collect(Collectors.toMap(ApplicationFormFieldEntity::getFieldId, Function.identity()));
if(amendmentFormFields!=null) {
List<String> fieldIds = amendmentFormFields.stream()
.map(AmendmentFormField::getFieldId)
.toList();
return getApplicationFormFieldList(entity, fieldIds).stream()
.collect(Collectors.toMap(ApplicationFormFieldEntity::getFieldId, Function.identity()));
}
return null;
}
private void processFormFields(List<AmendmentFormField> amendmentFormFields, Map<String, String> fieldIdToLabelMap,
Map<String, ApplicationFormFieldEntity> formFieldEntityMap, ApplicationAmendmentRequestResponse response) {
List<AmendmentFormFieldResponse> formFields = new ArrayList<>();
List<ApplicationFormFieldResponseBean> fileDetails = new ArrayList<>();
if (amendmentFormFields != null){
for (AmendmentFormField amendmentFormField : amendmentFormFields) {
// Create form field response
createFormField(formFields, fieldIdToLabelMap, amendmentFormField);
for (AmendmentFormField amendmentFormField : amendmentFormFields) {
// Create form field response
createFormField(formFields, fieldIdToLabelMap, amendmentFormField);
// Create document responses
List<Long> documentIds = extractIds(amendmentFormField.getFieldValue());
List<DocumentResponseBean> documentResponseBeans = documentIds.stream()
.map(id -> {
DocumentEntity documentEntity = documentService.validateDocument(id);
DocumentResponseBean responseBean = new DocumentResponseBean();
responseBean.setId(documentEntity.getId());
responseBean.setName(documentEntity.getFileName());
responseBean.setType(DocumentTypeEnum.valueOf(documentEntity.getType()));
responseBean.setSource(DocumentSourceTypeEnum.valueOf(documentEntity.getSource()));
responseBean.setSourceId(documentEntity.getSourceId());
responseBean.setFilePath(documentEntity.getFilePath());
responseBean.setCreatedDate(documentEntity.getCreatedDate());
responseBean.setUpdatedDate(documentEntity.getUpdatedDate());
responseBean.setDocumentAttachmentId(documentEntity.getDocumentAttachmentId());
return responseBean;
})
.toList();
// Create document responses
List<Long> documentIds = extractIds(amendmentFormField.getFieldValue());
List<DocumentResponseBean> documentResponseBeans = documentIds.stream()
.map(id -> {
DocumentEntity documentEntity = documentService.validateDocument(id);
DocumentResponseBean responseBean = new DocumentResponseBean();
responseBean.setId(documentEntity.getId());
responseBean.setName(documentEntity.getFileName());
responseBean.setType(DocumentTypeEnum.valueOf(documentEntity.getType()));
responseBean.setSource(DocumentSourceTypeEnum.valueOf(documentEntity.getSource()));
responseBean.setSourceId(documentEntity.getSourceId());
responseBean.setFilePath(documentEntity.getFilePath());
responseBean.setCreatedDate(documentEntity.getCreatedDate());
responseBean.setUpdatedDate(documentEntity.getUpdatedDate());
responseBean.setDocumentAttachmentId(documentEntity.getDocumentAttachmentId());
return responseBean;
})
.toList();
// Map to application form field response bean
ApplicationFormFieldEntity formFieldEntity = formFieldEntityMap.get(amendmentFormField.getFieldId());
ApplicationFormFieldResponseBean responseBean = new ApplicationFormFieldResponseBean();
responseBean.setApplicationFormId(formFieldEntity.getApplicationForm().getId());
responseBean.setId(formFieldEntity.getId());
responseBean.setFieldId(amendmentFormField.getFieldId());
responseBean.setCreatedDate(formFieldEntity.getCreatedDate());
responseBean.setUpdatedDate(formFieldEntity.getUpdatedDate());
responseBean.setFieldValue(documentResponseBeans);
fileDetails.add(responseBean);
}
// Map to application form field response bean
ApplicationFormFieldEntity formFieldEntity = formFieldEntityMap.get(amendmentFormField.getFieldId());
ApplicationFormFieldResponseBean responseBean = new ApplicationFormFieldResponseBean();
responseBean.setApplicationFormId(formFieldEntity.getApplicationForm().getId());
responseBean.setId(formFieldEntity.getId());
responseBean.setFieldId(amendmentFormField.getFieldId());
responseBean.setCreatedDate(formFieldEntity.getCreatedDate());
responseBean.setUpdatedDate(formFieldEntity.getUpdatedDate());
responseBean.setFieldValue(documentResponseBeans);
fileDetails.add(responseBean);
}
}
response.setFormFields(formFields);
response.setApplicationFormFields(fileDetails);
}
@@ -1774,5 +1778,87 @@ public class ApplicationAmendmentRequestDao {
return totalDays;
}
public ApplicationAmendmentRequestResponse createSpecialApplicationAmendmentRequest(Long applicationEvaluationId, ApplicationAmendmentSpecialRequest applicationAmendmentRequest) {
log.info("Submiting application data for amendment Process with details: {}", applicationEvaluationId);
ApplicationEvaluationEntity applicationEvaluationEntity = applicationEvaluationService.validateApplicationEvaluation(applicationEvaluationId);
ApplicationEvaluationEntity oldApplicationEvaluationEntity = Utils.getClonedEntityForData(applicationEvaluationEntity);
ApplicationEntity applicationEntity=applicationDao.validateApplication(applicationEvaluationEntity.getApplicationId());
ApplicationEntity oldApplicationEntity = Utils.getClonedEntityForData(applicationEntity);
if(Boolean.FALSE.equals(applicationEntity.getStatus().equals(ApplicationStatusTypeEnum.ADMISSIBLE.getValue()))) {
throw new CustomValidationException(Status.VALIDATION_ERROR,Translator.toLocale(GepafinConstant.INVALID_APPLICATION_STATUS));
}
ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity = new ApplicationAmendmentRequestEntity();
applicationAmendmentRequestEntity.setResponseDays(20l);
applicationAmendmentRequestEntity.setEndDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()).plusDays(20));
applicationAmendmentRequestEntity.setIsEmail(Boolean.TRUE);
applicationAmendmentRequestEntity.setIsNotification(Boolean.FALSE);
applicationAmendmentRequestEntity.setStartDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
applicationAmendmentRequestEntity.setStatus(ApplicationAmendmentRequestEnum.AWAITING.getValue());
// if ( applicationEvaluationEntity.getStartDate() != null && applicationEvaluationEntity.getInitialDays() != null ) {
// Long initialDays = applicationEvaluationEntity.getInitialDays();
// LocalDateTime startDate = applicationEvaluationEntity.getStartDate();
// LocalDateTime nowInUTC = DateTimeUtil.DateServerToUTC(LocalDateTime.now());
// // Calculate remaining days
// Long remainingDays = initialDays - DAYS.between(startDate, nowInUTC);
// // Set remaining days in the entity
// applicationEvaluationEntity.setRemainingDays(remainingDays);
// //Set stop date time in the entity becuase amendment has started
// applicationEvaluationEntity.setStopDateTime(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
// }
applicationAmendmentRequestEntity.setApplicationEvaluationEntity(applicationEvaluationEntity);
applicationEvaluationEntity.setStatus(ApplicationEvaluationStatusTypeEnum.SOCCORSO.getValue());
applicationEvaluationRepository.save(applicationEvaluationEntity);
loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationEvaluationEntity).newData(applicationEvaluationEntity).build());
Long applicationId = applicationEvaluationEntity.getApplicationId();
Long assignedApplicationId = applicationEvaluationEntity.getAssignedApplicationsEntity().getId();
// add here the changing status of assigned application
AssignedApplicationsEntity assignedApplicationsEntity = assignedApplicationsService.validateAssignedApplication(assignedApplicationId);
AssignedApplicationsEntity oldAssignedApplication = Utils.getClonedEntityForData(assignedApplicationsEntity);
assignedApplicationsEntity.setStatus(AssignedApplicationEnum.SOCCORSO.getValue());
assignedApplicationsRepository.save(assignedApplicationsEntity);
loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldAssignedApplication).newData(assignedApplicationsEntity).build());
BigDecimal amountAccepted = applicationEntity.getAmountAccepted();
if (applicationAmendmentRequest.getAmount() != null && (amountAccepted==null || applicationAmendmentRequest.getAmount().compareTo(amountAccepted) == 0)) {
applicationEntity.setAmountAccepted(applicationAmendmentRequest.getAmount());
}
if(Boolean.FALSE.equals(applicationAmendmentRequest.getPec().equals(applicationEntity.getPecEmail()))){
applicationEntity.setPecEmail(applicationAmendmentRequest.getPec());
}
applicationEvaluationDao.processTechnicalEvaluation(applicationEntity.getId(),applicationEntity,ApplicationStatusForEvaluation.AWAITING_TECHNICAL_EVALUATION,applicationEvaluationEntity);
applicationRepository.save(applicationEntity);
loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationEntity).newData(applicationEntity).build());
applicationAmendmentRequestEntity.setType(ApplicationAmendmentRequestTypeEnum.SPECIAL.getValue());
applicationAmendmentRequestEntity.setApplicationId(applicationId);
UserEntity userEntity = userService.validateUser(applicationEvaluationEntity.getUserId());
Long protocolNumber = protocolDao.getProtocolNumber(userEntity.getHub());
ProtocolEntity protocolEntity = protocolDao.createProtocolEntity(
applicationEvaluationEntity.getAssignedApplicationsEntity().getApplication(), protocolNumber,
userEntity.getHub().getId(),false);
protocolDao.saveProtocolEntity(protocolEntity);
applicationAmendmentRequestEntity.setProtocol(protocolEntity);
applicationAmendmentRequestEntity.setAmendmentDocumentType(applicationAmendmentRequest.getAmendmentDocumentType().getValue());
ApplicationAmendmentRequestEntity applicationAmendment = saveApplicationAmendmentRequestEntity(applicationAmendmentRequestEntity, null, VersionActionTypeEnum.INSERT);
log.info("Amendment request saved with ID={}", applicationAmendment.getId());
emailNotificationDao.sendMailforSpecialAmendment(applicationAmendmentRequestEntity,applicationEntity);
EmailSendResponse emailSendResponse = emailDao.buildEmailSendResponseFromRequest(request);
List<EmailSendResponse> responses = List.of(emailSendResponse);
ApplicationAmendmentRequestResponse applicationAmendmentRequestResponse = convertEntityToResponse(applicationAmendmentRequestEntity,false);
if (!Boolean.TRUE.equals(emailSendResponse.getIsEmailSend())){
saveEmailSendResponse(emailSendResponse, applicationAmendmentRequestEntity);
applicationAmendmentRequestResponse.setEmailSendResponse(responses);
}
else{
applicationAmendmentRequestResponse.setEmailSendResponse(Collections.emptyList());
}
log.info("Application submitted successfully for amendment", applicationAmendmentRequestResponse);
return applicationAmendmentRequestResponse;
}
}

View File

@@ -1934,7 +1934,7 @@ public class ApplicationEvaluationDao {
if(newStatus.equals(ApplicationStatusForEvaluation.TECHNICAL_EVALUATION)){
log.info("Processing technical evaluation for applicationId: {}", application.getId());
processTechnicalEvaluation(application.getId(), application, newStatus);
application.setStatus(ApplicationStatusForEvaluation.TECHNICAL_EVALUATION.getValue());
}
if((newStatus.equals(ApplicationStatusForEvaluation.APPROVED) || newStatus.equals(ApplicationStatusForEvaluation.REJECTED))) {
@@ -2566,24 +2566,20 @@ public class ApplicationEvaluationDao {
}
return false;
}
private void processTechnicalEvaluation(Long applicationId, ApplicationEntity applicationEntity, ApplicationStatusForEvaluation status){
log.info("Starting technical evaluation processing for applicationId: {}", applicationId);
Optional<ApplicationEvaluationEntity> evaluationEntityOpt = applicationEvaluationRepository.findByApplicationIdAndIsDeletedFalse(applicationId);
if (evaluationEntityOpt.isPresent()){
ApplicationEvaluationEntity evaluationEntity = evaluationEntityOpt.get();
public void processTechnicalEvaluation(Long applicationId, ApplicationEntity applicationEntity, ApplicationStatusForEvaluation status, ApplicationEvaluationEntity evaluationEntity){
log.info("Starting process for checking scores for applicationId: {}", applicationId);
String criteriaJson = evaluationEntity.getCriteria();
if (criteriaJson != null){
BigDecimal totalScore = calculateTotalScore(evaluationEntity.getCriteria());
if (totalScore.compareTo(new BigDecimal("40")) > 0) {
applicationEntity.setStatus(status.getValue());
log.info("Status updated to TECHNICAL_EVALUATION for applicationId: {}", applicationId);
log.info("Status updated to AWAITING_TECHNICAL_EVALUATION for applicationId: {}", applicationId);
}
else{
log.warn("Insufficient score ({}) for applicationId: {}. Throwing validation exception.", totalScore, applicationId);
throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.INSUFFICIENT_SCORE_MESSAGE));
}
}
}
}
public BigDecimal calculateTotalScore(String criteriaJson){

View File

@@ -1,11 +1,13 @@
package net.gepafin.tendermanagement.dao;
import com.amazonaws.services.s3.AmazonS3Client;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.entities.*;
import net.gepafin.tendermanagement.enums.EmailServiceTypeEnum;
import net.gepafin.tendermanagement.enums.RecipientTypeEnum;
import net.gepafin.tendermanagement.enums.*;
import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest;
import net.gepafin.tendermanagement.model.request.AttachmentRequest;
import net.gepafin.tendermanagement.model.request.EmailConfig;
import net.gepafin.tendermanagement.model.request.EmailLogRequest;
import net.gepafin.tendermanagement.model.response.AmendmentFormFieldResponse;
@@ -17,6 +19,7 @@ import net.gepafin.tendermanagement.service.impl.EmailService;
import net.gepafin.tendermanagement.service.impl.EmailServiceFactory;
import net.gepafin.tendermanagement.util.DateTimeUtil;
import net.gepafin.tendermanagement.service.impl.SystemEmailService;
import net.gepafin.tendermanagement.util.S3DocxProcessor;
import net.gepafin.tendermanagement.util.Utils;
import net.gepafin.tendermanagement.util.Validator;
import org.slf4j.Logger;
@@ -25,8 +28,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import static net.gepafin.tendermanagement.dao.ApplicationAmendmentRequestDao.filterByName;
@@ -80,7 +85,16 @@ public class EmailNotificationDao {
@Autowired
private Validator validator;
private void sendEmail(ApplicationEntity applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum templateType, Map<String, String> bodyPlaceholders,
@Autowired
private AmazonS3Client s3Client;
@Autowired
private DocumentRepository documentRepository;
@Autowired
private ApplicationAmendmentRequestDao applicationAmendmentRequestDao;
public void sendEmail(ApplicationEntity applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum templateType, Map<String, String> bodyPlaceholders,
List<String> additionalRecipients, Long amendmentId) {
HubEntity hubEntity = hubService.valdateHub(applicationEntity.getHubId());
@@ -117,6 +131,34 @@ public class EmailNotificationDao {
Optional<ApplicationEvaluationEntity> applicationEvaluationEntity = applicationEvaluationRepository.findByApplicationIdAndIsDeletedFalse(applicationEntity.getId());
CompanyEntity company = companyService.validateCompany(applicationEntity.getCompanyId());
ApplicationAmendmentRequestEntity applicationAmendmentRequest=applicationAmendmentRequestDao.validateApplicationAmendmentRequest(amendmentId);
List<AttachmentRequest> attachmentRequests =new ArrayList<>();
if(systemEmailTemplateResponse.getEmailScenario().equals(EmailScenarioTypeEnum.SPECIAL_APPLICATION_AMENDMENT_REQUESTED)) {
S3DocxProcessor processor = new S3DocxProcessor(s3Client);
List<String> urls=new ArrayList<>();
Map<String, String> replacements = Map.of(
"{call_name}", applicationEntity.getCall().getName(),
"{amount_accepted}", String.valueOf(applicationEntity.getAmountAccepted()),
"{pec}", "bandi.gepafin@legalmail.it"
);
List<DocumentEntity> documentEntities=documentRepository.findBySourceInAndIsDeletedFalse(List.of(applicationAmendmentRequest.getAmendmentDocumentType(),"MODELLO_AUTOCERTIFICAZIONE","MODELLO_PRIVACY"));
urls = documentEntities.stream()
.map(DocumentEntity::getFilePath) // or getUrl()
.collect(Collectors.toList());
Map<String, AttachmentRequest> processedFiles = null;
try {
processedFiles = processor.processFiles(urls, replacements);
} catch (IOException e) {
throw new RuntimeException(e);
}
for (Map.Entry<String, AttachmentRequest> entry : processedFiles.entrySet()) {
AttachmentRequest attachmentRequest = new AttachmentRequest();
attachmentRequest.setName(entry.getKey()); // e.g. "path/file1.docx"
attachmentRequest.setFile(entry.getValue().getFile()); // updated file content
attachmentRequests.add(attachmentRequest);
}
}
UserWithCompanyEntity userWithCompany=companyService.getUserWithCompany(userEntity.getId(),company.getId());
String companyEmail = userWithCompany.getEmail();
@@ -130,17 +172,20 @@ public class EmailNotificationDao {
}
EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.COMPANY,company.getId() ,
String.valueOf(recipientEmails), userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId());
emailLogRequest.setAttachments(attachmentRequests);
sendMail(applicationEntity.getHubId(), subject, body, recipientEmails, emailLogRequest);
}
else {
if (companyEmail != null && !companyEmail.isEmpty()) {
EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.COMPANY, company.getId(),
companyEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId());
emailLogRequest.setAttachments(attachmentRequests);
sendMail(applicationEntity.getHubId(), subject, body, List.of(companyEmail), emailLogRequest);
}
if (contactEmail != null && !contactEmail.isEmpty() && !contactEmail.equals(companyEmail)) {
EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.COMPANY, company.getId(),
contactEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId());
emailLogRequest.setAttachments(attachmentRequests);
sendMail(applicationEntity.getHubId(), subject, body, List.of(contactEmail), emailLogRequest);
}
}
@@ -154,6 +199,7 @@ public class EmailNotificationDao {
}
EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY,userEntity.getBeneficiary().getId() ,
beneficiaryEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId());
emailLogRequest.setAttachments(attachmentRequests);
sendMail(applicationEntity.getHubId(), subject, body, List.of(beneficiaryEmail), emailLogRequest);
}
if(userEntity.getHub().getEmail() != null){
@@ -164,6 +210,7 @@ public class EmailNotificationDao {
if (!hubEmail.isEmpty()) {
EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.PROPERTIES,null,
hubEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId());
emailLogRequest.setAttachments(attachmentRequests);
sendMail(applicationEntity.getHubId(), subject, body, List.of(hubEmail), emailLogRequest);
}
}
@@ -173,6 +220,7 @@ public class EmailNotificationDao {
rinaldoEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId());
//SMTP
emailLogRequest.setAttachments(attachmentRequests);
sendMail(null, subject, body, List.of(rinaldoEmail), emailLogRequest);
}
if (applicationEvaluationEntity.isPresent()) {
@@ -182,6 +230,7 @@ public class EmailNotificationDao {
if (preInstructorEmail != null && !preInstructorEmail.isEmpty()) {
EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.INSTRUCTOR, instructorUser.getId(),
preInstructorEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId());
emailLogRequest.setAttachments(attachmentRequests);
sendMail(applicationEntity.getHubId(), subject, body, List.of(preInstructorEmail), emailLogRequest);
}
}
@@ -390,4 +439,10 @@ public class EmailNotificationDao {
return bodyPlaceholders;
}
public void sendMailforSpecialAmendment(ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity,ApplicationEntity applicationEntity) {
Map<String, String> bodyPlaceholders = prepareEmailPlaceholders(applicationEntity, applicationAmendmentRequestEntity);
sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.SPECIAL_APPLICATION_AMENDMENT_REQUESTED, bodyPlaceholders, null,
applicationAmendmentRequestEntity.getId());
}
}

View File

@@ -145,7 +145,7 @@ public class EvaluationFormDao {
}
public EvaluationFormResponseBean getEvaluationFormByCallId(CallEntity callEntity) {
public EvaluationFormResponseBean getEvaluationFormByCallId(CallEntity callEntity) {
if (callEntity == null) {
throw new CustomValidationException(Status.VALIDATION_ERROR,
Translator.toLocale(GepafinConstant.CALL_NOT_FOUND));