Skip to main content
Arrow Backward IconBack to Overview

Core 2.0.739

May 28, 2024

Released on all test and acceptance environments on May 28, 2024

Will be released to production in EUW and ASE on June 4, 2024*

Will be released to production in CUS on June 5, 2024*


release notes image

Breaking

Requirement: valid custom field values

Any Order that will go through the validation process of the Placing, Paying, Invoicing or Shipping must contain valid values for all the Custom fields of Order or OrderLine type that are configured as Required.

This is a blocking Requirement.

Rest assured however, we can guarantee there are no configurations currently in any Production environments among any of our customers where this will break anything.

Do take into account that the Companion App and older App versions do not support these new requirements.

Lastly, while this won't break any current configurations, please be mindful of creating new required custom fields.

Services

🆕 Deleting multiple users

We are introducing a new service called DeleteUsers to allow for deleting up to a 1000 users (read: IDs) a time.

This is an async service and will return any IDs of users which could not be deleted (due to visibility groups/functionalities for example).

Properties

🆕 PushUserPersonalizedPromotionProducts

To have a single service capable of creating and overwriting existing personal promotion products, we're introducing PushUserPersonalizedPromotionProducts.

Details

This new service can both be used to set and unset products, while also allowing for managing the selection of product.

It comes with PushUserPersonalizedPromotionProducts full support for BackendIDs, while the relevant GetUserPersonalizedPromotionProducts service call can be used with BackendIDs when the EVA-IDs-Mode: ExternalIDs header is set.

The functionality SetUserPersonalizedPromotionProducts is required for using the PushUserPersonalizedPromotionProducts service.

Sample of GetUserPersonalizedPromotionProducts

{
"UserID": "BEID-52390",
"PersonalizedPromotionID": "LARS1234"
}

Sample of PushUserPersonalizedPromotionProducts

{
"UserID": "BEID-52390",
"PersonalizedPromotionID": "Promo1234",
"Products": [
{
"ProductID": "9000018",
"Selected": true
},
{
"ProductID": "9000019",
"Selected": false
},
{
"ProductID": "9000020"
}
],
"SkipUnresolvedProducts": false
}

Services

✅ Filtering in ListPurchaseOrderShipments

The ListPurchaseOrderShipments service now allows for filtering on both multiple ShipmentBackendIDs and PurchaseOrderBackendIDs. This will allow for easier filtering in Admin Suite's Receive goods chapter.

✅ CardBalanceCheck error codes

When using the CardBalanceCheck for the whitelabel giftcard solution APIGIFTCARD, any errors will now come back with a clearer message as to what went wrong. For example: "An expired card cannot be used."

✅ SearchOrders speed

The SearchOrders service now sorts by CreationTime instead of ID, which leads to a smoother performance. Mind that this will not impact the display of results in the front end.

✅ ParseBarcode

We have made the use of ParseBarcode handlers more secure.

Details

The following ParseBarcode handlers are now employee-only:

  • Station
  • UserBackendID
  • Case
  • Repair
  • SecondChanceProductRegistration
  • Usertask
  • Initcc

Settings

🆕 Splitting repair order lines

To allow for setting order requirements on each individual repair of multiple of the same product, we're introducing the setting Orders:Repairs:SplitAllLines. By enabling this, all order lines on a repair order will be split.

Mind that this will only impact new repair orders.

Other topics

✅ Cases adhere to VGs

Cases can now be assigned to an OU and are incorporated in visibility groups.

Details

The following technical changes have been made:

  • The property AssignedOrganizationUnitID has been added to the CRUD services for cases.
    • If specified, this case will be visible for that OU only. If it remains empty, the case will be visible across all OUs.
  • The OriginatingOrganizationUnit property can no longer be updated.
  • Lastly, we expanded the validation for cases to ensure the included customer/assignee is valid.

✅ AssignedOrganizationUnitID in CaseInteractionCreatedEmail template

The AssignedOrganizationUnitID is now included in the CaseInteractionCreatedEmail, instead of the CurrentOrganizationUnit.

🆕 User agent in PaymentTypeAvailability

The PaymentTypeAvailability extension point now allows for the specification of a user agent. This will let you disable specific payment types based on the user agent.

Sample

extend PaymentTypeAvailability

if UserAgent.Name = 'eva-app-suite-sales' then

set output to false

else set output to true

end

🆕 Discounts based on multiple products and requirements

We have laid the groundworks for product requirements in product sets. This makes it possible to offer discounts based on one or more product requirements being met while also claiming the products for the discount.

Front end work is underway.

Details

This new feature is best explained by means of a practical example:

To celebrate the signing of a new player in the team, the printing service can be free/discounted when the Name and Number match the ones of that specific player.

  • Shirt → Product requirement “player name”
  • Pants → Product requirement “number“
  • Discount → Get free “printing“ if name == “New Black“ && number == “7“

The example below shows a configuration that would match this example, so two different product requirements between two different products.

Sample

{
ProductActionFinancialDispersion: 1,
DiscountAmount: 0.3,
ProductSets: [
{
RequiredQuantityOfProducts: 1,
IsDiscountableProductSet: true,
DiscountableQuantityOfProducts: 1,
ProductRequirements: [ // nullable
{
ProductRequirementID: 1, // required, number, ID
Values: ["New Black"] // required, list
}
]
},
{
RequiredQuantityOfProducts: 1,
IsDiscountableProductSet: true,
DiscountableQuantityOfProducts: 1,
ProductRequirements: [ // nullable
{
ProductRequirementID: 2, // required, number, ID
Values: ["7"] // required, list
}
]
}
]
}

  • To require the same product to have both, merge the product sets into one.
  • To require one of multiple values for a product requirement, use the Values array.

🆕 Displaying product requirements on receipts

We've made first steps for displaying product requirements on receipts.

Details

Properties for product requirements have been added to non-certified receipt and invoice templates.

Certified templates and front-end work is still underway.

🆕 Functionality (permission) for unreferenced return orders

To limit the potential for fraud with the creation of unreferenced returns, we're adding a new functionality: UnreferencedReturnOrder.

This functionality, which is by default added to all users to keep existing return flows intact, will prevent creating unreferenced return orders when removed from the role.

✅ Triggering stencils/emails in a repair flow

We've reexamined the trigger moments for sending communications to the customer and implemented them as according to the details.

Details
  • (Execute) RepairCompleted
    • Only triggers when Execute repair is completed with ShippingOption set to Ship AND there is no open amount on the Repair order
    • Is skipped when ShippingOption is set to Pickup (RepairReadyForPickup is triggered instead)
    • Is skipped when ShippingOption is set to Ship and there is an open amount (EVA pay email is triggered in stead)
  • Repair EVA pay email
    • Triggers when the Execute Repair task has been completed with ShippingOption set to Ship AND there is an open amount on the Repair order
  • RepairReadyForPickup
    • Triggers when the Execute repair has been completed with ShippingOption set to Pickup (as-is)
  • RepairShipped
    • Triggers when the Ship task has been completed (currently this happens when the Ship task is created)
    • (regardless of whether the Ship task was created immediately after the execute step, or after the open amount was resolved after the execute step)

Fixes

  • Stock will no longer mutate to negative quantities for Unified orders when AllowNegativeStockAutoCorrect is set to true with ResolveNegativeStockDuringPeriodClosing to false.
  • Translations for Checkout options will now be displayed correctly.
  • We made a fix to the elevation's security check, ensuring the right users can(not) get elevated to perform certain actions.
  • The PhoneNumber field for sales orders over 10.000 GBP is no longer required is no longer mandatory.
  • The reference to the original order on the Credit Invoice (PDF) for Germany is visible again.
  • The selection of a stock label for returned products (as announced in Drop 72) will properly take into account the stock label settings, instead of being limited to Sellable and Damaged.
  • Returns without retake will no longer be treated as exchange orders.
  • Regardless of the use of an internal or external tax provider, or Orders:UseNewCalculation, tax details will now be properly cleared when cancelling (shipping) cost lines.
  • In some cases, ex tax orders had small rounding issues on the InvoiceTotal when Orders:UseNewCalculation was enabled.
  • Suppliers in Orchestration sheets will no longer be considered invalid when they have less stock than the order needs when boosting suppliers in the sheet which do have the requisite stock (for example "score add xx when Supplier.HasAvailableStock") - just as "less preferred".

Deprecations

🆕 Introduced

These requirements are now announced for the first time. Usage of these services and/or fields will return the appropriate EVA-Warnings header.

Required

High

  • High Field UserID is required and will be enforced as such in 2.0.771.
    • CreatePrivacyRemovalRequest.UserID

⚡ Removed from typings

These deprecations are now halfway through their deprecation timeline. As of now, these services and/or fields will no longer be exposed by our typings.

Deprecated

High

  • High InitialPageConfig.Filter.UsageType is deprecated and will be removed in 2.0.755: Removed in favor of LoyaltyPointUsageOptions..
    • ListLoyaltyPrograms.InitialPageConfig.Filter.UsageType
  • High Results.UsageType is deprecated and will be removed in 2.0.755: Does not reflect listing information correctly because all the new options within loyalty program. Will be removed..
    • ListLoyaltyProgramsResponse.Results.UsageType
  • High UsageType is deprecated and will be removed in 2.0.755: Deprecated because it does not reflect all new options from the loyalty program..
    • GetLoyaltyProgramHandlers.UsageType
  • High UsageType is deprecated and will be removed in 2.0.755: Replaced by LoyaltyPointUsageOptions..
    • CreateLoyaltyProgram.UsageType
    • GetLoyaltyProgramResponse.UsageType
    • UpdateLoyaltyProgram.UsageType
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.