Как предотвратить PrestaShop от обновления количества продукта после проверки заказа

Я новичок в prestashop и пытаюсь создать модуль оплаты, где мне нужно продублировать заказ по статистическим вопросам. Моя проблема заключается в том, что дублирующийся заказ также вычитает из запаса продукта, и мне нужно знать, где после проверки заказа предварительно обновляет запас запаса, чтобы избежать вызова соответствующей функции. В двух словах, я вызываю validateOrder () дважды, но мне нужно, чтобы StockAvailable обновлялся один раз.

Кстати, я проверил всю функцию validateOrder () в поисках раздела / функции обновления, но не смог найти его.

Единственный связанный код, который мне удалось найти, был такой:

// updates stock in shops
if (Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT'))
{
$product_list = $order->getProducts();
foreach ($product_list as $product)
{
// if the available quantities depends on the physical stock
if (StockAvailable::dependsOnStock($product['product_id']))
{
// synchronizes
StockAvailable::synchronize($product['product_id'], $order->id_shop);
}
}
}

но это работает только тогда, когда включено расширенное управление запасами.

Благодарю.

4

Решение

Код, который вы ищете, находится в OrderDetail::create метод, который использует OrderDetail::checkProductStock который в свою очередь вызывает StockAvailable::updateQuantity

$update_quantity = StockAvailable::updateQuantity(...

Что интересно, перед обновлением количества есть это условие

if (!StockAvailable::dependsOnStock($product['id_product']))

Я предлагаю вам переопределить этот метод и верните истину, когда вам нужно.

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

код переопределения в override/classes/stock/StockAvailable.php

class StockAvailable extends StockAvailableCore
{

public static function dependsOnStock($id_product, $id_shop = null)
{
$no_quantity_update = isset($GLOBALS['no_quantity_update']) && $GLOBALS['no_quantity_update'];
if ($no_quantity_update)
return true;
else return parent::dependsOnStock($id_product, $id_shop = null);
}

}

Чтобы сделать это переопределение эффективным, удалите файл cache/class_index.php обновить список переопределений

Код вашего модуля:

//set to false just to be sure
$GLOBALS['no_quantity_update'] = false;
$this->module->validateOrder($cart->id, Configuration...
//set to true to prevent quantity update
$GLOBALS['no_quantity_update'] = true;
$this->module->validateOrder($cart->id, Configuration...

Вы можете изменить непосредственно код ядра, но это не рекомендуется

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]