Promotion calculators are similar to shipping calculators : they calculate against your preferred amounts, percentages, and currencies. The main difference is that promotions adjust prices as discounts rather than charges.
Solidus includes a number of built-in promotion calculators. Because promotions can adjust orders, line items, or shipping charges, note that some of the built-in calculators can only be used on a subset of promotions.
The rest of this article summarizes the available promotion calculators, grouped by the types of promotions they can calculate (either order, line item, or shipment promotions).
The following calculators are available to use on whole-order or line item promotions:
The
Spree::Calculator::FlatRate
calculator
has the following
preferences:
amount
: The amount per item to calculate.currency
: The currency. The default value is your store's default currency
setting.This calculator takes the total of an applicable order or line item and discounts a fixed amount from it.
The
Spree::Calculator::FlexiRate
calculator
provides a flexible
rate depending on the number of items on an order.
For example, you could sell one t-shirt for $20. But, if the customer buys five t-shirts, the four additional t-shirt only costs $15.
It has the following preferences:
first_item
: The discount rate of the first item(s).additional_item
: The discount rate of subsequent items.max_items
: The maximum number of items this discount applies to.currency
: The currency. The default value is your store's default currency
setting.To replicate the example above, you could set the first_item
to 0.0
, the
additional_item
to 5.0
, and the max_items
to 5
.
The
Spree::Calculator::TieredPercent
calculator
provides a
tiered percent discount. This allows you to charge a percentage-based discount
that depends on the order total (or applicable line items).
For example, you could set a base discount of 10%, then give a greater discount on orders over $100 and $200:
Tier | Discount (%) | |
---|---|---|
0
|
Tier
Base
|
Discount (%)
10%
|
1
|
Tier
Orders over $100
|
Discount (%)
15%
|
2
|
Tier
Orders over $200
|
Discount (%)
20%
|
This calculator has the following preferences:
base_percent
: The base discount for any order where the promotion applies.tiers
: A hash where the key is the minimum order total for the tier and the
value is the tier discount. Using the example from the table above, the hash
could read: { $100=>15%, $200=>20% }
.currency
: The currency. The default value is your store's default currency
setting.The following calculators are available to use with order promotions only:
The
Spree::Calculator::TieredFlatRate
calculator
provides
a tiered flat rate discount. This allows you to charge a rate-based discount
that depends on the order total. For example, you could set a base discount of
$10, then give a greater discount on orders over $100, $200, and $500:
Tier | Discount ($) | |
---|---|---|
0
|
Tier
Base
|
Discount ($)
$10
|
1
|
Tier
Orders over $100
|
Discount ($)
$15
|
2
|
Tier
Orders over $200
|
Discount ($)
$20
|
3
|
Tier
Orders over $500
|
Discount ($)
$25
|
This calculator has the following preferences:
base_amount
: The base discount for any order where the promotion applies.tiers
: A hash where the key is the minimum order total for the tier and the
value is the tier discount: { tier=>discount_amount }
.currency
: The currency. The default value is your store's default currency
setting.The
Spree::Calculator::FlatPercentItemTotal
calculator provides a flat, percentage-based discount on an order. In the
solidus_backend
interface administrators can use this calculator by choosing
the whole-order calculator labeled "Flat Percent". It has the following
preference:
flat_percent
: The percentage that the order should be discounted.The following calculators are available to use with line item promotions only:
The
Spree::Calculator::DistributedAmount
calculator
provides an amount-based discount on all of the applicable line items in an
order. The discount amount is distributed across all of the line items.
For example, if your promotion offers a $5 discount and a customer orders a $20 item as well as a $10 item, then the discount is distributed across both items: $3.33 (on the $20 item) and $1.67 (on the $10 item).
This calculator has the following preferences:
amount
: The discount amount given if the line items should be discounted.currency
: The currency. The default value is your store's default currency
setting.The
Spree::Calculator::PercentOnLineItem
calculator
provides a percentage-based discount for each applicable line item in an order.
In the solidus_backend
interface, this calculator is labeled "Percent Per
Item". It has the following preference:
percent
: The percentage discount that should be given to each applicable
line item.You can create promotions that negate all shipping charges on an order. This
type of promotion does not require a specific calculator. Instead, it uses the
Spree::Promotion::Action::FreeShipping
promotion
action
directly.
Solidus is an open source platform supported by the community. We encourage everyone using Solidus to contribute back to the documentation and the code.
If you’re interested in contributing to the docs, get started with the contributing guidelines. If you see something that needs fixing and can’t do it yourself, please send us an email.