Support immutable promotion versions behind stable promotion codes
Currently, Shopware locks certain promotion discount settings after a promotion has been used in an order. For example, the discount amount can no longer be changed once the promotion was applied at least once.
From a data integrity perspective, this is understandable: changing the discount definition after it has already been used could affect order recalculation, order editing, tax distribution, or historical consistency.
However, from a merchant perspective this creates a practical limitation. A commonly used promotion code such as WELCOME cannot easily be reused with a changed discount configuration. The merchant either has to create a new visible code, or the existing promotion becomes effectively frozen.
Suggested improvement
Shopware could support immutable promotion versions behind a stable public promotion code.
The customer-facing code would remain unchanged, for example:
Internally, Shopware would resolve this code to a concrete promotion version.
Example:
Code: WELCOME
Version 1:
internal promotion/version ID: abc123
valid from: 2026-01-01
valid until: 2026-03-31
discount: 10%
used for existing orders / historical order edits only
Version 2:
internal promotion/version ID: def456
valid from: 2026-04-01
valid until: open
discount: 15%
used for new carts and new orders
Expected behavior
For new carts and new orders, the entered code WELCOME should resolve to the currently active promotion version.
For existing orders, order edits, recalculations, or similar historical operations, Shopware should continue to use the originally applied promotion version.
In other words:
New checkout:
WELCOME → latest active promotion version
Existing order edit:
use the promotion version that was originally applied to this order
The old version should not remain generally usable just because it was valid in the past. It should only be used where there is already a concrete historical reference, for example on an existing order that originally used that version.
Why this would help
This would preserve historical calculation integrity while allowing merchants to keep stable, recognizable promotion codes.
It would also avoid forcing merchants to create new customer-facing codes every time they want to adjust a promotion. Common codes such as WELCOME, SUMMER, or BLACKWEEK could stay the same while their internal discount definition is versioned safely.
Possible implementation approach
Instead of modifying a promotion discount definition after first usage, Shopware could create a new immutable promotion version.
The admin UI could offer an action such as:
Create new version of this promotion
This new version would inherit the existing configuration, allow changes to the discount settings, and become the active version for future carts.
Existing orders would continue to reference the previous version.
Benefits
Keeps historical order data stable
Avoids recalculation inconsistencies
Allows merchants to reuse established promotion codes
Improves usability in the Administration
Provides a cleaner alternative to permanently locked discount fields
Makes promotion changes explicit and traceable
Additional context
This is not meant as a request to allow direct editing of already-used discount definitions. The goal is to keep those definitions immutable, but introduce a versioning layer so that the same public promotion code can safely point to a newer internal promotion version for future orders.