Details
diff --git a/api/src/main/java/org/killbill/billing/invoice/api/InvoiceInternalApi.java b/api/src/main/java/org/killbill/billing/invoice/api/InvoiceInternalApi.java
index b9bd129..96d9248 100644
--- a/api/src/main/java/org/killbill/billing/invoice/api/InvoiceInternalApi.java
+++ b/api/src/main/java/org/killbill/billing/invoice/api/InvoiceInternalApi.java
@@ -55,13 +55,13 @@ public interface InvoiceInternalApi {
* @param amount amount to refund
* @param isInvoiceAdjusted whether the refund should trigger an invoice or invoice item adjustment
* @param invoiceItemIdsWithAmounts invoice item ids and associated amounts to adjust
- * @param paymentCookieId payment cookie id
+ * @param transactionExternalKey refund transaction externalKey
* @param context the call callcontext
* @return the created invoice payment object associated with this refund
* @throws InvoiceApiException
*/
public InvoicePayment createRefund(UUID paymentId, BigDecimal amount, boolean isInvoiceAdjusted, final Map<UUID, BigDecimal> invoiceItemIdsWithAmounts,
- UUID paymentCookieId, InternalCallContext context) throws InvoiceApiException;
+ String transactionExternalKey, InternalCallContext context) throws InvoiceApiException;
/**
* Rebalance CBA for account which have credit and unpaid invoices
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/api/svcs/DefaultInvoiceInternalApi.java b/invoice/src/main/java/org/killbill/billing/invoice/api/svcs/DefaultInvoiceInternalApi.java
index 611b9d4..98c329c 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/api/svcs/DefaultInvoiceInternalApi.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/api/svcs/DefaultInvoiceInternalApi.java
@@ -133,11 +133,11 @@ public class DefaultInvoiceInternalApi implements InvoiceInternalApi {
}
@Override
- public InvoicePayment createRefund(final UUID paymentId, final BigDecimal amount, final boolean isInvoiceAdjusted, final Map<UUID, BigDecimal> invoiceItemIdsWithAmounts, final UUID paymentCookieId, final InternalCallContext context) throws InvoiceApiException {
+ public InvoicePayment createRefund(final UUID paymentId, final BigDecimal amount, final boolean isInvoiceAdjusted, final Map<UUID, BigDecimal> invoiceItemIdsWithAmounts, final String transactionExternalKey, final InternalCallContext context) throws InvoiceApiException {
if (amount.compareTo(BigDecimal.ZERO) <= 0) {
throw new InvoiceApiException(ErrorCode.PAYMENT_REFUND_AMOUNT_NEGATIVE_OR_NULL);
}
- return new DefaultInvoicePayment(dao.createRefund(paymentId, amount, isInvoiceAdjusted, invoiceItemIdsWithAmounts, paymentCookieId, context));
+ return new DefaultInvoicePayment(dao.createRefund(paymentId, amount, isInvoiceAdjusted, invoiceItemIdsWithAmounts, transactionExternalKey, context));
}
@Override
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/dao/DefaultInvoiceDao.java b/invoice/src/main/java/org/killbill/billing/invoice/dao/DefaultInvoiceDao.java
index 5231b09..a434e57 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/dao/DefaultInvoiceDao.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/dao/DefaultInvoiceDao.java
@@ -348,7 +348,7 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
@Override
public InvoicePaymentModelDao createRefund(final UUID paymentId, final BigDecimal requestedRefundAmount, final boolean isInvoiceAdjusted,
- final Map<UUID, BigDecimal> invoiceItemIdsWithNullAmounts, final UUID paymentCookieId,
+ final Map<UUID, BigDecimal> invoiceItemIdsWithNullAmounts, final String transactionExternalKey,
final InternalCallContext context) throws InvoiceApiException {
final boolean isInvoiceItemAdjusted = isInvoiceAdjusted && invoiceItemIdsWithNullAmounts.size() > 0;
@@ -375,7 +375,7 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
// Before we go further, check if that refund already got inserted -- the payment system keeps a state machine
// and so this call may be called several time for the same paymentCookieId (which is really the refundId)
- final InvoicePaymentModelDao existingRefund = transactional.getPaymentsForCookieId(paymentCookieId.toString(), context);
+ final InvoicePaymentModelDao existingRefund = transactional.getPaymentsForCookieId(transactionExternalKey, context);
if (existingRefund != null) {
return existingRefund;
}
@@ -383,7 +383,7 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
final InvoicePaymentModelDao refund = new InvoicePaymentModelDao(UUID.randomUUID(), context.getCreatedDate(), InvoicePaymentType.REFUND,
payment.getInvoiceId(), paymentId,
context.getCreatedDate(), requestedPositiveAmount.negate(),
- payment.getCurrency(), payment.getProcessedCurrency(), paymentCookieId, payment.getId());
+ payment.getCurrency(), payment.getProcessedCurrency(), transactionExternalKey, payment.getId());
transactional.create(refund, context);
// Retrieve invoice after the Refund
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoiceDao.java b/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoiceDao.java
index 032b12b..081ca54 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoiceDao.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoiceDao.java
@@ -70,13 +70,13 @@ public interface InvoiceDao extends EntityDao<InvoiceModelDao, Invoice, InvoiceA
* @param amount amount to refund
* @param isInvoiceAdjusted whether the refund should trigger an invoice or invoice item adjustment
* @param invoiceItemIdsWithAmounts invoice item ids and associated amounts to adjust
- * @param paymentCookieId payment cookie id
+ * @param transactionExternalKey transaction refund externalKey
* @param context the call callcontext
* @return the created invoice payment object associated with this refund
* @throws InvoiceApiException
*/
InvoicePaymentModelDao createRefund(UUID paymentId, BigDecimal amount, boolean isInvoiceAdjusted, Map<UUID, BigDecimal> invoiceItemIdsWithAmounts,
- UUID paymentCookieId, InternalCallContext context) throws InvoiceApiException;
+ String transactionExternalKey, InternalCallContext context) throws InvoiceApiException;
BigDecimal getRemainingAmountPaid(UUID invoicePaymentId, InternalTenantContext context);
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoicePaymentModelDao.java b/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoicePaymentModelDao.java
index 231425c..05e49f1 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoicePaymentModelDao.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoicePaymentModelDao.java
@@ -37,14 +37,14 @@ public class InvoicePaymentModelDao extends EntityBase implements EntityModelDao
private BigDecimal amount;
private Currency currency;
private Currency processedCurrency;
- private UUID paymentCookieId;
+ private String paymentCookieId;
private UUID linkedInvoicePaymentId;
public InvoicePaymentModelDao() { /* For the DAO mapper */ }
public InvoicePaymentModelDao(final UUID id, final DateTime createdDate, final InvoicePaymentType type, final UUID invoiceId,
final UUID paymentId, final DateTime paymentDate, final BigDecimal amount, final Currency currency,
- final Currency processedCurrency, final UUID paymentCookieId, final UUID linkedInvoicePaymentId) {
+ final Currency processedCurrency, final String paymentCookieId, final UUID linkedInvoicePaymentId) {
super(id, createdDate, createdDate);
this.type = type;
this.invoiceId = invoiceId;
@@ -91,7 +91,7 @@ public class InvoicePaymentModelDao extends EntityBase implements EntityModelDao
return processedCurrency;
}
- public UUID getPaymentCookieId() {
+ public String getPaymentCookieId() {
return paymentCookieId;
}
@@ -127,7 +127,7 @@ public class InvoicePaymentModelDao extends EntityBase implements EntityModelDao
this.processedCurrency = processedCurrency;
}
- public void setPaymentCookieId(final UUID paymentCookieId) {
+ public void setPaymentCookieId(final String paymentCookieId) {
this.paymentCookieId = paymentCookieId;
}
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/model/DefaultInvoicePayment.java b/invoice/src/main/java/org/killbill/billing/invoice/model/DefaultInvoicePayment.java
index 1207c34..edca219 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/model/DefaultInvoicePayment.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/model/DefaultInvoicePayment.java
@@ -38,7 +38,7 @@ public class DefaultInvoicePayment extends EntityBase implements InvoicePayment
private final BigDecimal amount;
private final Currency currency;
private final Currency processedCurrency;
- private final UUID paymentCookieId;
+ private final String paymentCookieId;
private final UUID linkedInvoicePaymentId;
public DefaultInvoicePayment(final InvoicePaymentType type, final UUID paymentId, final UUID invoiceId, final DateTime paymentDate,
@@ -47,13 +47,13 @@ public class DefaultInvoicePayment extends EntityBase implements InvoicePayment
}
public DefaultInvoicePayment(final UUID id, final InvoicePaymentType type, final UUID paymentId, final UUID invoiceId, final DateTime paymentDate,
- @Nullable final BigDecimal amount, @Nullable final Currency currency, @Nullable final Currency processedCurrency, @Nullable final UUID paymentCookieId,
+ @Nullable final BigDecimal amount, @Nullable final Currency currency, @Nullable final Currency processedCurrency, @Nullable final String paymentCookieId,
@Nullable final UUID linkedInvoicePaymentId) {
this(id, null, type, paymentId, invoiceId, paymentDate, amount, currency, processedCurrency, paymentCookieId, linkedInvoicePaymentId);
}
public DefaultInvoicePayment(final UUID id, @Nullable final DateTime createdDate, final InvoicePaymentType type, final UUID paymentId, final UUID invoiceId, final DateTime paymentDate,
- @Nullable final BigDecimal amount, @Nullable final Currency currency, @Nullable final Currency processedCurrency, @Nullable final UUID paymentCookieId,
+ @Nullable final BigDecimal amount, @Nullable final Currency currency, @Nullable final Currency processedCurrency, @Nullable final String paymentCookieId,
@Nullable final UUID linkedInvoicePaymentId) {
super(id, createdDate, createdDate);
this.type = type;
@@ -111,7 +111,7 @@ public class DefaultInvoicePayment extends EntityBase implements InvoicePayment
}
@Override
- public UUID getPaymentCookieId() {
+ public String getPaymentCookieId() {
return paymentCookieId;
}
diff --git a/invoice/src/main/resources/org/killbill/billing/invoice/ddl.sql b/invoice/src/main/resources/org/killbill/billing/invoice/ddl.sql
index ffc23a3..6a08dc1 100644
--- a/invoice/src/main/resources/org/killbill/billing/invoice/ddl.sql
+++ b/invoice/src/main/resources/org/killbill/billing/invoice/ddl.sql
@@ -61,7 +61,7 @@ CREATE TABLE invoice_payments (
amount numeric(15,9) NOT NULL,
currency char(3) NOT NULL,
processed_currency char(3) NOT NULL,
- payment_cookie_id char(36) DEFAULT NULL,
+ payment_cookie_id varchar(255) DEFAULT NULL,
linked_invoice_payment_id char(36) DEFAULT NULL,
created_by varchar(50) NOT NULL,
created_date datetime NOT NULL,
diff --git a/invoice/src/test/java/org/killbill/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java b/invoice/src/test/java/org/killbill/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java
index bef93eb..cf642fe 100644
--- a/invoice/src/test/java/org/killbill/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java
+++ b/invoice/src/test/java/org/killbill/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java
@@ -117,7 +117,7 @@ public class TestDefaultInvoicePaymentApi extends InvoiceTestSuiteWithEmbeddedDB
// Create a full refund with no adjustment
final InvoicePayment refund = invoiceInternalApi.createRefund(payment.getPaymentId(), refundAmount, adjusted, invoiceItemIdsWithAmounts,
- UUID.randomUUID(), internalCallContext);
+ UUID.randomUUID().toString(), internalCallContext);
Assert.assertEquals(refund.getAmount().compareTo(refundAmount.negate()), 0);
Assert.assertEquals(refund.getCurrency(), CURRENCY);
Assert.assertEquals(refund.getInvoiceId(), invoice.getId());
diff --git a/invoice/src/test/java/org/killbill/billing/invoice/dao/MockInvoiceDao.java b/invoice/src/test/java/org/killbill/billing/invoice/dao/MockInvoiceDao.java
index 2933f9a..f55afe8 100644
--- a/invoice/src/test/java/org/killbill/billing/invoice/dao/MockInvoiceDao.java
+++ b/invoice/src/test/java/org/killbill/billing/invoice/dao/MockInvoiceDao.java
@@ -316,7 +316,7 @@ public class MockInvoiceDao extends MockEntityDaoBase<InvoiceModelDao, Invoice,
@Override
public InvoicePaymentModelDao createRefund(final UUID paymentId, final BigDecimal amount, final boolean isInvoiceAdjusted,
- final Map<UUID, BigDecimal> invoiceItemIdsWithAmounts, final UUID paymentCookieId,
+ final Map<UUID, BigDecimal> invoiceItemIdsWithAmounts, final String transactionExternalKey,
final InternalCallContext context)
throws InvoiceApiException {
return null;
diff --git a/invoice/src/test/java/org/killbill/billing/invoice/dao/TestInvoiceDao.java b/invoice/src/test/java/org/killbill/billing/invoice/dao/TestInvoiceDao.java
index 407af8b..08c30dc 100644
--- a/invoice/src/test/java/org/killbill/billing/invoice/dao/TestInvoiceDao.java
+++ b/invoice/src/test/java/org/killbill/billing/invoice/dao/TestInvoiceDao.java
@@ -629,7 +629,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(new BigDecimal("0.00")), 0);
- invoiceDao.createRefund(paymentId, refund1, withAdjustment, ImmutableMap.<UUID, BigDecimal>of(), UUID.randomUUID(), context);
+ invoiceDao.createRefund(paymentId, refund1, withAdjustment, ImmutableMap.<UUID, BigDecimal>of(), UUID.randomUUID().toString(), context);
balance = invoiceDao.getAccountBalance(accountId, context);
if (withAdjustment) {
assertEquals(balance.compareTo(BigDecimal.ZERO), 0);
@@ -689,7 +689,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
// PAss a null value to let invoice calculate the amount to adjust
itemAdjustment.put(item2.getId(), null);
- invoiceDao.createRefund(paymentId, refundAmount, true, itemAdjustment, UUID.randomUUID(), context);
+ invoiceDao.createRefund(paymentId, refundAmount, true, itemAdjustment, UUID.randomUUID().toString(), context);
balancePriorRefund = invoiceDao.getAccountBalance(accountId, context);
final boolean partialRefund = refundAmount.compareTo(amount) < 0;
@@ -801,7 +801,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
assertEquals(cba.compareTo(new BigDecimal("10.00")), 0);
// PARTIAL REFUND on the payment
- invoiceDao.createRefund(paymentId, refundAmount, withAdjustment, ImmutableMap.<UUID, BigDecimal>of(), UUID.randomUUID(), context);
+ invoiceDao.createRefund(paymentId, refundAmount, withAdjustment, ImmutableMap.<UUID, BigDecimal>of(), UUID.randomUUID().toString(), context);
balance = invoiceDao.getAccountBalance(accountId, context);
assertEquals(balance.compareTo(expectedFinalBalance), 0);
@@ -1316,7 +1316,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
// AND THEN THIRD THE REFUND
final Map<UUID, BigDecimal> invoiceItemMap = new HashMap<UUID, BigDecimal>();
invoiceItemMap.put(invoiceItem.getId(), new BigDecimal("239.00"));
- invoiceDao.createRefund(paymentId, paymentAmount, true, invoiceItemMap, UUID.randomUUID(), context);
+ invoiceDao.createRefund(paymentId, paymentAmount, true, invoiceItemMap, UUID.randomUUID().toString(), context);
final InvoiceModelDao savedInvoice = invoiceDao.getById(invoiceId, context);
assertNotNull(savedInvoice);
@@ -1481,7 +1481,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
invoiceUtil.verifyInvoice(invoice2.getId(), 0.00, -5.00, context);
// Refund Payment before we can deleted CBA
- invoiceDao.createRefund(paymentId, new BigDecimal("10.0"), false, ImmutableMap.<UUID, BigDecimal>of(), UUID.randomUUID(), context);
+ invoiceDao.createRefund(paymentId, new BigDecimal("10.0"), false, ImmutableMap.<UUID, BigDecimal>of(), UUID.randomUUID().toString(), context);
// Verify all three invoices were affected
Assert.assertEquals(invoiceDao.getAccountCBA(accountId, context).doubleValue(), 0.00);
@@ -1555,7 +1555,7 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
invoiceUtil.verifyInvoice(invoice2.getId(), 0.00, -5.00, context);
invoiceUtil.verifyInvoice(invoice3.getId(), 0.00, -5.00, context);
- invoiceDao.createRefund(paymentId, paymentAmount, false, ImmutableMap.<UUID, BigDecimal>of(), UUID.randomUUID(), context);
+ invoiceDao.createRefund(paymentId, paymentAmount, false, ImmutableMap.<UUID, BigDecimal>of(), UUID.randomUUID().toString(), context);
// Verify all three invoices were affected
Assert.assertEquals(invoiceDao.getAccountCBA(accountId, context).doubleValue(), 0.00);
diff --git a/invoice/src/test/java/org/killbill/billing/invoice/tests/InvoiceTestUtils.java b/invoice/src/test/java/org/killbill/billing/invoice/tests/InvoiceTestUtils.java
index 811dacc..3689bbe 100644
--- a/invoice/src/test/java/org/killbill/billing/invoice/tests/InvoiceTestUtils.java
+++ b/invoice/src/test/java/org/killbill/billing/invoice/tests/InvoiceTestUtils.java
@@ -108,7 +108,7 @@ public class InvoiceTestUtils {
Mockito.when(payment.getType()).thenReturn(InvoicePaymentType.ATTEMPT);
Mockito.when(payment.getInvoiceId()).thenReturn(invoiceId);
Mockito.when(payment.getPaymentId()).thenReturn(UUID.randomUUID());
- Mockito.when(payment.getPaymentCookieId()).thenReturn(UUID.randomUUID());
+ Mockito.when(payment.getPaymentCookieId()).thenReturn(UUID.randomUUID().toString());
Mockito.when(payment.getPaymentDate()).thenReturn(clock.getUTCNow());
Mockito.when(payment.getAmount()).thenReturn(amount);
Mockito.when(payment.getCurrency()).thenReturn(currency);