The plugin does not change any prices in the database. It calculates the variant price at runtime when a product is loaded in a sales channel, and again during cart calculation.
| Place | Trigger | Effect |
|---|---|---|
| Product display in the sales channel | Event sales_channel.product.loaded |
The variant's calculated price (calculatedPrice) is replaced |
| Cart and checkout | Cart processor with priority 1000 | The price definition and price of the product line item are replaced |
In the admin (Admin API) the variant's price stays unchanged because no sales channel event is triggered there.
QuantityPriceCalculator and the product's tax rules.The fixed surcharge is added to this price unchanged. It is not converted between currencies and counts as a gross or net amount depending on the tax state, even though the field name contains "(EUR)".
The plugin replaces the variant's entire calculated price with a newly calculated price that has no list (strikethrough) price and no reference price. An existing strikethrough or reference price of the variant is therefore dropped for adjusted variants, both in the product display and in the cart. Check this in the storefront if you work with such price information.
For adjusted variants a single unit price always applies, which the plugin calculates from the lowest tier of the matching rule price (or the standard price) of the parent product. Quantity tiers in the variant's own prices have no effect there, and a higher quantity in the cart does not lower the unit price. The product's tier list (calculatedPrices) and the cheapest price of a variant group are not modified by the plugin, but the adjustment does not apply to them.
| Situation | Behaviour |
|---|---|
| Parent product not found | Price stays unchanged, an error (product display) or a warning (cart) is written to the log |
| Variant without tax ID | The price is not adjusted in the product display |
| Enabled but no valid values | Price stays unchanged |
| Calculation result negative | Price is 0.00 |
| Percentage 0 | Price is 0.00 (0 is a valid value) |
| Invalid or infinite numbers | Values are ignored or the calculation yields 0 |