Word in advanceβ
π Core drop notes structure
- We try to categorize all drop entries as best we can by the closest common denominator, e.g. Extension point entries, or Services. This will make it a little easier for you to discern what's important to you.
- Although the difference can be subtle, we try and categorize the entries on whether they're new additions π or improvements β
- The introductory text for each entry will be more concise, with Detailed information available via the Expansion bar.
Breakingβ
No breaking changes.
Specific topicβ
β Data lake exportsβ
We've made several improvements to specific Data lake exports.
Details
- We've included return reasons in the Order data lake exports;
- We've included stock mutation timestamps in the Stock mutation data lake exports;
- We standardised the rounding between
GetOrder
and the Order data lake exports; - We've expanded the available data in the UserSubscriptions object in the Users data lake exports.
{
"SubscriptionID": "string",
"Status": "string",
"IsBlocked": false,
"OriginatingOrganizationUnit": {
"ID": "string",
"Name": "string",
"BackendID": "string"
},
"Subscription": {
"ID": "euw123",
"LoyaltyProgramID": "euw123",
"BackendID": "MY_FIRST_SUBSCRIPTION",
"Name": "My first subscription"
}
}
Custom fields on payment transactions were added to the exports as well.
β Converting custom field values to numberβ
We've introduced a new statement you can use in your extension point scripts. This ToNumber
statement can convert the value of a custom field (which might be string value) into a number.
For a sample, see: ToNumber.
π Mailing a thermal invoiceβ
While it's already possible to send invoice PDFs via email, we wanted to expand this to include the mailing of (thermal) receipts.
Once the front ends are updated to include the option, this will work out of the box. You can however customize its template ElectronicReceipt to your liking. Additionally, you can optionally set a preference for electronic receipts by setting Auditing:PreferElectronicReceipt
to true.
Details
To accomplish all this, we've created the service called EmailThermalInvoice
. This service is designed to receive an InvoiceID and EmailAddress as input.
This service will send out the email based on the ElectronicReceipt template and include either the certified invoice stencil of type Thermal (if auditing is enabled for the country) or the standard invoice/receipt. It will be sent to the specified email address.
{
"InvoiceID": "12345",
"EmailAddress": "Pedropascal@docs-inc.org",
}
{
"OrderID": "12345",
}
{
"Documents": [
{
"Type": "GiftReceipt",
"Email": {
"Preferred": false,
"Allowed": false,
"ReasonCode": "NotSupported",
"Stations": []
},
"Receipt": {
"Preferred": false,
"Allowed": false,
"ReasonCode": "NoThermalPrinter",
"Stations": []
},
"Digital": {
"Preferred": false,
"Allowed": false,
"ReasonCode": "NotSupported",
"Stations": []
},
"Paper": {
"Preferred": false,
"Allowed": false,
"ReasonCode": "NotSupported",
"Stations": []
},
"ElectronicReceipt": {
"Preferred": false,
"Allowed": false,
"ReasonCode": "NotSupported",
"Stations": []
},
"Metadata": {
"ID": 1795,
"Description": "GiftReceipt"
}
},
{
"Type": "Invoice",
"Email": {
"Preferred": false,
"Allowed": true,
"Stations": []
},
"Receipt": {
"Preferred": false,
"Allowed": false,
"ReasonCode": "NoThermalPrinter",
"Stations": []
},
"Digital": {
"Preferred": false,
"Allowed": true,
"Stations": []
},
"Paper": {
"Preferred": false,
"Allowed": false,
"ReasonCode": "NoPaperPrinter",
"Stations": []
},
"ElectronicReceipt": {
"Preferred": false,
"Allowed": true,
"Stations": []
},
"Metadata": {
"ID": 247,
"Date": "2023-10-18T18:14:00.653Z",
"Number": "231",
"TotalAmount": 60.95,
"ThermalPrintCount": 0,
"PaperPrintCount": 0
}
}
]
}
Template sample
To make things just a tad easier, here's a sample of a template you could use for the ElectronicReceipt template, which requires Destination Mail.
{#subject}New Black - Electronic Receipt{#/subject}
<div style="font-family: 'Helvetica', Arial, sans-serif;font-size: 16px;color: #82786f;">
Invoice #{{>InvoiceNumber}}
<br />
</div>
<div style="border-top: 1px solid #dad6d2; height:20px;"> </div>
<p style="font-family: 'Helvetica', Arial, sans-serif;font-size: 12px;line-height: 16px;text-align: left;color: #525252; padding-bottom: 10px;">
{{if Customer}}
Dear {{>Customer}},
<br />
<br />
{{/if}}
Please find your electronic receipt attached to this e-mail. This is also your guarantee certificate, so be sure to save this e-mail.
<br />
<br />
Any further questions? Please get in touch with our customer service department via the online contact form: <a href="https://newblack.io" title="FAQ and customer service" target="_blank">https://newblack.io</a>.
<br />
<br />
Important!<br />
We recommend that you open the product's original packaging carefully and
save the packaging it was shipped in, in case you decide you want to return your order.
For more information about returning or exchanging articles, please see our FAQ for the returns policy</a>.
<br />
<br />
We hope you enjoy your purchase!
<br />
<br />
Kind regards,<br />
{{>OrganizationUnit}}
<br />
<br />
This is an automatically generated e-mail. Please do not reply to this message.<br />
Our <a href="https://newblack.io" title="General terms and conditions" target="_blank">general terms and conditions</a> apply.
</p>
We've added the above sample which you can use for configuring your ElectronicReceipt template differently - that is, if you want to offer more information than the existing basic message we've added as a fallback. We'd like to remind you however, that this feature is currently waiting for front end work to be completed.
Template for settlements monitorβ
In last week's core drop 2.0.716 we introduced a new payment settlements monitor. We're now introducing its required template called PaymentSettlementFileMonitorNotificationor to allow you to customize the corresponding email.
Propertiesβ
π TaxRateInfoIDβ
We added TaxRateInfoID to the CreateManualInvoice
service.
Sample
{
"Series":"FTM",
"Number":2,
"OrganizationUnitID":9,
"InvoiceDate":"2023-12-05",
"Lines":
[{
"Description":"TEST",
"Quantity":1,
"TotalAmountInTax":5,
"TaxRateInfoID":6
}]
}
Product filter in ListRevisionsβ
To be able to check all revisions connected to a product, we've extended the ListRevisions
service with a product filter by means of the following property: ProductID.
Name filter in ListSharedWorkspacesβ
Small addition of a Name property to the ListSharedWorkspaces
service to increase filtering options in the front end.
Filtering out uncompleted return ordersβ
To enable the filtering of orders which were abandoned halfway through the return flow in Return portal, we've added the IsPlaced property** on the GetReturnOrdersForOrder
service.
Warranty information storageβ
- Warranty information is now stored as a snapshot when creating the case and won't change anymore during the repair process.
- Openinghours are now available in the repair templates on the Repair.OrganizationUnit.
Servicesβ
β Performanceβ
For every GetShoppingCart
or GetOrder
we would fetch the user who created the order separately, because there are some cases where the App would like to display this information. We're cutting these down to a single CreatedByFullName property on orders, which translates to a subtle performance improvement.
β ProductRequirements in ImportProductsβ
You can now manage your product requirements via the ImportProducts
call, whether it's a new product or updating existing ones.
Details
{
"SystemID": "insomnia",
"Products": [
{
"ID": "1167621711",
"Name": "EVA Product",
"CustomID": null,
"Brand": "Mybrand",
"LedgerClassID": null,
"TaxCode": "Electronics",
"Barcodes": [
""
],
"UnitBarcodes": null,
"Type": null,
"Status": null,
"Variations": null,
"Content": null,
"VariationValues": null,
"IsDeleted": false,
"GiftCardConfigurationID": null,
"GiftCardType": null,
"GiftCardIsDigital": null,
"GiftCardData": null,
"Assortments": null,
"CommodityCode": null,
"CountryOfOriginID": null,
"ManufacturerID": null,
"RequireSerialNumberForSale": null,
"SerialNumberConfigurationID": null,
"ProductRequirements": [
{
"Name": "Required text",
"DataType": 0,
"OrderType": 0,
"IsArray": false,
"IsRequired": true,
"EnumValues": null,
"BackendID": null,
"Handler": null
}
]
}
]
}
{
"SystemID": "insomnia",
"Products": [
{
"ID": "110234321719",
"IsDeleted": false,
"Name": "EVA Product",
"Brand": "Mybrand",
"Barcodes": [
"12913740321719"
],
"TaxCode": "Electronics",
"ProductRequirements": [
{
"Name": "Required text",
"DataType": 0,
"OrderType": 0,
"IsArray": false,
"IsRequired": true,
"EnumValues": null,
"BackendID": null,
"Handler": null
}
]
"Content": [
{
"Name": "EVA Name",
"ShortDescription": "Enjoy this short description.",
"Images": [
{
"ImageUrl": "https://--.png",
"MimeType": "image/png",
"Name": "ImageName.png"
}
],
"CustomContent": {
}
}
]
},
]
}
π DataLakeBackfill invoice documentβ
A new Data Lake document has been added to the DataLakeBackfill
service. The new type is: Invoices (3).
More on this service can be found here.
Force CancelOrderβ
We've done the back-end work for making it possible to force an order cancellation.
Details
To accomplish this, we've added the Force parameter to the CancelOrder
service.
It should go without saying that, once this is available in the front end, it should be used with extreme caution. If used improperly, customers can be refunded for orders while still being delivered their orders.
GetUserRequirementByIDβ
Instead of relying on an expansive ListUserRequirements
, we've created a more dedicated service for user requirements called GetUserRequirementByID
.
Details
The following properties are included in the new service:
- ID
- UserType
- RequiredFor
- Preferred
- Display
- UserRequirementSetID
- UserRequirementName
- Property
- CustomValidators
Fixesβ
- When the setting
EnablePriceViewingFunctionalities
was configured, anonymous users (without authorization header) couldn't see the display_price anymore inSearchProducts
responses. - To fix an issue where custom OUs were not displayed in the promotion engine, we've added OrganizationUnitSetName and OrganizationUnitSetType to the
GetDiscountByID
service. - RMAs are now excluded from terminal totals, preventing them from being included in general counts.
- We fixed an issue where the order amount condition did not respect excluded products in the prefigure.
- Handle null values in settings.
- When subscription values are modified, EVA will now properly raise a Subscription_changed event instead of Customer_updated.
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Β Lines is deprecated and will be removed in 2.0.749: This is no longer supported.
- CreateManualTaxExemptionReason.Lines
- HighΒ Result.Page.ScriptID is deprecated and will be removed in 2.0.749: This is no longer supported.
- ListUserRequirementsResponse.Result.Page.ScriptID
- HighΒ Result.Page.ShippingMethodID is deprecated and will be removed in 2.0.749: This is no longer supported.
- ListUserRequirementsResponse.Result.Page.ShippingMethodID
- HighΒ Result.Page.SubscriptionID is deprecated and will be removed in 2.0.749: This is no longer supported.
- ListUserRequirementsResponse.Result.Page.SubscriptionID
- HighΒ Result.Page.UserRequirementSetID is deprecated and will be removed in 2.0.749: This is no longer supported.
- ListUserRequirementsResponse.Result.Page.UserRequirementSetID
- HighΒ Result.Page.UserRequirementSetName is deprecated and will be removed in 2.0.749: This is no longer supported.
- ListUserRequirementsResponse.Result.Page.UserRequirementSetName
π« Effectiveβ
These deprecations are now effective. As of now, these services and/or fields are no longer available in EVA and can no longer be used.
- Object Lines in the
CreateManualTaxExemptionReason
service has been deprecated due to being unused. ListUserRequirements
will no longer return the following properties due to being replaced with a dedicated service (seeGetUserRequirement
above):- ScriptID
- SubscriptionID
- ShippingMethodID
- UserRequirementSetID
- UserRequirementSetName
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.