OpenBoxes v0.8.12 - Release Notes

Download & Full Changelog

To download the latest release and view the full changelog


For instructions on how to upgrade from a previous version of OpenBoxes.

Release Notes

New Features

Improved Dashboard

We have completely revamped the OpenBoxes dashboard page. This may be disorienting, but we promise all of your normal reports are still available to you. Watch this video for a walk through of the new dashboard.

Bin Location Report

You can access the report by clicking on inventory details by lot and bin. It is the very first square in the top left corner:


Inventory by product report

Just below the inventory details by lot and bin, there is a chart called inventory summary. Click the in stock bar to access the inventory by product report:


Expiry Report

In the center of the page is the expiration summary. To see the list of expired products, click the dot over today. To see the list of expiring products, click the light blue dot that corresponds to the time period:


You can also access all of the important reports from the old dashboard via the menu. For inventory, look under reporting. For formularies and tags, look under product.

Purchase Orders

Order Adjustments

Users can add order adjustments at both the Order and Line Item level including surcharges, taxes, discounts.

Approval Workflow

Purchase Orders require a user with the Approver role in order to place the order.

Simply add the ROLE_APPROVER to the system Roles (Configuration > Roles) and then assign this role as a Default Role to any user who should be allowed to approve purchase orders. You can also assign this role to users on a per location basis.

Note: The Approval feature can be configured in openboxes-config.groovy using the following properties. The minimumAmount configuration is not yet supported but would not be difficult to include in an upcoming release, if there’s any interest.

// Require approval on purchase orders
openboxes.purchasing.approval.enabled = false
openboxes.purchasing.approval.minimumAmount = 0.00
openboxes.purchasing.approval.defaultRoleTypes = [RoleType.ROLE_APPROVER]

Create Multiple Shipments from a single Purchase Order

Once a purchase order has been placed it can be shipped as one inbound shipment or broken into multiple shipments using the Ship Order feature.

Inbound Stock Movement

These inbound shipments are processed through the inbound stock movement workflow. This removes the need to use the deprecated Shipping / Receiving features which didn’t provide as much flexibility as the new stock movement feature.


Then once the shipment has physically arrived at the depot you can use the receiving feature which allows users to perform full or partial receipts.


You can receive directly into a bin location or receive into a temporary receiving location and then use the Putaway feature to generate a Transfer Order to move the stock from the temporary receiving location to its proper bin location.

Import Order Line Items

Download a CSV template, enter data, and import in minutes.

Support for Multiple Currencies

Create a purchase order in a supported currency (EUR) and convert to the system currency (USD).

Currency Conversion

We’ve added an API client that pulls the latest exchange rate data published by the European Central Bank ( See for the supported currencies. Other exchange rates can be supported through customization. You can also override the exchange rate for individual purchase orders.

Support for Multiple UoMs

Customize Payment Method and Terms

Track payment method and terms for each purchase order.

Define your own payment methods …

… and payment terms if the system defaults does not meet your needs.

Customizable PO Number Format

By default we use a auto-generated sequential number that is tied to the supplier.

openboxes.identifier.purchaseOrder.generatorType = IdentifierGeneratorTypeCode.SEQUENCE
openboxes.identifier.purchaseOrder.format = "PO-\${destinationPartyCode}-\${sequenceNumber}" = ["destinationPartyCode": "destinationParty.code"]

The destinationParty.code is a unique code on the supplier organization. By default, the organization identifier is 2-3 alphanumeric characters, but the configuration can be updated in openboxes-config.groovy.

openboxes.identifier.organization.format = Constants.DEFAULT_ORGANIZATION_NUMBER_FORMAT
openboxes.identifier.organization.minSize = 2
openboxes.identifier.organization.maxSize = 3

See the Identifier Formats section of the docs for more information on how to configure identifiers.

Stock movement performance improvements

Stock movements now load data one page at a time, which improves load times for large stock movements. While this feature has been extensively tested, it can introduce bugs. If you see anything weird email right away! Please include a screenshot and explanation of the problem.

Cancel Remaining on Receiving

We have found that for many users, it is easy to forget to cancel the remaining lines on the last page of the receiving workflow. There is now a button on the final receiving page that will cancel all lines that are still open after a receipt has been completed. If you have completed a receipt, and you do not want the shipment to remain open to receive against in the future, press “cancel all remaining.”

Improving edit for putaways

If a user edits a putaway that has been pending for several days, sometimes the items on that putaway have already been moved out of the receiving bin. The way the interface worked previously, there was no way for users to see that product had already been put away. Instead, they saw an error message with no explanation. Now, if a user is working on a putaway, and that qty is no longer in the receiving bin, the qty appears in red, like the below screenshot:

Browse inventory page

The browse inventory page (the page that appears when you search for an item in the global search) has been revamped. Bugs with the QOH have been fixed, and tag and category are now visible by item. Color coding shows the items on the global formulary.

Disable pack page on outgoing stock movements

OpenBoxes now allows users to disable the pack feature for outbound stock movements. This means that users can skip the pack screen for depots where pack information is not entered. If your depot never enters pallet or box information on outgoing stock movements. to disable the pack page remove the Pack Shipment activity from the desired locations supported activities. If none of your depots support Pack Shipment you can disable the feature for all locations by removing the Pack Shipment activity for the Depot Location Type.

Minor improvements

  • Added packing units and pick reason code to delivery note
  • Added reason codes “Request error” and “Not needed based on consumption”
  • Aligned menu on stock movement pages with menu on other pages
  • Improved validation error when attempt to ship more than in stock
  • Color coding added to stock movements, stock lists
  • Hyperlinks to electronic stock card added to bin location report
  • Removed lines with no inventory or transactions from transaction report

Notable Bug Fixes

  • Prevent error resulting from empty document type
  • Fix error with shipment QOH validation
  • Infinite scroll on bin location report
  • Duplicate error screen
  • Picking list import
  • Fix to baseline QOH report