killbill-memoizeit

Initial changes for Entitlement/Billing integration - note

12/22/2011 11:26:40 PM

Details

diff --git a/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java b/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java
index e92ee96..cbc9f8d 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java
@@ -17,6 +17,7 @@
 package com.ning.billing.entitlement.api.billing;
 
 import com.ning.billing.catalog.api.BillingPeriod;
+import com.ning.billing.catalog.api.CatalogApiException;
 import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.catalog.api.InternationalPrice;
 import org.joda.time.DateTime;
@@ -61,20 +62,6 @@ public interface BillingEvent extends Comparable<BillingEvent> {
 
     /**
      *
-     * @return the international price for the event
-     *
-     */
-    public InternationalPrice getPrice();
-
-    /**
-     *
-     * @param currency the target currency for invoicing
-     * @return the price of the plan phase in the specified currency
-     */
-    public BigDecimal getPrice(Currency currency);
-
-    /**
-     *
      * @return the billing period for the active phase
      */
     public BillingPeriod getBillingPeriod();
@@ -90,4 +77,16 @@ public interface BillingEvent extends Comparable<BillingEvent> {
      * @return the description of the billing event
      */
     public String getDescription();
+
+    /**
+     * 
+     * @return the fixed price for the phase
+     */
+    public InternationalPrice getFixedPrice();
+
+    /**
+     * 
+     * @return the recurring price for the phase
+     */
+    public InternationalPrice getRecurringPrice();
 }
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/billing/EntitlementBillingApi.java b/api/src/main/java/com/ning/billing/entitlement/api/billing/EntitlementBillingApi.java
index 7c6cabc..4fed5ff 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/billing/EntitlementBillingApi.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/billing/EntitlementBillingApi.java
@@ -16,30 +16,20 @@
 
 package com.ning.billing.entitlement.api.billing;
 
-import java.util.List;
 import java.util.SortedSet;
 import java.util.UUID;
 
 import org.joda.time.DateTime;
 
-import com.ning.billing.account.api.IAccount;
-
 public interface EntitlementBillingApi {
 
     /**
      *
-     * @return the list of accounts which have active subscriptions
-     */
-    public List<IAccount> getActiveAccounts();
-
-    /**
-     *
-     * @param subscriptionId the subscriptionId of interest for a gievn account
-     * @return an ordered list of billing event
+     * @param accountId 
+     * @return an ordered list of billing events for the given account
      *
-     * Note: The user api allows to get list of subscription bundle / subscriptions for an account
      */
-    public SortedSet<BillingEvent> getBillingEventsForSubscription(UUID subscriptionId);
+    public SortedSet<BillingEvent> getBillingEventsForSubscription(UUID accountId);
 
 
     public void setChargedThroughDate(UUID subscriptionId, DateTime ctd);
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 c94fc9d..6db08fb 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
@@ -68,4 +68,6 @@ public interface Subscription {
 
     public List<SubscriptionTransition> getActiveTransitions();
 
+    public List<SubscriptionTransition> getAllTransitions();
+
 }
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultBillingEvent.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultBillingEvent.java
new file mode 100644
index 0000000..11633e9
--- /dev/null
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultBillingEvent.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.entitlement.api.billing;
+
+import java.math.BigDecimal;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
+import com.ning.billing.catalog.api.BillingPeriod;
+import com.ning.billing.catalog.api.CatalogApiException;
+import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.catalog.api.InternationalPrice;
+import com.ning.billing.entitlement.api.user.SubscriptionTransition;
+
+public class DefaultBillingEvent implements BillingEvent {
+    final private int billCycleDay;
+    final private UUID subscriptionId;
+    final private DateTime effectiveDate;
+    final private String planPhaseName;
+    final private String planName;
+    final private InternationalPrice fixedPrice;
+    final private InternationalPrice recurringPrice;
+    final private String description;
+    final private BillingMode billingMode;
+    final private BillingPeriod billingPeriod;
+    
+    public DefaultBillingEvent(SubscriptionTransition transition) {
+        billCycleDay;
+        subscriptionId = transition.getSubscriptionId();
+        effectiveDate = transition.getEffectiveTransitionTime();
+        planPhaseName = transition.getNextPhase().getName();
+        planName = transition.getNextPlan().getName();
+        fixedPrice = transition.getNextPhase().getFixedPrice();
+        recurringPrice = transition.getNextPhase().getRecurringPrice();
+        description = transition.getTransitionType().toString();
+        billingMode=BillingMode.IN_ADVANCE;
+        billingPeriod = transition.getNextPhase().getBillingPeriod();
+        
+    }
+    
+    @Override
+    public int compareTo(BillingEvent e1) {
+        if (getSubscriptionId().equals(e1.getSubscriptionId())) {
+            return getEffectiveDate().compareTo(e1.getEffectiveDate());
+        } else {
+            return getSubscriptionId().compareTo(e1.getSubscriptionId());
+        }
+    }
+
+    @Override
+    public int getBillCycleDay() {
+         return billCycleDay;
+    }
+
+    @Override
+    public UUID getSubscriptionId() {
+        return subscriptionId;
+    }
+
+    @Override
+    public DateTime getEffectiveDate() {
+        return effectiveDate;
+    }
+
+    @Override
+    public String getPlanPhaseName() {
+        return planPhaseName;
+    }
+
+    @Override
+    public String getPlanName() {
+        return planName;
+    }
+
+    @Override
+    public BillingPeriod getBillingPeriod() {
+        return billingPeriod;
+    }
+
+    @Override
+    public BillingMode getBillingMode() {
+        return billingMode;
+    }
+
+    @Override
+    public String getDescription() {
+        return description;
+    }
+
+    @Override
+    public InternationalPrice getFixedPrice() {
+        return fixedPrice;
+    }
+
+    @Override
+    public InternationalPrice getRecurringPrice() {
+        return recurringPrice;
+    }
+
+}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultEntitlementBillingApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultEntitlementBillingApi.java
index 1704a0a..e16f2b5 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultEntitlementBillingApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultEntitlementBillingApi.java
@@ -16,18 +16,22 @@
 
 package com.ning.billing.entitlement.api.billing;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.SortedSet;
+import java.util.TreeSet;
 import java.util.UUID;
 
 import org.joda.time.DateTime;
 
 import com.google.inject.Inject;
-import com.ning.billing.account.api.IAccount;
+import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.entitlement.api.user.SubscriptionData;
 import com.ning.billing.entitlement.api.user.SubscriptionFactory.SubscriptionBuilder;
-
+import com.ning.billing.entitlement.api.user.SubscriptionTransition;
 import com.ning.billing.entitlement.engine.dao.EntitlementDao;
+import com.ning.billing.entitlement.events.EntitlementEvent;
 
 public class DefaultEntitlementBillingApi implements EntitlementBillingApi {
 
@@ -40,13 +44,29 @@ public class DefaultEntitlementBillingApi implements EntitlementBillingApi {
     }
 
     @Override
-    public List<IAccount> getActiveAccounts() {
-        return null;
+    public SortedSet<BillingEvent> getBillingEventsForSubscription(
+            UUID accountId) {
+        
+        List<SubscriptionBundle> bundles = dao.getSubscriptionBundleForAccount(accountId);
+        List<Subscription> subscriptions = new ArrayList<Subscription>();
+        for (SubscriptionBundle bundle: bundles) {
+            subscriptions.addAll(dao.getSubscriptions(bundle.getId()));
+        }
+        List<SubscriptionTransition> transitions = new ArrayList<SubscriptionTransition>();
+        for (Subscription subscription: subscriptions) {
+            transitions.addAll(subscription.getAllTransitions());
+        }
+        
+        SortedSet<BillingEvent> result = new TreeSet<BillingEvent>();
+        
+        for (SubscriptionTransition transition : transitions) {
+            result.add(createBillingEvent(transition));
+        }
+        return result;
     }
 
-    @Override
-    public SortedSet<BillingEvent> getBillingEventsForSubscription(
-            UUID subscriptionId) {
+    private BillingEvent createBillingEvent(SubscriptionTransition transition) {
+        
         return null;
     }
 
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 12333a2..7561305 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
@@ -183,6 +183,19 @@ public class SubscriptionData implements Subscription {
         return activeTransitions;
     }
 
+    @Override
+    public List<SubscriptionTransition> getAllTransitions() {
+        if (transitions == null) {
+            return Collections.emptyList();
+        }
+
+        List<SubscriptionTransition> result = new ArrayList<SubscriptionTransition>();
+        for (SubscriptionTransition cur : transitions) {
+            result.add(cur);
+               }
+        return result;
+    }
+
 
     public SubscriptionTransition getLatestTranstion() {