Неверный инвентарь при сохранении продукта при размещении заказа


Я столкнулся со следующим поведением в Magento 1.7.0.2:

  1. Редактировать продукт
  2. Перейдите на вкладку инвентаризация
  3. Просмотр инвентаря

В моем тестовом инвентаре на товаре было 9 единиц.

  1. Я размещаю заказ на продукт на интерфейсе, оставляя страницу редактирования продукта открытой
  2. После размещения заказа я нажимаю Save на странице редактирования продукта (пока запасы все еще находятся на уровне 9)

Теперь инвентаризация сидит на 7 (другими словами, вычтено 2 единицы), хотя был заказан только 1.

Я повторил это, разместив заказ аналогичным образом в серверной части, и испытал то же самое поведение.

Это только мне кажется или ваши сайты ведут себя аналогично? Если да, то как это можно решить? Я не нашел никакого официального сообщения об ошибке.

Редактировать: Если вы просматриваете уровень запасов продукта на новой вкладке после того, как только что разместили заказ, кажется, что уровень запасов правильный. Однако, как только вы нажмете Save на открытой вкладке (во время редактирования), инвентарь будет уменьшен на 2 единицы.

Редактировать 2: Я опубликовал то, что, по моему мнению, может быть решением этой проблемы.

  • Так правильно ли я говорю, что ответ, который я опубликовал, является решением?

  • Кто-нибудь может подумать о каких-либо проблемах, которые могут возникнуть в связи с этим изменением?

  • О чем именно думала команда разработчиков с помощью метода setQtyCorrection?

Author: 7ochem, 2014-12-09

1 answers

Так что я разыскал это в app/code/core/Mage/CatalogInventory/Model/Observer.php.

Событие catalog_product_save_after вызывает метод saveInventoryData, который, в свою очередь, вызывает метод _prepareItemForSave.

Вокруг строки 225:

$originalQty = $product->getData('stock_data/original_inventory_qty');
if (strlen($originalQty)>0) {
    $item->setQtyCorrection($item->getQty()-$originalQty);
}

Если вы прокомментируете эту строку:

$item->setQtyCorrection($item->getQty()-$originalQty);

Похоже, что проблема устранена, и уровни запасов теперь остаются правильными при сохранении продукта при одновременном создании/отмене заказа как на лицевой, так и на внутренней стороне веб-сайта.

 3
Author: Moose, 2014-12-09 15:18:21