-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathProductSynchronizeMSI.php
102 lines (84 loc) · 3.24 KB
/
ProductSynchronizeMSI.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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
/*
*
* This script help synchronize Quantity with Salable Quantity
* Run command: php ProductSynchronizeMSI.php
*
*/
require dirname(__FILE__) . '/app/bootstrap.php';
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
class Outslide extends \Magento\Framework\App\Http
implements \Magento\Framework\AppInterface {
public function launch()
{
$state = $this->_objectManager->get('Magento\Framework\App\State');
$state->setAreaCode('adminhtml');
$myClass = $this->_objectManager->create('ProductSalableQuantity');
$myClass->updateSalableQuantity();
return $this->_response;
}
}
class ProductSalableQuantity
{
/**
* @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
*/
protected $productCollectionFactory;
/**
* @var \Magento\InventoryCatalogApi\Model\SourceItemsProcessorInterface
*/
protected $sourceItemsProcessor;
public function __construct(
\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
\Magento\InventoryCatalogApi\Model\SourceItemsProcessorInterface $sourceItemsProcessor
) {
$this->productCollectionFactory = $productCollectionFactory;
$this->sourceItemsProcessor = $sourceItemsProcessor;
}
public function updateSalableQuantity() {
$sourceData = [
['source_code'=>'default', 'status'=>1, 'quantity'=>50],
];
$productsSKU = ['SRC081MASU'];
$collection = $this->productCollectionFactory->create()
->joinField('qty',
'cataloginventory_stock_item',
'qty',
'product_id=entity_id',
'{{table}}.stock_id=1',
'left'
)->joinTable('cataloginventory_stock_item', 'product_id = entity_id', ['stock_status' => 'is_in_stock'])
->addAttributeToSelect('*')
->addAttributeToSelect('sku');
if($productsSKU !== '*' && is_array($productsSKU)){
$collection->addAttributeToFilter('sku', ['in' => $productsSKU]);
}
try {
$total = 0;
foreach ($collection as $product) {
/* clone array */
$data = array_merge($sourceData, []);
foreach($data as $key => $source){
$qty = (int) $product->getQty();
$dataUpdate = [
'quantity' => $qty,
'status' => $qty ? 1: 0,
];
$data[$key] = array_merge($source, $dataUpdate);
}
$sku = $product->getSku();
$this->sourceItemsProcessor->execute(
$sku,
$data
);
$total++;
}
echo __("A total %1 product(s) synchronize salable quantity successfully.", $total) . PHP_EOL;
} catch (Exception $e) {
echo $e->getMessage();
}
}
}
/** @var \Magento\Framework\App\Http $app */
$app = $bootstrap->createApplication('Outslide');
$bootstrap->run($app);