From ae3b3a309bebd725179bb0d40d381822bbfffe67 Mon Sep 17 00:00:00 2001 From: harish Date: Tue, 12 Nov 2024 20:13:35 +0530 Subject: [PATCH 01/11] Fixed email issue --- .../tendermanagement/service/impl/MailgunEmailService.java | 2 +- .../gepafin/tendermanagement/service/impl/PecEmailService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java index 03d1344c..dad2d2ca 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java @@ -38,7 +38,7 @@ public class MailgunEmailService implements EmailService { // Send email via Mailgun API if (Boolean.FALSE.equals(validator.isTestProfileActivated())) { - ResponseEntity response = mailgunFeignClient.sendEmail(domain, from, List.of("rajeshkhoreupwork@gmail.com"), subject, body, authHeader); + ResponseEntity response = mailgunFeignClient.sendEmail(domain, from, recipientEmails, subject, body, authHeader); if (!response.getStatusCode().is2xxSuccessful()) { throw new RuntimeException("Failed to send email via Mailgun: " + response.getStatusCode()); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java index 38f94613..e7e1f0ea 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java @@ -38,7 +38,7 @@ public class PecEmailService implements EmailService { PecEmailRequest emailRequest = new PecEmailRequest(); emailRequest.setSender(emailConfig.getSender()); - emailRequest.setRecipient(List.of("rajeshkhoreupwork@gmail.com")); + emailRequest.setRecipient(recipientEmails); emailRequest.setSubject(subject); emailRequest.setBody(body); emailRequest.setUsername(emailConfig.getUsername()); From 49e157dd6e7845248e502f9f0282f7b486f2e923 Mon Sep 17 00:00:00 2001 From: harish Date: Wed, 13 Nov 2024 23:56:52 +0530 Subject: [PATCH 02/11] Send mail to gepafin or sviluppumbria based on hub email --- .../tendermanagement/dao/ApplicationDao.java | 5 +- .../tendermanagement/util/MailUtil.java | 78 ------------------- src/main/resources/application.properties | 9 +-- 3 files changed, 4 insertions(+), 88 deletions(-) delete mode 100644 src/main/java/net/gepafin/tendermanagement/util/MailUtil.java diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index 716c1d11..b0aabe3a 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -97,9 +97,6 @@ public class ApplicationDao { @Value("${default_System_Receiver_Email}") private String defaultSystemReceiverEmail; - @Value("${gepafin_email}") - private String gepafinEmail; - @Value("${rinaldo_email}") private String rinaldoEmail; @@ -845,7 +842,7 @@ public class ApplicationDao { // mailUtil.sendByMailGun(subject, body, List.of(carloEmail), null); emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(carloEmail)); } - emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(gepafinEmail)); + emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(hub.getEmail())); emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(defaultSystemReceiverEmail)); emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(rinaldoEmail)); diff --git a/src/main/java/net/gepafin/tendermanagement/util/MailUtil.java b/src/main/java/net/gepafin/tendermanagement/util/MailUtil.java deleted file mode 100644 index 8b41ea3f..00000000 --- a/src/main/java/net/gepafin/tendermanagement/util/MailUtil.java +++ /dev/null @@ -1,78 +0,0 @@ -package net.gepafin.tendermanagement.util; - -import java.util.Arrays; -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.core.env.Environment; -import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; - -import com.mailgun.api.v3.MailgunMessagesApi; -import com.mailgun.client.MailgunClient; - -@Component -public class MailUtil { - - @Value("${apiKey}") - private String apiKeyValue; - - @Value("${mailGun_user}") - private String mailGunUser; - - @Value("${mailGun_apiKey}") - private String mailGunApiKey; - - @Value("${mailGun_domainName}") - private String mailGunDomainName; - - @Value("${mailGun_base_url}") - private String mailGunBaseUrl; - - @Value("${isMailSendingEnabled}") - private String isEmailSendingEnabled; - - @Autowired - private Environment environment; - - public Boolean isTestProfileActivated() { - String[] activeProfiles = environment.getActiveProfiles(); - return Arrays.stream(activeProfiles).anyMatch("test"::equals); - } - - public void sendMailByMailGunAPI(List recipents, List CC, List BCC, String subject, - String body, String replyTo) { - if (Boolean.FALSE.equals(Boolean.parseBoolean(isEmailSendingEnabled))) { - return; - } - - MailgunMessagesApi mailgunMessagesApi = MailgunClient.config(mailGunBaseUrl, mailGunApiKey) - .createApi(MailgunMessagesApi.class); - - String mailFrom = mailGunUser; - - com.mailgun.model.message.Message.MessageBuilder temp = com.mailgun.model.message.Message.builder() - .replyTo(replyTo).from(mailFrom).to(recipents).subject(subject).html(body); - - if (Boolean.FALSE.equals(CollectionUtils.isEmpty(CC))) { - temp.cc(CC); - } - - if (Boolean.FALSE.equals(CollectionUtils.isEmpty(BCC))) { - temp.bcc(BCC); - } - - if (Boolean.FALSE.equals(isTestProfileActivated())) { - com.mailgun.model.message.Message message = temp.build(); - mailgunMessagesApi.sendMessage(mailGunDomainName, message); - } - - } - - public void sendByMailGun(String subject, String body, List receiverEmails, String replyTo) { - sendMailByMailGunAPI(receiverEmails, null, null, subject, body, replyTo); - - } - -} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d2a1e3fb..19988cf3 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -53,13 +53,10 @@ vatCheckNewToken: 66026bd891a51044e90e08c4 spid.ipd.base.url=https://federatest.umbriadigitale.it active.profile.folder=dev -# MailGun API Key -mailGun_apiKey= 398e3dea1911fe941af261906ec99362-07e2c238-8094421f -mailGun_user=comunicazione@paghiamoci.ai -mailGun_domainName=paghiamoci.ai +# MailGun API mailGun_base_url=https://api.eu.mailgun.net/ -# SendinBlue API key -apiKey=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 + + api.pecUrl=https://ws.pecmassiva.com #senderEmail=mailer@bflows.net From 9970db7676cf004d8a5667c762b231ac857e478f Mon Sep 17 00:00:00 2001 From: rajesh Date: Tue, 19 Nov 2024 21:23:05 +0530 Subject: [PATCH 03/11] updated default_System_Receiver_Email property for production --- src/main/resources/application-production.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/application-production.properties b/src/main/resources/application-production.properties index 8c19671b..b3704a3d 100644 --- a/src/main/resources/application-production.properties +++ b/src/main/resources/application-production.properties @@ -16,7 +16,7 @@ spid.ipd.base.url=https://login.regione.umbria.it active.profile.folder=production isMailSendingEnabled = true -default_System_Receiver_Email=antonio.manca@bflows.net +default_System_Receiver_Email=c.moretti@gepafin.it gepafin_email=bandi@pec.gepafin.it rinaldo_email=rinaldo.bonazzo@bflows.net carlo_email=carlo.mancosu@bflows.net From 9fe5a916f182ab4f81fe8070caec076326f1142d Mon Sep 17 00:00:00 2001 From: rajesh Date: Wed, 27 Nov 2024 12:20:06 +0530 Subject: [PATCH 04/11] Fixed issue with evaluation --- .../dao/ApplicationEvaluationDao.java | 18 ++++++++++++------ .../CallTargetAudienceChecklistRepository.java | 4 ++-- .../EvaluationCriteriaRepository.java | 2 +- .../impl/ApplicationEvaluationServiceImpl.java | 10 ++++------ 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java index 1b725c96..ee5cfe23 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java @@ -111,8 +111,10 @@ public class ApplicationEvaluationDao { populateBasicDetails(entity, response); CallEntity call = callRepository.findCallEntityByApplicationId(entity.getApplicationId()); - List evaluationCriterias = evaluationCriteriaRepository.findByCallId(call.getId()); - List checklistEntities = callTargetAudienceChecklistRepository.findByCallId(call.getId()); + List evaluationCriterias = evaluationCriteriaRepository + .findByCallIdAndLookupDataTypeAndIsDeletedFalse(call.getId(), LookUpDataEntity.LookUpDataTypeEnum.EVALUATION_CRITERIA.getValue()); + List checklistEntities = callTargetAudienceChecklistRepository + .findByCallIdAndLookupDataTypeAndIsDeletedFalse(call.getId(), LookUpDataEntity.LookUpDataTypeEnum.CHECKLIST.getValue()); List applicationFormEntities = applicationFormRepository.findByApplicationId(entity.getApplicationId()); setCriteriaResponses(entity, response, evaluationCriterias); @@ -633,8 +635,10 @@ public class ApplicationEvaluationDao { call = callRepository.findCallEntityByApplicationId(applicationId); assignedApplications = assignedApplicationsRepository.findByApplicationIdAndIsDeletedFalse(applicationId).orElse(null); } - List evaluationCriterias = evaluationCriteriaRepository.findByCallId(call.getId()); - List checklistEntities = callTargetAudienceChecklistRepository.findByCallId(call.getId()); + List evaluationCriterias = evaluationCriteriaRepository + .findByCallIdAndLookupDataTypeAndIsDeletedFalse(call.getId(), LookUpDataEntity.LookUpDataTypeEnum.EVALUATION_CRITERIA.getValue()); + List checklistEntities = callTargetAudienceChecklistRepository + .findByCallIdAndLookupDataTypeAndIsDeletedFalse(call.getId(), LookUpDataEntity.LookUpDataTypeEnum.CHECKLIST.getValue()); List applicationFormEntities = applicationFormRepository.findByApplicationId(applicationId); response.setApplicationId(application.getId()); response.setAssignedApplicationId(assignedApplications.getId()); @@ -966,7 +970,8 @@ public class ApplicationEvaluationDao { } private List getEvaluationCriterias(CallEntity call) { - return evaluationCriteriaRepository.findByCallId(call.getId()); + return evaluationCriteriaRepository + .findByCallIdAndLookupDataTypeAndIsDeletedFalse(call.getId(), LookUpDataEntity.LookUpDataTypeEnum.EVALUATION_CRITERIA.getValue()); } private CriteriaResponse buildCriteriaResponse(Long applicationId, EvaluationCriteriaEntity criteria) { @@ -1207,7 +1212,8 @@ public class ApplicationEvaluationDao { List getChecklistResponse(Long applicationId) { CallEntity call = callRepository.findCallEntityByApplicationId(applicationId); - List checklistEntities = callTargetAudienceChecklistRepository.findByCallId(call.getId()); + List checklistEntities = callTargetAudienceChecklistRepository + .findByCallIdAndLookupDataTypeAndIsDeletedFalse(call.getId(), LookUpDataEntity.LookUpDataTypeEnum.CHECKLIST.getValue()); List checklistResponses = checklistEntities.stream().map(checklist -> { ChecklistResponse response = new ChecklistResponse(); response.setId(checklist.getId()); diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/CallTargetAudienceChecklistRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/CallTargetAudienceChecklistRepository.java index d092ea4a..95f58f8a 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/CallTargetAudienceChecklistRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/CallTargetAudienceChecklistRepository.java @@ -12,10 +12,10 @@ import net.gepafin.tendermanagement.entities.CallTargetAudienceChecklistEntity; @Repository public interface CallTargetAudienceChecklistRepository extends JpaRepository { - + @Query("SELECT c FROM CallTargetAudienceChecklistEntity c WHERE c.id = :id AND c.isDeleted = false") Optional findById(@Param("id") Long id); List findByCallIdAndLookupDataTypeAndIsDeletedFalse(Long id, String type); - List findByCallId(Long callId); +// List findByCallId(Long callId); } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/EvaluationCriteriaRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/EvaluationCriteriaRepository.java index 8b25fc1f..1a7f7ccd 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/EvaluationCriteriaRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/EvaluationCriteriaRepository.java @@ -16,6 +16,6 @@ public interface EvaluationCriteriaRepository extends JpaRepository findById(@Param("id") Long id); List findByCallIdAndLookupDataTypeAndIsDeletedFalse(Long callId, String type); - List findByCallId(Long callId); +// List findByCallId(Long callId); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java index 6ccee608..30cdaf80 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java @@ -14,6 +14,7 @@ import net.gepafin.tendermanagement.model.response.ApplicationEvaluationResponse import net.gepafin.tendermanagement.repositories.AssignedApplicationsRepository; import net.gepafin.tendermanagement.service.ApplicationEvaluationService; +import net.gepafin.tendermanagement.service.AssignedApplicationsService; import net.gepafin.tendermanagement.util.Validator; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; @@ -32,8 +33,9 @@ public class ApplicationEvaluationServiceImpl implements ApplicationEvaluationSe @Autowired private Validator validator; @Autowired + private AssignedApplicationsService assignedApplicationsService; + @Autowired private AssignedApplicationsRepository assignedApplicationsRepository; - @Override @Transactional(rollbackFor = Exception.class) public ApplicationEvaluationResponse createOrUpdateApplicationEvaluation( @@ -41,11 +43,7 @@ public class ApplicationEvaluationServiceImpl implements ApplicationEvaluationSe ApplicationEvaluationRequest req, Long assignedApplicationsId) { - AssignedApplicationsEntity assignedApplication = assignedApplicationsRepository - .findByIdAndIsDeletedFalse(assignedApplicationsId) - .orElseThrow(() -> new ResourceNotFoundException( - Status.NOT_FOUND, - Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_NOT_FOUND_MSG))); + AssignedApplicationsEntity assignedApplication =assignedApplicationsService.validateAssignedApplication(assignedApplicationsId); UserEntity user = validator.validatePreInstructor(request, assignedApplication.getUserId()); From 676a3298da5d172790122df7865abedfa0e86eb8 Mon Sep 17 00:00:00 2001 From: rajesh Date: Tue, 3 Dec 2024 15:39:30 +0530 Subject: [PATCH 05/11] Updated code --- .../dao/ApplicationEvaluationDao.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java index ee5cfe23..b0bf6465 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java @@ -252,7 +252,8 @@ public class ApplicationEvaluationDao { Optional formFieldEntityOptional = applicationFormFieldRepository .findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId(formFieldId, applicationFormId, applicationId); - if (formFieldEntityOptional.isPresent()) { + if (formFieldEntityOptional.isPresent() && formFieldEntityOptional.get().getFieldValue()!=null && Boolean.FALSE.equals(formFieldEntityOptional.get() + .getFieldValue().isEmpty())) { String[] documentIds = formFieldEntityOptional.get().getFieldValue().split(","); List documentResponseBeans = new ArrayList<>(); @@ -795,6 +796,10 @@ public class ApplicationEvaluationDao { ObjectMapper objectMapper = new ObjectMapper(); findFormFieldValue(applicationId, formFieldId).ifPresent(formField -> { Object value = formField.getFieldValue(); + if (value == null) { + mappedField.setFieldValue(null); + return; + } List labels = new ArrayList<>(); if (value instanceof String) { String fieldValue = (String) value; @@ -1132,7 +1137,7 @@ public class ApplicationEvaluationDao { List documentResponseBeans = new ArrayList<>(); findFormFieldValue(applicationId, criteriaFormField.getFormFieldId()).ifPresent(formField -> { String fieldValue = formField.getFieldValue(); - if (fieldValue != null) { + if (fieldValue != null && (Boolean.FALSE.equals(fieldValue.isEmpty()))) { String[] fieldValues = fieldValue.split(","); for (String value : fieldValues) { Long documentId = Long.valueOf(value.trim()); @@ -1164,7 +1169,10 @@ public class ApplicationEvaluationDao { findFormFieldValue(applicationId, criteriaFormField.getFormFieldId()).ifPresent(formField -> { Object value = formField.getFieldValue(); List labels = new ArrayList<>(); - + if (value == null) { + mappedField.setFieldValue(null); + return; + } if (value instanceof String) { List parsedValue = parseJsonValue((String) value, objectMapper); addLabelsFromParsedValues(parsedValue, contentResponseBean, labels); @@ -1249,7 +1257,7 @@ public class ApplicationEvaluationDao { if (optionalFormField.isPresent()) { ApplicationFormFieldEntity formField = optionalFormField.get(); - if (formField.getFieldValue() != null) { + if (formField.getFieldValue() != null &&(Boolean.FALSE.equals(formField.getFieldValue().isEmpty()))) { FieldResponse fieldResponse = new FieldResponse(); fieldResponse.setId(fieldId); String label = null; From c1a3e12e68d1eb9b33fcfce8eacbb9bfbece9ad7 Mon Sep 17 00:00:00 2001 From: piyushkag Date: Tue, 3 Dec 2024 19:29:31 +0530 Subject: [PATCH 06/11] Template issue. --- .../dao/EmailNotificationDao.java | 154 ++++++++++++------ .../db/changelog/db.changelog-1.0.0.xml | 7 +- ...nt_mail_notification_mail_03_12_2024_1.sql | 26 +++ 3 files changed, 133 insertions(+), 54 deletions(-) create mode 100644 src/main/resources/db/dump/update_system_email_template_for_updating_amendment_mail_notification_mail_03_12_2024_1.sql diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java index 70f90f3c..c6a2d14b 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java @@ -9,9 +9,13 @@ import net.gepafin.tendermanagement.enums.EmailEntityTypeEnum; import net.gepafin.tendermanagement.enums.RecipientTypeEnum; import net.gepafin.tendermanagement.enums.StatusTypeEnum; import net.gepafin.tendermanagement.entities.*; +import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest; import net.gepafin.tendermanagement.model.request.EmailConfig; import net.gepafin.tendermanagement.model.request.EmailLogRequest; +import net.gepafin.tendermanagement.model.response.AmendmentFormFieldResponse; import net.gepafin.tendermanagement.model.response.SystemEmailTemplateResponse; +import net.gepafin.tendermanagement.repositories.ApplicationFormFieldRepository; +import net.gepafin.tendermanagement.repositories.ApplicationFormRepository; import net.gepafin.tendermanagement.repositories.EmailLogRepository; import net.gepafin.tendermanagement.repositories.HubRepository; import net.gepafin.tendermanagement.service.*; @@ -27,6 +31,8 @@ import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.util.*; +import static net.gepafin.tendermanagement.dao.ApplicationAmendmentRequestDao.filterByName; + @Component public class EmailNotificationDao { @@ -40,7 +46,7 @@ public class EmailNotificationDao { @Autowired private UserService userService; - + @Autowired private HubService hubService; @@ -55,91 +61,133 @@ public class EmailNotificationDao { @Autowired private EmailLogRepository emailLogRepository; - + @Autowired private CompanyService companyService; + @Autowired + private ApplicationFormRepository applicationFormRepository; - private void sendEmail(ApplicationEntity applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum templateType, - Map bodyPlaceholders, List additionalRecipients,Long amendmentId) { + @Autowired + private ApplicationFormFieldRepository applicationFormFieldRepository; + + private void sendEmail(ApplicationEntity applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum templateType, Map bodyPlaceholders, + List additionalRecipients, Long amendmentId) { HubEntity hubEntity = hubService.valdateHub(applicationEntity.getHubId()); - String service = determineService(applicationEntity.getHubId()); - String legalMail = service.equals("Gepafin S.p.a.") ? "bandi.gepafin@legalmail.it" : "bandi.sviluppumbria@legalmail.it"; +// String service = determineService(applicationEntity.getHubId()); +// String legalMail = service.equals("Gepafin S.p.a.") ? "bandi.gepafin@legalmail.it" : "bandi.sviluppumbria@legalmail.it"; SystemEmailTemplateResponse systemEmailTemplateResponse = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(templateType, hubEntity, null); Map subjectPlaceholders = new HashMap<>(); - CompanyEntity company=companyService.validateCompany(applicationEntity.getCompanyId()); + CompanyEntity company = companyService.validateCompany(applicationEntity.getCompanyId()); subjectPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName()); subjectPlaceholders.put("{{company_name}}", company.getCompanyName()); - bodyPlaceholders.put("{{legal_mail}}", legalMail); +// bodyPlaceholders.put("{{legal_mail}}", legalMail); String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders); String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders); UserEntity userEntity = userService.validateUser(applicationEntity.getUserId()); List recipientEmails = getRecipientEmails(applicationEntity, userEntity, additionalRecipients); - EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY,userEntity.getBeneficiary().getId(),Utils.listToCommaSeparatedString(recipientEmails),userEntity.getId(),applicationEntity.getId(),amendmentId ,applicationEntity.getCall().getId()); - sendMail(applicationEntity.getHubId(), subject, body, recipientEmails,emailLogRequest); + EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY, 1L, + Utils.listToCommaSeparatedString(recipientEmails), userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); + sendMail(applicationEntity.getHubId(), subject, body, recipientEmails, emailLogRequest); } private List getRecipientEmails(ApplicationEntity applicationEntity, UserEntity userEntity, List additionalRecipients) { + List recipientEmails = new ArrayList<>(); - CompanyEntity company=companyService.validateCompany(applicationEntity.getCompanyId()); - String companyEmail = company.getEmail(); - String contactEmail = company.getContactEmail(); - - if (companyEmail != null && !companyEmail.isEmpty()) { - recipientEmails.add(companyEmail); - } - if (contactEmail != null && !contactEmail.isEmpty() && !contactEmail.equals(companyEmail)) { - recipientEmails.add(contactEmail); - } - - if (userEntity.getBeneficiary().getEmail() != null) { - recipientEmails.add(userEntity.getBeneficiary().getEmail()); - } - if (additionalRecipients != null) { - recipientEmails.addAll(additionalRecipients); - } + CompanyEntity company = companyService.validateCompany(applicationEntity.getCompanyId()); + // String companyEmail = company.getEmail(); + // String contactEmail = company.getContactEmail(); + // + // if (companyEmail != null && !companyEmail.isEmpty()) { + // recipientEmails.add(companyEmail); + // } + // if (contactEmail != null && !contactEmail.isEmpty() && !contactEmail.equals(companyEmail)) { + // recipientEmails.add(contactEmail); + // } + // + // if (userEntity.getBeneficiary().getEmail() != null) { + // recipientEmails.add(userEntity.getBeneficiary().getEmail()); + // } + // if (additionalRecipients != null) { + // recipientEmails.addAll(additionalRecipients); + // } + recipientEmails.add("piyush1.kag1@gmail.com"); return recipientEmails; } +// +// private String determineService(Long hubId) { +// +// HubEntity hub = hubRepository.findById(hubId).orElseThrow(() -> new IllegalArgumentException("Invalid Hub ID: " + hubId)); +// return hub.getEmailServiceType().equalsIgnoreCase("MAILGUN_SERVICE") ? "Sviluppumbria" : "Gepafin S.p.a."; +// } + public void sendMailToNotifyBeneficiaryRegardingNewAmendment(ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity) { - private String determineService(Long hubId) { - - HubEntity hub = hubRepository.findById(hubId).orElseThrow(() -> new IllegalArgumentException("Invalid Hub ID: " + hubId)); - return hub.getEmailServiceType().equalsIgnoreCase("MAILGUN_SERVICE") ? "Gepafin S.p.a." : "Sviluppumbria"; - } - - public void sendMailToNotifyBeneficiaryRegardingNewAmendment(ApplicationAmendmentRequestEntity applicationAmendmentRequest) { - - ApplicationEntity applicationEntity = applicationService.validateApplication(applicationAmendmentRequest.getApplicationId()); + ApplicationEntity applicationEntity = applicationService.validateApplication(applicationAmendmentRequestEntity.getApplicationId()); Map bodyPlaceholders = new HashMap<>(); bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName()); - bodyPlaceholders.put("{{protocol_number}}", applicationAmendmentRequest.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)); - String formFieldsJson = applicationAmendmentRequest.getFormFields(); - ObjectMapper objectMapper = new ObjectMapper(); + bodyPlaceholders.put("{{protocol_number}}", applicationAmendmentRequestEntity.getProtocol().getProtocolNumber().toString()); + bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatLocalDateTime(applicationAmendmentRequestEntity.getProtocol().getCreatedDate(), GepafinConstant.DD_MM_YYYY)); + bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(applicationAmendmentRequestEntity.getProtocol().getTime(), GepafinConstant.HH_MM_SS)); try { - List> formFields = objectMapper.readValue(formFieldsJson, new TypeReference>>() { - }); - //• + // Retrieve forms and initialize required collections + List forms = applicationFormRepository.findByApplicationId(applicationEntity.getId()); + List allFormFields = new ArrayList<>(); StringBuilder bulletPoints = new StringBuilder(); - for (Map field : formFields) { - String label = (String) field.get("label"); - boolean selected = (boolean) field.get("selected"); - if (!selected) { - bulletPoints.append("• ").append(label).append("\n"); - } + + // Extract data from forms + for (ApplicationFormEntity form : forms) { + String content = form.getForm().getContent(); + List> result = filterByName(content, "fileupload"); + allFormFields.addAll(getIdAndLabelFromResult(result)); } + + // Process allFormFields and generate bullet points + for (AmendmentFormFieldResponse field : allFormFields) { + // Build bullet points + bulletPoints.append(field.getLabel()); + bulletPoints.append("\n"); + } + // Add the generated bullet points to placeholders bodyPlaceholders.put("{{form_dataInput}}", bulletPoints.toString()); } catch (Exception e) { - log.error("Failed to parse form fields JSON: ", e); + log.error("Failed to process form fields: ", e); } - bodyPlaceholders.put("{{note}}", applicationAmendmentRequest.getNote()); - sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.DOCUMENTATION_INTEGRATION_REQUEST, bodyPlaceholders, null,applicationAmendmentRequest.getId()); + + + bodyPlaceholders.put("{{note}}", applicationAmendmentRequestEntity.getNote()); + sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.DOCUMENTATION_INTEGRATION_REQUEST, bodyPlaceholders, null, + applicationAmendmentRequestEntity.getId()); + } + + public List getIdAndLabelFromResult(List> result) { + List formFieldResponses = new ArrayList<>(); + + for (Map item : result) { + AmendmentFormFieldResponse formFieldResponse = new AmendmentFormFieldResponse(); + formFieldResponse.setFieldId((String) item.get("id")); + + // Extract "label" value from the "settings" array + List> settings = (List>) item.get("settings"); + String label = settings.stream() + .filter(setting -> "label".equals(setting.get("name"))) + .map(setting -> (String) setting.get("value")) + .findFirst() + .orElse(""); // Default to empty string if not found + + if (label == null || label.trim().isEmpty()) { + continue; + } + + formFieldResponse.setLabel(label); // Set the label as fieldValue + formFieldResponses.add(formFieldResponse); + } + + return formFieldResponses; } public void sendApplicationFailureNotificationEmail(ApplicationAmendmentRequestEntity amendmentRequest) { diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index 52a7dae3..61d8101f 100644 --- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml +++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml @@ -1961,5 +1961,10 @@ - + + + + + diff --git a/src/main/resources/db/dump/update_system_email_template_for_updating_amendment_mail_notification_mail_03_12_2024_1.sql b/src/main/resources/db/dump/update_system_email_template_for_updating_amendment_mail_notification_mail_03_12_2024_1.sql new file mode 100644 index 00000000..3e4e8e30 --- /dev/null +++ b/src/main/resources/db/dump/update_system_email_template_for_updating_amendment_mail_notification_mail_03_12_2024_1.sql @@ -0,0 +1,26 @@ +UPDATE gepafin_schema.system_email_template +SET html_content = ' + +
+

RICHIESTA INTEGRAZIONE DOCUMENTALE

+

Buongiorno,

+

In riferimento alla domanda di concessione di Finanziamento agevolato a valere sul Fondo prestiti + {{call_name}} di cui al Protocollo n. {{protocol_number}} del + {{protocol_date}} e {{protocol_time}}, alla luce dell''attività istruttoria svolta, + segnaliamo quanto segue:

+
    +
  • {{form_dataInput}}
  • +
+

{{note}}

+

Vi invitiamo a fornire quanto sopra richiesto integrando la documentazione sia caricandola all''interno dello sportello + online {{platform_link}} che inviandola a mezzo PEC all''indirizzo + {{legal_mail}} entro e non oltre 10 giorni dal ricevimento della presente comunicazione, + precisando che, in caso di mancata ricezione nei termini indicati, saremo costretti a non prendere in considerazione la Vostra richiesta di finanziamento.

+

Vi informiamo che per la ricezione della PEC farà fede la ricevuta di avvenuta consegna che attesterà il buon esito + dell''invio. La documentazione trasmessa e le informazioni fornite saranno processate dall''istruttore assegnatario della pratica.

+

Distinti Saluti,

+

{{email_signature}}

+
+ + ' +WHERE "type" = 'DOCUMENTATION_INTEGRATION_REQUEST' AND "system" = true; \ No newline at end of file From b0b38db4c711fc0aac04ced2793173f661a97b13 Mon Sep 17 00:00:00 2001 From: rajesh Date: Wed, 4 Dec 2024 16:17:39 +0530 Subject: [PATCH 07/11] updated code --- .../dao/EmailNotificationDao.java | 97 ++++++++++++------- .../enums/RecipientTypeEnum.java | 3 +- .../db/changelog/db.changelog-1.0.0.xml | 6 ++ ...nt_mail_notification_mail_04_12_2024_1.sql | 26 +++++ 4 files changed, 95 insertions(+), 37 deletions(-) create mode 100644 src/main/resources/db/dump/update_system_email_template_for_updating_amendment_mail_notification_mail_04_12_2024_1.sql diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java index c6a2d14b..4bf99110 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java @@ -1,23 +1,15 @@ package net.gepafin.tendermanagement.dao; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.*; -import net.gepafin.tendermanagement.enums.EmailEntityTypeEnum; import net.gepafin.tendermanagement.enums.RecipientTypeEnum; -import net.gepafin.tendermanagement.enums.StatusTypeEnum; -import net.gepafin.tendermanagement.entities.*; -import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest; import net.gepafin.tendermanagement.model.request.EmailConfig; import net.gepafin.tendermanagement.model.request.EmailLogRequest; import net.gepafin.tendermanagement.model.response.AmendmentFormFieldResponse; import net.gepafin.tendermanagement.model.response.SystemEmailTemplateResponse; -import net.gepafin.tendermanagement.repositories.ApplicationFormFieldRepository; -import net.gepafin.tendermanagement.repositories.ApplicationFormRepository; -import net.gepafin.tendermanagement.repositories.EmailLogRepository; -import net.gepafin.tendermanagement.repositories.HubRepository; +import net.gepafin.tendermanagement.repositories.*; import net.gepafin.tendermanagement.service.*; import net.gepafin.tendermanagement.service.impl.EmailService; import net.gepafin.tendermanagement.service.impl.EmailServiceFactory; @@ -26,6 +18,7 @@ import net.gepafin.tendermanagement.util.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.time.LocalDateTime; @@ -71,6 +64,12 @@ public class EmailNotificationDao { @Autowired private ApplicationFormFieldRepository applicationFormFieldRepository; + @Autowired + private ApplicationEvaluationRepository applicationEvaluationRepository; + + @Value("${rinaldo_email}") + private String rinaldoEmail; + private void sendEmail(ApplicationEntity applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum templateType, Map bodyPlaceholders, List additionalRecipients, Long amendmentId) { @@ -86,36 +85,60 @@ public class EmailNotificationDao { // bodyPlaceholders.put("{{legal_mail}}", legalMail); String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders); String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders); - UserEntity userEntity = userService.validateUser(applicationEntity.getUserId()); - List recipientEmails = getRecipientEmails(applicationEntity, userEntity, additionalRecipients); - EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY, 1L, - Utils.listToCommaSeparatedString(recipientEmails), userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); - sendMail(applicationEntity.getHubId(), subject, body, recipientEmails, emailLogRequest); + sendEmails(applicationEntity, userEntity, additionalRecipients,amendmentId,systemEmailTemplateResponse,subject,body); } - private List getRecipientEmails(ApplicationEntity applicationEntity, UserEntity userEntity, List additionalRecipients) { + private void sendEmails(ApplicationEntity applicationEntity, UserEntity userEntity, List additionalRecipients,Long amendmentId,SystemEmailTemplateResponse systemEmailTemplateResponse,String subject,String body) { - List recipientEmails = new ArrayList<>(); + Optional applicationEvaluationEntity = applicationEvaluationRepository.findByApplicationIdAndIsDeletedFalse(applicationEntity.getId()); CompanyEntity company = companyService.validateCompany(applicationEntity.getCompanyId()); - // String companyEmail = company.getEmail(); - // String contactEmail = company.getContactEmail(); - // - // if (companyEmail != null && !companyEmail.isEmpty()) { - // recipientEmails.add(companyEmail); - // } - // if (contactEmail != null && !contactEmail.isEmpty() && !contactEmail.equals(companyEmail)) { - // recipientEmails.add(contactEmail); - // } - // - // if (userEntity.getBeneficiary().getEmail() != null) { - // recipientEmails.add(userEntity.getBeneficiary().getEmail()); - // } - // if (additionalRecipients != null) { - // recipientEmails.addAll(additionalRecipients); - // } + String companyEmail = company.getEmail(); + String contactEmail = company.getContactEmail(); - recipientEmails.add("piyush1.kag1@gmail.com"); - return recipientEmails; + if (companyEmail != null && !companyEmail.isEmpty()) { + EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.COMPANY,company.getId() , + companyEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); + 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()); + sendMail(applicationEntity.getHubId(), subject, body, List.of(contactEmail), emailLogRequest); + } + + if (userEntity.getBeneficiary().getEmail() != null) { + String beneficiaryEmail = userEntity.getBeneficiary().getEmail(); + EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY,userEntity.getBeneficiary().getId() , + beneficiaryEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); + sendMail(applicationEntity.getHubId(), subject, body, List.of(beneficiaryEmail), emailLogRequest); + } + if(userEntity.getHub().getEmail() != null){ + String hubEmails = userEntity.getHub().getEmail(); + String[] hubEmailArray = hubEmails.split(","); + for (String hubEmail : hubEmailArray) { + hubEmail = hubEmail.trim(); + if (!hubEmail.isEmpty()) { + EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.PROPERTIES,null, + hubEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); + sendMail(applicationEntity.getHubId(), subject, body, List.of(hubEmail), emailLogRequest); + } + } + } + if (rinaldoEmail != null) { + EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.PROPERTIES,null , + rinaldoEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); + sendMail(applicationEntity.getHubId(), subject, body, List.of(rinaldoEmail), emailLogRequest); + } + if (applicationEvaluationEntity.isPresent()) { + Long preInstructorId = applicationEvaluationEntity.get().getUserId(); // Assuming UserEntity has an email field + UserEntity instructorUser = userService.validateUser(preInstructorId); + String preInstructorEmail = instructorUser.getEmail(); + if (preInstructorEmail != null && !preInstructorEmail.isEmpty()) { + EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.INSTRUCTOR, instructorUser.getId(), + preInstructorEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); + sendMail(applicationEntity.getHubId(), subject, body, List.of(preInstructorEmail), emailLogRequest); + } + } } // // private String determineService(Long hubId) { @@ -132,6 +155,7 @@ public class EmailNotificationDao { bodyPlaceholders.put("{{protocol_number}}", applicationAmendmentRequestEntity.getProtocol().getProtocolNumber().toString()); bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatLocalDateTime(applicationAmendmentRequestEntity.getProtocol().getCreatedDate(), GepafinConstant.DD_MM_YYYY)); bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(applicationAmendmentRequestEntity.getProtocol().getTime(), GepafinConstant.HH_MM_SS)); + bodyPlaceholders.put("{{response_days}}", applicationAmendmentRequestEntity.getResponseDays().toString()); try { // Retrieve forms and initialize required collections @@ -149,8 +173,9 @@ public class EmailNotificationDao { // Process allFormFields and generate bullet points for (AmendmentFormFieldResponse field : allFormFields) { // Build bullet points - bulletPoints.append(field.getLabel()); - bulletPoints.append("\n"); +// bulletPoints.append(field.getLabel()); + bulletPoints.append("
  • ").append(field.getLabel()).append("
  • "); + } // Add the generated bullet points to placeholders bodyPlaceholders.put("{{form_dataInput}}", bulletPoints.toString()); diff --git a/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java index c4f54175..8f656154 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java @@ -7,7 +7,8 @@ public enum RecipientTypeEnum { BENEFICIARY ("BENEFICIARY"), USER("USER"), COMPANY("COMPANY"), - PROPERTIES("PROPERTIES"); + PROPERTIES("PROPERTIES"), + INSTRUCTOR("INSTRUCTOR"); private String value; diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index 61d8101f..9c061c37 100644 --- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml +++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml @@ -1967,4 +1967,10 @@ path="db/dump/update_system_email_template_for_updating_amendment_mail_notification_mail_03_12_2024_1.sql"/> + + + + + diff --git a/src/main/resources/db/dump/update_system_email_template_for_updating_amendment_mail_notification_mail_04_12_2024_1.sql b/src/main/resources/db/dump/update_system_email_template_for_updating_amendment_mail_notification_mail_04_12_2024_1.sql new file mode 100644 index 00000000..564d855d --- /dev/null +++ b/src/main/resources/db/dump/update_system_email_template_for_updating_amendment_mail_notification_mail_04_12_2024_1.sql @@ -0,0 +1,26 @@ +UPDATE gepafin_schema.system_email_template +SET html_content = ' + +
    +

    RICHIESTA INTEGRAZIONE DOCUMENTALE

    +

    Buongiorno,

    +

    In riferimento alla domanda di concessione di Finanziamento agevolato a valere sul Fondo prestiti + {{call_name}} di cui al Protocollo n. {{protocol_number}} del + {{protocol_date}} e {{protocol_time}}, alla luce dell''attività istruttoria svolta, + segnaliamo quanto segue:

    +
      +
    • {{form_dataInput}}
    • +
    +

    {{note}}

    +

    Vi invitiamo a fornire quanto sopra richiesto integrando la documentazione sia caricandola all''interno dello sportello + online {{platform_link}} che inviandola a mezzo PEC all''indirizzo + bandi.gepafin@legalmail.it entro e non oltre {{response_days}} giorni dal ricevimento della presente comunicazione, + precisando che, in caso di mancata ricezione nei termini indicati, saremo costretti a non prendere in considerazione la Vostra richiesta di finanziamento.

    +

    Vi informiamo che per la ricezione della PEC farà fede la ricevuta di avvenuta consegna che attesterà il buon esito + dell''invio. La documentazione trasmessa e le informazioni fornite saranno processate dall''istruttore assegnatario della pratica.

    +

    Distinti Saluti,

    +

    {{email_signature}}

    +
    + + ' +WHERE "type" = 'DOCUMENTATION_INTEGRATION_REQUEST' AND "system" = true; \ No newline at end of file From dcbad56f073ba4e175840b642366a3dedf28ae21 Mon Sep 17 00:00:00 2001 From: piyushkag Date: Tue, 3 Dec 2024 19:29:31 +0530 Subject: [PATCH 08/11] Resolved conflicts --- .../dao/EmailNotificationDao.java | 155 ++++++++++++------ .../db/changelog/db.changelog-1.0.0.xml | 6 + ...nt_mail_notification_mail_03_12_2024_1.sql | 26 +++ 3 files changed, 136 insertions(+), 51 deletions(-) create mode 100644 src/main/resources/db/dump/update_system_email_template_for_updating_amendment_mail_notification_mail_03_12_2024_1.sql diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java index 2f193047..7a2f38ca 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java @@ -9,9 +9,13 @@ import net.gepafin.tendermanagement.enums.EmailEntityTypeEnum; import net.gepafin.tendermanagement.enums.RecipientTypeEnum; import net.gepafin.tendermanagement.enums.StatusTypeEnum; import net.gepafin.tendermanagement.entities.*; +import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest; import net.gepafin.tendermanagement.model.request.EmailConfig; import net.gepafin.tendermanagement.model.request.EmailLogRequest; +import net.gepafin.tendermanagement.model.response.AmendmentFormFieldResponse; import net.gepafin.tendermanagement.model.response.SystemEmailTemplateResponse; +import net.gepafin.tendermanagement.repositories.ApplicationFormFieldRepository; +import net.gepafin.tendermanagement.repositories.ApplicationFormRepository; import net.gepafin.tendermanagement.repositories.EmailLogRepository; import net.gepafin.tendermanagement.repositories.HubRepository; import net.gepafin.tendermanagement.service.ApplicationService; @@ -30,6 +34,8 @@ import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.util.*; +import static net.gepafin.tendermanagement.dao.ApplicationAmendmentRequestDao.filterByName; + @Component public class EmailNotificationDao { @@ -43,7 +49,7 @@ public class EmailNotificationDao { @Autowired private UserService userService; - + @Autowired private HubService hubService; @@ -59,85 +65,132 @@ public class EmailNotificationDao { @Autowired private EmailLogRepository emailLogRepository; + @Autowired + private CompanyService companyService; - private void sendEmail(ApplicationEntity applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum templateType, - Map bodyPlaceholders, List additionalRecipients,Long amendmentId) { + @Autowired + private ApplicationFormRepository applicationFormRepository; + + @Autowired + private ApplicationFormFieldRepository applicationFormFieldRepository; + + private void sendEmail(ApplicationEntity applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum templateType, Map bodyPlaceholders, + List additionalRecipients, Long amendmentId) { HubEntity hubEntity = hubService.valdateHub(applicationEntity.getHubId()); - String service = determineService(applicationEntity.getHubId()); - String legalMail = service.equals("Gepafin S.p.a.") ? "bandi.gepafin@legalmail.it" : "bandi.sviluppumbria@legalmail.it"; +// String service = determineService(applicationEntity.getHubId()); +// String legalMail = service.equals("Gepafin S.p.a.") ? "bandi.gepafin@legalmail.it" : "bandi.sviluppumbria@legalmail.it"; SystemEmailTemplateResponse systemEmailTemplateResponse = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(templateType, hubEntity, null); Map subjectPlaceholders = new HashMap<>(); + CompanyEntity company = companyService.validateCompany(applicationEntity.getCompanyId()); subjectPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName()); - subjectPlaceholders.put("{{company_name}}", applicationEntity.getCompany().getCompanyName()); - bodyPlaceholders.put("{{legal_mail}}", legalMail); + subjectPlaceholders.put("{{company_name}}", company.getCompanyName()); +// bodyPlaceholders.put("{{legal_mail}}", legalMail); String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders); String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders); UserEntity userEntity = userService.validateUser(applicationEntity.getUserId()); List recipientEmails = getRecipientEmails(applicationEntity, userEntity, additionalRecipients); - EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY,userEntity.getBeneficiary().getId(),Utils.listToCommaSeparatedString(recipientEmails),userEntity.getId(),applicationEntity.getId(),amendmentId ,applicationEntity.getCall().getId()); - sendMail(applicationEntity.getHubId(), subject, body, recipientEmails,emailLogRequest); + EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY, 1L, + Utils.listToCommaSeparatedString(recipientEmails), userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); + sendMail(applicationEntity.getHubId(), subject, body, recipientEmails, emailLogRequest); } private List getRecipientEmails(ApplicationEntity applicationEntity, UserEntity userEntity, List additionalRecipients) { + List recipientEmails = new ArrayList<>(); - String companyEmail = applicationEntity.getCompany().getEmail(); - String contactEmail = applicationEntity.getCompany().getContactEmail(); - - if (companyEmail != null && !companyEmail.isEmpty()) { - recipientEmails.add(companyEmail); - } - if (contactEmail != null && !contactEmail.isEmpty() && !contactEmail.equals(companyEmail)) { - recipientEmails.add(contactEmail); - } - - if (userEntity.getBeneficiary().getEmail() != null) { - recipientEmails.add(userEntity.getBeneficiary().getEmail()); - } - if (additionalRecipients != null) { - recipientEmails.addAll(additionalRecipients); - } + CompanyEntity company = companyService.validateCompany(applicationEntity.getCompanyId()); + // String companyEmail = company.getEmail(); + // String contactEmail = company.getContactEmail(); + // + // if (companyEmail != null && !companyEmail.isEmpty()) { + // recipientEmails.add(companyEmail); + // } + // if (contactEmail != null && !contactEmail.isEmpty() && !contactEmail.equals(companyEmail)) { + // recipientEmails.add(contactEmail); + // } + // + // if (userEntity.getBeneficiary().getEmail() != null) { + // recipientEmails.add(userEntity.getBeneficiary().getEmail()); + // } + // if (additionalRecipients != null) { + // recipientEmails.addAll(additionalRecipients); + // } + recipientEmails.add("piyush1.kag1@gmail.com"); return recipientEmails; } +// +// private String determineService(Long hubId) { +// +// HubEntity hub = hubRepository.findById(hubId).orElseThrow(() -> new IllegalArgumentException("Invalid Hub ID: " + hubId)); +// return hub.getEmailServiceType().equalsIgnoreCase("MAILGUN_SERVICE") ? "Sviluppumbria" : "Gepafin S.p.a."; +// } + public void sendMailToNotifyBeneficiaryRegardingNewAmendment(ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity) { - private String determineService(Long hubId) { - - HubEntity hub = hubRepository.findById(hubId).orElseThrow(() -> new IllegalArgumentException("Invalid Hub ID: " + hubId)); - return hub.getEmailServiceType().equalsIgnoreCase("MAILGUN_SERVICE") ? "Gepafin S.p.a." : "Sviluppumbria"; - } - - public void sendMailToNotifyBeneficiaryRegardingNewAmendment(ApplicationAmendmentRequestEntity applicationAmendmentRequest) { - - ApplicationEntity applicationEntity = applicationService.validateApplication(applicationAmendmentRequest.getApplicationId()); + ApplicationEntity applicationEntity = applicationService.validateApplication(applicationAmendmentRequestEntity.getApplicationId()); Map bodyPlaceholders = new HashMap<>(); bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName()); - bodyPlaceholders.put("{{protocol_number}}", applicationAmendmentRequest.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)); - String formFieldsJson = applicationAmendmentRequest.getFormFields(); - ObjectMapper objectMapper = new ObjectMapper(); + bodyPlaceholders.put("{{protocol_number}}", applicationAmendmentRequestEntity.getProtocol().getProtocolNumber().toString()); + bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatLocalDateTime(applicationAmendmentRequestEntity.getProtocol().getCreatedDate(), GepafinConstant.DD_MM_YYYY)); + bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(applicationAmendmentRequestEntity.getProtocol().getTime(), GepafinConstant.HH_MM_SS)); try { - List> formFields = objectMapper.readValue(formFieldsJson, new TypeReference>>() { - }); - //• + // Retrieve forms and initialize required collections + List forms = applicationFormRepository.findByApplicationId(applicationEntity.getId()); + List allFormFields = new ArrayList<>(); StringBuilder bulletPoints = new StringBuilder(); - for (Map field : formFields) { - String label = (String) field.get("label"); - boolean selected = (boolean) field.get("selected"); - if (!selected) { - bulletPoints.append("• ").append(label).append("\n"); - } + + // Extract data from forms + for (ApplicationFormEntity form : forms) { + String content = form.getForm().getContent(); + List> result = filterByName(content, "fileupload"); + allFormFields.addAll(getIdAndLabelFromResult(result)); } + + // Process allFormFields and generate bullet points + for (AmendmentFormFieldResponse field : allFormFields) { + // Build bullet points + bulletPoints.append(field.getLabel()); + bulletPoints.append("\n"); + } + // Add the generated bullet points to placeholders bodyPlaceholders.put("{{form_dataInput}}", bulletPoints.toString()); } catch (Exception e) { - log.error("Failed to parse form fields JSON: ", e); + log.error("Failed to process form fields: ", e); } - bodyPlaceholders.put("{{note}}", applicationAmendmentRequest.getNote()); - sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.DOCUMENTATION_INTEGRATION_REQUEST, bodyPlaceholders, null,applicationAmendmentRequest.getId()); + + + bodyPlaceholders.put("{{note}}", applicationAmendmentRequestEntity.getNote()); + sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.DOCUMENTATION_INTEGRATION_REQUEST, bodyPlaceholders, null, + applicationAmendmentRequestEntity.getId()); + } + + public List getIdAndLabelFromResult(List> result) { + List formFieldResponses = new ArrayList<>(); + + for (Map item : result) { + AmendmentFormFieldResponse formFieldResponse = new AmendmentFormFieldResponse(); + formFieldResponse.setFieldId((String) item.get("id")); + + // Extract "label" value from the "settings" array + List> settings = (List>) item.get("settings"); + String label = settings.stream() + .filter(setting -> "label".equals(setting.get("name"))) + .map(setting -> (String) setting.get("value")) + .findFirst() + .orElse(""); // Default to empty string if not found + + if (label == null || label.trim().isEmpty()) { + continue; + } + + formFieldResponse.setLabel(label); // Set the label as fieldValue + formFieldResponses.add(formFieldResponse); + } + + return formFieldResponses; } public void sendApplicationFailureNotificationEmail(ApplicationAmendmentRequestEntity amendmentRequest) { diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index ea473da2..114ccd07 100644 --- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml +++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml @@ -1803,4 +1803,10 @@ + + + + + diff --git a/src/main/resources/db/dump/update_system_email_template_for_updating_amendment_mail_notification_mail_03_12_2024_1.sql b/src/main/resources/db/dump/update_system_email_template_for_updating_amendment_mail_notification_mail_03_12_2024_1.sql new file mode 100644 index 00000000..3e4e8e30 --- /dev/null +++ b/src/main/resources/db/dump/update_system_email_template_for_updating_amendment_mail_notification_mail_03_12_2024_1.sql @@ -0,0 +1,26 @@ +UPDATE gepafin_schema.system_email_template +SET html_content = ' + +
    +

    RICHIESTA INTEGRAZIONE DOCUMENTALE

    +

    Buongiorno,

    +

    In riferimento alla domanda di concessione di Finanziamento agevolato a valere sul Fondo prestiti + {{call_name}} di cui al Protocollo n. {{protocol_number}} del + {{protocol_date}} e {{protocol_time}}, alla luce dell''attività istruttoria svolta, + segnaliamo quanto segue:

    +
      +
    • {{form_dataInput}}
    • +
    +

    {{note}}

    +

    Vi invitiamo a fornire quanto sopra richiesto integrando la documentazione sia caricandola all''interno dello sportello + online {{platform_link}} che inviandola a mezzo PEC all''indirizzo + {{legal_mail}} entro e non oltre 10 giorni dal ricevimento della presente comunicazione, + precisando che, in caso di mancata ricezione nei termini indicati, saremo costretti a non prendere in considerazione la Vostra richiesta di finanziamento.

    +

    Vi informiamo che per la ricezione della PEC farà fede la ricevuta di avvenuta consegna che attesterà il buon esito + dell''invio. La documentazione trasmessa e le informazioni fornite saranno processate dall''istruttore assegnatario della pratica.

    +

    Distinti Saluti,

    +

    {{email_signature}}

    +
    + + ' +WHERE "type" = 'DOCUMENTATION_INTEGRATION_REQUEST' AND "system" = true; \ No newline at end of file From 594f7f02e9897753eff59471b032a44ab28297cd Mon Sep 17 00:00:00 2001 From: rajesh Date: Wed, 4 Dec 2024 16:17:39 +0530 Subject: [PATCH 09/11] Resolved conflicts --- .../dao/EmailNotificationDao.java | 102 +++++++++++------- .../enums/RecipientTypeEnum.java | 3 +- .../db/changelog/db.changelog-1.0.0.xml | 6 ++ ...nt_mail_notification_mail_04_12_2024_1.sql | 26 +++++ 4 files changed, 96 insertions(+), 41 deletions(-) create mode 100644 src/main/resources/db/dump/update_system_email_template_for_updating_amendment_mail_notification_mail_04_12_2024_1.sql diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java index 7a2f38ca..a3687292 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java @@ -1,27 +1,16 @@ package net.gepafin.tendermanagement.dao; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.*; -import net.gepafin.tendermanagement.enums.EmailEntityTypeEnum; import net.gepafin.tendermanagement.enums.RecipientTypeEnum; -import net.gepafin.tendermanagement.enums.StatusTypeEnum; -import net.gepafin.tendermanagement.entities.*; -import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest; import net.gepafin.tendermanagement.model.request.EmailConfig; import net.gepafin.tendermanagement.model.request.EmailLogRequest; import net.gepafin.tendermanagement.model.response.AmendmentFormFieldResponse; import net.gepafin.tendermanagement.model.response.SystemEmailTemplateResponse; -import net.gepafin.tendermanagement.repositories.ApplicationFormFieldRepository; -import net.gepafin.tendermanagement.repositories.ApplicationFormRepository; -import net.gepafin.tendermanagement.repositories.EmailLogRepository; -import net.gepafin.tendermanagement.repositories.HubRepository; -import net.gepafin.tendermanagement.service.ApplicationService; -import net.gepafin.tendermanagement.service.HubService; -import net.gepafin.tendermanagement.service.SystemEmailTemplatesService; -import net.gepafin.tendermanagement.service.UserService; +import net.gepafin.tendermanagement.repositories.*; +import net.gepafin.tendermanagement.service.*; import net.gepafin.tendermanagement.service.impl.EmailService; import net.gepafin.tendermanagement.service.impl.EmailServiceFactory; import net.gepafin.tendermanagement.util.DateTimeUtil; @@ -29,6 +18,7 @@ import net.gepafin.tendermanagement.util.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.time.LocalDateTime; @@ -74,6 +64,12 @@ public class EmailNotificationDao { @Autowired private ApplicationFormFieldRepository applicationFormFieldRepository; + @Autowired + private ApplicationEvaluationRepository applicationEvaluationRepository; + + @Value("${rinaldo_email}") + private String rinaldoEmail; + private void sendEmail(ApplicationEntity applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum templateType, Map bodyPlaceholders, List additionalRecipients, Long amendmentId) { @@ -89,36 +85,60 @@ public class EmailNotificationDao { // bodyPlaceholders.put("{{legal_mail}}", legalMail); String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders); String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders); - UserEntity userEntity = userService.validateUser(applicationEntity.getUserId()); - List recipientEmails = getRecipientEmails(applicationEntity, userEntity, additionalRecipients); - EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY, 1L, - Utils.listToCommaSeparatedString(recipientEmails), userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); - sendMail(applicationEntity.getHubId(), subject, body, recipientEmails, emailLogRequest); + sendEmails(applicationEntity, userEntity, additionalRecipients,amendmentId,systemEmailTemplateResponse,subject,body); } - private List getRecipientEmails(ApplicationEntity applicationEntity, UserEntity userEntity, List additionalRecipients) { + private void sendEmails(ApplicationEntity applicationEntity, UserEntity userEntity, List additionalRecipients,Long amendmentId,SystemEmailTemplateResponse systemEmailTemplateResponse,String subject,String body) { - List recipientEmails = new ArrayList<>(); + Optional applicationEvaluationEntity = applicationEvaluationRepository.findByApplicationIdAndIsDeletedFalse(applicationEntity.getId()); CompanyEntity company = companyService.validateCompany(applicationEntity.getCompanyId()); - // String companyEmail = company.getEmail(); - // String contactEmail = company.getContactEmail(); - // - // if (companyEmail != null && !companyEmail.isEmpty()) { - // recipientEmails.add(companyEmail); - // } - // if (contactEmail != null && !contactEmail.isEmpty() && !contactEmail.equals(companyEmail)) { - // recipientEmails.add(contactEmail); - // } - // - // if (userEntity.getBeneficiary().getEmail() != null) { - // recipientEmails.add(userEntity.getBeneficiary().getEmail()); - // } - // if (additionalRecipients != null) { - // recipientEmails.addAll(additionalRecipients); - // } + String companyEmail = company.getEmail(); + String contactEmail = company.getContactEmail(); - recipientEmails.add("piyush1.kag1@gmail.com"); - return recipientEmails; + if (companyEmail != null && !companyEmail.isEmpty()) { + EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.COMPANY,company.getId() , + companyEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); + 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()); + sendMail(applicationEntity.getHubId(), subject, body, List.of(contactEmail), emailLogRequest); + } + + if (userEntity.getBeneficiary().getEmail() != null) { + String beneficiaryEmail = userEntity.getBeneficiary().getEmail(); + EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY,userEntity.getBeneficiary().getId() , + beneficiaryEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); + sendMail(applicationEntity.getHubId(), subject, body, List.of(beneficiaryEmail), emailLogRequest); + } + if(userEntity.getHub().getEmail() != null){ + String hubEmails = userEntity.getHub().getEmail(); + String[] hubEmailArray = hubEmails.split(","); + for (String hubEmail : hubEmailArray) { + hubEmail = hubEmail.trim(); + if (!hubEmail.isEmpty()) { + EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.PROPERTIES,null, + hubEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); + sendMail(applicationEntity.getHubId(), subject, body, List.of(hubEmail), emailLogRequest); + } + } + } + if (rinaldoEmail != null) { + EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.PROPERTIES,null , + rinaldoEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); + sendMail(applicationEntity.getHubId(), subject, body, List.of(rinaldoEmail), emailLogRequest); + } + if (applicationEvaluationEntity.isPresent()) { + Long preInstructorId = applicationEvaluationEntity.get().getUserId(); // Assuming UserEntity has an email field + UserEntity instructorUser = userService.validateUser(preInstructorId); + String preInstructorEmail = instructorUser.getEmail(); + if (preInstructorEmail != null && !preInstructorEmail.isEmpty()) { + EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.INSTRUCTOR, instructorUser.getId(), + preInstructorEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); + sendMail(applicationEntity.getHubId(), subject, body, List.of(preInstructorEmail), emailLogRequest); + } + } } // // private String determineService(Long hubId) { @@ -135,6 +155,7 @@ public class EmailNotificationDao { bodyPlaceholders.put("{{protocol_number}}", applicationAmendmentRequestEntity.getProtocol().getProtocolNumber().toString()); bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatLocalDateTime(applicationAmendmentRequestEntity.getProtocol().getCreatedDate(), GepafinConstant.DD_MM_YYYY)); bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(applicationAmendmentRequestEntity.getProtocol().getTime(), GepafinConstant.HH_MM_SS)); + bodyPlaceholders.put("{{response_days}}", applicationAmendmentRequestEntity.getResponseDays().toString()); try { // Retrieve forms and initialize required collections @@ -152,8 +173,9 @@ public class EmailNotificationDao { // Process allFormFields and generate bullet points for (AmendmentFormFieldResponse field : allFormFields) { // Build bullet points - bulletPoints.append(field.getLabel()); - bulletPoints.append("\n"); +// bulletPoints.append(field.getLabel()); + bulletPoints.append("
  • ").append(field.getLabel()).append("
  • "); + } // Add the generated bullet points to placeholders bodyPlaceholders.put("{{form_dataInput}}", bulletPoints.toString()); diff --git a/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java index c4f54175..8f656154 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java @@ -7,7 +7,8 @@ public enum RecipientTypeEnum { BENEFICIARY ("BENEFICIARY"), USER("USER"), COMPANY("COMPANY"), - PROPERTIES("PROPERTIES"); + PROPERTIES("PROPERTIES"), + INSTRUCTOR("INSTRUCTOR"); private String value; diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index 114ccd07..ba7ce41c 100644 --- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml +++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml @@ -1809,4 +1809,10 @@ path="db/dump/update_system_email_template_for_updating_amendment_mail_notification_mail_03_12_2024_1.sql"/> + + + + + diff --git a/src/main/resources/db/dump/update_system_email_template_for_updating_amendment_mail_notification_mail_04_12_2024_1.sql b/src/main/resources/db/dump/update_system_email_template_for_updating_amendment_mail_notification_mail_04_12_2024_1.sql new file mode 100644 index 00000000..564d855d --- /dev/null +++ b/src/main/resources/db/dump/update_system_email_template_for_updating_amendment_mail_notification_mail_04_12_2024_1.sql @@ -0,0 +1,26 @@ +UPDATE gepafin_schema.system_email_template +SET html_content = ' + +
    +

    RICHIESTA INTEGRAZIONE DOCUMENTALE

    +

    Buongiorno,

    +

    In riferimento alla domanda di concessione di Finanziamento agevolato a valere sul Fondo prestiti + {{call_name}} di cui al Protocollo n. {{protocol_number}} del + {{protocol_date}} e {{protocol_time}}, alla luce dell''attività istruttoria svolta, + segnaliamo quanto segue:

    +
      +
    • {{form_dataInput}}
    • +
    +

    {{note}}

    +

    Vi invitiamo a fornire quanto sopra richiesto integrando la documentazione sia caricandola all''interno dello sportello + online {{platform_link}} che inviandola a mezzo PEC all''indirizzo + bandi.gepafin@legalmail.it entro e non oltre {{response_days}} giorni dal ricevimento della presente comunicazione, + precisando che, in caso di mancata ricezione nei termini indicati, saremo costretti a non prendere in considerazione la Vostra richiesta di finanziamento.

    +

    Vi informiamo che per la ricezione della PEC farà fede la ricevuta di avvenuta consegna che attesterà il buon esito + dell''invio. La documentazione trasmessa e le informazioni fornite saranno processate dall''istruttore assegnatario della pratica.

    +

    Distinti Saluti,

    +

    {{email_signature}}

    +
    + + ' +WHERE "type" = 'DOCUMENTATION_INTEGRATION_REQUEST' AND "system" = true; \ No newline at end of file From 80c00760a868b4d61fee4e10e4067db18cdaf9fb Mon Sep 17 00:00:00 2001 From: rajesh Date: Wed, 4 Dec 2024 16:48:59 +0530 Subject: [PATCH 10/11] updated code --- .../gepafin/tendermanagement/dao/EmailNotificationDao.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java index a3687292..1b390556 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java @@ -79,7 +79,7 @@ public class EmailNotificationDao { SystemEmailTemplateResponse systemEmailTemplateResponse = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(templateType, hubEntity, null); Map subjectPlaceholders = new HashMap<>(); - CompanyEntity company = companyService.validateCompany(applicationEntity.getCompanyId()); + CompanyEntity company = companyService.validateCompany(applicationEntity.getCompany().getId()); subjectPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName()); subjectPlaceholders.put("{{company_name}}", company.getCompanyName()); // bodyPlaceholders.put("{{legal_mail}}", legalMail); @@ -91,7 +91,7 @@ public class EmailNotificationDao { private void sendEmails(ApplicationEntity applicationEntity, UserEntity userEntity, List additionalRecipients,Long amendmentId,SystemEmailTemplateResponse systemEmailTemplateResponse,String subject,String body) { Optional applicationEvaluationEntity = applicationEvaluationRepository.findByApplicationIdAndIsDeletedFalse(applicationEntity.getId()); - CompanyEntity company = companyService.validateCompany(applicationEntity.getCompanyId()); + CompanyEntity company = companyService.validateCompany(applicationEntity.getCompany().getId()); String companyEmail = company.getEmail(); String contactEmail = company.getContactEmail(); From 60af8819246275d104acdef4f32e72ab8237e364 Mon Sep 17 00:00:00 2001 From: rajeshkhore Date: Wed, 4 Dec 2024 20:45:42 +0530 Subject: [PATCH 11/11] FIxed JWT issue --- .../config/jwt/JWTFilter.java | 69 ++++++------ .../config/jwt/TokenProvider.java | 100 ++++++++---------- .../service/impl/AuthenticationService.java | 2 - src/main/resources/application.properties | 4 +- 4 files changed, 85 insertions(+), 90 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/config/jwt/JWTFilter.java b/src/main/java/net/gepafin/tendermanagement/config/jwt/JWTFilter.java index 4d8d5948..8f8f3131 100644 --- a/src/main/java/net/gepafin/tendermanagement/config/jwt/JWTFilter.java +++ b/src/main/java/net/gepafin/tendermanagement/config/jwt/JWTFilter.java @@ -1,43 +1,48 @@ package net.gepafin.tendermanagement.config.jwt; -import jakarta.servlet.FilterChain; -import jakarta.servlet.ServletException; -import jakarta.servlet.ServletRequest; -import jakarta.servlet.ServletResponse; -import jakarta.servlet.http.HttpServletRequest; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.util.StringUtils; -import org.springframework.web.filter.GenericFilterBean; - import java.io.IOException; -public class JWTFilter extends GenericFilterBean { +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.util.StringUtils; +import org.springframework.web.filter.OncePerRequestFilter; - private final TokenProvider tokenProvider; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; - public JWTFilter(TokenProvider tokenProvider) { - this.tokenProvider = tokenProvider; - } +public class JWTFilter extends OncePerRequestFilter { - @Override - public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) - throws IOException, ServletException { - HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; - String token = resolveToken(httpServletRequest); + private final TokenProvider tokenProvider; - if (StringUtils.hasText(token) && tokenProvider.validateToken(token)) { - Authentication authentication = tokenProvider.getAuthentication(token); - if (authentication != null) { - SecurityContextHolder.getContext().setAuthentication(authentication); - } - } + public JWTFilter(TokenProvider tokenProvider) { + this.tokenProvider = tokenProvider; + } - filterChain.doFilter(servletRequest, servletResponse); - } + protected void doFilterInternal(HttpServletRequest servletRequest, HttpServletResponse servletResponse, + FilterChain filterChain) throws ServletException, IOException { - private String resolveToken(HttpServletRequest request) { - String bearerToken = request.getHeader("Authorization"); - return StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ") ? bearerToken.substring(7) : null; - } + try { + HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; + String token = resolveToken(httpServletRequest); + + if (StringUtils.hasText(token) && tokenProvider.validateToken(token)) { + Authentication authentication = tokenProvider.getAuthentication(token); + if (authentication != null) { + SecurityContextHolder.getContext().setAuthentication(authentication); + } + } + + filterChain.doFilter(servletRequest, servletResponse); + } catch (Exception e) { + servletResponse.setStatus(HttpServletResponse.SC_FORBIDDEN); + } + + } + + private String resolveToken(HttpServletRequest request) { + String bearerToken = request.getHeader("Authorization"); + return StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ") ? bearerToken.substring(7) : null; + } } diff --git a/src/main/java/net/gepafin/tendermanagement/config/jwt/TokenProvider.java b/src/main/java/net/gepafin/tendermanagement/config/jwt/TokenProvider.java index 41d9fc16..fa4ad277 100644 --- a/src/main/java/net/gepafin/tendermanagement/config/jwt/TokenProvider.java +++ b/src/main/java/net/gepafin/tendermanagement/config/jwt/TokenProvider.java @@ -1,5 +1,39 @@ package net.gepafin.tendermanagement.config.jwt; +import static io.micrometer.common.util.StringUtils.isEmpty; + +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.Base64; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import javax.crypto.SecretKey; + +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.time.DateUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import com.google.gson.Gson; + import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; @@ -14,30 +48,6 @@ import net.gepafin.tendermanagement.repositories.UserRepository; import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import net.gepafin.tendermanagement.web.rest.api.errors.UnauthorizedAccessException; -import org.apache.commons.lang3.ArrayUtils; -import org.apache.commons.lang3.time.DateUtils; -import org.apache.http.HttpResponse; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.User; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; - -import javax.crypto.SecretKey; -import java.nio.charset.StandardCharsets; -import java.util.*; -import java.util.stream.Collectors; -import com.google.gson.Gson; - -import static io.micrometer.common.util.StringUtils.isEmpty; @Component @@ -48,7 +58,7 @@ public class TokenProvider { private String secretKey; @Value("${security.authentication.jwt.token-validity-in-seconds}") - private long tokenValidityInSeconds; + private int tokenValidityInSeconds; @Autowired private UserRepository userRepository; @@ -60,7 +70,6 @@ public class TokenProvider { private static final String MERCHANTID="merchantId"; static final String AUTH_SECRET = "X-Api-Secret"; - private final Set invalidatedTokens = new HashSet<>(); private static final String USER_ID = "userId"; public UserEntity validateUser(Map userInfo) { @@ -96,12 +105,12 @@ public class TokenProvider { Date validity; if (Boolean.TRUE.equals(rememberMe)) { - now = DateUtils.addMonths(new Date(), 2).getTime(); + now = DateUtils.addDays(new Date(), 2).getTime(); validity = new Date(now); - log.info("Creating token with extended validity for 2 months."); + log.info("Creating token with extended validity for 2 days."); } else { - now = (new Date()).getTime(); - validity = new Date(now + (this.tokenValidityInSeconds * 1000)); + now = DateUtils.addSeconds(new Date(), this.tokenValidityInSeconds).getTime(); + validity = new Date(now); log.info("Creating token with standard validity of {} seconds.", this.tokenValidityInSeconds); } @@ -148,32 +157,15 @@ public class TokenProvider { return authorities; } - public boolean validateToken(String authToken) { - try { - if (isTokenInvalid(authToken)) { - log.warn("Token is invalidated."); - return false; - } - Jwts.parserBuilder() - .setSigningKey(key) - .build() - .parseClaimsJws(authToken); - log.info("Token is valid."); - return true; - } catch (Exception e) { - log.error("Token validation failed: {}", e.getMessage()); - return false; - } - } + public boolean validateToken(String authToken) { - public void invalidateToken(String token) { - invalidatedTokens.add(token); - log.info("Token invalidated: {}", token); - } + Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(authToken); + log.info("Token is valid."); + return true; - public boolean isTokenInvalid(String token) { - return invalidatedTokens.contains(token); - } + } + + public Map getUserInfoAndUserIdFromToken(HttpServletRequest request) { Map userInfo = new HashMap<>(); String authSecretHeader=request.getHeader(AUTH_SECRET); diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/AuthenticationService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/AuthenticationService.java index d4dab052..ad8182de 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/AuthenticationService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/AuthenticationService.java @@ -203,8 +203,6 @@ public class AuthenticationService { public void logout(HttpServletRequest request, HttpServletResponse response) { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); if (auth != null) { - String token = tokenProvider.extractTokenFromRequest(request); - tokenProvider.invalidateToken(token); new SecurityContextLogoutHandler().logout(request, response, auth); } SecurityContextHolder.getContext().setAuthentication(null); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 19988cf3..fb109ba7 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -37,8 +37,8 @@ aws.s3.url = https://mementoresources.s3.eu-west-1.amazonaws.com/ #aws.s3.url.folder.signed.document=gepafin/signed-document # JWT configuration # Ensure these values match your expectations -security.authentication.jwt.secret=my-secret-token-to-change-in-prod-environment-your-super-secure-randomly-generated-key -security.authentication.jwt.token-validity-in-seconds=86400 +security.authentication.jwt.secret=Z3/zjSD96Hdvh/AMyaMLJLWSVF00AOmxxEk4Kv8E+bM3bUW/QXOu45OSgRD6H16RvQ/pWZznDQP3l2ZkPlu9Sg== +security.authentication.jwt.token-validity-in-seconds=7200 # Default system base URLs base-url=https://api-dev-gepafin.memento.credit