killbill-uncached

Details

diff --git a/payment/src/main/java/com/ning/billing/payment/bus/PaymentTagHandler.java b/payment/src/main/java/com/ning/billing/payment/bus/PaymentTagHandler.java
index d67bb0a..d9a260f 100644
--- a/payment/src/main/java/com/ning/billing/payment/bus/PaymentTagHandler.java
+++ b/payment/src/main/java/com/ning/billing/payment/bus/PaymentTagHandler.java
@@ -24,6 +24,7 @@ import org.slf4j.LoggerFactory;
 import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
+import com.ning.billing.callcontext.InternalCallContext;
 import com.ning.billing.payment.api.PaymentApiException;
 import com.ning.billing.payment.core.PaymentProcessor;
 import com.ning.billing.util.callcontext.CallContext;
@@ -65,18 +66,22 @@ public class PaymentTagHandler {
 
         if (event.getTagDefinition().getName().equals(ControlTagType.AUTO_PAY_OFF.toString()) && event.getObjectType() == ObjectType.ACCOUNT) {
             final UUID accountId = event.getObjectId();
-            processUnpaid_AUTO_PAY_OFF_payments(accountId, null);
+            processUnpaid_AUTO_PAY_OFF_payments(accountId, event.getSearchKey1(), event.getSearchKey2(), event.getUserToken());
         }
     }
 
-    private void processUnpaid_AUTO_PAY_OFF_payments(final UUID accountId, final UUID userToken) {
+    private void processUnpaid_AUTO_PAY_OFF_payments(final UUID accountId, final Long accountRecordId, final Long tenantRecordId, final UUID userToken) {
         try {
-            // TODO retrieve tenantId?
+
+            // A bit convoluted... we need to specify correct tenant info for getAccountById if not multi-tenant implementation will break
+            // In addition for removing tag, we also need correct account (recordId) info
+            //
             final CallContext context = new DefaultCallContext(null, "PaymentRequestProcessor", CallOrigin.INTERNAL, UserType.SYSTEM, userToken, clock);
-            final InternalTenantContext internalContext = internalCallContextFactory.createInternalCallContext(context);
-            final Account account = accountApi.getAccountById(accountId, internalContext);
+            final InternalCallContext tmp = internalCallContextFactory.createInternalCallContext(accountId, context);
+            final InternalCallContext internalCallContext = internalCallContextFactory.createInternalCallContext(tenantRecordId, accountRecordId, tmp);
 
-            paymentProcessor.process_AUTO_PAY_OFF_removal(account, internalCallContextFactory.createInternalCallContext(accountId, context));
+            final Account account = accountApi.getAccountById(accountId, internalCallContext);
+            paymentProcessor.process_AUTO_PAY_OFF_removal(account, internalCallContext);
 
         } catch (AccountApiException e) {
             log.warn(String.format("Failed to process process  removal AUTO_PAY_OFF for account %s", accountId), e);