killbill-uncached

Details

diff --git a/api/src/main/java/com/ning/billing/entitlement/api/billing/DefaultBillingEvent.java b/api/src/main/java/com/ning/billing/entitlement/api/billing/DefaultBillingEvent.java
index 9311235..744a339 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/billing/DefaultBillingEvent.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/billing/DefaultBillingEvent.java
@@ -68,18 +68,6 @@ public class DefaultBillingEvent implements BillingEvent {
         this.description = description;
     }
 
-//    public DefaultBillingEvent(BillingEvent event, DateTime effectiveDate) {
-//        this.subscriptionId = event.getSubscriptionId();
-//        this.startDate = startDate;
-//        this.planName = event.getPlanName();
-//        this.planPhaseName = event.getPlanPhaseName();
-//        this.price = event.getPrice();
-//        this.billingPeriod = event.getBillingPeriod();
-//        this.billCycleDay = event.getBillCycleDay();
-//        this.billingMode = event.getBillingMode();
-//    }
-
-    
     @Override
     public int compareTo(BillingEvent e1) {
         if (getSubscriptionId().equals(e1.getSubscriptionId())) {
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 f9b2234..2b07182 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
@@ -26,21 +26,14 @@ import com.ning.billing.account.api.Account;
 
 public interface EntitlementBillingApi {
 
-    /**
-     *
-     * @param accountId 
-     * @return an ordered list of billing events for the given account
-     * @return the list of accounts which have active subscriptions
-     */
-    public List<Account> 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 event for the given accounts
      *
      */
-    public SortedSet<BillingEvent> getBillingEventsForSubscription(UUID accountId);
+    public SortedSet<BillingEvent> getBillingEventsForAccount(UUID accountId);
 
 
     public void setChargedThroughDate(UUID subscriptionId, DateTime ctd);
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 a607c7c..2753e02 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
@@ -26,6 +26,15 @@ import org.joda.time.DateTime;
 
 import com.google.inject.Inject;
 import com.ning.billing.account.api.Account;
+import com.ning.billing.account.api.AccountUserApi;
+import com.ning.billing.catalog.api.BillingAlignment;
+import com.ning.billing.catalog.api.Catalog;
+import com.ning.billing.catalog.api.CatalogApiException;
+import com.ning.billing.catalog.api.CatalogService;
+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.Product;
 import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.entitlement.api.user.SubscriptionData;
@@ -36,15 +45,19 @@ import com.ning.billing.entitlement.engine.dao.EntitlementDao;
 public class DefaultEntitlementBillingApi implements EntitlementBillingApi {
 
     private final EntitlementDao dao;
+    private final AccountUserApi accountApi;
+    private final CatalogService catalogService;
 
     @Inject
-    public DefaultEntitlementBillingApi(EntitlementDao dao) {
+    public DefaultEntitlementBillingApi(EntitlementDao dao, AccountUserApi accountApi, CatalogService catalogService) {
         super();
         this.dao = dao;
+        this.accountApi = accountApi;
+        this.catalogService = catalogService;
     }
 
     @Override
-    public SortedSet<BillingEvent> getBillingEventsForSubscription(
+    public SortedSet<BillingEvent> getBillingEventsForAccount(
             UUID accountId) {
         
         List<SubscriptionBundle> bundles = dao.getSubscriptionBundleForAccount(accountId);
@@ -57,22 +70,40 @@ public class DefaultEntitlementBillingApi implements EntitlementBillingApi {
             transitions.addAll(subscription.getAllTransitions());
         }
         
-        SortedSet<BillingEvent> result = new TreeSet<BillingEvent>();
+        Account account = accountApi.getAccountById(accountId);
         
+        SortedSet<BillingEvent> result = new TreeSet<BillingEvent>();        
         for (SubscriptionTransition transition : transitions) {
-            result.add(createBillingEvent(transition));
+            result.add(new DefaultBillingEvent(transition, account.getBillCycleDay()));
         }
         return result;
     }
     
-    public List<Account> getActiveAccounts() {
-        return null;
-    }
-
-    private BillingEvent createBillingEvent(SubscriptionTransition transition) {
-        
-        return null;
+    private int calculateBCD(SubscriptionTransition transition, UUID accountId) throws CatalogApiException {
+    	Catalog catalog = catalogService.getCatalog();
+    	Plan plan = transition.getNextPlan();
+    	Product product = plan.getProduct();
+    	PlanPhase phase = transition.getNextPhase();
+    	
+    	BillingAlignment alignment = catalog.billingAlignment(
+    			new PlanPhaseSpecifier(product.getName(), 
+    					product.getCategory(), 
+    					phase.getBillingPeriod(), 
+    					transition.getNextPriceList(), 
+    					phase.getPhaseType()));
+    	int result = 0;
+    	switch (alignment) {
+    		case ACCOUNT : result = accountApi.getAccountById(accountId).getBillCycleDay();
+    		break;
+    		case BUNDLE : result = dao.getSubscriptionBundleFromId(transition.getBundleId()).getStartDate().getDayOfMonth();
+    		break;
+    		case SUBSCRIPTION : result = dao.getSubscriptionFromId(transition.getSubscriptionId()).getStartDate().getDayOfMonth();
+    		break;
+    	}
+    	return result;
+    		
     }
+    
 
     @Override
     public void setChargedThroughDate(UUID subscriptionId, DateTime ctd) {