Client V1 | Cannot switch out of single app mode (JMC-8220)
Customer | Creating loyalty customer from Clienteling or outside transaction with a customer display linked can cause a transaction to be created when signup is finished (JMC-8182)
Returns | Positive discount calculated when excludeReturnedItemsFromTotalDiscountAmount is true and returning item with price-override (JMC-8170)
Returns | Return item promotion calculations do not consider identifier items (JMC-8144)
Usability | Cancel / "X" button overlaps dialog title for dialogs with long titles (JMC-8124)
Customers overriding the endpoint /ordersmgmt/reserveItem will need to update how they access the deliveryGroup from the ReserveItemRequest request object. (JMC-8187)
Custom overrides that may have been applied relating to openpos.sell.sellItemActionHandlers.itemPriceOverride.isDisplayedAsDiscount or the subtotal or discount display in DefaultTransRenderer, TransactionDetailsState, SaleTotalsDisplayHelper, DefaultSaleScreenBuilder, or CustomerDisplaySaleScreenBuilder may need to be re-evaluated or removed. (JMC-8007)
Custom overrides that may have been applied relating to openpos.sell.sellItemActionHandlers.itemPriceOverride.isDisplayedAsDiscount or the subtotal or discount display in DefaultTransRenderer, TransactionDetailsState, SaleTotalsDisplayHelper, or DefaultSaleScreenBuilder may need to be re-evaluated or removed. (JMC-7898)
Close Reconciliation | Device inaccurately reflecting active status preventing store closing (JMC-7794)
Customer | When multiple matches found on customer signup phase 1, add-new-customer button causes errant behavior (JMC-7791)
Reporting | Calculations for Sales Amount and Return Amount Incorrect for Some Reports (JMC-7726)
Reporting | Cashier Exception Report is appearing blank on the 'Location Summary Report' (JMC-7819)
Shrug| When clicking the x dialog button on the "Required Price Entry" (JMC-7785)
Technical | BarcodeConfig settings from the yaml file are not being honored. (JMC-7617)
Technical | Setting of DBSession queryTimeouts by query is broken (JMC-7776)
Technical | The dialog that doesn't allow the point of sale to start because there is an initial load going on sometimes can take several hours to disappear (JMC-7740)
Vertex Integration| Vertex Integration job rte2JMC is failing with Binding errors (JMC-7816)
The configuration openpos.ops.till.showReconcileDetailCountScreen previously determined whether the Detail Count view was displayed by default during open store bank, create till, open till, reconcile till, and close store bank operations.That configuration has been removed in favor of individual configurations per operation:These are all flags/booleans, and are false by default.When upgrading, a previous setting of openpos.ops.till.showReconcileDetailCountScreen: true is logically equivalent to setting all the new configurations to true, though openpos.ops.till.showDetailCountScreen.reconcileTill is the equivalent new configuration in name and intent. (JMC-7756)
From null nullnullAny project that parses untrusted Protocol Buffers data containing an arbitrary number of nested groups / series of SGROUP tags can corrupted by exceeding the stack limit i.e. StackOverflow. Parsing nested groups as unknown fields with DiscardUnknownFieldsParser or Java Protobuf Lite parser, or against Protobuf map fields, creates unbounded recursions that can be abused by an attacker. (CVE-2024-7254protobuf: StackOverflow vulnerability in Protocol Buffers)
From nullA special BeanIntrospector class was added in version 1.9.2. This can be used to stop attackers from using the declared class property of Java enum objects to get access to the classloader. However this protection was not enabled by default. PropertyUtilsBean (and consequently BeanUtilsBean) now disallows declared class level property access by default.Releases 1.11.0 and 2.0.0-M2 address a potential security issue when accessing enum properties in an uncontrolled way. If an application using Commons BeanUtils passes property paths from an external source directly to the getProperty() method of PropertyUtilsBean, an attacker can access the enum's class loader via the "declaredClass" property available on all Java "enum" objects. Accessing the enum's "declaredClass" allows remote attackers to access the ClassLoader and execute arbitrary code. The same issue exists with PropertyUtilsBean.getNestedProperty(). Starting in versions 1.11.0 and 2.0.0-M2 a special BeanIntrospector suppresses the "declaredClass" property. Note that this new BeanIntrospector is enabled by default, but you can disable it to regain the old behavior; see section 2.5 of the users guide and the unit tests.This issue affects Apache Commons BeanUtils 1.x before 1.11.0, and 2.x before 2.0.0-M2.Users of the artifact commons-beanutils:commons-beanutils1.x are recommended to upgrade to version 1.11.0, which fixes the issue.Users of the artifact org.apache.commons:commons-beanutils22.x are recommended to upgrade to version 2.0.0-M2, which fixes the issue. (CVE-2025-48734 Improper Access Control vulnerability in Apache Commons.)
This change updates AutoPersonalizationStartupTask.personalizeUsingDeviceNameto fail/throw after 5 attempts to either getPersonalizationParameters or personalize with those parameters, where it previously would continue trying indefinitely. This allows personalizationStartupSequence to move to the next prioritized personalization startup task. This affects both EnterpriseConfigPersonalizationStartupTask and QueryParamsPersonalization as they both use AutoPersonalizationStartupTask.personalizeUsingDeviceName. (JMC-7533)
for pk based purging jobs, addednullopenpos.jobs.config.[jobName].batchSize, to control the fetch size and commit size. default is 1000 (JMC-7362)
Provide ability to override Shrug UI message based on Exception type or other logic (JMC-7243)
Remove deprecated columns from dev_device_personalization (JMC-7430)
Self Checkout | Provide ability to add a placeholder on the receipt option selection screen to display an image (JMC-7389)
Self Checkout | Provide the ability to show split tenders on the Tender screen when paying with multiple tenders and prevent customers from removing tenders (JMC-6771)
Technical | Add default logback masking for OAuth client secrets and scandit license (JMC-7169)
Technical | Gift card items are added to transaction with hard-coded itemTaxable = false which bypasses item taxGroup logic (JMC-7364)
Technical | ReconcileTillAcceptAmountCountedState needs to format money correctly in the prompt text (JMC-6871)
Technical | Update SymmetricDS to 3.15.14 (JMC-6764)
Usability | Increase the touch area of the BACK < and the CLOSE X (JMC-7039)
Customer | The phone number opt into marketing preferences screen is not displaying if address is first modified then both phone and address are modified. (JMC-7232)
CX Connect | Charity donation screen does not reappear if the cashier goes back to sale and hits pay again (JMC-7164)
CX Connect | Customer details screen does not get pulled into an edit session when cashier clicks on "Send to Customer" (JMC-7120)
Gift Cards | Giftcard issue, add-value and balance inquiry throw error and do not work (JMC-7403)
Gift Cards | Reloading gift card that hasn't been activated allows customer to be charged without the gift card actually being loaded. (JMC-6382)
Initial Load | Client starts personalization too soon after initial load completes (JMC-7312)
Manage | Rare exception when opening till (JMC-6816)
Manage | Shrug guy when leaving amount blank during Closing the Till (JMC-7460)
Orders | Customer Information dialog tabbing through fields skips Postal Code (JMC-7328)
Orders | If you mark a single BOPIS Item as 'cannot fulfill', the order reappears (JMC-7270)
Orders | Shrug when trying to remove a shipping box from the selection (JMC-7250)
Personalization | dev_device_personalization table should not include tag columns in its primary key (JMC-7260)
Printer and Cash Drawer | Failure to claim device causes release to fail, which causes close device to not execute (JMC-7133)
Promote | discountCodeDetails are not displayed for Category Rewards (JMC-6345)
Promote | If you enter a pound sign only (#) we do not reserve the pattern (JMC-6315)
Promote | Search issues in Promote UI (JMC-6281)
Promote | When using unique code you should not be able to enter a pound sign only (#) since the pattern field should only be prefix (JMC-6314)
Promotions | Bounce back promotions are not honoring the max uses setting if only one reward is desired (JMC-7333)
Promotions | Discount total incorrect on return of item with a price override to a higher price (JMC-7027)
Promotions | First promotion calculated after the calcInBackground flag evaluates to true does not make it to the UX (JMC-7305)
Publisher | Duplicate transactions are published when there are multiple instances of Publisher running. (JMC-7173)
Reports | Tills reports are inaccurate after "fast opening" till (JMC-7003)
Return | Shrug when attempting to activate already active gift card during return tender process (JMC-7144)
Returns | Returns should not include price override in discount total when isDisplayedAsDiscount=false (JMC-7030)
Self Checkout | Fix styling on tender screen split while paying with multiple tenders (JMC-7320)
Self Checkout | Loyalty points balance does not display on Tender tile in Self-checkout customer mode (JMC-6903)
Self Checkout | On-screen keyboard is overlapping various dialogs on the SCO Tender screen (JMC-6772)
Self Checkout | Revert changes for On-screen keyboard is overlapping various dialogs on the SCO Tender screen (JMC-7330)
Self Checkout | Zero balance does not show the continue button on the tender screen (JMC-7385)
Shared Cash Drawer | Shrug when attempting to perform 'Close Till' on a shared cash drawer from Manage Tills (JMC-7316)
Tax | Even exchange rounding adjustment needs to handle differences > $0.01 (JMC-6778)
Techincal | OpenStoreState, onYes should openStoreBank instead of openStore directly (JMC-6864)
Technical | Add shutdown hook to mark devices hosted by the server as disconnected (JMC-7370)
Technical | Changes to dev_device_personalization do not take effect until a server restart. It should not be cached. Also add it to sync down to the fixed registers by default. (JMC-7401)
Technical | ERROR when looking up an item for the first time (JMC-7289)
Technical | If a pod is restarted while it is running a cluster locked job, then that job can be locked until it times out. Add listener that cleans up locks on a clean shutdown. (JMC-7365)
Technical | ITaxService.findTaxGroup is broken (JMC-7183)
Technical | Make readPromotions more robust if there is mismatching data (JMC-7123)
Technical | PHONE_LIST form field doesn't update CustomerModel (JMC-7115)
Technical | RestVertexCalculateTaxEndpoint.taxRestTemplate never gets initialized, thus a NullPointerException is thrown (JMC-7207)
Technical | When database scripts have the same prefix and different descriptions the order they are applied in can be indeterminate when executed in a container (JMC-7275)
Customer ID was generated using the format: "1" + deviceId + customer sequence number.nullNew Approach:Customer ID is now generated as a 22-digit Base64 encoded UUID. (JMC-7014)
The openpos.sale.userActionTrans.enabled config was updated to be defaulted to TRUE instead of FALSE. This means that SLS_TRANS and SLS_TRANS_USER_ACTION records will be created on logout. (JMC-3601)
Because the primary key was removed from dev_device_personalization there is the opportunity for the alter to fail if there are duplicate rows. Make sure to clean up any duplicate rows before upgrading. (JMC-7260)
If any projects have a custom IIncidentService , implementors may need to adjust their code to use a custom IIncidentUIMessageBuilder instead. (JMC-7243)
This PR deprecates openpos.tax.andPennyToExchangeEnabled and adds the following configuration instead:openpos: tax: roundupOnExchange: enabled: true maxAmountToAdjustBy: 0.01This allows for rounding on exchanges to occur up to the configured amount. The default amount in $0.01. (JMC-6778)
The following line from /headless/point-of-sale/base/build.gradle:rename { fileName -> fileName.contains('wrapper') ? 'openpos-wrapper.jar' : fileName }will need to be changed to:rename { fileName -> fileName.startsWith('legacy-wrapper') ? 'openpos-wrapper.jar' : fileName }This is due to the name of the new AWS advanced JDBC driver – aws-advanced-jdbc-wrapper.jar – which also contains the substring of wrapper. Absent the requisite change, builds will fail because of the attempt to rename the AWS driver to openpos-wrapper.jar. (JMC-7022)