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 e20ffeb..c0539a9 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
@@ -234,19 +234,12 @@ public class DefaultInvoiceDao implements InvoiceDao {
return invoiceSqlDao.inTransaction(new Transaction<BigDecimal, InvoiceSqlDao>() {
@Override
public BigDecimal inTransaction(final InvoiceSqlDao transactional, final TransactionStatus status) throws Exception {
-
- BigDecimal cba = BigDecimal.ZERO;
- List<Invoice> invoices = getAllInvoicesByAccountFromTransaction(accountId, transactional);
- for (Invoice cur : invoices) {
- cba = cba.add(cur.getCBAAmount());
- }
- return cba;
+ return getAccountCBAFromTransaction(accountId, transactional);
}
});
}
-
@Override
public void notifyOfPaymentAttempt(final InvoicePayment invoicePayment, final CallContext context) {
invoicePaymentSqlDao.inTransaction(new Transaction<Void, InvoicePaymentSqlDao>() {
@@ -327,6 +320,7 @@ public class DefaultInvoiceDao implements InvoiceDao {
throw new InvoiceApiException(ErrorCode.REFUND_AMOUNT_TOO_HIGH, requestedPositiveAmount, maxRefundAmount);
}
+
final InvoicePayment refund = new DefaultInvoicePayment(UUID.randomUUID(), InvoicePaymentType.REFUND, paymentAttemptId,
payment.getInvoiceId(), context.getCreatedDate(), requestedPositiveAmount.negate(), payment.getCurrency(), payment.getId());
transactional.create(refund, context);
@@ -342,10 +336,11 @@ public class DefaultInvoiceDao implements InvoiceDao {
InvoiceItemSqlDao transInvoiceItemDao = transInvoiceDao.become(InvoiceItemSqlDao.class);
// If we have an existing CBA > 0, we need to adjust it
- final BigDecimal cbaAmountAfterRefund = invoice.getCBAAmount();
+ //final BigDecimal cbaAmountAfterRefund = invoice.getCBAAmount();
+ final BigDecimal accountCbaAvailable = getAccountCBAFromTransaction(invoice.getAccountId(), transInvoiceDao);
BigDecimal cbaAdjAmount = BigDecimal.ZERO;
- if (cbaAmountAfterRefund.compareTo(BigDecimal.ZERO) > 0) {
- cbaAdjAmount = (requestedPositiveAmount.compareTo(cbaAmountAfterRefund) > 0) ? cbaAmountAfterRefund.negate() : requestedPositiveAmount.negate();
+ if (accountCbaAvailable.compareTo(BigDecimal.ZERO) > 0) {
+ cbaAdjAmount = (requestedPositiveAmount.compareTo(accountCbaAvailable) > 0) ? accountCbaAvailable.negate() : requestedPositiveAmount.negate();
final InvoiceItem cbaAdjItem = new CreditBalanceAdjInvoiceItem(invoice.getId(), invoice.getAccountId(), context.getCreatedDate(), cbaAdjAmount, invoice.getCurrency());
transInvoiceItemDao.create(cbaAdjItem, context);
}
@@ -462,6 +457,16 @@ public class DefaultInvoiceDao implements InvoiceDao {
invoiceSqlDao.test();
}
+ private BigDecimal getAccountCBAFromTransaction(final UUID accountId, final InvoiceSqlDao transactional) {
+ BigDecimal cba = BigDecimal.ZERO;
+ List<Invoice> invoices = getAllInvoicesByAccountFromTransaction(accountId, transactional);
+ for (Invoice cur : invoices) {
+ cba = cba.add(cur.getCBAAmount());
+ }
+ return cba;
+ }
+
+
private void populateChildren(final Invoice invoice, final InvoiceSqlDao invoiceSqlDao) {
getInvoiceItemsWithinTransaction(invoice, invoiceSqlDao);
getInvoicePaymentsWithinTransaction(invoice, invoiceSqlDao);
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceSqlDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceSqlDao.java
index df254de..3de924b 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceSqlDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceSqlDao.java
@@ -114,23 +114,5 @@ public interface InvoiceSqlDao extends EntitySqlDao<Invoice>, AuditSqlDao, Trans
return new DefaultInvoice(id, accountId, invoiceNumber, invoiceDate, targetDate, currency, isMigrationInvoice);
}
}
-
- public static class BalanceMapper implements ResultSetMapper<BigDecimal> {
- @Override
- public BigDecimal map(final int index, final ResultSet result, final StatementContext context) throws SQLException {
- BigDecimal amountInvoiced = result.getBigDecimal("amount_invoiced");
- BigDecimal amountPaid = result.getBigDecimal("amount_paid");
-
- if (amountInvoiced == null) {
- amountInvoiced = BigDecimal.ZERO;
- }
-
- if (amountPaid == null) {
- amountPaid = BigDecimal.ZERO;
- }
-
- return amountInvoiced.subtract(amountPaid);
- }
- }
}