killbill-memoizeit
Changes
osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessInvoiceAndInvoicePaymentDao.java 44(+2 -42)
osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/factory/AdjustedCBAInvoiceItem.java 132(+0 -132)
osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/factory/BusinessInvoiceFactory.java 245(+8 -237)
osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/factory/BusinessInvoiceItemFactory.java 28(+0 -28)
osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemBaseModelDao.java 27(+18 -9)
osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceModelDao.java 33(+12 -21)
osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentBaseModelDao.java 27(+18 -9)
osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/utils/BusinessInvoiceUtils.java 103(+1 -102)
osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessInvoice.java 9(+0 -9)
osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessSnapshot.java 3(+0 -3)
osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/factory/TestBusinessInvoiceFactory.java 279(+6 -273)
osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceItemModelDao.java 12(+6 -6)
osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceModelDao.java 22(+6 -16)
osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoicePaymentModelDao.java 12(+6 -6)
Details
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessInvoiceAndInvoicePaymentDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessInvoiceAndInvoicePaymentDao.java
index b8a74ac..a08bcd8 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessInvoiceAndInvoicePaymentDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessInvoiceAndInvoicePaymentDao.java
@@ -16,7 +16,6 @@
package com.ning.billing.osgi.bundles.analytics.dao;
-import java.math.BigDecimal;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
@@ -33,7 +32,6 @@ import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessAccountModelDao
import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessInvoiceItemBaseModelDao;
import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessInvoiceModelDao;
import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessInvoicePaymentBaseModelDao;
-import com.ning.billing.osgi.bundles.analytics.utils.BusinessInvoiceUtils;
import com.ning.billing.util.callcontext.CallContext;
import com.ning.killbill.osgi.libs.killbill.OSGIKillbillAPI;
import com.ning.killbill.osgi.libs.killbill.OSGIKillbillDataSource;
@@ -98,11 +96,10 @@ public class BusinessInvoiceAndInvoicePaymentDao extends BusinessAnalyticsDaoBas
final Multimap<UUID, BusinessInvoiceItemBaseModelDao> invoiceItems,
final Multimap<UUID, BusinessInvoicePaymentBaseModelDao> invoicePayments,
final CallContext context) throws AnalyticsRefreshException {
- // Recompute all invoices and invoice items. Invoices will have their denormalized payment fields missing,
- // and items won't have neither invoice nor payment denormalized fields populated
+ // Recompute all invoices and invoice items
final Map<BusinessInvoiceModelDao, Collection<BusinessInvoiceItemBaseModelDao>> businessInvoices = binFactory.createBusinessInvoicesAndInvoiceItems(accountId, context);
- // Recompute all invoice payments (without denormalized payment fields populated)
+ // Recompute all invoice payments
final Collection<BusinessInvoicePaymentBaseModelDao> businessInvoicePayments = bipFactory.createBusinessInvoicePayments(accountId, context);
// Transform the results
@@ -113,43 +110,6 @@ public class BusinessInvoiceAndInvoicePaymentDao extends BusinessAnalyticsDaoBas
for (final BusinessInvoicePaymentBaseModelDao businessInvoicePayment : businessInvoicePayments) {
invoicePayments.get(businessInvoicePayment.getInvoiceId()).add(businessInvoicePayment);
}
-
- // Populate missing fields
- populatedMissingDenormalizedFields(invoices, invoiceItems, invoicePayments);
- }
-
- private void populatedMissingDenormalizedFields(final Map<UUID, BusinessInvoiceModelDao> businessInvoices,
- final Multimap<UUID, BusinessInvoiceItemBaseModelDao> businessInvoiceItems,
- final Multimap<UUID, BusinessInvoicePaymentBaseModelDao> businessInvoicePayments) {
- // First, populated missing payment fields in invoice
- for (final BusinessInvoiceModelDao businessInvoice : businessInvoices.values()) {
- final BigDecimal balance = BusinessInvoiceUtils.computeInvoiceBalance(businessInvoiceItems.get(businessInvoice.getInvoiceId()),
- businessInvoicePayments.get(businessInvoice.getInvoiceId()));
- businessInvoice.setBalance(balance);
-
- final BigDecimal amountPaid = BusinessInvoiceUtils.computeInvoiceAmountPaid(businessInvoicePayments.get(businessInvoice.getInvoiceId()));
- businessInvoice.setAmountPaid(amountPaid);
-
- final BigDecimal amountRefunded = BusinessInvoiceUtils.computeInvoiceAmountRefunded(businessInvoicePayments.get(businessInvoice.getInvoiceId()));
- businessInvoice.setAmountRefunded(amountRefunded);
- }
-
- // At this point, all of the invoice objects are fully populated. Use them to update the invoice items and payment objects
- for (final UUID invoiceId : businessInvoices.keySet()) {
- final Collection<BusinessInvoiceItemBaseModelDao> invoiceItemsForInvoice = businessInvoiceItems.get(invoiceId);
- if (invoiceItemsForInvoice != null) {
- for (final BusinessInvoiceItemBaseModelDao businessInvoiceItem : invoiceItemsForInvoice) {
- businessInvoiceItem.populateDenormalizedInvoiceFields(businessInvoices.get(invoiceId));
- }
- }
-
- final Collection<BusinessInvoicePaymentBaseModelDao> invoicePaymentsForInvoice = businessInvoicePayments.get(invoiceId);
- if (invoicePaymentsForInvoice != null) {
- for (final BusinessInvoicePaymentBaseModelDao businessInvoicePayment : invoicePaymentsForInvoice) {
- businessInvoicePayment.populateDenormalizedInvoiceFields(businessInvoices.get(invoiceId));
- }
- }
- }
}
/**
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/factory/BusinessInvoiceFactory.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/factory/BusinessInvoiceFactory.java
index 7ad8cd4..48ec4ce 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/factory/BusinessInvoiceFactory.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/factory/BusinessInvoiceFactory.java
@@ -16,34 +16,25 @@
package com.ning.billing.osgi.bundles.analytics.dao.factory;
-import java.math.BigDecimal;
import java.util.Collection;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.LinkedHashMap;
-import java.util.LinkedList;
import java.util.Map;
-import java.util.Set;
import java.util.UUID;
import javax.annotation.Nullable;
-import org.osgi.service.log.LogService;
-
import com.ning.billing.account.api.Account;
-import com.ning.billing.catalog.api.Currency;
import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhase;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceItem;
-import com.ning.billing.invoice.api.InvoiceItemType;
import com.ning.billing.osgi.bundles.analytics.AnalyticsRefreshException;
import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessInvoiceItemBaseModelDao;
import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessInvoiceItemBaseModelDao.BusinessInvoiceItemType;
import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessInvoiceModelDao;
import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessModelDaoBase.ReportGroup;
-import com.ning.billing.osgi.bundles.analytics.utils.BusinessInvoiceUtils;
import com.ning.billing.util.audit.AuditLog;
import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.callcontext.TenantContext;
@@ -62,7 +53,6 @@ import static com.ning.billing.osgi.bundles.analytics.utils.BusinessInvoiceUtils
import static com.ning.billing.osgi.bundles.analytics.utils.BusinessInvoiceUtils.isCharge;
import static com.ning.billing.osgi.bundles.analytics.utils.BusinessInvoiceUtils.isInvoiceAdjustmentItem;
import static com.ning.billing.osgi.bundles.analytics.utils.BusinessInvoiceUtils.isInvoiceItemAdjustmentItem;
-import static com.ning.billing.osgi.bundles.analytics.utils.BusinessInvoiceUtils.isRepareeItemForRepairedItem;
import static com.ning.billing.osgi.bundles.analytics.utils.BusinessInvoiceUtils.isRevenueRecognizable;
public class BusinessInvoiceFactory extends BusinessFactoryBase {
@@ -74,9 +64,6 @@ public class BusinessInvoiceFactory extends BusinessFactoryBase {
/**
* Create current business invoices and invoice items.
- * <p/>
- * Note that these POJOs are incomplete (denormalized payment fields have not yet been populated, and denormalized
- * invoice fields in business invoice items have not been populated either).
*
* @param accountId current accountId refreshed
* @param context call context
@@ -103,17 +90,11 @@ public class BusinessInvoiceFactory extends BusinessFactoryBase {
allInvoiceItems.get(invoice.getId()).addAll(invoice.getInvoiceItems());
}
- // *** MAGIC HAPPENS HERE ***
- // Sanitize (cherry-pick, merge) the items
- final Collection<InvoiceItem> sanitizedInvoiceItems = sanitizeInvoiceItems(allInvoiceItems);
- // *** MAGIC HAPPENS HERE ***
-
- // Create the business invoice items. These are incomplete: the denormalized invoice fields can't be computed yet,
- // since we need all business invoice items to do it.
+ // Create the business invoice items
final Multimap<UUID, BusinessInvoiceItemBaseModelDao> businessInvoiceItemsForInvoiceId = ArrayListMultimap.<UUID, BusinessInvoiceItemBaseModelDao>create();
- for (final InvoiceItem invoiceItem : sanitizedInvoiceItems) {
+ for (final InvoiceItem invoiceItem : allInvoiceItems.values()) {
final Invoice invoice = invoiceIdToInvoiceMappings.get(invoiceItem.getInvoiceId());
- final Collection<InvoiceItem> otherInvoiceItems = Collections2.filter(sanitizedInvoiceItems,
+ final Collection<InvoiceItem> otherInvoiceItems = Collections2.filter(allInvoiceItems.values(),
new Predicate<InvoiceItem>() {
@Override
public boolean apply(final InvoiceItem input) {
@@ -133,9 +114,7 @@ public class BusinessInvoiceFactory extends BusinessFactoryBase {
}
}
- // Now, create the business invoices. We needed the final business invoice items to compute the various invoice amounts. At this point,
- // we could go back and populate the denormalized invoice amounts in the various items, but since we need to do a second pass later
- // to populate the denormalized payment fields, we'll hold off for now.
+ // Now, create the business invoices
final Map<BusinessInvoiceModelDao, Collection<BusinessInvoiceItemBaseModelDao>> businessRecords = new HashMap<BusinessInvoiceModelDao, Collection<BusinessInvoiceItemBaseModelDao>>();
for (final Invoice invoice : invoices) {
final Collection<BusinessInvoiceItemBaseModelDao> businessInvoiceItems = businessInvoiceItemsForInvoiceId.get(invoice.getId());
@@ -145,7 +124,6 @@ public class BusinessInvoiceFactory extends BusinessFactoryBase {
final BusinessInvoiceModelDao businessInvoice = createBusinessInvoice(account,
invoice,
- businessInvoiceItems,
accountRecordId,
tenantRecordId,
reportGroup,
@@ -158,7 +136,6 @@ public class BusinessInvoiceFactory extends BusinessFactoryBase {
private BusinessInvoiceModelDao createBusinessInvoice(final Account account,
final Invoice invoice,
- final Collection<BusinessInvoiceItemBaseModelDao> businessInvoiceItems,
final Long accountRecordId,
final Long tenantRecordId,
@Nullable final ReportGroup reportGroup,
@@ -166,16 +143,9 @@ public class BusinessInvoiceFactory extends BusinessFactoryBase {
final Long invoiceRecordId = getInvoiceRecordId(invoice.getId(), context);
final AuditLog creationAuditLog = getInvoiceCreationAuditLog(invoice.getId(), context);
- final BigDecimal amountCharged = BusinessInvoiceUtils.computeInvoiceAmountCharged(businessInvoiceItems);
- final BigDecimal originalAmountCharged = BusinessInvoiceUtils.computeInvoiceOriginalAmountCharged(businessInvoiceItems);
- final BigDecimal amountCredited = BusinessInvoiceUtils.computeInvoiceAmountCredited(businessInvoiceItems);
-
return new BusinessInvoiceModelDao(account,
accountRecordId,
invoice,
- amountCharged,
- originalAmountCharged,
- amountCredited,
invoiceRecordId,
creationAuditLog,
tenantRecordId,
@@ -237,8 +207,7 @@ public class BusinessInvoiceFactory extends BusinessFactoryBase {
creationAuditLog,
accountRecordId,
tenantRecordId,
- reportGroup,
- context);
+ reportGroup);
}
@VisibleForTesting
@@ -253,8 +222,7 @@ public class BusinessInvoiceFactory extends BusinessFactoryBase {
final AuditLog creationAuditLog,
final Long accountRecordId,
final Long tenantRecordId,
- final ReportGroup reportGroup,
- final TenantContext context) throws AnalyticsRefreshException {
+ final ReportGroup reportGroup) throws AnalyticsRefreshException {
final BusinessInvoiceItemType businessInvoiceItemType;
if (isCharge(invoiceItem)) {
businessInvoiceItemType = BusinessInvoiceItemType.CHARGE;
@@ -271,12 +239,8 @@ public class BusinessInvoiceFactory extends BusinessFactoryBase {
final Boolean revenueRecognizable = isRevenueRecognizable(invoiceItem, otherInvoiceItems);
- final Long secondInvoiceItemRecordId;
- if (invoiceItem instanceof AdjustmentInvoiceItemForRepair) {
- secondInvoiceItemRecordId = getInvoiceItemRecordId(((AdjustmentInvoiceItemForRepair) invoiceItem).getSecondId(), context);
- } else {
- secondInvoiceItemRecordId = null;
- }
+ // Unused for now
+ final Long secondInvoiceItemRecordId = null;
return BusinessInvoiceItemBaseModelDao.create(account,
accountRecordId,
@@ -293,197 +257,4 @@ public class BusinessInvoiceFactory extends BusinessFactoryBase {
tenantRecordId,
reportGroup);
}
-
- /**
- * Filter and transform the original invoice items for Analytics purposes. We mainly
- * merge REPAIR_ADJ items with reparation items (reparees) to create item adjustments
- * and merge CBA items.
- *
- * @param allInvoiceItems all items for the current account
- * @return invoice items interesting for Analytics purposes
- */
- @VisibleForTesting
- Collection<InvoiceItem> sanitizeInvoiceItems(final Multimap<UUID, InvoiceItem> allInvoiceItems) {
- // First, find all reparee items, to be able to merge REPAIR_ADJ and reparee items into ITEM_ADJ items
- final Map<InvoiceItem, InvoiceItem> repareeInvoiceItemToRepairItemMappings = findRepareeInvoiceItems(allInvoiceItems.values());
-
- // Second, since we are going to rebalance some items (the reparee items are going to be on a previous invoice),
- // we need to rebalance CBA_ADJ items. In order to simplify the process, we merge all items per invoice and revenueRecognizable
- // status (this information should be enough for financial and analytics reporting purposes).
- final Collection<AdjustedCBAInvoiceItem> mergedCBAItems = buildMergedCBAItems(allInvoiceItems, repareeInvoiceItemToRepairItemMappings);
-
- // Filter the invoice items for analytics
- final Collection<InvoiceItem> invoiceItemsForAnalytics = new LinkedList<InvoiceItem>();
- for (final InvoiceItem invoiceItem : allInvoiceItems.values()) {
- if (InvoiceItemType.CBA_ADJ.equals(invoiceItem.getInvoiceItemType())) {
- // We don't care, we'll merge them on all invoices
- } else if (InvoiceItemType.REPAIR_ADJ.equals(invoiceItem.getInvoiceItemType())) {
- // We don't care, we'll create a special item for it below
- } else if (repareeInvoiceItemToRepairItemMappings.keySet().contains(invoiceItem)) {
- // We do care - this is a reparation item. Create an item adjustment for it
- final InvoiceItem repairInvoiceItem = repareeInvoiceItemToRepairItemMappings.get(invoiceItem);
- final InvoiceItem repareeInvoiceItem = invoiceItem;
- invoiceItemsForAnalytics.add(new AdjustmentInvoiceItemForRepair(repairInvoiceItem, repareeInvoiceItem));
- } else {
- invoiceItemsForAnalytics.add(invoiceItem);
- }
- }
- invoiceItemsForAnalytics.addAll(mergedCBAItems);
-
- return invoiceItemsForAnalytics;
- }
-
- /**
- * Find all reparee items
- *
- * @param allInvoiceItems all invoice items, across all invoices
- * @return a mapping reparee invoice item id to REPAIR_ADJ item
- */
- @VisibleForTesting
- Map<InvoiceItem, InvoiceItem> findRepareeInvoiceItems(final Collection<InvoiceItem> allInvoiceItems) {
- // Build a convenience mapping between items -> repair_adj items (inverse of linkedItemId)
- final Map<UUID, InvoiceItem> repairedInvoiceItemIdToRepairInvoiceItemMappings = new HashMap<UUID, InvoiceItem>();
- for (final InvoiceItem invoiceItem : allInvoiceItems) {
- if (InvoiceItemType.REPAIR_ADJ.equals(invoiceItem.getInvoiceItemType())) {
- repairedInvoiceItemIdToRepairInvoiceItemMappings.put(invoiceItem.getLinkedItemId(), invoiceItem);
- }
- }
-
- // Now find the "reparee" items, i.e. the ones which correspond to the repaired items
- final Map<InvoiceItem, InvoiceItem> repareeInvoiceItemToRepairItemMappings = new LinkedHashMap<InvoiceItem, InvoiceItem>();
- for (final InvoiceItem repairedInvoiceItem : allInvoiceItems) {
- // Skip non-repaired items
- if (!repairedInvoiceItemIdToRepairInvoiceItemMappings.keySet().contains(repairedInvoiceItem.getId())) {
- continue;
- }
-
- InvoiceItem repareeItem = null;
- for (final InvoiceItem invoiceItem : allInvoiceItems) {
- // Try to find the matching "reparee" item
- if (isRepareeItemForRepairedItem(repairedInvoiceItem, invoiceItem)) {
- if (repareeItem == null) {
- repareeItem = invoiceItem;
- } else {
- logService.log(LogService.LOG_ERROR, "Found multiple reparee items matching the repair item id " + repairedInvoiceItem.getId() + " - this should never happen!");
- }
- }
- }
-
- if (repareeItem != null) {
- repareeInvoiceItemToRepairItemMappings.put(repareeItem, repairedInvoiceItemIdToRepairInvoiceItemMappings.get(repairedInvoiceItem.getId()));
- } else {
- logService.log(LogService.LOG_ERROR, "Could not find the reparee item for the repair item id " + repairedInvoiceItem.getId() + " - this should never happen!");
- }
- }
-
- return repareeInvoiceItemToRepairItemMappings;
- }
-
- @VisibleForTesting
- Collection<AdjustedCBAInvoiceItem> buildMergedCBAItems(final Multimap<UUID, InvoiceItem> allInvoiceItems,
- final Map<InvoiceItem, InvoiceItem> repareeInvoiceItemToRepairItemMappings) {
- // Build a black list of invoices for which we should not adjust the CBA when rebalancing the reparee item.
- final Set<UUID> repairInvoiceBlackList = new HashSet<UUID>();
- for (final InvoiceItem repairInvoiceItem : repareeInvoiceItemToRepairItemMappings.values()) {
- boolean shouldBlackList = true;
- // Only adjust CBA items on invoices having CBA already. Otherwise, don't do anything (e.g. for unpaid repaired invoices).
- for (final InvoiceItem invoiceItem : allInvoiceItems.get(repairInvoiceItem.getInvoiceId())) {
- if (invoiceItem.getInvoiceItemType().equals(InvoiceItemType.CBA_ADJ) &&
- invoiceItem.getAmount().compareTo(repairInvoiceItem.getAmount().negate()) == 0) {
- shouldBlackList = false;
- }
- }
- if (shouldBlackList) {
- // We can't blacklist the reparee invoice because it might have been repaired...
- repairInvoiceBlackList.add(repairInvoiceItem.getInvoiceId());
- }
- }
-
- final Map<UUID, BigDecimal> cbaAdjustmentPerInvoice = new HashMap<UUID, BigDecimal>();
-
- // Adjust the CBAs in case of repair.
- // On the original invoice (with the repair item), we need to substract the amount of the reparee to the CBA amount.
- // On the new invoice (with the reparee item), we need to add the amount of the reparee to the CBA amount.
- for (final InvoiceItem repareeInvoiceItem : repareeInvoiceItemToRepairItemMappings.keySet()) {
- // The repair item was on the original invoice
- final InvoiceItem repairInvoiceItem = repareeInvoiceItemToRepairItemMappings.get(repareeInvoiceItem);
- if (repairInvoiceBlackList.contains(repairInvoiceItem.getInvoiceId())) {
- continue;
- }
-
- if (cbaAdjustmentPerInvoice.get(repairInvoiceItem.getInvoiceId()) == null) {
- cbaAdjustmentPerInvoice.put(repairInvoiceItem.getInvoiceId(), BigDecimal.ZERO);
- }
- final BigDecimal currentCBAForOriginalInvoice = cbaAdjustmentPerInvoice.get(repairInvoiceItem.getInvoiceId());
- final BigDecimal adjustedCBAForOriginalInvoice = currentCBAForOriginalInvoice.add(repareeInvoiceItem.getAmount().negate());
- cbaAdjustmentPerInvoice.put(repairInvoiceItem.getInvoiceId(), adjustedCBAForOriginalInvoice);
-
- // The reparee item was on a new invoice
- if (cbaAdjustmentPerInvoice.get(repareeInvoiceItem.getInvoiceId()) == null) {
- cbaAdjustmentPerInvoice.put(repareeInvoiceItem.getInvoiceId(), BigDecimal.ZERO);
- }
- final BigDecimal currentCBAForNewInvoice = cbaAdjustmentPerInvoice.get(repareeInvoiceItem.getInvoiceId());
- final BigDecimal adjustedCBAForNewInvoice = currentCBAForNewInvoice.add(repareeInvoiceItem.getAmount());
- cbaAdjustmentPerInvoice.put(repareeInvoiceItem.getInvoiceId(), adjustedCBAForNewInvoice);
- }
-
- // Now, we just combine the other CBA items
- final Collection<AdjustedCBAInvoiceItem> mergedCBAs = new LinkedList<AdjustedCBAInvoiceItem>();
- for (final UUID invoiceId : allInvoiceItems.keySet()) {
- if (allInvoiceItems.get(invoiceId) == null) {
- continue;
- }
-
- final Collection<InvoiceItem> cbaItemsForInvoice = Collections2.filter(allInvoiceItems.get(invoiceId), new Predicate<InvoiceItem>() {
- @Override
- public boolean apply(final InvoiceItem invoiceItem) {
- return InvoiceItemType.CBA_ADJ.equals(invoiceItem.getInvoiceItemType());
- }
- });
- if (cbaItemsForInvoice.size() == 0) {
- continue;
- }
-
- BigDecimal revenueRecognizableCBA = cbaAdjustmentPerInvoice.get(invoiceId);
- if (revenueRecognizableCBA == null) {
- revenueRecognizableCBA = BigDecimal.ZERO;
- }
- BigDecimal nonRevenueRecognizableCBA = BigDecimal.ZERO;
-
- UUID accountId = null;
- Currency currency = null;
- for (final InvoiceItem invoiceItem : cbaItemsForInvoice) {
- final Collection<InvoiceItem> otherInvoiceItems = Collections2.filter(allInvoiceItems.values(),
- new Predicate<InvoiceItem>() {
- @Override
- public boolean apply(final InvoiceItem input) {
- return !input.getId().equals(invoiceItem.getId());
- }
- });
- final Boolean isRevenueRecognizable = isRevenueRecognizable(invoiceItem, otherInvoiceItems);
- if (isRevenueRecognizable) {
- revenueRecognizableCBA = revenueRecognizableCBA.add(invoiceItem.getAmount());
- } else {
- nonRevenueRecognizableCBA = nonRevenueRecognizableCBA.add(invoiceItem.getAmount());
- }
-
- // These should be the same across all items
- if (accountId == null) {
- accountId = invoiceItem.getAccountId();
- }
- if (currency == null) {
- currency = invoiceItem.getCurrency();
- }
- }
-
- if (revenueRecognizableCBA.compareTo(BigDecimal.ZERO) != 0) {
- mergedCBAs.add(new AdjustedCBAInvoiceItem(invoiceId, accountId, revenueRecognizableCBA, currency));
- }
- if (nonRevenueRecognizableCBA.compareTo(BigDecimal.ZERO) != 0) {
- mergedCBAs.add(new AdjustedCBAInvoiceItem(invoiceId, accountId, nonRevenueRecognizableCBA, currency));
- }
- }
-
- return mergedCBAs;
- }
}
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemBaseModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemBaseModelDao.java
index 75e5643..e8d90ec 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemBaseModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemBaseModelDao.java
@@ -167,6 +167,12 @@ public abstract class BusinessInvoiceItemBaseModelDao extends BusinessModelDaoBa
final LocalDate invoiceDate,
final LocalDate invoiceTargetDate,
final String invoiceCurrency,
+ final BigDecimal invoiceBalance,
+ final BigDecimal invoiceAmountPaid,
+ final BigDecimal invoiceAmountCharged,
+ final BigDecimal invoiceOriginalAmountCharged,
+ final BigDecimal invoiceAmountCredited,
+ final BigDecimal invoiceAmountRefunded,
final String itemType,
final Boolean revenueRecognizable,
final String bundleExternalKey,
@@ -210,6 +216,12 @@ public abstract class BusinessInvoiceItemBaseModelDao extends BusinessModelDaoBa
this.invoiceDate = invoiceDate;
this.invoiceTargetDate = invoiceTargetDate;
this.invoiceCurrency = invoiceCurrency;
+ this.invoiceBalance = invoiceBalance;
+ this.invoiceAmountPaid = invoiceAmountPaid;
+ this.invoiceAmountCharged = invoiceAmountCharged;
+ this.invoiceOriginalAmountCharged = invoiceOriginalAmountCharged;
+ this.invoiceAmountCredited = invoiceAmountCredited;
+ this.invoiceAmountRefunded = invoiceAmountRefunded;
this.itemType = itemType;
this.revenueRecognizable = revenueRecognizable;
this.bundleExternalKey = bundleExternalKey;
@@ -248,6 +260,12 @@ public abstract class BusinessInvoiceItemBaseModelDao extends BusinessModelDaoBa
invoice.getInvoiceDate(),
invoice.getTargetDate(),
invoice.getCurrency() == null ? null : invoice.getCurrency().toString(),
+ invoice.getBalance(),
+ invoice.getPaidAmount(),
+ invoice.getChargedAmount(),
+ invoice.getOriginalChargedAmount(),
+ invoice.getCreditedAmount(),
+ invoice.getRefundedAmount(),
invoiceItem.getInvoiceItemType().toString(),
revenueRecognizable,
bundle == null ? null : bundle.getExternalKey(),
@@ -275,15 +293,6 @@ public abstract class BusinessInvoiceItemBaseModelDao extends BusinessModelDaoBa
reportGroup);
}
- public void populateDenormalizedInvoiceFields(final BusinessInvoiceModelDao businessInvoice) {
- invoiceBalance = businessInvoice.getBalance();
- invoiceAmountPaid = businessInvoice.getAmountPaid();
- invoiceAmountCharged = businessInvoice.getAmountCharged();
- invoiceOriginalAmountCharged = businessInvoice.getOriginalAmountCharged();
- invoiceAmountCredited = businessInvoice.getAmountCredited();
- invoiceAmountRefunded = businessInvoice.getAmountRefunded();
- }
-
public Long getInvoiceItemRecordId() {
return invoiceItemRecordId;
}
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceModelDao.java
index 6aa8a9f..5d069e5 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceModelDao.java
@@ -53,9 +53,12 @@ public class BusinessInvoiceModelDao extends BusinessModelDaoBase {
final LocalDate invoiceDate,
final LocalDate targetDate,
final String currency,
+ final BigDecimal balance,
+ final BigDecimal amountPaid,
final BigDecimal amountCharged,
final BigDecimal originalAmountCharged,
final BigDecimal amountCredited,
+ final BigDecimal amountRefunded,
final DateTime createdDate,
final String createdBy,
final String createdReasonCode,
@@ -82,17 +85,17 @@ public class BusinessInvoiceModelDao extends BusinessModelDaoBase {
this.invoiceDate = invoiceDate;
this.targetDate = targetDate;
this.currency = currency;
+ this.balance = balance;
+ this.amountPaid = amountPaid;
this.amountCharged = amountCharged;
this.originalAmountCharged = originalAmountCharged;
this.amountCredited = amountCredited;
+ this.amountRefunded = amountRefunded;
}
public BusinessInvoiceModelDao(final Account account,
final Long accountRecordId,
final Invoice invoice,
- final BigDecimal amountCharged,
- final BigDecimal originalAmountCharged,
- final BigDecimal amountCredited,
final Long invoiceRecordId,
@Nullable final AuditLog creationAuditLog,
final Long tenantRecordId,
@@ -103,9 +106,12 @@ public class BusinessInvoiceModelDao extends BusinessModelDaoBase {
invoice.getInvoiceDate(),
invoice.getTargetDate(),
invoice.getCurrency() == null ? null : invoice.getCurrency().toString(),
- amountCharged,
- originalAmountCharged,
- amountCredited,
+ invoice.getBalance(),
+ invoice.getPaidAmount(),
+ invoice.getChargedAmount(),
+ invoice.getOriginalChargedAmount(),
+ invoice.getCreditedAmount(),
+ invoice.getRefundedAmount(),
invoice.getCreatedDate(),
creationAuditLog != null ? creationAuditLog.getUserName() : null,
creationAuditLog != null ? creationAuditLog.getReasonCode() : null,
@@ -118,21 +124,6 @@ public class BusinessInvoiceModelDao extends BusinessModelDaoBase {
reportGroup);
}
- // Denormalized payment field
- public void setBalance(final BigDecimal balance) {
- this.balance = balance;
- }
-
- // Denormalized payment field
- public void setAmountPaid(final BigDecimal amountPaid) {
- this.amountPaid = amountPaid;
- }
-
- // Denormalized payment field
- public void setAmountRefunded(final BigDecimal amountRefunded) {
- this.amountRefunded = amountRefunded;
- }
-
@Override
public String getTableName() {
return INVOICES_TABLE_NAME;
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentBaseModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentBaseModelDao.java
index b542755..5b1021d 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentBaseModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentBaseModelDao.java
@@ -157,6 +157,12 @@ public abstract class BusinessInvoicePaymentBaseModelDao extends BusinessModelDa
final UUID linkedInvoicePaymentId,
final BigDecimal amount,
final String currency,
+ final BigDecimal invoiceBalance,
+ final BigDecimal invoiceAmountPaid,
+ final BigDecimal invoiceAmountCharged,
+ final BigDecimal invoiceOriginalAmountCharged,
+ final BigDecimal invoiceAmountCredited,
+ final BigDecimal invoiceAmountRefunded,
final String pluginName,
final DateTime pluginCreatedDate,
final DateTime pluginEffectiveDate,
@@ -207,6 +213,12 @@ public abstract class BusinessInvoicePaymentBaseModelDao extends BusinessModelDa
this.invoiceDate = invoiceDate;
this.invoiceTargetDate = invoiceTargetDate;
this.invoiceCurrency = invoiceCurrency;
+ this.invoiceBalance = invoiceBalance;
+ this.invoiceAmountPaid = invoiceAmountPaid;
+ this.invoiceAmountCharged = invoiceAmountCharged;
+ this.invoiceOriginalAmountCharged = invoiceOriginalAmountCharged;
+ this.invoiceAmountCredited = invoiceAmountCredited;
+ this.invoiceAmountRefunded = invoiceAmountRefunded;
this.invoicePaymentType = invoicePaymentType;
this.paymentId = paymentId;
this.refundId = refundId;
@@ -264,6 +276,12 @@ public abstract class BusinessInvoicePaymentBaseModelDao extends BusinessModelDa
invoicePayment.getLinkedInvoicePaymentId(),
invoicePayment.getAmount(),
invoicePayment.getCurrency() == null ? null : invoicePayment.getCurrency().toString(),
+ invoice.getBalance(),
+ invoice.getPaidAmount(),
+ invoice.getChargedAmount(),
+ invoice.getOriginalChargedAmount(),
+ invoice.getCreditedAmount(),
+ invoice.getRefundedAmount(),
paymentMethod != null ? paymentMethod.getPluginName() : DEFAULT_PLUGIN_NAME,
refund != null ? (refund.getPluginDetail() != null ? refund.getPluginDetail().getCreatedDate() : null) : (payment.getPaymentInfoPlugin() != null ? payment.getPaymentInfoPlugin().getCreatedDate() : null),
refund != null ? (refund.getPluginDetail() != null ? refund.getPluginDetail().getEffectiveDate() : null) : (payment.getPaymentInfoPlugin() != null ? payment.getPaymentInfoPlugin().getEffectiveDate() : null),
@@ -298,15 +316,6 @@ public abstract class BusinessInvoicePaymentBaseModelDao extends BusinessModelDa
reportGroup);
}
- public void populateDenormalizedInvoiceFields(final BusinessInvoiceModelDao businessInvoice) {
- invoiceBalance = businessInvoice.getBalance();
- invoiceAmountPaid = businessInvoice.getAmountPaid();
- invoiceAmountCharged = businessInvoice.getAmountCharged();
- invoiceOriginalAmountCharged = businessInvoice.getOriginalAmountCharged();
- invoiceAmountCredited = businessInvoice.getAmountCredited();
- invoiceAmountRefunded = businessInvoice.getAmountRefunded();
- }
-
public Long getInvoicePaymentRecordId() {
return invoicePaymentRecordId;
}
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/utils/BusinessInvoiceUtils.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/utils/BusinessInvoiceUtils.java
index 3651785..23f1f9b 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/utils/BusinessInvoiceUtils.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/utils/BusinessInvoiceUtils.java
@@ -16,33 +16,16 @@
package com.ning.billing.osgi.bundles.analytics.utils;
-import java.math.BigDecimal;
import java.util.Collection;
-import javax.annotation.Nullable;
-
import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.api.InvoiceItemType;
-import com.ning.billing.invoice.api.InvoicePayment.InvoicePaymentType;
-import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessInvoiceItemBaseModelDao;
-import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessInvoiceItemBaseModelDao.BusinessInvoiceItemType;
-import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessInvoicePaymentBaseModelDao;
/**
* Utilities to manipulate invoice and invoice items.
*/
public class BusinessInvoiceUtils {
- public static boolean isRepareeItemForRepairedItem(final InvoiceItem repairedInvoiceItem, final InvoiceItem invoiceItem) {
- return repairedInvoiceItem.getInvoiceItemType().equals(invoiceItem.getInvoiceItemType()) &&
- repairedInvoiceItem.getSubscriptionId().equals(invoiceItem.getSubscriptionId()) &&
- repairedInvoiceItem.getStartDate().compareTo(invoiceItem.getStartDate()) == 0 &&
- // FIXED items have a null end date
- ((repairedInvoiceItem.getEndDate() == null && invoiceItem.getEndDate() == null) ||
- (repairedInvoiceItem.getEndDate() != null && invoiceItem.getEndDate() != null && !repairedInvoiceItem.getEndDate().isBefore(invoiceItem.getEndDate()))) &&
- !repairedInvoiceItem.getId().equals(invoiceItem.getId());
- }
-
public static boolean isRevenueRecognizable(final InvoiceItem invoiceItem, final Collection<InvoiceItem> otherInvoiceItems) {
// All items are recognizable except user generated credit (CBA_ADJ and CREDIT_ADJ on their own invoice)
return !(InvoiceItemType.CBA_ADJ.equals(invoiceItem.getInvoiceItemType()) &&
@@ -67,7 +50,7 @@ public class BusinessInvoiceUtils {
// Item adjustments
public static boolean isInvoiceItemAdjustmentItem(final InvoiceItem invoiceItem) {
- return InvoiceItemType.ITEM_ADJ.equals(invoiceItem.getInvoiceItemType());
+ return InvoiceItemType.ITEM_ADJ.equals(invoiceItem.getInvoiceItemType()) || InvoiceItemType.REPAIR_ADJ.equals(invoiceItem.getInvoiceItemType());
}
// Account credits, gained or consumed
@@ -81,88 +64,4 @@ public class BusinessInvoiceUtils {
InvoiceItemType.FIXED.equals(invoiceItem.getInvoiceItemType()) ||
InvoiceItemType.RECURRING.equals(invoiceItem.getInvoiceItemType());
}
-
- public static BigDecimal computeInvoiceBalance(@Nullable final Iterable<BusinessInvoiceItemBaseModelDao> businessInvoiceItems,
- @Nullable final Iterable<BusinessInvoicePaymentBaseModelDao> businessInvoicePayments) {
- return computeInvoiceAmountCharged(businessInvoiceItems)
- .add(computeInvoiceAmountCredited(businessInvoiceItems))
- .add(
- computeInvoiceAmountPaid(businessInvoicePayments).negate()
- .add(computeInvoiceAmountRefunded(businessInvoicePayments).negate())
- );
- }
-
- public static BigDecimal computeInvoiceAmountCharged(@Nullable final Iterable<BusinessInvoiceItemBaseModelDao> businessInvoiceItems) {
- BigDecimal amountCharged = BigDecimal.ZERO;
- if (businessInvoiceItems == null) {
- return amountCharged;
- }
-
- for (final BusinessInvoiceItemBaseModelDao businessInvoiceItem : businessInvoiceItems) {
- if (BusinessInvoiceItemType.CHARGE.equals(businessInvoiceItem.getBusinessInvoiceItemType()) ||
- BusinessInvoiceItemType.INVOICE_ADJUSTMENT.equals(businessInvoiceItem.getBusinessInvoiceItemType()) ||
- BusinessInvoiceItemType.INVOICE_ITEM_ADJUSTMENT.equals(businessInvoiceItem.getBusinessInvoiceItemType())) {
- amountCharged = amountCharged.add(businessInvoiceItem.getAmount());
- }
- }
- return amountCharged;
- }
-
- public static BigDecimal computeInvoiceOriginalAmountCharged(@Nullable final Iterable<BusinessInvoiceItemBaseModelDao> businessInvoiceItems) {
- BigDecimal amountCharged = BigDecimal.ZERO;
- if (businessInvoiceItems == null) {
- return amountCharged;
- }
-
- for (final BusinessInvoiceItemBaseModelDao businessInvoiceItem : businessInvoiceItems) {
- if (BusinessInvoiceItemType.CHARGE.equals(businessInvoiceItem.getBusinessInvoiceItemType()) &&
- businessInvoiceItem.getCreatedDate().equals(businessInvoiceItem.getInvoiceCreatedDate())) {
- amountCharged = amountCharged.add(businessInvoiceItem.getAmount());
- }
- }
- return amountCharged;
- }
-
- public static BigDecimal computeInvoiceAmountCredited(@Nullable final Iterable<BusinessInvoiceItemBaseModelDao> businessInvoiceItems) {
- BigDecimal amountCredited = BigDecimal.ZERO;
- if (businessInvoiceItems == null) {
- return amountCredited;
- }
-
- for (final BusinessInvoiceItemBaseModelDao businessInvoiceItem : businessInvoiceItems) {
- if (BusinessInvoiceItemType.ACCOUNT_CREDIT.equals(businessInvoiceItem.getBusinessInvoiceItemType())) {
- amountCredited = amountCredited.add(businessInvoiceItem.getAmount());
- }
- }
- return amountCredited;
- }
-
- public static BigDecimal computeInvoiceAmountPaid(@Nullable final Iterable<BusinessInvoicePaymentBaseModelDao> businessInvoicePayments) {
- BigDecimal amountPaid = BigDecimal.ZERO;
- if (businessInvoicePayments == null) {
- return amountPaid;
- }
-
- for (final BusinessInvoicePaymentBaseModelDao businessInvoicePayment : businessInvoicePayments) {
- if (InvoicePaymentType.ATTEMPT.toString().equals(businessInvoicePayment.getInvoicePaymentType())) {
- amountPaid = amountPaid.add(businessInvoicePayment.getAmount());
- }
- }
- return amountPaid;
- }
-
- public static BigDecimal computeInvoiceAmountRefunded(@Nullable final Iterable<BusinessInvoicePaymentBaseModelDao> businessInvoicePayments) {
- BigDecimal amountRefunded = BigDecimal.ZERO;
- if (businessInvoicePayments == null) {
- return amountRefunded;
- }
-
- for (final BusinessInvoicePaymentBaseModelDao businessInvoicePayment : businessInvoicePayments) {
- if (InvoicePaymentType.REFUND.toString().equals(businessInvoicePayment.getInvoicePaymentType()) ||
- InvoicePaymentType.CHARGED_BACK.toString().equals(businessInvoicePayment.getInvoicePaymentType())) {
- amountRefunded = amountRefunded.add(businessInvoicePayment.getAmount());
- }
- }
- return amountRefunded;
- }
}
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessInvoice.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessInvoice.java
index 39d0020..51fdbb1 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessInvoice.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessInvoice.java
@@ -16,8 +16,6 @@
package com.ning.billing.osgi.bundles.analytics.api;
-import java.math.BigDecimal;
-
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -31,16 +29,9 @@ public class TestBusinessInvoice extends AnalyticsTestSuiteNoDB {
@Test(groups = "fast")
public void testConstructor() throws Exception {
- final BigDecimal balance = BigDecimal.ONE;
- final BigDecimal amountPaid = BigDecimal.TEN;
- final BigDecimal amountCharged = BigDecimal.ZERO;
- final BigDecimal originalAmountCharged = BigDecimal.ONE;
final BusinessInvoiceModelDao invoiceModelDao = new BusinessInvoiceModelDao(account,
accountRecordId,
invoice,
- amountPaid,
- amountCharged,
- originalAmountCharged,
invoiceRecordId,
auditLog,
tenantRecordId,
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 349a3d0..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
@@ -71,9 +71,6 @@ public class TestBusinessSnapshot extends AnalyticsTestSuiteNoDB {
final BusinessInvoiceModelDao invoiceModelDao = new BusinessInvoiceModelDao(account,
accountRecordId,
invoice,
- BigDecimal.ONE,
- BigDecimal.ONE,
- BigDecimal.ONE,
invoiceRecordId,
auditLog,
tenantRecordId,
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/factory/TestBusinessInvoiceFactory.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/factory/TestBusinessInvoiceFactory.java
index b1621aa..39d367e 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/factory/TestBusinessInvoiceFactory.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/factory/TestBusinessInvoiceFactory.java
@@ -18,12 +18,10 @@ package com.ning.billing.osgi.bundles.analytics.dao.factory;
import java.math.BigDecimal;
import java.util.Arrays;
-import java.util.Collection;
import java.util.UUID;
import javax.sql.DataSource;
-import org.joda.time.LocalDate;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
@@ -39,10 +37,7 @@ import com.ning.billing.osgi.bundles.analytics.utils.BusinessInvoiceUtils;
import com.ning.killbill.osgi.libs.killbill.OSGIKillbillDataSource;
import com.ning.killbill.osgi.libs.killbill.OSGIKillbillLogService;
-import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Multimap;
public class TestBusinessInvoiceFactory extends AnalyticsTestSuiteNoDB {
@@ -86,8 +81,7 @@ public class TestBusinessInvoiceFactory extends AnalyticsTestSuiteNoDB {
auditLog,
accountRecordId,
tenantRecordId,
- reportGroup,
- callContext);
+ reportGroup);
// We ignore these
Assert.assertNull(businessCreditAdjItem);
@@ -103,8 +97,7 @@ public class TestBusinessInvoiceFactory extends AnalyticsTestSuiteNoDB {
auditLog,
accountRecordId,
tenantRecordId,
- reportGroup,
- callContext);
+ reportGroup);
// We treat these as NOT recognizable account credits
Assert.assertEquals(businessCreditItem.getAmount().compareTo(new BigDecimal("10")), 0);
Assert.assertEquals(businessCreditItem.getItemType(), InvoiceItemType.CBA_ADJ.toString());
@@ -122,8 +115,7 @@ public class TestBusinessInvoiceFactory extends AnalyticsTestSuiteNoDB {
auditLog,
accountRecordId,
tenantRecordId,
- reportGroup,
- callContext);
+ reportGroup);
Assert.assertEquals(businessInvoiceAdjustmentItem.getAmount().compareTo(new BigDecimal("-10")), 0);
Assert.assertEquals(businessInvoiceAdjustmentItem.getItemType(), InvoiceItemType.CREDIT_ADJ.toString());
// Recognizable by default
@@ -141,8 +133,7 @@ public class TestBusinessInvoiceFactory extends AnalyticsTestSuiteNoDB {
auditLog,
accountRecordId,
tenantRecordId,
- reportGroup,
- callContext);
+ reportGroup);
Assert.assertEquals(businessRefundInvoiceAdjustmentItem.getAmount().compareTo(new BigDecimal("-10")), 0);
Assert.assertEquals(businessRefundInvoiceAdjustmentItem.getItemType(), InvoiceItemType.REFUND_ADJ.toString());
// Recognizable by default
@@ -160,8 +151,7 @@ public class TestBusinessInvoiceFactory extends AnalyticsTestSuiteNoDB {
auditLog,
accountRecordId,
tenantRecordId,
- reportGroup,
- callContext);
+ reportGroup);
Assert.assertEquals(businessInvoiceItemAdjustmentItem.getAmount().compareTo(new BigDecimal("-10")), 0);
Assert.assertEquals(businessInvoiceItemAdjustmentItem.getItemType(), InvoiceItemType.ITEM_ADJ.toString());
// Recognizable by default
@@ -181,8 +171,7 @@ public class TestBusinessInvoiceFactory extends AnalyticsTestSuiteNoDB {
auditLog,
accountRecordId,
tenantRecordId,
- reportGroup,
- callContext);
+ reportGroup);
Assert.assertEquals(businessCBAItem.getAmount().compareTo(new BigDecimal("10")), 0);
Assert.assertEquals(businessCBAItem.getItemType(), InvoiceItemType.CBA_ADJ.toString());
// Recognizable by default
@@ -210,260 +199,4 @@ public class TestBusinessInvoiceFactory extends AnalyticsTestSuiteNoDB {
ImmutableList.<InvoiceItem>of(createInvoiceItem(invoiceId, InvoiceItemType.RECURRING),
createInvoiceItem(invoiceId, InvoiceItemType.CBA_ADJ, creditAdj.getAmount().negate()))));
}
-
- @Test(groups = "fast")
- public void testSanitization() throws Exception {
- // One invoice, with two repairs and an external charge
- final UUID subscriptionId1 = UUID.randomUUID();
- final LocalDate startDate1 = new LocalDate(2013, 4, 1);
- final LocalDate endDate1 = new LocalDate(2013, 4, 30);
- final BigDecimal amount1 = new BigDecimal("30");
- final UUID originalInvoice1 = UUID.randomUUID();
- final UUID reparationInvoice1 = UUID.randomUUID();
- final InvoiceItem recurring1 = createInvoiceItem(originalInvoice1, InvoiceItemType.RECURRING, subscriptionId1, startDate1, endDate1, amount1, null);
- final InvoiceItem repair1 = createInvoiceItem(originalInvoice1, InvoiceItemType.REPAIR_ADJ, subscriptionId1, startDate1, endDate1, amount1.negate(), recurring1.getId());
- final LocalDate reparationEndDate1 = new LocalDate(2013, 4, 10);
- final BigDecimal reparationAmount1 = new BigDecimal("10");
- final InvoiceItem reparation1 = createInvoiceItem(reparationInvoice1, InvoiceItemType.RECURRING, subscriptionId1, startDate1, reparationEndDate1, reparationAmount1, null);
-
- final UUID subscriptionId2 = UUID.randomUUID();
- final LocalDate startDate2 = new LocalDate(2013, 4, 10);
- final LocalDate endDate2 = new LocalDate(2013, 4, 30);
- final BigDecimal amount2 = new BigDecimal("20");
- final UUID originalInvoice2 = UUID.randomUUID();
- final UUID reparationInvoice2 = UUID.randomUUID();
- final InvoiceItem recurring2 = createInvoiceItem(originalInvoice2, InvoiceItemType.RECURRING, subscriptionId2, startDate2, endDate2, amount2, null);
- final InvoiceItem repair2 = createInvoiceItem(originalInvoice2, InvoiceItemType.REPAIR_ADJ, subscriptionId2, startDate2, endDate2, amount2.negate(), recurring2.getId());
- final LocalDate reparationEndDate2 = new LocalDate(2013, 4, 15);
- final BigDecimal reparationAmount2 = new BigDecimal("5");
- final InvoiceItem reparation2 = createInvoiceItem(reparationInvoice2, InvoiceItemType.RECURRING, subscriptionId2, startDate2, reparationEndDate2, reparationAmount2, null);
-
- final UUID externalChargeSubscriptionId = UUID.randomUUID();
- final LocalDate externalStartDate = new LocalDate(2012, 1, 1);
- final BigDecimal externalChargeAmount = BigDecimal.TEN;
- final UUID otherInvoice3 = UUID.randomUUID();
- final InvoiceItem externalCharge = createInvoiceItem(otherInvoice3, InvoiceItemType.EXTERNAL_CHARGE, externalChargeSubscriptionId, externalStartDate, null, externalChargeAmount, null);
-
- final ArrayListMultimap<UUID, InvoiceItem> allInvoiceItems = ArrayListMultimap.<UUID, InvoiceItem>create();
- allInvoiceItems.putAll(originalInvoice1, ImmutableList.<InvoiceItem>of(recurring1, repair1, reparation1));
- allInvoiceItems.putAll(originalInvoice2, ImmutableList.<InvoiceItem>of(recurring2, repair2, reparation2));
- allInvoiceItems.put(otherInvoice3, externalCharge);
- final Collection<InvoiceItem> sanitizedInvoiceItems = invoiceFactory.sanitizeInvoiceItems(allInvoiceItems);
- Assert.assertEquals(sanitizedInvoiceItems.size(), 2 + 2 + 1);
- for (final InvoiceItem invoiceItem : sanitizedInvoiceItems) {
- if (invoiceItem.getId().equals(recurring1.getId())) {
- Assert.assertEquals(invoiceItem, recurring1);
- } else if (invoiceItem.getId().equals(repair1.getId())) {
- if (InvoiceItemType.ITEM_ADJ.equals(invoiceItem.getInvoiceItemType()) && invoiceItem.getLinkedItemId().equals(recurring1.getId())) {
- Assert.assertEquals(invoiceItem.getAmount(), new BigDecimal("20").negate());
- } else {
- Assert.fail("Repair item 1 shouldn't be in the sanitized elements");
- }
- } else if (invoiceItem.getId().equals(reparation1.getId())) {
- Assert.fail("Reparation item 1 shouldn't be in the sanitized elements");
- } else if (invoiceItem.getId().equals(recurring2.getId())) {
- Assert.assertEquals(invoiceItem, recurring2);
- } else if (invoiceItem.getId().equals(repair2.getId())) {
- if (InvoiceItemType.ITEM_ADJ.equals(invoiceItem.getInvoiceItemType()) && invoiceItem.getLinkedItemId().equals(recurring2.getId())) {
- Assert.assertEquals(invoiceItem.getAmount(), new BigDecimal("15").negate());
- } else {
- Assert.fail("Repair item 2 shouldn't be in the sanitized elements");
- }
- } else if (invoiceItem.getId().equals(reparation2.getId())) {
- Assert.fail("Reparation item 2 shouldn't be in the sanitized elements");
- } else if (invoiceItem.getId().equals(externalCharge.getId())) {
- Assert.assertEquals(invoiceItem, externalCharge);
- } else {
- Assert.fail("Shouldn't be in the sanitized elements: " + invoiceItem);
- }
- }
- }
-
- @Test(groups = "fast")
- public void testFindReparee() throws Exception {
- final UUID subscriptionId1 = UUID.randomUUID();
- final LocalDate startDate1 = new LocalDate(2013, 4, 1);
- final LocalDate endDate1 = new LocalDate(2013, 4, 30);
- final BigDecimal amount1 = new BigDecimal("30");
- final UUID originalInvoice1 = UUID.randomUUID();
- final InvoiceItem recurring1 = createInvoiceItem(originalInvoice1, InvoiceItemType.RECURRING, subscriptionId1, startDate1, endDate1, amount1, null);
- final InvoiceItem repair1 = createInvoiceItem(originalInvoice1, InvoiceItemType.REPAIR_ADJ, subscriptionId1, startDate1, endDate1, amount1.negate(), recurring1.getId());
-
- final UUID repareeInvoice1 = UUID.randomUUID();
- final LocalDate repareeEndDate1 = new LocalDate(2013, 4, 10);
- final BigDecimal repareeAmount1 = new BigDecimal("10");
- final InvoiceItem reparee1 = createInvoiceItem(repareeInvoice1, InvoiceItemType.RECURRING, subscriptionId1, startDate1, repareeEndDate1, repareeAmount1, null);
-
- Assert.assertEquals(invoiceFactory.findRepareeInvoiceItems(ImmutableList.<InvoiceItem>of(recurring1, repair1, reparee1)).size(), 1);
- Assert.assertEquals(invoiceFactory.findRepareeInvoiceItems(ImmutableList.<InvoiceItem>of(recurring1, repair1, reparee1)).get(reparee1), repair1);
- }
-
- @Test(groups = "fast")
- public void testCantFindRepareeWrongSubscription() throws Exception {
- final UUID subscriptionId1 = UUID.randomUUID();
- final LocalDate startDate1 = new LocalDate(2013, 4, 1);
- final LocalDate endDate1 = new LocalDate(2013, 4, 30);
- final BigDecimal amount1 = new BigDecimal("30");
- final UUID originalInvoice1 = UUID.randomUUID();
- final InvoiceItem recurring1 = createInvoiceItem(originalInvoice1, InvoiceItemType.RECURRING, subscriptionId1, startDate1, endDate1, amount1, null);
- final InvoiceItem repair1 = createInvoiceItem(originalInvoice1, InvoiceItemType.REPAIR_ADJ, subscriptionId1, startDate1, endDate1, amount1.negate(), recurring1.getId());
-
- final UUID repareeInvoice1 = UUID.randomUUID();
- final LocalDate repareeEndDate1 = new LocalDate(2013, 4, 10);
- final BigDecimal repareeAmount1 = new BigDecimal("10");
- final InvoiceItem reparee1 = createInvoiceItem(repareeInvoice1, InvoiceItemType.RECURRING, UUID.randomUUID(), startDate1, repareeEndDate1, repareeAmount1, null);
-
- Assert.assertEquals(invoiceFactory.findRepareeInvoiceItems(ImmutableList.<InvoiceItem>of(recurring1, repair1, reparee1)).size(), 0);
- }
-
- @Test(groups = "fast")
- public void testCantFindRepareeWrongEndDate() throws Exception {
- final UUID subscriptionId1 = UUID.randomUUID();
- final LocalDate startDate1 = new LocalDate(2013, 4, 1);
- final LocalDate endDate1 = new LocalDate(2013, 4, 30);
- final BigDecimal amount1 = new BigDecimal("30");
- final UUID originalInvoice1 = UUID.randomUUID();
- final InvoiceItem recurring1 = createInvoiceItem(originalInvoice1, InvoiceItemType.RECURRING, subscriptionId1, startDate1, endDate1, amount1, null);
- final InvoiceItem repair1 = createInvoiceItem(originalInvoice1, InvoiceItemType.REPAIR_ADJ, subscriptionId1, startDate1, endDate1, amount1.negate(), recurring1.getId());
-
- final UUID repareeInvoice1 = UUID.randomUUID();
- final LocalDate repareeEndDate1 = new LocalDate(2038, 4, 10);
- final BigDecimal repareeAmount1 = new BigDecimal("10");
- final InvoiceItem reparee1 = createInvoiceItem(repareeInvoice1, InvoiceItemType.RECURRING, subscriptionId1, startDate1, repareeEndDate1, repareeAmount1, null);
-
- Assert.assertEquals(invoiceFactory.findRepareeInvoiceItems(ImmutableList.<InvoiceItem>of(recurring1, repair1, reparee1)).size(), 0);
- }
-
- @Test(groups = "fast")
- public void testMergeCBAsNormal() throws Exception {
- final UUID invoiceId1 = UUID.randomUUID();
- final InvoiceItem cba1 = createInvoiceItem(invoiceId1, InvoiceItemType.CBA_ADJ, BigDecimal.ONE);
- final InvoiceItem cba2 = createInvoiceItem(invoiceId1, InvoiceItemType.CBA_ADJ, BigDecimal.TEN.negate());
- final InvoiceItem charge = createInvoiceItem(invoiceId1, InvoiceItemType.EXTERNAL_CHARGE, new BigDecimal("9"));
-
- final UUID invoiceId2 = UUID.randomUUID();
- final InvoiceItem cba3 = createInvoiceItem(invoiceId2, InvoiceItemType.CBA_ADJ, BigDecimal.ONE);
-
- final Multimap<UUID, InvoiceItem> allInvoiceItems = ArrayListMultimap.<UUID, InvoiceItem>create();
- allInvoiceItems.put(invoiceId1, cba1);
- allInvoiceItems.put(invoiceId1, cba2);
- allInvoiceItems.put(invoiceId1, charge);
- allInvoiceItems.put(invoiceId2, cba3);
-
- final Collection<AdjustedCBAInvoiceItem> adjustedCBAInvoiceItems = invoiceFactory.buildMergedCBAItems(allInvoiceItems, ImmutableMap.<InvoiceItem, InvoiceItem>of());
- Assert.assertEquals(adjustedCBAInvoiceItems.size(), 2);
- for (final AdjustedCBAInvoiceItem item : adjustedCBAInvoiceItems) {
- Assert.assertEquals(item.getAmount(), item.getInvoiceId().equals(invoiceId1) ? new BigDecimal("-9") : BigDecimal.ONE);
- }
- }
-
- @Test(groups = "fast")
- public void testMergeCBAsWithRepairAndPayment() throws Exception {
- /*
- * Scenario:
- * Recurring1: +30
- * Repair1: -30
- * CBA: +30
- */
- final UUID subscriptionId1 = UUID.randomUUID();
- final LocalDate startDate1 = new LocalDate(2013, 4, 1);
- final LocalDate endDate1 = new LocalDate(2013, 4, 30);
- final BigDecimal amount1 = new BigDecimal("30");
- final UUID invoiceId1 = UUID.randomUUID();
- final InvoiceItem recurring1 = createInvoiceItem(invoiceId1, InvoiceItemType.RECURRING, subscriptionId1, startDate1, endDate1, amount1, null);
- final InvoiceItem repair1 = createInvoiceItem(invoiceId1, InvoiceItemType.REPAIR_ADJ, subscriptionId1, startDate1, endDate1, amount1.negate(), recurring1.getId());
- final InvoiceItem cba1 = createInvoiceItem(invoiceId1, InvoiceItemType.CBA_ADJ, amount1);
-
- /*
- * Scenario:
- * Recurring1: +10
- * CBA use: -10
- * Charge: +9
- * CBA use: -9
- */
- final UUID invoiceId2 = UUID.randomUUID();
- final LocalDate repareeEndDate1 = new LocalDate(2013, 4, 10);
- final BigDecimal repareeAmount1 = new BigDecimal("10");
- final InvoiceItem reparee1 = createInvoiceItem(invoiceId2, InvoiceItemType.RECURRING, subscriptionId1, startDate1, repareeEndDate1, repareeAmount1, null);
- final InvoiceItem cba2 = createInvoiceItem(invoiceId2, InvoiceItemType.CBA_ADJ, repareeAmount1.negate());
- final InvoiceItem charge = createInvoiceItem(invoiceId2, InvoiceItemType.EXTERNAL_CHARGE, new BigDecimal("9"));
- final InvoiceItem cba3 = createInvoiceItem(invoiceId2, InvoiceItemType.CBA_ADJ, new BigDecimal("-9"));
-
- final Multimap<UUID, InvoiceItem> allInvoiceItems = ArrayListMultimap.<UUID, InvoiceItem>create();
- allInvoiceItems.put(invoiceId1, recurring1);
- allInvoiceItems.put(invoiceId1, repair1);
- allInvoiceItems.put(invoiceId1, cba1);
- allInvoiceItems.put(invoiceId2, reparee1);
- allInvoiceItems.put(invoiceId2, cba2);
- allInvoiceItems.put(invoiceId2, charge);
- allInvoiceItems.put(invoiceId2, cba3);
-
- /*
- * Expected invoice 1:
- * Recurring1: +30
- * Adjustment: -20
- * Recurring1: +10
- * CBA: +20
- *
- * Expected invoice 2:
- * Charge: +9
- * CBA use: -9
- */
- final Collection<AdjustedCBAInvoiceItem> adjustedCBAInvoiceItems = invoiceFactory.buildMergedCBAItems(allInvoiceItems, ImmutableMap.<InvoiceItem, InvoiceItem>of(reparee1, repair1));
- Assert.assertEquals(adjustedCBAInvoiceItems.size(), 2);
- for (final AdjustedCBAInvoiceItem item : adjustedCBAInvoiceItems) {
- Assert.assertEquals(item.getAmount(), item.getInvoiceId().equals(invoiceId1) ? new BigDecimal("20") : new BigDecimal("-9"));
- }
- }
-
- // TODO Should add the same test, but where the second invoice is repaired to check the blacklist stuff works as expected
- @Test(groups = "fast")
- public void testMergeCBAsWithRepairAndNoPayment() throws Exception {
- /*
- * Scenario:
- * Recurring1: +30
- * Repair1: -30
- */
- final UUID subscriptionId1 = UUID.randomUUID();
- final LocalDate startDate1 = new LocalDate(2013, 4, 1);
- final LocalDate endDate1 = new LocalDate(2013, 4, 30);
- final BigDecimal amount1 = new BigDecimal("30");
- final UUID invoiceId1 = UUID.randomUUID();
- final InvoiceItem recurring1 = createInvoiceItem(invoiceId1, InvoiceItemType.RECURRING, subscriptionId1, startDate1, endDate1, amount1, null);
- final InvoiceItem repair1 = createInvoiceItem(invoiceId1, InvoiceItemType.REPAIR_ADJ, subscriptionId1, startDate1, endDate1, amount1.negate(), recurring1.getId());
-
- /*
- * Scenario (assume account has 9 credits):
- * Recurring1: +10
- * Charge: +9
- * CBA use: -9
- */
- final UUID invoiceId2 = UUID.randomUUID();
- final LocalDate repareeEndDate1 = new LocalDate(2013, 4, 10);
- final BigDecimal repareeAmount1 = new BigDecimal("10");
- final InvoiceItem reparee1 = createInvoiceItem(invoiceId2, InvoiceItemType.RECURRING, subscriptionId1, startDate1, repareeEndDate1, repareeAmount1, null);
- final InvoiceItem charge = createInvoiceItem(invoiceId2, InvoiceItemType.EXTERNAL_CHARGE, new BigDecimal("9"));
- final InvoiceItem cba1 = createInvoiceItem(invoiceId2, InvoiceItemType.CBA_ADJ, new BigDecimal("-9"));
-
- final Multimap<UUID, InvoiceItem> allInvoiceItems = ArrayListMultimap.<UUID, InvoiceItem>create();
- allInvoiceItems.put(invoiceId1, recurring1);
- allInvoiceItems.put(invoiceId1, repair1);
- allInvoiceItems.put(invoiceId2, reparee1);
- allInvoiceItems.put(invoiceId2, cba1);
- allInvoiceItems.put(invoiceId2, charge);
-
- /*
- * Expected invoice 1:
- * Recurring1: +30
- * Adjustment: -20
- * Recurring1: +10
- *
- * Expected invoice 2:
- * Charge: +9
- * CBA use: -9
- */
- final Collection<AdjustedCBAInvoiceItem> adjustedCBAInvoiceItems = invoiceFactory.buildMergedCBAItems(allInvoiceItems, ImmutableMap.<InvoiceItem, InvoiceItem>of(reparee1, repair1));
- Assert.assertEquals(adjustedCBAInvoiceItems.size(), 1);
- Assert.assertEquals(adjustedCBAInvoiceItems.iterator().next().getAmount(), new BigDecimal("-9"));
- }
}
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceItemModelDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceItemModelDao.java
index cd2a065..2ba5730 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceItemModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceItemModelDao.java
@@ -85,12 +85,12 @@ public class TestBusinessInvoiceItemModelDao extends AnalyticsTestSuiteNoDB {
Assert.assertEquals(invoiceItemModelDao.getInvoiceDate(), invoice.getInvoiceDate());
Assert.assertEquals(invoiceItemModelDao.getInvoiceTargetDate(), invoice.getTargetDate());
Assert.assertEquals(invoiceItemModelDao.getInvoiceCurrency(), invoice.getCurrency().toString());
- Assert.assertNull(invoiceItemModelDao.getInvoiceBalance());
- Assert.assertNull(invoiceItemModelDao.getInvoiceAmountPaid());
- Assert.assertNull(invoiceItemModelDao.getInvoiceAmountCharged());
- Assert.assertNull(invoiceItemModelDao.getInvoiceOriginalAmountCharged());
- Assert.assertNull(invoiceItemModelDao.getInvoiceAmountCredited());
- Assert.assertNull(invoiceItemModelDao.getInvoiceAmountRefunded());
+ Assert.assertEquals(invoiceItemModelDao.getInvoiceBalance(), invoice.getBalance());
+ Assert.assertEquals(invoiceItemModelDao.getInvoiceAmountPaid(), invoice.getPaidAmount());
+ Assert.assertEquals(invoiceItemModelDao.getInvoiceAmountCharged(), invoice.getChargedAmount());
+ Assert.assertEquals(invoiceItemModelDao.getInvoiceOriginalAmountCharged(), invoice.getOriginalChargedAmount());
+ Assert.assertEquals(invoiceItemModelDao.getInvoiceAmountCredited(), invoice.getCreditedAmount());
+ Assert.assertEquals(invoiceItemModelDao.getInvoiceAmountRefunded(), invoice.getRefundedAmount());
Assert.assertEquals(invoiceItemModelDao.getItemType(), invoiceItem.getInvoiceItemType().toString());
//Assert.assertEquals(invoiceItemModelDao.getRevenueRecognizable(), /* TODO */);
Assert.assertEquals(invoiceItemModelDao.getStartDate(), invoiceItem.getStartDate());
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceModelDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceModelDao.java
index 906db0e..65a9c96 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceModelDao.java
@@ -16,8 +16,6 @@
package com.ning.billing.osgi.bundles.analytics.dao.model;
-import java.math.BigDecimal;
-
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -27,17 +25,9 @@ public class TestBusinessInvoiceModelDao extends AnalyticsTestSuiteNoDB {
@Test(groups = "fast")
public void testConstructor() throws Exception {
- final BigDecimal balance = BigDecimal.ONE;
- final BigDecimal amountCharged = BigDecimal.ZERO;
- final BigDecimal originalAmountCharged = BigDecimal.ONE;
- final BigDecimal amountCredited = BigDecimal.TEN;
-
final BusinessInvoiceModelDao invoiceModelDao = new BusinessInvoiceModelDao(account,
accountRecordId,
invoice,
- amountCharged,
- originalAmountCharged,
- amountCredited,
invoiceRecordId,
auditLog,
tenantRecordId,
@@ -51,11 +41,11 @@ public class TestBusinessInvoiceModelDao extends AnalyticsTestSuiteNoDB {
Assert.assertEquals(invoiceModelDao.getInvoiceDate(), invoice.getInvoiceDate());
Assert.assertEquals(invoiceModelDao.getTargetDate(), invoice.getTargetDate());
Assert.assertEquals(invoiceModelDao.getCurrency(), invoice.getCurrency().toString());
- Assert.assertEquals(invoiceModelDao.getAmountCharged(), amountCharged);
- Assert.assertEquals(invoiceModelDao.getOriginalAmountCharged(), originalAmountCharged);
- Assert.assertEquals(invoiceModelDao.getAmountCredited(), amountCredited);
- Assert.assertNull(invoiceModelDao.getBalance());
- Assert.assertNull(invoiceModelDao.getAmountPaid());
- Assert.assertNull(invoiceModelDao.getAmountRefunded());
+ Assert.assertEquals(invoiceModelDao.getBalance(), invoice.getBalance());
+ Assert.assertEquals(invoiceModelDao.getAmountPaid(), invoice.getPaidAmount());
+ Assert.assertEquals(invoiceModelDao.getAmountCharged(), invoice.getChargedAmount());
+ Assert.assertEquals(invoiceModelDao.getOriginalAmountCharged(), invoice.getOriginalChargedAmount());
+ Assert.assertEquals(invoiceModelDao.getAmountCredited(), invoice.getCreditedAmount());
+ Assert.assertEquals(invoiceModelDao.getAmountRefunded(), invoice.getRefundedAmount());
}
}
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoicePaymentModelDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoicePaymentModelDao.java
index bcdac82..6f8ece7 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoicePaymentModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoicePaymentModelDao.java
@@ -104,12 +104,12 @@ public class TestBusinessInvoicePaymentModelDao extends AnalyticsTestSuiteNoDB {
Assert.assertEquals(invoicePaymentModelDao.getInvoiceDate(), invoice.getInvoiceDate());
Assert.assertEquals(invoicePaymentModelDao.getInvoiceTargetDate(), invoice.getTargetDate());
Assert.assertEquals(invoicePaymentModelDao.getInvoiceCurrency(), invoice.getCurrency().toString());
- Assert.assertNull(invoicePaymentModelDao.getInvoiceBalance());
- Assert.assertNull(invoicePaymentModelDao.getInvoiceAmountPaid());
- Assert.assertNull(invoicePaymentModelDao.getInvoiceAmountCharged());
- Assert.assertNull(invoicePaymentModelDao.getInvoiceOriginalAmountCharged());
- Assert.assertNull(invoicePaymentModelDao.getInvoiceAmountCredited());
- Assert.assertNull(invoicePaymentModelDao.getInvoiceAmountRefunded());
+ Assert.assertEquals(invoicePaymentModelDao.getInvoiceBalance(), invoice.getBalance());
+ Assert.assertEquals(invoicePaymentModelDao.getInvoiceAmountPaid(), invoice.getPaidAmount());
+ Assert.assertEquals(invoicePaymentModelDao.getInvoiceAmountCharged(), invoice.getChargedAmount());
+ Assert.assertEquals(invoicePaymentModelDao.getInvoiceOriginalAmountCharged(), invoice.getOriginalChargedAmount());
+ Assert.assertEquals(invoicePaymentModelDao.getInvoiceAmountCredited(), invoice.getCreditedAmount());
+ Assert.assertEquals(invoicePaymentModelDao.getInvoiceAmountRefunded(), invoice.getRefundedAmount());
Assert.assertEquals(invoicePaymentModelDao.getInvoicePaymentType(), invoicePayment.getType().toString());
Assert.assertEquals(invoicePaymentModelDao.getPaymentNumber(), (Long) payment.getPaymentNumber().longValue());
Assert.assertEquals(invoicePaymentModelDao.getLinkedInvoicePaymentId(), invoicePayment.getLinkedInvoicePaymentId());
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 32d2f67..abd47c7 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
@@ -153,9 +153,6 @@ public class TestBusinessAnalyticsSqlDao extends AnalyticsTestSuiteWithEmbeddedD
final BusinessInvoiceModelDao businessInvoiceModelDao = new BusinessInvoiceModelDao(account,
accountRecordId,
invoice,
- BigDecimal.ONE,
- BigDecimal.ONE,
- BigDecimal.ONE,
invoiceRecordId,
auditLog,
tenantRecordId,