Everything you'd want to know before you install.
A detailed look at how Lowest Price 30 Days Shopware 6: Omnibus Directive Compliance (EU Strikethrough Price) works, why we built it the way we did, and the thinking behind the features above.
What the Omnibus Directive actually requires
Since Directive 2019/2161 came into force, every price reduction announcement aimed at an EU consumer must state the lowest price charged during the 30 days preceding the application of that reduction. The obligation covers product pages, category pages, banners and promotional campaigns, with no turnover threshold. National enforcement authorities, including the CMA in the UK and the Bundeskartellamt in Germany, penalise inaccurate claims, and fine amounts are indexed to annual turnover.
Why a sliding minimum is not compliant
Most solutions record a price history and display the minimum over the last 30 days from today. The legislation asks for something different: the window stops at the moment the reduction begins. A sliding minimum gradually incorporates the promotional price itself into the window, which lowers the displayed reference day by day and produces a claim that no longer means anything. This plugin anchors the window to the start of the reduction and keeps it stable for the entire duration of the promotion.
Consecutive reductions, the case everyone misses
A back-to-school discount followed by an autumn campaign, then Black Friday, forms a series of reductions. The reference to display remains the price charged before the first promotion in the series; otherwise each new reduction compares itself to the previous one and the announced discount becomes artificial. The engine detects series, freezes the reference price, and shows in the admin the freeze date and the reason applied, with a configurable series boundary set to 60 days by default.
Automatic capture, integrated into the Shopware lifecycle
Two mechanisms work in parallel. A daily Scheduled Task registered in the Shopware scheduler scans the catalogue and records price states, with automatic catch-up if the last run is more than 24 hours old. In addition, Subscribers react to product.written and promotion.written events to capture every real price change: product editing, catalogue import, start and end of scheduled promotions. Duplicates are discarded; one history row corresponds to one real price change.
A defence panel, because compliance must be provable
Displaying the correct notice is not enough if you cannot demonstrate what your visitors actually saw. Every served display is logged, aggregated by day, product and reference price. The defence dashboard in the Shopware admin gives compliance status product by product, and timestamped CSV exports are generated as a stream, without saturating memory, even on a large catalogue. You have a dated file ready to hand over in case of an inspection or complaint.
Freeze planner for your commercial peak events
A price increase too close to a commercial event undermines the reference: the price recorded during the preceding 30 days stays low, and the announced discount loses its point. The planner calculates for each event the deadline beyond which a price change becomes counter-productive, roughly one month before the start of the event. You prepare Black Friday, sales and seasonal events with a coherent price calendar.
Native Shopware integration: Sales Channels, Rule Builder, Snippets
History is partitioned by Sales Channel: each channel keeps its own price snapshots, which guarantees consistency on multi-store installations. Display conditions for the notice leverage the Shopware Rule Builder, which lets you restrict the notice to EU countries, specific customer groups or Sales Channels without writing code. Displayed texts go through the native Shopware snippet system, making them editable and translatable directly in the admin.
Light on the front, lean in the database
The reference price calculation is cached, reads use composite indexes and never write during display. The 30-day history chart is rendered by a vanilla JavaScript canvas of approximately 3 KB, with no external library, no CDN and no third-party cookie. The notice line is inserted below the price via Shopware CMS blocks, and variant products recalculate their reference on selection change.
Installation, first days and existing data migration
Installation takes a few minutes: upload the ZIP in Extensions, the plugin creates its tables, schedules the Scheduled Task and seeds history with the current catalogue state. Until history covers the required window, no notice is displayed, and a specific wording flags recently listed products. Install before your promotions rather than on the day itself. If price history already exists in another plugin, the import detects it by table structure and migrates the data without creating duplicates.
Auditable code and clear licence
The code ships unencrypted, with a clean Symfony namespace, standard Shopware dependency injection and no production dependency to install. Admin actions are protected by Shopware ACL and CSRF tokens, queries are prepared via Doctrine DBAL, and no secret is hardcoded. The licence covers one production store and includes 12 months of updates. On uninstall, settings are removed but price history is kept by default, since it constitutes your legal proof, with an explicit purge option if you wish to delete everything.
There are no reviews yet.