Lowest total price according to the German Price Indication Ordinance (PAngV) manually and automatically
Description
Highlights
About the Extension
Preface to legal compliance
By installing this plugin, you do not automatically achieve legal compliance. This plug-in is a tool to help you implement the legal requirements for your online shop. A detailed test by you is indispensable. For this purpose, you can try out the plugin for 30 days free of charge. It is possible that the plugin cannot do everything you need. If this is the case, write us your requirements in a support ticket in the Shopware account or send an email to support@mndnext.de.
Introduction
With the entry into force of the amended Price Indication Regulation (PAngV) §11 on 28.05.2022, many shop operators must provide information on the lowest total price of the last 30 days in the case of price reductions with strike prices or general discounting. ( Price indication regulation Guideline, EU Directive 98/6/EC ).
For legal details, we
can recommend the detailed FAQ of the IT law firm:https://www.it-recht-kanzlei.de/faq-werbung-preisermaessigungen-gesamtpreis-preisangabenverordnung.html
New info
-
25.08.2022: Version 1.3.3 veröffentlicht
- Change: Adjustment of the option "Show lowest total price if pseudo price is active", now the pseudo price has to be higher than the selling price. -
21.07.2022: Version 1.3.2 veröffentlicht
- New: Setting for the possibility to display the price from the price history, even if only one price was logged -
19.07.2022: Version 1.3.1 released
- New: Price log duration of data retention can now be set manually -
13.06.2022: Version 1.3.0 released
- New: Editing of price log
- Bugfix: No logging of prices for deleted items (for non-deleted prices) -
09.06.2022: Version 1.2.3 released
Bugfix: Error in the storefront when using some plugins -
08.06.2022: Version 1.2.2 released
- Bugfix: Cronjob Cleanup was not called
- Bugfix: High CPU usage during price logging worker -
07.06.2022: Version 1.2.1 released
- Bugfix: Pseudo price no longer replaced by 0 if there are no log entries yet.
- Bugfix: Plugin configuration possible again for each subshop individually.
- Bugfix: Prevent log table from filling up with orphaned entries. (will be cleaned up in the update process)
- Bugfix: API logging now also works correctly with API batch mode.
- Bugfix: plugin disturbed product stream preview.
- New: New cronjob to clean log table.
- New: Worker CLI commands to speed up price logging by parallel execution. -
20.05.2022: Version 1.2 released
Advanced price logging and basic support of Advanced Promotion Suite (Discounts at product level)
Integration cronjob to log prices.
New button in plugin configuration to log prices manually
Display of the lowest price in the shopping cart/checkout
Support for subshops
Bugfixes - 09.05.2022: Version 1.1 published:
Automatic output now supports exception of §11 paragraph 2 PAngV for gradually increasing price reductions.
New display options incl. individual settings per article. - 27.04.2022: Contrary to our original announcement, Shopware price groups are supported.
What does this plugin do?
- This plugin enables the lowest total price to be specified for Shopware versions 5.2.0 - 5.7.7, as no solution is provided by Shopware for these versions.
- This plugin also facilitates the implementation for Shopware versions 5.2.0 and newer (i.e. also 5.7.8+), as it brings with it a mechanism for automatically logging the lowest total price of the last 30 days.
Important: note the section "Restrictions"!
Configuration
Manual indication of the lowest total price
In the Shopware backend you will find a new article mask you will find a new tab called "Best price (30 days)".
There you can enter for the article - for variant articles for each variant - enter the lowest total price per customer group.
(The price entry must be entered gross or net in accordance with the Shopware price table and the customer group configuration "Gross price entry"). or net).
Automatic logging and determination of the lowest total price
After installation, the initial logging can be executed which logs the previously saved price for all customer groups when the item price is changed. For the output in the frontend, the lowest total price is automatically determined on the basis of this 30-day log and output in the frontend. output in the frontend.
The logging takes into account the price group of the article! If a price group is active for the price group is active for the article, the respective price group discount is applied to the price of the customer group!
Example:
Customer group purchase: 100.00 EUR. Price group for purchase from Quantity 1 with 10% discount = total price 90,00 EUR in the protocol.
Since version 1.1.0 the exemption of §11 para. 2 PAngV for gradually increasing price reductions is automatically taken into account.
Example:
Price history of an article: 100,200,100,300,250,200,150 results in 300 as reference price.
Price inheritance
The plugin supports price inheritance for Shopware: If no price is set for a customer group, so that it inherits the price from EK, this price is also price from EK, this price is also permanently logged for the customer group. This means that the price that was actually offered to the customer group is always logged - even if the inheritance changes in the course of the 30 days! days!
Manual logging of the lowest total price
Analogous to the automatic logging of the lowest total price, the Shopware Console command can be used to log the current stored price for all articles can be logged via the Shopware Console command:
bin/console mnd:regulationprice:sync
From version 1.2.0 onwards, a cronjob will also be integrated which performs the logging in defined periods (this is necessary to log prices that are changed by the Advanced Promotion Suite)
This can be used as an alternative or in addition to the automatic logging and is helpful for price updates where automatic logging does not apply. (See details on automatic automatic logging above).
Output in the frontend
In the frontend, the lowest total price is displayed in the following places in addition to the item price and pseudo price:
- Article listing
- Article detail page
- Product comparison
- Notepad
- Slider (Topseller, Accessories articles, Similar articles, Customers have also viewed)
- Shopping World Elements (Articles, Article Slider)
- Basket (optional)
- Checkout (optional)
As of version 1.1.0, the output can be controlled with the following options:
- Do not show lowest total price, but replace pseudo price with lowest total price
- Show lowest total price and replace existing pseudo price with lowest total price
- Show lowest total price if pseudo price active
- Never show lowest total price
- Always show lowest total price
This means that as soon as automatic logging is active, this additional information is also output according to this setting. this additional information is also output according to this setting.
This is especially to enable you to test the plug-in and the values. the values. At the beginning of May we plan to release an update that will allow finer control of the output. output.
Gradual price adjustment
According to the text of the law, in the case of continuous price reductions over the over the past 30 days, the strike price may differ from the last lowest total price. Since Since version 1.1.0, the automatic price calculation of the plug-in can take this into account, if you have selected the appropriate display strategy in the plug-in configuration.
Known restrictions
Automatic logging
The automatic logging can currently only detect the following cases of price changes:
- Manual change in article or article variant Shopware Backend
- Change of price groups
- Price updates via Shopware API
For other cases where the Shopware programming interfaces are not used for price changes, in particular when prices are changed manually in the database, a manual price change must be carried out. interfaces are used for price changes, in particular if prices are changed manually in the database, manual logging must be carried out. logging must be carried out.
The automatic logging can therefore currently also price manipulations that are not carried out via the Shopware price table and price groups. price groups. This applies to promotion plugins, for example. However, we provide a service for plug-in manufacturers service for plug-in manufacturers, via which the protocol can be programmatically supplemented or updated.
In addition
it is possible for developers to manually fill the protocol table in the database.
Details
on both scenarios can be found in the section "Notes for developers".
Price protocol
The price log cannot yet be added to or corrected manually in the backend.
Automatic determination of the lowest total price
For the automatic determination of the lowest lowest total price, only the price history of the plug-in can be used. See also Restrictions on Automatic logging.
Other
- For Shopware 5.7.8 and up, the standard Shopware field can NOT be used. The configuration area of our plugin must be used.
- For the output in the frontend, we use the theme blocks provided by Shopware wherever possible. This means that the value from the Shopware standard field is not output, but only that of the plugin.
- Compatibility with other plugins, Shopware Premium plugins or specific Shopware patch levels cannot be guaranteed. However, in the event of problems, we will be happy to investigate your case and endeavour to find a solution.
Basic prices
Basic prices are not taken into account at the moment.Graduated prices
Graduated prices are not taken into account. We currently only log the price for quantity 1.
Notes for developers
From other plugins, the Notify Event "MndRegulationPrice_SyncPrices" can be called to trigger an update of the protocol.
If you want to fill in the
price log yourself, we recommend manually changing/adding to the database table mnd_regulation_price_logs.
The manual price specification can be entered directly in the table mnd_regulation_price_manual.
What theme variables are available for developers to output the lowest total price of an item and where are they available? Global?
Wherever the ListProductService is used: a decorator extends the ListProduct data with an extra attribute: mnd_regulation_price (array) the price is in the key "price". So in the template it is used like this. ListProductService is not used everywhere, so it is also written via events, the events listen to Compare (comparison) and Note (notes) and extends the data there accordingly with the Regulated Price.
This is how it is used in the global tpl file:
{if $sArticle.attributes && $sArticle.attributes.mnd_regulation_price}
{assign 'regulatedPriceArray' $sArticle.attributes.mnd_regulation_price->toArray()}
{assign 'regulatedPrice' $regulatedPriceArray.price}
{else}
{assign 'regulatedPrice' $sArticle.mndRegulationPrice}
{/if}
here the price is available via $regulatedPrice.
Installation
Installation and configuration via the Shopware 5 Plugin Manager.
After the installation, the price logging mechanism must be
must be configured. If you are using the Shopware Advanced Promotion Suite or other price changing plugins
please select "Advanced Logger". After saving the configuration, you can start the initial logging via the button
"Log all prices now" button. Please note that this may take some time with a larger number of articles and customer groups.
Please refer to the "Performance" section to learn how to get the most out of the plugin when dealing with large amounts of data.
Other notes
- As soon as you save a price group (Basic settings - Price groups), the sync is started on all articles and the price log is written if the price has changed due to the change of the price group.
- As soon as an item is saved in the backend, a sync is performed. Only the prices for the item just saved are synced.
Performance
If you should use the "extended logger", it can with large quantity of articles, customer groups and Subshops you may experience performance problems with logging. There should be no performance issues in the storefront itself.
Can you speed up logging?
You can speed up price logging by using a worker (available since version 1.2.1).
The worker consists of 2 parts:
- bin/console mnd:regulationprice:sync-worker-prepare : fills a queue with the items for which the price is to be logged. items for which the price is to be logged.
- bin/console mnd:regulationprice:sync-worker : processes the queue. The worker determines all prices of the item for all customer groups and subshops and writes them to the price log.
Multiple Worker
So far there is no real performance gain compared to a cronjob. The advantage of the worker is that you can execute it several times at the same time. The workers then share the work and work through the queue together. Warteschlange ab. Wieviele Worker Sie gleichzeitig ausführen können, hängt von den Resourcen des Webservers ab.
Worker Daemon-Modus
The workers can also be started in daemon mode. bin/console mnd:regulationprice:sync-worker --daemon
This means that the worker is not terminated immediately after work has been completed, but constantly checks for new ones
Jobs in the queue there. This method with Supervisord or Linux Daemon is recommended.
Cronjob und Worker
After the installation of the plugin, 2 Cronjobs were created. The first Cronjob fills the queue with articles for which the price is to be logged (here all articles). The second Cronjob works through the queue. In the end, it is nothing else than like executnig the 2 commands from above: bin/console mnd:regulationprice:sync-worker-prepare and bin/console mnd:regulationprice:sync-worker. In the Cronjob, however, only 1 Worker is used.
Make sure that the execution interval of the cronjob is adjusted to your store. For some stores the worker can run hourly, for others daily. This will depend on the number of items and how often you want to prices you want to log. If you update the prices in yout shop daily or even several times a day, the cronjob should be run as fast as possible. If you have many articles and many price changes, it is recommended to to disable the cronjob and use multiple workers (see above).
Why can the determination of prices be slow?
The advanced price logger, unlike the simple logger is very accurate, because it uses mostly Shopware itself To determine the prices of an item. This logs prices that are changed, for example, by plugins or certain Shop settings are changed. The item price itself in the database has not changed but Shopware then shows in the storefront a price calculated / manipulated by plugins. The extended price logger uses this price displayed in the storefront in the price log.
In addition to the number of items, the number of customer groups and subshops is also relevant. The more customer groups and subshops there are, the longer it takes to determine the price. Because for an article the price must be determined for each individual customer group and subshop. Example: If there are 10 customer groups and 5 subshops, then 10 * 5 = 50 prices must be determined for each article. The price log can therefore quickly become very large. However, only price changes will be logged, so the log database will not be filled with unnecessary prices, only the changed prices will be logged.
Should automatic logging be fully active, the price will also be logged in the backend when saving of articles logged and also when updating prices via API. It may happen that here it takes a little longer than usual until the article is saved. It is recommended in the plugin settings the automatic logging from "complete" to "only via cronjob".
Compatibility
- We are currently aiming for compatibility from Shopware 5.2.0 upwards. If there is sufficient demand, this may also apply to even older Shopware 5 versions. Feel free to write to us about your interest in support@mndnext.de
- Unless otherwise described, the plugin is compatible with the standard Shopware 5 Responsive Theme. Other themes are not tested, but we will be happy to check if we can solve a problem.
- We cannot guarantee blanket compatibility with other plugins, including Shopware's premium plugins. Please test the interaction with the extensions and adjustments in your shop conscientiously. In case of problems, we will be happy to check whether we can solve them.
FAQ
Is it possible to spend different lowest total prices for subshops?
Yes. Item prices in subshops are determined in Shopware 5 based on the default customer group, which is specified in the subshop configuration of the basic settings. The logging of our plugin saves the prices for each customer group - in the same way that the price of an item is specified in Shopware.
Is the strike price (pseudo price) replaced by the lowest total price of the last 30 days?
Since version 1.1.0, this can be set.
Notes on legal certainty
This plugin is a tool designed to help you implement the legal requirements of your shop in accordance with the legal advice available to you. This plugin and related support services including this documentation do not constitute legal advice and may not take into account the specifics of your shop. The implementation of this plugin does not claim to be complete with regard to the implementation of a particular legal opinion. Furthermore, as the manufacturer, we make no representations or warranties with respect to the implementation of any current or future legal opinions or legal obligations.
That said, we naturally want to offer the best possible solution. If you need a specific feature or behaviour that
the plugin does not yet adequately represent, please contact our support team and we will see what we can do.
support@mndnext.de.
Do you have feature requests or questions?
Feel free to open a support ticket in the Shopware account, or feel free to contact support@mndnext.de.
Details
- Available: English, German
- Latest update: 5 January 2024
- Publication date: 4 May 2022
- Version: 1.3.6
- Category: Storefront
Resources
Reviews (0)
About the Extension Partner
MND Next
Partner Status
-
Shopware
Bronze Partner -
Shopware
Extension Partner
Details
- Ø-Rating: 4.8
- Partner since: 2015
- Extensions: 10
- Certifications: Certifications
Support
- Based in: Germany
- Speaks: German, English
- Response time: Very quickly