Details
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceItemBinder.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceItemBinder.java
index 48e9fca..b13b996 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceItemBinder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceItemBinder.java
@@ -42,6 +42,7 @@ public @interface BusinessInvoiceItemBinder {
return new Binder<BusinessInvoiceItemBinder, BusinessInvoiceItem>() {
public void bind(final SQLStatement q, final BusinessInvoiceItemBinder bind, final BusinessInvoiceItem invoiceItem) {
q.bind("item_id", invoiceItem.getItemId().toString());
+ q.bind("linked_item_id", invoiceItem.getLinkedItemId().toString());
final DateTime dateTimeNow = new DateTime(DateTimeZone.UTC);
if (invoiceItem.getCreatedDate() != null) {
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceItemMapper.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceItemMapper.java
index 9dc26a7..4729f6f 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceItemMapper.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceItemMapper.java
@@ -35,25 +35,26 @@ public class BusinessInvoiceItemMapper extends MapperBase implements ResultSetMa
@Override
public BusinessInvoiceItem map(final int index, final ResultSet r, final StatementContext ctx) throws SQLException {
- final UUID itemId = 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 UUID invoiceId = UUID.fromString(r.getString(4));
- final String itemType = r.getString(5);
- final String externalKey = r.getString(6);
- final String productName = r.getString(7);
- final String productType = r.getString(8);
- final String productCategory = r.getString(9);
- final String slug = r.getString(10);
- final String phase = r.getString(11);
- final String billingPeriod = r.getString(12);
+ final UUID itemId = UUID.fromString(r.getString("item_id"));
+ final UUID linkedItemId = UUID.fromString(r.getString("linked_item_id"));
+ final DateTime createdDate = new DateTime(r.getLong("created_date"), DateTimeZone.UTC);
+ final DateTime updatedDate = new DateTime(r.getLong("updated_date"), DateTimeZone.UTC);
+ final UUID invoiceId = UUID.fromString(r.getString("invoice_id"));
+ final String itemType = r.getString("item_type");
+ final String externalKey = r.getString("external_key");
+ final String productName = r.getString("product_name");
+ final String productType = r.getString("product_type");
+ final String productCategory = r.getString("product_category");
+ final String slug = r.getString("slug");
+ final String phase = r.getString("phase");
+ final String billingPeriod = r.getString("billing_period");
final LocalDate startDate = getDate(r, "start_date");
final LocalDate endDate = getDate(r, "end_date");
- final BigDecimal amount = BigDecimal.valueOf(r.getDouble(15));
- final Currency currency = Currency.valueOf(r.getString(16));
+ final BigDecimal amount = BigDecimal.valueOf(r.getDouble("amount"));
+ final Currency currency = Currency.valueOf(r.getString("currency"));
return new BusinessInvoiceItem(amount, billingPeriod, createdDate, currency, endDate, externalKey, invoiceId,
- itemId, itemType, phase, productCategory, productName, productType, slug,
+ itemId, linkedItemId, itemType, phase, productCategory, productName, productType, slug,
startDate, updatedDate);
}
}
diff --git a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessInvoiceItem.java b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessInvoiceItem.java
index bdbd945..4664c45 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessInvoiceItem.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessInvoiceItem.java
@@ -49,12 +49,13 @@ public class BusinessInvoiceItem {
private final LocalDate endDate;
private final BigDecimal amount;
private final Currency currency;
+ private final UUID linkedItemId;
public BusinessInvoiceItem(final BigDecimal amount, @Nullable final String billingPeriod, final DateTime createdDate,
final Currency currency, final LocalDate endDate, final String externalKey,
- final UUID invoiceId, final UUID itemId, final String itemType, @Nullable final String phase,
- @Nullable final String productCategory, @Nullable final String productName, @Nullable final String productType,
- @Nullable final String slug, final LocalDate startDate, final DateTime updatedDate) {
+ final UUID invoiceId, final UUID itemId, @Nullable final UUID linkedItemId, final String itemType,
+ @Nullable final String phase, @Nullable final String productCategory, @Nullable final String productName,
+ @Nullable final String productType, @Nullable final String slug, final LocalDate startDate, final DateTime updatedDate) {
this.amount = amount;
this.billingPeriod = billingPeriod;
this.createdDate = createdDate;
@@ -63,6 +64,7 @@ public class BusinessInvoiceItem {
this.externalKey = externalKey;
this.invoiceId = invoiceId;
this.itemId = itemId;
+ this.linkedItemId = linkedItemId;
this.itemType = itemType;
this.phase = phase;
this.productCategory = productCategory;
@@ -75,7 +77,7 @@ public class BusinessInvoiceItem {
public BusinessInvoiceItem(@Nullable final String externalKey, final InvoiceItem invoiceItem, @Nullable final Plan plan, @Nullable final PlanPhase planPhase) {
this(invoiceItem.getAmount(), planPhase != null ? planPhase.getBillingPeriod().toString() : null, new DateTime(DateTimeZone.UTC), invoiceItem.getCurrency(),
- invoiceItem.getEndDate(), externalKey, invoiceItem.getInvoiceId(), invoiceItem.getId(), invoiceItem.getInvoiceItemType().toString(),
+ invoiceItem.getEndDate(), externalKey, invoiceItem.getInvoiceId(), invoiceItem.getId(), invoiceItem.getLinkedItemId(), invoiceItem.getInvoiceItemType().toString(),
planPhase != null ? planPhase.getPhaseType().toString() : null, plan != null ? plan.getProduct().getCategory().toString() : null,
plan != null ? plan.getProduct().getName() : null, plan != null ? plan.getProduct().getCatalogName() : null,
planPhase != null ? planPhase.getName() : null, invoiceItem.getStartDate(), new DateTime(DateTimeZone.UTC));
@@ -117,6 +119,10 @@ public class BusinessInvoiceItem {
return itemType;
}
+ public UUID getLinkedItemId() {
+ return linkedItemId;
+ }
+
public String getPhase() {
return phase;
}
@@ -165,6 +171,7 @@ public class BusinessInvoiceItem {
sb.append(", startDate=").append(startDate);
sb.append(", endDate=").append(endDate);
sb.append(", currency=").append(currency);
+ sb.append(", linkedItemId=").append(linkedItemId);
sb.append('}');
return sb.toString();
}
@@ -207,6 +214,9 @@ public class BusinessInvoiceItem {
if (itemType != null ? !itemType.equals(that.itemType) : that.itemType != null) {
return false;
}
+ if (linkedItemId != null ? !linkedItemId.equals(that.linkedItemId) : that.linkedItemId != null) {
+ return false;
+ }
if (phase != null ? !phase.equals(that.phase) : that.phase != null) {
return false;
}
@@ -250,6 +260,7 @@ public class BusinessInvoiceItem {
result = 31 * result + (endDate != null ? endDate.hashCode() : 0);
result = 31 * result + (amount != null ? amount.hashCode() : 0);
result = 31 * result + (currency != null ? currency.hashCode() : 0);
+ result = 31 * result + (linkedItemId != null ? linkedItemId.hashCode() : 0);
return result;
}
}
diff --git a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessInvoiceItemSqlDao.sql.stg b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessInvoiceItemSqlDao.sql.stg
index 2d55e1f..b987105 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessInvoiceItemSqlDao.sql.stg
+++ b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessInvoiceItemSqlDao.sql.stg
@@ -18,6 +18,7 @@ select
, end_date
, amount
, currency
+, linked_item_id
from bii
where item_id = :item_id
limit 1
@@ -42,6 +43,7 @@ select
, end_date
, amount
, currency
+, linked_item_id
from bii
where invoice_id = :invoice_id
order by created_date asc
@@ -66,6 +68,7 @@ select
, end_date
, amount
, currency
+, linked_item_id
from bii
where external_key = :external_key
order by created_date asc
@@ -90,6 +93,7 @@ insert into bii (
, end_date
, amount
, currency
+, linked_item_id
) values (
:item_id
, :created_date
@@ -107,6 +111,7 @@ insert into bii (
, :end_date
, :amount
, :currency
+, :linked_item_id
);
>>
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 fd6d6ae..fa6bfab 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
+++ b/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
@@ -102,6 +102,7 @@ create table bii (
, end_date date default null
, amount numeric(10, 4) default 0
, currency char(50) default null
+, linked_item_id char(36) default null
, account_record_id int(11) unsigned default null
, tenant_record_id int(11) unsigned default null
, primary key(record_id)
diff --git a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessInvoiceItemSqlDao.java b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessInvoiceItemSqlDao.java
index 4eb0014..9c1db5d 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessInvoiceItemSqlDao.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessInvoiceItemSqlDao.java
@@ -115,6 +115,7 @@ public class TestBusinessInvoiceItemSqlDao extends AnalyticsTestSuiteWithEmbedde
final Currency currency = Currency.AUD;
final LocalDate endDate = clock.getUTCToday();
final UUID itemId = UUID.randomUUID();
+ final UUID linkedItemId = UUID.randomUUID();
final String itemType = UUID.randomUUID().toString().substring(0, 20);
final String phase = UUID.randomUUID().toString().substring(0, 20);
final String productCategory = UUID.randomUUID().toString().substring(0, 20);
@@ -124,7 +125,7 @@ public class TestBusinessInvoiceItemSqlDao extends AnalyticsTestSuiteWithEmbedde
final LocalDate startDate = clock.getUTCToday();
final DateTime updatedDate = clock.getUTCNow();
- return new BusinessInvoiceItem(amount, billingPeriod, createdDate, currency, endDate, externalKey, invoiceId,
- itemId, itemType, phase, productCategory, productName, productType, slug, startDate, updatedDate);
+ return new BusinessInvoiceItem(amount, billingPeriod, createdDate, currency, endDate, externalKey, invoiceId, itemId,
+ linkedItemId, itemType, phase, productCategory, productName, productType, slug, startDate, updatedDate);
}
}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessInvoiceItem.java b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessInvoiceItem.java
index eb7100e..4e43290 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessInvoiceItem.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessInvoiceItem.java
@@ -43,6 +43,7 @@ public class TestBusinessInvoiceItem extends AnalyticsTestSuite {
final String externalKey = UUID.randomUUID().toString();
final UUID invoiceId = UUID.randomUUID();
final UUID itemId = UUID.randomUUID();
+ final UUID linkedItemId = UUID.randomUUID();
final String itemType = UUID.randomUUID().toString();
final String phase = UUID.randomUUID().toString();
final String productCategory = UUID.randomUUID().toString();
@@ -52,8 +53,8 @@ public class TestBusinessInvoiceItem extends AnalyticsTestSuite {
final LocalDate startDate = clock.getUTCToday();
final DateTime updatedDate = clock.getUTCNow();
final BusinessInvoiceItem invoiceItem = new BusinessInvoiceItem(amount, billingPeriod, createdDate, currency,
- endDate, externalKey, invoiceId, itemId, itemType,
- phase, productCategory, productName, productType,
+ endDate, externalKey, invoiceId, itemId, linkedItemId,
+ itemType, phase, productCategory, productName, productType,
slug, startDate, updatedDate);
Assert.assertSame(invoiceItem, invoiceItem);
Assert.assertEquals(invoiceItem, invoiceItem);
@@ -67,6 +68,7 @@ public class TestBusinessInvoiceItem extends AnalyticsTestSuite {
Assert.assertEquals(invoiceItem.getInvoiceId(), invoiceId);
Assert.assertEquals(invoiceItem.getItemId(), itemId);
Assert.assertEquals(invoiceItem.getItemType(), itemType);
+ Assert.assertEquals(invoiceItem.getLinkedItemId(), linkedItemId);
Assert.assertEquals(invoiceItem.getPhase(), phase);
Assert.assertEquals(invoiceItem.getProductCategory(), productCategory);
Assert.assertEquals(invoiceItem.getProductName(), productName);
@@ -76,7 +78,7 @@ public class TestBusinessInvoiceItem extends AnalyticsTestSuite {
Assert.assertEquals(invoiceItem.getUpdatedDate(), updatedDate);
final BusinessInvoiceItem otherInvoiceItem = new BusinessInvoiceItem(null, null, createdDate, null, null, null, null, itemId,
- null, null, null, null, null, null, null, null);
+ linkedItemId, null, null, null, null, null, null, null, null);
Assert.assertFalse(invoiceItem.equals(otherInvoiceItem));
}
}