killbill-uncached
Changes
pom.xml 2(+1 -1)
Details
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoicePaymentResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoicePaymentResource.java
index 543ee93..35b1ec6 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoicePaymentResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoicePaymentResource.java
@@ -236,6 +236,7 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
@ApiResponse(code = 404, message = "Account or payment not found")})
public Response createChargeback(@PathParam("paymentId") final UUID paymentId,
final InvoicePaymentTransactionJson json,
+ @QueryParam(QUERY_PLUGIN_PROPERTY) final List<String> pluginPropertiesString,
@HeaderParam(HDR_CREATED_BY) final String createdBy,
@HeaderParam(HDR_REASON) final String reason,
@HeaderParam(HDR_COMMENT) final String comment,
@@ -244,14 +245,22 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
verifyNonNullOrEmpty(json, "InvoicePaymentTransactionJson body should be specified");
verifyNonNullOrEmpty(json.getAmount(), "InvoicePaymentTransactionJson amount needs to be set");
- final CallContext callContext = context.createCallContextNoAccountId(createdBy, reason, comment, request);
- final Payment payment = paymentApi.getPayment(paymentId, false, false, ImmutableList.<PluginProperty>of(), callContext);
- final Account account = accountUserApi.getAccountById(payment.getAccountId(), callContext);
+ final CallContext callContextNoAccountId = context.createCallContextNoAccountId(createdBy, reason, comment, request);
+ final Payment payment = paymentApi.getPayment(paymentId, false, false, ImmutableList.<PluginProperty>of(), callContextNoAccountId);
+ final Account account = accountUserApi.getAccountById(payment.getAccountId(), callContextNoAccountId);
+ final CallContext callContext = context.createCallContextWithAccountId(account.getId(), createdBy, reason, comment, request);
final String transactionExternalKey = json.getTransactionExternalKey() != null ? json.getTransactionExternalKey() : UUIDs.randomUUID().toString();
- final Payment result = paymentApi.createChargebackWithPaymentControl(account, payment.getId(), json.getAmount(), account.getCurrency(), json.getEffectiveDate(),
- transactionExternalKey, createInvoicePaymentControlPluginApiPaymentOptions(false), callContext);
- return uriBuilder.buildResponse(uriInfo, InvoicePaymentResource.class, "getInvoicePayment", result.getId(), request);
+ invoicePaymentApi.createChargebackForInvoicePayment(account,
+ payment.getId(),
+ json.getAmount(),
+ account.getCurrency(),
+ json.getEffectiveDate(),
+ transactionExternalKey,
+ extractPluginProperties(pluginPropertiesString),
+ createInvoicePaymentControlPluginApiPaymentOptions(false),
+ callContext);
+ return uriBuilder.buildResponse(uriInfo, InvoicePaymentResource.class, "getInvoicePayment", payment.getId(), request);
}
@TimedResource
@@ -265,6 +274,7 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
@ApiResponse(code = 404, message = "Account or payment not found")})
public Response createChargebackReversal(@PathParam("paymentId") final UUID paymentId,
final InvoicePaymentTransactionJson json,
+ @QueryParam(QUERY_PLUGIN_PROPERTY) final List<String> pluginPropertiesString,
@HeaderParam(HDR_CREATED_BY) final String createdBy,
@HeaderParam(HDR_REASON) final String reason,
@HeaderParam(HDR_COMMENT) final String comment,
@@ -273,12 +283,19 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
verifyNonNullOrEmpty(json, "InvoicePaymentTransactionJson body should be specified");
verifyNonNullOrEmpty(json.getTransactionExternalKey(), "InvoicePaymentTransactionJson transactionExternalKey needs to be set");
- final CallContext callContext = context.createCallContextNoAccountId(createdBy, reason, comment, request);
- final Payment payment = paymentApi.getPayment(paymentId, false, false, ImmutableList.<PluginProperty>of(), callContext);
- final Account account = accountUserApi.getAccountById(payment.getAccountId(), callContext);
+ final CallContext callContextNoAccountId = context.createCallContextNoAccountId(createdBy, reason, comment, request);
+ final Payment payment = paymentApi.getPayment(paymentId, false, false, ImmutableList.<PluginProperty>of(), callContextNoAccountId);
+ final Account account = accountUserApi.getAccountById(payment.getAccountId(), callContextNoAccountId);
+ final CallContext callContext = context.createCallContextWithAccountId(account.getId(), createdBy, reason, comment, request);
- final Payment result = paymentApi.createChargebackReversalWithPaymentControl(account, payment.getId(), json.getEffectiveDate(), json.getTransactionExternalKey(), createInvoicePaymentControlPluginApiPaymentOptions(false), callContext);
- return uriBuilder.buildResponse(uriInfo, InvoicePaymentResource.class, "getInvoicePayment", result.getId(), request);
+ invoicePaymentApi.createChargebackReversalForInvoicePayment(account,
+ payment.getId(),
+ json.getEffectiveDate(),
+ json.getTransactionExternalKey(),
+ extractPluginProperties(pluginPropertiesString),
+ createInvoicePaymentControlPluginApiPaymentOptions(false),
+ callContext);
+ return uriBuilder.buildResponse(uriInfo, InvoicePaymentResource.class, "getInvoicePayment", paymentId, request);
}
@TimedResource(name = "completeInvoicePaymentTransaction")
diff --git a/payment/src/main/java/org/killbill/billing/payment/api/DefaultInvoicePaymentApi.java b/payment/src/main/java/org/killbill/billing/payment/api/DefaultInvoicePaymentApi.java
index c836e97..037298a 100644
--- a/payment/src/main/java/org/killbill/billing/payment/api/DefaultInvoicePaymentApi.java
+++ b/payment/src/main/java/org/killbill/billing/payment/api/DefaultInvoicePaymentApi.java
@@ -150,6 +150,50 @@ public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
}
@Override
+ public InvoicePayment createChargebackForInvoicePayment(final Account account,
+ final UUID paymentId,
+ final BigDecimal amount,
+ final Currency currency,
+ final DateTime effectiveDate,
+ final String originalPaymentTransactionExternalKey,
+ final Iterable<PluginProperty> properties,
+ final PaymentOptions paymentOptions,
+ final CallContext context) throws PaymentApiException {
+ final String paymentTransactionExternalKey = MoreObjects.firstNonNull(originalPaymentTransactionExternalKey, UUIDs.randomUUID().toString());
+ paymentApi.createChargebackWithPaymentControl(account,
+ paymentId,
+ amount,
+ currency,
+ effectiveDate,
+ paymentTransactionExternalKey,
+ // properties, // TODO API change?
+ InvoicePaymentPaymentOptions.create(paymentOptions),
+ context);
+
+ return invoiceInternalApi.getInvoicePaymentByCookieId(paymentTransactionExternalKey, context);
+ }
+
+ @Override
+ public InvoicePayment createChargebackReversalForInvoicePayment(final Account account,
+ final UUID paymentId,
+ final DateTime effectiveDate,
+ final String originalPaymentTransactionExternalKey,
+ final Iterable<PluginProperty> properties,
+ final PaymentOptions paymentOptions,
+ final CallContext context) throws PaymentApiException {
+ final String paymentTransactionExternalKey = MoreObjects.firstNonNull(originalPaymentTransactionExternalKey, UUIDs.randomUUID().toString());
+ paymentApi.createChargebackReversalWithPaymentControl(account,
+ paymentId,
+ effectiveDate,
+ paymentTransactionExternalKey,
+ // properties, // TODO API change?
+ InvoicePaymentPaymentOptions.create(paymentOptions),
+ context);
+
+ return invoiceInternalApi.getInvoicePaymentByCookieId(paymentTransactionExternalKey, context);
+ }
+
+ @Override
public List<InvoicePayment> getInvoicePayments(final UUID paymentId, final TenantContext context) {
return invoiceInternalApi.getInvoicePayments(paymentId, context);
}
pom.xml 2(+1 -1)
diff --git a/pom.xml b/pom.xml
index db1a440..9e2d974 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,7 +21,7 @@
<parent>
<artifactId>killbill-oss-parent</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.141.87</version>
+ <version>0.141.89-SNAPSHOT</version>
</parent>
<artifactId>killbill</artifactId>
<version>0.19.17-SNAPSHOT</version>
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestChargeback.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestChargeback.java
index 49193af..d4b4778 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestChargeback.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestChargeback.java
@@ -140,6 +140,11 @@ public class TestChargeback extends TestJaxrsBase {
}
private void createAndVerifyChargeback(final InvoicePayment payment) throws KillBillClientException {
+ List<Invoice> invoices = accountApi.getInvoicesForAccount(payment.getAccountId(), null, requestOptions);
+ // We should have two invoices, one for the trial (zero dollar amount) and one for the first month
+ Assert.assertEquals(invoices.size(), 2);
+ Assert.assertEquals(invoices.get(1).getBalance().compareTo(BigDecimal.ZERO), 0);
+
// Create the chargeback
final InvoicePaymentTransaction chargeback = new InvoicePaymentTransaction();
chargeback.setPaymentId(payment.getPaymentId());
@@ -158,6 +163,11 @@ public class TestChargeback extends TestJaxrsBase {
Assert.assertEquals(transactions.size(), 1);
assertEquals(transactions.get(0).getAmount().compareTo(chargeback.getAmount()), 0);
assertEquals(transactions.get(0).getPaymentId(), chargeback.getPaymentId());
+
+ // Verify invoice balance
+ invoices = accountApi.getInvoicesForAccount(payment.getAccountId(), null, requestOptions);
+ Assert.assertEquals(invoices.size(), 2);
+ Assert.assertEquals(invoices.get(1).getBalance().compareTo(BigDecimal.ZERO), 1);
}
private InvoicePayment createAccountWithInvoiceAndPayment() throws Exception {