No código a seguir, sou capaz de armazenar todas as informações com a exclusão dos dados de estoque. Algo mudou no Magento 2?
public function __construct(
ScopeConfigInterface $scopeConfig, CollectionFactory $product,
Magento\Catalog\Api\ProductRepositoryInterface $productRepository
) {
$this->scopeConfig = $scopeConfig;
$this->product = $product;
$this->productRepository = $productRepository;
}
public function update(\XXXXXX\XXXXXX\Api\Data\InventoryCollectionInterface $data) {
foreach ($data['list'] as $d) {
$product = $this->productRepository->getById($d['entity_id']);
$product->setStatus(($d['quantity'] > 0 ? 1 : 0));
$product->setUpc($d['upc']);
$product->setStockData(array(
'qty' => $d['quantity'],
'is_in_stock' => ($d['quantity'] > 0 ? 1 : 0)
));
$this->productRepository->save($product);
}
return "Done";
}
magento2
inventory
magento-2.0
programmatically
Stephen Malenshek
fonte
fonte
Respostas:
Isso funciona para mim:
Editar :
Esta não é mais a maneira correta de lidar com isso, porque
$product->save()
está obsoleta desde o Magento 2.1. A maneira correta de fazer isso é usando oStockRegistryInterface
:Com o código acima, você pode usar o seguinte:
Use gerentes , tanto quanto possível. Mantenha seus módulos separados um do outro.
É o Magento Way ™
fonte
Se você estiver usando a solução @ giel-berkers, talvez seja necessário definir o isInStock também, porque não será definido automaticamente. Portanto, o código a seguir foi útil para mim:
fonte
getStockItemBySku()
métodoUma coisa que as outras respostas faltaram é que, se você
setQty($qty)
aplicar o valor exato que você fornecer. Porém, se uma venda foi feita para esse produto um momento antes da sua gravação, o qty original poderia ter sido alterado. Então, o que você realmente deseja fazer é dizer ao Magento a diferença que você deseja aplicar ao qty.Felizmente, o Magento 2 fornece um bom mecanismo para isso. Dê uma olhada em
Magento\CatalogInventory\Model\ResourceModel\Stock\Item
:Aqui vemos que, se você definir o
qty_correction
valor, ela aplicará a diferença gradualmente, em vez de aplicar uma quantia exata.Portanto, minha sugestão para um salvamento de quantidade mais seguro é o seguinte:
fonte
Eu lutei com esse mesmo problema. Durante a depuração, descobri que os dados do produto têm uma matriz Quantity_and_stock_status, então tentei configurá-lo com:
e começou a trabalhar para mim. Ainda estou definindo o $ product-> setStockData também se você editar um produto e inspecionar o elemento nos campos, verá que ele possui os dois, um na guia geral e o outro nos campos avançados de inventário. Eu não investiguei completamente por que existem dois deles.
fonte
O código abaixo está funcionando bem para atualizar a quantidade do produto,
fonte
fonte
Tente definir StoreId como $ product antes de tudo e talvez substitua:
$product->setStockData(...)
para$product->setData('stock_data', '...') // A Paranoid Recommendation
BTW Se você olhar o Save ActionController no backend M2, usa um filtro para preparar stock_data, você pode encontrar esse filtro em:
fonte
Tente isso, ao salvar o produto no administrador, eles salvaram os dados do inventário usando o evento catalog_product_save_after no
Magento_CatalogInventory
módulo observadorfonte
Eu tive o mesmo problema para o magento 2.0.9 e o código a seguir está funcionando no meu caso
fonte
O Magento2 também vem com o recurso de estoque múltiplo, para atualizar uma fonte de estoque específica, você pode seguir esta solução
fonte