killbill-memoizeit
Changes
invoice/src/main/java/org/killbill/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java 11(+11 -0)
Details
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java b/invoice/src/main/java/org/killbill/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
index 7949310..910a525 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
@@ -80,6 +80,17 @@ public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
}
@Override
+ public List<InvoicePayment> getInvoicePaymentsByAccount(final UUID accountId, final TenantContext context) {
+ return ImmutableList.<InvoicePayment>copyOf(Collections2.transform(dao.getInvoicePaymentsByAccount(internalCallContextFactory.createInternalTenantContext(accountId, ObjectType.ACCOUNT, context)),
+ new Function<InvoicePaymentModelDao, InvoicePayment>() {
+ @Override
+ public InvoicePayment apply(final InvoicePaymentModelDao input) {
+ return new DefaultInvoicePayment(input);
+ }
+ }));
+ }
+
+ @Override
public InvoicePayment getInvoicePaymentForAttempt(final UUID paymentId, final TenantContext context) {
final List<InvoicePayment> invoicePayments = getInvoicePayments(paymentId, context);
if (invoicePayments.size() == 0) {
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/api/user/DefaultInvoiceUserApi.java b/invoice/src/main/java/org/killbill/billing/invoice/api/user/DefaultInvoiceUserApi.java
index 5675180..34474c8 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/api/user/DefaultInvoiceUserApi.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/api/user/DefaultInvoiceUserApi.java
@@ -117,6 +117,17 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
}
@Override
+ public Invoice getInvoiceByPayment(final UUID paymentId, final TenantContext context) throws InvoiceApiException {
+ final InternalTenantContext tenantContext = internalCallContextFactory.createInternalTenantContext(context);
+ final UUID invoiceId = dao.getInvoiceIdByPaymentId(paymentId, tenantContext);
+ if (invoiceId == null) {
+ throw new InvoiceApiException(ErrorCode.INVOICE_NOT_FOUND, invoiceId);
+ }
+ final InvoiceModelDao invoiceModelDao = invoiceId != null ? dao.getById(invoiceId, tenantContext) : null;
+ return new DefaultInvoice(invoiceModelDao);
+ }
+
+ @Override
public Pagination<Invoice> getInvoices(final Long offset, final Long limit, final TenantContext context) {
return getEntityPaginationNoException(limit,
new SourcePaginationBuilder<InvoiceModelDao, InvoiceApiException>() {
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 a434e57..784a39a 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
@@ -126,6 +126,7 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
});
}
+
@Override
public List<InvoiceModelDao> getAllInvoicesByAccount(final InternalTenantContext context) {
return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<InvoiceModelDao>>() {
@@ -347,6 +348,16 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
}
@Override
+ public List<InvoicePaymentModelDao> getInvoicePaymentsByAccount(final InternalTenantContext context) {
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<InvoicePaymentModelDao>>() {
+ @Override
+ public List<InvoicePaymentModelDao> inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ return entitySqlDaoWrapperFactory.become(InvoicePaymentSqlDao.class).getByAccountRecordId(context);
+ }
+ });
+ }
+
+ @Override
public InvoicePaymentModelDao createRefund(final UUID paymentId, final BigDecimal requestedRefundAmount, final boolean isInvoiceAdjusted,
final Map<UUID, BigDecimal> invoiceItemIdsWithNullAmounts, final String transactionExternalKey,
final InternalCallContext context) throws InvoiceApiException {
@@ -359,7 +370,13 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
final InvoiceSqlDao transInvoiceDao = entitySqlDaoWrapperFactory.become(InvoiceSqlDao.class);
- final InvoicePaymentModelDao payment = transactional.getByPaymentId(paymentId.toString(), context);
+ final List<InvoicePaymentModelDao> paymentsForId = transactional.getByPaymentId(paymentId.toString(), context);
+ final InvoicePaymentModelDao payment = Iterables.tryFind(paymentsForId, new Predicate<InvoicePaymentModelDao>() {
+ @Override
+ public boolean apply(final InvoicePaymentModelDao input) {
+ return input.getType() == InvoicePaymentType.ATTEMPT;
+ }
+ }).orNull();
if (payment == null) {
throw new InvoiceApiException(ErrorCode.INVOICE_PAYMENT_BY_ATTEMPT_NOT_FOUND, paymentId);
}
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 081ca54..8fa500d 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
@@ -52,6 +52,8 @@ public interface InvoiceDao extends EntityDao<InvoiceModelDao, Invoice, InvoiceA
List<InvoicePaymentModelDao> getInvoicePayments(UUID paymentId, InternalTenantContext context);
+ List<InvoicePaymentModelDao> getInvoicePaymentsByAccount(InternalTenantContext context);
+
BigDecimal getAccountBalance(UUID accountId, InternalTenantContext context);
public BigDecimal getAccountCBA(UUID accountId, InternalTenantContext context);
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoicePaymentSqlDao.java b/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoicePaymentSqlDao.java
index 755f4a2..be618d6 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoicePaymentSqlDao.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoicePaymentSqlDao.java
@@ -40,7 +40,7 @@ import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
public interface InvoicePaymentSqlDao extends EntitySqlDao<InvoicePaymentModelDao, InvoicePayment> {
@SqlQuery
- public InvoicePaymentModelDao getByPaymentId(@Bind("paymentId") final String paymentId,
+ public List<InvoicePaymentModelDao> getByPaymentId(@Bind("paymentId") final String paymentId,
@BindBean final InternalTenantContext context);
@SqlBatch(transactional = false)
diff --git a/invoice/src/main/resources/org/killbill/billing/invoice/dao/InvoicePaymentSqlDao.sql.stg b/invoice/src/main/resources/org/killbill/billing/invoice/dao/InvoicePaymentSqlDao.sql.stg
index 8d1383d..fe0410f 100644
--- a/invoice/src/main/resources/org/killbill/billing/invoice/dao/InvoicePaymentSqlDao.sql.stg
+++ b/invoice/src/main/resources/org/killbill/billing/invoice/dao/InvoicePaymentSqlDao.sql.stg
@@ -35,6 +35,7 @@ getByPaymentId() ::= <<
FROM <tableName()>
WHERE payment_id = :paymentId
<AND_CHECK_TENANT()>
+ <defaultOrderBy()>
;
>>
@@ -43,6 +44,7 @@ getPaymentsForCookieId() ::= <<
FROM <tableName()>
WHERE payment_cookie_id = :paymentCookieId
<AND_CHECK_TENANT()>
+ <defaultOrderBy()>
;
>>
@@ -51,6 +53,7 @@ getPaymentsForInvoice() ::= <<
FROM <tableName()>
WHERE invoice_id = :invoiceId
<AND_CHECK_TENANT()>
+ <defaultOrderBy()>
;
>>
@@ -59,6 +62,7 @@ getInvoicePayments() ::= <<
FROM <tableName()>
WHERE payment_id = :paymentId
<AND_CHECK_TENANT()>
+ <defaultOrderBy()>
;
>>
diff --git a/invoice/src/test/java/org/killbill/billing/invoice/api/MockInvoicePaymentApi.java b/invoice/src/test/java/org/killbill/billing/invoice/api/MockInvoicePaymentApi.java
index d284698..3e5098f 100644
--- a/invoice/src/test/java/org/killbill/billing/invoice/api/MockInvoicePaymentApi.java
+++ b/invoice/src/test/java/org/killbill/billing/invoice/api/MockInvoicePaymentApi.java
@@ -74,6 +74,11 @@ public class MockInvoicePaymentApi implements InvoicePaymentApi {
}
@Override
+ public List<InvoicePayment> getInvoicePaymentsByAccount(final UUID uuid, final TenantContext tenantContext) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
public InvoicePayment getInvoicePaymentForAttempt(final UUID paymentId, final TenantContext context) {
for (final InvoicePayment invoicePayment : invoicePayments) {
if (paymentId.equals(invoicePayment.getPaymentId()) && invoicePayment.getType() == InvoicePaymentType.ATTEMPT) {
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 f55afe8..6c3e872 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
@@ -33,14 +33,17 @@ import org.killbill.billing.callcontext.InternalTenantContext;
import org.killbill.billing.catalog.api.Currency;
import org.killbill.billing.invoice.api.Invoice;
import org.killbill.billing.invoice.api.InvoiceApiException;
+import org.killbill.billing.invoice.api.InvoicePaymentType;
import org.killbill.billing.invoice.api.user.DefaultInvoiceCreationEvent;
import org.killbill.billing.util.entity.DefaultPagination;
import org.killbill.billing.util.entity.Pagination;
import org.killbill.billing.util.entity.dao.MockEntityDaoBase;
import org.killbill.bus.api.PersistentBus;
+import com.google.common.base.Predicate;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
+import com.google.common.collect.Iterables;
import com.google.inject.Inject;
public class MockInvoiceDao extends MockEntityDaoBase<InvoiceModelDao, Invoice, InvoiceApiException> implements InvoiceDao {
@@ -124,7 +127,6 @@ public class MockInvoiceDao extends MockEntityDaoBase<InvoiceModelDao, Invoice,
@Override
public List<InvoiceModelDao> getInvoicesByAccount(final LocalDate fromDate, final InternalTenantContext context) {
final List<InvoiceModelDao> invoicesForAccount = new ArrayList<InvoiceModelDao>();
-
synchronized (monitor) {
final UUID accountId = accountRecordIds.inverse().get(context.getAccountRecordId());
for (final InvoiceModelDao invoice : getAll(context)) {
@@ -199,6 +201,23 @@ public class MockInvoiceDao extends MockEntityDaoBase<InvoiceModelDao, Invoice,
}
@Override
+ public List<InvoicePaymentModelDao> getInvoicePaymentsByAccount(final InternalTenantContext context) {
+
+ throw new UnsupportedOperationException();
+/*
+ InvoicePaymentModelDao does not export accountId ?
+
+ final List<InvoicePaymentModelDao> invoicesForAccount = new ArrayList<InvoicePaymentModelDao>();
+ synchronized (monitor) {
+ final UUID accountId = accountRecordIds.inverse().get(context.getAccountRecordId());
+ for (final InvoicePaymentModelDao payment : payments.values()) {
+ }
+ }
+ return null;
+*/
+ }
+
+ @Override
public void notifyOfPayment(final InvoicePaymentModelDao invoicePayment, final InternalCallContext context) {
synchronized (monitor) {
payments.put(invoicePayment.getId(), invoicePayment);
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/AccountTimelineJson.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/AccountTimelineJson.java
index 9a111e2..c6adaab 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/AccountTimelineJson.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/AccountTimelineJson.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.UUID;
@@ -32,6 +33,7 @@ import org.killbill.billing.invoice.api.InvoiceItem;
import org.killbill.billing.invoice.api.InvoiceItemType;
import org.killbill.billing.invoice.api.InvoicePayment;
import org.killbill.billing.payment.api.DirectPayment;
+import org.killbill.billing.payment.api.DirectPaymentTransaction;
import org.killbill.billing.util.audit.AccountAuditLogs;
import org.killbill.billing.util.audit.AuditLog;
@@ -57,44 +59,14 @@ public class AccountTimelineJson {
this.payments = payments;
}
- private String getBundleExternalKey(final UUID invoiceId, final List<Invoice> invoices, final List<SubscriptionBundle> bundles) {
- for (final Invoice cur : invoices) {
- if (cur.getId().equals(invoiceId)) {
- return getBundleExternalKey(cur, bundles);
- }
- }
- return null;
- }
-
- private String getBundleExternalKey(final Invoice invoice, final List<SubscriptionBundle> bundles) {
- final Set<UUID> b = new HashSet<UUID>();
- for (final InvoiceItem cur : invoice.getInvoiceItems()) {
- b.add(cur.getBundleId());
- }
- boolean first = true;
- final StringBuilder tmp = new StringBuilder();
- for (final UUID cur : b) {
- for (final SubscriptionBundle bt : bundles) {
- if (bt.getId().equals(cur)) {
- if (!first) {
- tmp.append(",");
- }
- tmp.append(bt.getExternalKey());
- first = false;
- break;
- }
- }
- }
- return tmp.toString();
- }
public AccountTimelineJson(final Account account, final List<Invoice> invoices, final List<DirectPayment> payments,
- final List<SubscriptionBundle> bundles, final Multimap<UUID, DirectPayment> refundsByPayment,
- final Multimap<UUID, InvoicePayment> chargebacksByPayment, final AccountAuditLogs accountAuditLogs) {
+ final Map<UUID, UUID> invoiceIdByPayment, final List<SubscriptionBundle> bundles,
+ final Multimap<UUID, DirectPaymentTransaction> refundsByPayment,
+ final Multimap<UUID, DirectPaymentTransaction> chargebacksByPayment, final AccountAuditLogs accountAuditLogs) {
this.account = new AccountJson(account, null, null, accountAuditLogs);
this.bundles = new LinkedList<BundleJson>();
for (final SubscriptionBundle bundle : bundles) {
- final List<AuditLog> bundleAuditLogs = accountAuditLogs.getAuditLogsForBundle(bundle.getId());
final BundleJson jsonWithSubscriptions = new BundleJson(bundle, accountAuditLogs);
this.bundles.add(jsonWithSubscriptions);
}
@@ -122,23 +94,22 @@ public class AccountTimelineJson {
this.payments = new LinkedList<PaymentJson>();
for (final DirectPayment payment : payments) {
final List<RefundJson> refunds = new ArrayList<RefundJson>();
- for (final DirectPayment refund : refundsByPayment.get(payment.getId())) {
+ for (final DirectPaymentTransaction refund : refundsByPayment.get(payment.getId())) {
// STEPH add adjusted invoice items? and also audit_logs
- //final List<AuditLog> auditLogs = accountAuditLogs.getAuditLogsForRefund(refund.getId());
- // refunds.add(new RefundJson(refund, null, auditLogs));
+ final List<AuditLog> auditLogs = accountAuditLogs.getAuditLogsForPaymentTransaction(refund.getId());
+ refunds.add(new RefundJson(refund, null, auditLogs));
}
final List<ChargebackJson> chargebacks = new ArrayList<ChargebackJson>();
- for (final InvoicePayment chargeback : chargebacksByPayment.get(payment.getId())) {
- // STEPH
- //final List<AuditLog> auditLogs = accountAuditLogs.getAuditLogsForChargeback(chargeback.getId());
- //chargebacks.add(new ChargebackJson(payment.getAccountId(), chargeback, auditLogs));
+ for (final DirectPaymentTransaction chargeback : chargebacksByPayment.get(payment.getId())) {
+ final List<AuditLog> auditLogs = accountAuditLogs.getAuditLogsForPaymentTransaction(chargeback.getId());
+ chargebacks.add(new ChargebackJson(payment.getAccountId(), chargeback, auditLogs));
}
final List<AuditLog> auditLogs = accountAuditLogs.getAuditLogsForPayment(payment.getId());
+ final UUID invoiceId = invoiceIdByPayment.get(payment.getId());
this.payments.add(new PaymentJson(payment,
- // TODO [PAYMENT]
- null, //getBundleExternalKey(payment.getInvoiceId(), invoices, bundles),
+ getBundleExternalKey(invoiceId, invoices, bundles),
refunds,
chargebacks,
auditLogs));
@@ -208,4 +179,38 @@ public class AccountTimelineJson {
result = 31 * result + (payments != null ? payments.hashCode() : 0);
return result;
}
+
+ private String getBundleExternalKey(final UUID invoiceId, final List<Invoice> invoices, final List<SubscriptionBundle> bundles) {
+ if (invoiceId == null) {
+ return null;
+ }
+ for (final Invoice cur : invoices) {
+ if (cur.getId().equals(invoiceId)) {
+ return getBundleExternalKey(cur, bundles);
+ }
+ }
+ return null;
+ }
+
+ private String getBundleExternalKey(final Invoice invoice, final List<SubscriptionBundle> bundles) {
+ final Set<UUID> b = new HashSet<UUID>();
+ for (final InvoiceItem cur : invoice.getInvoiceItems()) {
+ b.add(cur.getBundleId());
+ }
+ boolean first = true;
+ final StringBuilder tmp = new StringBuilder();
+ for (final UUID cur : b) {
+ for (final SubscriptionBundle bt : bundles) {
+ if (bt.getId().equals(cur)) {
+ if (!first) {
+ tmp.append(",");
+ }
+ tmp.append(bt.getExternalKey());
+ first = false;
+ break;
+ }
+ }
+ }
+ return tmp.toString();
+ }
}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/ChargebackJson.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/ChargebackJson.java
index ee42e75..b1437be 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/ChargebackJson.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/ChargebackJson.java
@@ -25,6 +25,7 @@ import javax.annotation.Nullable;
import org.joda.time.DateTime;
import org.killbill.billing.invoice.api.InvoicePayment;
+import org.killbill.billing.payment.api.DirectPaymentTransaction;
import org.killbill.billing.util.audit.AuditLog;
import com.fasterxml.jackson.annotation.JsonCreator;
@@ -33,6 +34,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
public class ChargebackJson extends JsonBase {
private final String chargebackId;
+ private final String chargedBackTransactionId;
private final String accountId;
private final DateTime requestedDate;
private final DateTime effectiveDate;
@@ -43,6 +45,7 @@ public class ChargebackJson extends JsonBase {
@JsonCreator
public ChargebackJson(@JsonProperty("chargebackId") final String chargebackId,
@JsonProperty("accountId") final String accountId,
+ @JsonProperty("chargedBackTransactionId") final String chargedBackTransactionId,
@JsonProperty("requestedDate") final DateTime requestedDate,
@JsonProperty("effectiveDate") final DateTime effectiveDate,
@JsonProperty("amount") final BigDecimal chargebackAmount,
@@ -52,6 +55,7 @@ public class ChargebackJson extends JsonBase {
super(auditLogs);
this.chargebackId = chargebackId;
this.accountId = accountId;
+ this.chargedBackTransactionId = chargedBackTransactionId;
this.requestedDate = requestedDate;
this.effectiveDate = effectiveDate;
this.amount = chargebackAmount;
@@ -59,13 +63,13 @@ public class ChargebackJson extends JsonBase {
this.currency = currency;
}
- public ChargebackJson(final UUID accountId, final InvoicePayment chargeback) {
+ public ChargebackJson(final UUID accountId, final DirectPaymentTransaction chargeback) {
this(accountId, chargeback, null);
}
- public ChargebackJson(final UUID accountId, final InvoicePayment chargeback, @Nullable final List<AuditLog> auditLogs) {
- this(chargeback.getId().toString(), accountId.toString(), chargeback.getPaymentDate(), chargeback.getPaymentDate(),
- chargeback.getAmount().negate(), chargeback.getPaymentId().toString(), chargeback.getCurrency().toString(), toAuditLogJson(auditLogs));
+ public ChargebackJson(final UUID accountId, final DirectPaymentTransaction chargeback, @Nullable final List<AuditLog> auditLogs) {
+ this(chargeback.getId().toString(), accountId.toString(), chargeback.getExternalKey(), chargeback.getCreatedDate(), chargeback.getEffectiveDate(),
+ chargeback.getAmount().negate(), chargeback.getDirectPaymentId().toString(), chargeback.getCurrency().toString(), toAuditLogJson(auditLogs));
}
public String getChargebackId() {
@@ -96,6 +100,10 @@ public class ChargebackJson extends JsonBase {
return paymentId;
}
+ public String getChargedBackTransactionId() {
+ return chargedBackTransactionId;
+ }
+
@Override
public boolean equals(final Object o) {
if (this == o) {
@@ -124,6 +132,9 @@ public class ChargebackJson extends JsonBase {
if (paymentId != null ? !paymentId.equals(that.paymentId) : that.paymentId != null) {
return false;
}
+ if (chargedBackTransactionId != null ? !chargedBackTransactionId.equals(that.chargedBackTransactionId) : that.chargedBackTransactionId != null) {
+ return false;
+ }
if (currency != null ? !currency.equals(that.currency) : that.currency != null) {
return false;
}
@@ -138,6 +149,7 @@ public class ChargebackJson extends JsonBase {
public int hashCode() {
int result = chargebackId != null ? chargebackId.hashCode() : 0;
result = 31 * result + (accountId != null ? accountId.hashCode() : 0);
+ result = 31 * result + (chargedBackTransactionId != null ? chargedBackTransactionId.hashCode() : 0);
result = 31 * result + (requestedDate != null ? requestedDate.hashCode() : 0);
result = 31 * result + (effectiveDate != null ? effectiveDate.hashCode() : 0);
result = 31 * result + (amount != null ? amount.hashCode() : 0);
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PaymentJson.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PaymentJson.java
index 7b509da..17ec357 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PaymentJson.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PaymentJson.java
@@ -33,8 +33,12 @@ import com.fasterxml.jackson.annotation.JsonProperty;
public class PaymentJson extends JsonBase {
- private final BigDecimal paidAmount;
- private final BigDecimal amount;
+ private final BigDecimal authAmount;
+ private final BigDecimal captureAmount;
+ private final BigDecimal purchaseAmount;
+ private final BigDecimal creditAmount;
+ private final BigDecimal refundAmount;
+ private final Boolean isVoid;
private final String accountId;
private final String invoiceId;
private final String paymentId;
@@ -52,8 +56,12 @@ public class PaymentJson extends JsonBase {
private final List<ChargebackJson> chargebacks;
@JsonCreator
- public PaymentJson(@JsonProperty("amount") final BigDecimal amount,
- @JsonProperty("paidAmount") final BigDecimal paidAmount,
+ public PaymentJson(@JsonProperty("authAmount") final BigDecimal authAmount,
+ @JsonProperty("captureAmount") final BigDecimal captureAmount,
+ @JsonProperty("purchaseAmount") final BigDecimal purchaseAmount,
+ @JsonProperty("creditAmount") final BigDecimal creditAmount,
+ @JsonProperty("refundAmount") final BigDecimal refundAmount,
+ @JsonProperty("isVoid") final Boolean isVoid,
@JsonProperty("accountId") final String accountId,
@JsonProperty("invoiceId") final String invoiceId,
@JsonProperty("paymentId") final String paymentId,
@@ -71,8 +79,12 @@ public class PaymentJson extends JsonBase {
@JsonProperty("chargebacks") final List<ChargebackJson> chargebacks,
@JsonProperty("auditLogs") @Nullable final List<AuditLogJson> auditLogs) {
super(auditLogs);
- this.amount = amount;
- this.paidAmount = paidAmount;
+ this.authAmount = authAmount;
+ this.captureAmount = captureAmount;
+ this.purchaseAmount = purchaseAmount;
+ this.creditAmount = creditAmount;
+ this.refundAmount = refundAmount;
+ this.isVoid = isVoid;
this.invoiceId = invoiceId;
this.accountId = accountId;
this.paymentId = paymentId;
@@ -98,19 +110,27 @@ public class PaymentJson extends JsonBase {
public PaymentJson(final DirectPayment payment, final String bundleExternalKey,
final List<RefundJson> refunds, final List<ChargebackJson> chargebacks,
@Nullable final List<AuditLog> auditLogs) {
- this(payment.getAuthAmount() /* TODO [PAYMENT] payment.getAmount() */,
- payment.getCapturedAmount() /* TODO [PAYMENT] payment.getPaidAmount() */,
+ this(payment.getAuthAmount(),
+ payment.getCapturedAmount(),
+ payment.getPurchasedAmount(),
+ payment.getCreditedAmount(),
+ payment.getRefundedAmount(),
+ payment.isAuthVoided(),
payment.getAccountId().toString(),
- null /* TODO [PAYMENT] payment.getInvoiceId().toString() */, payment.getId().toString(),
+ null,
+ payment.getId().toString(),
payment.getPaymentNumber().toString(),
payment.getPaymentMethodId().toString(),
payment.getCreatedDate(), payment.getCreatedDate(),
- 1 /* TODO [PAYMENT] payment.getAttempts().size() */,
+ 1,
payment.getCurrency().toString(),
null /*payment.getPaymentStatus().toString() */,
null /*payment.getAttempts().get(payment.getAttempts().size() - 1).getGatewayErrorCode() */,
null /*payment.getAttempts().get(payment.getAttempts().size() - 1).getGatewayErrorMsg() */,
- bundleExternalKey, refunds, chargebacks, toAuditLogJson(auditLogs));
+ bundleExternalKey,
+ refunds,
+ chargebacks,
+ toAuditLogJson(auditLogs));
}
public PaymentJson(final DirectPayment payment, final List<AuditLog> auditLogs) {
@@ -121,12 +141,28 @@ public class PaymentJson extends JsonBase {
return bundleKeys;
}
- public BigDecimal getPaidAmount() {
- return paidAmount;
+ public BigDecimal getAuthAmount() {
+ return authAmount;
}
- public BigDecimal getAmount() {
- return amount;
+ public BigDecimal getCaptureAmount() {
+ return captureAmount;
+ }
+
+ public BigDecimal getPurchaseAmount() {
+ return purchaseAmount;
+ }
+
+ public BigDecimal getCreditAmount() {
+ return creditAmount;
+ }
+
+ public BigDecimal getRefundAmount() {
+ return refundAmount;
+ }
+
+ public Boolean getIsVoid() {
+ return isVoid;
}
public String getAccountId() {
@@ -188,8 +224,12 @@ public class PaymentJson extends JsonBase {
@Override
public String toString() {
return "PaymentJson{" +
- "paidAmount=" + paidAmount +
- ", amount=" + amount +
+ "authAmount=" + authAmount +
+ ", captureAmount=" + captureAmount +
+ ", purchaseAmount=" + purchaseAmount +
+ ", creditAmount=" + creditAmount +
+ ", refundAmount=" + refundAmount +
+ ", isVoid=" + isVoid +
", accountId='" + accountId + '\'' +
", invoiceId='" + invoiceId + '\'' +
", paymentId='" + paymentId + '\'' +
@@ -222,7 +262,22 @@ public class PaymentJson extends JsonBase {
if (accountId != null ? !accountId.equals(that.accountId) : that.accountId != null) {
return false;
}
- if (amount != null ? amount.compareTo(that.amount) != 0 : that.amount != null) {
+ if (authAmount != null ? authAmount.compareTo(that.authAmount) != 0 : that.authAmount != null) {
+ return false;
+ }
+ if (captureAmount != null ? captureAmount.compareTo(that.captureAmount) != 0 : that.captureAmount != null) {
+ return false;
+ }
+ if (purchaseAmount != null ? purchaseAmount.compareTo(that.purchaseAmount) != 0 : that.purchaseAmount != null) {
+ return false;
+ }
+ if (creditAmount != null ? creditAmount.compareTo(that.creditAmount) != 0 : that.creditAmount != null) {
+ return false;
+ }
+ if (refundAmount != null ? refundAmount.compareTo(that.refundAmount) != 0 : that.refundAmount != null) {
+ return false;
+ }
+ if (isVoid != null ? !isVoid.equals(that.isVoid) : that.isVoid != null) {
return false;
}
if (bundleKeys != null ? !bundleKeys.equals(that.bundleKeys) : that.bundleKeys != null) {
@@ -246,9 +301,6 @@ public class PaymentJson extends JsonBase {
if (invoiceId != null ? !invoiceId.equals(that.invoiceId) : that.invoiceId != null) {
return false;
}
- if (paidAmount != null ? paidAmount.compareTo(that.paidAmount) != 0 : that.paidAmount != null) {
- return false;
- }
if (paymentId != null ? !paymentId.equals(that.paymentId) : that.paymentId != null) {
return false;
}
@@ -275,8 +327,12 @@ public class PaymentJson extends JsonBase {
@Override
public int hashCode() {
- int result = paidAmount != null ? paidAmount.hashCode() : 0;
- result = 31 * result + (amount != null ? amount.hashCode() : 0);
+ int result = authAmount != null ? authAmount.hashCode() : 0;
+ result = 31 * result + (captureAmount != null ? captureAmount.hashCode() : 0);
+ result = 31 * result + (purchaseAmount != null ? purchaseAmount.hashCode() : 0);
+ result = 31 * result + (creditAmount != null ? creditAmount.hashCode() : 0);
+ result = 31 * result + (refundAmount != null ? refundAmount.hashCode() : 0);
+ result = 31 * result + (isVoid != null ? isVoid.hashCode() : 0);
result = 31 * result + (accountId != null ? accountId.hashCode() : 0);
result = 31 * result + (invoiceId != null ? invoiceId.hashCode() : 0);
result = 31 * result + (paymentId != null ? paymentId.hashCode() : 0);
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
index acd2457..e025dc0 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
@@ -23,10 +23,13 @@ import java.net.URI;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
+import java.util.Map;
import java.util.UUID;
+import javax.annotation.Nullable;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
@@ -82,6 +85,7 @@ import org.killbill.billing.overdue.OverdueUserApi;
import org.killbill.billing.overdue.config.api.OverdueException;
import org.killbill.billing.payment.api.DirectPayment;
import org.killbill.billing.payment.api.DirectPaymentApi;
+import org.killbill.billing.payment.api.DirectPaymentTransaction;
import org.killbill.billing.payment.api.PaymentApiException;
import org.killbill.billing.payment.api.PaymentMethod;
import org.killbill.billing.payment.api.PluginProperty;
@@ -122,8 +126,6 @@ public class AccountResource extends JaxRsResourceBase {
private final SubscriptionApi subscriptionApi;
private final InvoiceUserApi invoiceApi;
private final InvoicePaymentApi invoicePaymentApi;
- private final DirectPaymentApi paymentApi;
- private final DirectPaymentApi directPaymentApi;
private final OverdueUserApi overdueApi;
@Inject
@@ -132,7 +134,6 @@ public class AccountResource extends JaxRsResourceBase {
final InvoiceUserApi invoiceApi,
final InvoicePaymentApi invoicePaymentApi,
final DirectPaymentApi paymentApi,
- final DirectPaymentApi directPaymentApi,
final TagUserApi tagUserApi,
final AuditUserApi auditUserApi,
final CustomFieldUserApi customFieldUserApi,
@@ -140,12 +141,10 @@ public class AccountResource extends JaxRsResourceBase {
final OverdueUserApi overdueApi,
final Clock clock,
final Context context) {
- super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountApi, clock, context);
+ super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountApi, paymentApi, clock, context);
this.subscriptionApi = subscriptionApi;
this.invoiceApi = invoiceApi;
this.invoicePaymentApi = invoicePaymentApi;
- this.paymentApi = paymentApi;
- this.directPaymentApi = directPaymentApi;
this.overdueApi = overdueApi;
}
@@ -336,17 +335,17 @@ public class AccountResource extends JaxRsResourceBase {
final List<DirectPayment> payments = paymentApi.getAccountPayments(accountId, false, ImmutableList.<PluginProperty>of(), tenantContext);
// Get the refunds
- final List<DirectPayment> refunds = null; // STEPH paymentApi.getAccountRefunds(account, tenantContext);
- final Multimap<UUID, DirectPayment> refundsByPayment = ArrayListMultimap.<UUID, DirectPayment>create();
- for (final DirectPayment refund : refunds) {
- refundsByPayment.put(refund.getId(), refund);
+ final Iterable<DirectPaymentTransaction> refunds = getDirectPaymentTransactions(payments, TransactionType.REFUND);
+ final Multimap<UUID, DirectPaymentTransaction> refundsByPayment = ArrayListMultimap.<UUID, DirectPaymentTransaction>create();
+ for (final DirectPaymentTransaction refund : refunds) {
+ refundsByPayment.put(refund.getDirectPaymentId(), refund);
}
// Get the chargebacks
- final List<InvoicePayment> chargebacks = invoicePaymentApi.getChargebacksByAccountId(accountId, tenantContext);
- final Multimap<UUID, InvoicePayment> chargebacksByPayment = ArrayListMultimap.<UUID, InvoicePayment>create();
- for (final InvoicePayment chargeback : chargebacks) {
- chargebacksByPayment.put(chargeback.getPaymentId(), chargeback);
+ final Iterable<DirectPaymentTransaction> chargebacks = getDirectPaymentTransactions(payments, TransactionType.CHARGEBACK);
+ final Multimap<UUID, DirectPaymentTransaction> chargebacksByPayment = ArrayListMultimap.<UUID, DirectPaymentTransaction>create();
+ for (final DirectPaymentTransaction chargeback : chargebacks) {
+ chargebacksByPayment.put(chargeback.getDirectPaymentId(), chargeback);
}
// Get the bundles
@@ -355,7 +354,12 @@ public class AccountResource extends JaxRsResourceBase {
// Get all audit logs
final AccountAuditLogs accountAuditLogs = auditUserApi.getAccountAuditLogs(accountId, auditMode.getLevel(), tenantContext);
- final AccountTimelineJson json = new AccountTimelineJson(account, invoices, payments, bundles,
+ final List<InvoicePayment> invoicePayments = invoicePaymentApi.getInvoicePaymentsByAccount(accountId, tenantContext);
+ final Map<UUID, UUID> invoicesIdByPayment = new HashMap<UUID, UUID>();
+ for (InvoicePayment cur : invoicePayments) {
+ invoicesIdByPayment.put(cur.getPaymentId(), cur.getInvoiceId());
+ }
+ final AccountTimelineJson json = new AccountTimelineJson(account, invoices, payments, invoicesIdByPayment, bundles,
refundsByPayment, chargebacksByPayment,
accountAuditLogs);
return Response.status(Status.OK).entity(json).build();
@@ -499,11 +503,7 @@ public class AccountResource extends JaxRsResourceBase {
final BigDecimal amountToPay = (remainingRequestPayment.compareTo(invoice.getBalance()) >= 0) ?
invoice.getBalance() : remainingRequestPayment;
if (amountToPay.compareTo(BigDecimal.ZERO) > 0) {
- if (externalPayment) {
- // STEPH paymentApi.createExternalPayment(account, invoice.getId(), amountToPay, callContext);
- } else {
- // STEPH paymentApi.createPayment(account, invoice.getId(), amountToPay, pluginProperties, callContext);
- }
+ createPurchaseForInvoice(account, invoice.getId(), amountToPay, externalPayment, callContext);
}
remainingRequestPayment = remainingRequestPayment.subtract(amountToPay);
if (remainingRequestPayment.compareTo(BigDecimal.ZERO) == 0) {
@@ -520,6 +520,7 @@ public class AccountResource extends JaxRsResourceBase {
return Response.status(Status.OK).build();
}
+
@POST
@Path("/{accountId:" + UUID_PATTERN + "}/" + PAYMENT_METHODS)
@Consumes(APPLICATION_JSON)
@@ -550,7 +551,7 @@ public class AccountResource extends JaxRsResourceBase {
final UUID paymentMethodId = paymentApi.addPaymentMethod(data.getExternalKey(), account, data.getPluginName(), isDefault, data.getPluginDetail(), pluginProperties, callContext);
if (payAllUnpaidInvoices && unpaidInvoices.size() > 0) {
for (final Invoice invoice : unpaidInvoices) {
- // STEPH paymentApi.createPayment(account, invoice.getId(), invoice.getBalance(), pluginProperties, callContext);
+ createPurchaseForInvoice(account, invoice.getId(), invoice.getBalance(), false, callContext);
}
}
return uriBuilder.buildResponse(PaymentMethodResource.class, "getPaymentMethod", paymentMethodId, uriInfo.getBaseUri().toString());
@@ -601,7 +602,7 @@ public class AccountResource extends JaxRsResourceBase {
if (payAllUnpaidInvoices) {
final Collection<Invoice> unpaidInvoices = invoiceApi.getUnpaidInvoicesByAccountId(account.getId(), clock.getUTCToday(), callContext);
for (final Invoice invoice : unpaidInvoices) {
- // STEPH paymentApi.createPayment(account, invoice.getId(), invoice.getBalance(), pluginProperties, callContext);
+ createPurchaseForInvoice(account, invoice.getId(), invoice.getBalance(), false, callContext);
}
}
return Response.status(Status.OK).build();
@@ -619,7 +620,7 @@ public class AccountResource extends JaxRsResourceBase {
@javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException {
final UUID accountId = UUID.fromString(accountIdStr);
final TenantContext tenantContext = context.createContext(request);
- final List<DirectPayment> payments = directPaymentApi.getAccountPayments(accountId, withPluginInfo, ImmutableList.<PluginProperty>of(), tenantContext);
+ final List<DirectPayment> payments = paymentApi.getAccountPayments(accountId, withPluginInfo, ImmutableList.<PluginProperty>of(), tenantContext);
final AccountAuditLogs accountAuditLogs = auditUserApi.getAccountAuditLogs(accountId, auditMode.getLevel(), tenantContext);
final List<DirectPaymentJson> result = ImmutableList.copyOf(Iterables.transform(payments, new Function<DirectPayment, DirectPaymentJson>() {
@Override
@@ -655,17 +656,17 @@ public class AccountResource extends JaxRsResourceBase {
final DirectPayment result;
switch (transactionType) {
case AUTHORIZE:
- result = directPaymentApi.createAuthorization(account, paymentMethodId, directPaymentId, json.getAmount(), currency,
+ result = paymentApi.createAuthorization(account, paymentMethodId, directPaymentId, json.getAmount(), currency,
json.getDirectPaymentExternalKey(), json.getDirectTransactionExternalKey(),
pluginProperties, callContext);
break;
case PURCHASE:
- result = directPaymentApi.createPurchase(account, paymentMethodId, directPaymentId, json.getAmount(), currency,
+ result = paymentApi.createPurchase(account, paymentMethodId, directPaymentId, json.getAmount(), currency,
json.getDirectPaymentExternalKey(), json.getDirectTransactionExternalKey(),
pluginProperties, callContext);
break;
case CREDIT:
- result = directPaymentApi.createCredit(account, paymentMethodId, directPaymentId, json.getAmount(), currency,
+ result = paymentApi.createCredit(account, paymentMethodId, directPaymentId, json.getAmount(), currency,
json.getDirectPaymentExternalKey(), json.getDirectTransactionExternalKey(),
pluginProperties, callContext);
break;
@@ -682,11 +683,15 @@ public class AccountResource extends JaxRsResourceBase {
@Path("/{accountId:" + UUID_PATTERN + "}/" + CHARGEBACKS)
@Produces(APPLICATION_JSON)
public Response getChargebacksForAccount(@PathParam("accountId") final String accountIdStr,
- @javax.ws.rs.core.Context final HttpServletRequest request) {
+ @javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException {
+
final UUID accountId = UUID.fromString(accountIdStr);
- final List<InvoicePayment> chargebacks = invoicePaymentApi.getChargebacksByAccountId(accountId, context.createContext(request));
+ final TenantContext tenantContext = context.createContext(request);
+
+ final List<DirectPayment> payments = paymentApi.getAccountPayments(accountId, false, ImmutableList.<PluginProperty>of(), tenantContext);
+ final Iterable<DirectPaymentTransaction> transactions = getDirectPaymentTransactions(payments, TransactionType.CHARGEBACK);
final List<ChargebackJson> chargebacksJson = new ArrayList<ChargebackJson>();
- for (final InvoicePayment chargeback : chargebacks) {
+ for (final DirectPaymentTransaction chargeback : transactions) {
chargebacksJson.add(new ChargebackJson(accountId, chargeback));
}
return Response.status(Response.Status.OK).entity(chargebacksJson).build();
@@ -703,15 +708,16 @@ public class AccountResource extends JaxRsResourceBase {
final TenantContext tenantContext = context.createContext(request);
final Account account = accountUserApi.getAccountById(UUID.fromString(accountId), tenantContext);
- final List<DirectPayment> refunds = null; // STEPH paymentApi.getAccountRefunds(account, tenantContext);
- final List<RefundJson> result = new ArrayList<RefundJson>(Collections2.transform(refunds, new Function<DirectPayment, RefundJson>() {
+
+ final List<DirectPayment> payments = paymentApi.getAccountPayments(account.getId(), false, ImmutableList.<PluginProperty>of(), tenantContext);
+ final Iterable<DirectPaymentTransaction> transactions = getDirectPaymentTransactions(payments, TransactionType.REFUND);
+
+ final Iterable<RefundJson> result = Iterables.transform(transactions, new Function<DirectPaymentTransaction, RefundJson>() {
@Override
- public RefundJson apply(final DirectPayment input) {
- // TODO Return adjusted items and audits
- return null; // STEPH new RefundJson(input, null, null);
+ public RefundJson apply(final DirectPaymentTransaction input) {
+ return new RefundJson(input, null, null);
}
- }));
-
+ });
return Response.status(Status.OK).entity(result).build();
}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/BundleResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/BundleResource.java
index f3f72a3..9683bd1 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/BundleResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/BundleResource.java
@@ -45,6 +45,7 @@ import org.killbill.billing.ObjectType;
import org.killbill.billing.account.api.AccountApiException;
import org.killbill.billing.account.api.AccountUserApi;
import org.killbill.billing.catalog.api.BillingActionPolicy;
+import org.killbill.billing.payment.api.DirectPaymentApi;
import org.killbill.clock.Clock;
import org.killbill.billing.entitlement.api.EntitlementApi;
import org.killbill.billing.entitlement.api.EntitlementApiException;
@@ -88,9 +89,10 @@ public class BundleResource extends JaxRsResourceBase {
final AccountUserApi accountUserApi,
final SubscriptionApi subscriptionApi,
final EntitlementApi entitlementApi,
+ final DirectPaymentApi paymentApi,
final Clock clock,
final Context context) {
- super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
+ super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
this.entitlementApi = entitlementApi;
this.subscriptionApi = subscriptionApi;
}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java
index 6976296..ab6bb58 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java
@@ -32,6 +32,7 @@ import org.killbill.billing.catalog.api.CatalogApiException;
import org.killbill.billing.catalog.api.CatalogService;
import org.killbill.billing.catalog.api.Listing;
import org.killbill.billing.catalog.api.StaticCatalog;
+import org.killbill.billing.payment.api.DirectPaymentApi;
import org.killbill.clock.Clock;
import org.killbill.billing.jaxrs.json.CatalogJsonSimple;
import org.killbill.billing.jaxrs.json.PlanDetailJson;
@@ -61,9 +62,10 @@ public class CatalogResource extends JaxRsResourceBase {
final CustomFieldUserApi customFieldUserApi,
final AuditUserApi auditUserApi,
final AccountUserApi accountUserApi,
+ final DirectPaymentApi paymentApi,
final Clock clock,
final Context context) {
- super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
+ super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
this.catalogService = catalogService;
}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/ChargebackResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/ChargebackResource.java
index 4145098..55615cb 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/ChargebackResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/ChargebackResource.java
@@ -31,19 +31,26 @@ import javax.ws.rs.core.UriInfo;
import org.killbill.billing.ErrorCode;
import org.killbill.billing.ObjectType;
+import org.killbill.billing.account.api.Account;
+import org.killbill.billing.account.api.AccountApiException;
import org.killbill.billing.account.api.AccountUserApi;
-import org.killbill.clock.Clock;
+import org.killbill.billing.catalog.api.Currency;
import org.killbill.billing.invoice.api.InvoiceApiException;
import org.killbill.billing.invoice.api.InvoicePayment;
import org.killbill.billing.invoice.api.InvoicePaymentApi;
import org.killbill.billing.jaxrs.json.ChargebackJson;
import org.killbill.billing.jaxrs.util.Context;
import org.killbill.billing.jaxrs.util.JaxrsUriBuilder;
+import org.killbill.billing.payment.api.DirectPayment;
+import org.killbill.billing.payment.api.DirectPaymentApi;
+import org.killbill.billing.payment.api.DirectPaymentTransaction;
+import org.killbill.billing.payment.api.PaymentApiException;
import org.killbill.billing.util.api.AuditUserApi;
import org.killbill.billing.util.api.CustomFieldUserApi;
import org.killbill.billing.util.api.TagUserApi;
import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.TenantContext;
+import org.killbill.clock.Clock;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -54,36 +61,18 @@ import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
@Path(JaxrsResource.CHARGEBACKS_PATH)
public class ChargebackResource extends JaxRsResourceBase {
- private final InvoicePaymentApi invoicePaymentApi;
-
@Inject
- public ChargebackResource(final InvoicePaymentApi invoicePaymentApi,
- final JaxrsUriBuilder uriBuilder,
+ public ChargebackResource(final JaxrsUriBuilder uriBuilder,
final TagUserApi tagUserApi,
final CustomFieldUserApi customFieldUserApi,
final AuditUserApi auditUserApi,
final AccountUserApi accountUserApi,
+ final DirectPaymentApi paymentApi,
final Clock clock,
final Context context) {
- super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
- this.invoicePaymentApi = invoicePaymentApi;
- }
-
- @GET
- @Path("/{chargebackId:" + UUID_PATTERN + "}")
- @Produces(APPLICATION_JSON)
- public Response getChargeback(@PathParam("chargebackId") final String chargebackId,
- @javax.ws.rs.core.Context final HttpServletRequest request) throws InvoiceApiException {
- final TenantContext tenantContext = context.createContext(request);
- final InvoicePayment chargeback = invoicePaymentApi.getChargebackById(UUID.fromString(chargebackId), tenantContext);
- final UUID accountId = invoicePaymentApi.getAccountIdFromInvoicePaymentId(chargeback.getId(), tenantContext);
- final ChargebackJson chargebackJson = new ChargebackJson(accountId, chargeback);
-
- return Response.status(Response.Status.OK).entity(chargebackJson).build();
+ super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
}
-
-
@POST
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
@@ -92,20 +81,18 @@ public class ChargebackResource extends JaxRsResourceBase {
@HeaderParam(HDR_REASON) final String reason,
@HeaderParam(HDR_COMMENT) final String comment,
@javax.ws.rs.core.Context final HttpServletRequest request,
- @javax.ws.rs.core.Context final UriInfo uriInfo) throws InvoiceApiException {
+ @javax.ws.rs.core.Context final UriInfo uriInfo) throws InvoiceApiException, AccountApiException, PaymentApiException {
+
final CallContext callContext = context.createContext(createdBy, reason, comment, request);
+ final Account account = accountUserApi.getAccountById(UUID.fromString(json.getAccountId()), callContext);
- final InvoicePayment invoicePayment = invoicePaymentApi.getInvoicePaymentForAttempt(UUID.fromString(json.getPaymentId()), callContext);
- if (invoicePayment == null) {
- throw new InvoiceApiException(ErrorCode.INVOICE_PAYMENT_NOT_FOUND, json.getPaymentId());
- }
- final InvoicePayment chargeBack = invoicePaymentApi.createChargeback(invoicePayment.getId(), json.getAmount(),
- callContext);
- return uriBuilder.buildResponse(uriInfo, ChargebackResource.class, "getChargeback", chargeBack.getId());
+ final DirectPayment payment = paymentApi.notifyChargeback(account, UUID.fromString(json.getChargedBackTransactionId()), json.getChargedBackTransactionId(), json.getAmount(),
+ Currency.valueOf(json.getCurrency()), callContext);
+ return uriBuilder.buildResponse(uriInfo, DirectPaymentResource.class, "getDirectPayment", payment.getId());
}
@Override
protected ObjectType getObjectType() {
- return ObjectType.INVOICE_PAYMENT;
+ return ObjectType.TRANSACTION;
}
}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CreditResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CreditResource.java
index d570776..c2a81db 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CreditResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CreditResource.java
@@ -35,6 +35,7 @@ import org.killbill.billing.ObjectType;
import org.killbill.billing.account.api.Account;
import org.killbill.billing.account.api.AccountApiException;
import org.killbill.billing.account.api.AccountUserApi;
+import org.killbill.billing.payment.api.DirectPaymentApi;
import org.killbill.clock.Clock;
import org.killbill.billing.invoice.api.Invoice;
import org.killbill.billing.invoice.api.InvoiceApiException;
@@ -68,9 +69,10 @@ public class CreditResource extends JaxRsResourceBase {
final TagUserApi tagUserApi,
final CustomFieldUserApi customFieldUserApi,
final AuditUserApi auditUserApi,
+ final DirectPaymentApi paymentApi,
final Clock clock,
final Context context) {
- super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
+ super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
this.invoiceUserApi = invoiceUserApi;
this.accountUserApi = accountUserApi;
}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CustomFieldResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CustomFieldResource.java
index 683240a..a2d75b0 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CustomFieldResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CustomFieldResource.java
@@ -30,6 +30,7 @@ import javax.ws.rs.core.Response;
import org.killbill.billing.ObjectType;
import org.killbill.billing.account.api.AccountUserApi;
+import org.killbill.billing.payment.api.DirectPaymentApi;
import org.killbill.clock.Clock;
import org.killbill.billing.jaxrs.json.CustomFieldJson;
import org.killbill.billing.jaxrs.util.Context;
@@ -60,9 +61,10 @@ public class CustomFieldResource extends JaxRsResourceBase {
final CustomFieldUserApi customFieldUserApi,
final AuditUserApi auditUserApi,
final AccountUserApi accountUserApi,
+ final DirectPaymentApi paymentApi,
final Clock clock,
final Context context) {
- super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
+ super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
}
@GET
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/DirectPaymentResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/DirectPaymentResource.java
index 8651604..707efe1 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/DirectPaymentResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/DirectPaymentResource.java
@@ -39,6 +39,7 @@ import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
+import org.killbill.billing.ObjectType;
import org.killbill.billing.account.api.Account;
import org.killbill.billing.account.api.AccountApiException;
import org.killbill.billing.account.api.AccountUserApi;
@@ -69,19 +70,16 @@ import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
@Path(JaxrsResource.DIRECT_PAYMENTS_PATH)
public class DirectPaymentResource extends JaxRsResourceBase {
- private final DirectPaymentApi directPaymentApi;
-
@Inject
public DirectPaymentResource(final JaxrsUriBuilder uriBuilder,
final TagUserApi tagUserApi,
final CustomFieldUserApi customFieldUserApi,
final AuditUserApi auditUserApi,
final AccountUserApi accountUserApi,
- final DirectPaymentApi directPaymentApi,
+ final DirectPaymentApi paymentApi,
final Clock clock,
final Context context) {
- super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
- this.directPaymentApi = directPaymentApi;
+ super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
}
@GET
@@ -95,7 +93,7 @@ public class DirectPaymentResource extends JaxRsResourceBase {
final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
final UUID directPaymentIdId = UUID.fromString(directPaymentIdStr);
final TenantContext tenantContext = context.createContext(request);
- final DirectPayment directPayment = directPaymentApi.getPayment(directPaymentIdId, withPluginInfo, pluginProperties, tenantContext);
+ final DirectPayment directPayment = paymentApi.getPayment(directPaymentIdId, withPluginInfo, pluginProperties, tenantContext);
final AccountAuditLogs accountAuditLogs = auditUserApi.getAccountAuditLogs(directPayment.getAccountId(), auditMode.getLevel(), tenantContext);
final DirectPaymentJson result = new DirectPaymentJson(directPayment, accountAuditLogs);
@@ -117,9 +115,9 @@ public class DirectPaymentResource extends JaxRsResourceBase {
final Pagination<DirectPayment> directPayments;
if (Strings.isNullOrEmpty(pluginName)) {
- directPayments = directPaymentApi.getPayments(offset, limit, withPluginInfo, pluginProperties, tenantContext);
+ directPayments = paymentApi.getPayments(offset, limit, withPluginInfo, pluginProperties, tenantContext);
} else {
- directPayments = directPaymentApi.getPayments(offset, limit, pluginName, withPluginInfo, pluginProperties, tenantContext);
+ directPayments = paymentApi.getPayments(offset, limit, pluginName, withPluginInfo, pluginProperties, tenantContext);
}
final URI nextPageUri = uriBuilder.nextPage(DirectPaymentResource.class, "getDirectPayments", directPayments.getNextOffset(), limit, ImmutableMap.<String, String>of(QUERY_PAYMENT_METHOD_PLUGIN_NAME, Strings.nullToEmpty(pluginName),
@@ -159,9 +157,9 @@ public class DirectPaymentResource extends JaxRsResourceBase {
// Search the plugin(s)
final Pagination<DirectPayment> directPayments;
if (Strings.isNullOrEmpty(pluginName)) {
- directPayments = directPaymentApi.searchPayments(searchKey, offset, limit, withPluginInfo, pluginProperties, tenantContext);
+ directPayments = paymentApi.searchPayments(searchKey, offset, limit, withPluginInfo, pluginProperties, tenantContext);
} else {
- directPayments = directPaymentApi.searchPayments(searchKey, offset, limit, pluginName, withPluginInfo, pluginProperties, tenantContext);
+ directPayments = paymentApi.searchPayments(searchKey, offset, limit, pluginName, withPluginInfo, pluginProperties, tenantContext);
}
final URI nextPageUri = uriBuilder.nextPage(DirectPaymentResource.class, "searchDirectPayments", directPayments.getNextOffset(), limit, ImmutableMap.<String, String>of("searchKey", searchKey,
@@ -200,12 +198,12 @@ public class DirectPaymentResource extends JaxRsResourceBase {
final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
final CallContext callContext = context.createContext(createdBy, reason, comment, request);
final UUID directPaymentId = UUID.fromString(directPaymentIdStr);
- final DirectPayment initialPayment = directPaymentApi.getPayment(directPaymentId, false, pluginProperties, callContext);
+ final DirectPayment initialPayment = paymentApi.getPayment(directPaymentId, false, pluginProperties, callContext);
final Account account = accountUserApi.getAccountById(initialPayment.getAccountId(), callContext);
final Currency currency = json.getCurrency() == null ? account.getCurrency() : Currency.valueOf(json.getCurrency());
- final DirectPayment payment = directPaymentApi.createCapture(account, directPaymentId, json.getAmount(), currency,
+ final DirectPayment payment = paymentApi.createCapture(account, directPaymentId, json.getAmount(), currency,
json.getDirectTransactionExternalKey(), pluginProperties, callContext);
return uriBuilder.buildResponse(uriInfo, DirectPaymentResource.class, "getDirectPayment", payment.getId());
}
@@ -225,13 +223,13 @@ public class DirectPaymentResource extends JaxRsResourceBase {
final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
final CallContext callContext = context.createContext(createdBy, reason, comment, request);
final UUID directPaymentId = UUID.fromString(directPaymentIdStr);
- final DirectPayment initialPayment = directPaymentApi.getPayment(directPaymentId, false, pluginProperties, callContext);
+ final DirectPayment initialPayment = paymentApi.getPayment(directPaymentId, false, pluginProperties, callContext);
final Account account = accountUserApi.getAccountById(initialPayment.getAccountId(), callContext);
final Currency currency = json.getCurrency() == null ? account.getCurrency() : Currency.valueOf(json.getCurrency());
- final DirectPayment payment = directPaymentApi.createRefund(account, directPaymentId, json.getAmount(), currency,
- json.getDirectTransactionExternalKey(), pluginProperties, callContext);
+ final DirectPayment payment = paymentApi.createRefund(account, directPaymentId, json.getAmount(), currency,
+ json.getDirectTransactionExternalKey(), pluginProperties, callContext);
return uriBuilder.buildResponse(uriInfo, DirectPaymentResource.class, "getDirectPayment", payment.getId());
}
@@ -250,11 +248,17 @@ public class DirectPaymentResource extends JaxRsResourceBase {
final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
final CallContext callContext = context.createContext(createdBy, reason, comment, request);
final UUID directPaymentId = UUID.fromString(directPaymentIdStr);
- final DirectPayment initialPayment = directPaymentApi.getPayment(directPaymentId, false, pluginProperties, callContext);
+ final DirectPayment initialPayment = paymentApi.getPayment(directPaymentId, false, pluginProperties, callContext);
final Account account = accountUserApi.getAccountById(initialPayment.getAccountId(), callContext);
- final DirectPayment payment = directPaymentApi.createVoid(account, directPaymentId, json.getDirectTransactionExternalKey(), pluginProperties, callContext);
+ final DirectPayment payment = paymentApi.createVoid(account, directPaymentId, json.getDirectTransactionExternalKey(), pluginProperties, callContext);
return uriBuilder.buildResponse(uriInfo, DirectPaymentResource.class, "getDirectPayment", payment.getId());
}
+
+ @Override
+ protected ObjectType getObjectType() {
+ return ObjectType.PAYMENT;
+ }
+
}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/ExportResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/ExportResource.java
index ffe7334..46982e6 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/ExportResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/ExportResource.java
@@ -31,6 +31,7 @@ import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.StreamingOutput;
import org.killbill.billing.account.api.AccountUserApi;
+import org.killbill.billing.payment.api.DirectPaymentApi;
import org.killbill.clock.Clock;
import org.killbill.billing.jaxrs.util.Context;
import org.killbill.billing.jaxrs.util.JaxrsUriBuilder;
@@ -57,9 +58,10 @@ public class ExportResource extends JaxRsResourceBase {
final CustomFieldUserApi customFieldUserApi,
final AuditUserApi auditUserApi,
final AccountUserApi accountUserApi,
+ final DirectPaymentApi paymentApi,
final Clock clock,
final Context context) {
- super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
+ super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
this.exportUserApi = exportUserApi;
}
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 f392104..d538f32 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
@@ -45,6 +45,7 @@ import org.killbill.billing.ObjectType;
import org.killbill.billing.account.api.Account;
import org.killbill.billing.account.api.AccountApiException;
import org.killbill.billing.account.api.AccountUserApi;
+import org.killbill.billing.catalog.api.Currency;
import org.killbill.billing.invoice.api.InvoiceApiException;
import org.killbill.billing.invoice.api.InvoicePayment;
import org.killbill.billing.invoice.api.InvoicePaymentApi;
@@ -74,6 +75,7 @@ import org.killbill.clock.Clock;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.inject.Inject;
@@ -84,22 +86,17 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
private static final String ID_PARAM_NAME = "paymentId";
- private final DirectPaymentApi paymentApi;
- private final InvoicePaymentApi invoicePaymentApi;
@Inject
public InvoicePaymentResource(final AccountUserApi accountUserApi,
final DirectPaymentApi paymentApi,
- final InvoicePaymentApi invoicePaymentApi,
final JaxrsUriBuilder uriBuilder,
final TagUserApi tagUserApi,
final CustomFieldUserApi customFieldUserApi,
final AuditUserApi auditUserApi,
final Clock clock,
final Context context) {
- super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
- this.paymentApi = paymentApi;
- this.invoicePaymentApi = invoicePaymentApi;
+ super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
}
@@ -115,31 +112,34 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
@HeaderParam(HDR_COMMENT) final String comment,
@javax.ws.rs.core.Context final UriInfo uriInfo,
@javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException, AccountApiException {
- final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
- final CallContext callContext = context.createContext(createdBy, reason, comment, request);
+
+ final CallContext callContext = context.createContext(createdBy, reason, comment, request);
final UUID paymentUuid = UUID.fromString(paymentId);
- final DirectPayment payment = paymentApi.getPayment(paymentUuid, false, pluginProperties, callContext);
- final Account account = accountUserApi.getAccountById(payment.getAccountId(), callContext);
+ final DirectPayment payment = paymentApi.getPayment(paymentUuid, false, ImmutableList.<PluginProperty>of(), callContext);
+ final Account account= accountUserApi.getAccountById(payment.getAccountId(), callContext);
- final DirectPayment result;
+ final Iterable<PluginProperty> pluginProperties;
+ final String transactionExternalKey = UUID.randomUUID().toString();
if (json.isAdjusted()) {
if (json.getAdjustments() != null && json.getAdjustments().size() > 0) {
final Map<UUID, BigDecimal> adjustments = new HashMap<UUID, BigDecimal>();
for (final InvoiceItemJson item : json.getAdjustments()) {
adjustments.put(UUID.fromString(item.getInvoiceItemId()), item.getAmount());
}
- result = null; // STEPH paymentApi.createRefundWithItemsAdjustments(account, paymentUuid, adjustments, pluginProperties, callContext);
+ pluginProperties = extractPluginProperties(pluginPropertiesString,
+ new PluginProperty("IPCD_REF_IDS_AMOUNTS", true, false),
+ new PluginProperty("IPCD_REFUND_WITH_ADJUSTMENTS", adjustments, false));
} else {
- // Invoice adjustment
- result = null; // STEPH paymentApi.createRefundWithAdjustment(account, paymentUuid, json.getAmount(), pluginProperties, callContext);
+ pluginProperties = extractPluginProperties(pluginPropertiesString,
+ new PluginProperty("IPCD_REF_IDS_AMOUNTS", true, false));
}
} else {
- // Refund without adjustment
- result = null;// STEPH paymentApi.createRefund(account, paymentUuid, json.getAmount(), pluginProperties, callContext);
+ pluginProperties = extractPluginProperties(pluginPropertiesString);
}
-
- return null; // STEPH uriBuilder.buildResponse(RefundResource.class, "getRefund", result.getId(), uriInfo.getBaseUri().toString());
+ final DirectPayment result = paymentApi.createRefundWithPaymentControl(account, payment.getId(), null, account.getCurrency(), transactionExternalKey,
+ pluginProperties, createInvoicePaymentControlPluginApiPaymentOptions(false), callContext);
+ return uriBuilder.buildResponse(DirectPaymentResource.class, "getDirectPayment", result.getId(), uriInfo.getBaseUri().toString());
}
@GET
@@ -226,6 +226,6 @@ public class InvoicePaymentResource extends JaxRsResourceBase {
@Override
protected ObjectType getObjectType() {
- return ObjectType.INVOICE_PAYMENT;
+ return ObjectType.PAYMENT;
}
}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
index 864aa3b..a89d229 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
@@ -57,6 +57,7 @@ import org.killbill.billing.invoice.api.Invoice;
import org.killbill.billing.invoice.api.InvoiceApiException;
import org.killbill.billing.invoice.api.InvoiceItem;
import org.killbill.billing.invoice.api.InvoiceNotifier;
+import org.killbill.billing.invoice.api.InvoicePayment;
import org.killbill.billing.invoice.api.InvoiceUserApi;
import org.killbill.billing.jaxrs.json.CustomFieldJson;
import org.killbill.billing.jaxrs.json.InvoiceItemJson;
@@ -100,7 +101,6 @@ public class InvoiceResource extends JaxRsResourceBase {
private static final String ID_PARAM_NAME = "invoiceId";
private final InvoiceUserApi invoiceApi;
- private final DirectPaymentApi paymentApi;
private final InvoiceNotifier invoiceNotifier;
@Inject
@@ -114,9 +114,8 @@ public class InvoiceResource extends JaxRsResourceBase {
final CustomFieldUserApi customFieldUserApi,
final AuditUserApi auditUserApi,
final Context context) {
- super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
+ super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
this.invoiceApi = invoiceApi;
- this.paymentApi = paymentApi;
this.invoiceNotifier = invoiceNotifier;
}
@@ -355,9 +354,8 @@ public class InvoiceResource extends JaxRsResourceBase {
for (final InvoiceItem externalCharge : createdExternalCharges) {
if (!paidInvoices.contains(externalCharge.getInvoiceId())) {
paidInvoices.add(externalCharge.getInvoiceId());
-
final Invoice invoice = invoiceApi.getInvoice(externalCharge.getInvoiceId(), callContext);
- // STEPH paymentApi.createPurchaseWithPaymentControl(account, invoice.getId(), invoice.getBalance(), pluginProperties, callContext);
+ createPurchaseForInvoice(account, invoice.getId(), invoice.getBalance(), false, callContext);
}
}
}
@@ -378,12 +376,18 @@ public class InvoiceResource extends JaxRsResourceBase {
@Produces(APPLICATION_JSON)
public Response getPayments(@PathParam("invoiceId") final String invoiceId,
@QueryParam(QUERY_AUDIT) @DefaultValue("NONE") final AuditMode auditMode,
- @javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException {
+ @QueryParam(QUERY_WITH_PLUGIN_INFO) @DefaultValue("false") final Boolean withPluginInfo,
+ @javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException, InvoiceApiException {
final TenantContext tenantContext = context.createContext(request);
- final List<DirectPayment> payments = null; // STEPH paymentApi.getInvoicePayments(UUID.fromString(invoiceId), tenantContext);
+ final Invoice invoice = invoiceApi.getInvoice(UUID.fromString(invoiceId), tenantContext);
+ final List<DirectPayment> payments = new ArrayList<DirectPayment>();
+ for (InvoicePayment cur : invoice.getPayments()) {
+ final DirectPayment payment = paymentApi.getPayment(cur.getId(), withPluginInfo, ImmutableList.<PluginProperty>of(), tenantContext);
+ payments.add(payment);
+ }
final List<PaymentJson> result = new ArrayList<PaymentJson>(payments.size());
- if (payments.size() == 0) {
+ if (payments.isEmpty()) {
return Response.status(Status.OK).entity(result).build();
}
@@ -415,14 +419,8 @@ public class InvoiceResource extends JaxRsResourceBase {
final CallContext callContext = context.createContext(createdBy, reason, comment, request);
final Account account = accountUserApi.getAccountById(UUID.fromString(payment.getAccountId()), callContext);
-
final UUID invoiceId = UUID.fromString(payment.getInvoiceId());
- if (externalPayment) {
- // STEPH paymentApi.createExternalPayment(account, invoiceId, payment.getAmount(), callContext);
- } else {
- // STEPH paymentApi.createPayment(account, invoiceId, payment.getAmount(), pluginProperties, callContext);
- }
-
+ createPurchaseForInvoice(account, invoiceId, payment.getPurchaseAmount(), externalPayment, callContext);
return uriBuilder.buildResponse(uriInfo, InvoiceResource.class, "getPayments", payment.getInvoiceId());
}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxRsResourceBase.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxRsResourceBase.java
index e102b77..cc2afcc 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxRsResourceBase.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxRsResourceBase.java
@@ -21,8 +21,10 @@ package org.killbill.billing.jaxrs.resources;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
import java.net.URI;
import java.net.URLDecoder;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
@@ -47,12 +49,19 @@ import org.killbill.billing.ObjectType;
import org.killbill.billing.account.api.Account;
import org.killbill.billing.account.api.AccountApiException;
import org.killbill.billing.account.api.AccountUserApi;
+import org.killbill.billing.invoice.api.Invoice;
import org.killbill.billing.jaxrs.json.CustomFieldJson;
import org.killbill.billing.jaxrs.json.JsonBase;
import org.killbill.billing.jaxrs.json.TagJson;
import org.killbill.billing.jaxrs.util.Context;
import org.killbill.billing.jaxrs.util.JaxrsUriBuilder;
+import org.killbill.billing.payment.api.DirectPayment;
+import org.killbill.billing.payment.api.DirectPaymentApi;
+import org.killbill.billing.payment.api.DirectPaymentTransaction;
+import org.killbill.billing.payment.api.PaymentApiException;
+import org.killbill.billing.payment.api.PaymentOptions;
import org.killbill.billing.payment.api.PluginProperty;
+import org.killbill.billing.payment.api.TransactionType;
import org.killbill.billing.util.api.AuditUserApi;
import org.killbill.billing.util.api.CustomFieldApiException;
import org.killbill.billing.util.api.CustomFieldUserApi;
@@ -93,6 +102,7 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
protected final CustomFieldUserApi customFieldUserApi;
protected final AuditUserApi auditUserApi;
protected final AccountUserApi accountUserApi;
+ protected final DirectPaymentApi paymentApi;
protected final Context context;
protected final Clock clock;
@@ -104,6 +114,7 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
final CustomFieldUserApi customFieldUserApi,
final AuditUserApi auditUserApi,
final AccountUserApi accountUserApi,
+ final DirectPaymentApi paymentApi,
final Clock clock,
final Context context) {
this.uriBuilder = uriBuilder;
@@ -111,6 +122,7 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
this.customFieldUserApi = customFieldUserApi;
this.auditUserApi = auditUserApi;
this.accountUserApi = accountUserApi;
+ this.paymentApi = paymentApi;
this.clock = clock;
this.context = context;
}
@@ -314,7 +326,7 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
return null;
}
- protected Iterable<PluginProperty> extractPluginProperties(@Nullable final Iterable<String> pluginProperties) {
+ protected Iterable<PluginProperty> extractPluginProperties(@Nullable final Iterable<String> pluginProperties, PluginProperty...additionalProperties) {
final Collection<PluginProperty> properties = new LinkedList<PluginProperty>();
if (pluginProperties == null) {
return properties;
@@ -326,6 +338,51 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
final String value = property.size() == 1 ? null : Joiner.on("=").join(property.subList(1, property.size()));
properties.add(new PluginProperty(key, value, false));
}
+ for (PluginProperty cur : additionalProperties) {
+ properties.add(cur);
+ }
return properties;
}
+
+ protected void createPurchaseForInvoice(final Account account, final UUID invoiceId, final BigDecimal amountToPay, final Boolean externalPayment, final CallContext callContext) throws PaymentApiException {
+
+ final List<PluginProperty> properties = new ArrayList<PluginProperty>();
+ final String paymentExternalKey = UUID.randomUUID().toString();
+ final String transactionExternalKey = UUID.randomUUID().toString();
+ final PluginProperty invoiceProperty = new PluginProperty("IPCD_INVOICE_ID" /* InvoicePaymentControlPluginApi.PROP_IPCD_INVOICE_ID (contract with plugin) */,
+ invoiceId.toString(), false);
+ properties.add(invoiceProperty);
+
+ paymentApi.createPurchaseWithPaymentControl(account, account.getPaymentMethodId(), null, amountToPay, account.getCurrency(), paymentExternalKey, transactionExternalKey,
+ properties, createInvoicePaymentControlPluginApiPaymentOptions(externalPayment), callContext);
+ }
+
+
+ protected PaymentOptions createInvoicePaymentControlPluginApiPaymentOptions(final boolean isExternalPayment) {
+ return new PaymentOptions() {
+ @Override
+ public boolean isExternalPayment() {
+ return isExternalPayment;
+ }
+ @Override
+ public String getPaymentControlPluginName() {
+ /* Contract with plugin */
+ return "__INVOICE_PAYMENT_CONTROL_PLUGIN__";
+ }
+ };
+ }
+
+ protected Iterable<DirectPaymentTransaction> getDirectPaymentTransactions(final List<DirectPayment> payments, final TransactionType transactionType) {
+ return Iterables.concat(Iterables.transform(payments, new Function<DirectPayment, Iterable<DirectPaymentTransaction>>() {
+ @Override
+ public Iterable<DirectPaymentTransaction> apply(final DirectPayment input) {
+ return Iterables.filter(input.getTransactions(), new Predicate<DirectPaymentTransaction>() {
+ @Override
+ public boolean apply(final DirectPaymentTransaction input) {
+ return input.getTransactionType() == transactionType;
+ }
+ });
+ }
+ }));
+ }
}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentGatewayResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentGatewayResource.java
index 1e0d6df..12ab453 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentGatewayResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentGatewayResource.java
@@ -41,6 +41,7 @@ import org.killbill.billing.jaxrs.json.HostedPaymentPageFormDescriptorJson;
import org.killbill.billing.jaxrs.json.PluginPropertyJson;
import org.killbill.billing.jaxrs.util.Context;
import org.killbill.billing.jaxrs.util.JaxrsUriBuilder;
+import org.killbill.billing.payment.api.DirectPaymentApi;
import org.killbill.billing.payment.api.PaymentApiException;
import org.killbill.billing.payment.api.PaymentGatewayApi;
import org.killbill.billing.payment.api.PluginProperty;
@@ -72,9 +73,10 @@ public class PaymentGatewayResource extends JaxRsResourceBase {
final AuditUserApi auditUserApi,
final AccountUserApi accountUserApi,
final PaymentGatewayApi paymentGatewayApi,
+ final DirectPaymentApi paymentApi,
final Clock clock,
final Context context) {
- super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
+ super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
this.paymentGatewayApi = paymentGatewayApi;
}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentMethodResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentMethodResource.java
index aad539a..3effcae 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentMethodResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentMethodResource.java
@@ -69,19 +69,16 @@ import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
@Path(JaxrsResource.PAYMENT_METHODS_PATH)
public class PaymentMethodResource extends JaxRsResourceBase {
- private final DirectPaymentApi paymentApi;
-
@Inject
- public PaymentMethodResource(final DirectPaymentApi paymentApi,
- final AccountUserApi accountUserApi,
+ public PaymentMethodResource(final AccountUserApi accountUserApi,
final JaxrsUriBuilder uriBuilder,
final TagUserApi tagUserApi,
final CustomFieldUserApi customFieldUserApi,
final AuditUserApi auditUserApi,
+ final DirectPaymentApi paymentApi,
final Clock clock,
final Context context) {
- super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
- this.paymentApi = paymentApi;
+ super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
}
@GET
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PluginResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PluginResource.java
index 17a30f5..169be7e 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PluginResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PluginResource.java
@@ -45,6 +45,7 @@ import javax.ws.rs.Path;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
+import org.killbill.billing.payment.api.DirectPaymentApi;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -78,9 +79,10 @@ public class PluginResource extends JaxRsResourceBase {
final CustomFieldUserApi customFieldUserApi,
final AuditUserApi auditUserApi,
final AccountUserApi accountUserApi,
+ final DirectPaymentApi paymentApi,
final Clock clock,
final Context context) {
- super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
+ super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
this.osgiServlet = osgiServlet;
}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SecurityResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SecurityResource.java
index 94e561f..520e3aa 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SecurityResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SecurityResource.java
@@ -31,6 +31,7 @@ import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.killbill.billing.account.api.AccountUserApi;
+import org.killbill.billing.payment.api.DirectPaymentApi;
import org.killbill.clock.Clock;
import org.killbill.billing.jaxrs.json.SubjectJson;
import org.killbill.billing.jaxrs.util.Context;
@@ -61,9 +62,10 @@ public class SecurityResource extends JaxRsResourceBase {
final CustomFieldUserApi customFieldUserApi,
final AuditUserApi auditUserApi,
final AccountUserApi accountUserApi,
+ final DirectPaymentApi paymentApi,
final Clock clock,
final Context context) {
- super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
+ super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
this.securityApi = securityApi;
}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java
index ffe4e1f..372be81 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java
@@ -38,6 +38,7 @@ import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriInfo;
import org.joda.time.LocalDate;
+import org.killbill.billing.payment.api.DirectPaymentApi;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -100,9 +101,10 @@ public class SubscriptionResource extends JaxRsResourceBase {
final EntitlementApi entitlementApi,
final SubscriptionApi subscriptionApi,
final AccountUserApi accountUserApi,
+ final DirectPaymentApi paymentApi,
final Clock clock,
final Context context) {
- super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
+ super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
this.killbillHandler = killbillHandler;
this.entitlementApi = entitlementApi;
this.subscriptionApi = subscriptionApi;
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TagDefinitionResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TagDefinitionResource.java
index 4c51f68..b3956e8 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TagDefinitionResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TagDefinitionResource.java
@@ -38,6 +38,7 @@ import javax.ws.rs.core.UriInfo;
import org.killbill.billing.ObjectType;
import org.killbill.billing.account.api.AccountUserApi;
+import org.killbill.billing.payment.api.DirectPaymentApi;
import org.killbill.clock.Clock;
import org.killbill.billing.jaxrs.json.TagDefinitionJson;
import org.killbill.billing.jaxrs.util.Context;
@@ -66,9 +67,10 @@ public class TagDefinitionResource extends JaxRsResourceBase {
final CustomFieldUserApi customFieldUserApi,
final AuditUserApi auditUserApi,
final AccountUserApi accountUserApi,
+ final DirectPaymentApi paymentApi,
final Clock clock,
final Context context) {
- super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
+ super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
}
@GET
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TagResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TagResource.java
index b07d467..b480c6d 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TagResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TagResource.java
@@ -33,6 +33,7 @@ import javax.ws.rs.core.Response;
import org.killbill.billing.ObjectType;
import org.killbill.billing.account.api.AccountUserApi;
+import org.killbill.billing.payment.api.DirectPaymentApi;
import org.killbill.clock.Clock;
import org.killbill.billing.jaxrs.json.TagJson;
import org.killbill.billing.jaxrs.util.Context;
@@ -64,9 +65,10 @@ public class TagResource extends JaxRsResourceBase {
final CustomFieldUserApi customFieldUserApi,
final AuditUserApi auditUserApi,
final AccountUserApi accountUserApi,
+ final DirectPaymentApi paymentApi,
final Clock clock,
final Context context) {
- super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
+ super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
}
@GET
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TenantResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TenantResource.java
index e20cfce..d7d0791 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TenantResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TenantResource.java
@@ -37,6 +37,7 @@ import javax.ws.rs.core.UriInfo;
import org.killbill.billing.ObjectType;
import org.killbill.billing.account.api.AccountUserApi;
+import org.killbill.billing.payment.api.DirectPaymentApi;
import org.killbill.clock.Clock;
import org.killbill.billing.jaxrs.json.TenantJson;
import org.killbill.billing.jaxrs.json.TenantKeyJson;
@@ -71,9 +72,10 @@ public class TenantResource extends JaxRsResourceBase {
final CustomFieldUserApi customFieldUserApi,
final AuditUserApi auditUserApi,
final AccountUserApi accountUserApi,
+ final DirectPaymentApi paymentApi,
final Clock clock,
final Context context) {
- super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
+ super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
this.tenantApi = tenantApi;
}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TestResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TestResource.java
index d00a32c..58f2214 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TestResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TestResource.java
@@ -38,6 +38,7 @@ import org.killbill.billing.ObjectType;
import org.killbill.billing.account.api.AccountUserApi;
import org.killbill.billing.jaxrs.util.Context;
import org.killbill.billing.jaxrs.util.JaxrsUriBuilder;
+import org.killbill.billing.payment.api.DirectPaymentApi;
import org.killbill.billing.util.api.AuditUserApi;
import org.killbill.billing.util.api.CustomFieldUserApi;
import org.killbill.billing.util.api.RecordIdApi;
@@ -78,9 +79,9 @@ public class TestResource extends JaxRsResourceBase {
@Inject
public TestResource(final JaxrsUriBuilder uriBuilder, final TagUserApi tagUserApi, final CustomFieldUserApi customFieldUserApi,
final AuditUserApi auditUserApi, final AccountUserApi accountUserApi, final RecordIdApi recordIdApi,
- final NotificationQueueService notificationQueueService,
+ final NotificationQueueService notificationQueueService, final DirectPaymentApi paymentApi,
final Clock clock, final Context context) {
- super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
+ super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
this.notificationQueueService = notificationQueueService;
this.recordIdApi = recordIdApi;
}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/UsageResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/UsageResource.java
index 1d8d781..746d481 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/UsageResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/UsageResource.java
@@ -37,6 +37,7 @@ import org.killbill.billing.account.api.AccountUserApi;
import org.killbill.billing.jaxrs.json.UsageJson;
import org.killbill.billing.jaxrs.util.Context;
import org.killbill.billing.jaxrs.util.JaxrsUriBuilder;
+import org.killbill.billing.payment.api.DirectPaymentApi;
import org.killbill.billing.usage.api.RolledUpUsage;
import org.killbill.billing.usage.api.UsageUserApi;
import org.killbill.billing.util.api.AuditUserApi;
@@ -62,9 +63,10 @@ public class UsageResource extends JaxRsResourceBase {
final AuditUserApi auditUserApi,
final AccountUserApi accountUserApi,
final UsageUserApi usageUserApi,
+ final DirectPaymentApi paymentApi,
final Clock clock,
final Context context) {
- super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
+ super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, clock, context);
this.usageUserApi = usageUserApi;
}
diff --git a/jaxrs/src/test/java/org/killbill/billing/jaxrs/json/TestBundleTimelineJson.java b/jaxrs/src/test/java/org/killbill/billing/jaxrs/json/TestBundleTimelineJson.java
index ad73b3a..5250ee6 100644
--- a/jaxrs/src/test/java/org/killbill/billing/jaxrs/json/TestBundleTimelineJson.java
+++ b/jaxrs/src/test/java/org/killbill/billing/jaxrs/json/TestBundleTimelineJson.java
@@ -28,6 +28,7 @@ import org.killbill.billing.catalog.api.Currency;
import org.killbill.billing.jaxrs.JaxrsTestSuiteNoDB;
import com.google.common.collect.ImmutableList;
+import com.sun.org.apache.xpath.internal.operations.Bool;
public class TestBundleTimelineJson extends JaxrsTestSuiteNoDB {
@@ -85,8 +86,11 @@ public class TestBundleTimelineJson extends JaxrsTestSuiteNoDB {
final UUID paymentId = UUID.randomUUID();
final Integer paymentNumber = 17;
final UUID paymentMethodId = UUID.randomUUID();
- final BigDecimal paidAmount = BigDecimal.TEN;
- final BigDecimal amount = BigDecimal.ZERO;
+ final BigDecimal authAmount = BigDecimal.TEN;
+ final BigDecimal captureAmount = BigDecimal.ZERO;
+ final BigDecimal purchasedAMount = BigDecimal.ZERO;
+ final BigDecimal creditAmount = BigDecimal.ZERO;
+ final BigDecimal refundAmount = BigDecimal.ZERO;
final DateTime paymentRequestedDate = clock.getUTCNow();
final DateTime paymentEffectiveDate = clock.getUTCNow();
final Integer retryCount = Integer.MAX_VALUE;
@@ -94,7 +98,7 @@ public class TestBundleTimelineJson extends JaxrsTestSuiteNoDB {
final String status = UUID.randomUUID().toString();
final String gatewayErrorCode = "OK";
final String gatewayErrorMsg = "Excellent...";
- return new PaymentJson(amount, paidAmount, accountId.toString(), invoiceId.toString(), paymentId.toString(), paymentNumber.toString(),
+ return new PaymentJson(authAmount, captureAmount, purchasedAMount, creditAmount, refundAmount, Boolean.FALSE, accountId.toString(), invoiceId.toString(), paymentId.toString(), paymentNumber.toString(),
paymentMethodId.toString(), paymentRequestedDate, paymentEffectiveDate, retryCount, currency, status,
gatewayErrorCode, gatewayErrorMsg, null, null, null, null);
}
diff --git a/jaxrs/src/test/java/org/killbill/billing/jaxrs/json/TestChargebackJson.java b/jaxrs/src/test/java/org/killbill/billing/jaxrs/json/TestChargebackJson.java
index ee430ca..979e216 100644
--- a/jaxrs/src/test/java/org/killbill/billing/jaxrs/json/TestChargebackJson.java
+++ b/jaxrs/src/test/java/org/killbill/billing/jaxrs/json/TestChargebackJson.java
@@ -37,13 +37,15 @@ public class TestChargebackJson extends JaxrsTestSuiteNoDB {
final DateTime effectiveDate = new DateTime(DateTimeZone.UTC);
final BigDecimal chargebackAmount = BigDecimal.TEN;
final String chargebackId = UUID.randomUUID().toString();
+ final String chargedBackTransactionId = UUID.randomUUID().toString();
final String accountId = UUID.randomUUID().toString();
final String paymentId = UUID.randomUUID().toString();
final String currency = "USD";
final List<AuditLogJson> auditLogs = createAuditLogsJson(clock.getUTCNow());
- final ChargebackJson chargebackJson = new ChargebackJson(chargebackId, accountId, requestedDate, effectiveDate, chargebackAmount,
+ final ChargebackJson chargebackJson = new ChargebackJson(chargebackId, accountId, chargedBackTransactionId, requestedDate, effectiveDate, chargebackAmount,
paymentId, currency, auditLogs);
Assert.assertEquals(chargebackJson.getChargebackId(), chargebackId);
+ Assert.assertEquals(chargebackJson.getChargedBackTransactionId(), chargedBackTransactionId);
Assert.assertEquals(chargebackJson.getRequestedDate(), requestedDate);
Assert.assertEquals(chargebackJson.getEffectiveDate(), effectiveDate);
Assert.assertEquals(chargebackJson.getAmount(), chargebackAmount);
diff --git a/jaxrs/src/test/java/org/killbill/billing/jaxrs/TestDateConversion.java b/jaxrs/src/test/java/org/killbill/billing/jaxrs/TestDateConversion.java
index 62e9ef0..320ac1c 100644
--- a/jaxrs/src/test/java/org/killbill/billing/jaxrs/TestDateConversion.java
+++ b/jaxrs/src/test/java/org/killbill/billing/jaxrs/TestDateConversion.java
@@ -38,7 +38,7 @@ public class TestDateConversion extends JaxRsResourceBase {
final DateTimeZone dateTimeZone = DateTimeZone.forOffsetHours(-8);
public TestDateConversion() throws AccountApiException {
- super(null, null, null, null, Mockito.mock(AccountUserApi.class), new ClockMock(), null);
+ super(null, null, null, null, Mockito.mock(AccountUserApi.class), null, new ClockMock(), null);
final Account account = Mockito.mock(Account.class);
Mockito.when(account.getTimeZone()).thenReturn(dateTimeZone);
Mockito.when(accountUserApi.getAccountById(accountId, null)).thenReturn(account);
diff --git a/payment/src/main/java/org/killbill/billing/payment/api/DefaultDirectPaymentApi.java b/payment/src/main/java/org/killbill/billing/payment/api/DefaultDirectPaymentApi.java
index 949decd..800a79d 100644
--- a/payment/src/main/java/org/killbill/billing/payment/api/DefaultDirectPaymentApi.java
+++ b/payment/src/main/java/org/killbill/billing/payment/api/DefaultDirectPaymentApi.java
@@ -224,7 +224,7 @@ public class DefaultDirectPaymentApi implements DirectPaymentApi {
}
@Override
- public void notifyChargeback(final Account account, final UUID directPaymentTransactionId, final String chargebackTransactionExternalKey, final BigDecimal amount, final Currency currency, final CallContext callContext) throws PaymentApiException {
+ public DirectPayment notifyChargeback(final Account account, final UUID directPaymentTransactionId, final String chargebackTransactionExternalKey, final BigDecimal amount, final Currency currency, final CallContext callContext) throws PaymentApiException {
checkNullParameter(account, "account");
checkNullParameter(amount, "amount");
@@ -234,7 +234,7 @@ public class DefaultDirectPaymentApi implements DirectPaymentApi {
checkPositiveAmount(amount);
final InternalCallContext internalCallContext = internalCallContextFactory.createInternalCallContext(account.getId(), callContext);
- directPaymentProcessor.notifyPaymentPaymentOfChargeback(account, directPaymentTransactionId, chargebackTransactionExternalKey, amount, currency, callContext, internalCallContext);
+ return directPaymentProcessor.notifyPaymentPaymentOfChargeback(account, directPaymentTransactionId, chargebackTransactionExternalKey, amount, currency, callContext, internalCallContext);
}
@Override
diff --git a/payment/src/main/java/org/killbill/billing/payment/control/InvoicePaymentControlPluginApi.java b/payment/src/main/java/org/killbill/billing/payment/control/InvoicePaymentControlPluginApi.java
index 253c810..76784c3 100644
--- a/payment/src/main/java/org/killbill/billing/payment/control/InvoicePaymentControlPluginApi.java
+++ b/payment/src/main/java/org/killbill/billing/payment/control/InvoicePaymentControlPluginApi.java
@@ -74,12 +74,13 @@ import com.google.common.collect.Iterables;
public final class InvoicePaymentControlPluginApi implements PaymentControlPluginApi {
- public final static String PLUGIN_NAME = "__INVOICE_PAYMENT_CONTROL_PLUGIN__";
public final static String CREATED_BY = "InvoicePaymentControlPluginApi";
- public static final String PROP_IPCD_INVOICE_ID = "INVOICE_ID";
- public static final String PROP_IPCD_REFUND_IDS_WITH_AMOUNT_KEY = "REF_IDS_AMOUNTS";
- public static final String PROP_IPCD_REFUND_WITH_ADJUSTMENTS = "REFUND_WITH_ADJUSTMENTS";
+ /* Don't change value String for properties as they are referenced from jaxrs without the constants which are not accessible */
+ public final static String PLUGIN_NAME = "__INVOICE_PAYMENT_CONTROL_PLUGIN__";
+ public static final String PROP_IPCD_INVOICE_ID = "IPCD_INVOICE_ID";
+ public static final String PROP_IPCD_REFUND_IDS_WITH_AMOUNT_KEY = "IPCD_REF_IDS_AMOUNTS";
+ public static final String PROP_IPCD_REFUND_WITH_ADJUSTMENTS = "IPCD_REFUND_WITH_ADJUSTMENTS";
private final PaymentConfig paymentConfig;
private final InvoiceInternalApi invoiceApi;
diff --git a/payment/src/main/java/org/killbill/billing/payment/core/DirectPaymentProcessor.java b/payment/src/main/java/org/killbill/billing/payment/core/DirectPaymentProcessor.java
index 1043979..042ff7a 100644
--- a/payment/src/main/java/org/killbill/billing/payment/core/DirectPaymentProcessor.java
+++ b/payment/src/main/java/org/killbill/billing/payment/core/DirectPaymentProcessor.java
@@ -274,7 +274,7 @@ public class DirectPaymentProcessor extends ProcessorBase {
transactionModelDao.getGatewayErrorCode(), transactionModelDao.getGatewayErrorMsg(), internalCallContext);
}
- public void notifyPaymentPaymentOfChargeback(final Account account, final UUID transactionId, final String chargebackTransactionExternalKey, final BigDecimal amount, final Currency currency, final CallContext callContext, final InternalCallContext internalCallContext) throws PaymentApiException {
+ public DirectPayment notifyPaymentPaymentOfChargeback(final Account account, final UUID transactionId, final String chargebackTransactionExternalKey, final BigDecimal amount, final Currency currency, final CallContext callContext, final InternalCallContext internalCallContext) throws PaymentApiException {
validateUniqueTransactionExternalKey(chargebackTransactionExternalKey, internalCallContext);
@@ -293,6 +293,7 @@ public class DirectPaymentProcessor extends ProcessorBase {
chargebackTransaction.getAmount(), chargebackTransaction.getCurrency(),
chargebackTransaction.getGatewayErrorCode(), chargebackTransaction.getGatewayErrorMsg(), internalCallContext);
+ return getPayment(transactionModelDao.getPaymentId(), false, ImmutableList.<PluginProperty>of(), callContext, internalCallContext);
}
public DirectPayment getPayment(final UUID directPaymentId, final boolean withPluginInfo, final Iterable<PluginProperty> properties, final TenantContext tenantContext, final InternalTenantContext internalTenantContext) throws PaymentApiException {