4
4
* See COPYING.txt for license details.
5
5
*/
6
6
7
- namespace Magento \CatalogInventory \Observer ;
7
+ namespace Magento \SalesInventory \Observer ;
8
8
9
9
use Magento \CatalogInventory \Api \StockConfigurationInterface ;
10
10
use Magento \CatalogInventory \Api \StockManagementInterface ;
11
11
use Magento \Framework \Event \Observer as EventObserver ;
12
12
use Magento \Framework \Event \ObserverInterface ;
13
+ use Magento \Sales \Model \OrderRepository ;
14
+ use Magento \SalesInventory \Model \Order \ReturnProcessor ;
13
15
14
16
/**
15
17
* Catalog inventory module observer
@@ -36,6 +38,16 @@ class RefundOrderInventoryObserver implements ObserverInterface
36
38
*/
37
39
protected $ priceIndexer ;
38
40
41
+ /**
42
+ * @var \Magento\SalesInventory\Model\Order\ReturnProcessor
43
+ */
44
+ private $ returnProcessor ;
45
+
46
+ /**
47
+ * @var \Magento\Sales\Api\OrderRepositoryInterface
48
+ */
49
+ private $ orderRepository ;
50
+
39
51
/**
40
52
* @param StockConfigurationInterface $stockConfiguration
41
53
* @param StockManagementInterface $stockManagement
@@ -64,31 +76,48 @@ public function execute(EventObserver $observer)
64
76
{
65
77
/* @var $creditmemo \Magento\Sales\Model\Order\Creditmemo */
66
78
$ creditmemo = $ observer ->getEvent ()->getCreditmemo ();
67
- $ itemsToUpdate = [];
68
- foreach ($ creditmemo ->getAllItems () as $ item ) {
69
- $ qty = $ item ->getQty ();
70
- if (($ item ->getBackToStock () && $ qty ) || $ this ->stockConfiguration ->isAutoReturnEnabled ()) {
71
- $ productId = $ item ->getProductId ();
72
- $ parentItemId = $ item ->getOrderItem ()->getParentItemId ();
73
- /* @var $parentItem \Magento\Sales\Model\Order\Creditmemo\Item */
74
- $ parentItem = $ parentItemId ? $ creditmemo ->getItemByOrderId ($ parentItemId ) : false ;
75
- $ qty = $ parentItem ? $ parentItem ->getQty () * $ qty : $ qty ;
76
- if (isset ($ itemsToUpdate [$ productId ])) {
77
- $ itemsToUpdate [$ productId ] += $ qty ;
78
- } else {
79
- $ itemsToUpdate [$ productId ] = $ qty ;
80
- }
79
+ $ order = $ this ->getOrderRepository ()->get ($ creditmemo ->getOrderId ());
80
+ $ returnToStockItems = [];
81
+ foreach ($ creditmemo ->getItems () as $ item ) {
82
+ if ($ item ->getBackToStock ()) {
83
+ $ returnToStockItems [] = $ item ->getOrderItemId ();
81
84
}
82
85
}
83
- if (!empty ($ itemsToUpdate )) {
84
- $ this ->stockManagement ->revertProductsSale (
85
- $ itemsToUpdate ,
86
- $ creditmemo ->getStore ()->getWebsiteId ()
87
- );
86
+ $ this ->getReturnProcessor ()->execute (
87
+ $ creditmemo ,
88
+ $ order ,
89
+ $ returnToStockItems ,
90
+ $ this ->stockConfiguration ->isAutoReturnEnabled ()
91
+ );
92
+ }
93
+
94
+ /**
95
+ * Get OrderRepository
96
+ *
97
+ * @return OrderRepository
98
+ * @deprecated
99
+ */
100
+ private function getOrderRepository ()
101
+ {
102
+ if (!($ this ->orderRepository instanceof OrderRepository)) {
103
+ return \Magento \Framework \App \ObjectManager::getInstance ()->get (OrderRepository::class);
104
+ } else {
105
+ return $ this ->orderRepository ;
106
+ }
107
+ }
88
108
89
- $ updatedItemIds = array_keys ($ itemsToUpdate );
90
- $ this ->stockIndexerProcessor ->reindexList ($ updatedItemIds );
91
- $ this ->priceIndexer ->reindexList ($ updatedItemIds );
109
+ /**
110
+ * Get OrderRepository
111
+ *
112
+ * @return ReturnProcessor
113
+ * @deprecated
114
+ */
115
+ private function getReturnProcessor ()
116
+ {
117
+ if (!($ this ->returnProcessor instanceof OrderRepository)) {
118
+ return \Magento \Framework \App \ObjectManager::getInstance ()->get (ReturnProcessor::class);
119
+ } else {
120
+ return $ this ->returnProcessor ;
92
121
}
93
122
}
94
123
}
0 commit comments