5
5
*/
6
6
namespace Magento \Sales \Cron ;
7
7
8
+ use Exception ;
9
+ use Magento \Quote \Model \QuoteRepository ;
8
10
use Magento \Quote \Model \ResourceModel \Quote \Collection as QuoteCollection ;
9
11
use Magento \Sales \Model \ResourceModel \Collection \ExpiredQuotesCollection ;
10
12
use Magento \Store \Model \StoreManagerInterface ;
13
+ use Psr \Log \LoggerInterface ;
11
14
12
15
/**
13
16
* Cron job for cleaning expired Quotes
@@ -24,16 +27,32 @@ class CleanExpiredQuotes
24
27
*/
25
28
private $ storeManager ;
26
29
30
+ /**
31
+ * @var QuoteRepository
32
+ */
33
+ private $ quoteRepository ;
34
+
35
+ /**
36
+ * @var LoggerInterface
37
+ */
38
+ private $ logger ;
39
+
27
40
/**
28
41
* @param StoreManagerInterface $storeManager
29
42
* @param ExpiredQuotesCollection $expiredQuotesCollection
43
+ * @param QuoteRepository $quoteRepository
44
+ * @param LoggerInterface $logger
30
45
*/
31
46
public function __construct (
32
47
StoreManagerInterface $ storeManager ,
33
- ExpiredQuotesCollection $ expiredQuotesCollection
48
+ ExpiredQuotesCollection $ expiredQuotesCollection ,
49
+ QuoteRepository $ quoteRepository ,
50
+ LoggerInterface $ logger
34
51
) {
35
52
$ this ->storeManager = $ storeManager ;
36
53
$ this ->expiredQuotesCollection = $ expiredQuotesCollection ;
54
+ $ this ->quoteRepository = $ quoteRepository ;
55
+ $ this ->logger = $ logger ;
37
56
}
38
57
39
58
/**
@@ -52,13 +71,32 @@ public function execute()
52
71
// Last page returns 1 even when we don't have any results
53
72
$ lastPage = $ quoteCollection ->getSize () ? $ quoteCollection ->getLastPageNumber () : 0 ;
54
73
55
- for ($ currentPage = 1 ; $ currentPage <= $ lastPage ; $ currentPage++ ) {
74
+ for ($ currentPage = $ lastPage ; $ currentPage >= 1 ; $ currentPage-- ) {
56
75
$ quoteCollection ->setCurPage ($ currentPage );
57
76
58
- $ quoteCollection ->walk ('delete ' );
77
+ $ this ->deleteQuotes ($ quoteCollection );
78
+ }
79
+ }
80
+ }
59
81
60
- $ quoteCollection ->clear ();
82
+ /**
83
+ * @param QuoteCollection $quoteCollection
84
+ */
85
+ private function deleteQuotes (QuoteCollection $ quoteCollection ): void
86
+ {
87
+ foreach ($ quoteCollection as $ quote ) {
88
+ try {
89
+ $ this ->quoteRepository ->delete ($ quote );
90
+ } catch (Exception $ e ) {
91
+ $ message = sprintf (
92
+ 'Unable to delete expired quote (ID: %s): %s ' ,
93
+ $ quote ->getId (),
94
+ (string )$ e
95
+ );
96
+ $ this ->logger ->error ($ message );
61
97
}
62
98
}
99
+
100
+ $ quoteCollection ->clear ();
63
101
}
64
102
}
0 commit comments