Как восстановить количество товаров для отмененных заказов
Если заказ отменяется, его товары должны быть восстановлены в инвентаре. Как это может быть реализовано?
Спасибо
1
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