diff --git a/api/src/main/java/org/killbill/billing/events/BusEventBase.java b/api/src/main/java/org/killbill/billing/events/BusEventBase.java
index 7c81de1..32eff73 100644
--- a/api/src/main/java/org/killbill/billing/events/BusEventBase.java
+++ b/api/src/main/java/org/killbill/billing/events/BusEventBase.java
@@ -48,4 +48,36 @@ public class BusEventBase implements BusEvent {
public UUID getUserToken() {
return userToken;
}
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof BusEventBase)) {
+ return false;
+ }
+
+ final BusEventBase that = (BusEventBase) o;
+
+ if (searchKey1 != null ? !searchKey1.equals(that.searchKey1) : that.searchKey1 != null) {
+ return false;
+ }
+ if (searchKey2 != null ? !searchKey2.equals(that.searchKey2) : that.searchKey2 != null) {
+ return false;
+ }
+ if (userToken != null ? !userToken.equals(that.userToken) : that.userToken != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = searchKey1 != null ? searchKey1.hashCode() : 0;
+ result = 31 * result + (searchKey2 != null ? searchKey2.hashCode() : 0);
+ result = 31 * result + (userToken != null ? userToken.hashCode() : 0);
+ return result;
+ }
}
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/api/user/DefaultInvoiceNotificationInternalEvent.java b/invoice/src/main/java/org/killbill/billing/invoice/api/user/DefaultInvoiceNotificationInternalEvent.java
index e969fa9..8ed9144 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/api/user/DefaultInvoiceNotificationInternalEvent.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/api/user/DefaultInvoiceNotificationInternalEvent.java
@@ -85,6 +85,9 @@ public class DefaultInvoiceNotificationInternalEvent extends BusEventBase implem
if (!(o instanceof DefaultInvoiceNotificationInternalEvent)) {
return false;
}
+ if (!super.equals(o)) {
+ return false;
+ }
final DefaultInvoiceNotificationInternalEvent that = (DefaultInvoiceNotificationInternalEvent) o;
@@ -100,15 +103,18 @@ public class DefaultInvoiceNotificationInternalEvent extends BusEventBase implem
if (targetDate != null ? targetDate.compareTo(that.targetDate) != 0 : that.targetDate != null) {
return false;
}
+
return true;
}
@Override
public int hashCode() {
- int result = targetDate != null ? targetDate.hashCode() : 0;
+ int result = super.hashCode();
+ result = 31 * result + (targetDate != null ? targetDate.hashCode() : 0);
result = 31 * result + (accountId != null ? accountId.hashCode() : 0);
result = 31 * result + (amountOwed != null ? amountOwed.hashCode() : 0);
result = 31 * result + (currency != null ? currency.hashCode() : 0);
return result;
}
}
+
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/dao/DefaultInvoiceDao.java b/invoice/src/main/java/org/killbill/billing/invoice/dao/DefaultInvoiceDao.java
index 0b3f65f..762f586 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/dao/DefaultInvoiceDao.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/dao/DefaultInvoiceDao.java
@@ -777,18 +777,15 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
private void notifyOfFutureBillingEvents(final EntitySqlDaoWrapperFactory entitySqlDaoWrapperFactory, final UUID accountId,
final Map<UUID, List<DateTime>> callbackDateTimePerSubscriptions, final InternalCallContext internalCallContext) {
-
final long dryRunNotificationTime = invoiceConfig.getDryRunNotificationSchedule().getMillis();
- final boolean isInvoiceNotificationEnabled = dryRunNotificationTime > 0;
+ final boolean isInvoiceNotificationEnabled = dryRunNotificationTime > 0;
for (final UUID subscriptionId : callbackDateTimePerSubscriptions.keySet()) {
final List<DateTime> callbackDateTimeUTC = callbackDateTimePerSubscriptions.get(subscriptionId);
for (final DateTime cur : callbackDateTimeUTC) {
if (isInvoiceNotificationEnabled) {
final DateTime curDryRunNotificationTime = cur.minus(dryRunNotificationTime);
- // Only schedule if the date is in the future
- if (curDryRunNotificationTime.isAfter(clock.getUTCNow())) {
- nextBillingDatePoster.insertNextBillingDryRunNotificationFromTransaction(entitySqlDaoWrapperFactory, accountId, subscriptionId, curDryRunNotificationTime, cur, internalCallContext);
- }
+ final DateTime effectiveCurDryRunNotificationTime = (curDryRunNotificationTime.isAfter(clock.getUTCNow())) ? curDryRunNotificationTime : clock.getUTCNow();
+ nextBillingDatePoster.insertNextBillingDryRunNotificationFromTransaction(entitySqlDaoWrapperFactory, accountId, subscriptionId, effectiveCurDryRunNotificationTime, cur, internalCallContext);
}
nextBillingDatePoster.insertNextBillingNotificationFromTransaction(entitySqlDaoWrapperFactory, accountId, subscriptionId, cur, internalCallContext);
}