Reading list Switch to dark mode

    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