killbill-aplcache
Changes
analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java 4(+2 -2)
entitlement/src/main/java/com/ning/billing/entitlement/api/billing/BillCycleDayCalculator.java 2(+1 -1)
entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionApiService.java 6(+3 -3)
entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionData.java 20(+11 -9)
Details
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java
index 71e3402..5df945e 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java
@@ -91,7 +91,7 @@ public class BusinessSubscription
*/
BusinessSubscription(final Subscription subscription, final Currency currency)
{
- this(subscription.getCurrentPriceList(), subscription.getCurrentPlan(), subscription.getCurrentPhase(), currency, subscription.getStartDate(), subscription.getState(), subscription.getId(), subscription.getBundleId());
+ this(subscription.getCurrentPriceList().getName(), subscription.getCurrentPlan(), subscription.getCurrentPhase(), currency, subscription.getStartDate(), subscription.getState(), subscription.getId(), subscription.getBundleId());
}
public BusinessSubscription(final String priceList, final Plan currentPlan, final PlanPhase currentPhase, final Currency currency, final DateTime startDate, final SubscriptionState state, final UUID subscriptionId, final UUID bundleId)
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java
index 09fbc96..f95b75c 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java
@@ -115,7 +115,7 @@ public class BusinessSubscriptionTransitionRecorder
prevSubscription = null;
}
else {
- prevSubscription = new BusinessSubscription(transition.getPreviousPriceList(), transition.getPreviousPlan(), transition.getPreviousPhase(), currency, previousEffectiveTransitionTime, transition.getPreviousState(), transition.getSubscriptionId(), transition.getBundleId());
+ prevSubscription = new BusinessSubscription(transition.getPreviousPriceList().getName(), transition.getPreviousPlan(), transition.getPreviousPhase(), currency, previousEffectiveTransitionTime, transition.getPreviousState(), transition.getSubscriptionId(), transition.getBundleId());
}
final BusinessSubscription nextSubscription;
@@ -124,7 +124,7 @@ public class BusinessSubscriptionTransitionRecorder
nextSubscription = null;
}
else {
- nextSubscription = new BusinessSubscription(transition.getNextPriceList(), transition.getNextPlan(), transition.getNextPhase(), currency, transition.getEffectiveTransitionTime(), transition.getNextState(), transition.getSubscriptionId(), transition.getBundleId());
+ nextSubscription = new BusinessSubscription(transition.getNextPriceList().getName(), transition.getNextPlan(), transition.getNextPhase(), currency, transition.getEffectiveTransitionTime(), transition.getNextState(), transition.getSubscriptionId(), transition.getBundleId());
}
record(transition.getId(), transitionKey, accountKey, transition.getRequestedTransitionTime(), event, prevSubscription, nextSubscription);
diff --git a/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java b/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
index 14654d2..059efaa 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
@@ -51,10 +51,12 @@ import com.ning.billing.analytics.MockPlan;
import com.ning.billing.analytics.MockProduct;
import com.ning.billing.analytics.dao.BusinessAccountDao;
import com.ning.billing.analytics.dao.BusinessSubscriptionTransitionDao;
+import com.ning.billing.catalog.MockPriceList;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.catalog.api.PhaseType;
import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhase;
+import com.ning.billing.catalog.api.PriceList;
import com.ning.billing.catalog.api.Product;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.dbi.MysqlTestingHelper;
@@ -204,7 +206,7 @@ public class TestAnalyticsService {
final UUID subscriptionId = UUID.randomUUID();
final DateTime effectiveTransitionTime = clock.getUTCNow();
final DateTime requestedTransitionTime = clock.getUTCNow();
- final String priceList = "something";
+ final PriceList priceList = new MockPriceList().setName("something");
transition = new SubscriptionTransitionData(
ID,
@@ -232,7 +234,7 @@ public class TestAnalyticsService {
requestedTransitionTime,
BusinessSubscriptionEvent.subscriptionCreated(plan),
null,
- new BusinessSubscription(priceList, plan, phase, ACCOUNT_CURRENCY, effectiveTransitionTime, Subscription.SubscriptionState.ACTIVE, subscriptionId, bundle.getId())
+ new BusinessSubscription(priceList.getName(), plan, phase, ACCOUNT_CURRENCY, effectiveTransitionTime, Subscription.SubscriptionState.ACTIVE, subscriptionId, bundle.getId())
);
}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockSubscription.java b/analytics/src/test/java/com/ning/billing/analytics/MockSubscription.java
index 357caad..9d7b5c3 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockSubscription.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockSubscription.java
@@ -16,22 +16,23 @@
package com.ning.billing.analytics;
+import java.util.List;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+
import com.ning.billing.catalog.api.BillingPeriod;
import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhase;
import com.ning.billing.catalog.api.PlanPhaseSpecifier;
+import com.ning.billing.catalog.api.PriceList;
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.SubscriptionTransition;
import com.ning.billing.util.customfield.CustomField;
-import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
-
-import java.util.List;
-import java.util.UUID;
-
public class MockSubscription implements Subscription
{
private static final UUID ID = UUID.randomUUID();
@@ -105,7 +106,7 @@ public class MockSubscription implements Subscription
}
@Override
- public String getCurrentPriceList()
+ public PriceList getCurrentPriceList()
{
return null;
}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java b/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
index 0b420f0..f24b8f2 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
@@ -17,10 +17,19 @@
package com.ning.billing.analytics;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.catalog.api.PhaseType;
import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhase;
+import com.ning.billing.catalog.api.PriceList;
import com.ning.billing.catalog.api.Product;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.entitlement.api.user.Subscription;
@@ -28,13 +37,6 @@ import com.ning.billing.entitlement.api.user.SubscriptionTransitionData;
import com.ning.billing.entitlement.events.EntitlementEvent;
import com.ning.billing.entitlement.events.user.ApiEventType;
import com.ning.billing.util.clock.ClockMock;
-import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
-import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import java.util.UUID;
public class TestAnalyticsListener
@@ -49,7 +51,7 @@ public class TestAnalyticsListener
private final Product product = new MockProduct("platinium", "subscription", ProductCategory.BASE);
private final Plan plan = new MockPlan("platinum-monthly", product);
private final PlanPhase phase = new MockPhase(PhaseType.EVERGREEN, plan, MockDuration.UNLIMITED(), 25.95);
- private final String priceList = null;
+ private final PriceList priceList = null;
private AnalyticsListener listener;
diff --git a/api/src/main/java/com/ning/billing/catalog/api/Catalog.java b/api/src/main/java/com/ning/billing/catalog/api/Catalog.java
index 694fdf1..924a5e4 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/Catalog.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/Catalog.java
@@ -18,9 +18,6 @@ package com.ning.billing.catalog.api;
import org.joda.time.DateTime;
-import com.ning.billing.catalog.api.overdue.OverdueStateSet;
-import com.ning.billing.entitlement.api.user.SubscriptionBundle;
-
public interface Catalog {
//
// Simple getters
@@ -59,6 +56,11 @@ public interface Catalog {
public abstract PlanPhase findPhase(String name, DateTime requestedDate, DateTime subscriptionStartDate) throws CatalogApiException;
//
+ // Find a priceList
+ //
+ public abstract PriceList findPriceList(String name, DateTime requestedDate) throws CatalogApiException;
+
+ //
// Rules
//
public abstract ActionPolicy planChangePolicy(PlanPhaseSpecifier from,
diff --git a/api/src/main/java/com/ning/billing/catalog/api/StaticCatalog.java b/api/src/main/java/com/ning/billing/catalog/api/StaticCatalog.java
index e1ee020..fb2d2a6 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/StaticCatalog.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/StaticCatalog.java
@@ -55,7 +55,12 @@ public interface StaticCatalog {
//
// Find a phase
//
- public abstract PlanPhase findCurrentPhase(String name) throws CatalogApiException;
+ public abstract PlanPhase findCurrentPhase(String name) throws CatalogApiException;
+
+ //
+ // Find a pricelist
+ //
+ public abstract PriceList findCurrentPricelist(String name) throws CatalogApiException;
//
//
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java b/api/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java
index 83d0b68..2ed8b14 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java
@@ -16,18 +16,18 @@
package com.ning.billing.entitlement.api.user;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
import com.ning.billing.catalog.api.BillingPeriod;
import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhase;
import com.ning.billing.catalog.api.PlanPhaseSpecifier;
+import com.ning.billing.catalog.api.PriceList;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.util.customfield.CustomizableEntity;
-import org.joda.time.DateTime;
-
-import java.util.List;
-import java.util.UUID;
-
public interface Subscription extends CustomizableEntity {
@@ -58,7 +58,7 @@ public interface Subscription extends CustomizableEntity {
public Plan getCurrentPlan();
- public String getCurrentPriceList();
+ public PriceList getCurrentPriceList();
public PlanPhase getCurrentPhase();
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransition.java b/api/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransition.java
index 80b836a..7577616 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransition.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransition.java
@@ -16,13 +16,15 @@
package com.ning.billing.entitlement.api.user;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhase;
+import com.ning.billing.catalog.api.PriceList;
import com.ning.billing.entitlement.api.user.Subscription.SubscriptionState;
import com.ning.billing.util.bus.BusEvent;
-import org.joda.time.DateTime;
-
-import java.util.UUID;
public interface SubscriptionTransition extends BusEvent {
@@ -53,7 +55,7 @@ public interface SubscriptionTransition extends BusEvent {
Plan getPreviousPlan();
- String getPreviousPriceList();
+ PriceList getPreviousPriceList();
PlanPhase getPreviousPhase();
@@ -63,5 +65,5 @@ public interface SubscriptionTransition extends BusEvent {
SubscriptionState getNextState();
- String getNextPriceList();
+ PriceList getNextPriceList();
}
diff --git a/catalog/src/main/java/com/ning/billing/catalog/DefaultPriceListSet.java b/catalog/src/main/java/com/ning/billing/catalog/DefaultPriceListSet.java
index f0636dd..83d810b 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/DefaultPriceListSet.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/DefaultPriceListSet.java
@@ -48,7 +48,7 @@ public class DefaultPriceListSet extends ValidatingConfig<StandaloneCatalog> {
this.childPriceLists = childPriceLists;
}
- public DefaultPlan getPlanListFrom(String priceListName, Product product,
+ public DefaultPlan getPlanFrom(String priceListName, Product product,
BillingPeriod period) throws CatalogApiException {
DefaultPlan result = null;
DefaultPriceList pl = findPriceListFrom(priceListName);
diff --git a/catalog/src/main/java/com/ning/billing/catalog/overdue/DefaultOverdueState.java b/catalog/src/main/java/com/ning/billing/catalog/overdue/DefaultOverdueState.java
index fd70790..7e73da9 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/overdue/DefaultOverdueState.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/overdue/DefaultOverdueState.java
@@ -20,6 +20,7 @@ import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlID;
import javax.xml.bind.annotation.XmlIDREF;
import com.ning.billing.catalog.api.overdue.OverdueState;
@@ -32,8 +33,8 @@ public class DefaultOverdueState<T extends Overdueable> implements OverdueState<
private DefaultCondition<T> condition;
@XmlAttribute(required=true, name="name")
- @XmlIDREF
- private String name;
+ @XmlID
+ private String name;
@XmlElement(required=false, name="externalMessage")
private String externalMessage = "";
diff --git a/catalog/src/main/java/com/ning/billing/catalog/StandaloneCatalog.java b/catalog/src/main/java/com/ning/billing/catalog/StandaloneCatalog.java
index 3aa1420..0e7e658 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/StandaloneCatalog.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/StandaloneCatalog.java
@@ -39,6 +39,7 @@ import com.ning.billing.catalog.api.PlanChangeResult;
import com.ning.billing.catalog.api.PlanPhase;
import com.ning.billing.catalog.api.PlanPhaseSpecifier;
import com.ning.billing.catalog.api.PlanSpecifier;
+import com.ning.billing.catalog.api.PriceList;
import com.ning.billing.catalog.api.Product;
import com.ning.billing.catalog.api.StaticCatalog;
import com.ning.billing.catalog.api.overdue.OverdueStateSet;
@@ -71,7 +72,7 @@ public class StandaloneCatalog extends ValidatingConfig<StandaloneCatalog> imple
@XmlElement(name="rules", required=true)
private PlanRules planRules;
- @XmlElement(name="overdueRules", required=true)
+ @XmlElement(name="overdueRules", required=false)
private OverdueRules overdueRules;
@XmlElementWrapper(name="plans", required=true)
@@ -147,7 +148,7 @@ public class StandaloneCatalog extends ValidatingConfig<StandaloneCatalog> imple
throw new CatalogApiException(ErrorCode.CAT_PRICE_LIST_NOT_FOUND,priceListName);
}
Product product = findCurrentProduct(productName);
- DefaultPlan result = priceLists.getPlanListFrom(priceListName, product, period);
+ DefaultPlan result = priceLists.getPlanFrom(priceListName, product, period);
if ( result == null) {
String periodString = (period == null) ? "NULL" : period.toString();
throw new CatalogApiException(ErrorCode.CAT_PLAN_NOT_FOUND, productName, periodString, priceListName);
@@ -192,6 +193,16 @@ public class StandaloneCatalog extends ValidatingConfig<StandaloneCatalog> imple
return plan.findPhase(name);
}
+ @Override
+ public PriceList findCurrentPricelist(String name)
+ throws CatalogApiException {
+ if (name == null || priceLists == null) {
+ throw new CatalogApiException(ErrorCode.CAT_PRICE_LIST_NOT_FOUND, name);
+ }
+
+ return priceLists.findPriceListFrom(name);
+ }
+
//////////////////////////////////////////////////////////////////////////////
diff --git a/catalog/src/main/java/com/ning/billing/catalog/VersionedCatalog.java b/catalog/src/main/java/com/ning/billing/catalog/VersionedCatalog.java
index 5718d35..00fd66c 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/VersionedCatalog.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/VersionedCatalog.java
@@ -46,6 +46,7 @@ import com.ning.billing.catalog.api.PlanChangeResult;
import com.ning.billing.catalog.api.PlanPhase;
import com.ning.billing.catalog.api.PlanPhaseSpecifier;
import com.ning.billing.catalog.api.PlanSpecifier;
+import com.ning.billing.catalog.api.PriceList;
import com.ning.billing.catalog.api.Product;
import com.ning.billing.catalog.api.StaticCatalog;
import com.ning.billing.catalog.api.overdue.OverdueStateSet;
@@ -162,6 +163,8 @@ public class VersionedCatalog extends ValidatingConfig<StandaloneCatalog> implem
throw new CatalogApiException(ErrorCode.CAT_NO_CATALOG_FOR_GIVEN_DATE, requestedDate.toDate().toString());
}
+
+
//
// Public methods not exposed in interface
//
@@ -272,6 +275,17 @@ public class VersionedCatalog extends ValidatingConfig<StandaloneCatalog> implem
return plan.findPhase(phaseName);
}
+
+ //
+ // Find a price list
+ //
+ @Override
+ public PriceList findPriceList(String name, DateTime requestedDate)
+ throws CatalogApiException {
+ return versionForDate(requestedDate).findCurrentPriceList(name);
+ }
+
+
//
// Rules
//
@@ -383,6 +397,13 @@ public class VersionedCatalog extends ValidatingConfig<StandaloneCatalog> implem
public PlanPhase findCurrentPhase(String name) throws CatalogApiException {
return versionForDate(clock.getUTCNow()).findCurrentPhase(name);
}
+
+
+ @Override
+ public PriceList findCurrentPricelist(String name)
+ throws CatalogApiException {
+ return versionForDate(clock.getUTCNow()).findCurrentPriceList(name);
+ }
@Override
public ActionPolicy planChangePolicy(PlanPhaseSpecifier from,
@@ -432,6 +453,6 @@ public class VersionedCatalog extends ValidatingConfig<StandaloneCatalog> implem
return versionForDate(clock.getUTCNow()).currentBundleOverdueStateSet();
}
-
+
}
diff --git a/catalog/src/test/java/com/ning/billing/catalog/TestPriceListSet.java b/catalog/src/test/java/com/ning/billing/catalog/TestPriceListSet.java
index 3cb8d2f..a26ce10 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/TestPriceListSet.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/TestPriceListSet.java
@@ -50,10 +50,10 @@ public class TestPriceListSet {
};
DefaultPriceListSet set = new DefaultPriceListSet(defaultPriceList, childPriceLists);
- Assert.assertEquals(set.getPlanListFrom(PriceListSet.DEFAULT_PRICELIST_NAME, foo, BillingPeriod.ANNUAL).getFinalPhase().getPhaseType(), PhaseType.EVERGREEN);
- Assert.assertEquals(set.getPlanListFrom(PriceListSet.DEFAULT_PRICELIST_NAME, foo, BillingPeriod.MONTHLY).getFinalPhase().getPhaseType(), PhaseType.EVERGREEN);
- Assert.assertEquals(set.getPlanListFrom("child", foo, BillingPeriod.ANNUAL).getFinalPhase().getPhaseType(), PhaseType.DISCOUNT);
- Assert.assertEquals(set.getPlanListFrom("child", foo, BillingPeriod.MONTHLY).getFinalPhase().getPhaseType(), PhaseType.EVERGREEN);
+ Assert.assertEquals(set.getPlanFrom(PriceListSet.DEFAULT_PRICELIST_NAME, foo, BillingPeriod.ANNUAL).getFinalPhase().getPhaseType(), PhaseType.EVERGREEN);
+ Assert.assertEquals(set.getPlanFrom(PriceListSet.DEFAULT_PRICELIST_NAME, foo, BillingPeriod.MONTHLY).getFinalPhase().getPhaseType(), PhaseType.EVERGREEN);
+ Assert.assertEquals(set.getPlanFrom("child", foo, BillingPeriod.ANNUAL).getFinalPhase().getPhaseType(), PhaseType.DISCOUNT);
+ Assert.assertEquals(set.getPlanFrom("child", foo, BillingPeriod.MONTHLY).getFinalPhase().getPhaseType(), PhaseType.EVERGREEN);
}
public void testForNullBillingPeriod() throws CatalogApiException {
@@ -76,10 +76,10 @@ public class TestPriceListSet {
};
DefaultPriceListSet set = new DefaultPriceListSet(defaultPriceList, childPriceLists);
- Assert.assertEquals(set.getPlanListFrom("child", foo, BillingPeriod.ANNUAL).getFinalPhase().getPhaseType(), PhaseType.DISCOUNT);
- Assert.assertEquals(set.getPlanListFrom("child", foo, BillingPeriod.MONTHLY).getFinalPhase().getPhaseType(), PhaseType.EVERGREEN);
- Assert.assertEquals(set.getPlanListFrom(PriceListSet.DEFAULT_PRICELIST_NAME, foo, BillingPeriod.ANNUAL).getFinalPhase().getPhaseType(), PhaseType.EVERGREEN);
- Assert.assertEquals(set.getPlanListFrom(PriceListSet.DEFAULT_PRICELIST_NAME, foo, BillingPeriod.MONTHLY).getFinalPhase().getPhaseType(), PhaseType.EVERGREEN);
+ Assert.assertEquals(set.getPlanFrom("child", foo, BillingPeriod.ANNUAL).getFinalPhase().getPhaseType(), PhaseType.DISCOUNT);
+ Assert.assertEquals(set.getPlanFrom("child", foo, BillingPeriod.MONTHLY).getFinalPhase().getPhaseType(), PhaseType.EVERGREEN);
+ Assert.assertEquals(set.getPlanFrom(PriceListSet.DEFAULT_PRICELIST_NAME, foo, BillingPeriod.ANNUAL).getFinalPhase().getPhaseType(), PhaseType.EVERGREEN);
+ Assert.assertEquals(set.getPlanFrom(PriceListSet.DEFAULT_PRICELIST_NAME, foo, BillingPeriod.MONTHLY).getFinalPhase().getPhaseType(), PhaseType.EVERGREEN);
}
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/alignment/PlanAligner.java b/entitlement/src/main/java/com/ning/billing/entitlement/alignment/PlanAligner.java
index 82a83bf..a55dcb7 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/alignment/PlanAligner.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/alignment/PlanAligner.java
@@ -133,7 +133,7 @@ public class PlanAligner {
subscription.getBundleStartDate(),
lastPlanTransition.getNextPlan(),
lastPlanTransition.getNextPhase().getPhaseType(),
- lastPlanTransition.getNextPriceList(),
+ lastPlanTransition.getNextPriceList().getName(),
requestedDate);
return getTimedPhase(timedPhases, effectiveDate, WhichPhase.NEXT);
// If we went through Plan changes, borrow the logics for changePlan alignement
@@ -142,9 +142,9 @@ public class PlanAligner {
subscription.getBundleStartDate(),
lastPlanTransition.getPreviousPhase(),
lastPlanTransition.getPreviousPlan(),
- lastPlanTransition.getPreviousPriceList(),
+ lastPlanTransition.getPreviousPriceList().getName(),
lastPlanTransition.getNextPlan(),
- lastPlanTransition.getNextPriceList(),
+ lastPlanTransition.getNextPriceList().getName(),
requestedDate,
effectiveDate,
WhichPhase.NEXT);
@@ -192,7 +192,7 @@ public class PlanAligner {
subscription.getBundleStartDate(),
subscription.getCurrentPhase(),
subscription.getCurrentPlan(),
- subscription.getCurrentPriceList(),
+ subscription.getCurrentPriceList().getName(),
nextPlan,
nextPriceList,
requestedDate,
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/BillCycleDayCalculator.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/BillCycleDayCalculator.java
index fd015d7..6cbc05f 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/BillCycleDayCalculator.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/BillCycleDayCalculator.java
@@ -61,7 +61,7 @@ public class BillCycleDayCalculator {
new PlanPhaseSpecifier(product.getName(),
product.getCategory(),
phase.getBillingPeriod(),
- transition.getNextPriceList(),
+ transition.getNextPriceList().getName(),
phase.getPhaseType()),
transition.getRequestedTransitionTime());
int result = -1;
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionApiService.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionApiService.java
index e1b1502..4c9b01e 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionApiService.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionApiService.java
@@ -152,7 +152,7 @@ public class SubscriptionApiService {
PlanPhaseSpecifier planPhase = new PlanPhaseSpecifier(currentPlan.getProduct().getName(),
currentPlan.getProduct().getCategory(),
subscription.getCurrentPlan().getBillingPeriod(),
- subscription.getCurrentPriceList(),
+ subscription.getCurrentPriceList().getName(),
subscription.getCurrentPhase().getPhaseType());
ActionPolicy policy = null;
@@ -216,7 +216,7 @@ public class SubscriptionApiService {
requestedDate = (requestedDate != null) ? DefaultClock.truncateMs(requestedDate) : now;
validateRequestedDate(subscription, now, requestedDate);
- String currentPriceList = subscription.getCurrentPriceList();
+ PriceList currentPriceList = subscription.getCurrentPriceList();
SubscriptionState currentState = subscription.getState();
if (currentState != SubscriptionState.ACTIVE) {
@@ -234,7 +234,7 @@ public class SubscriptionApiService {
PlanPhaseSpecifier fromPlanPhase = new PlanPhaseSpecifier(currentPlan.getProduct().getName(),
currentPlan.getProduct().getCategory(),
currentPlan.getBillingPeriod(),
- currentPriceList, subscription.getCurrentPhase().getPhaseType());
+ currentPriceList.getName(), subscription.getCurrentPhase().getPhaseType());
PlanSpecifier toPlanPhase = new PlanSpecifier(productName,
destProduct.getCategory(),
term,
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
index ee7bb5a..a2ed14c 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
@@ -16,6 +16,16 @@
package com.ning.billing.entitlement.api.user;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import com.ning.billing.catalog.api.ActionPolicy;
import com.ning.billing.catalog.api.BillingPeriod;
import com.ning.billing.catalog.api.Catalog;
@@ -23,6 +33,7 @@ import com.ning.billing.catalog.api.CatalogApiException;
import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhase;
import com.ning.billing.catalog.api.PlanPhaseSpecifier;
+import com.ning.billing.catalog.api.PriceList;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.entitlement.api.user.SubscriptionFactory.SubscriptionBuilder;
import com.ning.billing.entitlement.api.user.SubscriptionTransition.SubscriptionTransitionType;
@@ -31,7 +42,6 @@ import com.ning.billing.entitlement.api.user.SubscriptionTransitionDataIterator.
import com.ning.billing.entitlement.api.user.SubscriptionTransitionDataIterator.TimeLimit;
import com.ning.billing.entitlement.api.user.SubscriptionTransitionDataIterator.Visibility;
import com.ning.billing.entitlement.events.EntitlementEvent;
-import com.ning.billing.entitlement.events.EntitlementEvent.EventType;
import com.ning.billing.entitlement.events.phase.PhaseEvent;
import com.ning.billing.entitlement.events.user.ApiEvent;
import com.ning.billing.entitlement.events.user.ApiEventType;
@@ -40,16 +50,6 @@ import com.ning.billing.util.clock.Clock;
import com.ning.billing.util.customfield.CustomField;
import com.ning.billing.util.customfield.CustomizableEntityBase;
-import org.joda.time.DateTime;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.UUID;
-
public class SubscriptionData extends CustomizableEntityBase implements Subscription {
private final static Logger log = LoggerFactory.getLogger(SubscriptionData.class);
@@ -169,7 +169,7 @@ public class SubscriptionData extends CustomizableEntityBase implements Subscrip
}
@Override
- public String getCurrentPriceList() {
+ public PriceList getCurrentPriceList() {
return (getPreviousTransition() == null) ? null : getPreviousTransition().getNextPriceList();
}
@@ -358,10 +358,10 @@ public class SubscriptionData extends CustomizableEntityBase implements Subscrip
SubscriptionState nextState = null;
String nextPlanName = null;
String nextPhaseName = null;
- String nextPriceList = null;
-
+ String nextPriceListName = null;
+
SubscriptionState previousState = null;
- String previousPriceList = null;
+ PriceList previousPriceList = null;
transitions = new LinkedList<SubscriptionTransitionData>();
Plan previousPlan = null;
@@ -400,12 +400,12 @@ public class SubscriptionData extends CustomizableEntityBase implements Subscrip
nextState = SubscriptionState.ACTIVE;
nextPlanName = userEV.getEventPlan();
nextPhaseName = userEV.getEventPlanPhase();
- nextPriceList = userEV.getPriceList();
+ nextPriceListName = userEV.getPriceList();
break;
case CHANGE:
nextPlanName = userEV.getEventPlan();
nextPhaseName = userEV.getEventPlanPhase();
- nextPriceList = userEV.getPriceList();
+ nextPriceListName = userEV.getPriceList();
break;
case CANCEL:
nextState = SubscriptionState.CANCELLED;
@@ -427,9 +427,12 @@ public class SubscriptionData extends CustomizableEntityBase implements Subscrip
Plan nextPlan = null;
PlanPhase nextPhase = null;
+ PriceList nextPriceList = null;
+
try {
nextPlan = (nextPlanName != null) ? catalog.findPlan(nextPlanName, cur.getRequestedDate(), getStartDate()) : null;
nextPhase = (nextPhaseName != null) ? catalog.findPhase(nextPhaseName, cur.getRequestedDate(), getStartDate()) : null;
+ nextPriceList = (nextPriceListName != null) ? catalog.findPriceList(nextPriceListName, cur.getRequestedDate()) : null;
} catch (CatalogApiException e) {
log.error(String.format("Failed to build transition for subscription %s", id), e);
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionData.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionData.java
index f03193b..f420e98 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionData.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionData.java
@@ -16,15 +16,17 @@
package com.ning.billing.entitlement.api.user;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhase;
+import com.ning.billing.catalog.api.PriceList;
import com.ning.billing.entitlement.api.user.Subscription.SubscriptionState;
import com.ning.billing.entitlement.events.EntitlementEvent.EventType;
import com.ning.billing.entitlement.events.user.ApiEventType;
import com.ning.billing.entitlement.exceptions.EntitlementError;
-import org.joda.time.DateTime;
-
-import java.util.UUID;
public class SubscriptionTransitionData implements SubscriptionTransition {
@@ -38,19 +40,19 @@ public class SubscriptionTransitionData implements SubscriptionTransition {
private final DateTime requestedTransitionTime;
private final DateTime effectiveTransitionTime;
private final SubscriptionState previousState;
- private final String previousPriceList;
+ private final PriceList previousPriceList;
private final Plan previousPlan;
private final PlanPhase previousPhase;
private final SubscriptionState nextState;
- private final String nextPriceList;
+ private final PriceList nextPriceList;
private final Plan nextPlan;
private final PlanPhase nextPhase;
private final boolean isFromDisk;
public SubscriptionTransitionData(UUID eventId, UUID subscriptionId, UUID bundleId, EventType eventType,
ApiEventType apiEventType, DateTime requestedTransitionTime, DateTime effectiveTransitionTime,
- SubscriptionState previousState, Plan previousPlan, PlanPhase previousPhase, String previousPriceList,
- SubscriptionState nextState, Plan nextPlan, PlanPhase nextPhase, String nextPriceList,
+ SubscriptionState previousState, Plan previousPlan, PlanPhase previousPhase, PriceList previousPriceList,
+ SubscriptionState nextState, Plan nextPlan, PlanPhase nextPhase, PriceList nextPriceList,
long totalOrdering, boolean isFromDisk) {
super();
this.eventId = eventId;
@@ -120,12 +122,12 @@ public class SubscriptionTransitionData implements SubscriptionTransition {
@Override
- public String getPreviousPriceList() {
+ public PriceList getPreviousPriceList() {
return previousPriceList;
}
@Override
- public String getNextPriceList() {
+ public PriceList getNextPriceList() {
return nextPriceList;
}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultEntitlementBillingApi.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultEntitlementBillingApi.java
index c5868b3..24294a4 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultEntitlementBillingApi.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultEntitlementBillingApi.java
@@ -43,6 +43,7 @@ import com.ning.billing.catalog.api.CatalogService;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhase;
+import com.ning.billing.catalog.api.PriceList;
import com.ning.billing.catalog.api.PriceListSet;
import com.ning.billing.catalog.glue.CatalogModule;
import com.ning.billing.entitlement.api.TestApiBase;
@@ -145,7 +146,7 @@ public class TestDefaultEntitlementBillingApi {
DateTime then = now.minusDays(1);
Plan nextPlan = catalogService.getFullCatalog().findPlan("shotgun-annual", now);
PlanPhase nextPhase = nextPlan.getAllPhases()[0]; // The trial has no billing period
- String nextPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+ PriceList nextPriceList = catalogService.getFullCatalog().findPriceList(PriceListSet.DEFAULT_PRICELIST_NAME, now);
SubscriptionTransition t = new SubscriptionTransitionData(
zeroId, oneId, twoId, EventType.API_USER, ApiEventType.CREATE, then, now, null, null, null, null, SubscriptionState.ACTIVE, nextPlan, nextPhase, nextPriceList, 1, true);
transitions.add(t);
@@ -169,7 +170,7 @@ public class TestDefaultEntitlementBillingApi {
DateTime then = now.minusDays(1);
Plan nextPlan = catalogService.getFullCatalog().findPlan("shotgun-annual", now);
PlanPhase nextPhase = nextPlan.getAllPhases()[1];
- String nextPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+ PriceList nextPriceList = catalogService.getFullCatalog().findPriceList(PriceListSet.DEFAULT_PRICELIST_NAME, now);
SubscriptionTransition t = new SubscriptionTransitionData(
zeroId, oneId, twoId, EventType.API_USER, ApiEventType.CREATE, then, now, null, null, null, null, SubscriptionState.ACTIVE, nextPlan, nextPhase, nextPriceList, 1, true);
transitions.add(t);
@@ -194,7 +195,7 @@ public class TestDefaultEntitlementBillingApi {
DateTime then = now.minusDays(1);
Plan nextPlan = catalogService.getFullCatalog().findPlan("shotgun-monthly", now);
PlanPhase nextPhase = nextPlan.getAllPhases()[1];
- String nextPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+ PriceList nextPriceList = catalogService.getFullCatalog().findPriceList(PriceListSet.DEFAULT_PRICELIST_NAME, now);
SubscriptionTransition t = new SubscriptionTransitionData(
zeroId, oneId, twoId, EventType.API_USER, ApiEventType.CREATE, then, now, null, null, null, null, SubscriptionState.ACTIVE, nextPlan, nextPhase, nextPriceList, 1, true);
transitions.add(t);
@@ -217,7 +218,7 @@ public class TestDefaultEntitlementBillingApi {
DateTime then = now.minusDays(1);
Plan nextPlan = catalogService.getFullCatalog().findPlan("laser-scope-monthly", now);
PlanPhase nextPhase = nextPlan.getAllPhases()[0];
- String nextPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+ PriceList nextPriceList = catalogService.getFullCatalog().findPriceList(PriceListSet.DEFAULT_PRICELIST_NAME, now);
SubscriptionTransition t = new SubscriptionTransitionData(
zeroId, oneId, twoId, EventType.API_USER, ApiEventType.CREATE, then, now, null, null, null, null, SubscriptionState.ACTIVE, nextPlan, nextPhase, nextPriceList, 1, true);
transitions.add(t);
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/migration/TestMigration.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/migration/TestMigration.java
index 4868bf7..75dfc89 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/migration/TestMigration.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/migration/TestMigration.java
@@ -70,7 +70,7 @@ public abstract class TestMigration extends TestApiBase {
Subscription subscription = subscriptions.get(0);
assertDateWithin(subscription.getStartDate(), beforeMigration, afterMigration);
assertEquals(subscription.getEndDate(), null);
- assertEquals(subscription.getCurrentPriceList(), PriceListSet.DEFAULT_PRICELIST_NAME);
+ assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
assertEquals(subscription.getState(), SubscriptionState.ACTIVE);
assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-annual");
@@ -105,7 +105,7 @@ public abstract class TestMigration extends TestApiBase {
subscriptions.get(0) : subscriptions.get(1);
assertDateWithin(baseSubscription.getStartDate(), beforeMigration, afterMigration);
assertEquals(baseSubscription.getEndDate(), null);
- assertEquals(baseSubscription.getCurrentPriceList(), PriceListSet.DEFAULT_PRICELIST_NAME);
+ assertEquals(baseSubscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
assertEquals(baseSubscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
assertEquals(baseSubscription.getState(), SubscriptionState.ACTIVE);
assertEquals(baseSubscription.getCurrentPlan().getName(), "shotgun-annual");
@@ -115,7 +115,7 @@ public abstract class TestMigration extends TestApiBase {
subscriptions.get(0) : subscriptions.get(1);
assertEquals(aoSubscription.getStartDate(), initalAddonStart);
assertEquals(aoSubscription.getEndDate(), null);
- assertEquals(aoSubscription.getCurrentPriceList(), PriceListSet.DEFAULT_PRICELIST_NAME);
+ assertEquals(aoSubscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
assertEquals(aoSubscription.getCurrentPhase().getPhaseType(), PhaseType.DISCOUNT);
assertEquals(aoSubscription.getState(), SubscriptionState.ACTIVE);
assertEquals(aoSubscription.getCurrentPlan().getName(), "telescopic-scope-monthly");
@@ -149,7 +149,7 @@ public abstract class TestMigration extends TestApiBase {
assertEquals(subscriptions.size(), 1);
Subscription subscription = subscriptions.get(0);
assertDateWithin(subscription.getStartDate(), beforeMigration, afterMigration);
- assertEquals(subscription.getCurrentPriceList(), PriceListSet.DEFAULT_PRICELIST_NAME);
+ assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
assertEquals(subscription.getState(), SubscriptionState.ACTIVE);
assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-annual");
@@ -164,7 +164,7 @@ public abstract class TestMigration extends TestApiBase {
assertDateWithin(subscription.getStartDate(), beforeMigration, afterMigration);
assertNotNull(subscription.getEndDate());
assertTrue(subscription.getEndDate().isAfterNow());
- assertEquals(subscription.getCurrentPriceList(), PriceListSet.DEFAULT_PRICELIST_NAME);
+ assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
assertEquals(subscription.getCurrentPhase(), null);
assertEquals(subscription.getState(), SubscriptionState.CANCELLED);
assertNull(subscription.getCurrentPlan());
@@ -196,7 +196,7 @@ public abstract class TestMigration extends TestApiBase {
assertEquals(subscription.getStartDate(), trialDate);
assertEquals(subscription.getEndDate(), null);
- assertEquals(subscription.getCurrentPriceList(), PriceListSet.DEFAULT_PRICELIST_NAME);
+ assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.TRIAL);
assertEquals(subscription.getState(), SubscriptionState.ACTIVE);
assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-monthly");
@@ -210,7 +210,7 @@ public abstract class TestMigration extends TestApiBase {
assertEquals(subscription.getStartDate(), trialDate);
assertEquals(subscription.getEndDate(), null);
- assertEquals(subscription.getCurrentPriceList(), PriceListSet.DEFAULT_PRICELIST_NAME);
+ assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
assertEquals(subscription.getState(), SubscriptionState.ACTIVE);
assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-monthly");
@@ -242,7 +242,7 @@ public abstract class TestMigration extends TestApiBase {
Subscription subscription = subscriptions.get(0);
assertDateWithin(subscription.getStartDate(), beforeMigration, afterMigration);
assertEquals(subscription.getEndDate(), null);
- assertEquals(subscription.getCurrentPriceList(), PriceListSet.DEFAULT_PRICELIST_NAME);
+ assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
assertEquals(subscription.getState(), SubscriptionState.ACTIVE);
assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-monthly");
@@ -254,7 +254,7 @@ public abstract class TestMigration extends TestApiBase {
assertDateWithin(subscription.getStartDate(), beforeMigration, afterMigration);
assertEquals(subscription.getEndDate(), null);
- assertEquals(subscription.getCurrentPriceList(), PriceListSet.DEFAULT_PRICELIST_NAME);
+ assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
assertEquals(subscription.getState(), SubscriptionState.ACTIVE);
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiDemos.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiDemos.java
index 7fceab9..996306a 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiDemos.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiDemos.java
@@ -174,7 +174,7 @@ public class TestUserApiDemos extends TestApiBase {
Plan currentPlan = subscription.getCurrentPlan();
PlanPhase currentPhase = subscription.getCurrentPhase();
- String priceList = subscription.getCurrentPriceList();
+ String priceList = subscription.getCurrentPriceList().getName();
System.out.println("");
System.out.println("\t CURRENT TIME = " + clock.getUTCNow());
System.out.println("");
diff --git a/overdue/src/main/java/com/ning/billing/overdue/calculator/BillingStateCalculator.java b/overdue/src/main/java/com/ning/billing/overdue/calculator/BillingStateCalculator.java
index c2e5efd..1ccf2eb 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/calculator/BillingStateCalculator.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/calculator/BillingStateCalculator.java
@@ -16,10 +16,32 @@
package com.ning.billing.overdue.calculator;
+import java.math.BigDecimal;
+import java.util.SortedSet;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
import com.ning.billing.catalog.api.overdue.BillingState;
import com.ning.billing.catalog.api.overdue.Overdueable;
+import com.ning.billing.invoice.api.Invoice;
+
+public abstract class BillingStateCalculator<T extends Overdueable> {
+
+ public abstract BillingState<T> calculateBillingState(T overdueable);
+
+ protected DateTime earliest(SortedSet<Invoice> unpaidInvoices) {
+ // TODO Auto-generated method stub
+ return null;
+ }
-public interface BillingStateCalculator<T extends Overdueable> {
+ protected BigDecimal sumBalance(SortedSet<Invoice> unpaidInvoices) {
+ // TODO Auto-generated method stub
+ return null;
+ }
- public BillingState<T> calculateBillingState(T overdueable);
+ protected SortedSet<Invoice> unpaidInvoicesFor(UUID id) {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
diff --git a/overdue/src/main/java/com/ning/billing/overdue/calculator/BillingStateCalculatorBundle.java b/overdue/src/main/java/com/ning/billing/overdue/calculator/BillingStateCalculatorBundle.java
index 1abe865..caccf62 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/calculator/BillingStateCalculatorBundle.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/calculator/BillingStateCalculatorBundle.java
@@ -16,16 +16,68 @@
package com.ning.billing.overdue.calculator;
-import org.apache.commons.lang.NotImplementedException;
+import java.math.BigDecimal;
+import java.util.SortedSet;
+import java.util.UUID;
+import org.joda.time.DateTime;
+
+import com.google.inject.Inject;
+import com.ning.billing.catalog.api.BillingPeriod;
+import com.ning.billing.catalog.api.PhaseType;
+import com.ning.billing.catalog.api.PriceList;
+import com.ning.billing.catalog.api.Product;
import com.ning.billing.catalog.api.overdue.BillingState;
+import com.ning.billing.catalog.api.overdue.BillingStateBundle;
+import com.ning.billing.catalog.api.overdue.PaymentResponse;
+import com.ning.billing.entitlement.api.user.EntitlementUserApi;
+import com.ning.billing.entitlement.api.user.Subscription;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
+import com.ning.billing.invoice.api.Invoice;
+import com.ning.billing.invoice.api.InvoiceUserApi;
+import com.ning.billing.util.tag.Tag;
-public class BillingStateCalculatorBundle implements BillingStateCalculator<SubscriptionBundle>{
+public class BillingStateCalculatorBundle extends BillingStateCalculator<SubscriptionBundle>{
- @Override
- public BillingState<SubscriptionBundle> calculateBillingState(SubscriptionBundle overdueable) {
- throw new NotImplementedException();
+ private EntitlementUserApi entitlementApi;
+ private InvoiceUserApi invoiceApi;
+
+ @Inject
+ public BillingStateCalculatorBundle(EntitlementUserApi entitlementApi, InvoiceUserApi invoiceApi) {
+ this.entitlementApi = entitlementApi;
+ this.invoiceApi = invoiceApi;
}
+
+ @Override
+ public BillingState<SubscriptionBundle> calculateBillingState(SubscriptionBundle bundle) {
+
+ SortedSet<Invoice> unpaidInvoices = unpaidInvoicesFor(bundle.getId());
+ Subscription basePlan = null;
+
+ UUID id = bundle.getId();
+ int numberOfUnpaidInvoices = unpaidInvoices.size();
+ BigDecimal unpaidInvoiceBalance = sumBalance(unpaidInvoices);
+ DateTime dateOfEarliestUnpaidInvoice = earliest(unpaidInvoices);
+ PaymentResponse responseForLastFailedPayment;
+ Tag[] tags = new Tag[]{}; //TODO
+ Product basePlanProduct = basePlan.getCurrentPlan().getProduct();
+ BillingPeriod basePlanBillingPeriod = basePlan.getCurrentPlan().getBillingPeriod();
+ PriceList basePlanPriceList = basePlan.getCurrentPriceList();
+ PhaseType basePlanPhaseType = basePlan.getCurrentPhase().getPhaseType();
+
+// return new BillingStateBundle(
+// id,
+// numberOfUnpaidInvoices,
+// unpaidInvoiceBalance,
+// dateOfEarliestUnpaidInvoice,
+// responseForLastFailedPayment,
+// tags,
+// basePlanProduct,
+// basePlanBillingPeriod,
+// basePlanPriceList,
+// basePlanPhaseType);
+
+ return null;
+ }
}