I am trying to add a mass action function to the orders grid in the admin panel, using the following code placed in:
app/code/vendor/module/Controller/Order
MassDelete.php
<?php
namespace Module\Core\Controller\Adminhtml\Order;
use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
use Magento\Backend\App\Action\Context;
use Magento\Ui\Component\MassAction\Filter;
use Magento\Sales\Model\ResourceModel\Order\CollectionFactory;
use Magento\Sales\Api\OrderManagementInterface;
use Module\Core\Model\Config;
class MassDelete extends \Magento\Sales\Controller\Adminhtml\Order\AbstractMassAction
{
protected $orderManagement;
// private $config;
// Constructor
public function __construct(
Context $context,
Filter $filter,
CollectionFactory $collectionFactory,
OrderManagementInterface $orderManagement
// Config $config
) {
parent::__construct($context, $filter);
$this->collectionFactory = $collectionFactory;
$this->orderManagement = $orderManagement;
// $this->config = $config;
}
protected function massAction(AbstractCollection $collection)
{
// if ($this->config->isEnabled()) {
$countDeleteOrder = 0;
$model = $this->_objectManager->create('Magento\Sales\Model\Order');
foreach ($collection->getItems() as $order) {
if (!$order->getEntityId()) {
continue;
}
$loadedOrder = $model->load($order->getEntityId());
$loadedOrder->delete();
$countDeleteOrder++;
}
$countNonDeleteOrder = $collection->count() - $countDeleteOrder;
if ($countNonDeleteOrder && $countDeleteOrder) {
$this->messageManager->addError(__('%1 order(s) have not been deleted', $countNonDeleteOrder));
} elseif ($countNonDeleteOrder) {
$this->messageManager->addError(__('Something went wrong. No orders have been deleted'));
}
if ($countDeleteOrder) {
$this->messageManager->addSuccess(__('You successfully deleted %1 order(s)', $countDeleteOrder));
}
$resultRedirect = $this->resultRedirectFactory->create();
$resultRedirect->setPath($this->getComponentRefererUrl());
return $resultRedirect;
}
// }
}
Above code works and deletes the selected orders. But as you can see I commented out some code which prevents it from working properly, because I want it to be possible to enable or disable the MassDelete function in the admin panel. For that, I have created the following files:
I have a Config.php in
app/code/vendor/module/Model
with following code:
namespace Module\Core\Model;
use Magento\Framework\App\Config\ScopeConfigInterface;
class Config
{
const XML_PATH_ENABLED = 'module_core_massdelete/delete_orders/enabled';
private $config;
public function __construct(ScopeConfigInterface $config)
{
$this->config = $config;
}
public function isEnabled()
{
return $this->config->getValue(self::XML_PATH_ENABLED);
}
}
a config.xml in
app/code/vendor/module/etc
with code
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
<default>
<module_core_massdelete>
<delete_orders>
<enabled>0</enabled>
</delete_orders>
</module_core_massdelete>
</default>
</config>
and lastly a system.xml in
app/code/vendor/module/etc/adminhtml
with code
<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
<system>
<tab id="custom-tab" translate="label" sortOrder="100000" class="custom-tab">
<label>module</label>
</tab>
<section id="module_core_massdelete" translate="label" type="text" showInDefault="1" showInStore="1" showInWebsite="1" sortOrder="-200">
<label>Delete Orders</label>
<resource>Module_Core::config</resource>
<tab>custom-tab</tab>
<group id="delete_orders" translate="label" type="text" showInDefault="1" showInStore="1" showInWebsite="0" sortOrder="5">
<label>Delete orders</label>
<field id="enabled" translate="label" type="select" sortOrder="10" showInDefault="1" showInWebsite="0" showInStore="0">
<label>Enable function</label>
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
</field>
</group>
</section>
</system>
</config>
But somehow, when making a reference to Module\Core\Model\Config in MassDelete.php, the functions won't work and throws a HTTP request 500. Is there someone who knows a solution to this?