Skip to main content
Arrow Backward IconBack to Overview

Core 2.0.753

September 3, 2024

Released on all test and acceptance environments on September 3, 2024

Will be released to production in EUW and ASE on September 9, 2024*

Will be released to production in CUS on September 10, 2024*


release notes image

Breaking

No breaking changes.

Security

Retroactive addition 27-09-24

The following addition was made after this Core drop was sent out.

Security: limit Watchtower ExecuteCommand

This service now only accepts local requests, limiting it to the store of the Watchtower.

Compliance

🇷🇴 Romania
  • The payment types from the fiscal printer have been mapped to the corresponding payment types in EVA, resulting in the correct payment types being displayed on the fiscal receipts.
🇲🇴 Macau

✅ Optional ZipCode

  • The ZipCode property for Macau can now be made optional by including its country code MO in the existing Addresses:ZipCodeOptionalCountries setting.

See also the Compliance in Macau documentation.

🇨🇳 China

✅ Certified invoice thermal stencil

We have made several updates to the CertifiedInvoice thermal stencil for China.

  • The header text is changed from 销售单 to 销售单号
  • The following label for quantity has been added: 数量
  • We've added a Unit price column to the product grid: 单价
  • The VAT table below the total amount is removed from the receipt
🇬🇧 United Kingdom

✅ Document type logic

Instead of having to choose one over the other, the Document type logic for the United Kingdom now works side-by-side with the address requirements necessary for complying with the UK's Anti money laundering protocol.

🇦🇪 UAE

Updated Stencils and Translations

We've updated the UAE stencils for Certified Invoices, including both thermal and PDF formats, along with the Arabic translations.

✅ Fixes

  • Solved the case where refunds failed on non-fiscal stations.

Properties

🆕 FairMarketValue

For the proper handling of discounts by Vertex, EVA can now additionally send in a new property: FairMarketValue.

This property is sent in alongside the UnitPrice and ExtendedPrice properties when a discount is involved. The ExtendedPrice, which equals UnitPrice * Quantity, will be set to 0 in that case.

Sample
{
"lineItemId": "130439",
"lineItemNumber": 2,
"product": {
// Details about the product go here
},
"quantity": {
// Details about the quantity go here
},
"unitPrice": 125,
"fairMarketValue": 125,
"extendedPrice": 0,
"inputTotalTax": null,
"seller": {
// Details about the seller go here
},
"customer": {
// Details about the customer go here
}
}

🆕 AllowPartialPayment

To allow for more customization in loyalty program payments, EVA now incldudes a new AllowPartialPayment property in all relevant services.

Services
  • ListLoyaltyProgramPaymentTypes
  • GetLoyaltyProgramPaymentType
  • CreateLoyaltyProgramPaymentType
  • UpdateLoyaltyProgramPaymentType

When the AllowPartialPayment property is set to false (which is the default) you can only pay with the calculated amount, while setting it to true allows you to pay up until the calculated amount (though not over).

🆕 Quantities in Cookbook

To facilitate the verification of suspense accounts, we're adding the following two properties to both Cookbook 1.0 and Cookbook 2.0:

  • OrderLine.QuantityShipped
  • StockMutation.MutationQuantity

🆕 Customer context in prefigure discount

The PrefigureDiscount service now accepts a UserID which the prefigure can consequently use for displaying more relevant discounts. This entails hiding discounts the customer has already used for example.

When an OrderID is provided, the UserID is ignored. If neither an OrderID nor UserID is given, EVA falls back to the logged-in user - so long as it's not an anonymous user or employee.

Customers cannot provide a UserID of another user.

Services

🆕 GetUserBoughtProductBySerialNumber

We're introducing a new service to EVA called GetUserBoughtProductBySerialNumber.

By using this service with a serial number, EVA will return the current owner of that serial number.

Sample
{
"SerialNumber": "6952398409",
"IncludedProductProperties": [
"product_type"
]
}

🆕 Enforcing MaxAmountPerOrder

The cash limit specified in the MaxAmountPerOrder property, introduced in Core drop 2.0.750, is now enforced in the CreatePayment service.

🆕 PushSerialNumbers

EVA now features a new service called PushSerialNumbers.

Details

This Async API-user only service allows for pushing in serial numbers with the following properties:

  • OrganizationUnitID (optional)
  • ProductID (required)
  • SerialNumber (required)
  • StockLabelID (optional)

It requires the user to have the SerialNumber.Create functionality.

🆕 Expose payment method name and ID

To allow for better payment method grouping in our front ends, we are exposing PaymentMethodName and PaymentMethodID in the in AvailablePaymentMethods object.

Details

More specifically, EVA will now display PaymentMethodName and PaymentMethodID in the Types object of AvailablePaymentMethods.

This is available in the following services:

  • GetAvailablePaymentMethods
  • GetOrder
  • GetShoppingCart with AdditionalOrderDataOptions.IncludeAvailablePaymentMethods = true
  • GetAvailableRefundPaymentMethodsForOrder

🆕 Registering OU in UserBoughtProducts

While timezones were already taken into account for user-bought products, this used to be based on the context of the user. To support more precise timezones for user-bought products however, EVA now allows for registering the organization unit via RegisterUserBoughtProduct, AddUserBoughtProductDetail and PushUserBoughtProduct.

If no OU is provided, EVA will fall back to the current OU (with the order OU being leading, if applicable).

This OU is included in the UserBoughtProducts Data lake export.

Sample
RegisterUserBoughtProduct sample
{
"OrganizationUnitID": "53",
"PurchaseDate": "2024-09-02T22:00:00.000Z",
"PurchasedQuantity": 2,
"UserID": 262,
"ProductID": 108,
"SerialNumber": "53248",
"IsUnderWarranty": false
}
PushUserBoughtProduct sample

{
"UserID": 262,
"BoughtProducts": [
{
"ProductID": 107,
"SerialNumber": "523423",
"IsUnderWarranty": true,
"WarrantyExpiryDate": "2024-09-18T22:00:00.000Z",
"AdditionalWarrantyInfo": "YES",
"Details": [
{
"OrganizationUnitID": "ALMERE-HOUT",
"PurchaseDate": "2024-09-02T22:00:00.000Z",
"PurchasedQuantity": 5
}
]
}
]
}

Datalake export sample
{
"GenerationTime": "2024-09-04T07:54:36.3373155Z",
"ID": "euw763",
"ProductID": "euw107",
"ProductName": "Example SerialNumber RequiredForSale",
"SerialNumber": "523423",
"IsUnderWarranty": true,
"WarrantyExpiryDate": "2024-09-18T22:00:00Z",
"AdditionalWarrantyInfo": "YES",
"UserID": "euw262",
"UserBackendID": "507f6278-eb0e-49f2-8397-8706388d1695",
"UserCountryID": "NL",
"LastPurchasedQuantity": 5,
"TotalPurchasedQuantity": 5,
"IsDeleted": false,
"Details": [
{
"OrganizationUnitID": "euw53",
"PurchaseDate": "2024-09-02T22:00:00Z",
"PurchasedQuantity": 5
}
]
}

✅ Pricelist BackendID

You can now create a new price list using a BackendID from a previously deleted price list.

Settings

🆕 Deprecated EnableUserBoughtProductFunctionalities setting

The EnableUserBoughtProductFunctionalities setting, which was used to manage user access to the user bought products features, has been deprecated. EVA will now automatically handle functionalities and scopes related to this service without requiring this setting.

This change adheres to our standard approach and simplifies the process. Originally, this setting served as a temporary measure when features and scopes for user bought products were first implemented.

🆕 SplitUserSubscriptions

EVA now features a new setting called SplitUserSubscriptions.

This setting allows you to indicate if loyalty subscriptions need to be returned in subscription related service calls or not. While the setting remains in its default state, (false), EVA will return the loyalty subscriptions in service calls.

For more detailed docs from a front-end point of view, please see Separate Loyalty Programs from Subscriptions.

Other topics

✅ Loyalty program payments

To prevent issues with refunds in combination with loyalty payments, EVA now prevents users from removing customers from orders which already have loyalty payments.

Additionally, users can now go back and forth between checkout and basket, while making changes which impact payment types without issues.

🆕 Succesful logins in event exports

To facilitate tracking when a user made their last (successful) login to your ecom website, the Customer event export now features an additional event type: login_successful.

Fixes

  • Fixed a bug that caused an error message to appear when deleting a user, even though the user had the appropriate permissions.
  • Fixed an error caused by using multiple payment types with loyalty programs.
  • Fixed a bug where payment retries on abandoned orders using a loyalty program payment type with Up to Tax, excluded tax from the due payment amount.
  • Resolved an issue where the User budget payment option in a loyalty program failed to cover all eligible products listed in the selected price list during budget deductions.
  • Fixed an issue where switching pages based on the SearchStockMutations service could have a delay.
  • Fixed an issue where serial number validation could incorrectly result in an error when providing new/unknown serial numbers via ShipExternalOrder.
  • Fixed an issue with mixed orders and the nShift plugin.
  • An RTS cleanup task (read: stock movement) is now also triggered for lines in RTS orders that are partially shipped.
  • EVA now prevents updating cash handlers for OUs with a currency different from the main currency, as well as the creation of OU currencies with existing cash handler/currency combinations.
  • Fixed a race condition issue when scripting with OrderCustomStatus/Type.
  • Made a change to visibility groups (VG) to allow stores to see purchase orders which are sent to them from warehouses in a different VG (which normally speaking can't see each others orders).

Deprecations

⚡ Removed from typings

These deprecations and requirements are halfway to coming into effect. With these deprecations, the following services and/or fields are no longer be exposed by our typings. Failing to enter the mentioned required fields after the specified core release, will mean the services will no longer work.

Deprecated

High

  • High IsDeleted is deprecated and will be removed in 2.0.769: All users in the response are not deleted.
    • GetUserResponse.IsDeleted

Required

High

  • High Field Products.VariationValues.Value is required and will be enforced as such in 2.0.769.
    • ImportProducts.Products.VariationValues.Value

🚫 Effective

These property and setting deprecations and are now effective. As of now, these services and/or fields are no longer available in EVA and can no longer be used.

Setting

Highest

  • Highest ClientDeprecations:MaxVersionsBehind is deprecated since 2.0.753 - ignoring configuration and forcing value null: If set, when the current EVA version is the set amount behind used EVA-API-Version request header, app setting ClientDeprecations:IsOutdated returns false and requests are denied with ClientRefusedException errors.
  • Highest ClientDeprecations:WarnVersionsBehind is deprecated since 2.0.753 - ignoring configuration and forcing value null: If set, when the current EVA version is the set amount behind used EVA-API-Version request header, yields client_is_outdated warning response headers.

Deprecated

High

  • High PageConfig.Filter.Hash is deprecated since 2.0.753: Use Hashes instead..
    • ListPrivacyRemovalRequests.PageConfig.Filter.Hash
  • High PageConfig.Filter.UserID is deprecated since 2.0.753: Use UserIDs instead..
    • ListPrivacyRemovalRequests.PageConfig.Filter.UserID
Impact descriptions

For more details on the impact categories, please see When are changes communicated?.





Release dates may vary

The exact date for deploying a Core release to production environments may vary. See How we handle Core releases for more details.