For Braintree, return `active` subscription status if latest transaction also succeeded
This commit is contained in:
parent
84b56ae1b2
commit
7fbc327591
|
@ -220,9 +220,11 @@ public class BraintreeManager implements SubscriptionProcessorManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static SubscriptionStatus getSubscriptionStatus(final Subscription.Status status) {
|
private static SubscriptionStatus getSubscriptionStatus(final Subscription.Status status, final boolean latestTransactionFailed) {
|
||||||
return switch (status) {
|
return switch (status) {
|
||||||
case ACTIVE -> SubscriptionStatus.ACTIVE;
|
// Stripe returns a PAST_DUE status if the subscription's most recent payment failed.
|
||||||
|
// This check ensures that Braintree is consistent with Stripe.
|
||||||
|
case ACTIVE -> latestTransactionFailed ? SubscriptionStatus.PAST_DUE : SubscriptionStatus.ACTIVE;
|
||||||
case CANCELED, EXPIRED -> SubscriptionStatus.CANCELED;
|
case CANCELED, EXPIRED -> SubscriptionStatus.CANCELED;
|
||||||
case PAST_DUE -> SubscriptionStatus.PAST_DUE;
|
case PAST_DUE -> SubscriptionStatus.PAST_DUE;
|
||||||
case PENDING -> SubscriptionStatus.INCOMPLETE;
|
case PENDING -> SubscriptionStatus.INCOMPLETE;
|
||||||
|
@ -435,9 +437,11 @@ public class BraintreeManager implements SubscriptionProcessorManager {
|
||||||
|
|
||||||
final Optional<Transaction> latestTransaction = getLatestTransactionForSubscription(subscription);
|
final Optional<Transaction> latestTransaction = getLatestTransactionForSubscription(subscription);
|
||||||
|
|
||||||
|
boolean latestTransactionFailed = false;
|
||||||
if (latestTransaction.isPresent()){
|
if (latestTransaction.isPresent()){
|
||||||
paymentProcessing = isPaymentProcessing(latestTransaction.get().getStatus());
|
paymentProcessing = isPaymentProcessing(latestTransaction.get().getStatus());
|
||||||
if (getPaymentStatus(latestTransaction.get().getStatus()) != PaymentStatus.SUCCEEDED) {
|
if (getPaymentStatus(latestTransaction.get().getStatus()) != PaymentStatus.SUCCEEDED) {
|
||||||
|
latestTransactionFailed = true;
|
||||||
chargeFailure = createChargeFailure(latestTransaction.get());
|
chargeFailure = createChargeFailure(latestTransaction.get());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -450,7 +454,7 @@ public class BraintreeManager implements SubscriptionProcessorManager {
|
||||||
endOfCurrentPeriod,
|
endOfCurrentPeriod,
|
||||||
Subscription.Status.ACTIVE == subscription.getStatus(),
|
Subscription.Status.ACTIVE == subscription.getStatus(),
|
||||||
!subscription.neverExpires(),
|
!subscription.neverExpires(),
|
||||||
getSubscriptionStatus(subscription.getStatus()),
|
getSubscriptionStatus(subscription.getStatus(), latestTransactionFailed),
|
||||||
latestTransaction.map(this::getPaymentMethodFromTransaction).orElse(PaymentMethod.PAYPAL),
|
latestTransaction.map(this::getPaymentMethodFromTransaction).orElse(PaymentMethod.PAYPAL),
|
||||||
paymentProcessing,
|
paymentProcessing,
|
||||||
chargeFailure
|
chargeFailure
|
||||||
|
|
|
@ -84,7 +84,7 @@ public interface SubscriptionProcessorManager {
|
||||||
INCOMPLETE("incomplete"),
|
INCOMPLETE("incomplete"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Payment on the latest renewal either failed or wasn't attempted.
|
* Payment on the latest renewal failed but there are processor retries left, or payment wasn't attempted.
|
||||||
*/
|
*/
|
||||||
PAST_DUE("past_due"),
|
PAST_DUE("past_due"),
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue