99
1010use Magento \DataExporter \Model \Indexer \FeedIndexMetadata ;
1111use Magento \Framework \App \ResourceConnection ;
12+ use Magento \Framework \Serialize \SerializerInterface ;
13+ use Magento \Framework \Stdlib \DateTime ;
1214
1315/**
1416 * Stock Status mark as deleted query builder
@@ -25,16 +27,32 @@ class StockStatusDeleteQuery
2527 */
2628 private $ metadata ;
2729
30+ /**
31+ * @var SerializerInterface
32+ */
33+ private $ serializer ;
34+
35+ /**
36+ * @var DateTime
37+ */
38+ private $ dateTime ;
39+
2840 /**
2941 * @param ResourceConnection $resourceConnection
3042 * @param FeedIndexMetadata $metadata
43+ * @param SerializerInterface $serializer
44+ * @param DateTime $dateTime
3145 */
3246 public function __construct (
3347 ResourceConnection $ resourceConnection ,
34- FeedIndexMetadata $ metadata
48+ FeedIndexMetadata $ metadata ,
49+ SerializerInterface $ serializer ,
50+ DateTime $ dateTime
3551 ) {
3652 $ this ->resourceConnection = $ resourceConnection ;
3753 $ this ->metadata = $ metadata ;
54+ $ this ->serializer = $ serializer ;
55+ $ this ->dateTime = $ dateTime ;
3856 }
3957
4058 /**
@@ -104,14 +122,52 @@ public function getStocksWithSources(array $sourceCodes): array
104122 */
105123 public function markStockStatusesAsDeleted (array $ idsToDelete ): void
106124 {
125+ $ records = [];
126+ foreach ($ idsToDelete as $ deletedItemId => $ stockStatusData ) {
127+ $ records [] = $ this ->buildFeedData ($ deletedItemId , $ stockStatusData );
128+ }
107129 $ connection = $ this ->resourceConnection ->getConnection ();
108130 $ feedTableName = $ this ->resourceConnection ->getTableName ($ this ->metadata ->getFeedTableName ());
109- $ connection ->update (
131+ $ connection ->insertOnDuplicate (
110132 $ feedTableName ,
111- ['is_deleted ' => new \Zend_Db_Expr ('1 ' )],
112- [
113- 'id IN (?) ' => $ idsToDelete
114- ]
133+ $ records
115134 );
116135 }
136+
137+ /**
138+ * @param string $stockStatusId
139+ * @param array $stockIdAndSku
140+ * @return array
141+ */
142+ private function buildFeedData (string $ stockStatusId , array $ stockIdAndSku ): array
143+ {
144+ if (!isset ($ stockIdAndSku ['stock_id ' ], $ stockIdAndSku ['sku ' ])) {
145+ throw new \RuntimeException (
146+ sprintf (
147+ "inventory_data_exporter_stock_status indexer error: cannot build unique id from %s " ,
148+ \var_export ($ stockIdAndSku , true )
149+ )
150+ );
151+ }
152+ $ feedData = [
153+ 'id ' => $ stockStatusId ,
154+ 'stockId ' => $ stockIdAndSku ['stock_id ' ],
155+ 'sku ' => $ stockIdAndSku ['sku ' ],
156+ 'qty ' => 0 ,
157+ 'qtyForSale ' => 0 ,
158+ 'infiniteStock ' => false ,
159+ 'isSalable ' => false ,
160+ 'updatedAt ' => $ this ->dateTime ->formatDate (time ())
161+
162+ ];
163+
164+ return [
165+ 'id ' => $ stockStatusId ,
166+ 'stock_id ' => $ stockIdAndSku ['stock_id ' ],
167+ 'sku ' => $ stockIdAndSku ['sku ' ],
168+ 'feed_data ' => $ this ->serializer ->serialize ($ feedData ),
169+ 'is_deleted ' => 1 ,
170+ 'modified_at ' => $ this ->dateTime ->formatDate (time ())
171+ ];
172+ }
117173}
0 commit comments