diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java
index 448d539..9c595e1 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java
@@ -181,11 +181,7 @@ public class InvoiceResource extends JaxRsResourceBase {
@HeaderParam(HDR_COMMENT) final String comment,
@javax.ws.rs.core.Context final HttpServletRequest request) throws AccountApiException, InvoiceApiException {
final CallContext callContext = context.createContext(createdBy, reason, comment, request);
-
- final Account account = accountUserApi.getAccountById(UUID.fromString(accountId), callContext);
-
- final DateTime inputDateTime = targetDateTime != null ? DATE_TIME_FORMATTER.parseDateTime(targetDateTime) : clock.getUTCNow();
- final LocalDate inputDate = inputDateTime.toDateTime(account.getTimeZone()).toLocalDate();
+ final LocalDate inputDate = toLocalDate(UUID.fromString(accountId), targetDateTime, callContext);
final Invoice generatedInvoice = invoiceApi.triggerInvoiceGeneration(UUID.fromString(accountId), inputDate, dryRun,
callContext);
@@ -229,26 +225,17 @@ public class InvoiceResource extends JaxRsResourceBase {
@javax.ws.rs.core.Context final HttpServletRequest request) throws AccountApiException, InvoiceApiException {
final CallContext callContext = context.createContext(createdBy, reason, comment, request);
- final Account account = accountUserApi.getAccountById(UUID.fromString(json.getAccountId()), callContext);
-
- // Get the effective date of the adjustment, in the account timezone
- final LocalDate requestedDate;
- if (requestedDateTimeString == null) {
- requestedDate = clock.getUTCToday();
- } else {
- final DateTime requestedDateTime = DATE_TIME_FORMATTER.parseDateTime(requestedDateTimeString);
- requestedDate = requestedDateTime.toDateTime(account.getTimeZone()).toLocalDate();
- }
-
+ final UUID accountId = UUID.fromString(json.getAccountId());
+ final LocalDate requestedDate = toLocalDate(accountId, requestedDateTimeString, callContext);
final InvoiceItem adjustmentItem;
if (json.getAmount() == null) {
- adjustmentItem = invoiceApi.insertInvoiceItemAdjustment(account.getId(),
+ adjustmentItem = invoiceApi.insertInvoiceItemAdjustment(accountId,
UUID.fromString(invoiceId),
UUID.fromString(json.getInvoiceItemId()),
requestedDate,
callContext);
} else {
- adjustmentItem = invoiceApi.insertInvoiceItemAdjustment(account.getId(),
+ adjustmentItem = invoiceApi.insertInvoiceItemAdjustment(accountId,
UUID.fromString(invoiceId),
UUID.fromString(json.getInvoiceItemId()),
requestedDate,
@@ -276,13 +263,7 @@ public class InvoiceResource extends JaxRsResourceBase {
final Account account = accountUserApi.getAccountById(UUID.fromString(externalChargeJson.getAccountId()), callContext);
// Get the effective date of the external charge, in the account timezone
- final LocalDate requestedDate;
- if (requestedDateTimeString == null) {
- requestedDate = clock.getUTCToday();
- } else {
- final DateTime requestedDateTime = DATE_TIME_FORMATTER.parseDateTime(requestedDateTimeString);
- requestedDate = requestedDateTime.toDateTime(account.getTimeZone()).toLocalDate();
- }
+ final LocalDate requestedDate = toLocalDate(account, requestedDateTimeString, callContext);
final Currency currency = Objects.firstNonNull(externalChargeJson.getCurrency(), account.getCurrency());
final InvoiceItem externalCharge;
@@ -316,13 +297,7 @@ public class InvoiceResource extends JaxRsResourceBase {
final Account account = accountUserApi.getAccountById(UUID.fromString(externalChargeJson.getAccountId()), callContext);
// Get the effective date of the external charge, in the account timezone
- final LocalDate requestedDate;
- if (requestedDateTimeString == null) {
- requestedDate = clock.getUTCToday();
- } else {
- final DateTime requestedDateTime = DATE_TIME_FORMATTER.parseDateTime(requestedDateTimeString);
- requestedDate = requestedDateTime.toDateTime(account.getTimeZone()).toLocalDate();
- }
+ final LocalDate requestedDate = toLocalDate(account, requestedDateTimeString, callContext);
final UUID invoiceId = UUID.fromString(invoiceIdString);
final Currency currency = Objects.firstNonNull(externalChargeJson.getCurrency(), account.getCurrency());
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxRsResourceBase.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxRsResourceBase.java
index e0ee06a..3915e39 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxRsResourceBase.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxRsResourceBase.java
@@ -172,24 +172,33 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
protected LocalDate toLocalDate(final UUID accountId, final String inputDate, final TenantContext context) {
- if (inputDate != null) {
- try {
- final LocalDate localDate = LocalDate.parse(inputDate, LOCAL_DATE_FORMATTER);
- return localDate;
- } catch (IllegalArgumentException expectedAndIgnore) { /*Fall through... */ }
+ final LocalDate maybeResult = extractLocalDate(inputDate);
+ if (maybeResult != null) {
+ return maybeResult;
}
- final DateTime inputDateTime = inputDate != null ? DATE_TIME_FORMATTER.parseDateTime(inputDate) : clock.getUTCNow();
- return toLocalDate(accountId, inputDateTime, context);
- }
-
- private LocalDate toLocalDate(final UUID accountId, final DateTime inputDate, final TenantContext context) {
Account account = null;
try {
account = accountId != null ? accountUserApi.getAccountById(accountId, context) : null;
} catch (AccountApiException e) {
log.info("Failed to retrieve account for id " + accountId);
}
+ final DateTime inputDateTime = inputDate != null ? DATE_TIME_FORMATTER.parseDateTime(inputDate) : clock.getUTCNow();
+ return toLocalDate(account, inputDateTime, context);
+ }
+
+
+ protected LocalDate toLocalDate(final Account account, final String inputDate, final TenantContext context) {
+
+ final LocalDate maybeResult = extractLocalDate(inputDate);
+ if (maybeResult != null) {
+ return maybeResult;
+ }
+ final DateTime inputDateTime = inputDate != null ? DATE_TIME_FORMATTER.parseDateTime(inputDate) : clock.getUTCNow();
+ return toLocalDate(account, inputDateTime, context);
+ }
+
+ private LocalDate toLocalDate(final Account account, final DateTime inputDate, final TenantContext context) {
if (account == null && inputDate == null) {
// We have no inputDate and so accountTimeZone so we default to LocalDate as seen in UTC
return new LocalDate(clock.getUTCNow(), DateTimeZone.UTC);
@@ -204,4 +213,15 @@ public abstract class JaxRsResourceBase implements JaxrsResource {
return new LocalDate(inputDate, account.getTimeZone());
}
}
+
+ private LocalDate extractLocalDate(final String inputDate) {
+ if (inputDate != null) {
+ try {
+ final LocalDate localDate = LocalDate.parse(inputDate, LOCAL_DATE_FORMATTER);
+ return localDate;
+ } catch (IllegalArgumentException expectedAndIgnore) {
+ }
+ }
+ return null;
+ }
}