Released 14th of May 2025
Copy offer (RTC-49234)
Fix: When copying offer correct offer is copied (not the last one from collection).
Import of offers with mix 27 (RTC-48371)
Offer with mixType 'BuyForXAmountAndGetDiscountOnOrdinaryPriceItems' is marked as supported in the Swagger documentation and can be imported via 3rd party and API.
Promotion API - Retry on truncate timeout (RTC-49356)
API request with items has a retry on truncate operation.
Released 5th of May 2025
Import of offers with mix 6b (RTC-48369)
Offer with mixType 'BuyForXAmountAndPayYAmountPerPieceForNItems' is marked as supported in the Swagger documentation and can be imported via 3rd party and API.
Import of offers with mix 25 (RTC-48370)
Offer with mixType 'PercentDiscountOnTheMostExpensiveItem' is marked as supported in the Swagger documentation and can be imported via 3rd party and API.
Extend import of stores and store groups by country code (RTC-45701)
Country code of store, profile and team is imported into Promotion database during import of Store from Store Service.
Export - Default discount on offer level and ordinary price on offer item level (RTC-48863)
Default discount and ordinary price fields were added to export contract. Default discount is exported for promotion price offers. Ordinary price is exported always. Both of those fields cannot be imported.
Export - Label text and store country code (RTC-48064)
For mix 21/22 (when new price is set) and for mix 23 (when discount is equal to 100%) there is LabelText set. StoreCountryCode on promotion level and LabelText on offer level fields are exported, if store country code is defined for store or store group. If promotion is created for many stores or store groups with different country codes, the first one is taken. We do not export mentioned fields when promotion is for all stores. Label is exported in Finnish, Norwegian, Swedish, Polish or English language. If language is other - label is in English.
Offer group items - Price (RTC-48215)
Even if item has ordinary price, promotion price, promotion net price or promotion margin equal to 0, items are displayed in the manage items grid.
Customer group offer - Rollback changes from (RTC-48009) regarding cost markup % (RTC-49023)
'Cost markup %' is removed from database and offer details user interface. This value is also removed from Promotion export contract schema.
Released 15th of April 2025
User interface fixes related to offer group processing (RTC-43043)
After import of Excel file with offer items, page with loading bar for offer group is properly displayed and after processing is finished, it is auto refreshed and show offer items.
It is always possible to import Excel file when items are processed, even when item selection was added by API request and is not yet synced.
After adding items to offer by API request, if OfferGroupProcessor job failed to sync selection with Item Service 3 times, there is 'Sync items' button shown in toolbar on 'Manage items' page. It can be used to try syncing items again, so the item selection won't be stuck in a state where it cannot be modified due to not being synced with Item Service.
Single item promotion (RTC-46998)
In item management, in 'Store prices' tab, when item has at least one store price, there is button 'New promotion price'. It redirects to Promotion Management new promotion page, similar to the one for 'New promotion from existing item list'. Only Promotion Price and 101 Promotion Discount price rules are available for the offer. After 'Create', draft promotion is created, and user is redirected to manage items view for newly created offer.
'Export offer items' button (RTC-47799)
'Export offer items' button is hidden for offers that apply to 'all items'.
Promotion Service - Export (RTC-48063)
Contract of promotion export is extended with two fields that will be used for offer label texts: StoreCountryCode on promotion level and LabelText on offer level. Values are not yet exported.
Released 08.04.2025
Mix 35 (RTC-40014)
Discount in OfferGroupWithDiscount is required for mix 35/41. Import of OfferGroupWithDiscount is not supported for mix 40. That is now properly displayed in Swagger.
Deleted offer group item is exported only once (RTC-47564)
Offer group item that was deleted from offer group while promotion was approved, is only exported once after that action. Then, this item is not exported again in case of offer group items reexport - only items that are currently in offer are reexported in case of promotion update, offer update, trigger by button, stop/delete promotion, API update.
Offer group items are properly exported with status Deleted after deleting planned promotion.
Offer items - Fix: breadcrumb in manage items for multiple groups (RTC-30946)
For offers with several groups, after entering 'Manage items', after clicking tabs with group names, name of promotion is visible in the breadcrumb.
Cost markup % (RTC-48009)
There is new optional field in UI, in offer details named 'Cost markup %'. It appears when customer group offer checkbox is selected. This value is exported on promotion offer level. 'Cost markup %' is copied in case of copy offer or promotion.
Duplicated offer group logs in OfferGroupProcessor job (RTC-47863)
Offer group which was both processed and synced by OfferGroupProcessor job (import of offer group items from 3rd party), is listed only once in final log of job execution, which shows affected offer group identifiers and number of items with and without prices.
Released 24.03.2025
Promotion type code, layout (RTC-42692)
Once the promotion type code is set in register, it cannot be changed anymore.
After entering offer there is a section 'Details' with the following fields from the top: 'Offer name', 'Offer id', 'Offer code' and section 'Properties' with 'Offer type', 'Member offer', 'Customer group offer', 'Coupon offer', 'Bundle offer' and 'All sales channels'. 'Description of changes' is moved to the right side, after 'Schedule' section.
Performance of offer with models (RTC-43547)
Improved performance of following actions on offer with many models: remove offer, clear selection, edit promotion details.
Adding items to offer (RTC-46143)
Items are added to offer when creating new promotion from item list view or item group list view in Item Management.
Default values in offer copy (RTC-46854)
When copying promotion or offer, default values defined on offer are also copied.
Handle price locks in offer items API (RTC-44474)
If item has a price lock and should not be added to the offer, when adding offer group items to the offer via API request, items are not added. Price lock rules are exactly the same as when adding items to offer in UI. Request response is extended with value itemsNotAddedDueToPriceLockCount. Additionally, there is error type 'NotAddedDueToPriceLock' and errorMessage "Item with identifier (SKU: SKU1, GTIN: GTIN1, ExternalItemNo: ExternalItemNo1) is pricelocked". Example of response is added to Swagger.
Migration to .NET 8 (RTC-42416)
Promotion module is migrated to .NET 8.
API for promotion prices with given item and given store (RTC-47394)
Endpoint (/api/gateway/ItemPromotionPrices) in Promotion Service returns promotion prices for the given item ('promotion price' offers in which item is added). SKU or mainGTIN item identifier must be provided as query parameter. Optionally storeNo can be used to get offers that affect specific store (including promotions on related profiles, teams and all stores). When item is deleted from offer, it is not returned.
Response contains: id (of offergroupitem, used for default sorting), promotionNo, offerNo, offerGroupItemIdentifier (GUID used in POS), storeGroupIdentifiers, storeIdentifiers, status (Draft, PendingApproval, Approved), promotionPrice (promotion price of item), reservedForMembers (Member offer), validFrom, validTo.
Import of offers with mix 10/13/39 (RTC-47756)
Offer with mixType 'BuyNOrMoreAndGetDiscountPerPiece' is marked as supported in the Swagger documentation and can be imported via 3rd party and API.
Fix: duplicate documentation for mix 10 (RTC-48440)
Removed duplicated information about mix 10/13/39 in Swagger.
Released 03.03.2025
Import of offers with mix 46 (RTC-46777)
Offer with mixType 'AdditionalPaybackOnAllItems' is marked as supported in the Swagger documentation and can be imported via 3rd party and API.
Same as in user interface, mixes 42 and 46 can be imported only when customer card is configured in Promotion database for specific tenant, has to be a value supported by POS.
In import contract, if customer card is null, offer will be created with default card (first one). Other cards values can be imported if they are configured.
Handle duplicated models (RTC-47074)
In importing Excel file with offer group items on model or variant level, when there are duplicated lines that refer to same model or variant, all rows are imported properly. Fixed bug that stopped processing of rows on batch with duplicated lines.
Access control improvement (RTC-44978)
Improved handling of access control for users with access to limited stores.
Duplicated logs of OfferGroupProcessor job (RTC-44957)
Information about how many items in offer group has price or has no price is only logged once in the logs for processing and syncing item selection.
Released 25.02.2025
Mix 46: Pay with customer card and get additional payback on all items
Conditions:
Customer card name - customer card that is used for the payment. Available only when configured in Promotion database for specific tenant, has to be a value supported by POS. Defined in price rule.
Reward:
Additional payback in percent or amount. Defined in price rule or editable on offer.
Offer with mix 46 applies to all items, so there is no item selection. Mix 42 is renamed to 'Pay with customer card and get additional payback on selected items' and customer card name is required field. Customer card name is exported on promotion offer level on mixes 42 and 46 and on offer group item level for mix 42.
Copying promotion and offer (RTC-45232)
If a user wants to copy promotion or offer and promotion contains at least one offer that has schedule defined, modal with question if offer schedules should also be copied appears. Schedule period of offer visible in copy promotion view.
When copying promotion 'valid from' and 'valid to' dates are also copied. 'Valid from' is adjusted to now if it's in the past. If both dates are in the past, 'valid from' is adjusted to now and there is validation for 'valid to'. Finished promotion dates are not copied (as before).
When copying offer and 'valid to' is in past schedule is removed. If 'valid to' is in future but promotion ends earlier than offer 'valid to' of offer is set to 'valid to' of promotion. If 'valid from' is in past and target promotion is active, this date is changed to now. If 'valid from' is in past and target promotion is planned, is changed to 'valid from' of promotion.
Fix: incomplete offers (RTC-46179)
For mixes with multiple offer groups, incomplete status of offer (due to incomplete price rule) is set properly when creating new promotion or copying incomplete offer.
Coupon export on offer group item (RTC-47637)
Export of offer group item to blob contains offerTriggerType and offerTrigger code of offer.
Released 12.02.2025
Sales channel (RTC-46180)
Sales channel can be set on offer by import and API request. It is defined as sales Channels list as documented in Swagger. It is set to 'All sales channels' if imported with null or when list contains all supported values.
Import offers with internal coupon (RTC-45370)
It is possible to set 'Internal coupon' on offer by import of JSON file and API request. That is done by 'InternalCoupon' value of 'offerTriggerType'. 'OfferTriggerCode' cannot be set for such trigger type. If offer exists with 'InternalCoupon' trigger, that value cannot be changed during update (offerTriggerType is ignored).
Model number in item search (RTC-44925)
Model number and external model number columns in item search modal grid show correct values.
Offer group processor adjustments for multiple store groups promotions (RTC-43121)
When promotion is on multiple store groups, OfferGroupProcessor job does lookup for ordinary price in each store group. For example, when promotion is on multiple stores, but item has a ordinary price only on one of them (or its store group), then the item is added to the offer properly. That applies to all ways of adding items to offer groups.
Released 03.02.2025
Offer group items redirection (RTC-45328)
When loading page on URL /promotions/id/offers/id/groups without defining offer group id, page for first offer group in offer is opened.
Offer trigger type: internal coupon (RTC-45369)
New radio button named 'Internal coupon' is added to offer details below 'Coupon offer' checkbox. It's visible when 'Coupon offer' is selected. If user select 'Internal coupon', the selection cannot be undone and other options are no longer visible. Value is properly exported to JSON file. 'General coupon' rename to 'discount code'.
Price locked offers (RTC-44956)
When removing promotion or offer with price lock, price lock is also removed and is not visible in 'Items with price lock' grid. Price locks for not approved promotions also are not visible in mentioned grid.
Sales channel (RTC-46174)
Sales channel can be selected when creating new offer or updating existing one. 'All sales channel' checkbox is selected by default and for all existing offers. When unselected, sales channels can be chosen from the dropdown list. Available options are:
Cashier,
Self-service,
Web shop,
Handle device,
Mobile phone.
Sales channels are exported to blob on offer level. It is null when 'All' is selected.
Import of offers with mix 42 (RTC-46104)
Offer with mixType 'AdditionalPaybackOnSelectedItems' is marked as supported in the Swagger documentation and can be imported via 3rd party and API. Items can be imported to such offer. Kickbacks are not supported.
Mix 42: Additional payback on selected items (RTC-21597)
User can get additional payback on selected items. There is input for value and selector for % or amount.
Import of offers with mix 105 (RTC-45104)
Offer with mix type 'DiscountOnWeightItemCollection' (mix 105) can be imported from 3rd party. It can also be created by API request. It is marked as supported in the Swagger documentation. It is possible to import items to such offer.
Column (RTC-44651)
'Kickback chain' and 'kickback supplier' (amount) columns are added to the offer group items view for item list and segmentation.
Price locked items in items in promotions grid (RTC-42559)
Items that are not added to the offer due to price lock are not displayed in 'Items in promotions' grid. They are ignored when checking period overlapping for items in other offers on that page ('Period overlaps' column and information in modal).
Fix: bugs related to price lock dates (RTC-45070)
'Items with price lock' grid can be filtered by 'Locked from' and 'Locked to' columns. Correct dates are exported to Excel file.
"Locked from' and 'Locked to' dates of price lock are kept in database without time.
Schedule offer period for one day (RTC-44927)
It is possible to schedule offer period for one day. When offer period valid from and valid to dates are the same, offer is active/inactive only on that day.
Released 13.01.2025
Performance (RTC-45151)
Performance of the overlapping views is optimized.
Support multiple Voyado instances (RTC-45709)
Voyado integration setup in Promotion Management Tenant Admin is replaced with usage of VoyadoGateway2 service and usage of 'Would you like to use Voyado Integration?' option from System Parameters page. When 'No', 3rd party integration coupon on offer is hidden. If 'One Voyado instance' is selected, 3rd party integration coupons can be created/updated as before (in default Voyado instance set in VoyadoGateway2).
When 'Multiple Voyado instances' is selected, 3rd party integration coupon can be added to the offer only if profile of promotion, or profile of store of promotion is assigned to Voyado instance on System Parameters page. Depending on profile assignment to instance, coupon will be created in proper instance of Voyado system. Instance number mapping to Voyado instances is set up in VoyadoGateway2. 3rd party integration coupon cannot be added to promotion on levels: all stores, team, multiple profiles or stores that are assigned to different instances. When coupon is added, instance in which coupon was created is saved on offer level in database. Then, if profile assignment to instance has changed, in case of promotion or offer update, coupon is updated in instance where it was originally created.
Mix 105: Discount on weight items collection ((RTC-44705))
Fields to define in this mix type are:
Conditions: Min. kg of item to activate discount, Max. kg of item that can get discount, Subtotal requirement (Min. receipt amount, Min. amount of other items).
Reward: Discounted price (New price, Percent, Amount), Applies per kg flag.
This mix is similar to mix type 5, but extended with more discount types, 'Applies per kg' option for discount, and possibility to use item selection instead of single item.
Mix details for offer using mix 105 are properly exported.

Mix 105 - Price rule details