Info
The Cashback feature is available from ICM version 7.10.15.2 or later.
Cashback is a promotional activity that should encourage customers to make further purchases. When a customer places an order in the webshop, a certain adjustable amount of cashback money is credited to the customer's account.
This cashback amount is stored in the database after the order has been processed.
Depending on the configuration in Intershop Commerce Management, there are two options:
Note
The standard cashback process consists of the following steps:
When the cashback feature is enabled and a cashback promotion is configured in Intershop Commerce Management, all orders that are created through the order creation process will earn cashback. For every "earning order" a cashback object with a corresponding promotion code is automatically generated and stored in the database. Each cashback has a configurable validity period (e.g., 30 days). The corresponding order creation handler is "CashbackOrderCreationHandler
".
Initially, a cashback promotion code has a theoretical maximum value. It gains its practical value for each shipped line item. This means the maximum cashback value is available once all line items are shipped. It is not available as discount immediately after purchase. In the Intershop Commerce Management this is handled with the Order Fulfillment Status Import, see Concept - Order Fulfillment Status Import.
In case the earning order is returned (also via Order Fulfillment Status Import), the cashback that was earned with this order becomes invalid (voided) if it is not already redeemed.
If a promotion code was generated for the earned cashback, this code can be used to redeem the earned cashback amount in one of the next orders. If the cashback has a positive available amount, the promotion code can be applied to a basket even if there are line items from the earning order that have not been shipped yet. In that case only the available amount of the cashback will be given as discount and the remaining amount that is not charged yet will expire. The promotion code can only be applied once and the cashback is given as single order discount. If less than the available cashback value is used, the remaining amount expires. A cashback promotion code is bound to the person (registered or unregistered) that earned the cashback. Only this person can redeem the code using the same user account or e-mail address like in the earning process.
Info
Only one cashback code per basket can be redeemed.
The order that included a cashback promotion code is called redemption order for a certain cashback code. A redemption order for promotion code A can also be the earning order for promotion code B.
The redemption of the promotion code will be handled in the order creation chain handler "CashbackRedemptionOrderCreationHandler
".
If one line item of the earning order is returned, the whole cashback amount is voided.
The cashback feature can be disabled/enabled in the Channel at Preferences | Promotion Preferences | Cashback Settings as shown below.
It is also possible to maintain how the generated cashback promotion codes look like (code length, prefix, excluded characters).
When the cashback feature is deactivated after a certain time of activity, the earned promotion codes cannot be used anymore. Promotion codes that are already applied to a basket when the feature is switched off stay valid and will be redeemed in the order process.
At the end of a cashback campaign it is recommended to disable the earning promotion first and not to disable the feature at all. This ensures that no further cashback is collected but existing cashback promotion codes can be redeemed within the defined validity period.
When the Order Fulfillment Status Import is used to update the order / order PLI status information, the earned cashback will automatically be available when the product line items are delivered.
Info
Example
Earning order:
As soon as the 5 cables are delivered, the earned cashback of PLI2, e.g., 20 USD will be available.
The 2 notebooks are delivered one week later. Then the earned cashback of the PLI1, e.g. 100 USD, will be added to the available value of the cashback, if the cashback code is not redeemed yet.
The available value of the cashback for redemption with the next order is now 120 USD.
If an order or any order product line item with the status "RETURNED"
is imported, the cashback will be voided.
After the fulfillment status import a CashbackOrderStatusChangeHandler
is triggered to process the cashback in case of status changes for an order or a product line item. This handler also triggers the notification, see Notification Handling.
If a custom implementation of this handler is required, it can be replaced. See Recipe: Exchange the implementation of the CashbackOrderStatusChangeHandler interface for details.
In case the Order Fulfillment Status is not imported via the Order Fulfillment Status Import, the charging and voiding of cashback promotion codes has to be triggered manually. This can be done by using a CashbackOrderStatusChangeHandler
.
Here is a code example of how to call the handler:
... @Inject private CashbackOrderStatusChangeHandler cashbackOrderStatusChangeHandler; // set status of order (only relevant for voiding cashback in case of return) cashbackOrderStatusChangeHandler.orderStatusChanged(OrderBO, "DELIVERED", "RETURNED"); // set status of order product line items (important for charging of cashback for shipped line items) cashbackOrderStatusChangeHandler.orderProductLineItemsStatusChanged(OrderBO, Collection<CashbackPLIStatus>); ...
CashbackPLIStatus
is just an aggregated object to store the status (before, after) for every OrderProductLineItemBO
.
class CashbackPLIStatus { OrderProductLineItemBO pliBO; // The order product line items whose status changed String preFulfillmentStatus; // e.g. "NEW" String actualFulfillmentStatus; // e.g. "DELIVERED" }
The standard implementation of the CashbackOrderStatusChangeHandlerhandler
also triggers the notification process, see Notification Handling.
In case the cashback is charged or canceled, the customer gets an e-mail notification from the mail service.
The standard CashbackOrderStatusChangeHandler
implementation triggers the strict pipeline ProcessCashbackNotifications-NotificationCashbackCharged
for charging and ProcessCashbackNotifications-NotificationCashbackVoided
for cancelation.
Each of these pipelines contains a pipeline extension point with the following parameters:
CashbackInformation
(contains all the needed information about the cashback)NotificationType
(TOTAL_DELIVERY
, PARTIAL_DELIVERY_INITIAL
, PARTIAL_DELIVERY_INTERMEDIATE
, PARTIAL_DELIVERY_FINAL
), only for chargingApplicationBO
(optional)which should be used to connect to a mail notification.
By default there is a storefront pipeline (ProcessCashbackNotificationsExtension.pipeline) connected to the extension points which sends e-mails to the customer on every cashback status change. If this is not suitable and should be changed, a custom implementation can be added (Recipe: Add a Custom Cashback Notification Extension) or the current implementation can be replaced (Recipe: Exchange Standard Cashback Notification With Custom Implementation).
The cashback earning promotion as well as the cashback redemption promotion are based on promotions with specific settings and also a special condition and action.
The cashback condition and action are only available if the cashback feature flag is enabled.
The setup of cashback promotions for cashback earning and redemption is explained in the following paragraphs.
This promotion is necessary to earn cashback. Consider the following settings:
(1) Priority: Use the lowest priority (0) to ensure that the cashback earning is the last promotion and all other discounts are subtracted first.
(2) Calculation: The calculation should be based on the discounted price to ensure that the cashback is earned for the final price where other discounts are subtracted first.
(3) Combination: Cashback earning promotions are always combinable with any other promotion, independent of this setting.
Ensure that an appropriate customer segment / customer is selected as target group.
It is also possible to have multiple cashback earning promotions, e.g., for different customer segments with different validation periods.
If the promotion should be triggered by a promotion code, Promotion Code Required must be checked and the corresponding promotion code configuration must be provided.
It depends on the requirements if the cashback earning promotion should be triggered by code or not. Therefore this setting is optional.
(1) The cashback earning process requires a promotion that uses the Cashback Earning Condition. Using this condition, the entered promotion discount is not an actual discount anymore but rather treated as the value of the cashback. It has two configuration values:
(2) The Cashback Earning condition can be combined with other conditions e.g., Minimum Order Value.
(3) The Promotion Discount defines the value of the cashback. This could either be a fixed amount (e.g., $10 for each order with a minimal order value of $100) or a percentage-based amount on the order value (e.g., 10% of the order value, max $200).
Messaging corresponds to that of a regular promotion, see paragraph Storefront for details.
This promotion is necessary to allow customers to redeem their earned cashback from previous orders with promotion codes.
Consider the following promotion settings:
(1) The cashback redemption promotion has the highest priority per default (see (2)).
(2) Select whether this promotion should be combinable or not. Due to the fact that it has the highest default priority, this promotion will always be the first (and only one, if not combinable) that is executed.
Select an appropriate customer segment and/or customer etc.
The cashback redemption promotion should only exist once in the system for everyone. Since the cashback is stored customer-specifically, the customer check is executed implicitly during the code redemption process.
(1) This cashback redemption promotion requires a promotion code.
(2) This code is stored in a promotion code group.
(3) This is the same promotion code group that was already selected in the cashback earning promotion condition, see Discount Rule tab of the cashback earning promotion.
(1) Cashback redemption can be freely combined with conditions like Item Inclusions/Exclusions to restrict the assortments earned cashback can be applied to.
(2) The cashback redemption process requires a Cashback Redemption Discount as action. No configuration values are needed. The earned cashback is provided as order discount.
Messaging corresponds to that of a regular promotion, see paragraph Storefront for details.
In the inSPIRED storefront, information of earned cashback is displayed in the order summary box that is shown on the cart page and on all checkout pages (default/cart/common/CostSummary.isml). Since cashback is not a real discount, it is displayed separately below the total price.
The appearance of the information can be configured in the Messaging tab of the promotion configuration page.
If no title is defined in the Messaging tab, the default title will be displayed in the order summary box.
Intershop Commerce Management | inSPIRED Storefront |
---|---|
Intershop Commerce Management | inSPIRED Storefront |
---|---|
If the checkbox Disable Messages is enabled, no cashback information is shown in the order summary box.
Intershop Commerce Management | inSPIRED Storefront |
---|---|
The display of the cashback redemption promotion follows the standard promotion process for Order Discounts.
In the inSPIRED storefront, information about the promotion is displayed in the order summary box that is shown on the cart page and on all checkout pages (default/cart/common/CostSummary.isml).
The appearance of this information can be configured in the Messaging tab of the promotion configuration page.
If no title is defined in the Messaging tab, the default title will be displayed in the order summary box.
Intershop Commerce Management | inSPIRED Storefront |
---|---|
Intershop Commerce Management | inSPIRED Storefront |
---|---|
If the checkbox Disable Messages is enabled, no specific cashback information is shown in the order summary box.
Intershop Commerce Management | inSPIRED Storefront |
---|---|
The cashback objects are stored in a separate table cashback
. The entities have relations to the promotion code entities to store the promotion code (if configured) and also two times to order entities to store the earning and redemption order.
Except for a technical relation to a domain entity, all entities are loosely coupled without foreign key relations. This allows to ease possible migrations of existing cashback implementations.
The earned cashback objects will be exported within the set of personal data. The exported data consists of the following fields for cashback: AVAILABLEVALUE
, CREATIONDATE
, CUSTOMERNO
, EMAIL
, EXPIRATIONDATE
, PROMOTIONCODE
, REDEMPTIONDATE
, REDEMPTIONVALUE
If the account deletion is requested for a registered customer, all earned cashback objects including promotion codes are automatically removed from the system and therefore cannot be used anymore.
When an unregistered customer requests the deletion of personal data, the customer representative has to do a manual search for earned cashback of the customer via e-mail address (1)+(2).
Then all entries can be selected (3) and deleted (4).