From 6166f92801cca3cb05932de18fa0698271d59bc6 Mon Sep 17 00:00:00 2001 From: rajesh Date: Thu, 23 Oct 2025 17:09:04 +0530 Subject: [PATCH 1/4] Updated document logic for special amendment --- .../dao/EmailNotificationDao.java | 9 +++++++-- .../tendermanagement/util/S3DocxProcessor.java | 4 +++- .../resources/db/changelog/db.changelog-1.0.0.xml | 3 +++ ..._document_for_special_amendment_23-10-2025.sql | 15 +++++++++++++++ 4 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/db/dump/update_document_for_special_amendment_23-10-2025.sql diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java index 87b23c05..4cce5925 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java @@ -145,12 +145,17 @@ public class EmailNotificationDao { Map replacements=new HashMap<>(); List documentEntities=new ArrayList<>(); if(systemEmailTemplateResponse.getEmailScenario().equals(EmailScenarioTypeEnum.SPECIAL_APPLICATION_AMENDMENT_REQUESTED)) { + String amount=Utils.convertToItalianFormat(String.valueOf(applicationEntity.getAmountAccepted())); replacements = Map.of( "{call_name}", applicationEntity.getCall().getName(), - "{amount_accepted}", String.valueOf(applicationEntity.getAmountAccepted()), + "{amount_accepted}", amount, "{pec}", "bandi.gepafin@legalmail.it" ); - documentEntities=documentRepository.findBySourceInAndIsDeletedFalse(List.of(applicationAmendmentRequest.getAmendmentDocumentType(),"MODELLO_AUTOCERTIFICAZIONE","MODELLO_PRIVACY")); + if(Boolean.TRUE.equals(AmendmentDocumentTypeEnum.ALTRE_GARANZIE.getValue().equals(applicationAmendmentRequest.getAmendmentDocumentType()))){ + documentEntities=documentRepository.findBySourceInAndIsDeletedFalse(List.of(applicationAmendmentRequest.getAmendmentDocumentType(),"MODELLO_AUTOCERTIFICAZIONE","MODELLO_PRIVACY")); + }else { + documentEntities = documentRepository.findBySourceInAndIsDeletedFalse(List.of(applicationAmendmentRequest.getAmendmentDocumentType())); + } } if(Boolean.TRUE.equals(userEntity.getHub().getUniqueUuid().equals(defaultHubUuid)) && Boolean.TRUE.equals(systemEmailTemplateResponse.getEmailScenario().equals(EmailScenarioTypeEnum.APPLICATION_AMENDMENT_REQUESTED))) { List documentIds=applicationDao.validateDocumentIds(applicationAmendmentRequest.getAmendmentInitialDocument()); diff --git a/src/main/java/net/gepafin/tendermanagement/util/S3DocxProcessor.java b/src/main/java/net/gepafin/tendermanagement/util/S3DocxProcessor.java index 9175eec1..86037d8f 100644 --- a/src/main/java/net/gepafin/tendermanagement/util/S3DocxProcessor.java +++ b/src/main/java/net/gepafin/tendermanagement/util/S3DocxProcessor.java @@ -10,6 +10,8 @@ import org.slf4j.LoggerFactory; import java.io.*; import java.net.URI; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -44,7 +46,7 @@ public class S3DocxProcessor { // Extract bucket & key from URL AmazonS3URI s3Uri = new AmazonS3URI(s3Url); String bucket = s3Uri.getBucket(); - String key = s3Uri.getKey(); + String key = URLDecoder.decode(s3Uri.getKey(), StandardCharsets.UTF_8); try (S3Object s3Object = s3Client.getObject(bucket, key); InputStream originalStream = new BufferedInputStream(s3Object.getObjectContent())) { byte[] updatedBytes=null; 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 f9fecdf1..0a514895 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 @@ -3092,4 +3092,7 @@ + + + diff --git a/src/main/resources/db/dump/update_document_for_special_amendment_23-10-2025.sql b/src/main/resources/db/dump/update_document_for_special_amendment_23-10-2025.sql new file mode 100644 index 00000000..2854120f --- /dev/null +++ b/src/main/resources/db/dump/update_document_for_special_amendment_23-10-2025.sql @@ -0,0 +1,15 @@ +UPDATE gepafin_schema."document" +SET file_name='lettera di accettazione esito delibera – 1.docx', file_path='https://mementoresources.s3.amazonaws.com/gepafin/staging/template/lettera%20di%20accettazione%20esito%20delibera%20%E2%80%93%201.docx' +WHERE "source"='NESSUNA_GARANZIA'; + +UPDATE gepafin_schema."document" +SET file_name='lettera di accettazione esito delibera – 2.docx', file_path='https://mementoresources.s3.amazonaws.com/gepafin/staging/template/lettera%20di%20accettazione%20esito%20delibera%20%E2%80%93%202.docx' +WHERE "source"='GARANZIA_MCC'; + +UPDATE gepafin_schema."document" +SET file_name='lettera di accettazione esito delibera – 3.docx', file_path='https://mementoresources.s3.amazonaws.com/gepafin/staging/template/lettera%20di%20accettazione%20esito%20delibera%20%E2%80%93%203.docx' +WHERE "source"='MCC_START_UP'; + +UPDATE gepafin_schema."document" +SET file_name='lettera di accettazione esito delibera – 4.docx', file_path='https://mementoresources.s3.amazonaws.com/gepafin/staging/template/lettera%20di%20accettazione%20esito%20delibera%20%E2%80%93%204.docx' +WHERE "source"='ALTRE_GARANZIE'; \ No newline at end of file From 80d142ba941c1e0697b1e7f4efa9a7251db43ac0 Mon Sep 17 00:00:00 2001 From: rajesh Date: Fri, 24 Oct 2025 13:39:14 +0530 Subject: [PATCH 2/4] Add beneficiary email while sending the mail --- .../dao/ApplicationAmendmentRequestDao.java | 7 ++++++- .../gepafin/tendermanagement/dao/ApplicationDao.java | 7 +++++++ .../tendermanagement/dao/EmailNotificationDao.java | 11 ++++++++++- .../tendermanagement/enums/RecipientTypeEnum.java | 3 ++- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java index 3e6bf38d..e5dd6c4b 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java @@ -1846,7 +1846,12 @@ public class ApplicationAmendmentRequestDao { throw new CustomValidationException(Status.VALIDATION_ERROR,Translator.toLocale(GepafinConstant.INVALID_APPLICATION_STATUS)); } ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity = new ApplicationAmendmentRequestEntity(); - applicationAmendmentRequestEntity.setResponseDays(20l); + if(Boolean.TRUE.equals(applicationAmendmentRequest.getAmendmentDocumentType().equals(AmendmentDocumentTypeEnum.ALTRE_GARANZIE))) { + applicationAmendmentRequestEntity.setResponseDays(20l); + } + else { + applicationAmendmentRequestEntity.setResponseDays(10l); + } applicationAmendmentRequestEntity.setEndDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()).plusDays(20)); applicationAmendmentRequestEntity.setIsEmail(Boolean.TRUE); applicationAmendmentRequestEntity.setIsNotification(Boolean.FALSE); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index 787e0346..d4000034 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -1235,6 +1235,7 @@ public class ApplicationDao { emailLogRequest.setRecipientType(RecipientTypeEnum.BENEFICIARY); if(Boolean.TRUE.equals(hub.getUniqueUuid().equals(defaultHubUuid))){ + emailLogRequest.setRecipientType(RecipientTypeEnum.APPLICATION_PEC); email=applicationEntity.getPecEmail(); }else { email = userEntity.getBeneficiary().getEmail(); @@ -1242,6 +1243,12 @@ public class ApplicationDao { emailLogRequest.setRecipientId(userEntity.getBeneficiary().getId()); } emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(email),emailLogRequest); + if (Boolean.TRUE.equals(hub.getUniqueUuid().equals(defaultHubUuid)) && userEntity.getBeneficiary() != null) { + emailLogRequest.setRecipientType(RecipientTypeEnum.BENEFICIARY); + email = userEntity.getBeneficiary().getEmail(); + emailLogRequest.setRecipientId(userEntity.getBeneficiary().getId()); + emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(email),emailLogRequest); + } List recipientEmails = new ArrayList<>(); // recipientEmails.add(email); String companyEmail = userWithCompany.getEmail(); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java index 4cce5925..08650fb7 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java @@ -221,16 +221,25 @@ public class EmailNotificationDao { if (userEntity.getBeneficiary().getEmail() != null) { String beneficiaryEmail = null; + RecipientTypeEnum recipientTypeEnum=RecipientTypeEnum.BENEFICIARY; if (Boolean.TRUE.equals(userEntity.getHub().getUniqueUuid().equals(defaultHubUuid))){ + recipientTypeEnum=RecipientTypeEnum.APPLICATION_PEC; beneficiaryEmail=applicationEntity.getPecEmail(); }else { beneficiaryEmail=userEntity.getBeneficiary().getEmail(); } - EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY,userEntity.getBeneficiary().getId() , + EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), recipientTypeEnum,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 (Boolean.TRUE.equals(userEntity.getHub().getUniqueUuid().equals(defaultHubUuid)) && userEntity.getBeneficiary() != 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()); + emailLogRequest.setAttachments(attachmentRequests); + sendMail(applicationEntity.getHubId(), subject, body, List.of(beneficiaryEmail), emailLogRequest); + } if(userEntity.getHub().getEmail() != null){ String hubEmails = userEntity.getHub().getEmail(); String[] hubEmailArray = hubEmails.split(","); diff --git a/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java index 8f656154..a5026e96 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java @@ -8,7 +8,8 @@ public enum RecipientTypeEnum { USER("USER"), COMPANY("COMPANY"), PROPERTIES("PROPERTIES"), - INSTRUCTOR("INSTRUCTOR"); + INSTRUCTOR("INSTRUCTOR"), + APPLICATION_PEC("APPLICATION_PEC"); private String value; From ab5d63f3690ad95d16481407cc47ebdec50fac31 Mon Sep 17 00:00:00 2001 From: rajesh Date: Fri, 24 Oct 2025 14:48:37 +0530 Subject: [PATCH 3/4] Updated code --- .../tendermanagement/dao/ApplicationAmendmentRequestDao.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java index e5dd6c4b..0a0dd23f 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java @@ -1852,7 +1852,7 @@ public class ApplicationAmendmentRequestDao { else { applicationAmendmentRequestEntity.setResponseDays(10l); } - applicationAmendmentRequestEntity.setEndDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()).plusDays(20)); + applicationAmendmentRequestEntity.setEndDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()).plusDays(applicationAmendmentRequestEntity.getResponseDays())); applicationAmendmentRequestEntity.setIsEmail(Boolean.TRUE); applicationAmendmentRequestEntity.setIsNotification(Boolean.FALSE); applicationAmendmentRequestEntity.setStartDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); From 99603cbabe868a574ad99eea5359eaf5dc1e548f Mon Sep 17 00:00:00 2001 From: rajesh Date: Fri, 24 Oct 2025 19:03:47 +0530 Subject: [PATCH 4/4] Updated placeholder in doc for special amendment --- .../tendermanagement/dao/EmailNotificationDao.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java index 08650fb7..1d7ebd86 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java @@ -146,10 +146,16 @@ public class EmailNotificationDao { List documentEntities=new ArrayList<>(); if(systemEmailTemplateResponse.getEmailScenario().equals(EmailScenarioTypeEnum.SPECIAL_APPLICATION_AMENDMENT_REQUESTED)) { String amount=Utils.convertToItalianFormat(String.valueOf(applicationEntity.getAmountAccepted())); + String protocolNumber=applicationEntity.getProtocol().getExternalProtocolNumber(); + if(protocolNumber==null){ + protocolNumber= String.valueOf(applicationEntity.getProtocol().getProtocolNumber()); + } replacements = Map.of( "{call_name}", applicationEntity.getCall().getName(), "{amount_accepted}", amount, - "{pec}", "bandi.gepafin@legalmail.it" + "{pec}", "bandi.gepafin@legalmail.it", + "{company_name}", company.getCompanyName(), + "{protocol_number}", protocolNumber ); if(Boolean.TRUE.equals(AmendmentDocumentTypeEnum.ALTRE_GARANZIE.getValue().equals(applicationAmendmentRequest.getAmendmentDocumentType()))){ documentEntities=documentRepository.findBySourceInAndIsDeletedFalse(List.of(applicationAmendmentRequest.getAmendmentDocumentType(),"MODELLO_AUTOCERTIFICAZIONE","MODELLO_PRIVACY"));