2015-06-02 7 views
4

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

Кстати, я рассмотрел всю функцию 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); 
      } 
     } 
    } 

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

Спасибо.

+0

в 'validateOrder()' либо есть код обновления, либо будет вызван какой-либо вызов функции для этого обновления. просто прокомментируйте, что при одном вызове 'validateOrder()' –

ответ

2

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

$update_quantity = StockAvailable::updateQuantity(... 

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

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

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

Вы можете установить глобальный флаг перед дублированием заказа, а затем проверить этот флаг, и если он вернёт 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... 

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

+0

я придумал несколько иной подход: я бы использовал тот же метод, чтобы добавить количество обратно до создания дублирующего порядка в моем модуле. Несмотря на это, спасибо! – Leo