Webkul
Services
Technologies Bagisto QloApps
iOS Android SAP BigCommerce Wix
Trusted by
Samsung Intel Toyota Walmart Disney Nokia Nestlé Decathlon
See all customers
Back to Top
DOC

How to create custom command to delete order in magento2

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

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