Released 11.07.2023
Ignore cached warmup result in health check
When running regular availability tests we now check on current health check status, instead of a cached result from the startup procedure.
Released 06.07.2023
New method to get customer credit information
A new method on /Customer/GetCustomerCreditInformation was introduced. It allows the user to fetch the current balance and credit limit of a given member.
The method requires relay to POS Services on-prem.
Discounts on promotion bundles
When adding items from promotion campaign groups to cart, the prices no longer jump between items after they are refreshed. The discount remains on the same item.
Customer search method
A new method on /Customer/SearchCustomer was introduced. It allows the user to fetch the customer information based on the available terms: All, CustomerID, MemberID, Name, Address, PhoneNumber and Email.
Resuming suspended carts
Using GetCart request on a cartId that has previously been suspended, then resumed, and fully finalized, will now return the correct cart information. Previously it would attempt to fetch only the suspended cart id.
Release 03.07.2023
SetCartItemNote when scaled out to multiple instances
We've added validation on cached revision on SetCartItemNote when using multiple instances of POSAPI/POS WCF. You will now get the correct cart contents in response, also when running SetCartItemNote request on a revision that was previously not cached in your current instance. This means that the method will properly when POS API is scaled out across multiple instances.
BeginCartEditing for editing orders
When editing an order by calling the method BeginCartEditing on a started cart, it no longer creates a new receipt Id in the database. Instead, it uses the already existing started cart number.
This prevents clients from creating problems by starting multiple parallell carts to edit the same order.
Improved logging
We've changed logging to make sure every exception now gets sent to AppInsights.
(Previously we would only send samples of exceptions to telemetry client, meaning some exceptions might not show up in logs.)
Release 27.06.2023
Support for Read Replica feature in Premium Azure SQL
POS API supports using the Read Replica feature of Azure SQL Premium which allows us to connect to a copy of the POS Master database and run queries there without affecting the performance of other databases.
This will allow us to:
- Stop using Azure SQL DataSync which is causing heavy load on the SQL Server.
- Only applies for customers not using POS API DataExport.
- Update Item and Prices faster in POS API (0.5-1 second latency vs 15minutes using DataSync.
- Faster deploy of POS databases when releasing new versions.
Note that this release only allows support of Read Replica in POS API and not the Integration Packages that is using Azure DataSync replicated POS Master.
Released 23.06.2023
Create cart even when member does not exist in Voyado
When 'CreateCartWithItems' is called with a member that doers not exist in Voyado, the cart will still be created and the member will be added in the cart. This ensures that the member will receive member prices. Previously we would get an exception in POS API and 'CreateCartwithItems' would fail if the member did not exist in Voyado.
Released 22.06.2023
Registering payment when POS API is scaled out
Improvements has been made to make sure method SetCartReadyForPaymentAction works correctly when POS API is scaled out across multiple instances.
Exception for unknown receipts in ReceiptOnHold service
Incorrect exception for unknown receipts was thrown from ReceiptOnHold service after changing POS API to run as 64 bit. This has been fixed.
Released 21.06.2023
Run as 64 bit process to improve performance
We've updated POS API to run as a 64 bit process. This allows us better resource utilization, improving performance and increasing amount of available memory.
Improved warmup and health check
The warmup procedure during startup of POS API has been improved. This will lead to a quicker warmup, it will solve issues with timeout during warmup, and will improve the reliability of the health check / availability test.
Shorter timeout against Voyado
Improvements to timeout handling in the integration with Voyado has been implemented. If Voyado does not respond in 7 seconds on one of the following lookups, GetPromotionsByContactId / GetMemberByIdentifier / GetMemberLevelForContactId, POS will cancel the lookup by passing a cancellation token.
Released 15.06.2023
SetCartOrderReferenceExt does not work when scaled out
Method that allows adding order reference to the cart has been improved to support scale out. Customer orders without a customers are now handled properly by SetCartOrderReferenceExt method.
CheckPrice does not handle start/stop time correctly
Using CheckPrice on an EAN that is part of a campaign with dateTimeStart/Stop set to NULL in the condition table no longer fails.
Released 14.06.2023
GetCart does not work on resumed carts
We've implemented functionality for POS API to return the correct cart when running GetCart request on a previously suspended and resumed cart, when using the original cartId from the initial NewCart request.
Show in Cart which coupon discount that triggered
CouponCodes on selectable coupons from Voyado.
We've changed the couponCode to show the offer ID instead of using the membernumber / voyado customernumber as couponCode.
We've also implemented a field in discountDetails in cart, that shows which couponCode was used to trigger the relevant discount.
GetCart returns 0 quantity on Click&Collect carts
When calling the method GetCart on a reserved cart, it now displays the correct quantity for each EAN added to the cart also for click and correct orders.
Config is read from wrong store when starting cart editing
Incorrect configuration used when editing cart.
An issue that could cause incorrect configuration to be used when editing a cart has been fixed. The problem happened when editing the cart from a different POS API instance. (using multiple instances in cloud or multiple installed instances of POS WCF on-prem)
SetDigitalReceipt request fails on uncached receipt
SetDigitalReceipt can fail running on multiple instances.
A problem that could cause SetDigitalReceipt to fail when POS API is running on multiple instances has been fixed.
Released 01.06.2023
NewCartWithItemReturn requests are missing OperatorID on the response
Using the method NewCartWithItemReturn it is now possible to change the Operator of the cart.
Improve performance of loading group mixes from database
Performance of loading mix information from the database was improved when an item is contained in a lot of different mix definitions.
Released 30.05.2023
Parallel calls to BeginCartEditing
Indexing was changed to improved performance of parallel calls to the method BeginCartEditing.
ArticleDetails is missing on link items
When adding an item with a linked item, the linked item's details will also be added in the POSLog XML, provided that the parameter IncludeArticleDetails is set to tTue.
Released 10.05.2023
Reduce amount of SaveReceipt on DeliverCartItem
The amount of SaveReceipt instances was significantly reduced when calling DeliverCartItem method on a given cart. It results in less time spent on processing for every cart.
Discount description element does not match with swagger
Swagger documentation of attribute Description for itemSale.CartItemDiscountDetail was updated to be nullable.
Fetch PLU board configuration
Added new method GetPluConfiguration. Request has to contain APIKey and optional StoreIdentifier.
The method can be used by clients to fetch items in a structure like: Top menu → Sub Menu(s) → Item (s) and show a PLU list to allow the user to select and sell items.
Parameter PluBoardsDefinition has to be configured in POS config for a given cash register.
Released 08.05.2023
Set ExternalLoyaltyNumber in Cart
ExternalLoyaltyNumber is now displayed in the cart response
Released 02.05.2023
Create bundle
It is now possible to create, remove and alter ad hoc bundle packages directly in POS and POSAPI. Price calculation for bundles was also altered to work together with other promotions, choosing based on the best price.
Create method for removing entire bundle
Added a new method RemoveBundleFromCart. It is now possible to remove an entire bundle at once from any given cart.
Not possible to use default customer in ReserveCartInStore
We've implemented support for using ReserveCartInStore method in Cloud POS API. The method will now properly create a click & collect order to the store specified in your ReserveCartInStore request.
Released 12.04.2023
GetItems fails when requesting 2 EAN's for one EAN20
When calling GetItems with 2 or more EAN-20 codes corresponding to the same main EAN, it now returns the item correctly.
Released 04.04.2023
Receipt printing w/ EPOS Format ignores PrinterConfig
When printing a receipt in EPOS format with GetPrintableReceiptExt method, the method no longer ignores the PrinterConfig parameter and follows the changes done there.
Released 30.03.2023
Convert remaining methods used for XXL
The following methods are compatible with scaling out and being used across different instances of POS API:
- GetCartIdByOrderNumber
- EndCartEditing
- SetCartItemPrice
- AddCouponByDiscountCode
Released 07.03.2023
Cart calculator and first item of NewCartWithItems does not get any discounts
The first item in a cart created by NewCartWithItems request will find its correct discounts/campaigns. This fix is done for both ItemSale and CartCalculator.
Correct discounts should now be shown in cart for all items.
Change pos api release pipeline stages
Database upgrade stages are now merged to one stage, so that we can disable sync group and upgrade each tenant separately instead of disabling for every tenant, and only enabling once all tenants are updated fully.
This will significantly reduce the time lost in the process, if the upgrade fails.
Cart calculator and first item of NewCartWithItems does not get any discounts
Price calculation of first item in receipt
FIX: The first item in a cart created by NewCartWithItems request will find its correct discounts/campaigns. This fix is done for both ItemSale and CartCalculator.
Correct discounts should now be shown in cart for all items.
Make ReloadConfiguration work without related stores exported
The configuration is now reloaded without exporting related stores. It now selects store from the store table.
EndCartEditing fails validation when editing cart with negative subtotal
We've fixed an issue where validation of cart failed on EndCartEditing requests. This validation has now been improved so that ending editing on carts with a negative subtotal (returns, for instance) now succeeds.
Released 21.02.2023
Return stop reason in ItemRequirementsNotMetFault
Error message improvement
A new property - 'MessageToCashier', that shows a stop reason, has been added to 'ItemRequirementsNotMetFault' response.
New endpoint to fetch receipt in epos format
Added a new endpoint that fetches the order receipt in the epos format.
Cached prices are filtered based on a single cart's timestamp
When caching the price of an item, inactive prices are included so that if they activate within the cached duration, they will be available to be added to cart.
Released 08.02.2023
Revert breaking change in SetCartItemNote_Request
The NoteKey field when adding Notes to items is no longer required and is now set as optional.
Add ShipmentProvider to DeliverCartItem
Added ShipmentProvider field to DeliverCartItem method. Now the carrier name can be added to the delivery information.
Released 24.01.2023
Not possible to cancel order in Chain Web due to missing member.
Customer orders are cancelled through POS API without showing error message in Chain Web.
POS / POS API performance issue with voided articles
The request time does not increase rapidly when there are many voided/added items to cart.
Cloud POS API: spikes in SQL procedure duration
We've made improvements to database executions that improves POS API performance, and alleviates an issue where some database queries sporadically spiked in duration.
Released 19.01.2023
Performance in cloud POS API
POS API supports scale out to multiple instances of the same application service. This allows us greater performance during high load. This release also includes multiple performance improvements.
This change allows us to support auto scaling and requires no configuration. Scaling is handled by DevOps POSAPI team, in Azure portal.
Released 12.01.2023
Documentation for SetCartReadyForPaymentAction
Documentation for SetCartReadyForPaymentAction was missing, and this is now published to swagger.
Link to documentation: https://posapi.egretail.cloud/swagger/index.html
Send order to Kitchen screen on-premise
Enabled POS API to send kitchen order to on-premises POS Services via POS WCF relay.
Enabled POS API to assign numbers to kitchen orders that auto-reset daily.
KitchenOrderNumber value increases every time kitchen order is created.
Released 04.01.2023
APIKey on method GetPLUConfiguration
GetPluConfiguration was changed to not require cash register number as input.
New property APIKey was created and now it is used to find specify the store/cash register.
Member validation
Customers get an error message regarding member card when arriving to the cash register to pay, and it may lead to re-scanning all items.
When adding member by scanning a QR code, member with deactivated card is no longer added to the transaction.
Released 15.12.2022
Fallback for electronic receipt E-commerce
If sending mail with digital receipt fails due to e.g. downtime on services, the mail details will be saved in a new table in POS Local database and a job will retry sending the mail until it succeeds.
When the sending is successful, the row will be deleted from the table. When the job tries to send unsent mails, it will write the number of unsent rows/mails to the POS logfile.
Released 06.12.2022
Improvement of POS API swagger documentation
Swagger documentation of the following 3 methods has been improved: NewCartWithItems, AddItemsToCart, GetCart
- A red star marks required fields.
- Which fields are rounded in the response is specified.
Return PaymentTerminalType in Cart
Added PaymentTerminalType to Cart. This method is needed for detecting what kind of payment provider is used to start refund in Mobile POS.
It is set in AddPaymentToCart2 and stored in POSLog.
Option for not expanding bundles when added to item transaction
Added a new parameter that gives the option to treat bundles as normal items in the POSLog, with less information shown.
Improvement of calculation rounding amount on customer orders
An improvement is done so it's not possible to complete a receipt if the paid amount doesn't match the sale total on customer orders.
Previous there has been issues with some amounts of both positive and negative rounding on receipts from customer orders, and this potentially caused trouble for stores when doing balance registration.
POS API Data Export - Export of prices from EG Item/Promotion management
A new job to export price data has been added to the POSApiDataExport package. This job includes the unique price identifier from EG Item Management.
- The new ExportPrice job should be used when data is updated in POS Master from EG Cloud Item/Promotion Management
- The existing ExportPriceItem job should be used when data is updated in POS Master from Chain Classic
The jobs used different procedures to fetch data in POS Master and will not affect each other.
Released 24.11.2022
Added DispatchServiceRule to DeliveryDetails
Added a new DispatchRuleId field that is given in methods that return a cart. It can be set with CheckoutCart or SetCartDeliveryInfo methods.
Improvement of recalculation after completed checkout
Methods EndKlarnaPayment and UpdateKlarnaPayment no longer recalculate the total amount in the created cart.
Released 16.11.2023
Introduced a new method called SetCartItemNotes
A new method called SetCartItemNotes is added, which lets the user add/change item notes already added to a cart.
Notes can also be added now while using methods like AddItemToCart, NewCartWithItems and AddItemsToCart.
Added Backoffice as CustomerOrderProvider
CustomerOrderProvider can now be set to Backoffice in Chainweb without causing problems for method BeginCartEditing.
Backoffice was not supported as provider, and that made BeginCartEditing fail wen calling Pos Services CustomerOrderService to get information about supported providers.
Capture and refund supporting Klarna.
(RTP-386)
There is now added functionality for performing capture and refund with Klarna in POS API.
Orders can be now paid and refunded with Klarna through POSAPI.
Released 20.10.2023
Improvement of logic of storing sequence number in database
Sequence number is used twice due to missing logic in cache when an exception occur.
The receipts are no longer missing and there is no more duplicate sequence numbers for them.
Improvement of selling items with time restrictions
When selling items with time restrictions, the time zone is now set correctly when trying to validate cart for purchase.
Return Vensafe TicketId in Cart
When Vensafe items in sold in PosApi there is now Barcode in Cart that should be used to get items from the vending machine.
Including color and size in ReturnItem response
Two new attributes, Color & Size are added to "GetItemsAvailableForReturn" in ItemSale endpoint.
They are now included in the response.
Released 05.09.2023
Improvement of procedure of importing prices from Item Management
Prices are now imported correctly from Item Management.
Additionally, when one item has duplicate prices it will no longer stop import, instead it will be handled without errors.
Improvement to loyalty number distribution
CoopID is now only added to the ExternalLoyaltyNumber, while the member number is set to the LoyaltyNumber.
Improvement of linked item not being removed from POSLog
When deleting an item from an order, linked item is removed as well. If linked item is removed instead of a main one, behavior is the same and both items are removed.
Released 24.08.2023
Vensafe integration in POS API
Added support to reserve Vensafe articles from POS API. There is also a new method GetVensafeProducts that returns all available articles.
Improvement to GetCoopaySalesSummary
When calling GetCoopaySalesSummary after GetCart, error is no longer thrown. Storenum and cashregister are now always set when fetching finished receipts.
Improvement of Click & Collect order
When a Click & Collect order is picked, CustomerOrderVariant field is set to WebReservedStorePickup.
Released 08.08.2022
Improvement to loyalty number distribution
CoopID is now only added to the ExternalLoyaltyNumber, while the member number is set to the LoyaltyNumber.