Hide menu Last updated: Oct 24 2016
Area: Episerver Commerce Applies to versions: 10 and higher
Other versions:


 This topic explains the promotion functionality, which is part of campaign management in Episerver Commerce.  

How it works

A promotion is a marketing tool used to increase sales of certain products or product lines. There are three promotion types.

  • EntryPromotion. Applies reward to a specific entry.
  • OrderPromotion. Applies reward to entire order.
  • ShippingPromotion. Applies reward to order's shipping cost.

Included promotion types

Item promotion

  • Cheapest items for free. Buy at least X items, get the cheapest Y for free.
  • Most expensive items for free. Buy at least X items, get most expensive Y for free.
  • Buy products for fixed price. Buy X items from catalog entries for a fixed price.
  • Buy products for discount from other selection. Buy at least X items, get discount on selected items.
  • Buy products for discount on all selections. Buy at least X items, get discount on all.
  • Buy products for discount in same category. Get discount an all items in selected category.
  • Spend for discounted selection. Spend amount to receive a discount on selected items.
  • Spend for free items. Spend amount to receive gift items.

Order promotion

  • Spend for discount on order. Spend amount to receive discount on total order value.
  • Buy products and get discount on order. Buy at least X items, get discount on total order value.

Shipping promotion

  • Spend for discount on shipping cost. Spend amount to get discount on shipping cost.
  • Buy products for discount on shipping cost. Buy at least X items to get discount on shipping cost.
  • Buy products for free shipping. Buy at least X items and get free shipping.
  • Spend for free shipping. Spend amount to get free shipping.

Extending promotions example

Sometimes, it is useful to add properties to promotions for marketing purposes but use the base processor for evaluation. Below is an example of how to do this.

using EPiServer.Commerce.Marketing;
using EPiServer.Commerce.Marketing.Promotions;
using EPiServer.Core;
using EPiServer.DataAbstraction;
using EPiServer.DataAnnotations;
using System.ComponentModel.DataAnnotations;

namespace EPiServer.Commerce.Sample.Models.Discounts
    [ContentType(GUID = "530a7f07-8d12-4625-bda3-8e135a10b74d")]
    [AvailableContentTypes(Include = new[] { typeof (PromotionData) })] 
    public class MyCompanyBuyQuantityGetItemDiscount: BuyQuantityGetItemDiscount
        [Display(Order = 13, GroupName = SystemTabNames.PageHeader, Prompt = "Other Info")]
        public virtual string OtherInfo { get; set; }

Using render templates

Promotion content uses normal rendering templates as described here. By default, only partial views are available for promotion content.

Partial views

using System.Web.Mvc;
using EPiServer.Framework.DataAnnotations;
using EPiServer.Web.Mvc;

namespace MyEpiserverSite.Controllers
    [TemplateDescriptor(Default = true)]
    public class MyCompanyBuyQuantityGetItemDiscountPartialController : PartialContentController<MyCompanyBuyQuantityGetItemDiscount>

        public ActionResult Index(MyCompanyBuyQuantityGetItemDiscount currentDiscount)
            // Implementation of action view the page. 

            return View(currentDiscount);

Example: The corresponding rendering view for displaying the promotion partial view. 

@using EPiServer.Core
@using EPiServer.Web.Mvc.Html

@model EPiServer.Commerce.Sample.Models.Discounts.MyCompanyBuyQuantityGetItemDiscount 

    @Html.DisplayFor(m => m.Name)
    @Html.PropertyFor(m => m.Description)
    @Html.PropertyFor(m => m.OtherInfo)