Back to Top

How to create custom command to delete order in magento2

Updated 4 March 2024

How to create custom command to delete order in magento2 – In Magento 2  you can create your own custom command for any action. As magento doesn’t allow to delete order from admin dashboard then in this case there comes a need for how to delete orders. So here using this post I am going to explain how to create your own custom command for deleting magento order.

For this you just need to follow some easy steps-

  1. Create a Command class in the path<module_dir>/Console/Command (As recommended by magento), like here I am using the path app/code/Webkul/CustomCommand/Console/Command
namespace Webkul\CustomCommand\Console\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Magento\Sales\Model\Order;
use Magento\Framework\Registry;

/**
 * Class OrderDeleteCommand
 */
class OrderDeleteCommand extends Command
{
    /**
     * Order argument
     */
    const ORDER_ARGUMENT = 'order_id';

    /**
     * Allow all
     */
    const ALLOW_ALL = 'allow-all';

    /**
     * All order id
     */
    const ALL_ORDER = 'All';

    /**
     * Order
     *
     * @var Order
     */
    private $order;

    /**
     * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory
     */
    protected $orderCollectionFactory;

    /**
     * @var \Magento\Framework\Registry
     */
    protected $registry;

    /**
     * @param ModuleListInterface $moduleList
     */
    public function __construct(
        Order $order,
        \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollectionFactory,
        Registry $registry
    )
    {
        $this->order = $order;
        $this->registry = $registry;
        $this->orderCollectionFactory = $orderCollectionFactory;
        parent::__construct();
    }

    /**
     * {@inheritdoc}
     */
    protected function configure()
    {
        $this->setName('webkul:orderDelete')
            ->setDescription('Order Delete command')
            ->setDefinition([
                new InputArgument(
                    self::ORDER_ARGUMENT,
                    InputArgument::OPTIONAL,
                    'OrderId'
                ),
                new InputOption(
                    self::ALLOW_ALL,
                    '-a',
                    InputOption::VALUE_NONE,
                    'Allow all OrderId'
                ),

            ]);

        parent::configure();
    }

    /**
     * {@inheritdoc}
     */
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $orderId = $input->getArgument(self::ORDER_ARGUMENT);
        $allowAll = $input->getOption(self::ALLOW_ALL);
        if (is_null($orderId)) {
            if ($allowAll) {
                $this->registry->register('isSecureArea','true');         //create secure area to delete orders
                $orderAllColl = $this->orderCollectionFactory->create();  //Get Order Collection
                foreach ($orderAllColl as $orderCollData) {
                    $orderCollData->delete();                             //Delete Order
                }
                $this->registry->unregister('isSecureArea');              //unset secure area
                $output->writeln('<info>All orders are deleted.</info>'); //Displaying output on terminal
            } else {
                throw new \InvalidArgumentException('Argument ' . self::ORDER_ARGUMENT . ' is missing.');
            }
        }
        if($orderId){
            $orderColl = $this->order->load($orderId);
            if(empty($orderColl) || !$orderColl->getId()){
                $output->writeln('<info>Order with id ' . $orderId . ' does not exist.</info>');
            }else{
                $this->registry->register('isSecureArea','true');         //create secure area to delete orders
                $orderColl->delete();                                     //Delete Order
                $this->registry->unregister('isSecureArea');              //unset secure area
                $output->writeln('<info>Order with id ' . $orderId . ' is deleted.</info>');
            }
        }
    }
}

2. Declaration of Command class in Magento\Framework\Console\CommandList using dependency injection in file path “app/code/Webkul/CustomCommand/di.xml”

<type name="Magento\Framework\Console\CommandList">
    <arguments>
        <argument name="commands" xsi:type="array">
            <item name="order_delete_command" xsi:type="object">Webkul\CustomCommand\Console\Command\OrderDeleteCommand</item>
        </argument>
    </arguments>
</type>

3. Now clear the cache and compile the module.

4. Now run the following command to check the working process of this commands-
php bin/magento –list
now you will see the custom created command as shown in the given screenshot

Searching for an experienced
Magento 2 Company ?
Find out More

KqikiDw
Now run command – php bin/magento webkul:orderDelete 1 to delete order with order id 1 through command line. gj7sQbzFor deleting all orders just run the command – php bin/magento webkul:orderDelete -aerLlIh0

    So in this way you can create your own custom commands for any action.

    For complete module please find at https://github.com/webkul/magento2-custom-command .

    You can also check the below links:

    https://webkul.com/blog/create-a-custom-command-to-disable-a-module-in-magento-2/

    https://devdocs.magento.com/guides/v2.3/config-guide/cli/config-cli.html

    . . .

    Leave a Comment

    Your email address will not be published. Required fields are marked*


    Be the first to comment.

    Back to Top

    Message Sent!

    If you have more details or questions, you can reply to the received confirmation email.

    Back to Home