Order Tools

Free order tools for Magento 2: your own order, invoice, shipment and credit memo numbers, useful extra columns in the order grid, a test order flag and carefully guarded order deletion with an audit log.

  • Magento 2.4.7 – 2.4.9
  • PHP 8.2 – 8.5
  • Hyvä and Luma
  • Version 1.2.2

Free

No payment needed, with 12 months of updates.

Add it to your cart and complete the free checkout. Your ZIP downloads and Composer access will be in your account.

What is included

  • 12 months of new versions and fixes; the versions released in that time stay yours
  • Install with Composer, or download a zip from your account
  • Licence for one production domain, staging and development copies included

No subscription or automatic renewal. Keep using the versions included in your update period. Update and licence details

Key features

  • Custom order, invoice, shipment and credit memo numbers
  • Prefix, suffix, padding, start value and step per store view
  • Date and store placeholders, optional yearly or monthly restart
See all features

Composer package softaware/module-order-tools

  • Numbers that fit your business

    Orders like WEB-26-000123 instead of 000000123, with invoices, shipments and credit memos numbered your way or matching the order.

  • Less clicking in the order grid

    See the ordered SKUs, coupon code, shipping country and order comment in Sales > Orders, with filters, without opening each order.

  • Deleting with guard rails

    Deleting is off until you switch it on, needs its own permission, only accepts the statuses you allow and records every deletion in a log.

All features

What is included

Document numbers

  • Order, invoice, shipment and credit memo, each configured separately
  • Per store view, website or default scope
  • Placeholders {store_id} {yyyy} {yy} {mm} {dd}
  • Yearly or monthly restart only when the number contains the period
  • Atomic counters, duplicate check and fallback to Magento's number

Order grid

  • Items as "SKU x qty"
  • Coupon Code and Order Comment (text filters)
  • Shipping Country (select filter)
  • Test Order flag with Mark and Unmark mass actions
  • CLI backfill for orders placed before installation

Deleting orders

  • Off by default, own ACL resource Delete Orders
  • Only the order statuses you allow (default: Canceled)
  • POST with form key and a confirmation dialog
  • Removes invoices, shipments, credit memos, payment, addresses and comments
  • One transaction per order, together with its log entry

Admin and developers

  • Deleted Orders Log with keyword search and CSV export
  • Customer email in the log stored as a SHA-256 hash or in clear
  • Separate ACL permissions per feature
  • CLI: show next numbers, backfill grid columns
  • No storefront code, no core rewrites

Feature tour

Everything your shoppers and your team see

01 / 06

Your own numbering, previewed before the next order

Prefix, suffix, minimum length, start value and step per store view, with {yyyy}, {yy}, {mm}, {dd} and {store_id} placeholders. The Next Numbers table shows what each store view will issue next.

02 / 06

More of the order in the grid

Items (SKU x qty), Coupon Code, Shipping Country, Order Comment and Test Order columns, each switched on separately and kept current by Magento's own grid indexer.

03 / 06

A clear confirmation before anything is deleted

The Delete Permanently mass action names the number of selected orders and what is not restored. At most 200 orders per request.

04 / 06

Orders with other statuses are refused

Every order is checked on the server against the allowed statuses (default: Canceled only), and checked again under a row lock just before it is deleted.

05 / 06

Delete one order from its page

The Delete Permanently button appears only when deleting is on, the admin role allows it and the order's status is allowed.

06 / 06

Every deletion on record

Order number, store view, status, grand total, deleted documents, admin user, IP address and time. Read-only, searchable, with CSV export. The customer email is stored as a hash by default.

Live demo

Try it before you install it

A full Magento store with the module installed, on Luma and on Hyvä. The admin demo signs you in with one click.

Compatibility

Requirements and compatibility

Compatibility of Order Tools
Magento2.4.7 – 2.4.9
Storefront themes Luma Blank Hyvä
PHP8.2 – 8.5
Latest version 1.2.2
composer.json requires php ~8.2.0||~8.3.0||~8.4.0||~8.5.0 magento/framework ~103.0.7 softaware/module-core ^1.0 magento/module-backend * magento/module-config * magento/module-directory * magento/module-sales * magento/module-sales-sequence * magento/module-store * magento/module-ui *

Installation

Up and running in minutes

Get it free, create a Composer key in your account, then in the root of your Magento project:

  1. 01Add the repository and your key (once per project)

    composer config repositories.softaware composer https://repo.softawarecommerce.com
    composer config --auth http-basic.repo.softawarecommerce.com PUBLIC_KEY PRIVATE_KEY
  2. 02Install the module

    composer require softaware/module-order-tools
  3. 03Enable it

    bin/magento setup:upgrade
    bin/magento setup:di:compile
    bin/magento setup:static-content:deploy
    bin/magento cache:flush

    The last three are only needed in production mode.

Prefer a zip? Every version you are entitled to can be downloaded from My modules. More about Composer access

User guide

How to set up and use Order Tools

For version 1.2.2. The same guide comes with the module, in docs/user-guide.md.

Small, frequently requested order utilities in one module: your own order, invoice, shipment and credit memo numbers, extra columns in the order grid, a test order flag and guarded order deletion with an audit log. Everything that changes behaviour is off by default. This guide covers installation, configuration and day-to-day use.

Document number settings with the Next Numbers table
Document number settings with the Next Numbers table

1. Requirements

MagentoOpen Source or Adobe Commerce 2.4.7 to 2.4.9
PHP8.2 to 8.5
StorefrontNone: the module is admin only. The numbers appear wherever Magento shows them, on Luma, Hyvä and other themes alike.
Othersoftaware/module-core (installed automatically)

2. Installation

Install with Composer from repo.softawarecommerce.com. The access keys are in your account on softawarecommerce.com; see Composer access for details.

composer config repositories.softaware composer https://repo.softawarecommerce.com
composer config --auth http-basic.repo.softawarecommerce.com PUBLIC_KEY PRIVATE_KEY
composer require softaware/module-order-tools
bin/magento setup:upgrade
bin/magento setup:di:compile            # production mode only
bin/magento setup:static-content:deploy # production mode only
bin/magento cache:flush
bin/magento softaware:order-tools:grid:backfill

The last command fills the new order grid columns for orders placed before the installation (section 5). Orders saved later are handled by Magento's own grid indexer.

To update later: composer update softaware/module-order-tools, then the same bin/magento commands.

After installation the admin menu has Softaware > Order Tools with Deleted Orders Log, Document Numbers and Settings. Nothing changes in your store until you switch a feature on.

3. Settings

The settings are in two sections of the Softaware tab under Stores > Configuration:

  • Softaware > Order Tools: the master switch, the order grid and deleting orders (default scope only).
  • Softaware > Order Tools: Document Numbers: numbering per document type (default, website or store view scope).

General

SettingWhat it does
EnabledMaster switch (default: Yes). When off, Magento's own document numbers are used, the extra grid columns and actions are hidden and orders cannot be deleted. Each feature also has its own switch.

Order Grid

SettingWhat it does
Extra ColumnsAdds the selected columns to Sales > Orders: Items (SKU x quantity), Coupon Code, Shipping Country, Order Comment (customer note). Default: none.
Test Order FlagAdds the Test Order column and the mass actions Mark as Test Order and Unmark Test Order. Default: No.

Deleting Orders

Deleting Orders settings
Deleting Orders settings
SettingWhat it does
Allow Deleting OrdersAdds Delete Permanently to the order grid actions and the order page. Default: No.
Only Orders With These StatusesOrders with any other status are refused, also when they are selected in the grid. Default: Canceled. Avoid statuses of orders that were paid or shipped unless you keep their records elsewhere.
Customer Email in the LogStore a hash (SHA-256) only (default) or Store the email address.

4. Document numbers

Open Stores > Configuration > Softaware > Order Tools: Document Numbers (or Softaware > Order Tools > Document Numbers). There is one group each for Order Numbers, Invoice Numbers, Shipment Numbers and Credit Memo Numbers, and a Next Numbers table at the top.

Settings per document type

SettingWhat it does
NumberingMagento default (default), Custom format, or for invoices, shipments and credit memos Same as the order number. Applies to new documents only; existing numbers never change.
PrefixText before the counter, for example WEB-{yy}-. Up to 20 characters: letters, digits, -, _, . and the placeholders below. Default: empty.
SuffixText after the counter, same rules as the prefix. Default: empty.
Minimum Counter LengthThe counter is padded with leading zeros to this length (1 to 10). 6 gives 000123. Default: 6.
Start ValueThe first counter value. Raising it later makes a running counter jump to it; lowering it has no effect on a counter that is already running. Default: 1.
Increment StepHow much the counter goes up per document (1 to 1000). Default: 1.
Restart CounterNever (default), Every year or Every month. Default scope only (see below).

Placeholders in the prefix and suffix use the store view's time zone:

PlaceholderExample
{store_id}1
{yyyy}2026
{yy}26
{mm}10
{dd}09

The character rules keep numbers safe in URLs, PDF file names and CSV files.

Example

Prefix WEB-{yy}-, minimum counter length 6, start value 1: the orders are numbered WEB-26-000001, WEB-26-000002, and so on. With the same settings from the command line:

bin/magento config:set softaware_ordertools_numbers/order/mode custom
bin/magento config:set softaware_ordertools_numbers/order/prefix 'WEB-{yy}-'
bin/magento config:set softaware_ordertools_numbers/order/length 6

Same as the order number

With Same as the order number, the first invoice of order WEB-26-000123 is WEB-26-000123, a second invoice of the same order is WEB-26-000123-1, then -2, and so on. The same applies to shipments and credit memos.

Restarting the counter

The counter restarts at the start value only if the number contains the period: {yyyy} or {yy} for every year, plus {mm} for every month. Otherwise it keeps counting, so numbers never repeat. The admin refuses a restart setting that would not be safe. The restart is set in the default scope, because store views with the same prefix and suffix share one counter.

Counters and uniqueness

  • Store views with the same prefix and suffix share one counter. Use {store_id} or different prefixes to give each store view its own series.
  • Each value is taken with one atomic database statement on a separate connection, so parallel checkouts never get the same value and the counter is not locked for the length of an order or invoice transaction.
  • Every candidate number is checked against the existing documents of all store views and skipped if taken. Magento's unique key on the document number remains the final guard.
  • If a custom number cannot be built, Magento's own number is used and the error is logged, so a checkout never fails because of the numbering.
  • The module plugs into Magento's sales sequence; it does not rewrite core classes. Magento's own sequence is not used while a custom format is active.

Next Numbers

The Next Numbers table shows the next number of each document type for every store view, based on the saved settings (save to update it), with the last number used. Custom numbers also need Order Tools > General > Enabled; the table shows a warning when Order Tools is switched off.

5. Order grid columns

Order grid with Items, Shipping Country, Order Comment and Test Order
Order grid with Items, Shipping Country, Order Comment and Test Order

Select the columns under Order Grid > Extra Columns. They appear in Sales > Orders and can be shown, hidden and filtered like Magento's own columns:

ColumnContentFilter
Items"SKU x qty" of the order's top-level itemsText
Coupon CodeThe coupon code used for the orderText
Shipping CountryCountry of the shipping addressSelect
Order CommentThe order's customer note (admin order comment or checkout comment modules)Text
Test OrderYes or No (with Test Order Flag on)Select

The columns are kept up to date by Magento's order grid indexer, with synchronous or asynchronous grid indexing. For orders placed before the installation run the backfill once (section 8).

6. Test orders

With Test Order Flag = Yes, select orders in Sales > Orders and choose Actions > Mark as Test Order (or Unmark Test Order). Filter the Test Order column to find them later, for example to cancel and delete them. The flag is also stored in the Deleted Orders Log.

7. Deleting orders

Deleting orders is permanent. It is off by default and protected by several guards, all checked on the server for every order, whatever the admin page showed:

  1. Allow Deleting Orders must be Yes (and Order Tools enabled).
  2. The admin role needs the ACL resource Softaware > Order Tools > Delete Orders. It is not added to any role automatically; roles with access to all resources have it.
  3. The order's current status must be one of Only Orders With These Statuses (default: Canceled only). The status is checked again with a row lock inside the delete transaction, so an order whose status changed in the meantime is not deleted.
  4. At most 200 orders per request.
  5. Only POST requests with a valid form key are accepted, after a confirmation dialog.
Confirmation in the order grid
Confirmation in the order grid

From the order grid: select the orders in Sales > Orders, choose Actions > Delete Permanently and confirm. The dialog shows the number of selected orders. Orders with a status that is not allowed are skipped and named in a message; the others are deleted.

Orders with other statuses are refused
Orders with other statuses are refused

From the order page: the Delete Permanently button appears only when deleting is on, the role has the permission and the order's status is allowed. The dialog Delete Order Permanently names the order number.

Delete Permanently on the order page
Delete Permanently on the order page

What is deleted

The order with its invoices, shipments and credit memos (through Magento's repositories, so their grid rows are removed too), items, addresses, payment, payment transactions, comments and tax rows. Each order is deleted in its own database transaction together with its log entry: if anything fails, nothing of that order is deleted.

What is not restored

Nothing is reversed: no stock, no refunds, no reward points or store credit. Cancel and refund an order first if you need that. Downloadable links bought with the order are kept by Magento (unlinked from the order). Sales reports keep their aggregated figures until they are refreshed.

Deleted Orders Log

Deleted Orders Log
Deleted Orders Log

Softaware > Order Tools > Deleted Orders Log lists every deleted order, newest first: deleted at, order number, store view, status, grand total, customer email, test order flag, the deleted document numbers and the admin user. Order ID, currency, order date and IP address are available under Columns.

  • The customer email is stored as a SHA-256 hash by default (shown shortened as "Hashed (...)") or in clear, depending on Customer Email in the Log.
  • The keyword search finds order numbers, admin users and email addresses. An email address also finds entries where it was stored as a hash, so you can check whether a given customer's order was deleted.
  • Export downloads the log as CSV. Values that a spreadsheet would run as a formula are prefixed with an apostrophe.
  • The log is read-only; entries cannot be deleted from the admin.
  • While nothing has been deleted, the page explains whether deleting is switched on and which statuses can be deleted, with links to the orders and the settings.

8. Command line

bin/magento softaware:order-tools:sequence:show [--store=<id|code>]
bin/magento softaware:order-tools:grid:backfill [--batch-size=500]
  • sequence:show lists the numbering, last number and next number of each document type per store view. It is read-only and does not use up a number.
  • grid:backfill fills the Order Tools grid columns for existing orders, in batches of 500 by default. Run it once after installation.

There is no command for deleting orders, on purpose: deleting is only possible in the admin, under its permission.

9. Permissions (ACL)

Under System > Permissions > User Roles > Role Resources > Softaware > Order Tools:

ResourceAllows
Delete OrdersThe Delete Permanently mass action and order page button
View Deleted Orders LogThe log page and its CSV export
Mark Test OrdersMark as Test Order and Unmark Test Order
Settings: Order Grid and DeletingThe Order Tools configuration section
Settings: Document NumbersThe Order Tools: Document Numbers configuration section

Admins who delete orders also need access to Sales > Orders. On Adobe Commerce, give Delete Orders only to roles with access to all websites (admin role scopes were not tested with deletion).

10. Troubleshooting

ProblemSolution
New orders still have Magento's numbersCheck Order Tools > General > Enabled and Numbering = Custom format for the store view of the order, then look at the Next Numbers table. If a custom number could not be built, the reason is in var/log/system.log.
A gap in the number seriesLike Magento's own sequence, a number taken by a checkout that then fails is not reused.
The extra grid columns are empty for older ordersRun bin/magento softaware:order-tools:grid:backfill.
Delete Permanently is missingCheck Allow Deleting Orders, the role's Delete Orders permission and the order's status against Only Orders With These Statuses.
"Not deleted because of their status"The order's status is not in the allowed list. Cancel the order first, or add the status in the settings.
The IP address in the log is the proxy'sThe IP is taken from REMOTE_ADDR. Behind a proxy or CDN, configure your web server's real IP module.
Two documents of one order saved at the same moment, one failsWith Same as the order number, both get the same candidate number and Magento's unique key refuses one. Save it again.

11. Limitations

  • Orders edited in the admin keep Magento's behaviour: the new order gets the old number plus -1, -2, ...
  • The counter restart applies to the whole installation (default scope).
  • With Enabled = No, the sot_* grid columns and the counters stay; the grid columns are still filled by the grid indexer, just not shown.

12. Uninstall

bin/magento module:disable Softaware_OrderTools
composer remove softaware/module-order-tools
bin/magento setup:upgrade

Existing document numbers stay as they are; new documents use Magento's own sequence again.

Export the Deleted Orders Log as CSV first if you want to keep it: once the module is disabled, Magento's declarative schema can drop the module's tables (softaware_ordertools_counter, softaware_ordertools_deleted_order) and the sot_* columns of sales_order and sales_order_grid on the next setup:upgrade.

Changelog

Release notes

1.2.2

Latest

1.2.2 (2026-10-09)

Added

  • Product listing, FAQ and user guide (docs/).

1.2.1

Fixed

  • bin/magento softaware:order-tools:grid:backfill works on Magento 2.4.7 and 2.4.8. It stopped with "Call to protected method" there, because Magento made getGridOriginSelect() of the sales grid public only in 2.4.9.
  • README: the module requires softaware/module-core ^1.0 (the README said ^1.2; composer.json was right).

1.2.0

  • Deleted Orders Log: keyword search by order number, admin user or customer email. An email address also finds entries where the email was stored as a hash, so you can check whether a given customer's order was deleted.
  • Deleted Orders Log: a one-line introduction above the grid; while nothing has been deleted, an explanation instead of an empty table that says whether deleting is switched on and which statuses can be deleted, with "Go to Orders" / "Open Settings". Fewer default columns (ID, order ID, currency, order date and IP address are under Columns), newest deletions first by Deleted At, status labels instead of status codes, hashed customer emails shown shortened (the CSV export keeps the codes and the full value).
  • Order grid: the mass action "Remove Test Order Mark" is now "Unmark Test Order" (fits the actions menu).
  • Order page: "Delete Permanently" opens a titled confirmation dialog ("Delete Order Permanently") whose button says "Delete Permanently" instead of "OK"; no inline JavaScript on the button.
  • Settings: the two Order Tools sections sit next to each other in the Softaware tab; General, Next Numbers and Order Numbers open first; every comment names the default; shorter wording for Enabled and Allow Deleting Orders; Prefix and Suffix can be restored to the default and are checked for 20 characters in the browser.
  • Next Numbers table: aligned cells (it used to inherit the form's field padding), "Last used" instead of "last", a warning when Order Tools is switched off, and the styles come from a small module CSS file that is loaded only on this settings section.

1.1.0

  • Requires softaware/module-core instead of softaware/module-base. The admin menu and ACL now sit under Softaware_Core::core ("Softaware"); roles that had access keep it (migrated by module-core). After updating all SoftAware modules, softaware/module-base can be removed.

1.0.0

  • Custom order, invoice, shipment and credit memo numbers per store view: prefix, suffix, minimum counter length, start value, increment step, placeholders {store_id} {yyyy} {yy} {mm} {dd}, optional yearly or monthly counter restart (only when the number contains the period), "same as the order number" for invoices, shipments and credit memos, next-number preview, atomic counters with a duplicate check and fallback to Magento's number.
  • Optional order grid columns: items (SKU x qty), coupon code, shipping country, order comment, test order; kept up to date by Magento's grid indexer.
  • Test order flag with mass actions and grid filter.
  • Guarded order deletion (off by default): separate ACL resource, allowed statuses (default Canceled), status re-checked under a row lock, 200 orders per request, POST with form key, confirmation dialogs.
  • Deleted Orders Log (read-only) with formula-safe CSV export; customer email hashed by default.
  • CLI: softaware:order-tools:sequence:show, softaware:order-tools:grid:backfill.

FAQ

Questions, answered

Something else on your mind? The developers who wrote the module answer before and after you buy.

Ask a question →

Already installed it? Open a support ticket

Does Order Tools change anything when I install it?

No. Document numbers stay on Magento's default, no extra grid columns are shown, the test order flag is off and deleting orders is off. You switch on each feature yourself under Stores > Configuration > Softaware > Order Tools and Order Tools: Document Numbers.

Will my existing order and invoice numbers change?

No. The settings only apply to documents created afterwards. Existing orders, invoices, shipments and credit memos keep their numbers.

Can two orders get the same number?

The counter is taken with a single atomic database statement on a separate connection, so parallel checkouts never get the same value. Every candidate number is also checked against the existing documents of all store views and skipped if it is taken, and Magento's unique key on the number stays the final guard. If a custom number cannot be built, Magento's own number is used and the error is logged, so a checkout never fails because of the numbering.

Can the counter start again every year or every month?

Yes, with Restart Counter. The restart is only applied when the number contains the period ({yyyy} or {yy} for yearly, plus {mm} for monthly), so a restarted counter can never repeat an earlier number. The admin refuses a setting that would not be safe.

Can invoices use the same number as the order?

Yes. Set the invoice, shipment or credit memo Numbering to Same as the order number. The first document gets the order number, further documents of the same order get -1, -2 and so on.

Can I use different numbers per store view?

Yes. The numbering settings can be set per website and store view. Store views with the same prefix and suffix share one counter; use {store_id} or a different prefix to give each store view its own series.

Which columns does it add to the order grid?

Items (SKU x qty), Coupon Code, Shipping Country, Order Comment and, with the test order flag, Test Order. Payment method, shipping information and customer group are already in Magento's own Columns menu, so they are not duplicated. Run bin/magento softaware:order-tools:grid:backfill once to fill the columns for older orders.

How is deleting orders protected?

Several guards, all checked on the server for every order: Allow Deleting Orders must be switched on (it is off by default); the admin role needs the separate permission Softaware > Order Tools > Delete Orders; the order's current status must be one of the statuses you allow (default: Canceled only), and it is checked again with a row lock just before the order is deleted; at most 200 orders per request; only POST requests with a valid form key; and a confirmation dialog in the grid and on the order page.

What exactly is deleted, and what is restored?

The order with its invoices, shipments, credit memos, items, addresses, payment, payment transactions, comments and tax rows, and their grid rows. Nothing is restored: no stock, no refunds, no reward points or store credit. Cancel and refund an order first if you need that. Sales reports keep their figures until they are refreshed.

Is there a record of deleted orders?

Yes. Softaware > Order Tools > Deleted Orders Log lists every deleted order with its number, store view, status, grand total, the deleted document numbers, order date, admin user, IP address and time. It is read-only, can be searched and exported as CSV, and entries cannot be deleted from the admin.

Is the customer email kept in the log?

By default only a SHA-256 hash of it is stored, which suits deletions made for data-protection requests. You can still search the log by email address: the search also finds entries stored as a hash. If you prefer, choose Store the email address in the settings.

Does it work with Hyvä?

Order Tools has no storefront code. The numbers appear wherever Magento shows them (emails, My Account, PDFs), on Luma, Hyvä and any other theme alike.

Is Order Tools free?

Yes, Order Tools is free. It requires softaware/module-core, which Composer installs automatically.

Support

Help from the developers who wrote it