Search in sources :

Example 1 with BlockingApiException

use of org.killbill.billing.entitlement.api.BlockingApiException in project killbill by killbill.

the class OverdueStateApplicator method clear.

public void clear(final DateTime effectiveDate, final ImmutableAccountData account, final OverdueState previousOverdueState, final OverdueState clearState, final InternalCallContext context) throws OverdueException {
    log.debug("OverdueStateApplicator:clear : time = " + effectiveDate + ", previousState = " + previousOverdueState.getName());
    storeNewState(effectiveDate, account, clearState, context);
    clearFutureNotification(account, context);
    try {
        avoid_extra_credit_by_toggling_AUTO_INVOICE_OFF(account, previousOverdueState, clearState, context);
    } catch (final OverdueApiException e) {
        throw new OverdueException(e);
    }
    final OverdueChangeInternalEvent event;
    try {
        event = createOverdueEvent(account, previousOverdueState.getName(), clearState.getName(), isBlockBillingTransition(previousOverdueState, clearState), isUnblockBillingTransition(previousOverdueState, clearState), context);
    } catch (final BlockingApiException e) {
        log.warn("Failed to create OverdueChangeInternalEvent for accountId='{}'", account.getId(), e);
        return;
    }
    try {
        bus.post(event);
    } catch (final Exception e) {
        log.warn("Failed to post event {}", event, e);
    }
}
Also used : OverdueException(org.killbill.billing.overdue.config.api.OverdueException) OverdueChangeInternalEvent(org.killbill.billing.events.OverdueChangeInternalEvent) BlockingApiException(org.killbill.billing.entitlement.api.BlockingApiException) TagApiException(org.killbill.billing.util.api.TagApiException) EntitlementApiException(org.killbill.billing.entitlement.api.EntitlementApiException) BlockingApiException(org.killbill.billing.entitlement.api.BlockingApiException) AccountApiException(org.killbill.billing.account.api.AccountApiException) EmailApiException(org.killbill.billing.util.email.EmailApiException) OverdueException(org.killbill.billing.overdue.config.api.OverdueException) MustacheException(com.samskivert.mustache.MustacheException) IOException(java.io.IOException) OverdueApiException(org.killbill.billing.overdue.api.OverdueApiException) OverdueApiException(org.killbill.billing.overdue.api.OverdueApiException)

Example 2 with BlockingApiException

use of org.killbill.billing.entitlement.api.BlockingApiException in project killbill by killbill.

the class OverdueStateApplicator method apply.

public void apply(final DateTime effectiveDate, final OverdueStateSet overdueStateSet, final BillingState billingState, final ImmutableAccountData account, final OverdueState previousOverdueState, final OverdueState nextOverdueState, final InternalCallContext context) throws OverdueException, OverdueApiException {
    try {
        if (isAccountTaggedWith_OVERDUE_ENFORCEMENT_OFF(context)) {
            log.debug("OverdueStateApplicator: apply returns because account (recordId={}) is set with OVERDUE_ENFORCEMENT_OFF", context.getAccountRecordId());
            return;
        }
        log.debug("OverdueStateApplicator: time={}, previousState={}, nextState={}, billingState={}", effectiveDate, previousOverdueState, nextOverdueState, billingState);
        final OverdueState firstOverdueState = overdueStateSet.getFirstState();
        final boolean conditionForNextNotfication = !nextOverdueState.isClearState() || // We did not reach the first state yet but we have an unpaid invoice
        (firstOverdueState != null && billingState != null && billingState.getDateOfEarliestUnpaidInvoice() != null);
        if (conditionForNextNotfication) {
            final Period reevaluationInterval = getReevaluationInterval(overdueStateSet, nextOverdueState);
            // If there is no configuration in the config, we assume this is because the overdue conditions are not time based and so there is nothing to retry
            if (reevaluationInterval == null) {
                log.debug("OverdueStateApplicator <notificationQ>: missing InitialReevaluationInterval from config, NOT inserting notification for account {}", account.getId());
            } else {
                log.debug("OverdueStateApplicator <notificationQ>: inserting notification for account={}, time={}", account.getId(), effectiveDate.plus(reevaluationInterval));
                createFutureNotification(account, effectiveDate.plus(reevaluationInterval), context);
            }
        } else if (nextOverdueState.isClearState()) {
            clearFutureNotification(account, context);
        }
        if (previousOverdueState.getName().equals(nextOverdueState.getName())) {
            log.debug("OverdueStateApplicator is no-op: previousState={}, nextState={}", previousOverdueState, nextOverdueState);
            return;
        }
        cancelSubscriptionsIfRequired(effectiveDate, account, nextOverdueState, context);
        sendEmailIfRequired(account.getId(), billingState, nextOverdueState, context);
        avoid_extra_credit_by_toggling_AUTO_INVOICE_OFF(account, previousOverdueState, nextOverdueState, context);
        // Make sure to store the new state last here: the entitlement DAO will send a BlockingTransitionInternalEvent
        // on the bus to which invoice will react. We need the latest state (including AUTO_INVOICE_OFF tag for example)
        // to be present in the database first.
        storeNewState(effectiveDate, account, nextOverdueState, context);
    } catch (final AccountApiException e) {
        throw new OverdueException(e);
    }
    final OverdueChangeInternalEvent event;
    try {
        event = createOverdueEvent(account, previousOverdueState.getName(), nextOverdueState.getName(), isBlockBillingTransition(previousOverdueState, nextOverdueState), isUnblockBillingTransition(previousOverdueState, nextOverdueState), context);
    } catch (final BlockingApiException e) {
        log.warn("Failed to create OverdueChangeInternalEvent for accountId='{}'", account.getId(), e);
        return;
    }
    try {
        bus.post(event);
    } catch (final Exception e) {
        log.warn("Failed to post event {}", event, e);
    }
}
Also used : AccountApiException(org.killbill.billing.account.api.AccountApiException) Period(org.joda.time.Period) OverdueException(org.killbill.billing.overdue.config.api.OverdueException) OverdueChangeInternalEvent(org.killbill.billing.events.OverdueChangeInternalEvent) BlockingApiException(org.killbill.billing.entitlement.api.BlockingApiException) OverdueState(org.killbill.billing.overdue.api.OverdueState) TagApiException(org.killbill.billing.util.api.TagApiException) EntitlementApiException(org.killbill.billing.entitlement.api.EntitlementApiException) BlockingApiException(org.killbill.billing.entitlement.api.BlockingApiException) AccountApiException(org.killbill.billing.account.api.AccountApiException) EmailApiException(org.killbill.billing.util.email.EmailApiException) OverdueException(org.killbill.billing.overdue.config.api.OverdueException) MustacheException(com.samskivert.mustache.MustacheException) IOException(java.io.IOException) OverdueApiException(org.killbill.billing.overdue.api.OverdueApiException)

Aggregations

MustacheException (com.samskivert.mustache.MustacheException)2 IOException (java.io.IOException)2 AccountApiException (org.killbill.billing.account.api.AccountApiException)2 BlockingApiException (org.killbill.billing.entitlement.api.BlockingApiException)2 EntitlementApiException (org.killbill.billing.entitlement.api.EntitlementApiException)2 OverdueChangeInternalEvent (org.killbill.billing.events.OverdueChangeInternalEvent)2 OverdueApiException (org.killbill.billing.overdue.api.OverdueApiException)2 OverdueException (org.killbill.billing.overdue.config.api.OverdueException)2 TagApiException (org.killbill.billing.util.api.TagApiException)2 EmailApiException (org.killbill.billing.util.email.EmailApiException)2 Period (org.joda.time.Period)1 OverdueState (org.killbill.billing.overdue.api.OverdueState)1