Details
diff --git a/api/src/main/java/com/ning/billing/invoice/api/Invoice.java b/api/src/main/java/com/ning/billing/invoice/api/Invoice.java
index b8dff70..bb31fd5 100644
--- a/api/src/main/java/com/ning/billing/invoice/api/Invoice.java
+++ b/api/src/main/java/com/ning/billing/invoice/api/Invoice.java
@@ -17,6 +17,7 @@
package com.ning.billing.invoice.api;
import java.math.BigDecimal;
+import java.util.Collection;
import java.util.List;
import java.util.UUID;
@@ -29,7 +30,7 @@ public interface Invoice extends Entity {
boolean addInvoiceItem(InvoiceItem item);
- boolean addInvoiceItems(List<InvoiceItem> items);
+ boolean addInvoiceItems(Collection<InvoiceItem> items);
List<InvoiceItem> getInvoiceItems();
@@ -39,7 +40,7 @@ public interface Invoice extends Entity {
boolean addPayment(InvoicePayment payment);
- boolean addPayments(List<InvoicePayment> payments);
+ boolean addPayments(Collection<InvoicePayment> payments);
List<InvoicePayment> getPayments();
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
index a7c576c..753b7a1 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
@@ -175,7 +175,9 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, InvoiceApi
// Create the invoice items
final InvoiceItemSqlDao transInvoiceItemSqlDao = entitySqlDaoWrapperFactory.become(InvoiceItemSqlDao.class);
- transInvoiceItemSqlDao.batchCreateFromTransaction(invoiceItems, context);
+ for (final InvoiceItemModelDao invoiceItemModelDao : invoiceItems) {
+ transInvoiceItemSqlDao.create(invoiceItemModelDao, context);
+ }
// Add entries in the notification queue for recurring items
final List<InvoiceItemModelDao> recurringInvoiceItems = ImmutableList.<InvoiceItemModelDao>copyOf(Collections2.filter(invoiceItems, new Predicate<InvoiceItemModelDao>() {
@@ -817,7 +819,7 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, InvoiceApi
// Finally, create the adjustment
// Note! The amount is negated here!
return new InvoiceItemModelDao(InvoiceItemType.ITEM_ADJ, invoiceItemToBeAdjusted.getInvoiceId(), invoiceItemToBeAdjusted.getAccountId(),
- null, null, null, null, effectiveDate, null, amountToAdjust.negate(), null, currencyForAdjustment, invoiceItemToBeAdjusted.getId());
+ null, null, null, null, effectiveDate, effectiveDate, amountToAdjust.negate(), null, currencyForAdjustment, invoiceItemToBeAdjusted.getId());
}
/**
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceItemSqlDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceItemSqlDao.java
index 2789596..431d946 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceItemSqlDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceItemSqlDao.java
@@ -27,7 +27,6 @@ import org.joda.time.LocalDate;
import org.skife.jdbi.v2.StatementContext;
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.BindBean;
-import org.skife.jdbi.v2.sqlobject.SqlBatch;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
@@ -66,11 +65,6 @@ public interface InvoiceItemSqlDao extends EntitySqlDao<InvoiceItemModelDao> {
void create(@BindBean final InvoiceItemModelDao invoiceItem,
@BindBean final InternalCallContext context);
- @SqlBatch(transactional = false)
- @Audited(ChangeType.INSERT)
- void batchCreateFromTransaction(@BindBean final List<InvoiceItemModelDao> items,
- @BindBean final InternalCallContext context);
-
public static class InvoiceItemModelDaoSqlDaoMapper extends MapperBase implements ResultSetMapper<InvoiceItemModelDao> {
@Override
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoice.java b/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoice.java
index 803bfd9..2d9c044 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoice.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoice.java
@@ -18,6 +18,7 @@ package com.ning.billing.invoice.model;
import java.math.BigDecimal;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import java.util.UUID;
@@ -30,9 +31,14 @@ import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.api.InvoicePayment;
+import com.ning.billing.invoice.dao.InvoiceItemModelDao;
import com.ning.billing.invoice.dao.InvoiceModelDao;
+import com.ning.billing.invoice.dao.InvoicePaymentModelDao;
import com.ning.billing.util.entity.EntityBase;
+import com.google.common.base.Function;
+import com.google.common.collect.Collections2;
+
public class DefaultInvoice extends EntityBase implements Invoice {
private final InvoiceItemList invoiceItems = new InvoiceItemList();
@@ -71,6 +77,18 @@ public class DefaultInvoice extends EntityBase implements Invoice {
this(invoiceModelDao.getId(), invoiceModelDao.getCreatedDate(), invoiceModelDao.getAccountId(),
invoiceModelDao.getInvoiceNumber(), invoiceModelDao.getInvoiceDate(), invoiceModelDao.getTargetDate(),
invoiceModelDao.getCurrency(), invoiceModelDao.isMigrated());
+ addInvoiceItems(Collections2.transform(invoiceModelDao.getInvoiceItems(), new Function<InvoiceItemModelDao, InvoiceItem>() {
+ @Override
+ public InvoiceItem apply(final InvoiceItemModelDao input) {
+ return InvoiceItemFactory.fromModelDao(input);
+ }
+ }));
+ addPayments(Collections2.transform(invoiceModelDao.getInvoicePayments(), new Function<InvoicePaymentModelDao, InvoicePayment>() {
+ @Override
+ public InvoicePayment apply(final InvoicePaymentModelDao input) {
+ return new DefaultInvoicePayment(input);
+ }
+ }));
}
@Override
@@ -79,7 +97,7 @@ public class DefaultInvoice extends EntityBase implements Invoice {
}
@Override
- public boolean addInvoiceItems(final List<InvoiceItem> items) {
+ public boolean addInvoiceItems(final Collection<InvoiceItem> items) {
return this.invoiceItems.addAll(items);
}
@@ -110,7 +128,7 @@ public class DefaultInvoice extends EntityBase implements Invoice {
}
@Override
- public boolean addPayments(final List<InvoicePayment> payments) {
+ public boolean addPayments(final Collection<InvoicePayment> payments) {
return this.payments.addAll(payments);
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java
index 7c22a77..bdc8e23 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/template/formatters/DefaultInvoiceFormatter.java
@@ -35,6 +35,7 @@ package com.ning.billing.invoice.template.formatters;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import java.util.Locale;
import java.util.UUID;
@@ -153,7 +154,7 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
}
@Override
- public boolean addInvoiceItems(final List<InvoiceItem> items) {
+ public boolean addInvoiceItems(final Collection<InvoiceItem> items) {
return invoice.addInvoiceItems(items);
}
@@ -173,7 +174,7 @@ public class DefaultInvoiceFormatter implements InvoiceFormatter {
}
@Override
- public boolean addPayments(final List<InvoicePayment> payments) {
+ public boolean addPayments(final Collection<InvoicePayment> payments) {
return invoice.addPayments(payments);
}
diff --git a/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.sql.stg b/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.sql.stg
index 86bfd1b..6428f7c 100644
--- a/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.sql.stg
+++ b/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.sql.stg
@@ -69,7 +69,7 @@ getRemainingAmountPaid() ::= <<
>>
getAccountIdFromInvoicePaymentId() ::= <<
- SELECT <tableName()>
+ SELECT i.account_id
FROM <tableName()> ip
INNER JOIN invoices i ON i.id = ip.invoice_id
WHERE ip.id = :invoicePaymentId
diff --git a/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoiceSqlDao.sql.stg b/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoiceSqlDao.sql.stg
index 3fe868d..7293b45 100644
--- a/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoiceSqlDao.sql.stg
+++ b/invoice/src/main/resources/com/ning/billing/invoice/dao/InvoiceSqlDao.sql.stg
@@ -24,7 +24,7 @@ tableValues(prefix) ::= <<
>>
extraTableFieldsWithComma(prefix) ::= <<
-, record_id as invoice_number
+, <prefix>record_id as invoice_number
>>
getInvoicesByAccount() ::= <<
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/TestDefaultInvoiceDao.java b/invoice/src/test/java/com/ning/billing/invoice/dao/TestDefaultInvoiceDao.java
index 4b277e5..3b0a030 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/TestDefaultInvoiceDao.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/TestDefaultInvoiceDao.java
@@ -36,10 +36,6 @@ import com.ning.billing.invoice.notification.NextBillingDatePoster;
import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.entity.dao.EntitySqlDao;
import com.ning.billing.util.svcsapi.bus.InternalBus;
-import com.ning.billing.util.tag.dao.MockTagDao;
-import com.ning.billing.util.tag.dao.MockTagDefinitionDao;
-import com.ning.billing.util.tag.dao.TagDao;
-import com.ning.billing.util.tag.dao.TagDefinitionDao;
import com.google.common.collect.ImmutableMap;
@@ -68,8 +64,6 @@ public class TestDefaultInvoiceDao extends InvoiceTestSuite {
});
final NextBillingDatePoster poster = Mockito.mock(NextBillingDatePoster.class);
- final TagDefinitionDao tagDefinitionDao = new MockTagDefinitionDao();
- final TagDao tagDao = new MockTagDao();
dao = new DefaultInvoiceDao(idbi, poster, Mockito.mock(InternalBus.class));
}
@@ -109,18 +103,4 @@ public class TestDefaultInvoiceDao extends InvoiceTestSuite {
final BigDecimal actualRefundAmount = dao.computePositiveRefundAmount(invoicePayment, requestedAmount, invoiceItemIdsWithAmounts);
Assert.assertEquals(actualRefundAmount, expectedRefundAmount);
}
-
- @Test(groups = "fast")
- public void testFindByNumber() throws Exception {
- final Integer number = Integer.MAX_VALUE;
- final InvoiceModelDao invoice = Mockito.mock(InvoiceModelDao.class);
- Mockito.when(invoiceSqlDao.getByRecordId(number.longValue(), internalCallContext)).thenReturn(invoice);
-
- Assert.assertEquals(dao.getByNumber(number, internalCallContext), invoice);
- try {
- dao.getByNumber(Integer.MIN_VALUE, internalCallContext);
- Assert.fail();
- } catch (InvoiceApiException e) {
- }
- }
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/TestInvoiceDao.java b/invoice/src/test/java/com/ning/billing/invoice/dao/TestInvoiceDao.java
index 29f0d13..27fbba8 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/TestInvoiceDao.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/TestInvoiceDao.java
@@ -130,8 +130,13 @@ public class TestInvoiceDao extends InvoiceDaoTestBase {
@Test(groups = "slow")
public void testRetrievalForNonExistentInvoiceId() throws InvoiceApiException {
- invoiceDao.getById(UUID.randomUUID(), internalCallContext);
- Assert.fail();
+ try {
+ invoiceDao.getById(UUID.randomUUID(), internalCallContext);
+ Assert.fail();
+ } catch (TransactionFailedException e) {
+ Assert.assertTrue(e.getCause() instanceof InvoiceApiException);
+ Assert.assertEquals(((InvoiceApiException) e.getCause()).getCode(), ErrorCode.INVOICE_NOT_FOUND.getCode());
+ }
}
@Test(groups = "slow")
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java b/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
index d1003f3..6cda9cb 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
@@ -28,6 +28,7 @@ import org.skife.jdbi.v2.exceptions.TransactionFailedException;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
+import com.ning.billing.ErrorCode;
import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.dbi.MysqlTestingHelper;
@@ -162,9 +163,15 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
assertEquals(accountId, invoice.getAccountId());
}
- @Test(groups = "slow", expectedExceptions = InvoiceApiException.class)
+ @Test(groups = "slow")
public void testGetAccountIdFromPaymentIdBadPaymentId() throws InvoiceApiException {
- invoicePaymentApi.getAccountIdFromInvoicePaymentId(UUID.randomUUID(), callContext);
+ try {
+ invoicePaymentApi.getAccountIdFromInvoicePaymentId(UUID.randomUUID(), callContext);
+ fail();
+ } catch (TransactionFailedException e) {
+ assertTrue(e.getCause() instanceof InvoiceApiException);
+ assertEquals(((InvoiceApiException) e.getCause()).getCode(), ErrorCode.CHARGE_BACK_COULD_NOT_FIND_ACCOUNT_ID.getCode());
+ }
}
@Test(groups = "slow")
diff --git a/payment/src/test/java/com/ning/billing/payment/MockInvoice.java b/payment/src/test/java/com/ning/billing/payment/MockInvoice.java
index 2cde1b1..6aaac26 100644
--- a/payment/src/test/java/com/ning/billing/payment/MockInvoice.java
+++ b/payment/src/test/java/com/ning/billing/payment/MockInvoice.java
@@ -16,12 +16,14 @@
package com.ning.billing.payment;
-import javax.annotation.Nullable;
import java.math.BigDecimal;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import java.util.UUID;
+import javax.annotation.Nullable;
+
import org.joda.time.LocalDate;
import com.ning.billing.catalog.api.Currency;
@@ -64,7 +66,7 @@ public class MockInvoice extends EntityBase implements Invoice {
}
@Override
- public boolean addInvoiceItems(final List<InvoiceItem> items) {
+ public boolean addInvoiceItems(final Collection<InvoiceItem> items) {
return this.invoiceItems.addAll(items);
}
@@ -95,7 +97,7 @@ public class MockInvoice extends EntityBase implements Invoice {
}
@Override
- public boolean addPayments(final List<InvoicePayment> payments) {
+ public boolean addPayments(final Collection<InvoicePayment> payments) {
return this.payments.addAll(payments);
}
diff --git a/util/src/main/java/com/ning/billing/util/svcapi/tag/DefaultTagInternalApi.java b/util/src/main/java/com/ning/billing/util/svcapi/tag/DefaultTagInternalApi.java
index 5216eba..fedf00a 100644
--- a/util/src/main/java/com/ning/billing/util/svcapi/tag/DefaultTagInternalApi.java
+++ b/util/src/main/java/com/ning/billing/util/svcapi/tag/DefaultTagInternalApi.java
@@ -16,7 +16,6 @@
package com.ning.billing.util.svcapi.tag;
import java.util.List;
-import java.util.Map;
import java.util.UUID;
import javax.inject.Inject;
@@ -61,8 +60,8 @@ public class DefaultTagInternalApi implements TagInternalApi {
throws TagApiException {
final TagDefinition tagDefinition = tagDefinitionDao.getById(tagDefinitionId, context);
- final Tag tag = tagDefinition.isControlTag() ? new DefaultControlTag(ControlTagType.getTypeFromId(tagDefinition.getId()), ObjectType.ACCOUNT, objectId, context.getCreatedDate()) :
- new DescriptiveTag(tagDefinition.getId(), ObjectType.ACCOUNT, objectId, context.getCreatedDate());
+ final Tag tag = tagDefinition.isControlTag() ? new DefaultControlTag(ControlTagType.getTypeFromId(tagDefinition.getId()), objectType, objectId, context.getCreatedDate()) :
+ new DescriptiveTag(tagDefinition.getId(), objectType, objectId, context.getCreatedDate());
tagDao.create(tag, context);
}