/
CleanExpiredOrders.php
68 lines (61 loc) · 2.02 KB
/
CleanExpiredOrders.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Sales\Model\CronJob;
use Magento\Store\Model\StoresConfig;
use Magento\Sales\Model\Order;
class CleanExpiredOrders
{
/**
* @var StoresConfig
*/
protected $storesConfig;
/**
* @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory
*/
protected $orderCollectionFactory;
/**
* @var \Psr\Log\LoggerInterface
*/
protected $logger;
/**
* @param StoresConfig $storesConfig
* @param \Psr\Log\LoggerInterface $logger
* @param \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $collectionFactory
*/
public function __construct(
StoresConfig $storesConfig,
\Psr\Log\LoggerInterface $logger,
\Magento\Sales\Model\ResourceModel\Order\CollectionFactory $collectionFactory
) {
$this->storesConfig = $storesConfig;
$this->logger = $logger;
$this->orderCollectionFactory = $collectionFactory;
}
/**
* Clean expired quotes (cron process)
*
* @return void
*/
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());
}
}
}
}