killbill-memoizeit

overdue: fix bug where add-ons are cancelled multiple times Overdue

3/7/2013 4:57:07 PM

Details

diff --git a/overdue/src/main/java/com/ning/billing/overdue/applicator/OverdueStateApplicator.java b/overdue/src/main/java/com/ning/billing/overdue/applicator/OverdueStateApplicator.java
index 39beaf4..8f46d06 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/applicator/OverdueStateApplicator.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/applicator/OverdueStateApplicator.java
@@ -30,8 +30,8 @@ import com.ning.billing.ErrorCode;
 import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
-import com.ning.billing.account.api.AccountUserApi;
 import com.ning.billing.catalog.api.ActionPolicy;
+import com.ning.billing.catalog.api.ProductCategory;
 import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
 import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
@@ -235,7 +235,10 @@ public class OverdueStateApplicator<T extends Blockable> {
             result.add((Subscription) blockable);
         } else if (blockable instanceof SubscriptionBundle) {
             for (final Subscription cur : entitlementUserApi.getSubscriptionsForBundle(blockable.getId(), context)) {
-                computeSubscriptionsToCancel((T) cur, result, context);
+                // Entitlement is smart enough and will cancel the associated add-ons
+                if (!ProductCategory.ADD_ON.equals(cur.getCategory())) {
+                    computeSubscriptionsToCancel((T) cur, result, context);
+                }
             }
         } else if (blockable instanceof Account) {
             for (final SubscriptionBundle cur : entitlementUserApi.getBundlesForAccount(blockable.getId(), context)) {