Order Status Management in Magento 2
Managing order statuses in Magento can be smooth and easy without going into the application code as long as we understand how those statuses work.
First off, I’d like to point out that Magento has order statuses and order states; two concepts that are very similar to each other. The main difference between them is that order states are responsible for putting an order in the flow of the ordering process and are not visible to the user. This is in contrast to statuses, which users can see. Magento 2 (like Magento 1) has its own “flow” of order statuses, which is shown in the figure below. By default, Magento will not allow us to change order states or statuses manually. They are set automatically depending on the action we perform (as shown in the picture). This means that if we create an invoice for an order, its state and status will change automatically.
Default order states in Magento include:
- Pending Payment – assigned to an order for which the payment has been initiated but is awaiting confirmation
- New – assigned to new orders that have not been paid for
- Processing – assigned to orders for which an invoice or delivery has been created (but not both)
- Complete – for orders with invoice and delivery
- Closed – for orders that are “returned” and the user has received a refund
- Canceled – assigned by the store administrator or payment gateway when the order has not been paid
- On Hold – a state set manually by the store operator
- Payment Review – for orders that await payment confirmation.
In turn, default order statuses include, for example:
- Processing
- Pending Payment
- Suspected Fraud
- Payment Review
- Pending
- On Hold
- Complete
- Closed or Canceled.
As you can see, some of the state names coincide with status names, usually specifying the same place in the flow of information about an order.
Each state can be assigned one or more order statuses. This makes order management easier and more flexible. For example, depending on the payment method chosen by the customer, the “Pending Payment” status may have the following order statuses assigned to it:
- Pending Payment Card
- Pending Payment PayPal
- Pending Payment Store Credit
As system operators, without going into the application code, we have only a limited ability to manage order statuses. However, we can create new statuses and assign them to specific states. In this way, we can replace individual order statuses.
Changing the order to a custom status after creating Invoice and Shipping
To manage the order statuses, we need to log in to the administration panel, and then select stores and order status from the left-hand menu.
This is where we can manage order statuses.
Let’s add a new status (the “Create new status” button); the “status code” field means the status ID used by Magento (and the programmer) – it not visible to the customer; what the customer can see, is the “Status Label” field.
As we want to use only this order status for each completed order, first we detach the “Complete” status from the “Complete” state, which means that the order for which Invoice and Shipping were created.
The final step is to assign the newly created status to the state. Let’s remember to select “Use order status as default” and “Visible in the store”. With this configuration, Magento will automatically assign the “Customer Complete” status for each completed order.