# March 2025

## Monthly summary / tl;dr

### New features 🚀

* There’s now full **support for pre-payments** (e.g. the user pay a limited amount in advance).
* Also **customer reservations** is now possible, with smart functions to inform the customer once the reserved product has arrived, all done while taking the receivement.&#x20;
* You can now **print an order as a PDF** directly from an open sale.&#x20;
* **Inventory transfers between warehouses** is now possible, and it’s also possible to set different warehouses for individual order items within the same delivery.
* The **purchasing** flow has been upgraded with support for **automatic suggestions based on min/max** stock levels, editable purchase orders until fully received, and a new, simplified receival dialog.
* In the Backoffice, you’ll find new tools for **managing printers**, including printing test pages, among several other stings.

*+ much more! Check out the full list below.*

### &#x20;Improved 👌

* Order handling—particularly for scenarios like Click & Collect—has been streamlined, making it easier to mark steps as completed and notify customers.
* The delivery address dialog is more user-friendly, and the system now supports smarter warehouse logic per order item.
* Multiple UI improvements have been made across sales and Backoffice views, including better visuals in touch sales, smarter dropdowns, and simplified navigation.
* Monthly reports for sales and inventory have been improved, and various elements in device and printer linking have been refined for smoother setup.
* There’s also better handling of product and campaign rules, making it easier to maintain accurate stock and pricing across stores.
* Search functionality is more robust, including for suppliers and deliveries.
* It’s now possible to modify warehouse selections for deliveries and remove items from deliveries even when in early stages.

*+ much more! Check out the full list below.*

### Fixed 🤦‍♂️

A long list of bug fixes that improved reliability and user experience, like:

* Several issues with payment dialogs, settlement views, and discount logic have been resolved.
* Partial settlements now behave correctly.
* Orders using reserved items now adjust stock properly.
* Issues affecting EHF invoice exports, label printing, and product reservations have also been fixed.

*+ much more! Check out the full list below.*

***

## 2025-03-31

### **Added**

* Print order as PDF on an open sale
* Support for inventory transfer between warehouses

### **Improved / changed**

* Improved order handling with the ability to more easily notify the customer and mark handling as completed (typically for Click & Collect etc.)
* Delivery state "Not delivered" is deprecated and replaced with "New" and "Started"
* Pre-payment info in parked/canceled order view
* Moved `DeviceLink` code to the top of the device page
* Option to set different warehouse on order items within the same delivery
* Added help text for payment method key
* Improved "deliver to address" dialog

### **Fixed**

* It's now possible to change the warehouse on a delivery or its order items
* Fixed issue where it wasn't possible to remove items from a delivery in status `New` or `Started`, even though it should have been allowed
* Users are now required to select a discount reason when setting a discount on an order, if at least one reason exists
* Improved dropdown menu so text doesn't overflow
* Pressing Enter in the search field (open sale – keyboard mode) now opens the product search dialog
* Settled order dialog failed to open if any items had `ReservationType: Purchase` or `RequestPurchase` – this is now fixed
* Supplier search now works in supplier dropdowns
* Fixed store payment issuer list, which previously failed to load correctly

## 2025-03-28

### **Improved / changed**

* Dintero: removed `dataTimeLayout` for `handleCallbackRequest`, now using `capture.CreatedAt` instead
* Invoice no longer has `requireExclusiveUse`, so it can now be combined with other payment methods

## 2025-03-27

### **Fixed**

* Stripe callback will now always capture the amount

## 2025-03-26

### **Fixed**

* `PurchaseOrderUid` is now included in the notification API response
* Settlements without transactions will now be added to receipts

## 2025-03-25

### **Improved / changed**

* \[Backoffice] Adjusted printer layouts

## 2025-03-25

### **Added**

* \[Backoffice] Implemented support for printer search
* New endpoint: `POST /tenants/{{tenantUid}}/printers/search`
* New API endpoint: `POST /tenants/{{tenantUid}}/printers/{{printerUid}}/test`
* Implemented printer testing – supports ESCPOS, ZPL, and PDF
* Settlement search
* New API endpoint: `PUT /tenants/{tenantUid}/stores/{storeUid}/receipts/{receiptUid}`
* New API endpoint: `GET /tenants/{tenantUid}/stores/{storeUid}/receipts/{receiptUid}`
* Added Finnish receipt and email templates
* Printing of pickup labels for order items
* Added printer information to the `/device` endpoint
* New endpoint: `/tenants/{tenantUid}/orders/reservations` to update reservation type on order items to `PURCHASEORDER` or `WAREHOUSE`
* New field `description` to the device info in payment method response
* New batch endpoint: set stock for a list of products in a warehouse
* \[Backoffice] Implemented NiceUID generation for device and printer
* Added `HasPaymentBalanceOutstanding` request field to settlement search

### **Improved / changed**

* \[Backoffice] Improved Monthly Sales Report
* Added EHF status check
* \[Backoffice] Improved Monthly Inventory Report
* \[CHORE] New table `order_settlement_transactions` to track captured and refunded transactions
* RabbitMQ[^1] can now be disabled 🐰
* Device code is now checked case-insensitively when linking a device
* Renamed table `order_settlement_transactions` to `order_settlement_transaction_logs`
* Purchase orders are no longer automatically set to `RECEIVED` or `CLOSED`
* Webhook `ORDER_HANDLING_STATE_CHANGED` now includes `orderHandling`
* Inventory check on orders now includes all products for the SKU
* Improved query performance for listing campaign products
* Devices can now be filtered by `storeUid`
* Delivery search now properly supports `storeUids` filtering
* Campaign update now disallows `CHEAPEST` type without required criteria
* Added validation for `flowretail_cashdrawer` when updating tills
* It is now possible to download order receipt using a device without a till
* Better error message if country code is missing on supplier

### Fixed

* Verifone: payment no longer fails when timeout is reached
* Fixed response structure for purchase requests on order lines
* Delivery is now properly removed when deleting an order, and `deliveryUids` are removed when deleting a delivery
* Warehouse is no longer kept on order deliveries after deletion
* Fixed 400-error when creating purchases based on min/max with no lines
* `CreateSplitOrderProductLines` now correctly accounts for discounts
* Prevented infinite loop on update/create customer when Omnium integration is active
* Corrected EHF calculation for discounted invoice lines
* Fixed table cell spacing in receipt CSS
* `PurchaseOrderQuantity` is now prevented from being negative

### Removed

* Removed deprecated field `requireExclusiveUse` from device info payment method response – clients must now use the field in the `requirements` object

## 2025-03-24

### Added

* Support for **package / bundle products**
* **Purchase orders** can now be automatically **pre-populated based on min/max** stock levels for a specified warehouse
* A new **simplified dialog** is used for receieval **of purchase orders**
* (Beta) Administration of **customer reservations** (order lines marked as needing purchase)
* **Filters** added **to the product** page
* New button in the order **receipt dialog to print** order as PDF
* (Beta) Order with **pre/part-payments**
* \[Backoffice] FlowRetail CashDrawer service on tills
* \[Backoffice] Printers tab added on the store page for store-located printers
* \[Backoffice] **Devices tab** on the store page for devices located in the store
* \[Backoffice] **Printer test page** is now available
* \[Backoffice] **Invoice** **outstanding Excel report**
* \[Assistant] Ability to **create** and **edit purchase orders**

### **Improved / changed**

* \[Backoffice] Till device information updated – revoke/authorize device removed
* \[Backoffice] Product group search-scope selector added to product group create/edit dialog
* \[Assistant] Ability to filter purchase orders by product
* \[Assistant] Ability to filter orders by product
* Cost price now visible in touch mode sale when pressing the CM (Consumer Margin) button
* Configurable products now have a "Show variants" option on the product page
* Payment description field
* The Purchase and Receive page now includes a filter for purchase order status
* Filters in product search are now preserved when selecting a variant for a configurable product
* Purchase orders can now be edited until fully received or closed
* Confirmation dialog in keyboard mode when activating VAT-Free sale
* GTIN added to product details dialog
* Long-press to copy SKU on the product list page
* Settled order dialog now shows in-stock quantity for items not delivered
* Display messages on a terminated settlement are now shown in the payment dialog
* Improved tabs in the product info dialog
* \[Assistant] Purchase orders can now be accessed from the product details page
* \[Assistant] Ability to zoom in on full-screen product images
* \[Assistant] Product restrictions are now visible on the product details page
* Purchase order product search now hides products that are not allowed to be purchased
* Archived purchase orders can now be found in the Purchase page by enabling relevant statuses in the filter
* Mystats now displays the correct currency
* Simultaneously update the ETA for all products in a purchase order
* Shortcut for changing estimated delivery date in purchase orders is now "E" (previously "D") to avoid conflict with the "show details" shortcut
* Purchase order search results now only show orders from the same organization
* Store list response is now filtered to only include stores from the same organization
* In touch mode, open sales of type "Offer" now show a green chip
* Negative amounts are now displayed in red in order lists
* Supplier toggle in product search (for adding products to purchase orders) is now enabled by default
* \[Backoffice] Till number info shown when creating or editing a till
* \[Backoffice] Pricelist management has been removed – now managed in Client
* \[Assistant] General UI improvements
* \[Assistant] Minimum supported iOS version is now 15.5

### Fixed

* Partial settlements were not shown in the payment dialog, and could not be deleted – now fixed
* It was not possible to add variants to internal purchase orders – now works as expected
* Adding a note to an order line in keyboard mode made the order line itself invisible – this is fixed
* Keyboard shortcuts did not work in the payment success screen
* If a new purchase order failed to be created, the app would be stuck until restart – now resolved
* Discounts can now be applied with precision
* RMA orders created from a purchase order didn’t set warehouse on items, so stock wasn't adjusted – this is now handled
* \[Backoffice] Various bugs fixed in report forms
* \[Backoffice] Product group, brand, and store lookup lists now include all items
* \[Backoffice] "New" buttons moved to the top of the page for device, printer, and till
* \[Backoffice] Added multi-store dropdown for optional organization filter
* \[Assistant] Camera scanner now only scans items visible in the viewfinder

## 2025-03-14

### **Fixed**

* Fixed error when creating a delivery with a non-physical freight item
* Forced `NON_PHYSICAL` products to never create deliveries, even if set to be reserved

## 2025-03-11

### **Added**

* Implemented `flowretail_cashdrawer` protocol
* New field `hideNotAllowPurchase` in product search to hide all products not allowed to be purchased from supplier
* Network print support added
* List products that are requested for purchase, ordered by name
* Discount handling added for package products
* New API endpoint: `POST /tenants/{tenantUid}/stores/{storeUid}/orders/{orderUid}/pre-payments`
* Implemented new webhook: `ORDER_HANDLING_STATE_CHANGED`
* Initial component price now supported for package products

### **Improved / changed**

* Receipt email subject now uses tenant language
* `OrganizationFilter` in search for purchase orders
* Support for payment on invoice in Visma Business accounting report
* Variant information is now printed on product labels
* Order number is added to EHF file name
* Visma Business accounting report now uses receipts instead of orders

### **Fixed**

* EHF XML creation bugs: Norwegian org. number and line price excluding VAT
* `PurchaseOrder`: set `expectedDeliveryDate` to today when using `AutoOrderProposal`
* Fixed package component price calculation
* Customer contacts can now be created with a custom UID
* Allowed actions are now properly set for package product order lines
* `reservationType` was not set when creating order lines – now it is
* Purchase: fixed wrong status after deletion and incorrect `purchasedQty` in product search
* Package product itself is no longer deliverable – only its components are
* Correct codepage is now used when printing exchange notes on ESCPOS printers

## 2025-03-04

### **Added**

* Ability to **create VAT-Free sales**
* View, create, and **edit printers**
* **Select printer** for a **device**
* "**Send invoices externally**" tenant setting
* **Payment method parameters** for **invoice**
* ESCPOS: Open connected cash drawer
* Verifone: Added context with timeout in `Payment` and `LastTransaction`
* New API endpoint: `GET /tenants/{tenantUid}/stores/{storeUid}/orders/{orderUid}/items/{orderItemUid}/addons`
* New `LedgerType`: `CUSTOMER_LEDGER`
* New webhook: `ORDER_RECEIPT_SETTLED`
* It is now possible to **manually send an invoice through EHF** using `ehf-invoice --send`

### **Improved / changed**

* Lines now exclude VAT when order is marked as `vatFree = true`
* Package data now included in product response
* Added `externalmsn` param in `logTransaction` for extended logging
* Verifone: Added internal status `POLLING` to trigger `GetSettlementStatusFromExternSource` on every fetch
* Verifone: Mapped `DEVICEOUT` to `POLLING` status
* General improvements to search
* Verifone: Updated handling of `DeviceOUT` status
* Add, update, and delete of customer contacts now requires tenant access level `Backoffice/Avdelingsleder`
* Custom parameters (e.g., reference number) can now be added to the invoice payment method
* Response from order receipt search now includes additional fields
* All users with access to a tenant can now search in purchase orders
* Campaign codes are now case-insensitive

### **Fixed**

* External customer search now works reliably across all scenarios
* Fixed pagination in organization list
* Fixed pagination in stocktaking product control list
* Verifone: added unique `refServiceID` for `getLastTransaction`
* Campaign price and name now show on product details for store – implemented in `ListCategoriesForStore` and `GetCategoryDetailsForStore`
* Fixed pluralization error and 500 error in purchase search
* Delivery of `NON_PHYSICAL` products is now correctly handled
* Fixed EHF XML creation: Norwegian org. number and line price ex VAT

### Removed

* Verifone: removed unused async payment/refund services and handlers

[^1]: RabbitMQ is used to ensure smooth and reliable communication between different parts of the system, handling tasks in the background so everything works efficiently without interruptions.
