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-
- 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

Now run command – php bin/magento webkul:orderDelete 1 to delete order with order id 1 through command line.
For deleting all orders just run the command – php bin/magento webkul:orderDelete -a
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

Be the first to comment.