Details
diff --git a/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java b/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java
index c99f160..1d63e9d 100644
--- a/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java
+++ b/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java
@@ -57,6 +57,14 @@ public interface InvoiceUserApi {
public BigDecimal getAccountBalance(UUID accountId);
/**
+ * Retrieve the account CBA.
+ *
+ * @param accountId account id
+ * @return the account CBA
+ */
+ public BigDecimal getAccountCBA(UUID accountId);
+
+ /**
* Retrieve an invoice by id.
*
* @param invoiceId invoice id
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
index d9c855c..6e05ad7 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
@@ -91,6 +91,12 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
}
@Override
+ public BigDecimal getAccountCBA(final UUID accountId) {
+ final BigDecimal result = dao.getAccountCBA(accountId);
+ return result == null ? BigDecimal.ZERO : result;
+ }
+
+ @Override
public Invoice getInvoice(final UUID invoiceId) throws InvoiceApiException {
return dao.getById(invoiceId);
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJsonWithBalance.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJsonWithBalance.java
index 618f924..5235fcb 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJsonWithBalance.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJsonWithBalance.java
@@ -13,14 +13,15 @@
* License for the specific language governing permissions and limitations
* under the License.
*/
+
package com.ning.billing.jaxrs.json;
import java.math.BigDecimal;
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.ning.billing.account.api.Account;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
public class AccountJsonWithBalance extends AccountJson {
@@ -33,29 +34,29 @@ public class AccountJsonWithBalance extends AccountJson {
@JsonCreator
public AccountJsonWithBalance(@JsonProperty("accountId") final String accountId,
- @JsonProperty("name") final String name,
- @JsonProperty("firstNameLength") final Integer length,
- @JsonProperty("externalKey") final String externalKey,
- @JsonProperty("email") final String email,
- @JsonProperty("billCycleDay") final BillCycleDayJson billCycleDay,
- @JsonProperty("currency") final String currency,
- @JsonProperty("paymentMethodId") final String paymentMethodId,
- @JsonProperty("timezone") final String timeZone,
- @JsonProperty("address1") final String address1,
- @JsonProperty("address2") final String address2,
- @JsonProperty("postalCode") final String postalCode,
- @JsonProperty("company") final String company,
- @JsonProperty("city") final String city,
- @JsonProperty("state") final String state,
- @JsonProperty("country") final String country,
- @JsonProperty("locale") final String locale,
- @JsonProperty("phone") final String phone,
- @JsonProperty("isMigrated") final Boolean isMigrated,
- @JsonProperty("isNotifiedForInvoices") final Boolean isNotifiedForInvoices,
- @JsonProperty("accountBalance") final BigDecimal accountBalance) {
- super(accountId, name, length, externalKey, email, billCycleDay, currency, paymentMethodId, timeZone,
- address1, address2, postalCode, company, city, state, country, locale, phone, isMigrated, isNotifiedForInvoices);
- this.accountBalance = accountBalance;
+ @JsonProperty("name") final String name,
+ @JsonProperty("firstNameLength") final Integer length,
+ @JsonProperty("externalKey") final String externalKey,
+ @JsonProperty("email") final String email,
+ @JsonProperty("billCycleDay") final BillCycleDayJson billCycleDay,
+ @JsonProperty("currency") final String currency,
+ @JsonProperty("paymentMethodId") final String paymentMethodId,
+ @JsonProperty("timezone") final String timeZone,
+ @JsonProperty("address1") final String address1,
+ @JsonProperty("address2") final String address2,
+ @JsonProperty("postalCode") final String postalCode,
+ @JsonProperty("company") final String company,
+ @JsonProperty("city") final String city,
+ @JsonProperty("state") final String state,
+ @JsonProperty("country") final String country,
+ @JsonProperty("locale") final String locale,
+ @JsonProperty("phone") final String phone,
+ @JsonProperty("isMigrated") final Boolean isMigrated,
+ @JsonProperty("isNotifiedForInvoices") final Boolean isNotifiedForInvoices,
+ @JsonProperty("accountBalance") final BigDecimal accountBalance) {
+ super(accountId, name, length, externalKey, email, billCycleDay, currency, paymentMethodId, timeZone,
+ address1, address2, postalCode, company, city, state, country, locale, phone, isMigrated, isNotifiedForInvoices);
+ this.accountBalance = accountBalance;
}
public BigDecimal getAccountBalance() {
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJsonWithBalanceAndCBA.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJsonWithBalanceAndCBA.java
new file mode 100644
index 0000000..17f0acb
--- /dev/null
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJsonWithBalanceAndCBA.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.jaxrs.json;
+
+import java.math.BigDecimal;
+
+import com.ning.billing.account.api.Account;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class AccountJsonWithBalanceAndCBA extends AccountJsonWithBalance {
+
+ private final BigDecimal accountCBA;
+
+ public AccountJsonWithBalanceAndCBA(final Account account, final BigDecimal accountBalance, final BigDecimal accountCBA) {
+ super(account, accountBalance);
+ this.accountCBA = accountCBA;
+ }
+
+ @JsonCreator
+ public AccountJsonWithBalanceAndCBA(@JsonProperty("accountId") final String accountId,
+ @JsonProperty("name") final String name,
+ @JsonProperty("firstNameLength") final Integer length,
+ @JsonProperty("externalKey") final String externalKey,
+ @JsonProperty("email") final String email,
+ @JsonProperty("billCycleDay") final BillCycleDayJson billCycleDay,
+ @JsonProperty("currency") final String currency,
+ @JsonProperty("paymentMethodId") final String paymentMethodId,
+ @JsonProperty("timezone") final String timeZone,
+ @JsonProperty("address1") final String address1,
+ @JsonProperty("address2") final String address2,
+ @JsonProperty("postalCode") final String postalCode,
+ @JsonProperty("company") final String company,
+ @JsonProperty("city") final String city,
+ @JsonProperty("state") final String state,
+ @JsonProperty("country") final String country,
+ @JsonProperty("locale") final String locale,
+ @JsonProperty("phone") final String phone,
+ @JsonProperty("isMigrated") final Boolean isMigrated,
+ @JsonProperty("isNotifiedForInvoices") final Boolean isNotifiedForInvoices,
+ @JsonProperty("accountBalance") final BigDecimal accountBalance,
+ @JsonProperty("accountCBA") final BigDecimal accountCBA) {
+ super(accountId, name, length, externalKey, email, billCycleDay, currency, paymentMethodId, timeZone, address1,
+ address2, postalCode, company, city, state, country, locale, phone, isMigrated, isNotifiedForInvoices, accountBalance);
+ this.accountCBA = accountCBA;
+ }
+
+ public BigDecimal getAccountCBA() {
+ return accountCBA;
+ }
+}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
index ee4a6fc..6d186d3 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
@@ -60,6 +60,7 @@ import com.ning.billing.invoice.api.InvoiceUserApi;
import com.ning.billing.jaxrs.json.AccountEmailJson;
import com.ning.billing.jaxrs.json.AccountJson;
import com.ning.billing.jaxrs.json.AccountJsonWithBalance;
+import com.ning.billing.jaxrs.json.AccountJsonWithBalanceAndCBA;
import com.ning.billing.jaxrs.json.AccountTimelineJson;
import com.ning.billing.jaxrs.json.BundleJsonNoSubscriptions;
import com.ning.billing.jaxrs.json.CustomFieldJson;
@@ -136,17 +137,10 @@ public class AccountResource extends JaxRsResourceBase {
@Path("/{accountId:" + UUID_PATTERN + "}")
@Produces(APPLICATION_JSON)
public Response getAccount(@PathParam("accountId") final String accountId,
- @QueryParam(QUERY_ACCOUNT_WITH_BALANCE) @DefaultValue("false") final Boolean accountWithBalance) throws AccountApiException {
+ @QueryParam(QUERY_ACCOUNT_WITH_BALANCE) @DefaultValue("false") final Boolean accountWithBalance,
+ @QueryParam(QUERY_ACCOUNT_WITH_BALANCE_AND_CBA) @DefaultValue("false") final Boolean accountWithBalanceAndCBA) throws AccountApiException {
final Account account = accountApi.getAccountById(UUID.fromString(accountId));
-
- AccountJson json = null;
- if (accountWithBalance) {
- final BigDecimal accountBalance = invoiceApi.getAccountBalance(account.getId());
- json = new AccountJsonWithBalance(account, accountBalance);
- } else {
- json = new AccountJson(account);
- }
- return Response.status(Status.OK).entity(json).build();
+ return getAccount(account, accountWithBalance, accountWithBalanceAndCBA);
}
@GET
@@ -177,16 +171,24 @@ public class AccountResource extends JaxRsResourceBase {
@GET
@Produces(APPLICATION_JSON)
public Response getAccountByKey(@QueryParam(QUERY_EXTERNAL_KEY) final String externalKey,
- @QueryParam(QUERY_ACCOUNT_WITH_BALANCE) @DefaultValue("false") final Boolean accountWithBalance) throws AccountApiException {
+ @QueryParam(QUERY_ACCOUNT_WITH_BALANCE) @DefaultValue("false") final Boolean accountWithBalance,
+ @QueryParam(QUERY_ACCOUNT_WITH_BALANCE_AND_CBA) @DefaultValue("false") final Boolean accountWithBalanceAndCBA) throws AccountApiException {
final Account account = accountApi.getAccountByKey(externalKey);
- AccountJson json = null;
- if (accountWithBalance) {
+ return getAccount(account, accountWithBalance, accountWithBalanceAndCBA);
+ }
+
+ private Response getAccount(final Account account, final Boolean accountWithBalance, final Boolean accountWithBalanceAndCBA) {
+ final AccountJson json;
+ if (accountWithBalanceAndCBA) {
+ final BigDecimal accountBalance = invoiceApi.getAccountBalance(account.getId());
+ final BigDecimal accountCBA = invoiceApi.getAccountCBA(account.getId());
+ json = new AccountJsonWithBalanceAndCBA(account, accountBalance, accountCBA);
+ } else if (accountWithBalance) {
final BigDecimal accountBalance = invoiceApi.getAccountBalance(account.getId());
json = new AccountJsonWithBalance(account, accountBalance);
} else {
json = new AccountJson(account);
}
-
return Response.status(Status.OK).entity(json).build();
}
@@ -214,7 +216,7 @@ public class AccountResource extends JaxRsResourceBase {
final AccountData data = json.toAccountData();
final UUID uuid = UUID.fromString(accountId);
accountApi.updateAccount(uuid, data, context.createContext(createdBy, reason, comment));
- return getAccount(accountId, false);
+ return getAccount(accountId, false, false);
}
// Not supported
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
index 56f7140..9c8af32 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
@@ -51,6 +51,7 @@ public interface JaxrsResource {
public static final String QUERY_POLICY = "policy";
public static final String QUERY_ACCOUNT_WITH_BALANCE = "accountWithBalance";
+ public static final String QUERY_ACCOUNT_WITH_BALANCE_AND_CBA = "accountWithBalanceAndCBA";
public static final String QUERY_ACCOUNT_ID = "accountId";