Как восстановить количество товаров для отмененных заказов


Если заказ отменяется, его товары должны быть восстановлены в инвентаре. Как это может быть реализовано?

Спасибо

Author: Pro-Magento, 2017-03-21

1 answers

Наконец-то я нашел решение. Просто оставляю ответ для возможных будущих искателей:

В Magento\Sales\Model\Order есть метод с именем cancel. Это восстановило бы количество, оплату,...

Также есть работа cron в Magento\Sales\Model\CronJob\CleanExpiredOrders который периодически отменял бы отмененные заказы с помощью своего метода execute:

public function execute()
{
    $lifetimes = $this->storesConfig->getStoresConfigByPath('sales/orders/delete_pending_after');
    foreach ($lifetimes as $storeId => $lifetime) {
        /** @var $orders \Magento\Sales\Model\ResourceModel\Order\Collection */
        $orders = $this->orderCollectionFactory->create();
        $orders->addFieldToFilter('store_id', $storeId);
        $orders->addFieldToFilter('status', Order::STATE_PENDING_PAYMENT);
        $orders->getSelect()->where(
            new \Zend_Db_Expr('TIME_TO_SEC(TIMEDIFF(CURRENT_TIMESTAMP, `updated_at`)) >= ' . $lifetime * 60)
        );

        try {
            $orders->walk('cancel');
            $orders->walk('save');
        } catch (\Exception $e) {
            $this->logger->error('Error cancelling deprecated orders: ' . $e->getMessage());
        }
    }
}
 3
Author: Pro-Magento, 2017-03-30 20:08:33