diff --git a/pom.xml b/pom.xml
index b443ec18..08c677d0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,6 +29,13 @@
lombok
+
+
+ com.mashape.unirest
+ unirest-java
+ 1.4.9
+
+
com.h2database
diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java
index dc3049a6..c3fbc94c 100644
--- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java
+++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java
@@ -595,7 +595,7 @@ public class ApplicationAmendmentRequestDao {
String body = prepareBody(emailTemplate, amendment, beneficiaryUser);
String email = beneficiaryUser.getEmail();
if (Boolean.TRUE.equals(amendment.getIsEmail())&&email != null && !email.isEmpty()) {
- EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(SystemEmailTemplatesEntityTypeEnum.AMENDMENT_REMINDER.getValue(),RecipientTypeEnum.BENEFICIARY,beneficiaryUser.getId(),subject,body,StatusTypeEnum.SUCCESS.getValue(), null,amendment.getId(),EmailTrackingEntityTypeEnum.AMENDMENT,beneficiaryUser);
+ EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(emailTemplate.getEmailScenario(),RecipientTypeEnum.USER,beneficiaryUser.getId(),subject,body,StatusTypeEnum.SUCCESS.getValue(), null,amendment.getId(), EmailEntityTypeEnum.AMENDMENT,beneficiaryUser.getEmail(),beneficiaryUser.getId());
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(email),emailLogRequest);
} else {
throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.BENEFICIARY_EMAIL_NOT_FOUND_MSG));
diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java
index 27dd5485..53b3128e 100644
--- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java
+++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java
@@ -791,12 +791,13 @@ public class ApplicationDao {
// Replace placeholders in the subject and body
String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders);
String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders);
-
+ EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(),RecipientTypeEnum.USER,userEntity.getId(),subject,body, StatusTypeEnum.SUCCESS.getValue(), null,applicationEntity.getId(), EmailEntityTypeEnum.APPLICATION,userEntity.getEmail(),userEntity.getId());
String email = userEntity.getEmail();
if (userEntity.getBeneficiary() != null) {
+ emailLogRequest.setRecipientType(RecipientTypeEnum.BENEFICIARY);
email = userEntity.getBeneficiary().getEmail();
+ emailLogRequest.setUserId(userEntity.getBeneficiary().getId());
}
- EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(SystemEmailTemplatesEntityTypeEnum.APPLICATION_SUBMISSION_TO_USER_AND_COMPANY.getValue(),RecipientTypeEnum.BENEFICIARY,userEntity.getId(),subject,body, StatusTypeEnum.SUCCESS.getValue(), null,applicationEntity.getId(),EmailTrackingEntityTypeEnum.APPLICATION,userEntity);
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(email),emailLogRequest);
List recipientEmails = new ArrayList<>();
// recipientEmails.add(email);
@@ -810,6 +811,11 @@ public class ApplicationDao {
if (contactEmail != null && !contactEmail.isEmpty() && !contactEmail.equals(companyEmail)) {
recipientEmails.add(contactEmail);
}
+ if(Boolean.FALSE.equals(recipientEmails.isEmpty())){
+ emailLogRequest.setRecipientId(applicationEntity.getCompany().getId());
+ emailLogRequest.setRecipientType(RecipientTypeEnum.COMPANY);
+ emailLogRequest.setRecipientEmails(companyEmail);
+ }
emailNotificationDao.sendMail(hub.getId(), subject, body, recipientEmails,emailLogRequest);
}
private void sendMailTodefaultSystemAndGepafin(UserEntity userEntity, ApplicationEntity applicationEntity) {
@@ -837,17 +843,21 @@ public class ApplicationDao {
String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders);
String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders);
- EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(SystemEmailTemplatesEntityTypeEnum.APPLICATION_SUBMISSION_TO_GEPAFIN.getValue(),RecipientTypeEnum.BENEFICIARY,userEntity.getId(),subject,body,StatusTypeEnum.SUCCESS.getValue(), null,applicationEntity.getId(),EmailTrackingEntityTypeEnum.APPLICATION,userEntity);
+ EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(),RecipientTypeEnum.PROPERTIES,null,subject,body,StatusTypeEnum.SUCCESS.getValue(), null,applicationEntity.getId(), EmailEntityTypeEnum.APPLICATION,userEntity.getEmail(),userEntity.getId());
// mailUtil.sendByMailGun(subject, body, List.of(defaultSystemReceiverEmail), null);
// mailUtil.sendByMailGun(subject, body, List.of(gepafinEmail), null);
// mailUtil.sendByMailGun(subject, body, List.of(rinaldoEmail), null);
if(validator.isProductionProfileActivated()) {
+ emailLogRequest.setRecipientEmails(carloEmail);
// mailUtil.sendByMailGun(subject, body, List.of(carloEmail), null);
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(carloEmail),emailLogRequest);
}
+ emailLogRequest.setRecipientEmails(gepafinEmail);
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(gepafinEmail),emailLogRequest);
+ emailLogRequest.setRecipientEmails(defaultSystemReceiverEmail);
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(defaultSystemReceiverEmail),emailLogRequest);
+ emailLogRequest.setRecipientEmails(rinaldoEmail);
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(rinaldoEmail),emailLogRequest);
}
diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java
index 8c8a0eaa..8b6a8ea3 100644
--- a/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java
+++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java
@@ -1,17 +1,12 @@
package net.gepafin.tendermanagement.dao;
import net.gepafin.tendermanagement.entities.EmailLogEntity;
-import net.gepafin.tendermanagement.entities.EmailTrackingEntity;
-import net.gepafin.tendermanagement.entities.UserEntity;
-import net.gepafin.tendermanagement.enums.EmailTrackingEntityTypeEnum;
+import net.gepafin.tendermanagement.enums.EmailScenarioTypeEnum;
+import net.gepafin.tendermanagement.enums.EmailEntityTypeEnum;
import net.gepafin.tendermanagement.enums.RecipientTypeEnum;
-import net.gepafin.tendermanagement.enums.StatusTypeEnum;
import net.gepafin.tendermanagement.model.request.EmailLogRequest;
import net.gepafin.tendermanagement.repositories.EmailLogRepository;
-import net.gepafin.tendermanagement.repositories.EmailTrackingRepository;
import net.gepafin.tendermanagement.util.DateTimeUtil;
-import net.gepafin.tendermanagement.util.FieldValidator;
-import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -23,13 +18,10 @@ public class EmailLogDao {
@Autowired
private EmailLogRepository emailLogRepository;
- @Autowired
- private EmailTrackingRepository emailTrackingRepository;
-
public EmailLogEntity createEmailLog(EmailLogRequest emailLogRequest){
EmailLogEntity emailLogEntity=new EmailLogEntity();
- emailLogEntity.setEmailType(emailLogRequest.getEmailType());
+ emailLogEntity.setEmailType(emailLogRequest.getEmailType().getValue());
emailLogEntity.setRecipientType(emailLogRequest.getRecipientType().getValue());
emailLogEntity.setRecipientId(emailLogRequest.getRecipientId());
emailLogEntity.setEmailSubject(emailLogRequest.getEmailSubject());
@@ -37,32 +29,22 @@ public class EmailLogDao {
emailLogEntity.setSendStatus(emailLogRequest.getSendStatus());
emailLogEntity.setSendDateTime(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); // Set to now if null
emailLogEntity.setErrorMessage(emailLogRequest.getErrorMessage());
- emailLogEntity=saveEmailLogEntity(emailLogEntity);
+ emailLogEntity.setUserId(emailLogRequest.getUserId());
+ emailLogEntity.setEmailServiceResponse(emailLogRequest.getEmailServiceResponse());
+ emailLogEntity.setRecipientEmails(emailLogRequest.getRecipientEmails());
if(emailLogRequest.getEntityId()!=null && emailLogRequest.getEntityId()>0){
- EmailTrackingEntity emailTrackingEntity=createEmailTrackingEntity(emailLogEntity,emailLogRequest);
- if(emailTrackingEntity==null){
- emailLogEntity.setErrorMessage("Failed while creating email tracking entity");
- emailLogEntity.setSendStatus(StatusTypeEnum.FAILED.getValue());
- emailLogEntity=saveEmailLogEntity(emailLogEntity);
- }
+ emailLogEntity.setEntityId(emailLogRequest.getEntityId());
+ emailLogEntity.setEntityType(emailLogRequest.getEntitytype().getValue());
}
+ emailLogEntity=saveEmailLogEntity(emailLogEntity);
return emailLogEntity;
}
public EmailLogEntity saveEmailLogEntity(EmailLogEntity emailLogEntity){
return emailLogRepository.save(emailLogEntity);
}
- public EmailTrackingEntity createEmailTrackingEntity(EmailLogEntity emailLogEntity,EmailLogRequest emailLogRequest){
- EmailTrackingEntity emailTrackingEntity=new EmailTrackingEntity();
- emailTrackingEntity.setEmailLog(emailLogEntity);
- emailTrackingEntity.setEntityId(emailLogRequest.getEntityId());
- emailTrackingEntity.setEntityType(emailLogRequest.getEntitytype().getValue());
- emailTrackingEntity.setUser(emailLogRequest.getUser());
- emailTrackingRepository.save(emailTrackingEntity);
- return emailTrackingEntity;
- }
- public EmailLogRequest createEmailLogRequest(String emailType, RecipientTypeEnum recipientType, Long recipientId,
+ public EmailLogRequest createEmailLogRequest(EmailScenarioTypeEnum emailType, RecipientTypeEnum recipientType, Long recipientId,
String emailSubject, String emailBody, String sendStatus,
- String errorMessage, Long entityId, EmailTrackingEntityTypeEnum entityType, UserEntity user) {
+ String errorMessage, Long entityId, EmailEntityTypeEnum entityType, String recipientEmails, Long userId) {
EmailLogRequest emailLogRequest = new EmailLogRequest();
emailLogRequest.setEmailType(emailType);
emailLogRequest.setRecipientType(recipientType);
@@ -71,9 +53,10 @@ public class EmailLogDao {
emailLogRequest.setEmailBody(emailBody);
emailLogRequest.setSendStatus(sendStatus);
emailLogRequest.setErrorMessage(errorMessage);
+ emailLogRequest.setUserId(userId);
emailLogRequest.setEntityId(entityId);
emailLogRequest.setEntitytype(entityType);
- emailLogRequest.setUser(user);
+ emailLogRequest.setRecipientEmails(recipientEmails);
return emailLogRequest;
}
}
diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java
index c88cee97..46833b42 100644
--- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java
+++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java
@@ -5,15 +5,13 @@ 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.EmailTrackingEntityTypeEnum;
+import net.gepafin.tendermanagement.enums.EmailEntityTypeEnum;
import net.gepafin.tendermanagement.enums.RecipientTypeEnum;
import net.gepafin.tendermanagement.enums.StatusTypeEnum;
import net.gepafin.tendermanagement.model.request.EmailConfig;
import net.gepafin.tendermanagement.model.request.EmailLogRequest;
import net.gepafin.tendermanagement.model.response.SystemEmailTemplateResponse;
-import net.gepafin.tendermanagement.repositories.CallRepository;
import net.gepafin.tendermanagement.repositories.EmailLogRepository;
-import net.gepafin.tendermanagement.repositories.EmailTrackingRepository;
import net.gepafin.tendermanagement.repositories.HubRepository;
import net.gepafin.tendermanagement.service.ApplicationService;
import net.gepafin.tendermanagement.service.HubService;
@@ -57,9 +55,6 @@ public class EmailNotificationDao {
@Autowired
private EmailLogDao emailLogDao;
- @Autowired
- private EmailTrackingRepository emailTrackingRepository;
-
@Autowired
private EmailLogRepository emailLogRepository;
@@ -82,7 +77,7 @@ public class EmailNotificationDao {
UserEntity userEntity = userService.validateUser(applicationEntity.getUserId());
List recipientEmails = getRecipientEmails(applicationEntity, userEntity, additionalRecipients);
- EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(String.valueOf(templateType), RecipientTypeEnum.BENEFICIARY,userEntity.getId(),subject,body, StatusTypeEnum.SUCCESS.getValue(), null, amendmentRequest.getId(), EmailTrackingEntityTypeEnum.AMENDMENT,userEntity);
+ EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY,userEntity.getBeneficiary().getId(),subject,body, StatusTypeEnum.SUCCESS.getValue(), null, amendmentRequest.getId(), EmailEntityTypeEnum.AMENDMENT,Utils.listToCommaSeparatedString(recipientEmails),userEntity.getId());
sendMail(applicationEntity.getHubId(), subject, body, recipientEmails,emailLogRequest);
}
@@ -153,14 +148,10 @@ public class EmailNotificationDao {
Map bodyPlaceholders = new HashMap<>();
bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
LocalDateTime lastReminderDateTime=amendmentRequest.getCreatedDate();
- List emailTrackingEntity=emailTrackingRepository.findFirstByEntityTypeAndEntityIdAndUser(EmailTrackingEntityTypeEnum.AMENDMENT.getValue(), amendmentRequest.getId(),user);
- if(emailTrackingEntity != null && (!emailTrackingEntity.isEmpty())) {
- EmailTrackingEntity emailTrackingEntity1=emailTrackingEntity.get(0);
- List emailLogEntity = emailLogRepository.findByIdAndEmailTypeOrderByCreatedDateDesc(emailTrackingEntity1.getId(), SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.DOCUMENTATION_INTEGRATION_REQUEST.getValue());
+ List emailLogEntity = emailLogRepository.findByUserIdAndEntityIdAndEntityType(user.getId(),amendmentRequest.getId(),EmailEntityTypeEnum.AMENDMENT.getValue());
if(emailLogEntity!=null && (!emailLogEntity.isEmpty())){
EmailLogEntity emailLogEntity1=emailLogEntity.get(0);
lastReminderDateTime=emailLogEntity1.getSendDateTime();
- }
}
bodyPlaceholders.put("{{date_time_emailSend}}", DateTimeUtil.formatLocalDateTime(lastReminderDateTime, GepafinConstant.DD_MM_YYYY));
diff --git a/src/main/java/net/gepafin/tendermanagement/dao/SystemEmailTemplatesDao.java b/src/main/java/net/gepafin/tendermanagement/dao/SystemEmailTemplatesDao.java
index 1665a724..514506f5 100644
--- a/src/main/java/net/gepafin/tendermanagement/dao/SystemEmailTemplatesDao.java
+++ b/src/main/java/net/gepafin/tendermanagement/dao/SystemEmailTemplatesDao.java
@@ -4,6 +4,7 @@ import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
+import net.gepafin.tendermanagement.enums.EmailScenarioTypeEnum;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -78,6 +79,7 @@ public class SystemEmailTemplatesDao {
systemEmailTemplateResponse.setHtmlContent(htmlContent);
systemEmailTemplateResponse.setSubject(subject);
systemEmailTemplateResponse.setJsonMap(languageMap);
+ systemEmailTemplateResponse.setEmailScenario(EmailScenarioTypeEnum.valueOf(dbSystemEmailTemplatesEntity.getEmailScenario()));
return systemEmailTemplateResponse;
}
diff --git a/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java
index 8dcaa76a..848e895b 100644
--- a/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java
+++ b/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java
@@ -33,5 +33,22 @@ public class EmailLogEntity extends BaseEntity{
@Column(name = "error_message", columnDefinition = "TEXT")
private String errorMessage;
+ @Column(name = "email_service_response")
+ private String emailServiceResponse;
+
+ @Column(name = "email_service_type")
+ private String emailServiceType;
+
+ @Column(name = "recipient_emails")
+ private String recipientEmails;
+
+ @Column(name = "user_id")
+ private Long userId;
+
+ @Column(name = "entity_id")
+ private Long entityId;
+
+ @Column(name = "entity_type")
+ private String entityType;
}
diff --git a/src/main/java/net/gepafin/tendermanagement/entities/EmailTrackingEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/EmailTrackingEntity.java
deleted file mode 100644
index 57a25747..00000000
--- a/src/main/java/net/gepafin/tendermanagement/entities/EmailTrackingEntity.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package net.gepafin.tendermanagement.entities;
-import jakarta.persistence.*;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-@Entity
-@Data
-@Table(name = "email_tracking")
-public class EmailTrackingEntity extends BaseEntity{
-
-
- @ManyToOne
- @JoinColumn(name = "email_log_id", nullable = false, foreignKey = @ForeignKey(name = "fk_email_log_id"))
- private EmailLogEntity emailLog;
-
- @ManyToOne
- @JoinColumn(name = "user_id", nullable = false, foreignKey = @ForeignKey(name = "fk_user_id"))
- private UserEntity user;
-
- @Column(name = "entity_id", nullable = false)
- private Long entityId;
-
- @Column(name = "entity_type", nullable = false, length = 255)
- private String entityType;
-
-}
diff --git a/src/main/java/net/gepafin/tendermanagement/entities/SystemEmailTemplatesEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/SystemEmailTemplatesEntity.java
index 1440e00d..f7974eca 100644
--- a/src/main/java/net/gepafin/tendermanagement/entities/SystemEmailTemplatesEntity.java
+++ b/src/main/java/net/gepafin/tendermanagement/entities/SystemEmailTemplatesEntity.java
@@ -35,6 +35,9 @@ public class SystemEmailTemplatesEntity extends BaseEntity {
@Column(name ="IS_DELETED", nullable = false)
private Boolean isDeleted = false;
+
+ @Column(name = "email_scenario")
+ private String emailScenario;
public enum SystemEmailTemplatesEntityTypeEnum {
diff --git a/src/main/java/net/gepafin/tendermanagement/enums/EmailTrackingEntityTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/EmailEntityTypeEnum.java
similarity index 76%
rename from src/main/java/net/gepafin/tendermanagement/enums/EmailTrackingEntityTypeEnum.java
rename to src/main/java/net/gepafin/tendermanagement/enums/EmailEntityTypeEnum.java
index a2a356db..6abea8ce 100644
--- a/src/main/java/net/gepafin/tendermanagement/enums/EmailTrackingEntityTypeEnum.java
+++ b/src/main/java/net/gepafin/tendermanagement/enums/EmailEntityTypeEnum.java
@@ -2,14 +2,14 @@ package net.gepafin.tendermanagement.enums;
import com.fasterxml.jackson.annotation.JsonValue;
-public enum EmailTrackingEntityTypeEnum {
+public enum EmailEntityTypeEnum {
AMENDMENT("AMENDMENT"),
APPLICATION("APPLICATION");
private String value;
- EmailTrackingEntityTypeEnum(String value) {
+ EmailEntityTypeEnum(String value) {
this.value = value;
}
diff --git a/src/main/java/net/gepafin/tendermanagement/enums/EmailScenarioTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/EmailScenarioTypeEnum.java
new file mode 100644
index 00000000..493f987c
--- /dev/null
+++ b/src/main/java/net/gepafin/tendermanagement/enums/EmailScenarioTypeEnum.java
@@ -0,0 +1,24 @@
+package net.gepafin.tendermanagement.enums;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+public enum EmailScenarioTypeEnum {
+
+ APPLICATION_SUBMITTED("APPLICATION_SUBMITTED"),
+ APPLICATION_AMENDMENT_REQUESTED("APPLICATION_AMENDMENT_REQUESTED"),
+ APPLICATION_AMENDMENT_EXPIRED("APPLICATION_AMENDMENT_EXPIRED"),
+ APPLICATION_AMENDMENT_REMINDER("APPLICATION_AMENDMENT_REMINDER"),
+ APPLICATION_APPROVED("APPLICATION_APPROVED"),
+ APPLICATION_REJECTED("APPLICATION_REJECTED");
+
+ private final String value;
+
+ EmailScenarioTypeEnum(String value) {
+ this.value = value;
+ }
+
+ @JsonValue
+ public String getValue() {
+ return value;
+ }
+}
diff --git a/src/main/java/net/gepafin/tendermanagement/enums/EmailServiceTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/EmailServiceTypeEnum.java
new file mode 100644
index 00000000..8a22c69c
--- /dev/null
+++ b/src/main/java/net/gepafin/tendermanagement/enums/EmailServiceTypeEnum.java
@@ -0,0 +1,20 @@
+package net.gepafin.tendermanagement.enums;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+public enum EmailServiceTypeEnum {
+
+ MAILGUN("MAILGUN"),
+ PEC("PEC");
+
+ private String value;
+
+ EmailServiceTypeEnum(String value) {
+ this.value = value;
+ }
+
+ @JsonValue
+ public String getValue() {
+ return value;
+ }
+}
diff --git a/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java
index e08a3e6b..c4f54175 100644
--- a/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java
+++ b/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java
@@ -6,7 +6,8 @@ public enum RecipientTypeEnum {
BENEFICIARY ("BENEFICIARY"),
USER("USER"),
- COMPANY("COMPANY");
+ COMPANY("COMPANY"),
+ PROPERTIES("PROPERTIES");
private String value;
diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/EmailConfig.java b/src/main/java/net/gepafin/tendermanagement/model/request/EmailConfig.java
index 5a94b325..79f4c966 100644
--- a/src/main/java/net/gepafin/tendermanagement/model/request/EmailConfig.java
+++ b/src/main/java/net/gepafin/tendermanagement/model/request/EmailConfig.java
@@ -13,6 +13,7 @@ public class EmailConfig {
private String domain;
private String mailgunApiUrl;
private String pecApiUrl;
+ private String url;
}
diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/EmailLogRequest.java b/src/main/java/net/gepafin/tendermanagement/model/request/EmailLogRequest.java
index e15c6783..b6e8c07b 100644
--- a/src/main/java/net/gepafin/tendermanagement/model/request/EmailLogRequest.java
+++ b/src/main/java/net/gepafin/tendermanagement/model/request/EmailLogRequest.java
@@ -1,15 +1,15 @@
package net.gepafin.tendermanagement.model.request;
-import jakarta.persistence.Column;
import lombok.Data;
-import net.gepafin.tendermanagement.entities.UserEntity;
-import net.gepafin.tendermanagement.enums.EmailTrackingEntityTypeEnum;
+import net.gepafin.tendermanagement.enums.EmailScenarioTypeEnum;
+import net.gepafin.tendermanagement.enums.EmailEntityTypeEnum;
+import net.gepafin.tendermanagement.enums.EmailServiceTypeEnum;
import net.gepafin.tendermanagement.enums.RecipientTypeEnum;
@Data
public class EmailLogRequest {
- private String emailType;
+ private EmailScenarioTypeEnum emailType;
private RecipientTypeEnum recipientType;
@@ -25,7 +25,14 @@ public class EmailLogRequest {
private Long entityId;
- private EmailTrackingEntityTypeEnum entitytype;
+ private EmailEntityTypeEnum entitytype;
+
+ private Long userId;
+
+ private String emailServiceResponse;
+
+ private EmailServiceTypeEnum emailServiceType;
+
+ private String recipientEmails;
- private UserEntity user;
}
diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/SystemEmailTemplateResponse.java b/src/main/java/net/gepafin/tendermanagement/model/response/SystemEmailTemplateResponse.java
index cd65e6e4..0752afb8 100644
--- a/src/main/java/net/gepafin/tendermanagement/model/response/SystemEmailTemplateResponse.java
+++ b/src/main/java/net/gepafin/tendermanagement/model/response/SystemEmailTemplateResponse.java
@@ -3,10 +3,13 @@ package net.gepafin.tendermanagement.model.response;
import java.util.Map;
import lombok.Data;
+import net.gepafin.tendermanagement.enums.EmailScenarioTypeEnum;
@Data
public class SystemEmailTemplateResponse {
+ EmailScenarioTypeEnum emailScenario;
+
String htmlContent;
String subject;
diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java
index 998050ec..ec181249 100644
--- a/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java
+++ b/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java
@@ -7,5 +7,5 @@ import java.util.List;
public interface EmailLogRepository extends JpaRepository {
- List findByIdAndEmailTypeOrderByCreatedDateDesc(Long id, String emailType);
+ List findByUserIdAndEntityIdAndEntityType(Long userId,Long entityId,String entityType);
}
diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/EmailTrackingRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/EmailTrackingRepository.java
deleted file mode 100644
index e89ec2c6..00000000
--- a/src/main/java/net/gepafin/tendermanagement/repositories/EmailTrackingRepository.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package net.gepafin.tendermanagement.repositories;
-
-import net.gepafin.tendermanagement.entities.EmailTrackingEntity;
-import net.gepafin.tendermanagement.entities.UserEntity;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-@Repository
-public interface EmailTrackingRepository extends JpaRepository {
-
- List findFirstByEntityTypeAndEntityIdAndUser(
- String entityType, Long entityId, UserEntity user
- );
-}
diff --git a/src/main/java/net/gepafin/tendermanagement/service/feignClient/MailgunFeignClient.java b/src/main/java/net/gepafin/tendermanagement/service/feignClient/MailgunFeignClient.java
index eb9c50d1..3006ef51 100644
--- a/src/main/java/net/gepafin/tendermanagement/service/feignClient/MailgunFeignClient.java
+++ b/src/main/java/net/gepafin/tendermanagement/service/feignClient/MailgunFeignClient.java
@@ -1,24 +1,40 @@
package net.gepafin.tendermanagement.service.feignClient;
import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestHeader;
-import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.*;
import java.util.List;
-@FeignClient(name = "mailgunClient", url = "${mailGun_base_url}")
+//@FeignClient(name = "mailgunClient", url = "${mailGun_base_url}")
public interface MailgunFeignClient {
- @PostMapping("/v3/{domain}/messages")
- ResponseEntity sendEmail(
- @PathVariable("domain") String domain,
- @RequestParam("from") String from,
- @RequestParam("to") List to,
- @RequestParam("subject") String subject,
- @RequestParam("html") String htmlBody,
- @RequestHeader("Authorization") String authorizationHeader);
+// @PostMapping(value = "/v3/{domain}/messages", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
+// ResponseEntity sendEmail( @RequestPart("from") String from,
+// @RequestPart("to") List to,
+// @RequestPart("subject") String subject,
+// @RequestPart("text") String htmlBody,
+// @PathVariable("domain") String domain,
+//// @RequestBody PayloadDTO dto,
+// //RequestParam
+//
+// @RequestHeader HttpHeaders headers);
+//
+// public class PayloadDTO {
+// public String from;
+// public List to;
+// public String subject;
+// public String htmlBody;
+//
+// public PayloadDTO(String from, List to, String subject, String htmlBody) {
+// this.from = from;
+// this.to = to;
+// this.subject = subject;
+// this.htmlBody = htmlBody;
+// }
+//
+// }
}
diff --git a/src/main/java/net/gepafin/tendermanagement/service/feignClient/PecFeignClient.java b/src/main/java/net/gepafin/tendermanagement/service/feignClient/PecFeignClient.java
index d251e644..f6fe99f6 100644
--- a/src/main/java/net/gepafin/tendermanagement/service/feignClient/PecFeignClient.java
+++ b/src/main/java/net/gepafin/tendermanagement/service/feignClient/PecFeignClient.java
@@ -3,15 +3,16 @@ package net.gepafin.tendermanagement.service.feignClient;
import feign.Headers;
import net.gepafin.tendermanagement.model.request.PecEmailRequest;
import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
-@FeignClient(name = "pecClient", url = "${api.pecUrl}")
+//@FeignClient(name = "pecClient", url = "${api.pecUrl}")
public interface PecFeignClient {
- @PostMapping("/send")
- ResponseEntity sendEmail(@RequestHeader("Authorization") String token,
- @RequestBody PecEmailRequest emailRequest);
+// @PostMapping("/send")
+// ResponseEntity sendEmail(@RequestHeader HttpHeaders headers,
+// @RequestBody PecEmailRequest emailRequest);
}
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 e27a231a..97c75667 100644
--- a/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java
+++ b/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java
@@ -1,16 +1,20 @@
package net.gepafin.tendermanagement.service.impl;
+import com.mashape.unirest.http.HttpResponse;
+import com.mashape.unirest.http.Unirest;
+import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.dao.EmailLogDao;
import net.gepafin.tendermanagement.entities.EmailLogEntity;
+import net.gepafin.tendermanagement.enums.EmailServiceTypeEnum;
import net.gepafin.tendermanagement.enums.StatusTypeEnum;
import net.gepafin.tendermanagement.model.request.EmailConfig;
import net.gepafin.tendermanagement.model.request.EmailLogRequest;
import net.gepafin.tendermanagement.service.feignClient.MailgunFeignClient;
+import net.gepafin.tendermanagement.util.Utils;
import net.gepafin.tendermanagement.util.Validator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import java.util.Base64;
@@ -18,9 +22,6 @@ import java.util.List;
@Service
public class MailgunEmailService implements EmailService {
-
- @Autowired
- private MailgunFeignClient mailgunFeignClient;
@Value("${isMailSendingEnabled}")
private String isEmailSendingEnabled;
@@ -38,21 +39,36 @@ public class MailgunEmailService implements EmailService {
return;
}
- String domain = emailConfig.getDomain();
+ String url = emailConfig.getUrl();
String from = emailConfig.getSender();
String apiKey = emailConfig.getApiKey();
String authHeader = "Basic " + Base64.getEncoder().encodeToString(("api:" + apiKey).getBytes());
// Send email via Mailgun API
+ HttpResponse response2=null;
if (Boolean.FALSE.equals(validator.isTestProfileActivated())) {
- ResponseEntity response = mailgunFeignClient.sendEmail(domain, from, recipientEmails, subject, body, authHeader);
- if (!response.getStatusCode().is2xxSuccessful()) {
+
+ emailLogRequest.setRecipientEmails(Utils.listToCommaSeparatedString(recipientEmails));
+ try {
+ Unirest.setTimeouts(0, 0);
+ response2 = Unirest.post(url)
+ .header("Authorization", authHeader)
+// .header("content-type", "multipart/form-data")
+ .field("from", from)
+ .field("to", recipientEmails)
+ .field("subject", subject)
+ .field("html", body)
+ .asString();
+ }catch(Exception e) {
emailLogRequest.setSendStatus(StatusTypeEnum.FAILED.getValue());
- emailLogRequest.setErrorMessage(String.valueOf(response.getStatusCode()));
+ emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.MAILGUN);
+ emailLogRequest.setErrorMessage(e.getMessage());
EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest);
- throw new RuntimeException("Failed to send email via Mailgun: " + response.getStatusCode());
+ throw new RuntimeException("Failed to send email via Mailgun: " + response2.getStatus());
}
+ emailLogRequest.setEmailServiceResponse(response2.getBody());
}
+ emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.MAILGUN);
EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest);
}
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 e9500d4b..8d6667d5 100644
--- a/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java
+++ b/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java
@@ -1,17 +1,25 @@
package net.gepafin.tendermanagement.service.impl;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.mashape.unirest.http.HttpResponse;
+import com.mashape.unirest.http.Unirest;
import lombok.extern.slf4j.Slf4j;
+import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.dao.EmailLogDao;
import net.gepafin.tendermanagement.entities.EmailLogEntity;
+import net.gepafin.tendermanagement.enums.EmailServiceTypeEnum;
import net.gepafin.tendermanagement.enums.StatusTypeEnum;
import net.gepafin.tendermanagement.model.request.EmailConfig;
import net.gepafin.tendermanagement.model.request.EmailLogRequest;
import net.gepafin.tendermanagement.model.request.PecEmailRequest;
import net.gepafin.tendermanagement.service.feignClient.PecFeignClient;
+import net.gepafin.tendermanagement.util.Utils;
import net.gepafin.tendermanagement.util.Validator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
@@ -20,12 +28,6 @@ import java.util.List;
@Slf4j
@Service
public class PecEmailService implements EmailService {
- private final PecFeignClient pecFeignClient;
-
- public PecEmailService(PecFeignClient pecFeignClient) {
-
- this.pecFeignClient = pecFeignClient;
- }
@Value("${isMailSendingEnabled}")
private String isEmailSendingEnabled;
@@ -45,23 +47,33 @@ public class PecEmailService implements EmailService {
PecEmailRequest emailRequest = new PecEmailRequest();
emailRequest.setSender(emailConfig.getSender());
- emailRequest.setRecipient(recipientEmails);
+
emailRequest.setSubject(subject);
emailRequest.setBody(body);
emailRequest.setUsername(emailConfig.getUsername());
emailRequest.setPassword(emailConfig.getPassword());
-
+ String url=emailConfig.getUrl();
String authToken = emailConfig.getAuthToken();
+ HttpResponse response2=null;
if (Boolean.FALSE.equals(validator.isTestProfileActivated())) {
- ResponseEntity response = pecFeignClient.sendEmail("Bearer " + authToken, emailRequest);
- log.info("Mail response status: {}, headers: {}, body: {}", response.getStatusCode(), response.getHeaders(), response.getBody());
- if (!response.getStatusCode().is2xxSuccessful()) {
+ emailLogRequest.setRecipientEmails(Utils.listToCommaSeparatedString(emailRequest.getRecipient()));
+ try {
+ Unirest.setTimeouts(0, 0);
+ response2 = Unirest.post(url)
+ .header("Authorization", "Bearer " + authToken)
+ .header("Content-Type", "application/json")
+ .body(Utils.convertObjectToJson(emailRequest)) // Serialize the emailRequest object to JSON
+ .asString();
+ }catch(Exception e) {
emailLogRequest.setSendStatus(StatusTypeEnum.FAILED.getValue());
- emailLogRequest.setErrorMessage(String.valueOf(response.getStatusCode()));
+ emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.PEC);
+ emailLogRequest.setErrorMessage(e.getMessage());
EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest);
- throw new RuntimeException("Failed to send email via PEC: " + response.getStatusCode());
- }
+ throw new RuntimeException("Failed to send email via PEC: " + response2.getStatus());
+ }
+ emailLogRequest.setEmailServiceResponse(response2.getBody());
}
+ emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.PEC);
EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest);
}
}
diff --git a/src/main/java/net/gepafin/tendermanagement/util/Utils.java b/src/main/java/net/gepafin/tendermanagement/util/Utils.java
index 26f049ef..ebd5eea3 100644
--- a/src/main/java/net/gepafin/tendermanagement/util/Utils.java
+++ b/src/main/java/net/gepafin/tendermanagement/util/Utils.java
@@ -24,6 +24,7 @@ import net.gepafin.tendermanagement.constants.GepafinConstant;
import org.apache.commons.collections4.MapUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import com.fasterxml.jackson.core.JsonProcessingException;
@@ -40,6 +41,7 @@ import net.gepafin.tendermanagement.web.rest.api.errors.FeignClientForbiddenExce
import net.gepafin.tendermanagement.web.rest.api.errors.FeignClientNotFoundException;
import net.gepafin.tendermanagement.web.rest.api.errors.FeignClientUnauthorizedException;
import net.gepafin.tendermanagement.web.rest.api.errors.FeignClientValidationException;
+import org.springframework.http.MediaType;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
@@ -515,4 +517,7 @@ public class Utils {
}
return null;
}
+ public static String listToCommaSeparatedString(List list) {
+ return String.join(", ", list.stream().map(String::valueOf).toList());
+ }
}
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 8a06b83e..a794719f 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
@@ -1720,7 +1720,7 @@
-
+
-
@@ -1741,32 +1740,24 @@
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
diff --git a/src/main/resources/db/dump/updated_hub_data_for_email_service_config_15-11-2024.sql b/src/main/resources/db/dump/updated_hub_data_for_email_service_config_15-11-2024.sql
new file mode 100644
index 00000000..40b6a790
--- /dev/null
+++ b/src/main/resources/db/dump/updated_hub_data_for_email_service_config_15-11-2024.sql
@@ -0,0 +1,9 @@
+UPDATE hub
+SET email_service_type = 'PEC_SERVICE',
+ email_service_config = 'JkFbBfuVvq7VWwp5LcWIi+hAa1RJ1ekI0jq3w7gLTXETZiTaN8zC4OBWD53x8FtbfFTh3L/5805CIYTH1BQGa3X9q16q9SDzMy7DKHdmJzOnLKhn74C5akoXKaeXUCGnzp0cSk2c01FV6lwefC29IshijFSumCHtVlgWNeZigBzmWK+M7NS+EXf4goIMzguL5bHpYXfoQunQozeY1SpOo+28gDDpzZRMXdtcwKkTgESFGwsy6S1m1TBxJwZC7p8W'
+WHERE UNIQUE_UUID = 'p4lk3bcx1RStqTaIVVbXs';
+
+UPDATE hub
+SET email_service_type = 'MAILGUN_SERVICE',
+ email_service_config = 'QlICHJMvBHd09ci/B2+EDR0q6kFsEdu5gOSI1hgG/7SAm2wXQZagDsAbkBrA6JPHXUS3Bkw6UD9x5boYYxBi3tnpu16i0NgdZqcc2BBhMF1VgRlJMgX+KgsOJsnQbHAJ/9YZaeIVrJpxceHFx93NTbfjT3TzzaZ9cW/64wbeZFspEp6WwgKgV1/3+j297Q1QtKIiWKanolYaU9myx9KwPJZc8AmPe0PR2ViyA7VyGn6iQSrX2pr15tBw3xVIm0tfHh6pktHro4gRYs5CEypQ2cSbP5wv4Z6pDa//FHXzYpRvnb1AUh0thGOix5FZl9Kn'
+WHERE UNIQUE_UUID = 't7jh5wfg9QXylNaTZkPoE';
\ No newline at end of file
diff --git a/src/main/resources/db/dump/updated_system_email_template_for_email_scenario_15-11-2024.sql b/src/main/resources/db/dump/updated_system_email_template_for_email_scenario_15-11-2024.sql
new file mode 100644
index 00000000..bf70f8aa
--- /dev/null
+++ b/src/main/resources/db/dump/updated_system_email_template_for_email_scenario_15-11-2024.sql
@@ -0,0 +1,17 @@
+UPDATE gepafin_schema.system_email_template SET email_scenario='APPLICATION_SUBMITTED' WHERE "type"='APPLICATION_SUBMISSION_TO_USER_AND_COMPANY' AND "system"=true ;
+
+UPDATE gepafin_schema.system_email_template SET email_scenario='APPLICATION_SUBMITTED' WHERE "type"='APPLICATION_SUBMISSION_TO_GEPAFIN' AND "system"=true ;
+
+UPDATE gepafin_schema.system_email_template SET email_scenario='APPLICATION_AMENDMENT_REMINDER' WHERE "type"='AMENDMENT_REMINDER' AND "system"=true ;
+
+UPDATE gepafin_schema.system_email_template SET email_scenario='APPLICATION_AMENDMENT_EXPIRED' WHERE "type"='INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE' AND "system"=true ;
+
+UPDATE gepafin_schema.system_email_template SET email_scenario='APPLICATION_APPROVED' WHERE "type"='ADMISSIBILITY_NOTIFICATION' AND "system"=true ;
+
+UPDATE gepafin_schema.system_email_template SET email_scenario='APPLICATION_REJECTED' WHERE "type"='INADMISSIBILITY_NOTIFICATION' AND "system"=true ;
+
+UPDATE gepafin_schema.system_email_template SET email_scenario='APPLICATION_AMENDMENT_REQUESTED' WHERE "type"='DOCUMENTATION_INTEGRATION_REQUEST' AND "system"=true ;
+
+
+
+