killbill-memoizeit

analytics: fix slug in bii Don't look at the current plan and

9/10/2012 4:04:06 PM

Details

diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoiceRecorder.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoiceRecorder.java
index 4dfd681..e78a04f 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoiceRecorder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoiceRecorder.java
@@ -36,6 +36,8 @@ import com.ning.billing.analytics.dao.BusinessInvoiceSqlDao;
 import com.ning.billing.analytics.model.BusinessAccount;
 import com.ning.billing.analytics.model.BusinessInvoice;
 import com.ning.billing.analytics.model.BusinessInvoiceItem;
+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.entitlement.api.user.EntitlementUserApi;
@@ -57,6 +59,7 @@ public class BusinessInvoiceRecorder {
     private final EntitlementUserApi entitlementApi;
     private final InvoiceUserApi invoiceApi;
     private final BusinessInvoiceSqlDao sqlDao;
+    private final CatalogService catalogService;
     private final Clock clock;
 
     @Inject
@@ -64,11 +67,13 @@ public class BusinessInvoiceRecorder {
                                    final EntitlementUserApi entitlementApi,
                                    final InvoiceUserApi invoiceApi,
                                    final BusinessInvoiceSqlDao sqlDao,
+                                   final CatalogService catalogService,
                                    final Clock clock) {
         this.accountApi = accountApi;
         this.entitlementApi = entitlementApi;
         this.invoiceApi = invoiceApi;
         this.sqlDao = sqlDao;
+        this.catalogService = catalogService;
         this.clock = clock;
     }
 
@@ -181,16 +186,25 @@ public class BusinessInvoiceRecorder {
             }
         }
 
-        if (invoiceItem.getSubscriptionId() != null) {
+        if (invoiceItem.getPlanName() != null) {
+            try {
+                plan = catalogService.getFullCatalog().findPlan(invoiceItem.getPlanName(), invoiceItem.getStartDate().toDateTimeAtStartOfDay());
+            } catch (CatalogApiException e) {
+                log.warn("Unable to retrieve plan for invoice item {}", invoiceItem.getId());
+            }
+        }
+
+        if (invoiceItem.getSubscriptionId() != null && invoiceItem.getPhaseName() != null) {
             final Subscription subscription;
             try {
                 subscription = entitlementApi.getSubscriptionFromId(invoiceItem.getSubscriptionId());
-                plan = subscription.getCurrentPlan();
-                planPhase = subscription.getCurrentPhase();
+                planPhase = catalogService.getFullCatalog().findPhase(invoiceItem.getPhaseName(), invoiceItem.getStartDate().toDateTimeAtStartOfDay(), subscription.getStartDate());
             } catch (EntitlementUserApiException e) {
                 log.warn("Ignoring subscription fields for invoice item {} for subscription {} (subscription does not exist)",
                          invoiceItem.getId().toString(),
                          invoiceItem.getSubscriptionId().toString());
+            } catch (CatalogApiException e) {
+                log.warn("Unable to retrieve phase for invoice item {}", invoiceItem.getId());
             }
         }
 
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessInvoiceRecorder.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessInvoiceRecorder.java
index 31e76e3..39a5d6d 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessInvoiceRecorder.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessInvoiceRecorder.java
@@ -27,6 +27,8 @@ import org.testng.annotations.Test;
 import com.ning.billing.account.api.AccountUserApi;
 import com.ning.billing.analytics.dao.BusinessInvoiceSqlDao;
 import com.ning.billing.analytics.model.BusinessInvoiceItem;
+import com.ning.billing.catalog.MockCatalog;
+import com.ning.billing.catalog.MockCatalogService;
 import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.entitlement.api.user.EntitlementUserApi;
 import com.ning.billing.invoice.api.InvoiceItem;
@@ -44,7 +46,7 @@ public class TestBusinessInvoiceRecorder {
 
     @Test(groups = "fast")
     public void testShouldBeAbleToHandleNullFieldsInInvoiceItem() throws Exception {
-        final BusinessInvoiceRecorder recorder = new BusinessInvoiceRecorder(accountApi, entitlementApi, invoiceApi, sqlDao, clock);
+        final BusinessInvoiceRecorder recorder = new BusinessInvoiceRecorder(accountApi, entitlementApi, invoiceApi, sqlDao, new MockCatalogService(new MockCatalog()), clock);
 
         final InvoiceItem invoiceItem = Mockito.mock(InvoiceItem.class);
         Mockito.when(invoiceItem.getAmount()).thenReturn(BigDecimal.TEN);