refactor: add lombok to emailcampaigns module

This commit is contained in:
Hemant Gupta
2022-10-10 16:00:59 +02:00
committed by Arnold Gálovics
parent ba1d0ce66c
commit 9b039ff136
20 changed files with 185 additions and 625 deletions
@@ -19,60 +19,37 @@
package org.apache.fineract.infrastructure.campaigns.email.data;
import java.util.Map;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class EmailBusinessRulesData {
@SuppressWarnings("unused")
private final Long reportId;
private Long reportId;
@SuppressWarnings("unused")
private final String reportName;
private String reportName;
@SuppressWarnings("unused")
private final String reportType;
private String reportType;
@SuppressWarnings("unused")
private final String reportSubType;
private String reportSubType;
@SuppressWarnings("unused")
private final String reportDescription;
private String reportDescription;
@SuppressWarnings("unused")
private final Map<String, Object> reportParamName;
public EmailBusinessRulesData(final Long reportId, final String reportName, final String reportType,
final Map<String, Object> reportParamName, final String reportSubType, final String reportDescription) {
this.reportId = reportId;
this.reportName = reportName;
this.reportType = reportType;
this.reportParamName = reportParamName;
this.reportDescription = reportDescription;
this.reportSubType = reportSubType;
}
private Map<String, Object> reportParamName;
public static EmailBusinessRulesData instance(final Long reportId, final String reportName, final String reportType,
final Map<String, Object> reportParamName, final String reportSubType, final String reportDescription) {
return new EmailBusinessRulesData(reportId, reportName, reportType, reportParamName, reportSubType, reportDescription);
}
public Map<String, Object> getReportParamName() {
return reportParamName;
}
public String getReportType() {
return reportType;
}
public String getReportName() {
return reportName;
}
public Long getReportId() {
return reportId;
}
public String getReportDescription() {
return reportDescription;
return new EmailBusinessRulesData().setReportId(reportId).setReportName(reportName).setReportType(reportType)
.setReportParamName(reportParamName).setReportSubType(reportSubType).setReportDescription(reportDescription);
}
@Override
@@ -20,130 +20,59 @@ package org.apache.fineract.infrastructure.campaigns.email.data;
import java.time.LocalDate;
import java.time.ZonedDateTime;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
@Data
@NoArgsConstructor
@Accessors(chain = true)
public final class EmailCampaignData {
@SuppressWarnings("unused")
private Long id;
@SuppressWarnings("unused")
private final String campaignName;
private String campaignName;
@SuppressWarnings("unused")
private final Integer campaignType;
private Integer campaignType;
@SuppressWarnings("unused")
private final Long businessRuleId;
private Long businessRuleId;
@SuppressWarnings("unused")
private final String paramValue;
private String paramValue;
@SuppressWarnings("unused")
private final EnumOptionData campaignStatus;
private EnumOptionData campaignStatus;
@SuppressWarnings("unused")
private final String emailSubject;
private String emailSubject;
@SuppressWarnings("unused")
private final String emailMessage;
private String emailMessage;
@SuppressWarnings("unused")
private final String emailAttachmentFileFormat;
private String emailAttachmentFileFormat;
@SuppressWarnings("unused")
private final Long stretchyReportId;
private Long stretchyReportId;
@SuppressWarnings("unused")
private final String stretchyReportParamMap;
private String stretchyReportParamMap;
@SuppressWarnings("unused")
private final ZonedDateTime nextTriggerDate;
private ZonedDateTime nextTriggerDate;
@SuppressWarnings("unused")
private final LocalDate lastTriggerDate;
private LocalDate lastTriggerDate;
@SuppressWarnings("unused")
private final EmailCampaignTimeLine emailCampaignTimeLine;
private EmailCampaignTimeLine emailCampaignTimeLine;
@SuppressWarnings("unused")
private final ZonedDateTime recurrenceStartDate;
private ZonedDateTime recurrenceStartDate;
private final String recurrence;
private String recurrence;
private EmailCampaignData(final Long id, final String campaignName, final Integer campaignType, final Long businessRuleId,
final String paramValue, final EnumOptionData campaignStatus, final String emailSubject, final String message,
final String emailAttachmentFileFormat, final Long stretchyReportId, final String stretchyReportParamMap,
public static EmailCampaignData instance(final Long id, final String campaignName, final Integer campaignType,
final Long businessRuleId, final String paramValue, final EnumOptionData campaignStatus, final String emailSubject,
final String message, final String emailAttachmentFileFormat, final Long stretchyReportId, final String stretchyReportParamMap,
final ZonedDateTime nextTriggerDate, final LocalDate lastTriggerDate, final EmailCampaignTimeLine emailCampaignTimeLine,
final ZonedDateTime recurrenceStartDate, final String recurrence) {
this.id = id;
this.campaignName = campaignName;
this.campaignType = campaignType;
this.businessRuleId = businessRuleId;
this.paramValue = paramValue;
this.campaignStatus = campaignStatus;
this.emailSubject = emailSubject;
this.emailMessage = message;
this.emailAttachmentFileFormat = emailAttachmentFileFormat;
this.stretchyReportId = stretchyReportId;
this.stretchyReportParamMap = stretchyReportParamMap;
if (nextTriggerDate != null) {
this.nextTriggerDate = nextTriggerDate;
} else {
this.nextTriggerDate = null;
}
if (lastTriggerDate != null) {
this.lastTriggerDate = lastTriggerDate;
} else {
this.lastTriggerDate = null;
}
this.emailCampaignTimeLine = emailCampaignTimeLine;
this.recurrenceStartDate = recurrenceStartDate;
this.recurrence = recurrence;
}
public static EmailCampaignData instance(final Long id, final String campaignName, final Integer campaignType, final Long runReportId,
final String paramValue, final EnumOptionData campaignStatus, final String emailSubject, final String message,
final String emailAttachmentFileFormat, final Long stretchyReportId, final String stretchyReportParamMap,
final ZonedDateTime nextTriggerDate, final LocalDate lastTriggerDate, final EmailCampaignTimeLine emailCampaignTimeLine,
final ZonedDateTime recurrenceStartDate, final String recurrence) {
return new EmailCampaignData(id, campaignName, campaignType, runReportId, paramValue, campaignStatus, emailSubject, message,
emailAttachmentFileFormat, stretchyReportId, stretchyReportParamMap, nextTriggerDate, lastTriggerDate,
emailCampaignTimeLine, recurrenceStartDate, recurrence);
}
public Long getId() {
return id;
}
public String getCampaignName() {
return this.campaignName;
}
public Integer getCampaignType() {
return this.campaignType;
}
public Long getRunReportId() {
return this.businessRuleId;
}
public String getParamValue() {
return this.paramValue;
}
public EnumOptionData getCampaignStatus() {
return this.campaignStatus;
}
public String getEmailSubject() {
return this.emailSubject;
}
public String getMessage() {
return this.emailMessage;
}
public ZonedDateTime getNextTriggerDate() {
return this.nextTriggerDate;
}
public LocalDate getLastTriggerDate() {
return this.lastTriggerDate;
}
public String getRecurrence() {
return this.recurrence;
}
public ZonedDateTime getRecurrenceStartDate() {
return this.recurrenceStartDate;
return new EmailCampaignData().setId(id).setCampaignName(campaignName).setCampaignType(campaignType)
.setBusinessRuleId(businessRuleId).setParamValue(paramValue).setCampaignStatus(campaignStatus).setEmailSubject(emailSubject)
.setEmailMessage(message).setEmailAttachmentFileFormat(emailAttachmentFileFormat).setStretchyReportId(stretchyReportId)
.setStretchyReportParamMap(stretchyReportParamMap).setNextTriggerDate(nextTriggerDate).setLastTriggerDate(lastTriggerDate)
.setEmailCampaignTimeLine(emailCampaignTimeLine).setRecurrenceStartDate(recurrenceStartDate).setRecurrence(recurrence);
}
}
@@ -19,23 +19,20 @@
package org.apache.fineract.infrastructure.campaigns.email.data;
import java.time.LocalDate;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class EmailCampaignTimeLine {
private final LocalDate submittedOnDate;
private final String submittedByUsername;
private final LocalDate activatedOnDate;
private final String activatedByUsername;
private final LocalDate closedOnDate;
private final String closedByUsername;
private LocalDate submittedOnDate;
private String submittedByUsername;
private LocalDate activatedOnDate;
private String activatedByUsername;
private LocalDate closedOnDate;
private String closedByUsername;
public EmailCampaignTimeLine(final LocalDate submittedOnDate, final String submittedByUsername, final LocalDate activatedOnDate,
final String activatedByUsername, final LocalDate closedOnDate, final String closedByUsername) {
this.submittedOnDate = submittedOnDate;
this.submittedByUsername = submittedByUsername;
this.activatedOnDate = activatedOnDate;
this.activatedByUsername = activatedByUsername;
this.closedOnDate = closedOnDate;
this.closedByUsername = closedByUsername;
}
}
@@ -18,47 +18,31 @@
*/
package org.apache.fineract.infrastructure.campaigns.email.data;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
/**
* Immutable data object representing an Email configuration.
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
public final class EmailConfigurationData {
@SuppressWarnings("unused")
private final Long id;
private Long id;
private final String name;
private String name;
private final String value;
private String value;
/**
* @return an instance of the EmailConfigurationData class
**/
public static EmailConfigurationData instance(Long id, String name, String value) {
return new EmailConfigurationData(id, name, value);
}
/**
* EmailConfigurationData constructor
**/
private EmailConfigurationData(Long id, String name, String value) {
this.id = id;
this.name = name;
this.value = value;
}
/**
* @return the id
*/
public Long getId() {
return id;
}
public String getName() {
return name;
}
public String getValue() {
return value;
return new EmailConfigurationData().setId(id).setName(name).setValue(value);
}
}
@@ -20,146 +20,48 @@ package org.apache.fineract.infrastructure.campaigns.email.data;
import java.time.LocalDate;
import java.util.List;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
import org.apache.fineract.infrastructure.dataqueries.data.ReportData;
/**
* Immutable data object representing a SMS message.
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
public final class EmailData {
private final Long id;
private final Long groupId;
private final Long clientId;
private final Long staffId;
private final EnumOptionData status;
private final String emailAddress;
private final String emailSubject;
private final String emailMessage;
private final EnumOptionData emailAttachmentFileFormat;
private final ReportData stretchyReport;
private final String stretchyReportParamMap;
private final List<EnumOptionData> emailAttachmentFileFormatOptions;
private final List<EnumOptionData> stretchyReportParamDateOptions;
private final String campaignName;
private final LocalDate sentDate;
private final String errorMessage;
private Long id;
private Long groupId;
private Long clientId;
private Long staffId;
private EnumOptionData status;
private String emailAddress;
private String emailSubject;
private String emailMessage;
private EnumOptionData emailAttachmentFileFormat;
private ReportData stretchyReport;
private String stretchyReportParamMap;
private List<EnumOptionData> emailAttachmentFileFormatOptions;
private List<EnumOptionData> stretchyReportParamDateOptions;
private String campaignName;
private LocalDate sentDate;
private String errorMessage;
public static EmailData instance(final Long id, final Long groupId, final Long clientId, final Long staffId,
final EnumOptionData status, final String emailAddress, final String emailSubject, final String message,
final EnumOptionData emailAttachmentFileFormat, final ReportData stretchyReport, final String stretchyReportParamMap,
final List<EnumOptionData> emailAttachmentFileFormatOptions, final List<EnumOptionData> stretchyReportParamDateOptions,
final String campaignName, final LocalDate sentDate, final String errorMessage) {
return new EmailData(id, groupId, clientId, staffId, status, emailAddress, emailSubject, message, emailAttachmentFileFormat,
stretchyReport, stretchyReportParamMap, emailAttachmentFileFormatOptions, stretchyReportParamDateOptions, campaignName,
sentDate, errorMessage);
}
private EmailData(final Long id, final Long groupId, final Long clientId, final Long staffId, final EnumOptionData status,
final String emailAddress, final String emailSubject, final String message, final EnumOptionData emailAttachmentFileFormat,
final ReportData stretchyReport, final String stretchyReportParamMap,
final List<EnumOptionData> emailAttachmentFileFormatOptions, final List<EnumOptionData> stretchyReportParamDateOptions,
final String campaignName, final LocalDate sentDate, final String errorMessage) {
this.id = id;
this.groupId = groupId;
this.clientId = clientId;
this.staffId = staffId;
this.status = status;
this.emailAddress = emailAddress;
this.emailSubject = emailSubject;
this.emailMessage = message;
this.emailAttachmentFileFormat = emailAttachmentFileFormat;
this.stretchyReport = stretchyReport;
this.stretchyReportParamMap = stretchyReportParamMap;
this.emailAttachmentFileFormatOptions = emailAttachmentFileFormatOptions;
this.stretchyReportParamDateOptions = stretchyReportParamDateOptions;
this.campaignName = campaignName;
this.sentDate = sentDate;
this.errorMessage = errorMessage;
}
/**
* @return the id
*/
public Long getId() {
return id;
}
/**
* @return the groupId
*/
public Long getGroupId() {
return groupId;
}
/**
* @return the clientId
*/
public Long getClientId() {
return clientId;
}
/**
* @return the staffId
*/
public Long getStaffId() {
return staffId;
}
/**
* @return the status
*/
public EnumOptionData getStatus() {
return status;
}
public String getErrorMessage() {
return this.errorMessage;
}
/**
* @return the emailAddress
*/
public String getEmailAddress() {
return emailAddress;
}
/**
* @return the message
*/
public String getMessage() {
return emailMessage;
}
public String getCampaignName() {
return this.campaignName;
}
public LocalDate getSentDate() {
return this.sentDate;
}
public String getEmailSubject() {
return emailSubject;
}
public EnumOptionData getEmailAttachmentFileFormat() {
return emailAttachmentFileFormat;
}
public ReportData getStretchyReport() {
return stretchyReport;
}
public String getStretchyReportParamMap() {
return stretchyReportParamMap;
}
public List<EnumOptionData> getEmailAttachmentFileFormatOptions() {
return emailAttachmentFileFormatOptions;
}
public List<EnumOptionData> getStretchyReportParamDateOptions() {
return stretchyReportParamDateOptions;
return new EmailData().setId(id).setGroupId(groupId).setClientId(clientId).setStaffId(staffId).setStatus(status)
.setEmailAddress(emailAddress).setEmailSubject(emailSubject).setEmailMessage(message)
.setEmailAttachmentFileFormat(emailAttachmentFileFormat).setStretchyReport(stretchyReport)
.setStretchyReportParamMap(stretchyReportParamMap).setEmailAttachmentFileFormatOptions(emailAttachmentFileFormatOptions)
.setStretchyReportParamDateOptions(stretchyReportParamDateOptions).setCampaignName(campaignName).setSentDate(sentDate)
.setErrorMessage(errorMessage);
}
}
@@ -20,39 +20,23 @@ package org.apache.fineract.infrastructure.campaigns.email.data;
import java.io.File;
import java.util.List;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@NoArgsConstructor
@Accessors(chain = true)
public final class EmailMessageWithAttachmentData {
private final String to;
private final String text;
private final String subject;
private final List<File> attachments;
private EmailMessageWithAttachmentData(final String to, final String text, final String subject, final List<File> attachments) {
this.to = to;
this.text = text;
this.subject = subject;
this.attachments = attachments;
}
private String to;
private String text;
private String subject;
private List<File> attachments;
public static EmailMessageWithAttachmentData createNew(final String to, final String text, final String subject,
final List<File> attachments) {
return new EmailMessageWithAttachmentData(to, text, subject, attachments);
return new EmailMessageWithAttachmentData().setTo(to).setText(text).setSubject(subject).setAttachments(attachments);
}
public String getTo() {
return this.to;
}
public String getText() {
return this.text;
}
public String getSubject() {
return this.subject;
}
public List<File> getAttachments() {
return this.attachments;
}
}
@@ -18,23 +18,18 @@
*/
package org.apache.fineract.infrastructure.campaigns.email.data;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class PreviewCampaignMessage {
@SuppressWarnings("unused")
private final String campaignMessage;
private String campaignMessage;
private final Integer totalNumberOfMessages;
private Integer totalNumberOfMessages;
public PreviewCampaignMessage(String campaignMessage, Integer totalNumberOfMessages) {
this.campaignMessage = campaignMessage;
this.totalNumberOfMessages = totalNumberOfMessages;
}
public String getCampaignMessage() {
return campaignMessage;
}
public Integer getTotalNumberOfMessages() {
return totalNumberOfMessages;
}
}
@@ -31,6 +31,10 @@ import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.StringUtils;
import org.apache.fineract.infrastructure.campaigns.email.ScheduledEmailConstants;
import org.apache.fineract.infrastructure.campaigns.email.data.EmailCampaignValidator;
@@ -45,6 +49,10 @@ import org.apache.fineract.useradministration.domain.AppUser;
@Entity
@Table(name = "scheduled_email_campaign")
@Getter
@Setter
@NoArgsConstructor
@Accessors(chain = true)
public class EmailCampaign extends AbstractPersistableCustom {
@Column(name = "campaign_name", nullable = false)
@@ -124,36 +132,6 @@ public class EmailCampaign extends AbstractPersistableCustom {
@Column(name = "previous_run_error_message", nullable = true)
private String previousRunErrorMessage;
public EmailCampaign() {}
private EmailCampaign(final String campaignName, final Integer campaignType, final Report businessRuleId, final String paramValue,
final String emailSubject, final String emailMessage, final LocalDate submittedOnDate, final AppUser submittedBy,
final Report stretchyReport, final String stretchyReportParamMap,
final ScheduledEmailAttachmentFileFormat emailAttachmentFileFormat, final String recurrence,
final LocalDateTime localDateTime) {
this.campaignName = campaignName;
this.campaignType = EmailCampaignType.fromInt(campaignType).getValue();
this.businessRuleId = businessRuleId;
this.paramValue = paramValue;
this.status = EmailCampaignStatus.PENDING.getValue();
this.emailSubject = emailSubject;
this.emailMessage = emailMessage;
this.emailAttachmentFileFormat = emailAttachmentFileFormat.getValue();
this.stretchyReport = stretchyReport;
this.stretchyReportParamMap = stretchyReportParamMap;
this.submittedOnDate = submittedOnDate;
this.submittedBy = submittedBy;
this.recurrence = recurrence;
LocalDateTime recurrenceStartDate = LocalDateTime.now(DateUtils.getDateTimeZoneOfTenant());
this.isVisible = true;
if (localDateTime != null) {
this.recurrenceStartDate = localDateTime;
} else {
this.recurrenceStartDate = recurrenceStartDate;
}
}
public static EmailCampaign instance(final AppUser submittedBy, final Report businessRuleId, final Report stretchyReport,
final JsonCommand command) {
@@ -192,9 +170,11 @@ public class EmailCampaign extends AbstractPersistableCustom {
recurrenceStartDate = null;
}
return new EmailCampaign(campaignName, campaignType.intValue(), businessRuleId, paramValue, emailSubject, emailMessage,
submittedOnDate, submittedBy, stretchyReport, stretchyReportParamMap, emailAttachmentFileFormat, recurrence,
recurrenceStartDate);
return new EmailCampaign().setCampaignName(campaignName).setCampaignType(campaignType.intValue()).setBusinessRuleId(businessRuleId)
.setParamValue(paramValue).setStatus(EmailCampaignStatus.PENDING.getValue()).setEmailSubject(emailSubject)
.setEmailMessage(emailMessage).setSubmittedOnDate(submittedOnDate).setSubmittedBy(submittedBy)
.setStretchyReport(stretchyReport).setEmailAttachmentFileFormat(emailAttachmentFileFormat.getValue())
.setRecurrence(recurrence).setRecurrenceStartDate(recurrenceStartDate).setStretchyReportParamMap(stretchyReportParamMap);
}
public Map<String, Object> update(JsonCommand command) {
@@ -236,7 +216,7 @@ public class EmailCampaign extends AbstractPersistableCustom {
final Locale locale = command.extractLocale();
final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale);
if (command.isChangeInLocalDateTimeParameterNamed(EmailCampaignValidator.recurrenceStartDate, getRecurrenceStartDateTime())) {
if (command.isChangeInLocalDateTimeParameterNamed(EmailCampaignValidator.recurrenceStartDate, getRecurrenceStartDate())) {
final String valueAsInput = command.stringValueOfParameterNamed(EmailCampaignValidator.recurrenceStartDate);
actualChanges.put(EmailCampaignValidator.recurrenceStartDate, valueAsInput);
actualChanges.put(ClientApiConstants.dateFormatParamName, dateFormatAsInput);
@@ -307,9 +287,7 @@ public class EmailCampaign extends AbstractPersistableCustom {
this.approvedOnDate = reactivateLocalDate;
this.status = EmailCampaignStatus.ACTIVE.getValue();
this.approvedBy = currentUser;
this.closureDate = null;
this.isVisible = true;
this.closedBy = null;
validateReactivate();
}
@@ -384,7 +362,7 @@ public class EmailCampaign extends AbstractPersistableCustom {
dataValidationErrors.add(error);
}
if (getActivationLocalDate() != null && getSubmittedOnDate() != null && getSubmittedOnDate().isAfter(getActivationLocalDate())) {
if (getApprovedOnDate() != null && getSubmittedOnDate() != null && getSubmittedOnDate().isAfter(getApprovedOnDate())) {
final String defaultUserMessage = "submitted date cannot be after the activation date";
final ApiParameterError error = ApiParameterError.parameterError("error.msg.campaign.submittedOnDate.after.activation.date",
@@ -393,11 +371,11 @@ public class EmailCampaign extends AbstractPersistableCustom {
dataValidationErrors.add(error);
}
if (getActivationLocalDate() != null && isDateInTheFuture(getActivationLocalDate())) {
if (getApprovedOnDate() != null && isDateInTheFuture(getApprovedOnDate())) {
final String defaultUserMessage = "Activation date cannot be in the future.";
final ApiParameterError error = ApiParameterError.parameterError("error.msg.campaign.activationDate.in.the.future",
defaultUserMessage, EmailCampaignValidator.activationDateParamName, getActivationLocalDate());
defaultUserMessage, EmailCampaignValidator.activationDateParamName, getApprovedOnDate());
dataValidationErrors.add(error);
}
@@ -405,15 +383,15 @@ public class EmailCampaign extends AbstractPersistableCustom {
}
private void validateReactivationDate(final List<ApiParameterError> dataValidationErrors) {
if (getActivationLocalDate() != null && isDateInTheFuture(getActivationLocalDate())) {
if (getApprovedOnDate() != null && isDateInTheFuture(getApprovedOnDate())) {
final String defaultUserMessage = "Activation date cannot be in the future.";
final ApiParameterError error = ApiParameterError.parameterError("error.msg.campaign.activationDate.in.the.future",
defaultUserMessage, EmailCampaignValidator.activationDateParamName, getActivationLocalDate());
defaultUserMessage, EmailCampaignValidator.activationDateParamName, getApprovedOnDate());
dataValidationErrors.add(error);
}
if (getActivationLocalDate() != null && getSubmittedOnDate() != null && getSubmittedOnDate().isAfter(getActivationLocalDate())) {
if (getApprovedOnDate() != null && getSubmittedOnDate() != null && getSubmittedOnDate().isAfter(getApprovedOnDate())) {
final String defaultUserMessage = "submitted date cannot be after the activation date";
final ApiParameterError error = ApiParameterError.parameterError("error.msg.campaign.submittedOnDate.after.activation.date",
@@ -442,100 +420,8 @@ public class EmailCampaign extends AbstractPersistableCustom {
}
}
public LocalDate getSubmittedOnDate() {
return this.submittedOnDate;
}
public LocalDate getClosureDate() {
return this.closureDate;
}
public LocalDate getActivationLocalDate() {
return this.approvedOnDate;
}
private boolean isDateInTheFuture(final LocalDate localDate) {
return localDate.isAfter(DateUtils.getBusinessLocalDate());
}
public Report getBusinessRuleId() {
return this.businessRuleId;
}
public String getCampaignName() {
return this.campaignName;
}
public String getEmailSubject() {
return this.emailSubject;
}
public String getEmailMessage() {
return this.emailMessage;
}
public String getParamValue() {
return this.paramValue;
}
public String getRecurrence() {
return this.recurrence;
}
public LocalDateTime getRecurrenceStartDateTime() {
return this.recurrenceStartDate;
}
public void setLastTriggerDate(LocalDateTime lastTriggerDate) {
this.lastTriggerDate = lastTriggerDate;
}
public void setNextTriggerDate(LocalDateTime nextTriggerDate) {
this.nextTriggerDate = nextTriggerDate;
}
public LocalDateTime getNextTriggerDate() {
return this.nextTriggerDate;
}
public LocalDateTime getNextTriggerDateInDate() {
return this.nextTriggerDate;
}
public LocalDateTime getLastTriggerDate() {
return this.lastTriggerDate;
}
public void updateIsVisible(boolean isVisible) {
this.isVisible = isVisible;
}
public void updateBusinessRuleId(final Report report) {
this.businessRuleId = report;
}
public String getEmailAttachmentFileFormat() {
return this.emailAttachmentFileFormat;
}
public Report getStretchyReport() {
return this.stretchyReport;
}
public String getStretchyReportParamMap() {
return this.stretchyReportParamMap;
}
public void setStretchyReportParamMap(String stretchyReportParamMap) {
this.stretchyReportParamMap = stretchyReportParamMap;
}
public AppUser getApprovedBy() {
return this.approvedBy;
}
public AppUser getClosedBy() {
return this.closedBy;
}
}
@@ -21,10 +21,18 @@ package org.apache.fineract.infrastructure.campaigns.email.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Entity
@Table(name = "scheduled_email_configuration")
@Getter
@Setter
@NoArgsConstructor
@Accessors(chain = true)
public class EmailConfiguration extends AbstractPersistableCustom {
@Column(name = "name", nullable = false)
@@ -32,29 +40,4 @@ public class EmailConfiguration extends AbstractPersistableCustom {
@Column(name = "value", nullable = false)
private String value;
/**
* EmailConfiguration constructor
**/
protected EmailConfiguration() {}
/**
* EmailConfiguration constructor
**/
public EmailConfiguration(String name, String value) {
this.name = name;
this.value = value;
}
public void setValue(String value) {
this.value = value;
}
public String getName() {
return this.name;
}
public String getValue() {
return this.value;
}
}
@@ -26,17 +26,24 @@ import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.StringUtils;
import org.apache.fineract.infrastructure.campaigns.email.EmailApiConstants;
import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
import org.apache.fineract.infrastructure.core.service.DateUtils;
import org.apache.fineract.organisation.staff.domain.Staff;
import org.apache.fineract.portfolio.client.domain.Client;
import org.apache.fineract.portfolio.group.domain.Group;
@Entity
@Table(name = "scheduled_email_messages_outbound")
@Getter
@Setter
@NoArgsConstructor
@Accessors(chain = true)
public class EmailMessage extends AbstractPersistableCustom {
@ManyToOne
@@ -78,33 +85,18 @@ public class EmailMessage extends AbstractPersistableCustom {
public static EmailMessage pendingEmail(final Group group, final Client client, final Staff staff, final EmailCampaign emailCampaign,
final String emailSubject, final String message, final String emailAddress, final String campaignName) {
return new EmailMessage(group, client, staff, emailCampaign, EmailMessageStatusType.PENDING, emailSubject, message, emailAddress,
campaignName);
return new EmailMessage().setGroup(group).setClient(client).setStaff(staff).setEmailCampaign(emailCampaign)
.setStatusType(emailCampaign.getStatus()).setEmailSubject(emailSubject).setMessage(message).setEmailAddress(emailAddress)
.setCampaignName(campaignName);
}
public static EmailMessage instance(final Group group, final Client client, final Staff staff, final EmailCampaign emailCampaign,
final EmailMessageStatusType statusType, final String emailSubject, final String message, final String sourceAddress,
final String emailAddress, final String campaignName) {
return new EmailMessage(group, client, staff, emailCampaign, statusType, emailSubject, message, emailAddress, campaignName);
}
return new EmailMessage().setGroup(group).setClient(client).setStaff(staff).setEmailCampaign(emailCampaign)
.setEmailSubject(emailSubject).setMessage(message).setEmailAddress(emailAddress).setCampaignName(campaignName)
.setStatusType(statusType.getValue());
protected EmailMessage() {
//
}
private EmailMessage(final Group group, final Client client, final Staff staff, final EmailCampaign emailCampaign,
final EmailMessageStatusType statusType, final String emailSubject, final String message, final String emailAddress,
final String campaignName) {
this.group = group;
this.client = client;
this.staff = staff;
this.emailCampaign = emailCampaign;
this.statusType = statusType.getValue();
this.emailAddress = emailAddress;
this.emailSubject = emailSubject;
this.message = message;
this.campaignName = campaignName;
this.submittedOnDate = DateUtils.getBusinessLocalDate();
}
public Map<String, Object> update(final JsonCommand command) {
@@ -120,54 +112,6 @@ public class EmailMessage extends AbstractPersistableCustom {
return actualChanges;
}
public Group getGroup() {
return group;
}
public Client getClient() {
return client;
}
public Staff getStaff() {
return staff;
}
public Integer getStatusType() {
return statusType;
}
public String getEmailAddress() {
return this.emailAddress;
}
public String getEmailSubject() {
return emailSubject;
}
public String getMessage() {
return message;
}
public void setStatusType(final Integer statusType) {
this.statusType = statusType;
}
public String getCampaignName() {
return this.campaignName;
}
public LocalDate getSubmittedOnDate() {
return this.submittedOnDate;
}
public EmailCampaign getEmailCampaign() {
return this.emailCampaign;
}
public void updateErrorMessage(final String errorMessage) {
this.errorMessage = errorMessage;
}
public boolean isPending() {
return EmailMessageStatusType.fromInt(this.statusType).isPending();
}
@@ -150,8 +150,9 @@ public class EmailCampaignReadPlatformServiceImpl implements EmailCampaignReadPl
final String activatedByUsername = rs.getString("activatedByUsername");
final String recurrence = rs.getString("recurrence");
final ZonedDateTime recurrenceStartDate = JdbcSupport.getDateTime(rs, "recurrenceStartDate");
final EmailCampaignTimeLine emailCampaignTimeLine = new EmailCampaignTimeLine(submittedOnDate, submittedByUsername,
activatedOnDate, activatedByUsername, closedOnDate, closedByUsername);
final EmailCampaignTimeLine emailCampaignTimeLine = new EmailCampaignTimeLine().setSubmittedOnDate(submittedOnDate)
.setActivatedByUsername(submittedByUsername).setActivatedOnDate(activatedOnDate)
.setActivatedByUsername(activatedByUsername).setClosedOnDate(closedOnDate).setClosedByUsername(closedByUsername);
return EmailCampaignData.instance(id, campaignName, campaignType, businessRuleId, paramValue, status, emailSubject,
emailMessage, emailAttachmentFileFormatString, reportId, stretchyReportParamMap, nextTriggerDate, lastTriggerDate,
@@ -151,7 +151,7 @@ public class EmailCampaignWritePlatformCommandHandlerImpl implements EmailCampai
if (changes.containsKey(EmailCampaignValidator.businessRuleId)) {
final Long newValue = command.longValueOfParameterNamed(EmailCampaignValidator.businessRuleId);
final Report reportId = this.reportRepository.findById(newValue).orElseThrow(() -> new ReportNotFoundException(newValue));
emailCampaign.updateBusinessRuleId(reportId);
emailCampaign.setBusinessRuleId(reportId);
}
@@ -294,11 +294,11 @@ public class EmailCampaignWritePlatformCommandHandlerImpl implements EmailCampai
* date us next trigger date when activating
*/
LocalDateTime nextTriggerDateWithTime;
if (emailCampaign.getRecurrenceStartDateTime().isBefore(tenantDateTime())) {
if (emailCampaign.getRecurrenceStartDate().isBefore(tenantDateTime())) {
nextTriggerDateWithTime = CalendarUtils.getNextRecurringDate(emailCampaign.getRecurrence(),
emailCampaign.getRecurrenceStartDateTime(), DateUtils.getLocalDateTimeOfTenant());
emailCampaign.getRecurrenceStartDate(), DateUtils.getLocalDateTimeOfTenant());
} else {
nextTriggerDateWithTime = emailCampaign.getRecurrenceStartDateTime();
nextTriggerDateWithTime = emailCampaign.getRecurrenceStartDate();
}
emailCampaign.setNextTriggerDate(nextTriggerDateWithTime);
@@ -403,7 +403,8 @@ public class EmailCampaignWritePlatformCommandHandlerImpl implements EmailCampai
String textMessage = this.compileEmailTemplate(textMessageTemplate, "EmailCampaign", entry);
if (!textMessage.isEmpty()) {
final Integer totalMessage = runReportObject.size();
campaignMessage = new PreviewCampaignMessage(textMessage, totalMessage);
campaignMessage = new PreviewCampaignMessage().setCampaignMessage(textMessage)
.setTotalNumberOfMessages(totalMessage);
break;
}
}
@@ -438,14 +439,14 @@ public class EmailCampaignWritePlatformCommandHandlerImpl implements EmailCampai
* next trigger date when activating
*/
LocalDateTime nextTriggerDate = null;
if (emailCampaign.getRecurrenceStartDateTime().isBefore(tenantDateTime())) {
nextTriggerDate = CalendarUtils.getNextRecurringDate(emailCampaign.getRecurrence(),
emailCampaign.getRecurrenceStartDateTime(), DateUtils.getLocalDateTimeOfTenant());
if (emailCampaign.getRecurrenceStartDate().isBefore(tenantDateTime())) {
nextTriggerDate = CalendarUtils.getNextRecurringDate(emailCampaign.getRecurrence(), emailCampaign.getRecurrenceStartDate(),
DateUtils.getLocalDateTimeOfTenant());
} else {
nextTriggerDate = emailCampaign.getRecurrenceStartDateTime();
nextTriggerDate = emailCampaign.getRecurrenceStartDate();
}
// to get time of tenant
final LocalDateTime getTime = emailCampaign.getRecurrenceStartDateTime();
final LocalDateTime getTime = emailCampaign.getRecurrenceStartDate();
final String dateString = nextTriggerDate.toString() + " " + getTime.getHour() + ":" + getTime.getMinute() + ":"
+ getTime.getSecond();
@@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.campaigns.email.service;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.infrastructure.campaigns.email.data.EmailConfigurationData;
import org.apache.fineract.infrastructure.campaigns.email.exception.EmailConfigurationNotFoundException;
import org.apache.fineract.infrastructure.core.domain.JdbcSupport;
@@ -31,6 +32,7 @@ import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class EmailConfigurationReadPlatformServiceImpl implements EmailConfigurationReadPlatformService {
private final JdbcTemplate jdbcTemplate;
@@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.campaigns.email.service;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.infrastructure.campaigns.email.data.EmailConfigurationValidator;
import org.apache.fineract.infrastructure.campaigns.email.domain.EmailConfiguration;
import org.apache.fineract.infrastructure.campaigns.email.domain.EmailConfigurationRepository;
@@ -30,24 +31,16 @@ import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuilder;
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
import org.apache.fineract.useradministration.domain.AppUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class EmailConfigurationWritePlatformServiceImpl implements EmailConfigurationWritePlatformService {
private final PlatformSecurityContext context;
private final EmailConfigurationRepository repository;
private final EmailConfigurationValidator emailConfigurationValidator;
@Autowired
public EmailConfigurationWritePlatformServiceImpl(final PlatformSecurityContext context, final EmailConfigurationRepository repository,
final EmailConfigurationValidator emailConfigurationValidator) {
this.context = context;
this.repository = repository;
this.emailConfigurationValidator = emailConfigurationValidator;
}
@Override
public CommandProcessingResult update(final JsonCommand command) {
@@ -23,27 +23,23 @@ import java.util.List;
import java.util.Properties;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.infrastructure.campaigns.email.data.EmailMessageWithAttachmentData;
import org.apache.fineract.infrastructure.configuration.data.SMTPCredentialsData;
import org.apache.fineract.infrastructure.configuration.service.ExternalServicesPropertiesReadPlatformService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public final class EmailMessageJobEmailServiceImpl implements EmailMessageJobEmailService {
private static final Logger LOG = LoggerFactory.getLogger(EmailMessageJobEmailServiceImpl.class);
private final ExternalServicesPropertiesReadPlatformService externalServicesReadPlatformService;
@Autowired
public EmailMessageJobEmailServiceImpl(ExternalServicesPropertiesReadPlatformService externalServicesReadPlatformService) {
this.externalServicesReadPlatformService = externalServicesReadPlatformService;
}
@Override
public void sendEmailWithAttachment(EmailMessageWithAttachmentData emailMessageWithAttachmentData) {
final SMTPCredentialsData smtpCredentialsData = this.externalServicesReadPlatformService.getSMTPCredentials();
@@ -23,6 +23,7 @@ import java.sql.SQLException;
import java.time.LocalDate;
import java.util.Collection;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.infrastructure.campaigns.email.data.EmailData;
import org.apache.fineract.infrastructure.campaigns.email.domain.EmailMessageEnumerations;
import org.apache.fineract.infrastructure.campaigns.email.domain.EmailMessageStatusType;
@@ -34,13 +35,13 @@ import org.apache.fineract.infrastructure.core.service.Page;
import org.apache.fineract.infrastructure.core.service.PaginationHelper;
import org.apache.fineract.infrastructure.core.service.SearchParameters;
import org.apache.fineract.infrastructure.core.service.database.DatabaseSpecificSQLGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class EmailReadPlatformServiceImpl implements EmailReadPlatformService {
private final JdbcTemplate jdbcTemplate;
@@ -48,14 +49,6 @@ public class EmailReadPlatformServiceImpl implements EmailReadPlatformService {
private final EmailMapper emailRowMapper = new EmailMapper();
private final PaginationHelper paginationHelper;
@Autowired
public EmailReadPlatformServiceImpl(final JdbcTemplate jdbcTemplate, DatabaseSpecificSQLGenerator sqlGenerator,
PaginationHelper paginationHelper) {
this.jdbcTemplate = jdbcTemplate;
this.sqlGenerator = sqlGenerator;
this.paginationHelper = paginationHelper;
}
private static final class EmailMapper implements RowMapper<EmailData> {
final String schema;
@@ -19,6 +19,7 @@
package org.apache.fineract.infrastructure.campaigns.email.service;
import java.util.Map;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.infrastructure.campaigns.email.data.EmailDataValidator;
import org.apache.fineract.infrastructure.campaigns.email.domain.EmailMessage;
import org.apache.fineract.infrastructure.campaigns.email.domain.EmailMessageAssembler;
@@ -29,7 +30,6 @@ import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuild
import org.apache.fineract.infrastructure.core.exception.PlatformDataIntegrityException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.dao.NonTransientDataAccessException;
import org.springframework.orm.jpa.JpaSystemException;
@@ -37,6 +37,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@RequiredArgsConstructor
public class EmailWritePlatformServiceJpaRepositoryImpl implements EmailWritePlatformService {
private static final Logger LOG = LoggerFactory.getLogger(EmailWritePlatformServiceJpaRepositoryImpl.class);
@@ -45,14 +46,6 @@ public class EmailWritePlatformServiceJpaRepositoryImpl implements EmailWritePla
private final EmailMessageRepository repository;
private final EmailDataValidator validator;
@Autowired
public EmailWritePlatformServiceJpaRepositoryImpl(final EmailMessageAssembler assembler, final EmailMessageRepository repository,
final EmailDataValidator validator) {
this.assembler = assembler;
this.repository = repository;
this.validator = validator;
}
@Transactional
@Override
public CommandProcessingResult create(final JsonCommand command) {
@@ -150,7 +150,7 @@ public class ExecuteEmailTasklet implements Tasklet {
emailMessage.setStatusType(EmailMessageStatusType.SENT.getValue());
emailMessageRepository.save(emailMessage);
} catch (Exception e) {
emailMessage.updateErrorMessage(e.getMessage());
emailMessage.setErrorMessage(e.getMessage());
emailMessage.setStatusType(EmailMessageStatusType.FAILED.getValue());
emailMessageRepository.save(emailMessage);
}
@@ -75,7 +75,7 @@ public class UpdateEmailOutboundWithCampaignMessageTasklet implements Tasklet {
log.debug("tenant time {} trigger time {}", tenantDateNow, nextTriggerDate);
if (nextTriggerDate.isBefore(tenantDateNow)) {
insertDirectCampaignIntoEmailOutboundTable(emailCampaignData.getParamValue(), emailCampaignData.getEmailSubject(),
emailCampaignData.getMessage(), emailCampaignData.getCampaignName(), emailCampaignData.getId());
emailCampaignData.getEmailMessage(), emailCampaignData.getCampaignName(), emailCampaignData.getId());
updateTriggerDates(emailCampaignData.getId());
}
}
@@ -22,7 +22,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public final class ReportData {
public class ReportData {
@SuppressWarnings("unused")
private final Long id;