Skip to main content
Arrow Backward IconBack to Overview

Core 2.0.762

November 5, 2024

Released on all test and acceptance environments on November 5, 2024

Will be released to production in EUW and ASE on November 11, 2024*

Will be released to production in CUS on November 12, 2024*


release notes image

Breaking

Security settings

Security settings have been grouped and now all require a new (unscoped) functionality Security, which is not automatically granted when this release hits.

While this will not impact your current setting configuration, for future changes your environment administrators will have to manually attach this new functionality to the corresponding roles authorized to make calls on application security in your organization. Please note that support is available: if you are unsure, you can request New Black to assist you.

Compliance

🇷🇴 Romania

✅ Requiring full company information

To ensure the creation of proper invoices in Romania, EVA now requires users to complete the following data when creating companies:

  • Company name
  • VAT number
  • Billing address
    • Address 1
    • Zipcode
    • City
🇵🇱 Poland

🆕 Email Receipts for Polish Customers

To complement the NTH integration in Poland, EVA can now optionally send consumers in Poland their digital receipts via email for e-commerce orders.

Details
  • New setting: EVA will now send digital receipts by email based on a new setting Auditing:Poland:NTH:MailEReceiptToCustomer. By default, this setting is false. When set to true, EVA will email the receipt to the customer's email address.

  • Configuration

    • Email Template: The email uses the existing ElectronicReceipt stencil template, which needs to be set up and maintained by you. The eReceipt will be included as an attachment.
    • SMTP Settings: These need to be configured at the root level since there is no middleware context.
    • Template Hierarchy: The ElectronicReceipt stencil should be set for the specific Organization Unit (OU) where the order was made. If not found, EVA will search up the OU hierarchy and use the default stencil message if necessary.
    • Disable Emails Setting: Ensure DisableEmails is set to false on the webshop or inherited from the root.
  • Failure Case: The only failure scenario is if the ElectronicReceipt stencil is explicitly disabled.

  • Failure notifications: NTH Rejection/Failure Notification Emails now use a new NTHRejectionNotification stencil template for further customization.

🇩🇪 Germany and 🇦🇹 Austria - Action may be required

🆕 CleanUpFiskalyResourcesTask

We are introducing the task CleanUpFiskalyResourcesTask. This task, which can be applied for only one OU at a time, updates the SCU(Signature Creation Unit) for closed stores with the status Decommissioned in the Fiskaly dashboard.

The user that performed the task will be emailed the SyncStoresWithFiskaly template.

This template has also been updated: its IsSynced property is replaced with the Status property, which properly reflects all states. Please update your template to be able to get the right update when this template is triggered.

🇸🇪 Sweden

✅ Mandatory billing details

Billing details are now mandatory in Sweden when the following user information is present:

  • Company name
  • VAT number

Watchtower

✅ Watchtower improvements

We have made the following two general improvements to Watchtower:

  • Improved resiliency for IO or LiveGuard not starting up.
  • Made the image pulling process more robust.

Properties

✅ CreatedByID

You can now view all employee IDs involved in a sale, including those who created the order, added/sold products and who completed the sale. This ensures accurate tracking of contributions for commission purposes.

Details

With this update, the GetOrder and payment-transaction related APIs such GetPaymentTransaction now include the CreatedByID property for all users involved in a transaction. This means:

  • When the same individual creates and completes an order, the same ID is shown in both order and payment data.
  • If different users are involved in selling items and completing payments, their respective IDs are displayed separately.
  • In cases where multiple users are involved in selling and completing an order, all relevant IDs are shown in the GetOrder and GetPaymentTransactionsForOrder (and such) responses.

For example:

  • an order might be created by employee A;
  • two items added by employees by B and C separately;
  • payment is done in two different transactions by D and E respectively.

EVA will in this case ensure that the IDs of A-E will be registered, ensuring everyone is recognized for their role in the transaction process.

Sample of a 2-person transaction

{
"PaymentTransactions": [
{
"ID": 42522,
"CreatedByID": 703,
"DeviceID": 182,
"OrderID": 76289,
"PaymentDate": "2024-11-01T16:00:36.577Z",
"Amount": 25.0000,
"Status": 10,
"IsConfirmed": true,
"PendingOrConfirmed": true,
"PaidAmount": 25.0000,
"PaymentName": "Cash",
"Change": 0.0000,
"TypeID": 9,
"Type": {
"Code": "CASH",
"Name": "Cash",
"IsRoundingType": false,
"PrintOnDocuments": true
},
"CurrencyID": "EUR",
"ExchangeRate": 1.0,
"Description": "Cash",
"SettledAmount": 0.0000,
"IsSettled": false,
"RequiresCapture": false,
"CaptureMoment": 0,
"HasDispute": false,
"HasUnresolvedDispute": false,
"IsRefund": false,
"IsAuthorizationAdjustment": false,
"IsAuthorizationExpired": false,
"AvailableActions": {
"Cancel": false,
"Refund": false,
"Update": false,
"Approve": false,
"Capture": false
}
},
{
"DeviceSerialNumber": "P400Plus-27547",
"ID": 42523,
"BackendID": "DKG7RTVQN82",
"CreatedByID": 1700,
"DeviceID": 144,
"OrderID": 76289,
"PaymentDate": "2024-11-01T16:01:12.393Z",
"Amount": 30.2300,
"Status": 10,
"IsConfirmed": true,
"PendingOrConfirmed": true,
"PaidAmount": 30.2300,
"PaymentName": "PIN",
"Change": 0.0000,
"TypeID": 3,
"Type": {
"Code": "PIN",
"Name": "PIN",
"IsRoundingType": false,
"PrintOnDocuments": true
},
"CurrencyID": "EUR",
"ExchangeRate": 1.0,
"Description": "PIN",
"SettledAmount": 0.0000,
"IsSettled": false,
"RequiresCapture": false,
"CaptureMoment": 0,
"HasDispute": false,
"HasUnresolvedDispute": false,
"IsRefund": false,
"IsAuthorizationAdjustment": false,
"IsAuthorizationExpired": false,
"AvailableActions": {
"Cancel": false,
"Refund": false,
"Update": false,
"Approve": false,
"Capture": false
}
}
]
}

✅ PrimaryProductIDs / RelatedProductIDs

To accommodate large product sets and and the exposing of group relations, we are refactoring the ProductRelations services.

Details

We are deprecating the following properties in favor of their plural form for all relevant service responses:

  • PrimaryProductID > PrimaryProductIDs (made into an array)
  • RelatedProductID > RelatedProductIDs (made into an array) .

This allows for exposing Group relations and a more compact result for Uni- and Bi-dynamic relations.

Note however that this is not effective immediately: we are introducing a new (and immediately deprecated) root level setting called GroupProductRelations. This new setting acts as an opt-in to this new behavior to allow for backward compatibility.

The following samples are based on the ListProductRelations service response for dynamic product relations (other services will yield similar results).


// Unidirectional relation between product 1 and products 2, 3. Note that Bi-directional is similar.
// From
"Relations":[
{
"PrimaryProductID":1,
"RelatedProductID":2
},
{
"PrimaryProductID":1,
"RelatedProductID":3
}
]

// To
"Relations":[
{
"PrimaryProductID":1,
"PrimaryProductIDs":[1],
"RelatedProductIDs":[2, 3]
},
]

Services

🆕 DownloadStockOverview

We are introducing a new service for the purpose of downloading large stock overviews: DownloadStockOverview

Details

DownloadStockOverview can be used for downloading a stock overview in the form of an Excel file for multiple OUs or sets.

Requires the functionality stock.view.

This service will be incorporated into Admin Suite for easy access to the overviews.

🆕 Access Foreign Card Data in GetOrder API

You can now access foreign card data for Dynamic Currency Conversion (DCC) transactions through the GetOrder API.

This update allows you to view original currency amounts, foreign currency payment amounts, and exchange rates for transactions involving foreign cards.

Details
  • New Functionality: The GetOrder and GetPaymentTransaction APIs now include data for DCC transactions, providing details such as CurrencyConversions, Amount, Rate, and CurrencyCode.
  • Access Requirements: This data is available to API users with the PaymentData.View permission.
  • Current Limitations:
    • This feature is currently implemented only for the Adyen payment processor.
    • API users without the PaymentData.View functionality and employees (regardless of the permission) cannot access this data.
  • Behavior:
    • When the card currency matches the order currency, the CurrencyConversions object is not shown.
    • If a foreign currency is used, the conversion details are available whether Adyen or the bank performs the conversion.
  • Local Mode: Uses EUR for currency rates when specific rates cannot be retrieved.

Sample response

{
"PaymentTransaction": {
"ID": 4200,
"BackendID": "P6FLNK",
"DeviceID": 144,
"OrderID": 75620,
"Data": "{\"AuthCode\":\"123456\",\"MerchantAccount\":\"NewBlackPOS\",\"CurrencyConversions\":[{\"Amount\":14.31,\"Rate\":1.4309,\"CurrencyCode\":\"SGD\"}],\"MerchantReference\":\"EVA-70-42\"}",
"PaymentDate": "2024-10-29T15:52:58.47Z",
"Amount": 10.0000,
"Status": 10,
"IsConfirmed": true,
"PendingOrConfirmed": true,
"PaidAmount": 10.0000,
"PaymentName": "VISA",
"Change": 0.0000,
"TypeID": 258,
"Type": {
"Code": "VISA",
"Name": "VISA",
"IsRoundingType": false,
"PrintOnDocuments": false
},
"CurrencyID": "EUR",
"ExchangeRate": 1.0,
"Description": "PIN",
"SettledAmount": 0.0000,
"IsSettled": false,
"RequiresCapture": false,
"CaptureMoment": 0,
"HasDispute": false,
"HasUnresolvedDispute": false,
"IsRefund": false,
"IsAuthorizationAdjustment": false,
"IsAuthorizationExpired": false
}
}

✅ PushReturnOrder

The following change is introduced as part of a bigger development - this feature is not ready for use

We've extended the PushReturnOrder service with two new properties to allow for creating return offer orders:

  • IsOffer -> optional boolean which defaults to false.
  • OfferExpirationDate -> nullable dateTime. If not provided, the default value from a setting (which is still upcoming) will apply.

🆕 Serial number support for CompleteReservationCleanupTask

Serial number support has been added for the CompleteReservationCleanupTask, enabling the functionality to provide or withhold serial numbers based on requirements.

🆕 PushLoyaltyPrograms

To allow for pushing multiple Loyalty programs at once, we are introducing the following service: PushLoyaltyPrograms.

Details

While this service works similarly to the single service, it's been adjusted for a list of loyalty programs.

It's currently limited to 1000 programs at once.

Request sample

{
LoyaltyPrograms: [{
// ... same as PushLoyaltyProgram
}],
DisableEventExports: true,
}

// Response
{
SuccessfullyAdjustedLoyaltyPrograms: [{
ID: 1
}],
FailedToAdjustLoyaltyPrograms: [{
BackendID: "some-lp-bid",
ErrorIdentifier: "LoyaltyPrograms:CannotUpdateConditionType"
}]
}

✅ GetAssemblyNameForDeviceTypes

You can now see the assembly name Upos810T as an option when creating or editing a Cash Drawer or Fiscal Thermal Printer in the Admin Suite.

Settings

🆕 Anonymous access

Access to anonymous services can be managed through a new setting: AllowEcommerce.

This new setting defaults to true, but when set to false it will revoke all public access to all anonymous EVA services.

This can be used in scenarios where your use of the EVA platform is limited only to in-store transactions. However, even in that scenario, some services need to remain publicly available, like Login and ResetUserPassword. Those services have therefore been split off and are listed as "public" instead, and as such remain unaffected by the above setting.

So, hence forth, EVA distinguishes between two types of public services; "anonymous" and "public".

✅ Security settings

The defaults of some settings have been adjusted to enhance security.

While existing environments will have their current values inserted into their database through a migration, ensuring they are not affected by this change, we would like to remind you that setting the following values will result in a more secure environment:

Additionally, some legacy settings were cleaned up in the process:

Details
  • LoginWithIdentificationPin:Length
  • LoginWithIdentificationPin:CreateLength
  • LoginWithIdentificationPin:GenerateLength
  • AllowLegacyAccessControl
  • AllowOrganizationUnitSelection
  • CustomerCanRegister (was replaced with Security:AllowEcommerce)

Other topics

🆕 More DataLakeBackfill types

We are adding the following new types to the DataLakeBackfill service:

  • Stock mutations
  • User Tasks
  • ZonedCycleCounts
  • Shipments

Details

The following list displays all types which are now available for backfilling your Data lake.

  • FinancialPeriods = 1
  • Orders = 2
  • Invoices = 3
  • Users = 4
  • Discounts = 5
  • UserBatches = 6
  • Cases = 7
  • Shipments = 8
  • ZonedCycleCounts = 9
  • UserTasks = 10
  • StockMutations = 11

Furthermore, we've changed the way EVA handles the date/time for these datapacks: these now correspond to the actual data creation date, rather than the export date.

🆕 Voucher Printing Functionality

The following change is introduced as part of a bigger development - this feature is not ready for use

We're laying the groundworks for printing vouchers directly from your orders, making it easier to manage and distribute promotional coupons.

Details
  • New Service: PrintCouponsForOrder allows you to print all generated coupons by providing the OrderID and StationID.
  • Updated Stencils: ThermalReceipt and CertifiedInvoice stencils now include GeneratedCoupons.
  • New Stencil: PrintOrderCoupon is used for printing the coupons.
  • Document Retrieval: GetAvailableDocumentsForOrder now indicates if coupons are available, with the type GeneratedCouponsReceipt. Only the OrderID is required to print coupons, and no discount/coupon metadata is needed.

🆕 Updates to Data lake packages

We're extending the following Data lake packages with a few new properties:

  • ZonedCycleCounts
  • UserTasks
  • Orders
  • Stock

Details

The following properties were added to the Datalake exports:

  • ZonedCycleCounts:

    • Result.Page.CompletionTime
    • Result.Page.CreatedByID
    • Result.Page.CreationTime
    • Result.Page.OrganizationUnitID
    • Result.Page.ProductID
    • Result.Page.IsActive
    • Result.Page.IsCompleted
    • ProductBackendID
  • UserTasks:

    • CreationTime
  • Orders:

    • Result.Lines.Reference
  • Stock:

    • StockLabel.ID
    • StockLabel.Name
  • Stock mutations:

    • AutomaticCorrectionQuantity

✅ OU Subnet input

EVA now prevents you from entering faulty subnets for OUs (which could break the Login flow).

Fixes

  • Fixed an issue with the AutoShip feature for Tap to Pay payments.
  • We fixed an issue when accessing cases with deleted parent topics.
  • We addressed two issues which could cause cycle counts with multiple products to not be created.
  • EVA now displays the right error result for a failed PushCompany attempt.
  • Loyalty program users were incorrectly allowed to purchase more than one product at a subscription price despite a QuantityLimitPerUser setting.
  • The tax table was not being populated in the GetOrder function for exchange orders when the total amount was zero.

Deprecations

🆕 Introduced

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

Deprecated

High

  • High DownloadOverview is deprecated and will be removed in 2.0.794: Use DownloadStockOverview instead.
    • ListStockForOrganizationUnits.DownloadOverview
  • High PageConfig.Filter.BackendID is deprecated and will be removed in 2.0.794: Use ProductIDs instead.
    • ListStockForOrganizationUnits.PageConfig.Filter.BackendID
  • High PageConfig.Filter.Barcode is deprecated and will be removed in 2.0.794: Use ProductIDs instead.
    • ListStockForOrganizationUnits.PageConfig.Filter.Barcode
  • High PageConfig.Filter.CustomID is deprecated and will be removed in 2.0.794: Use ProductIDs instead.
    • ListStockForOrganizationUnits.PageConfig.Filter.CustomID
  • High PageConfig.Filter.ProductID is deprecated and will be removed in 2.0.794: Use ProductIDs instead.
    • ListStockForOrganizationUnits.PageConfig.Filter.ProductID
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.