Resolved Conflicts

This commit is contained in:
harish
2024-11-04 17:06:33 +05:30
14 changed files with 216 additions and 47 deletions

View File

@@ -259,7 +259,7 @@ public class GepafinConstant {
public static final String EVALUATIONCRITERIA_INVALID = "evaluationCriteria.invalid"; public static final String EVALUATIONCRITERIA_INVALID = "evaluationCriteria.invalid";
public static final String APPLICATION_NOT_IN_DRAFT_STATUS="application.not.in.draft.status"; public static final String APPLICATION_NOT_IN_DRAFT_STATUS="application.not.in.draft.status";
public static final String GET_ERROR_S3 = "get.error.s3"; public static final String GET_ERROR_S3 = "get.error.s3";
public static final String BENEFICIARY_EMAIL_NOT_FOUND_MSG = "beneficiary.email.not.found.msg";
public static final String ADDED_S3_PATH_STRUCTURE ="added.s3.path.structure"; public static final String ADDED_S3_PATH_STRUCTURE ="added.s3.path.structure";
public static final String S3_PATH_STRUCTURE_BY_TYPE ="fetched.s3.path.structure.by.type.successfully"; public static final String S3_PATH_STRUCTURE_BY_TYPE ="fetched.s3.path.structure.by.type.successfully";
public static final String S3_PATH_STRUCTURE_NOT_FOUND_BY_TYPE_MSG ="s3.path.not.found.by.type"; public static final String S3_PATH_STRUCTURE_NOT_FOUND_BY_TYPE_MSG ="s3.path.not.found.by.type";
@@ -287,7 +287,7 @@ public class GepafinConstant {
public static final String AMENDMENT_FOUND_SUCCESS = "amendment.found.success"; public static final String AMENDMENT_FOUND_SUCCESS = "amendment.found.success";
public static final String INVALID_AMENDMENT_FOR_COMMENT = "invalid.amendment.for.comment"; public static final String INVALID_AMENDMENT_FOR_COMMENT = "invalid.amendment.for.comment";
public static final String DD_MM_YYYY_HH_MM = "DD_MM_YYYY_HH_MM"; public static final String DD_MM_YYYY_HH_MM = "DD_MM_YYYY_HH_MM";
public static final String REMINDER_EMAIL_SENT_SUCCESS_MSG = "reminder.email.sent.success.msg";
public static final String ENCRYPT_INIT_VECTOR = "IG8*(*@&)*#biVVD"; public static final String ENCRYPT_INIT_VECTOR = "IG8*(*@&)*#biVVD";
public static final String ENCRYPT_KEY = "U2VjdXJlRW5jcnlwdEtleQ=="; public static final String ENCRYPT_KEY = "U2VjdXJlRW5jcnlwdEtleQ==";
} }

View File

@@ -18,10 +18,13 @@ import net.gepafin.tendermanagement.model.request.ApplicationFormFieldRequestBea
import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest; import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest;
import net.gepafin.tendermanagement.model.response.AmendmentFormFieldResponse; import net.gepafin.tendermanagement.model.response.AmendmentFormFieldResponse;
import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse; import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse;
import net.gepafin.tendermanagement.model.response.SystemEmailTemplateResponse;
import net.gepafin.tendermanagement.repositories.*; import net.gepafin.tendermanagement.repositories.*;
import net.gepafin.tendermanagement.service.*; import net.gepafin.tendermanagement.service.*;
import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.util.DateTimeUtil;
import net.gepafin.tendermanagement.util.Validator; import net.gepafin.tendermanagement.util.Validator;
import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum;
import net.gepafin.tendermanagement.util.Utils;
import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException;
import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException;
import net.gepafin.tendermanagement.web.rest.api.errors.Status; import net.gepafin.tendermanagement.web.rest.api.errors.Status;
@@ -84,6 +87,13 @@ public class ApplicationAmendmentRequestDao {
@Autowired @Autowired
private AssignedApplicationsRepository assignedApplicationsRepository; private AssignedApplicationsRepository assignedApplicationsRepository;
@Autowired
private SystemEmailTemplatesService systemEmailTemplatesService;
@Autowired
private HubService hubService;
// @Autowired
// private MailUtil mailUtil;
@Autowired @Autowired
private Validator validator; private Validator validator;
@@ -517,4 +527,57 @@ public class ApplicationAmendmentRequestDao {
log.info("Amendment status updated successfully: {}", response); log.info("Amendment status updated successfully: {}", response);
return response; return response;
} }
public void sendReminderEmail(Long amendmentId) {
ApplicationAmendmentRequestEntity amendment = applicationAmendmentRequestRepository.findByIdAndIsDeletedFalse(amendmentId)
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND,
Translator.toLocale(GepafinConstant.APPLICATION_AMENDMENT_NOT_FOUND_MSG)));
Optional<ApplicationEvaluationEntity> entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(amendment.getApplicationEvaluationEntity().getId());
if (entityOptional.isPresent()) {
ApplicationEntity applicationEntity = applicationService.validateApplication(entityOptional.get().getApplicationId());
UserEntity beneficiaryUser = userService.validateUser(applicationEntity.getUserId());
HubEntity hub = hubService.valdateHub(applicationEntity.getHubId());
SystemEmailTemplateResponse emailTemplate = systemEmailTemplatesService
.retrieveTemplateByTypeAndCall(SystemEmailTemplatesEntityTypeEnum.AMENDMENT_REMINDER, hub, null);
String subject = prepareSubject(emailTemplate, amendment, beneficiaryUser);
String body = prepareBody(emailTemplate, amendment, beneficiaryUser);
String email = beneficiaryUser.getEmail();
if (Boolean.TRUE.equals(amendment.getIsEmail())&&email != null && !email.isEmpty()) {
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(email));
// mailUtil.sendByMailGun(subject,body,List.of(email),null);
} else {
throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.BENEFICIARY_EMAIL_NOT_FOUND_MSG));
}
}
}
private String prepareSubject(SystemEmailTemplateResponse template, ApplicationAmendmentRequestEntity amendment, UserEntity beneficiary) {
Map<String, String> subjectPlaceholders = new HashMap<>();
String firstName = beneficiary.getFirstName() != null ? beneficiary.getFirstName() : "";
String lastName = beneficiary.getLastName() != null ? beneficiary.getLastName() : "";
String beneficiaryName = String.join(" ", firstName, lastName).trim();
subjectPlaceholders.put("{{amendment_id}}", amendment.getId().toString());
subjectPlaceholders.put("{{beneficiary_name}}", beneficiaryName);
return Utils.replacePlaceholders(template.getSubject(), subjectPlaceholders);
}
private String prepareBody(SystemEmailTemplateResponse template, ApplicationAmendmentRequestEntity amendment, UserEntity beneficiary) {
Map<String, String> bodyPlaceholders = new HashMap<>();
bodyPlaceholders.put("{{amendment_id}}", amendment.getId().toString());
if (amendment.getStartDate() != null && amendment.getResponseDays() != null) {
LocalDateTime dueDate = amendment.getStartDate().plusDays(amendment.getResponseDays());
bodyPlaceholders.put("{{amendment_due_date}}", DateTimeUtil.formatLocalDateTime(dueDate, GepafinConstant.DD_MM_YYYY));
} else {
bodyPlaceholders.put("{{amendment_due_date}}", "Not available");
}
return Utils.replacePlaceholders(template.getHtmlContent(), bodyPlaceholders);
}
} }

View File

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

View File

@@ -43,6 +43,7 @@ public class SystemEmailTemplatesEntity extends BaseEntity {
DOCUMENTATION_INTEGRATION_REQUEST("DOCUMENTATION_INTEGRATION_REQUEST"), DOCUMENTATION_INTEGRATION_REQUEST("DOCUMENTATION_INTEGRATION_REQUEST"),
INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE("INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE"), INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE("INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE"),
ADMISSIBILITY_NOTIFICATION("ADMISSIBILITY_NOTIFICATION"), ADMISSIBILITY_NOTIFICATION("ADMISSIBILITY_NOTIFICATION"),
AMENDMENT_REMINDER("AMENDMENT_REMINDER"),
INADMISSIBILITY_TEMPLATE("INADMISSIBILITY_NOTIFICATION"); INADMISSIBILITY_TEMPLATE("INADMISSIBILITY_NOTIFICATION");
private String value; private String value;

View File

@@ -29,7 +29,7 @@ public class NotificationScheduler {
@Autowired @Autowired
EmailNotificationDao emailNotificationDao; EmailNotificationDao emailNotificationDao;
// @Scheduled(cron = "0 0/1 * * * ?") @Scheduled(cron = "0 0 1 * * ?")
void sendNotificationForRejectedApplicationToBeneficiary() { void sendNotificationForRejectedApplicationToBeneficiary() {
List<ApplicationEntity> applicationsList = applicationRepository.findByIsDeletedFalse(); List<ApplicationEntity> applicationsList = applicationRepository.findByIsDeletedFalse();
@@ -42,16 +42,12 @@ public class NotificationScheduler {
if (amendmentRequest != null) { if (amendmentRequest != null) {
LocalDateTime requestDate = amendmentRequest.getCreatedDate(); LocalDateTime requestDate = amendmentRequest.getCreatedDate();
// Eg :- Check if requestDate + 7 days is less than or equal to today
if (requestDate.plusDays(amendmentRequest.getResponseDays()).isAfter(today)) { if (requestDate.plusDays(amendmentRequest.getResponseDays()).isAfter(today)) {
// Update the application status to REJECTED // Update the application status to REJECTED
application.setStatus("REJECTED"); application.setStatus("REJECTED");
applicationRepository.save(application); // Save updated application applicationRepository.save(application);
amendmentRequest.setStatus("CLOSE");
// Update the amendment request status to CLOSED applicationAmendmentRepository.save(amendmentRequest);
// amendmentRequest.setStatus("CLOSE");
// applicationAmendmentRepository.save(amendmentRequest); // Save updated amendment request
emailNotificationDao.sendApplicationFailureNotificationEmail(amendmentRequest); emailNotificationDao.sendApplicationFailureNotificationEmail(amendmentRequest);
} }
} }

View File

@@ -25,5 +25,5 @@ public interface ApplicationAmendmentRequestService {
public ApplicationAmendmentRequestResponse getAmendmentByApplicationId(HttpServletRequest request,Long applicationId); public ApplicationAmendmentRequestResponse getAmendmentByApplicationId(HttpServletRequest request,Long applicationId);
public ApplicationAmendmentRequestResponse updateApplicationStatus(HttpServletRequest request, Long applicationId, ApplicationAmendmentRequestEnum status); public ApplicationAmendmentRequestResponse updateApplicationStatus(HttpServletRequest request, Long applicationId, ApplicationAmendmentRequestEnum status);
void sendReminderEmail(HttpServletRequest request,Long amendmentId);
} }

View File

@@ -1,20 +1,28 @@
package net.gepafin.tendermanagement.service.impl; package net.gepafin.tendermanagement.service.impl;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import net.gepafin.tendermanagement.config.Translator;
import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.dao.ApplicationAmendmentRequestDao; import net.gepafin.tendermanagement.dao.ApplicationAmendmentRequestDao;
import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity; import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity;
import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity;
import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum; import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum;
import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest;
import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean;
import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest; import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest;
import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse; import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse;
import net.gepafin.tendermanagement.repositories.ApplicationAmendmentRequestRepository;
import net.gepafin.tendermanagement.repositories.ApplicationEvaluationRepository;
import net.gepafin.tendermanagement.service.ApplicationAmendmentRequestService; import net.gepafin.tendermanagement.service.ApplicationAmendmentRequestService;
import net.gepafin.tendermanagement.util.Validator; import net.gepafin.tendermanagement.util.Validator;
import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException;
import net.gepafin.tendermanagement.web.rest.api.errors.Status;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Optional;
@Service @Service
public class ApplicationAmendmentRequestServiceImpl implements ApplicationAmendmentRequestService { public class ApplicationAmendmentRequestServiceImpl implements ApplicationAmendmentRequestService {
@@ -24,6 +32,10 @@ public class ApplicationAmendmentRequestServiceImpl implements ApplicationAmendm
@Autowired @Autowired
private ApplicationAmendmentRequestDao applicationAmendmentRequestDao; private ApplicationAmendmentRequestDao applicationAmendmentRequestDao;
@Autowired
private ApplicationAmendmentRequestRepository applicationAmendmentRequestRepository;
@Autowired
private ApplicationEvaluationRepository applicationEvaluationRepository;
@Override @Override
public ApplicationAmendmentRequestResponse getApplicationDataForAmendment(HttpServletRequest request, Long applicationEvaluationId) { public ApplicationAmendmentRequestResponse getApplicationDataForAmendment(HttpServletRequest request, Long applicationEvaluationId) {
@@ -87,5 +99,17 @@ public class ApplicationAmendmentRequestServiceImpl implements ApplicationAmendm
return applicationAmendmentRequestDao.updateApplicationAmendmentStatus(applicationId, status); return applicationAmendmentRequestDao.updateApplicationAmendmentStatus(applicationId, status);
} }
@Override
public void sendReminderEmail(HttpServletRequest request,Long amendmentId) {
ApplicationAmendmentRequestEntity amendment = applicationAmendmentRequestRepository.findByIdAndIsDeletedFalse(amendmentId)
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND,
Translator.toLocale(GepafinConstant.APPLICATION_AMENDMENT_NOT_FOUND_MSG)));
Optional<ApplicationEvaluationEntity> entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(amendment.getApplicationEvaluationEntity().getId());
if (entityOptional.isPresent()) {
UserEntity user = validator.validatePreInstructor(request, entityOptional.get().getUserId());
applicationAmendmentRequestDao.sendReminderEmail(amendmentId);
}
}
} }

View File

@@ -171,4 +171,19 @@ public interface ApplicationAmendmentRequestApi {
@Parameter(description = "The application amendment id", required = true) @PathVariable("applicationAmendmentId") Long applicationAmendmentId, @Parameter(description = "The application amendment id", required = true) @PathVariable("applicationAmendmentId") Long applicationAmendmentId,
@Parameter(description = "status", required = true)@RequestParam(value = "status", required = true) ApplicationAmendmentRequestEnum status); @Parameter(description = "status", required = true)@RequestParam(value = "status", required = true) ApplicationAmendmentRequestEnum status);
@Operation(summary = "Send reminder email for the specified amendment",
responses = {
@ApiResponse(responseCode = "200", description = "Email sent successfully"),
@ApiResponse(responseCode = "404", description = "Amendment not found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = {
@ExampleObject(value = ErrorConstants.NOTFOUND_ERROR_EXAMPLE) })),
@ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = {
@ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })),
@ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = {
@ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) }))
})
@PostMapping(value = "sendReminderEmail/{amendmentId}", produces = MediaType.APPLICATION_JSON_VALUE)
ResponseEntity<Response<Void>> sendReminderEmail(HttpServletRequest request,
@Parameter( required = true)
@PathVariable(value = "amendmentId") Long amendmentId);
} }

View File

@@ -117,4 +117,16 @@ public class ApplicationAmendmentRequestController implements ApplicationAmendme
return ResponseEntity.status(HttpStatus.OK) return ResponseEntity.status(HttpStatus.OK)
.body(new Response<>(applicationResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_STATUS_UPDATED_SUCCESSFULLY))); .body(new Response<>(applicationResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_STATUS_UPDATED_SUCCESSFULLY)));
} }
@Override
public ResponseEntity<Response<Void>> sendReminderEmail(
HttpServletRequest request,
Long amendmentId) {
log.info("Sending reminder email for Amendment ID: {}", amendmentId);
applicationAmendmentRequestService.sendReminderEmail(request,amendmentId);
return ResponseEntity.status(HttpStatus.OK)
.body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.REMINDER_EMAIL_SENT_SUCCESS_MSG)));
}
} }

View File

@@ -1647,42 +1647,6 @@
<column name="internal_note" type="TEXT"></column> <column name="internal_note" type="TEXT"></column>
</addColumn> </addColumn>
</changeSet> </changeSet>
<changeSet id="30-10-2024_1" author="Nisha Kashyap">
<addColumn tableName="hub">
<column name="pdf_banner" type="TEXT"></column>
</addColumn>
<update tableName="hub">
<column name="pdf_banner" value='https://mementoresources.s3.amazonaws.com/gepafin/staging/template/gepafin-logo.jpg'/>
<where>UNIQUE_UUID = 'p4lk3bcx1RStqTaIVVbXs'</where>
</update>
<update tableName="hub">
<column name="pdf_banner" value='https://mementoresources.s3.amazonaws.com/gepafin/staging/template/sviluppumbria_logo.jpg'/>
<where>UNIQUE_UUID = 't7jh5wfg9QXylNaTZkPoE'</where>
</update>
</changeSet>
<changeSet id="31-10-2024_1" author="Rajesh Khore">
<addColumn tableName="hub">
<column name="EMAIL_SIGNATURE" type="TEXT"/>
</addColumn>
</changeSet>
<changeSet id="31-10-2024_2" author="Rajesh Khore">
<sqlFile dbms="postgresql"
path="db/dump/updated_system_email_template_for_application_submition_30-10-2024.sql"/>
</changeSet>
<changeSet id="31-10-2024_3" author="Rajesh Khore">
<update tableName="hub">
<column name="EMAIL_SIGNATURE" value="Gepafin S.p.a"/>
<where>UNIQUE_UUID = 'p4lk3bcx1RStqTaIVVbXs'</where>
</update>
<update tableName="hub">
<column name="EMAIL_SIGNATURE" value="Sviluppumbria S.p.a"/>
<where>UNIQUE_UUID = 't7jh5wfg9QXylNaTZkPoE'</where>
</update>
</changeSet>
<changeSet id="29-10-2024_2" author="Piyush"> <changeSet id="29-10-2024_2" author="Piyush">
<addColumn tableName="hub"> <addColumn tableName="hub">
@@ -1696,4 +1660,55 @@
path="db/dump/insert_system_email_template_for_notification_mail_31_10_2024.sql"/> path="db/dump/insert_system_email_template_for_notification_mail_31_10_2024.sql"/>
</changeSet> </changeSet>
<changeSet id="30-10-2024_1" author="Nisha Kashyap">
<addColumn tableName="hub">
<column name="pdf_banner" type="TEXT"></column>
</addColumn>
<update tableName="hub">
<column name="pdf_banner"
value='https://mementoresources.s3.amazonaws.com/gepafin/staging/template/gepafin-logo.jpg'/>
<where>UNIQUE_UUID = 'p4lk3bcx1RStqTaIVVbXs'</where>
</update>
<update tableName="hub">
<column name="pdf_banner"
value='https://mementoresources.s3.amazonaws.com/gepafin/staging/template/sviluppumbria_logo.jpg'/>
<where>UNIQUE_UUID = 't7jh5wfg9QXylNaTZkPoE'</where>
</update>
</changeSet>
<changeSet id="30-10-2024_2" author="Piyush">
<sqlFile dbms="postgresql"
path="db/dump/update_hub_data_for_email_service_config_31_10_2024_1.sql"/>
</changeSet>
<changeSet id="31-10-2024_1" author="Rajesh Khore">
<addColumn tableName="hub">
<column name="EMAIL_SIGNATURE" type="TEXT"/>
</addColumn>
</changeSet>
<changeSet id="31-10-2024_2" author="Rajesh Khore">
<sqlFile dbms="postgresql"
path="db/dump/updated_system_email_template_for_application_submition_30-10-2024.sql"/>
</changeSet>
<changeSet id="31-10-2024_3" author="Rajesh Khore">
<update tableName="hub">
<column name="EMAIL_SIGNATURE" value="Gepafin S.p.a"/>
<where>UNIQUE_UUID = 'p4lk3bcx1RStqTaIVVbXs'</where>
</update>
<update tableName="hub">
<column name="EMAIL_SIGNATURE" value="Sviluppumbria S.p.a"/>
<where>UNIQUE_UUID = 't7jh5wfg9QXylNaTZkPoE'</where>
</update>
</changeSet>
<changeSet id="30-10-2024_4" author="Harish Bagora">
<sql dbms="postgresql">select
setval('gepafin_schema.system_email_template_id_seq', (select
max(id)+1
from gepafin_schema.system_email_template), false)
</sql>
<sqlFile dbms="postgresql"
path="db/dump/insert_system_email_template_for_sollecito_30_10_2024.sql"/>
</changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -0,0 +1,29 @@
-- SQL Dump to insert system email template for amendment reminder email with calculated due date
INSERT INTO gepafin_schema.system_email_template
(template_name, "type", html_content, subject, "json", "system", is_deleted, created_date, updated_date)
VALUES
(
'Amendment Reminder Email',
'AMENDMENT_REMINDER',
'<html>
<body style="font-family: Arial, sans-serif; color: #000; line-height: 1.6;">
<div style="padding: 20px; border: 1px solid #ddd; border-radius: 8px; max-width: 600px; margin: auto;">
<p><strong>PROMEMORIA PER LA PRESENTAZIONE DELL''EMENDAMENTO</strong></p>
<p>Buongiorno,</p>
<p>Questo è un promemoria per completare la presentazione dell''emendamento entro il termine specificato. Di seguito i dettagli:</p>
<ul>
<li><strong>Amendment ID:</strong> {{amendment_id}}</li>
<li><strong>Data di Scadenza:</strong> {{amendment_due_date}}</li>
</ul>
<p>Si prega di assicurarsi che l''emendamento venga presentato entro la data di scadenza per evitare ritardi. Inviare l''emendamento tramite la piattaforma online <a href="{{platform_link}}">{{platform_link}}</a> </p>
<p>Distinti saluti,</p>
<p><strong>{{email_signature}}</strong></p>
</div>
</body>
</html>',
'Reminder: Pending Amendment Submission - ID {{amendment_id}}',
NULL,
true,
false,
CURRENT_TIMESTAMP,
CURRENT_TIMESTAMP);

View File

@@ -0,0 +1,9 @@
UPDATE hub
SET email_service_type = 'PEC_SERVICE',
email_service_config = 'JkFbBfuVvq7VWwp5LcWIi+hAa1RJ1ekI0jq3w7gLTXETZiTaN8zC4OBWD53x8FtbfFTh3L/5805CIYTH1BQGa3X9q16q9SDzMy7DKHdmJzOnLKhn74C5akoXKaeXUCGnzp0cSk2c01FV6lwefC29IshijFSumCHtVlgWNeZigBx51GL2Coh8nF1Mu7/KIcny'
WHERE UNIQUE_UUID = 'p4lk3bcx1RStqTaIVVbXs';
UPDATE hub
SET email_service_type = 'MAILGUN_SERVICE',
email_service_config = 'mhyP0kKQCrsbhGv3PGx4yob4dPSNBOd2xFnAPkikJE7VHkydklfUSVWAdYjhXwOz8rglH2YYEC/xGZdrEgSnkS9Ed56/qzmaU1667GGf+kc5mciOiECW5/sVmhtbVClEnu1FGZMzlsJSqYKlTmqfCYD0lTAlak1Lu2n030tj6nhMDvUxP9CbeTwkzALMtmgt'
WHERE UNIQUE_UUID = 't7jh5wfg9QXylNaTZkPoE';

View File

@@ -101,6 +101,7 @@ success.password.changed=Password changed successfully.
logout.successful.msg=Logout successful. You have been logged out successfully. logout.successful.msg=Logout successful. You have been logged out successfully.
#Update user Active or Deactive status #Update user Active or Deactive status
update.user.status.success=User status has been successfully updated. update.user.status.success=User status has been successfully updated.
beneficiary.email.not.found.msg=The email address for the beneficiary could not be found. Please ensure that the beneficiary has a valid email address.
#Form-field-related messages #Form-field-related messages
@@ -295,6 +296,7 @@ application.amendment.get.success = Application Amendment details fetched succes
application.amendment.update.successfully = Application Amendment Updated Successfully. application.amendment.update.successfully = Application Amendment Updated Successfully.
application.amendment.closed.successfully = Application Amendment Closed Successfully. application.amendment.closed.successfully = Application Amendment Closed Successfully.
response.days.extended.success=Response days extended successfully. response.days.extended.success=Response days extended successfully.
reminder.email.sent.success.msg=Reminder email sent successfully!
added.comment.to.amendment.request.success = Application Amendment Comment Added Successfully. added.comment.to.amendment.request.success = Application Amendment Comment Added Successfully.
comment.not.found = Comment Not Found. comment.not.found = Comment Not Found.

View File

@@ -299,3 +299,5 @@ amendment.found.success = Richiesta di emendamento trovata con successo.
invalid.amendment.for.comment = Richiesta di emendamento non valida per il commento fornito. invalid.amendment.for.comment = Richiesta di emendamento non valida per il commento fornito.
DD_MM_YYYY_HH_MM = dd_MM_yyyy HH:mm DD_MM_YYYY_HH_MM = dd_MM_yyyy HH:mm
create.application.data.amendment.msg =Emendamento alla domanda inviato con successo create.application.data.amendment.msg =Emendamento alla domanda inviato con successo
beneficiary.email.not.found.msg=L'indirizzo email per il beneficiario non è stato trovato. Si prega di assicurarsi che il beneficiario abbia un indirizzo email valido.
reminder.email.sent.success.msg=Email di promemoria inviata con successo!