Discounts are cumulative (skirts) for PrestaShop
Cumulative Discounts in PrestaShop – Pro Module | PrestaDev
Cumulative Discounts in PrestaShop – Pro Module | PrestaDev
Cumulative Discounts in PrestaShop – Pro Module | PrestaDev
Cumulative Discounts in PrestaShop – Pro Module | PrestaDev
Cumulative Discounts in PrestaShop – Pro Module | PrestaDev
Cumulative Discounts in PrestaShop – Pro Module | PrestaDev
Cumulative Discounts in PrestaShop – Pro Module | PrestaDev
Cumulative Discounts in PrestaShop – Pro Module | PrestaDev

Cumulative (tiered) discounts for PrestaShop

Module version: 1.9.0

PrestaShop compatibility: 1.7.x 8.x 9.x

Module file updated: 09/27/2026 17:20:54

Product data updated: 09/27/2026 17:25:23


3 Reviews

PD Cumulative Discounts Pro is an advanced cumulative discount module for PrestaShop that automatically grants customers increasing discounts based on the total value of their orders. The module works based on PrestaShop’s native customer group system — once a defined amount threshold is exceeded, the customer is moved to a group with a higher discount, and prices in the store are reduced automatically. The entire process is fully automated: it does not require creating coupons, manually assigning groups, or administrator intervention with every order. The system supports any number of discount levels with configurable amount thresholds, allowing you to build multi-tier loyalty programs tailored to the specifics of your store. Customers can see in the cart how much they save thanks to their discount level and how much is left until the next threshold — which directly motivates them to make larger purchases. The module includes a level protection mechanism (grace period), product exclusions by categories, manufacturers, and suppliers, full multistore support, and bulk group synchronization for existing customers. Compatible with PrestaShop 1.7, 8.x, and 9.x, operating without external libraries and without Composer.

License type / update
zł 179.00
zł 145.53no tax
Price history:

Description

What the module is for

  • A loyalty program without coupons. A returning customer is automatically moved to a higher level, and sees reduced prices immediately in the catalog, on the product page, and in the cart.
  • Rewarding ongoing activity. The module assigns the customer to a discount group based on the total value of their orders. The customer keeps this group until they reach the next threshold or drop below the current one. This way, the customer sees lower prices in the store all the time, not only after entering a code. The module works with both tax-inclusive and tax-exclusive prices, so stores displaying net prices are also supported.

Discount levels

  • Level = amount range + customer group. Each level has a minimum and maximum amount in the store’s default currency and an assigned PrestaShop customer group. The discount percentage is the discount of that group, set in Customers > Groups.
  • Level name and benefit. An optional name (e.g. Silver, Gold, Platinum) and a short benefit description, e.g. “Priority support” – both fields are filled in separately for each store language, and the customer sees them in the cart and on the summary page.
  • Validation checks. Ranges cannot overlap, amounts are rounded to two decimal places before validation, one customer group can belong to only one level, and the Visitor and Guest groups cannot be used as a level.
  • Gaps and totals above thresholds. A total that falls into a gap between levels (e.g. 0–499 and 500–999) or exceeds the maximum of the highest level leaves the customer at the highest level already reached.
  • Group outside thresholds. A customer whose total does not reach the first threshold is assigned to the selected default group – usually the standard Customer group with a 0% discount.
  • Quick group creation. The “Create discount group” button on the levels tab opens the new customer group form in PrestaShop.

How the customer total is calculated

Nine calculation methods

  • Total of included orders (full history).
  • Total of included orders from the last 3, 12, or 24 months.
  • Included order statuses. You choose which statuses count toward the total, e.g. payment accepted, delivered, paid remotely, overdue payment paid, and remote payment accepted. If the counted statuses include unpaid order statuses, the settings display a warning.
  • Products by order prices. Order items are counted at the prices they were sold for (excluding discount codes), and quantities covered by merchandise returns or refunds are deducted. An order in which all quantities were returned does not add the shipping cost.
  • Shipping and tax optional. Separate switches let you exclude shipping cost and tax from the total.
  • Multiple currencies. Orders in another currency are converted to the store’s default currency using the rate saved in the order.
  • Calendar periods in the store time zone. “Last 3 months” is counted from the same day of the month, and in a shorter month – from its last day (May 31 minus 3 months is February 28 or 29).

Total with the current cart

  • Level based on that level’s prices. The customer gets the highest level whose threshold is reached by the total of orders and cart valued at the prices of that very level – just as orders count amounts actually paid. Thanks to this, the level does not switch on every page refresh and does not drop after the cart is paid.
  • Order awaiting payment. An order, e.g. by bank transfer, keeps the current level as long as the cart is empty, so the level does not drop on the order confirmation page. However, it never raises the level, and a new cart is priced exclusively from paid orders.

When the level changes

  • When entering the store. The level of a logged-in customer is recalculated on every store page, so the expiry of a period or protection takes effect from the next page view. The page on which the level changes already shows the prices of the new level.
  • After a cart change. The level block and savings block in the cart refresh automatically (AJAX) after adding or removing a product.
  • After an order status change. Paying for an order increases the total, while cancellation or refund decreases it – a status change in the back office immediately recalculates the customer’s level.
  • In bulk from the back office. Synchronization assigns all customers to the correct groups, e.g. after installing the module or after changing thresholds.
  • Email notifications. An optional email informs the customer about a level change and gives the current total and discount percentage. Templates are available in 9 languages: Polish, English, German, French, Spanish, Italian, Czech, Russian, and Ukrainian. For totals including the cart, a change triggered by the cart sends at most one email per day.
  • Change history. Every promotion, downgrade, default group assignment, protection start, and protection expiry is saved with the date and customer total.

Level protection period

  • Keeping the level after the total drops. When protection is enabled, the customer keeps the current level for the configured number of days (up to 3650) before the module allows it to be lowered.
  • Only for a level earned by orders. Protection starts when a counted order is cancelled or refunded, or when orders fall out of the 3, 12, or 24 month period. A level reached only thanks to the cart contents is not protected.
  • Visible to the customer. The block in the cart and the summary page show the date until which protection is active. After it expires, the level changes on the next store page view.

Rules for combining discounts and exclusions

  • Do not combine with product discounts. The group discount does not apply to products that already have a specific price or another product discount.
  • Do not combine with coupons and cart discounts. The group discount is not applied when there is a discount code or another cart rule in the cart.
  • Customer groups are preserved. The module can keep the customer’s existing groups and only add the current level group, or remove the customer from the other level groups. The Visitor, Guest, and Customer groups are always kept.
  • Removing remaining level groups. When assigning a new level, the module can remove the customer from the remaining level groups. The Visitor, Guest, and Customer groups always remain.

What the customer sees in the store

  • The “Your cumulative discount” block on the cart page. It shows the current level, customer total, discount percentage, level benefit, protection date, and the discount and threshold of the next level.
  • The “Savings from cumulative discount” block in the cart and at checkout. It shows how much the customer saves thanks to the group discount. The amount is calculated using the same price path as the store prices, taking into account specific prices, exclusions, and discount combination rules.
  • “Price before group discount” on the product page and in quick view. A crossed-out price without the group discount, calculated for the same quantity and in the same tax mode as the price next to it.
  • The “My discount summary” page in the customer account. A table of all levels with thresholds, benefits, and discount amounts, the current level highlighted, progress to the next level, and the history of level changes with amounts in the customer’s currency.
  • Link in the customer account. Markup for Classic, Hummingbird 1.x (PrestaShop 9.0), and Hummingbird 2.x (PrestaShop 9.1) themes.
  • Only for the right customers. The blocks and refresh script are visible only to logged-in customers outside ignored groups, when the module is enabled and has configured levels.

Administration panel

  • Tabs. Dashboard, Settings, Discount levels, Groups and exceptions, Product exclusions.
  • Dashboard. Number of levels, registered customers, customers assigned to levels, active protections, and saved events. In addition, program adoption in percent, customer distribution by level, and the 20 most recent level changes.
  • Bulk synchronization. Batch processing (from 10 to 500 customers, recommended 100) with a progress bar, resume after interruption, and counters: processed, updated, already correct, skipped, protected, errors. Emails during synchronization are optional and disabled by default. Synchronization is unavailable for the “current cart only” total.
  • Permissions and security. Saving settings, levels, and synchronization require the module’s “configure” permission and the right to edit the modules page. An employee with view-only access does not see settings, levels, or customer data. Each form and synchronization request has its own module CSRF token, also when tokens in back office URLs are disabled.

Multistore

  • Levels and settings for each store. Each store has its own thresholds, groups, order statuses, and other settings.
  • Customer level separately in each store. When more than one store is active, the module saves the customer’s level separately for each store and applies it in prices. The customer’s default group in PrestaShop remains unchanged.
  • Safe editing. Levels are added and edited in the context of a single store. In the “All stores” context, the list shows the store column.
  • Synchronization and statistics. Each customer is evaluated against the thresholds and settings of their store, and statistics count customers separately for each store.

Prices, orders, and documents

  • Discount calculated by PrestaShop. The level discount is a customer group discount, so it applies everywhere PrestaShop applies a group discount: in the catalog, on the product page, in the cart, in the order, and on the invoice.
  • Compatibility with the native PrestaShop group. Automated tests compare prices on the product page, product list, in the cart, in the order summary, in the order data, and on the PDF invoice with the price of the same group in PrestaShop itself.
  • Class overrides. The module installs overrides for the Product, Customer, Group, and Order classes, as well as invoice and PDF credit slip templates. An indicator in the header shows whether they are active.
  • Price filter in faceted search. The module adjusts the price query of the ps_facetedsearch module so that it takes into account the specific prices of the group resulting from the customer’s level.

Compatibility, installation, and update

  • PrestaShop 1.7.0–9.x, PHP 7.0–8.5. Automated tests (Playwright, Chromium) cover PrestaShop 1.7.2.4, 1.7.5.2, 1.7.6.7, 1.7.7.2, 1.7.8.5, 1.7.8.10, 8.0.0, 8.1.7, 8.2.6, 9.0.2, and 9.1.5 on PHP 7.0–8.1, with the Classic, Warehouse, and Hummingbird 2.x themes. The syntax of all files is checked on PHP 7.0–8.5.
  • Update from earlier versions. Update scripts cover versions from 1.5.7; updating from 1.6.3 and from 1.8.2 is verified by tests. The update replaces overrides installed by older versions with current ones, leaves a copy of every changed file, and in case of a conflict with another module restores the previous files.
  • Reset and uninstall. Reset repairs hooks, the database schema, and overrides without losing levels, customer states, or history. Uninstall removes the module tables and settings only when PrestaShop actually removes the module.
  • Languages. The module interface is available in Polish and English, email templates in 9 languages.

Important operating limits

  • With the total including the current cart, the customer may see the threshold of the next level even though the level has not been reached. The total in the block is calculated at the current level’s prices, and the next threshold at its lower prices.
  • Adjusting the ps_facetedsearch price filter modifies that module’s file; it is repeated during module installation, update, and reset, and reverted on uninstall.
  • In multistore mode, invoices and PDF credit slips on PrestaShop older than 8.1.2 use the group saved in PrestaShop, not the level from the store.
  • On PrestaShop 1.7.7.x, some module texts in the store are displayed in English (a limitation of template translations in this PrestaShop version).


Link to the module demo:

Admin panel demo:
https://moduly-prestashop.eu/rabaty-kumulacyjne/admin-dev

Front office demo:
https://moduly-prestashop.eu/rabaty-kumulacyjne

Product Details

Support for Prestashop 8.x
Yes
Prestashop 1.7.x support
Yes
Prestashop 1.6.x support
Yes
PrestaShop 1.5x support
Yes
Module translations
EN, EN
Free support
Yes
Free updates (1 year)
Yes
Easy Installation
Yes
PDCUMDIS-FULL

Changelog

Release history for this product. Expand an entry to see what changed.

  • moduł został przepisany kompletnie pod PrestaShop 9.x

FAQ

Find answers to the most common questions about this product.

The module moves registered customers to PrestaShop discount groups based on the total value of their purchases. You define tiers as amount ranges (e.g. PLN 500–999.99 = Gold) and assign a customer group to each, while the discount percentage is set in the configuration of that group in PrestaShop (Customers > Groups). When a customer's total reaches a tier threshold, the module assigns them to the group and prices in the store immediately reflect the discount – without coupons and without manual work.

The module declares compatibility with PrestaShop 1.7.0–9.x and PHP 7.0–8.5. It is tested with automated tests (Playwright, Chromium) on PrestaShop 1.7.2.4, 1.7.5.2, 1.7.6.7, 1.7.7.2, 1.7.8.5, 1.7.8.10, 8.0.0, 8.1.7, 8.2.6, 9.0.2 and 9.1.5 on PHP 7.0–8.1, and the syntax of all files on PHP 7.0–8.5.

In the “Discount tiers” tab, you enter the minimum and maximum amount in the store’s default currency, select the customer group, and optionally provide the tier name and benefit description in each store language. The ranges must not overlap, one group can belong to only one tier, and the Visitor and Guest groups cannot be used. The “Create discount group” button opens the new customer group form in PrestaShop, where you set the discount percentage.

There are nine options to choose from: the total of included orders from the entire history or from the last 3, 12, or 24 months; the same total increased by the current cart; or only the value of the current cart. The periods are calculated calendar-wise in the store's time zone, e.g. May 31 minus 3 months is February 28 or 29.

Only orders in the statuses selected in the settings are counted – upon installation, these are paid statuses: payment accepted, preparation in progress, shipped, delivered, backorder payment paid, and remote payment accepted. From the order, product line items at sale prices are counted, without discount codes, and units covered by a merchandise return or refund are deducted. If the counted statuses include statuses of unpaid orders, the settings display a warning.

It depends on the settings. Two independent switches exclude shipping costs and tax from the total. An order in which all items have been returned does not include shipping costs.

The customer gets the highest level whose threshold is reached by the total of their orders and cart valued at the prices of that very level – just as orders count the amounts actually paid. Thanks to this, the level does not switch with every page refresh and does not drop after the cart is paid for. The block in the cart shows the total at the prices of the current level, which is why right at the threshold boundary the total may be equal to the threshold of the next level, although at its prices it has not yet been reached.

For totals with the cart, an order awaiting payment maintains the customer's current level as long as their cart is empty, so the level does not drop on the order confirmation page. Such an order never raises the level, and when the customer starts new purchases, the cart is priced based solely on paid orders. Once the payment is posted (status changed to counted), the order is included in the total, and if it is cancelled, the level may be lowered immediately.

The logged-in customer's level is recalculated on every store page, after every cart change, and after any order status change (also in the administration panel). The page on which the level changes immediately displays the prices for the new level. All existing customers can also be assigned at once using synchronization in the panel.

When protection is enabled, a customer whose total has fallen below the threshold keeps their current level for the set number of days (up to 3650). Protection applies only to the level earned through orders: it starts after the cancellation or return of a counted order, or when orders fall outside the 3, 12, or 24-month period. A level achieved solely thanks to the cart contents is not protected. The customer can see the protection end date in the cart and on the "My discount summary" page.

An amount that falls into the gap between levels (e.g. 0–499 and 500–999) or exceeds the maximum of the highest level leaves the customer at the highest level reached. A customer whose amount does not reach the first threshold is assigned to the default out-of-threshold group selected in the settings – usually the standard Customer group with a 0% discount.

By default, yes. The “Do not combine with product discounts” option disables the group discount for products with a special price or another product discount. The “Do not combine with coupons or other cart discounts” option disables the group discount when there is a discount code or cart rule in the cart; adding or removing the code switches the prices in the same store response, and the block in the cart informs the customer that the tier discount does not apply to this order.

In the "Product exclusions" section, you select categories, manufacturers, and suppliers. For matching products, you choose whether they should be excluded from the customer's total, whether they should not receive the group discount, or both.

On the cart page, the “Your cumulative discount” block with the current level, total amount, discount percentage, level benefit, protection date, and the discount and threshold of the next level. In the cart and at checkout, the “Savings from cumulative discount” block with the savings amount. On the product page and in quick view, the crossed-out “Price before group discount”, and in the customer account, the “My discount summary” page with a table of levels, progress, and change history. The blocks in the cart refresh automatically after the cart is changed.

Yes, if you enable the option “Notify customers when their discount group changes”. The email provides the customer’s current total and discount percentage, and the templates are available in 9 languages: Polish, English, German, French, Spanish, Italian, Czech, Russian, and Ukrainian. For totals including the cart, a level change triggered by the cart sends at most one email per day.

On the “Customer Synchronization” tab, the “Assign all customers now” button recalculates all active customers in batches (from 10 to 500, recommended 100) with a progress bar. Interrupted synchronization can be resumed, and the counters show processed, updated, already correct, skipped, protected customers, and errors. Sending emails during synchronization is optional and disabled by default. Synchronization is not available when the total is only the current cart.

Yes. Each store has its own levels and settings, and levels are added and edited in the context of a single store. When more than one store is active, the module saves the customer level separately for each store and applies it in pricing, while the customer's default group in PrestaShop remains unchanged. Synchronization evaluates each customer against the thresholds of their store, and the statistics count customers separately for each store.

Yes. The thresholds are in the store's default currency, orders in other currencies are converted using the exchange rate saved in the order, and the customer sees the amounts in their own currency.

The header shows the module status, the number of tiers, the status of price overrides, notifications, tier protection, and exclusions. The “Dashboard” tab shows the number of tiers, registered customers, customers assigned to tiers, active protections and recorded events, program adoption as a percentage, customer distribution across tiers, and the 20 most recent tier changes.

Yes. The module installs overrides for the Product, Customer, Group, and Order classes, as well as the invoice and PDF credit slip templates, and the “Price overrides” indicator in the header shows whether they are active. Additionally, it adjusts the price query of the ps_facetedsearch module so that the price filter takes into account the special prices of the group resulting from the customer level; this change is re-applied during the module’s installation, update, and reset, and reverted upon uninstallation.

Saving settings and levels, as well as synchronization, require the module’s “configure” permission and the right to edit the modules page. An employee with view-only access cannot see settings, levels, or customer data. Each form and synchronization request is protected by the module’s own CSRF token, even when tokens in back-office URLs are disabled.

Yes – the update scripts cover versions from 1.5.7, and updating from 1.6.3 and 1.8.2 is verified by tests. The update replaces overrides installed by older versions, keeps a copy of each modified file, and in the event of a conflict with another module restores the previous files. Resetting the module preserves levels, customer statuses, and history, while uninstalling removes the module's tables and settings.

No. The program applies to registered customers – the module assigns levels to customer accounts, and guest purchases do not create a level.

Yes. The link in the customer account includes markup for the Classic, Hummingbird 1.x (PrestaShop 9.0), and Hummingbird 2.x (PrestaShop 9.1) themes. Price tests pass on the Classic, Warehouse (PrestaShop 9.0.2), and Hummingbird 2.x (PrestaShop 9.1.5) themes. The blocks are inserted via standard PrestaShop hooks, without changes to the theme files.

Reviews (3)

3 Reviews

Najlepszy jaki udało sie nam znaleść
Innymi słowy gody polecenia o ile jest to moduł którego szukasz...
By on 10/27/2022

Fajnie działa
Przemyślany moduł nie powiem, wart polecenia.
By on 10/27/2022

Fajnie działa
Jeden z najlepszych jakich udało nam sie znaleść do tego celu !!!
By on 10/27/2022