killbill-memoizeit

analytics: add account_id and invoice_number in bin account_key

7/4/2012 2:57:40 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 599e049..b3c6996 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoiceRecorder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoiceRecorder.java
@@ -83,7 +83,7 @@ public class BusinessInvoiceRecorder {
             @Override
             public Void inTransaction(final BusinessInvoiceSqlDao transactional, final TransactionStatus status) throws Exception {
                 log.info("Started rebuilding transitions for account id {}", accountId);
-                deleteInvoicesAndInvoiceItemsForAccountInTransaction(transactional, accountKey);
+                deleteInvoicesAndInvoiceItemsForAccountInTransaction(transactional, accountId);
 
                 for (final Invoice invoice : invoiceApi.getInvoicesByAccount(accountId)) {
                     createInvoiceInTransaction(transactional, accountKey, invoice);
@@ -95,10 +95,10 @@ public class BusinessInvoiceRecorder {
         });
     }
 
-    private void deleteInvoicesAndInvoiceItemsForAccountInTransaction(final BusinessInvoiceSqlDao transactional, final String accountKey) {
+    private void deleteInvoicesAndInvoiceItemsForAccountInTransaction(final BusinessInvoiceSqlDao transactional, final UUID accountId) {
         // We don't use on cascade delete here as we don't want the database layer to be generic - hence we have
         // to delete the invoice items manually.
-        final List<BusinessInvoice> invoicesToDelete = transactional.getInvoicesForAccount(accountKey);
+        final List<BusinessInvoice> invoicesToDelete = transactional.getInvoicesForAccount(accountId.toString());
         final BusinessInvoiceItemSqlDao invoiceItemSqlDao = transactional.become(BusinessInvoiceItemSqlDao.class);
         for (final BusinessInvoice businessInvoice : invoicesToDelete) {
             final List<BusinessInvoiceItem> invoiceItemsForInvoice = invoiceItemSqlDao.getInvoiceItemsForInvoice(businessInvoice.getInvoiceId().toString());
@@ -107,7 +107,7 @@ public class BusinessInvoiceRecorder {
             }
         }
 
-        transactional.deleteInvoicesForAccount(accountKey);
+        transactional.deleteInvoicesForAccount(accountId.toString());
     }
 
     private void createInvoiceInTransaction(final BusinessInvoiceSqlDao transactional, final String accountKey, final Invoice invoice) {
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceBinder.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceBinder.java
index 412f323..fa8358b 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceBinder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceBinder.java
@@ -43,6 +43,12 @@ public @interface BusinessInvoiceBinder {
                 public void bind(final SQLStatement q, final BusinessInvoiceBinder bind, final BusinessInvoice invoice) {
                     q.bind("invoice_id", invoice.getInvoiceId().toString());
 
+                    if (invoice.getInvoiceNumber() != null) {
+                        q.bind("invoice_number", invoice.getInvoiceNumber());
+                    } else {
+                        q.bindNull("invoice_number", Types.BIGINT);
+                    }
+
                     final DateTime dateTimeNow = new DateTime(DateTimeZone.UTC);
                     if (invoice.getCreatedDate() != null) {
                         q.bind("created_date", invoice.getCreatedDate().getMillis());
@@ -56,6 +62,7 @@ public @interface BusinessInvoiceBinder {
                         q.bind("updated_date", dateTimeNow.getMillis());
                     }
 
+                    q.bind("account_id", invoice.getAccountId().toString());
                     q.bind("account_key", invoice.getAccountKey());
 
                     if (invoice.getInvoiceDate() != null) {
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceMapper.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceMapper.java
index 93d727a..e6df819 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceMapper.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceMapper.java
@@ -33,18 +33,20 @@ public class BusinessInvoiceMapper implements ResultSetMapper<BusinessInvoice> {
     @Override
     public BusinessInvoice map(final int index, final ResultSet r, final StatementContext ctx) throws SQLException {
         final UUID invoiceId = UUID.fromString(r.getString(1));
-        final DateTime createdDate = new DateTime(r.getLong(2), DateTimeZone.UTC);
-        final DateTime updatedDate = new DateTime(r.getLong(3), DateTimeZone.UTC);
-        final String accountKey = r.getString(4);
-        final DateTime invoiceDate = new DateTime(r.getLong(5), DateTimeZone.UTC);
-        final DateTime targetDate = new DateTime(r.getLong(6), DateTimeZone.UTC);
-        final Currency currency = Currency.valueOf(r.getString(7));
-        final BigDecimal balance = BigDecimal.valueOf(r.getDouble(8));
-        final BigDecimal amountPaid = BigDecimal.valueOf(r.getDouble(9));
-        final BigDecimal amountCharged = BigDecimal.valueOf(r.getDouble(10));
-        final BigDecimal amountCredited = BigDecimal.valueOf(r.getDouble(11));
+        final Integer invoiceNumber = r.getInt(2);
+        final DateTime createdDate = new DateTime(r.getLong(3), DateTimeZone.UTC);
+        final DateTime updatedDate = new DateTime(r.getLong(4), DateTimeZone.UTC);
+        final UUID accountId = UUID.fromString(r.getString(5));
+        final String accountKey = r.getString(6);
+        final DateTime invoiceDate = new DateTime(r.getLong(7), DateTimeZone.UTC);
+        final DateTime targetDate = new DateTime(r.getLong(8), DateTimeZone.UTC);
+        final Currency currency = Currency.valueOf(r.getString(9));
+        final BigDecimal balance = BigDecimal.valueOf(r.getDouble(10));
+        final BigDecimal amountPaid = BigDecimal.valueOf(r.getDouble(11));
+        final BigDecimal amountCharged = BigDecimal.valueOf(r.getDouble(12));
+        final BigDecimal amountCredited = BigDecimal.valueOf(r.getDouble(13));
 
-        return new BusinessInvoice(accountKey, amountCharged, amountCredited, amountPaid, balance, createdDate, currency,
-                                   invoiceDate, invoiceId, targetDate, updatedDate);
+        return new BusinessInvoice(accountId, accountKey, amountCharged, amountCredited, amountPaid, balance, createdDate, currency,
+                                   invoiceDate, invoiceId, invoiceNumber, targetDate, updatedDate);
     }
 }
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceSqlDao.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceSqlDao.java
index 7348fe3..73fbb9b 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceSqlDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceSqlDao.java
@@ -35,19 +35,19 @@ public interface BusinessInvoiceSqlDao extends Transactional<BusinessInvoiceSqlD
     BusinessInvoice getInvoice(@Bind("invoice_id") final String invoiceId);
 
     @SqlQuery
-    List<BusinessInvoice> getInvoicesForAccount(@Bind("account_key") final String accountKey);
+    List<BusinessInvoice> getInvoicesForAccount(@Bind("account_id") final String accountId);
 
-    @SqlUpdate
-    int createInvoice(@BusinessInvoiceBinder final BusinessInvoice invoice);
+    @SqlQuery
+    List<BusinessInvoice> getInvoicesForAccountByKey(@Bind("account_key") final String accountKey);
 
     @SqlUpdate
-    int updateInvoice(@BusinessInvoiceBinder final BusinessInvoice invoice);
+    int createInvoice(@BusinessInvoiceBinder final BusinessInvoice invoice);
 
     @SqlUpdate
     int deleteInvoice(@Bind("invoice_id") final String invoiceId);
 
     @SqlUpdate
-    void deleteInvoicesForAccount(@Bind("account_key") final String accountKey);
+    void deleteInvoicesForAccount(@Bind("account_id") final String accountId);
 
     @SqlUpdate
     void test();
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/DefaultAnalyticsDao.java b/analytics/src/main/java/com/ning/billing/analytics/dao/DefaultAnalyticsDao.java
index daac60d..edbf529 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/DefaultAnalyticsDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/DefaultAnalyticsDao.java
@@ -57,7 +57,7 @@ public class DefaultAnalyticsDao implements AnalyticsDao {
 
     @Override
     public List<BusinessInvoice> getInvoicesByKey(final String accountKey) {
-        return invoiceSqlDao.getInvoicesForAccount(accountKey);
+        return invoiceSqlDao.getInvoicesForAccountByKey(accountKey);
     }
 
     @Override
diff --git a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessInvoice.java b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessInvoice.java
index beab7d6..cb3138a 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessInvoice.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessInvoice.java
@@ -28,22 +28,24 @@ import com.ning.billing.invoice.api.Invoice;
 
 public class BusinessInvoice {
     private final UUID invoiceId;
+    private final Integer invoiceNumber;
     private final DateTime createdDate;
-
-    private DateTime updatedDate;
-    private String accountKey;
-    private DateTime invoiceDate;
-    private DateTime targetDate;
-    private Currency currency;
-    private BigDecimal balance;
-    private BigDecimal amountPaid;
-    private BigDecimal amountCharged;
-    private BigDecimal amountCredited;
-
-    public BusinessInvoice(final String accountKey, final BigDecimal amountCharged, final BigDecimal amountCredited,
+    private final DateTime updatedDate;
+    private final UUID accountId;
+    private final String accountKey;
+    private final DateTime invoiceDate;
+    private final DateTime targetDate;
+    private final Currency currency;
+    private final BigDecimal balance;
+    private final BigDecimal amountPaid;
+    private final BigDecimal amountCharged;
+    private final BigDecimal amountCredited;
+
+    public BusinessInvoice(final UUID accountId, final String accountKey, final BigDecimal amountCharged, final BigDecimal amountCredited,
                            final BigDecimal amountPaid, final BigDecimal balance, final DateTime createdDate,
-                           final Currency currency, final DateTime invoiceDate, final UUID invoiceId,
+                           final Currency currency, final DateTime invoiceDate, final UUID invoiceId, final Integer invoiceNumber,
                            final DateTime targetDate, final DateTime updatedDate) {
+        this.accountId = accountId;
         this.accountKey = accountKey;
         this.amountCharged = amountCharged;
         this.amountCredited = amountCredited;
@@ -53,105 +55,80 @@ public class BusinessInvoice {
         this.currency = currency;
         this.invoiceDate = invoiceDate;
         this.invoiceId = invoiceId;
+        this.invoiceNumber = invoiceNumber;
         this.targetDate = targetDate;
         this.updatedDate = updatedDate;
     }
 
     public BusinessInvoice(final String accountKey, final Invoice invoice) {
-        // STEPH this is probably not what we want (CBA versus credit)
-        this(accountKey, invoice.getChargedAmount(), invoice.getCBAAmount(), invoice.getPaidAmount(), invoice.getBalance(),
-             new DateTime(DateTimeZone.UTC), invoice.getCurrency(), invoice.getInvoiceDate(), invoice.getId(), invoice.getTargetDate(),
+        // TODO STEPH this is probably not what we want (CBA versus credit)
+        this(invoice.getAccountId(), accountKey, invoice.getChargedAmount(), invoice.getCBAAmount(), invoice.getPaidAmount(), invoice.getBalance(),
+             new DateTime(DateTimeZone.UTC), invoice.getCurrency(), invoice.getInvoiceDate(), invoice.getId(), invoice.getInvoiceNumber(), invoice.getTargetDate(),
              new DateTime(DateTimeZone.UTC));
     }
 
-    public DateTime getCreatedDate() {
-        return createdDate;
-    }
-
-    public UUID getInvoiceId() {
-        return invoiceId;
+    public UUID getAccountId() {
+        return accountId;
     }
 
     public String getAccountKey() {
         return accountKey;
     }
 
-    public void setAccountKey(final String accountKey) {
-        this.accountKey = accountKey;
-    }
-
     public BigDecimal getAmountCharged() {
         return amountCharged;
     }
 
-    public void setAmountCharged(final BigDecimal amountCharged) {
-        this.amountCharged = amountCharged;
-    }
-
     public BigDecimal getAmountCredited() {
         return amountCredited;
     }
 
-    public void setAmountCredited(final BigDecimal amountCredited) {
-        this.amountCredited = amountCredited;
-    }
-
     public BigDecimal getAmountPaid() {
         return amountPaid;
     }
 
-    public void setAmountPaid(final BigDecimal amountPaid) {
-        this.amountPaid = amountPaid;
-    }
-
     public BigDecimal getBalance() {
         return balance;
     }
 
-    public void setBalance(final BigDecimal balance) {
-        this.balance = balance;
+    public DateTime getCreatedDate() {
+        return createdDate;
     }
 
     public Currency getCurrency() {
         return currency;
     }
 
-    public void setCurrency(final Currency currency) {
-        this.currency = currency;
-    }
-
     public DateTime getInvoiceDate() {
         return invoiceDate;
     }
 
-    public void setInvoiceDate(final DateTime invoiceDate) {
-        this.invoiceDate = invoiceDate;
+    public UUID getInvoiceId() {
+        return invoiceId;
     }
 
-    public DateTime getTargetDate() {
-        return targetDate;
+    public Integer getInvoiceNumber() {
+        return invoiceNumber;
     }
 
-    public void setTargetDate(final DateTime targetDate) {
-        this.targetDate = targetDate;
+    public DateTime getTargetDate() {
+        return targetDate;
     }
 
     public DateTime getUpdatedDate() {
         return updatedDate;
     }
 
-    public void setUpdatedDate(final DateTime updatedDate) {
-        this.updatedDate = updatedDate;
-    }
-
     @Override
     public String toString() {
         final StringBuilder sb = new StringBuilder();
         sb.append("BusinessInvoice");
-        sb.append("{accountKey='").append(accountKey).append('\'');
+        sb.append("{accountId=").append(accountId);
         sb.append(", invoiceId=").append(invoiceId);
+        sb.append(", invoiceNumber=").append(invoiceNumber);
         sb.append(", createdDate=").append(createdDate);
         sb.append(", updatedDate=").append(updatedDate);
+        sb.append(", accountKey='").append(accountKey).append('\'');
         sb.append(", invoiceDate=").append(invoiceDate);
         sb.append(", targetDate=").append(targetDate);
         sb.append(", currency=").append(currency);
@@ -174,6 +151,9 @@ public class BusinessInvoice {
 
         final BusinessInvoice that = (BusinessInvoice) o;
 
+        if (accountId != null ? !accountId.equals(that.accountId) : that.accountId != null) {
+            return false;
+        }
         if (accountKey != null ? !accountKey.equals(that.accountKey) : that.accountKey != null) {
             return false;
         }
@@ -189,22 +169,25 @@ public class BusinessInvoice {
         if (balance != null ? Rounder.round(balance) != Rounder.round(that.balance) : that.balance != null) {
             return false;
         }
-        if (createdDate != null ? !createdDate.equals(that.createdDate) : that.createdDate != null) {
+        if (createdDate != null ? createdDate.compareTo(that.createdDate) != 0 : that.createdDate != null) {
             return false;
         }
         if (currency != that.currency) {
             return false;
         }
-        if (invoiceDate != null ? !invoiceDate.equals(that.invoiceDate) : that.invoiceDate != null) {
+        if (invoiceDate != null ? invoiceDate.compareTo(that.invoiceDate) != 0 : that.invoiceDate != null) {
             return false;
         }
         if (invoiceId != null ? !invoiceId.equals(that.invoiceId) : that.invoiceId != null) {
             return false;
         }
-        if (targetDate != null ? !targetDate.equals(that.targetDate) : that.targetDate != null) {
+        if (invoiceNumber != null ? !invoiceNumber.equals(that.invoiceNumber) : that.invoiceNumber != null) {
+            return false;
+        }
+        if (targetDate != null ? targetDate.compareTo(that.targetDate) != 0 : that.targetDate != null) {
             return false;
         }
-        if (updatedDate != null ? !updatedDate.equals(that.updatedDate) : that.updatedDate != null) {
+        if (updatedDate != null ? updatedDate.compareTo(that.updatedDate) != 0 : that.updatedDate != null) {
             return false;
         }
 
@@ -214,8 +197,10 @@ public class BusinessInvoice {
     @Override
     public int hashCode() {
         int result = invoiceId != null ? invoiceId.hashCode() : 0;
+        result = 31 * result + (invoiceNumber != null ? invoiceNumber.hashCode() : 0);
         result = 31 * result + (createdDate != null ? createdDate.hashCode() : 0);
         result = 31 * result + (updatedDate != null ? updatedDate.hashCode() : 0);
+        result = 31 * result + (accountId != null ? accountId.hashCode() : 0);
         result = 31 * result + (accountKey != null ? accountKey.hashCode() : 0);
         result = 31 * result + (invoiceDate != null ? invoiceDate.hashCode() : 0);
         result = 31 * result + (targetDate != null ? targetDate.hashCode() : 0);
diff --git a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessInvoiceSqlDao.sql.stg b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessInvoiceSqlDao.sql.stg
index ed8d685..fed7d20 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessInvoiceSqlDao.sql.stg
+++ b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessInvoiceSqlDao.sql.stg
@@ -3,8 +3,10 @@ group BusinessInvoice;
 getInvoice(invoice_id) ::= <<
 select
   invoice_id
+, invoice_number
 , created_date
 , updated_date
+, account_id
 , account_key
 , invoice_date
 , target_date
@@ -19,11 +21,34 @@ limit 1
 ;
 >>
 
-getInvoicesForAccount(account_key) ::= <<
+getInvoicesForAccount(account_id) ::= <<
 select
   invoice_id
+, invoice_number
 , created_date
 , updated_date
+, account_id
+, account_key
+, invoice_date
+, target_date
+, currency
+, balance
+, amount_paid
+, amount_charged
+, amount_credited
+from bin
+where account_id = :account_id
+order by created_date asc
+;
+>>
+
+getInvoicesForAccountByKey(account_key) ::= <<
+select
+  invoice_id
+, invoice_number
+, created_date
+, updated_date
+, account_id
 , account_key
 , invoice_date
 , target_date
@@ -41,8 +66,10 @@ order by created_date asc
 createInvoice() ::= <<
 insert into bin (
   invoice_id
+, invoice_number
 , created_date
 , updated_date
+, account_id
 , account_key
 , invoice_date
 , target_date
@@ -53,8 +80,10 @@ insert into bin (
 , amount_credited
 ) values (
   :invoice_id
+, :invoice_number
 , :created_date
 , :updated_date
+, :account_id
 , :account_key
 , :invoice_date
 , :target_date
@@ -69,6 +98,7 @@ insert into bin (
 updateInvoice() ::= <<
 update bin set
   updated_date = :updated_date
+, invoice_number = :invoice_number
 , account_key = :account_key
 , invoice_date = :invoice_date
 , target_date = :target_date
@@ -85,8 +115,8 @@ deleteInvoice(invoice_id) ::= <<
 delete from bin where invoice_id = :invoice_id;
 >>
 
-deleteInvoicesForAccount(account_key) ::= <<
-delete from bin where account_key = :account_key;
+deleteInvoicesForAccount(account_id) ::= <<
+delete from bin where account_id = :account_id;
 >>
 
 test() ::= <<
diff --git a/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql b/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
index dfa45c4..09d0a0c 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
+++ b/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
@@ -61,8 +61,10 @@ drop table if exists bin;
 create table bin (
   record_id int(11) unsigned not null auto_increment
 , invoice_id char(36) not null
+, invoice_number bigint default null
 , created_date bigint not null
 , updated_date bigint not null
+, account_id char(36) not null
 , account_key varchar(50) not null
 , invoice_date bigint not null
 , target_date bigint not null
diff --git a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessInvoiceSqlDao.java b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessInvoiceSqlDao.java
index 8373f81..b66e4ad 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessInvoiceSqlDao.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessInvoiceSqlDao.java
@@ -42,8 +42,9 @@ public class TestBusinessInvoiceSqlDao extends TestWithEmbeddedDB {
     @Test(groups = "slow")
     public void testCRUD() throws Exception {
         final UUID invoiceId = UUID.randomUUID();
+        final UUID accountId = UUID.randomUUID();
         final String accountKey = UUID.randomUUID().toString();
-        final BusinessInvoice invoice = createInvoice(invoiceId, accountKey);
+        final BusinessInvoice invoice = createInvoice(accountId, invoiceId, accountKey);
 
         // Verify initial state
         Assert.assertNull(invoiceSqlDao.getInvoice(invoice.getInvoiceId().toString()));
@@ -54,43 +55,38 @@ public class TestBusinessInvoiceSqlDao extends TestWithEmbeddedDB {
 
         // Retrieve it
         Assert.assertEquals(invoiceSqlDao.getInvoice(invoice.getInvoiceId().toString()), invoice);
-        Assert.assertEquals(invoiceSqlDao.getInvoicesForAccount(invoice.getAccountKey()).size(), 1);
-        Assert.assertEquals(invoiceSqlDao.getInvoicesForAccount(invoice.getAccountKey()).get(0), invoice);
-
-        // Update and retrieve it
-        invoice.setInvoiceDate(new DateTime(DateTimeZone.UTC));
-        Assert.assertEquals(invoiceSqlDao.updateInvoice(invoice), 1);
-        Assert.assertEquals(invoiceSqlDao.getInvoice(invoice.getInvoiceId().toString()), invoice);
-        Assert.assertEquals(invoiceSqlDao.getInvoicesForAccount(invoice.getAccountKey()).size(), 1);
-        Assert.assertEquals(invoiceSqlDao.getInvoicesForAccount(invoice.getAccountKey()).get(0), invoice);
+        Assert.assertEquals(invoiceSqlDao.getInvoicesForAccount(invoice.getAccountId().toString()).size(), 1);
+        Assert.assertEquals(invoiceSqlDao.getInvoicesForAccount(invoice.getAccountId().toString()).get(0), invoice);
 
         // Delete it
         Assert.assertEquals(invoiceSqlDao.deleteInvoice(invoice.getInvoiceId().toString()), 1);
         Assert.assertNull(invoiceSqlDao.getInvoice(invoice.getInvoiceId().toString()));
-        Assert.assertEquals(invoiceSqlDao.getInvoicesForAccount(invoice.getAccountKey()).size(), 0);
+        Assert.assertEquals(invoiceSqlDao.getInvoicesForAccount(invoice.getAccountId().toString()).size(), 0);
     }
 
     @Test(groups = "slow")
     public void testSegmentation() throws Exception {
         final UUID invoiceId1 = UUID.randomUUID();
+        final UUID accountId1 = UUID.randomUUID();
         final String accountKey1 = UUID.randomUUID().toString();
-        final BusinessInvoice invoice1 = createInvoice(invoiceId1, accountKey1);
+        final BusinessInvoice invoice1 = createInvoice(invoiceId1, accountId1, accountKey1);
         final UUID invoiceId2 = UUID.randomUUID();
+        final UUID accountId2 = UUID.randomUUID();
         final String accountKey2 = UUID.randomUUID().toString();
-        final BusinessInvoice invoice2 = createInvoice(invoiceId2, accountKey2);
+        final BusinessInvoice invoice2 = createInvoice(invoiceId2, accountId2, accountKey2);
 
         // Create both invoices
         Assert.assertEquals(invoiceSqlDao.createInvoice(invoice1), 1);
         Assert.assertEquals(invoiceSqlDao.createInvoice(invoice2), 1);
 
-        Assert.assertEquals(invoiceSqlDao.getInvoicesForAccount(accountKey1).size(), 1);
-        Assert.assertEquals(invoiceSqlDao.getInvoicesForAccount(accountKey2).size(), 1);
+        Assert.assertEquals(invoiceSqlDao.getInvoicesForAccount(accountId1.toString()).size(), 1);
+        Assert.assertEquals(invoiceSqlDao.getInvoicesForAccount(accountId2.toString()).size(), 1);
 
         // Remove the first invoice
         Assert.assertEquals(invoiceSqlDao.deleteInvoice(invoice1.getInvoiceId().toString()), 1);
 
-        Assert.assertEquals(invoiceSqlDao.getInvoicesForAccount(accountKey1).size(), 0);
-        Assert.assertEquals(invoiceSqlDao.getInvoicesForAccount(accountKey2).size(), 1);
+        Assert.assertEquals(invoiceSqlDao.getInvoicesForAccount(accountId1.toString()).size(), 0);
+        Assert.assertEquals(invoiceSqlDao.getInvoicesForAccount(accountId2.toString()).size(), 1);
     }
 
     @Test(groups = "slow")
@@ -103,7 +99,7 @@ public class TestBusinessInvoiceSqlDao extends TestWithEmbeddedDB {
         }
     }
 
-    private BusinessInvoice createInvoice(final UUID invoiceId, final String accountKey) {
+    private BusinessInvoice createInvoice(final UUID invoiceId, final UUID accountId, final String accountKey) {
         final BigDecimal amountCharged = BigDecimal.ZERO;
         final BigDecimal amountCredited = BigDecimal.ONE;
         final BigDecimal amountPaid = BigDecimal.TEN;
@@ -114,7 +110,7 @@ public class TestBusinessInvoiceSqlDao extends TestWithEmbeddedDB {
         final DateTime targetDate = new DateTime(DateTimeZone.UTC);
         final DateTime updatedDate = new DateTime(DateTimeZone.UTC);
 
-        return new BusinessInvoice(accountKey, amountCharged, amountCredited, amountPaid, balance,
-                                   createdDate, currency, invoiceDate, invoiceId, targetDate, updatedDate);
+        return new BusinessInvoice(accountId, accountKey, amountCharged, amountCredited, amountPaid, balance,
+                                   createdDate, currency, invoiceDate, invoiceId, 12, targetDate, updatedDate);
     }
 }
diff --git a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessInvoice.java b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessInvoice.java
index 869284d..9ec77f2 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessInvoice.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessInvoice.java
@@ -30,6 +30,7 @@ import com.ning.billing.catalog.api.Currency;
 public class TestBusinessInvoice extends AnalyticsTestSuite {
     @Test(groups = "fast")
     public void testEquals() throws Exception {
+        final UUID accountId = UUID.randomUUID();
         final String accountKey = UUID.randomUUID().toString();
         final BigDecimal amountCharged = BigDecimal.ZERO;
         final BigDecimal amountCredited = BigDecimal.ONE;
@@ -39,13 +40,15 @@ public class TestBusinessInvoice extends AnalyticsTestSuite {
         final Currency currency = Currency.MXN;
         final DateTime invoiceDate = new DateTime(DateTimeZone.UTC);
         final UUID invoiceId = UUID.randomUUID();
+        final Integer invoiceNumber = 15;
         final DateTime targetDate = new DateTime(DateTimeZone.UTC);
         final DateTime updatedDate = new DateTime(DateTimeZone.UTC);
-        final BusinessInvoice invoice = new BusinessInvoice(accountKey, amountCharged, amountCredited, amountPaid, balance,
-                                                            createdDate, currency, invoiceDate, invoiceId, targetDate, updatedDate);
+        final BusinessInvoice invoice = new BusinessInvoice(accountId, accountKey, amountCharged, amountCredited, amountPaid, balance,
+                                                            createdDate, currency, invoiceDate, invoiceId, invoiceNumber, targetDate, updatedDate);
         Assert.assertSame(invoice, invoice);
         Assert.assertEquals(invoice, invoice);
         Assert.assertTrue(invoice.equals(invoice));
+        Assert.assertEquals(invoice.getAccountId(), accountId);
         Assert.assertEquals(invoice.getAccountKey(), accountKey);
         Assert.assertEquals(invoice.getAmountCharged(), amountCharged);
         Assert.assertEquals(invoice.getAmountCredited(), amountCredited);
@@ -55,23 +58,12 @@ public class TestBusinessInvoice extends AnalyticsTestSuite {
         Assert.assertEquals(invoice.getCurrency(), currency);
         Assert.assertEquals(invoice.getInvoiceDate(), invoiceDate);
         Assert.assertEquals(invoice.getInvoiceId(), invoiceId);
+        Assert.assertEquals(invoice.getInvoiceNumber(), invoiceNumber);
         Assert.assertEquals(invoice.getTargetDate(), targetDate);
         Assert.assertEquals(invoice.getUpdatedDate(), updatedDate);
 
-        final BusinessInvoice otherInvoice = new BusinessInvoice(null, null, null, null, null, createdDate, null,
-                                                                 null, invoiceId, null, null);
+        final BusinessInvoice otherInvoice = new BusinessInvoice(null, null, null, null, null, null, createdDate, null,
+                                                                 null, invoiceId, 0, null, null);
         Assert.assertFalse(invoice.equals(otherInvoice));
-
-        // Test setters
-        otherInvoice.setAccountKey(accountKey);
-        otherInvoice.setAmountCharged(amountCharged);
-        otherInvoice.setAmountCredited(amountCredited);
-        otherInvoice.setAmountPaid(amountPaid);
-        otherInvoice.setBalance(balance);
-        otherInvoice.setCurrency(currency);
-        otherInvoice.setInvoiceDate(invoiceDate);
-        otherInvoice.setTargetDate(targetDate);
-        otherInvoice.setUpdatedDate(updatedDate);
-        Assert.assertTrue(invoice.equals(otherInvoice));
     }
 }