96 lines
3.6 KiB
PHP
96 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace Stemcell\Sales\Controller\Adminhtml\Order;
|
|
|
|
use Magento\Backend\App\Action;
|
|
use Magento\Backend\App\Action\Context;
|
|
use Magento\Framework\App\Action\HttpGetActionInterface;
|
|
use Magento\Framework\App\Action\HttpPostActionInterface;
|
|
use Magento\Framework\App\Response\Http\FileFactory;
|
|
use Magento\Framework\Controller\Result\JsonFactory;
|
|
use Magento\Framework\Controller\Result\RawFactory;
|
|
use Magento\Framework\Exception\LocalizedException;
|
|
use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
|
|
use Magento\Framework\Registry;
|
|
use Magento\Framework\Translate\InlineInterface;
|
|
use Magento\Framework\View\Result\LayoutFactory;
|
|
use Magento\Framework\View\Result\PageFactory;
|
|
use Magento\Sales\Api\OrderManagementInterface;
|
|
use Magento\Sales\Api\OrderRepositoryInterface;
|
|
use Magento\Sales\Model\Order;
|
|
use Magento\Sales\Model\ResourceModel\Order\CollectionFactory;
|
|
use Magento\Ui\Component\MassAction\Filter;
|
|
use Psr\Log\LoggerInterface;
|
|
use Stemcell\Sales\Model\OrderStatus;
|
|
|
|
class MassReview extends \Magento\Sales\Controller\Adminhtml\Order\AbstractMassAction implements HttpPostActionInterface
|
|
{
|
|
const ADMIN_RESOURCE = 'Magento_Sales::sales_order';
|
|
|
|
/**
|
|
* @param Context $context
|
|
* @param Filter $filter
|
|
* @param CollectionFactory $collectionFactory
|
|
* @param OrderManagementInterface|null $orderManagement
|
|
*/
|
|
public function __construct(
|
|
Context $context,
|
|
Filter $filter,
|
|
CollectionFactory $collectionFactory,
|
|
protected OrderManagementInterface $orderManagement,
|
|
protected OrderRepositoryInterface $orderRepository,
|
|
protected LoggerInterface $logger,
|
|
) {
|
|
parent::__construct($context, $filter);
|
|
$this->collectionFactory = $collectionFactory;
|
|
}
|
|
|
|
/**
|
|
* Cancel selected orders
|
|
*
|
|
* @param AbstractCollection $collection
|
|
* @return \Magento\Backend\Model\View\Result\Redirect
|
|
*/
|
|
protected function massAction(AbstractCollection $collection)
|
|
{
|
|
$success = $failure = [];
|
|
$messages = [];
|
|
/* @var $order Order */
|
|
foreach ($collection->getItems() as $order) {
|
|
try {
|
|
if ($order->canShip()) {
|
|
$this->orderManagement->setState(
|
|
$order,
|
|
Order::STATE_PROCESSING,
|
|
OrderStatus::reviewed->name,
|
|
'订单批量审核',
|
|
null,
|
|
false
|
|
);
|
|
$this->orderRepository->save($order);
|
|
$success[] = $order->getIncrementId();
|
|
} else {
|
|
$failure[] = $order->getIncrementId();
|
|
}
|
|
} catch (LocalizedException $e) {
|
|
// $messages .= sprintf('订单%s审核异常,原因:%s', $order->getIncrementId(), $e->getMessage()).'<br/>';
|
|
$messages[$order->getIncrementId()] = $e->getMessage();
|
|
}
|
|
}
|
|
if ($messages) {
|
|
$this->logger->critical('订单批量审核异常', $messages);
|
|
}
|
|
if ($failure) {
|
|
$this->messageManager->addErrorMessage(sprintf('订单:%s 批量审核失败', implode(', ', $failure)));
|
|
}
|
|
|
|
if ($success) {
|
|
$this->messageManager->addSuccessMessage(sprintf('批量审核%d笔订单, %d审核成功.', $collection->count(), count($success)));
|
|
}
|
|
$resultRedirect = $this->resultRedirectFactory->create();
|
|
$resultRedirect->setPath($this->getComponentRefererUrl());
|
|
return $resultRedirect;
|
|
}
|
|
|
|
}
|