如何防止PrestaShop在订单验证后更新产品数量

时间:2015-06-02 10:42:50

标签: php sql prestashop-1.6 prestashop-1.5

我是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);
            }
        }
    }

但这仅在启用高级库存管理时有效。

感谢。

1 个答案:

答案 0 :(得分:2)

您要查找的代码位于使用OrderDetail::create的{​​{1}}方法中,OrderDetail::checkProductStock又调用StockAvailable::updateQuantity

$update_quantity = StockAvailable::updateQuantity(...

有趣的是,在更新数量之前,这个条件

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

我建议您override this method并在需要时返回true。

您可以在复制订单之前设置一个全局标志,然后检查该标志,如果它的真实,则返回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...

您可以直接修改核心代码,但不推荐