Class PaymentReversalFulfillmentCancelledListener
- java.lang.Object
-
- com.broadleafcommerce.orderoperation.service.messaging.fulfillments.AbstractPaymentReversalFulfillmentStatusChangeListener
-
- com.broadleafcommerce.orderoperation.service.messaging.fulfillments.PaymentReversalFulfillmentCancelledListener
-
public class PaymentReversalFulfillmentCancelledListener extends AbstractPaymentReversalFulfillmentStatusChangeListener
Listens for cancelledFulfillmentStatusChangeEvent
and cancels the payment for the cancelled fulfillment if necessary, by reverse authorizing or refunding.
-
-
Field Summary
-
Fields inherited from class com.broadleafcommerce.orderoperation.service.messaging.fulfillments.AbstractPaymentReversalFulfillmentStatusChangeListener
STATUSES_ELIGIBLE_FOR_CAPTURE
-
-
Constructor Summary
Constructors Constructor Description PaymentReversalFulfillmentCancelledListener(com.broadleafcommerce.common.messaging.service.IdempotentMessageConsumptionService idempotentMessageService, PaymentProvider paymentProvider, PaymentRefundService paymentRefundService, PaymentAuthReversalService paymentAuthReversalService, OrderProvider<com.broadleafcommerce.order.client.domain.Order> orderProvider, FulfillmentProvider<com.broadleafcommerce.order.client.domain.OrderFulfillment> fulfillmentProvider, ResourceLockProvider resourceLockProvider)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected PaymentProvider
getPaymentProvider()
protected PaymentRefundService
getPaymentRefundService()
protected javax.money.MonetaryAmount
getRefundableAmountOnFulfillment(com.broadleafcommerce.order.client.domain.OrderFulfillment fulfillment, com.broadleafcommerce.order.client.domain.Order order, String previousFulfillmentStatus, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
Determine the amount that can be refunded on the fulfillment.protected boolean
hasFulfillmentBeenFullyCaptured(com.broadleafcommerce.order.client.domain.OrderFulfillment fulfillment, com.broadleafcommerce.order.client.domain.Order order, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
Determines if the givenOrderFulfillment
has been fully captured.void
listen(org.springframework.messaging.Message<FulfillmentStatusChangeEvent> message)
Implementations should override this method to add aStreamListener
to listen on a channel forFulfillmentStatusChangeEvent
, and invokeAbstractPaymentReversalFulfillmentStatusChangeListener.processEvent(Message)
through theAbstractPaymentReversalFulfillmentStatusChangeListener.idempotentMessageService
.protected void
processEventInternal(com.broadleafcommerce.order.client.domain.OrderFulfillment fulfillment, com.broadleafcommerce.order.client.domain.Order order, String previousFulfillmentStatus, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
This should be extended to invoke the business logic for reversing non-captured payments.protected boolean
refundPaymentForFulfillmentIfNeeded(com.broadleafcommerce.order.client.domain.OrderFulfillment fulfillment, com.broadleafcommerce.order.client.domain.Order order, String previousFulfillmentStatus, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
Possibly performs a refund to cancel the fulfillment's payment.-
Methods inherited from class com.broadleafcommerce.orderoperation.service.messaging.fulfillments.AbstractPaymentReversalFulfillmentStatusChangeListener
cannotBeCaptured, entireOrderDoneCapturing, getFulfillmentProvider, getIdempotentMessageService, getOrder, getOrderProvider, getPaymentAuthReversalService, getResourceLockProvider, processEvent, reverseRemainingOrderAuthPaymentsIfNeeded
-
-
-
-
Constructor Detail
-
PaymentReversalFulfillmentCancelledListener
public PaymentReversalFulfillmentCancelledListener(com.broadleafcommerce.common.messaging.service.IdempotentMessageConsumptionService idempotentMessageService, PaymentProvider paymentProvider, PaymentRefundService paymentRefundService, PaymentAuthReversalService paymentAuthReversalService, OrderProvider<com.broadleafcommerce.order.client.domain.Order> orderProvider, FulfillmentProvider<com.broadleafcommerce.order.client.domain.OrderFulfillment> fulfillmentProvider, ResourceLockProvider resourceLockProvider)
-
-
Method Detail
-
listen
@StreamListener("orderOperationsFulfillmentCancelledInput") public void listen(org.springframework.messaging.Message<FulfillmentStatusChangeEvent> message)
Description copied from class:AbstractPaymentReversalFulfillmentStatusChangeListener
Implementations should override this method to add aStreamListener
to listen on a channel forFulfillmentStatusChangeEvent
, and invokeAbstractPaymentReversalFulfillmentStatusChangeListener.processEvent(Message)
through theAbstractPaymentReversalFulfillmentStatusChangeListener.idempotentMessageService
.- Specified by:
listen
in classAbstractPaymentReversalFulfillmentStatusChangeListener
- Parameters:
message
- the fulfillment status change message received
-
processEventInternal
protected void processEventInternal(com.broadleafcommerce.order.client.domain.OrderFulfillment fulfillment, com.broadleafcommerce.order.client.domain.Order order, String previousFulfillmentStatus, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
Description copied from class:AbstractPaymentReversalFulfillmentStatusChangeListener
This should be extended to invoke the business logic for reversing non-captured payments. This will be utilized fromAbstractPaymentReversalFulfillmentStatusChangeListener.processEvent(Message)
which will have already handled locking and hydrating the order and fulfillment.- Specified by:
processEventInternal
in classAbstractPaymentReversalFulfillmentStatusChangeListener
- Parameters:
fulfillment
- the fulfillment which changed statusorder
- the order containing the fulfillmentpreviousFulfillmentStatus
- the original status of the fulfillment before the changecontextInfo
- context information surrounding sandboxing and multitenant state
-
refundPaymentForFulfillmentIfNeeded
protected boolean refundPaymentForFulfillmentIfNeeded(com.broadleafcommerce.order.client.domain.OrderFulfillment fulfillment, com.broadleafcommerce.order.client.domain.Order order, String previousFulfillmentStatus, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
Possibly performs a refund to cancel the fulfillment's payment. If the fulfillment has been captured, then it should be refunded.- Parameters:
fulfillment
- the cancelled fulfillment for which to cancel paymentorder
- the order containing the fulfillmentpreviousFulfillmentStatus
- the original status of the fulfillment before cancelledcontextInfo
- context information surrounding sandboxing and multitenant state- Returns:
- true if the fulfillment was refunded, else false
-
getRefundableAmountOnFulfillment
protected javax.money.MonetaryAmount getRefundableAmountOnFulfillment(com.broadleafcommerce.order.client.domain.OrderFulfillment fulfillment, com.broadleafcommerce.order.client.domain.Order order, String previousFulfillmentStatus, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
Determine the amount that can be refunded on the fulfillment.Only fully successful fulfillment capture will be considered refundable. A fulfillment for which payment capture partially failed will not be considered refundable here.
The fulfillment can only be refunded through cancelling prior to starting
OrderFulfillmentStatus.FULFILLING
the fulfillment.- Parameters:
fulfillment
- the fulfillment which was cancelledorder
- the order containing the fulfillmentpreviousFulfillmentStatus
- the original status of the fulfillment before cancelled- Returns:
- the amount which has been successfully captured on this fulfillment
-
hasFulfillmentBeenFullyCaptured
protected boolean hasFulfillmentBeenFullyCaptured(com.broadleafcommerce.order.client.domain.OrderFulfillment fulfillment, com.broadleafcommerce.order.client.domain.Order order, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
Determines if the givenOrderFulfillment
has been fully captured.- Parameters:
fulfillment
- theOrderFulfillment
to check againstorder
- theOrder
that theOrderFulfillment
belongs tocontextInfo
- context information around sandbox and multitenant state- Returns:
- whether the
OrderFulfillment
has been fully captured
-
getPaymentRefundService
protected PaymentRefundService getPaymentRefundService()
-
getPaymentProvider
protected PaymentProvider getPaymentProvider()
-
-