Discounts
This page is for owners and marketers who run promotions in the store. It gives the routines for the discounts the shop has, and an honest list of what needs an extension. How discount groups and rules work, and which discount wins, is explained on Discounts and wishlists for businesses.
What the shop offers
A discount group has members (single customers or whole user groups) and one or more discount rules, each a
percentage, optionally limited by content class, section or specific products. Discount groups are managed under
Store > Discounts (shop/discountgroup, shop/discountruleedit), which needs shop/setup
(kernel/shop/module.php). For each product the customer gets the highest matching percentage; discounts do not
add up (kernel/classes/ezdiscount.php).
Because discounts follow the customer's account and user groups, they reach signed-in customers only.
Typical uses, and who runs them
| Promotion | How | Usually run by |
|---|---|---|
| Member prices | A discount group whose member is the members' user group | Owner |
| Reseller prices | A reseller user group with its discount | Owner, with sales |
| Staff discount | The staff user group in a discount group | Owner |
| A sale on some products | A rule limited to those products, or to a "Sale" section, for a group everyone signed in belongs to | Marketing, with the owner |
| A personal arrangement | One customer as a single member | Owner |
Prefer user groups over single customers: people who join the group later get the discount without anyone remembering to add them.
Running a sale by hand
The shop has no discounts that start and end on their own. A sale is run by hand:
- Prepare the rule and its limitation in advance, at 0 percent or with no members, so it is ready.
- Start: set the percentage, or add the members, at the agreed time.
- Check (below) right after the start.
- End: remove the members or the rule at the agreed end time.
- Record what ran, from when to when, in your promotion log.
Moving many products into or out of a "Sale" section can run in the background as a content job (Content jobs).
Tip
Put the start and end in the team calendar with a named person for each. A sale that nobody ends is a price cut.
Checking a discount
- To do: Sign in as a test customer who is in the group: the basket shows the reduced price.
- To do: Sign in as a test customer who is not: the basket shows the normal price.
- To do: A product outside the rule's limitation is not reduced.
- To do: If the customer is in two groups, the higher percentage applies, not the sum.
- To do: The order view shows the discount on the order line (each order line stores its discount, table
ezproductcollection_iteminkernel/sql/mysql/kernel_schema.sql).
Keeping a record
Discount changes are recorded in the audit trail's commerce channel (The audit trail).
Keep your own short log as well, because the reason for a promotion is not in the audit trail:
PROMOTION LOG
Name | Discount group / rule | Percentage | Who gets it | Start | End | Started by | Ended by | Notes
-----|-----------------------|------------|-------------|-------|-----|------------|----------|------What the shop cannot do without an extension
From the kernel code, as summarized in Discounts and wishlists for businesses:
- coupon or voucher codes typed at checkout;
- gift cards;
- quantity rules such as "buy two, get one free";
- discounts that start and end on their own;
- discounts for guests who are not signed in (other than giving one to everyone).
If you need one of these, ask your partner for a quote. A common approach is a workflow event that adds a negative order line before the confirmation page (Workflows).
Related pages
- Discounts and wishlists for businesses
- Promoting your store
- Customer accounts
- Wishlists and baskets
- Free documentation: this page is free to copy, translate and improve under the GNU FDL 1.3.
Become an Exponential Partner
Partners share their information, provide funding, contribute back and develop the products with us, and that is how Exponential grows. A partner website and dashboard are planned for mid-2027: please become a partner today to speed up our growth rate and land new features faster.