killbill-memoizeit

analytics: add nb_active_bundles in bac This column contains

4/17/2013 5:17:40 PM

Details

diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/api/BusinessAccount.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/api/BusinessAccount.java
index 0e5b83f..0e31720 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/api/BusinessAccount.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/api/BusinessAccount.java
@@ -48,6 +48,7 @@ public class BusinessAccount extends BusinessEntityBase {
     private final LocalDate lastInvoiceDate;
     private final DateTime lastPaymentDate;
     private final String lastPaymentStatus;
+    private final Integer nbActiveBundles;
 
     public BusinessAccount(final BusinessAccountModelDao businessAccountModelDao) {
         super(businessAccountModelDao.getCreatedDate(),
@@ -80,6 +81,7 @@ public class BusinessAccount extends BusinessEntityBase {
         this.lastInvoiceDate = businessAccountModelDao.getLastInvoiceDate();
         this.lastPaymentDate = businessAccountModelDao.getLastPaymentDate();
         this.lastPaymentStatus = businessAccountModelDao.getLastPaymentStatus();
+        this.nbActiveBundles = businessAccountModelDao.getNbActiveBundles();
     }
 
     public String getEmail() {
@@ -170,6 +172,10 @@ public class BusinessAccount extends BusinessEntityBase {
         return lastPaymentStatus;
     }
 
+    public Integer getNbActiveBundles() {
+        return nbActiveBundles;
+    }
+
     @Override
     public String toString() {
         final StringBuilder sb = new StringBuilder();
@@ -196,6 +202,7 @@ public class BusinessAccount extends BusinessEntityBase {
         sb.append(", lastInvoiceDate=").append(lastInvoiceDate);
         sb.append(", lastPaymentDate=").append(lastPaymentDate);
         sb.append(", lastPaymentStatus='").append(lastPaymentStatus).append('\'');
+        sb.append(", nbActiveBundles='").append(nbActiveBundles).append('\'');
         sb.append('}');
         return sb.toString();
     }
@@ -262,6 +269,9 @@ public class BusinessAccount extends BusinessEntityBase {
         if (locale != null ? !locale.equals(that.locale) : that.locale != null) {
             return false;
         }
+        if (nbActiveBundles != null ? !nbActiveBundles.equals(that.nbActiveBundles) : that.nbActiveBundles != null) {
+            return false;
+        }
         if (paymentMethodId != null ? !paymentMethodId.equals(that.paymentMethodId) : that.paymentMethodId != null) {
             return false;
         }
@@ -309,6 +319,7 @@ public class BusinessAccount extends BusinessEntityBase {
         result = 31 * result + (lastInvoiceDate != null ? lastInvoiceDate.hashCode() : 0);
         result = 31 * result + (lastPaymentDate != null ? lastPaymentDate.hashCode() : 0);
         result = 31 * result + (lastPaymentStatus != null ? lastPaymentStatus.hashCode() : 0);
+        result = 31 * result + (nbActiveBundles != null ? nbActiveBundles.hashCode() : 0);
         return result;
     }
 }
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessAccountDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessAccountDao.java
index 11d8cb1..2f31a3b 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessAccountDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessAccountDao.java
@@ -18,12 +18,16 @@ package com.ning.billing.osgi.bundles.analytics.dao;
 
 import java.math.BigDecimal;
 import java.util.Collection;
+import java.util.List;
 import java.util.UUID;
 
 import org.skife.jdbi.v2.Transaction;
 import org.skife.jdbi.v2.TransactionStatus;
 
 import com.ning.billing.account.api.Account;
+import com.ning.billing.catalog.api.ProductCategory;
+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.osgi.bundles.analytics.AnalyticsRefreshException;
 import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessAccountModelDao;
@@ -91,6 +95,18 @@ public class BusinessAccountDao extends BusinessAnalyticsDaoBase {
             }
         }
 
+        final List<SubscriptionBundle> bundles = getSubscriptionBundlesForAccount(account.getId(), context);
+        int nbActiveBundles = 0;
+        for (final SubscriptionBundle bundle : bundles) {
+            final Collection<Subscription> subscriptionsForBundle = getSubscriptionsForBundle(bundle.getId(), context);
+            for (final Subscription subscription : subscriptionsForBundle) {
+                if (ProductCategory.BASE.equals(subscription.getCategory()) &&
+                    !(subscription.getEndDate() != null && !subscription.getEndDate().isAfterNow())) {
+                    nbActiveBundles++;
+                }
+            }
+        }
+
         final Long accountRecordId = getAccountRecordId(account.getId(), context);
         final Long tenantRecordId = getTenantRecordId(context);
         final ReportGroup reportGroup = getReportGroup(account.getId(), context);
@@ -100,6 +116,7 @@ public class BusinessAccountDao extends BusinessAnalyticsDaoBase {
                                            accountBalance,
                                            lastInvoice,
                                            lastPayment,
+                                           nbActiveBundles,
                                            creationAuditLog,
                                            tenantRecordId,
                                            reportGroup);
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessAccountModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessAccountModelDao.java
index 4417ec8..234114f 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessAccountModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessAccountModelDao.java
@@ -55,6 +55,7 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
     private LocalDate lastInvoiceDate;
     private DateTime lastPaymentDate;
     private String lastPaymentStatus;
+    private Integer nbActiveBundles;
 
     public BusinessAccountModelDao() { /* When reading from the database */ }
 
@@ -80,6 +81,7 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
                                    final LocalDate lastInvoiceDate,
                                    final DateTime lastPaymentDate,
                                    final String lastPaymentStatus,
+                                   final Integer nbActiveBundles,
                                    final DateTime createdDate,
                                    final String createdBy,
                                    final String createdReasonCode,
@@ -122,6 +124,7 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
         this.lastInvoiceDate = lastInvoiceDate;
         this.lastPaymentDate = lastPaymentDate;
         this.lastPaymentStatus = lastPaymentStatus;
+        this.nbActiveBundles = nbActiveBundles;
     }
 
     public BusinessAccountModelDao(final Account account,
@@ -129,6 +132,7 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
                                    final BigDecimal balance,
                                    @Nullable final Invoice lastInvoice,
                                    @Nullable final Payment lastPayment,
+                                   final Integer nbActiveBundles,
                                    final AuditLog creationAuditLog,
                                    final Long tenantRecordId,
                                    @Nullable final ReportGroup reportGroup) {
@@ -154,6 +158,7 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
              lastInvoice == null ? null : lastInvoice.getInvoiceDate(),
              lastPayment == null ? null : lastPayment.getEffectiveDate(),
              lastPayment == null ? null : lastPayment.getPaymentStatus().toString(),
+             nbActiveBundles,
              account.getCreatedDate(),
              creationAuditLog.getUserName(),
              creationAuditLog.getReasonCode(),
@@ -259,6 +264,10 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
         return lastPaymentStatus;
     }
 
+    public Integer getNbActiveBundles() {
+        return nbActiveBundles;
+    }
+
     @Override
     public String toString() {
         final StringBuilder sb = new StringBuilder();
@@ -285,6 +294,7 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
         sb.append(", lastInvoiceDate=").append(lastInvoiceDate);
         sb.append(", lastPaymentDate=").append(lastPaymentDate);
         sb.append(", lastPaymentStatus='").append(lastPaymentStatus).append('\'');
+        sb.append(", nbActiveBundles='").append(nbActiveBundles).append('\'');
         sb.append('}');
         return sb.toString();
     }
@@ -348,6 +358,9 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
         if (migrated != null ? !migrated.equals(that.migrated) : that.migrated != null) {
             return false;
         }
+        if (nbActiveBundles != null ? !nbActiveBundles.equals(that.nbActiveBundles) : that.nbActiveBundles != null) {
+            return false;
+        }
         if (notifiedForInvoices != null ? !notifiedForInvoices.equals(that.notifiedForInvoices) : that.notifiedForInvoices != null) {
             return false;
         }
@@ -398,6 +411,7 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
         result = 31 * result + (lastInvoiceDate != null ? lastInvoiceDate.hashCode() : 0);
         result = 31 * result + (lastPaymentDate != null ? lastPaymentDate.hashCode() : 0);
         result = 31 * result + (lastPaymentStatus != null ? lastPaymentStatus.hashCode() : 0);
+        result = 31 * result + (nbActiveBundles != null ? nbActiveBundles.hashCode() : 0);
         return result;
     }
 }
diff --git a/osgi-bundles/bundles/analytics/src/main/resources/com/ning/billing/osgi/bundles/analytics/dao/BusinessAnalyticsSqlDao.sql.stg b/osgi-bundles/bundles/analytics/src/main/resources/com/ning/billing/osgi/bundles/analytics/dao/BusinessAnalyticsSqlDao.sql.stg
index e5089cb..4184f2e 100644
--- a/osgi-bundles/bundles/analytics/src/main/resources/com/ning/billing/osgi/bundles/analytics/dao/BusinessAnalyticsSqlDao.sql.stg
+++ b/osgi-bundles/bundles/analytics/src/main/resources/com/ning/billing/osgi/bundles/analytics/dao/BusinessAnalyticsSqlDao.sql.stg
@@ -179,6 +179,7 @@ insert into bac (
 , last_invoice_date
 , last_payment_date
 , last_payment_status
+, nb_active_bundles
 , created_date
 , created_by
 , created_reason_code
@@ -212,6 +213,7 @@ insert into bac (
 , :lastInvoiceDate
 , :lastPaymentDate
 , :lastPaymentStatus
+, :nbActiveBundles
 , :createdDate
 , :createdBy
 , :createdReasonCode
diff --git a/osgi-bundles/bundles/analytics/src/main/resources/com/ning/billing/osgi/bundles/analytics/ddl.sql b/osgi-bundles/bundles/analytics/src/main/resources/com/ning/billing/osgi/bundles/analytics/ddl.sql
index 1dca26c..2e30a2f 100644
--- a/osgi-bundles/bundles/analytics/src/main/resources/com/ning/billing/osgi/bundles/analytics/ddl.sql
+++ b/osgi-bundles/bundles/analytics/src/main/resources/com/ning/billing/osgi/bundles/analytics/ddl.sql
@@ -120,6 +120,7 @@ create table bac (
 , last_invoice_date date default null
 , last_payment_date datetime default null
 , last_payment_status varchar(255) default null
+, nb_active_bundles int(11) default 0
 , created_date datetime not null
 , created_by varchar(50) not null
 , created_reason_code varchar(255) default null
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessAccount.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessAccount.java
index cbaf426..be3222a 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessAccount.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessAccount.java
@@ -33,6 +33,7 @@ public class TestBusinessAccount extends AnalyticsTestSuiteNoDB {
                                                                                     BigDecimal.ONE,
                                                                                     invoice,
                                                                                     payment,
+                                                                                    3,
                                                                                     auditLog,
                                                                                     tenantRecordId,
                                                                                     reportGroup);
@@ -62,5 +63,6 @@ public class TestBusinessAccount extends AnalyticsTestSuiteNoDB {
         Assert.assertEquals(businessAccount.getLastInvoiceDate(), accountModelDao.getLastInvoiceDate());
         Assert.assertEquals(businessAccount.getLastPaymentDate(), accountModelDao.getLastPaymentDate());
         Assert.assertEquals(businessAccount.getLastPaymentStatus(), accountModelDao.getLastPaymentStatus());
+        Assert.assertEquals(businessAccount.getNbActiveBundles(), accountModelDao.getNbActiveBundles());
     }
 }
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessSnapshot.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessSnapshot.java
index b741810..1634b9d 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessSnapshot.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessSnapshot.java
@@ -51,6 +51,7 @@ public class TestBusinessSnapshot extends AnalyticsTestSuiteNoDB {
                                                                                     BigDecimal.ONE,
                                                                                     invoice,
                                                                                     payment,
+                                                                                    3,
                                                                                     auditLog,
                                                                                     tenantRecordId,
                                                                                     reportGroup);
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/user/TestDefaultAnalyticsUserApi.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/user/TestDefaultAnalyticsUserApi.java
index 5edac27..7a6f40c 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/user/TestDefaultAnalyticsUserApi.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/user/TestDefaultAnalyticsUserApi.java
@@ -35,6 +35,7 @@ public class TestDefaultAnalyticsUserApi extends AnalyticsTestSuiteWithEmbeddedD
                                                                                     BigDecimal.ONE,
                                                                                     invoice,
                                                                                     payment,
+                                                                                    3,
                                                                                     auditLog,
                                                                                     tenantRecordId,
                                                                                     reportGroup);
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessAccountModelDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessAccountModelDao.java
index f451c6f..dccfc17 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessAccountModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessAccountModelDao.java
@@ -32,6 +32,7 @@ public class TestBusinessAccountModelDao extends AnalyticsTestSuiteNoDB {
                                                                                     BigDecimal.ONE,
                                                                                     null,
                                                                                     null,
+                                                                                    3,
                                                                                     auditLog,
                                                                                     tenantRecordId,
                                                                                     reportGroup);
@@ -49,6 +50,7 @@ public class TestBusinessAccountModelDao extends AnalyticsTestSuiteNoDB {
                                                                                     BigDecimal.ONE,
                                                                                     invoice,
                                                                                     payment,
+                                                                                    3,
                                                                                     auditLog,
                                                                                     tenantRecordId,
                                                                                     reportGroup);
@@ -80,5 +82,6 @@ public class TestBusinessAccountModelDao extends AnalyticsTestSuiteNoDB {
         Assert.assertEquals(accountModelDao.getPhone(), account.getPhone());
         Assert.assertEquals(accountModelDao.getMigrated(), account.isMigrated());
         Assert.assertEquals(accountModelDao.getNotifiedForInvoices(), account.isNotifiedForInvoices());
+        Assert.assertEquals(accountModelDao.getNbActiveBundles(), (Integer) 3);
     }
 }
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/TestAnalyticsDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/TestAnalyticsDao.java
index 2338002..63efa2e 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/TestAnalyticsDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/TestAnalyticsDao.java
@@ -37,6 +37,7 @@ public class TestAnalyticsDao extends AnalyticsTestSuiteWithEmbeddedDB {
                                                                                     BigDecimal.ONE,
                                                                                     invoice,
                                                                                     payment,
+                                                                                    3,
                                                                                     auditLog,
                                                                                     tenantRecordId,
                                                                                     reportGroup);
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/TestBusinessAnalyticsSqlDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/TestBusinessAnalyticsSqlDao.java
index 2996eb4..55b7496 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/TestBusinessAnalyticsSqlDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/TestBusinessAnalyticsSqlDao.java
@@ -54,6 +54,7 @@ public class TestBusinessAnalyticsSqlDao extends AnalyticsTestSuiteWithEmbeddedD
                                                                                     new BigDecimal("1.2345"),
                                                                                     invoice,
                                                                                     payment,
+                                                                                    3,
                                                                                     auditLog,
                                                                                     tenantRecordId,
                                                                                     reportGroup);