Breaking
No breaking changes.
Settings & functionalities
🆕 Matching settings to functionalities
A new batch of settings have had functionalities attached.
You can read more about the details below, or check the affected settings directly.
Details
Context: We intend for each setting to be linked to a specific functionality within EVA. This ensures that only designated roles will have the ability to modify certain settings, allowing for more precise control over your environments.
Example: For instance, the setting APIGiftCard:BaseUrl will be associated with the functionality named GiftCardConfiguration.
Implementation Plan: Given the extensive nature of EVA's settings (approximately 1500 in total), we will be rolling these out in batches, once every EVA Drop - effectively once every four weeks. The first, second and third batches of these adjustments have already been included in EVA Core drop 2.0.726, 2.0.730 and 2.0.735.
Timeline: This new batch of changes is now available on your Test and Acceptance environments. These changes will be deployed to Production environments next week with EVA Core drop 2.0.739 (May 28). We anticipate completing this process over approximately 5 more EVA Drops until all settings are included.
Action Required: We encourage you to review this batch of settings, which are already documented on our Docs. Ensure that the roles assigned within your organization align appropriately with the functionalities necessary for access to these settings.
List of settings combined with functionalities in this EVA Core Drop
Setting | Functionality |
---|---|
GenerateCycleCountAfterNegativeStockAutoCorrect | CycleCounts |
GeneratePo:UseDefaultPlacement | Orders |
GetAvailabilityIndication:FastestPickupShopOnly | OrderFulfillments |
GetShopsByProximityDefaultLimit | OrderFulfillments |
GiftCards:Digital:ProductID | PaymentMethods |
GiftCards:Digital:Strategy | PaymentMethods |
GiftCards:Digital:TokenExpirationInDays | PaymentMethods |
GiftCards:MaximumOverPaymentInCents | PaymentMethods |
GiftCards:Payment:DenyPayingForGiftCards | PaymentMethods |
GiftCards:RequireSuccesfulGetCardOnUpdateSerialNumber | PaymentMethods |
GiftWrapping:AvailabilityProvider | Orders |
GiftWrapping:Calculator | Orders |
GiftWrapping:Description | Orders |
GiftwrappingEAN | Orders |
GlobalBlue:BaseUrl | None |
GlobalBlue:DeskID | None |
GlobalBlue:Enabled | None |
GlobalBlue:Password | None |
GlobalBlue:ShopID | None |
GlobalBlue:Username | None |
Google:Analytics:TrackingID | None |
Google:Directions:ApiKey | None |
Google:Directions:Url | None |
Google:Geocoding:ApiKey | None |
Google:Maps:ApiKey | None |
Google:Maps:ApiKey:Android | None |
Google:Maps:ApiKey:HTTP | None |
Google:Maps:ApiKey:iOS | None |
Google:Maps:ApiKey:IP | None |
Google:Orders:MerchantCertificateBlobID | None |
Google:Orders:MerchantID | None |
Google:Orders:MerchantServiceAccount | None |
Google:Orders:UseSandbox | None |
Google:Places:ApiKey | None |
Google:Places:ApiKey:Android | None |
Google:Places:ApiKey:HTTP | None |
Google:Places:ApiKey:iOS | None |
Google:Places:ApiKey:IP | None |
HoldFulfillmentOnInsufficientStock | OrderFulfillments |
Hybris:Endpoint | Discounts |
Hybris:Loyalty:Endpoint | Discounts |
Hybris:Loyalty:Token | Discounts |
Hybris:Token | Discounts |
IgnoreInsufficientStockForPickupOrder | OrderFulfillments |
ImageProvider:JpgQuality | None |
ImageProvider:PaddingOptions | None |
ImageProvider:PngQuality | None |
ImageProvider:ResizedCache:Hours | None |
ImportEmployees:IncludePasswordsInResultMail | Employees |
IncludeHistoricExchangeRates | ExchangeRates |
InsufficientStockForReservationStrategy | Commitments |
Interbranch:CopyShipmentBackendID | InterbranchOrders |
Interbranch:Disabled | InterbranchOrders |
Interbranch:FilterByCountry | InterbranchOrders |
Interbranch:ShippingOption | InterbranchOrders |
Interbranch:UseUnitCostOnReceivingPurchaseOrder | InterbranchOrders |
Intersolve:ClientTimeoutInSeconds | GiftCardConfigurations |
Intersolve:GetCard:ClientTimeoutInSeconds | GiftCardConfigurations |
Intersolve:GiftcardProduct:BackendID | GiftCardConfigurations |
Intersolve:GiftcardProduct:BackendSystemID | GiftCardConfigurations |
Intersolve:Giftcards:Version | GiftCardConfigurations |
Intersolve:Sftp:Certificate | GiftCardConfigurations |
Intersolve:Sftp:CertificatePassPhrase | GiftCardConfigurations |
Intersolve:Sftp:Host | GiftCardConfigurations |
Intersolve:Sftp:Username | GiftCardConfigurations |
Intersolve:Voucher:VoucherProductBackendID | GiftCardConfigurations |
Intersolve:Voucher:VoucherProductBackendSystemID | GiftCardConfigurations |
IntersolveGiftcardUrl | GiftCardConfigurations |
IntersolvePassword | GiftCardConfigurations |
IntersolveUsername | GiftCardConfigurations |
IntersolveVoucherUrl | GiftCardConfigurations |
Intersport:DeliveredByShopProductIDs | None |
Intersport:DemoEmailTrigger | None |
Intersport:Paypal:BaseUrl | None |
Intersport:Paypal:ClientID | None |
Intersport:Paypal:Secret | None |
Intersport:ReturnDescription | None |
Intersport:ReturnsCostsInCents | None |
Intersport:ShopWarehouseID | None |
InvoiceArchive | Invoices |
InvoiceFilter | Invoices |
InvoiceLineDescriptionProperty | Invoices |
InvoiceTrigger | Invoices |
Janrain:ClientID | None |
Janrain:ClientID:Crm | None |
Janrain:Domain | None |
Janrain:Enabled | None |
Janrain:PolicyGateEndpoint | None |
Janrain:Secret | None |
Janrain:Secret:Crm | None |
Janrain:TenantCode | None |
Janrain:UserAgent:Crm | None |
LimitOrderVisibilityForEmployees | Orders |
LimitOrganizationUnitVisibility | OrganizationUnits |
LimitUserVisibility | UserRoles |
LinePay:ChannelID | PaymentMethods |
LinePay:ChannelSecret | PaymentMethods |
LinePay:IsSandbox | PaymentMethods |
LinkMobility:BaseUrl | None |
LinkMobility:Enabled | None |
LinkMobility:Password | None |
LinkMobility:PlatformID | None |
LinkMobility:PlatformPartnerID | None |
LinkMobility:Timeout | None |
LinkMobility:Username | None |
ListReturnableSuppliersForOrderLegacyMode | OrderFulfillments |
LoginWithIdentificationPin:AllowOrganizationUnitSelection | Login |
LoginWithIdentificationPin:CreateLength | Login |
LoginWithIdentificationPin:Enabled | Login |
LoginWithIdentificationPin:GenerateLength | Login |
LoginWithIdentificationPin:Length | Login |
LoginWithIdentificationPin:Method | Login |
LoginWithIdentificationPin:Reset | Login |
LogRequestData | None |
Mail:SendOrderReturnedConfirmationFromStore | None |
Mail:StockReservationCreated:Enabled | None |
MailGun:Api:BaseUrl | None |
MailGun:Api:Domain | None |
MailGun:Api:Key | None |
MailGun:Api:TimeoutInSeconds | None |
MailGun:Api:User | None |
MailGun:Email:Test | None |
MaxCycleCountsPerShop | CycleCounts |
MaxCycleCountsPerShopPerDay | CycleCounts |
MaxReservationTime | Orders |
MessageBird:AccessKey | None |
MessageBird:BaseUrl | None |
MessageBird:Originator | None |
ModifyShippingAddressWhenReservationOrderHasToBeOrdered | Orders |
Mollie:Api:BaseUrl | PaymentMethods |
Mollie:Api:Token | PaymentMethods |
Monitor:Orders:MaxResultSize | Monitors |
MultiSafepay:ApiKey | PaymentMethods |
MultiSafepay:ApiUrl | PaymentMethods |
MultiSafepay:SendOrderInformation | PaymentMethods |
MultiSafepay:VerifyName | PaymentMethods |
MultiSafepay:VerifyName:Percentage | PaymentMethods |
MultiSafepay:VerifyNumber | PaymentMethods |
NormalizePhoneNumbers | None |
Notificare:ApplicationKey | None |
Notificare:MasterSecret | None |
Notificare:UserReferenceResolver | None |
NoTransportationDates | OrderFulfillments |
OCAPI:ApiBaseUrl | None |
OCAPI:ApiClientID | None |
OCAPI:ApiPassword | None |
OCAPI:HierarchyProvider | None |
OCAPI:ImageBaseUrl | None |
OCAPI:Marketing:AccountID | None |
OCAPI:Marketing:ApiClientID | None |
OCAPI:Marketing:ApiPassword | None |
OCAPI:Marketing:SubscriptionOrigin | None |
OCAPI:OrderExportExTax | None |
OCAPI:Password | None |
OCAPI:PreferredPaymentMethod | None |
OCAPI:UseCustomID | None |
OCAPI:UserAgent | None |
OCAPI:Username | None |
OCAPI:Version | None |
OfferExpirationInDays | None |
OpenAI:ApiKey | None |
Compliance
🆕 Compliance changes
🇬🇧 Compliance changes in United Kingdom
Anti money laundering
To adhere to the money laundering rules for the UK, EVA will be triggering customer requirements for sales with over 10.000 GBP in the order basket.
The following fields will then become mandatory:
- First Name
- Last Name
- Address 1
- Zip / Postal Code
- City
- Country
- Nationality
- Date of Birth
- (Optional) Phone number
Properties
🆕 Preventing discounts for self use
EVA now prevents using discounts on orders where the customer is equal to the logged in user. This is done by means of the CanBeUsedOnOwnOrder property.
The relevant property is not called CanBeUsedOnOwnOrder, but CannotApplyToOwnOrder instead.
🆕 Optional Data element for Adyen payments
To allow for listing more information from Adyen payments, we are expanding the default payment transaction model with an optional Data element.
Details
The default payment transaction model, as received via GetPaymentTransaction
for example, optionally shows a Data element if the following conditions are met:
- You are an API type user
- And you have the functionality PaymentData (scope View)
- And the payment method explicitly maps data for visibility (by default, none are visible)
In case of Adyen payment methods, the following properties can be displayed in the element:
- AuthCode
- MerchantAccount
- MerchantReference
🆕 CurrencyID in ListLoyaltyProgramPriceLists
We now expose the CurrencyID in the response of ListLoyaltyProgramPriceLists
.
Services
🆕 OU creation language validation
To ensure adherence to ISO format for languages, we now validate the input in the CreateOrganizationUnit
call. Any uppercase input will be automatically converted to lowercase.
Watchtower API keys
As a security measure, the Watchtower's API key will no longer be returned in several services and has instead has been limited to the CreateWatchtowerDevice
service. Furthermore, this service will return the key only when creating a virtual Watchtower.
Details
The API key will no longer be returned in the following services:
GetDevice
WatchtowerGetDeviceDetails
ListWatchtowerDevices
WatchtowerGetDeviceByHardwareID
✅ More efficient FSC API calls
To allow for adding products in the front end with just a single service call, while at the same time sorting counted products in the order they were counted, we're making some changes to a few services.
Details
The addition of:
- nullable CreationTime and LastModificationTime to
ListFullStockCountLabelProductDto
; - IncrementQuantity to
AddProductToFullStockCountLabel
; - Product model to
AddProductToFullStockCountLabel
's response`, which comes with the following properties:- ProductID
- BackendID
- CurrentCountUserID
- PreviousQuantity
- PreviousCountUserID
- Properties
- Quantity
- CreationTime LastModificationTime
🆕 Magic link with manual code
To allow for the inclusion of codes in Magic links, which can then be used manually in portal applications, we've made several changes.
Details
The use of manual codes in Magic links is only enabled when the new setting MagicLink:AllowManualCode
is set to true.
Afterwards, a new property called IncludeManualCode (which defaults to null) can be set to true to have the email sent with a short code for users to manually input into your application.
A new service called ConfirmMagicLink
can then be called with both the RequestToken and the ManualCode to obtain either the TemporaryToken or ApiKey when the values are valid - which is the same flow as before.
This setup honors all previous integrated MagicLink flows and scenarios. Front end work is still underway.
Settings
🆕 Minimum/MaximumOrderAmount
To be able to set a minimum and maximum amount for orders to be viable (and potentially displaying to customers how much more they would need to add to their basket), we're adding two new settings.
Details
RequiredData:MaximumOrderAmount
RequiredData:MinimumOrderAmount
If an amount is specified in either, then those values will become exposed in GetShoppingCart
and GetOrder
as order requirements. In practice this means an order cannot be placed below nor above the specified value.
Note: The minimum and maximum values include any discounts and exclude shipping costs.
Other topics
🆕 IsTransferOrder in Cookbook
To allow for the identification of transfer orders in Cookbook, both the 1.0 and 2.0 version of Cookbook now support the Order.IsTransferOrder property.
✅ Whitelabel giftcard solution
The whitelabel giftcard solution APIGIFTCARD
now supports giftcard providers sending in dates of purchase, expiration dates and whether the cards are expired or not.
Details
This means that when using a relevant service, such as CardBalanceCheck
, for a giftcard provider using the APIGIFTCARD
configuration, the corresponding endpoint will return the following new properties:
BaseUrl/card-info
BaseUrl/purchase
BaseUrl/refund
- DateOfPurchase
- DateOfExpiration
- Expired:true/false
BaseUrl/activate
BaseUrl/issue
- DateOfPurchase
- DateOfExpiration
These properties (when applicable) will then be returned in the response of your service call.
Additionally, these properties are now usable in the following stencils:
- ThermalReceipt
- CertifiedInvoice
- GiftCardOrderShippedConfirmation
- OrderShippedConfirmation (orderline)
- DigitalGiftCardMessage
- DigitalGiftCardSenderMessage
- DownloadDigitalGiftCard
🆕 Repairs in Data lake
Repairs is now available as a Data lake export.
Details
The file path for this new export: EVA/{region}/repairs/{date.Year:0000}/{date.Month:00}/{date.Day:00}/{id}
This export is available by default - no need to schedule a new task.
{
"ID": "",
"OrganizationUnitID": "",
"AssignedUserID": "",
"ReceiveMethodID": "",
"ExpectedArrivalDate": "",
"CaseID": "",
"ProductID": "",
"OrderLineID": "",
"RepairOrderID": "",
"SerialNumber": "",
"StatusID": "",
"ShippingOptionID": ""
}
Fixes
- As a small improvement, using the
EditProductPropertyType
service will respond with a clearer error when you don't input the right data. - A CaseInteractionCreatedEmail template will be triggered again when logging a public interaction during an Execute repair task.
- EVA now returns the SubscriptionID from
SubscribeUser
for external handlers (instead of the entire Subscription object). GetTaxExemptionReasons
will return the appropriate (non-cached) reason for non-Avatax calls.
Deprecations
No deprecation announcements.
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.