Объект OrderDetail создается только один раз для каждого заказа и после него не будет обновляться даже при изменении состояния заказа. Поэтому, когда ваш объект OrderDetail создается, с вашей модификацией он не будет обновлять запас, потому что он не имеет правильного состояния. И когда вы позже измените состояние заказа, метод checkProductStock
больше никогда не будет вызван.
Вы можете создать собственный модуль замкнув на actionOrderStatusPostUpdate
(ведьма запускается внутри changeIdOrderState()
метода класса OrderHistory()
. В вашем модуле вы будете копировать метод checkProductStock()
и вызвать его с крючка, если состояние «поставляется».
EDIT
Если вы хотите добавить его непосредственно в ядре:
Edit classes/order/OrderHistory.php
В методе changeIdOrderState()
изменить последние строки:
// executes hook
Hook::exec('actionOrderStatusPostUpdate', array('newOrderStatus' => $new_os, 'id_order' => (int)$order->id,), null, false, true, false, $order->id_shop);
// Here change 4 to the desired id_order_state
if ($new_order_state == 4)
{
$virtual_products = $order->getVirtualProducts();
foreach ($virtual_products as $virtual_product)
{
$this->checkProductStock($virtual_product['product_id'], $new_order_state);
}
}
ShopUrl::resetMainDomainCache();
}
После этого добавить новый метод в этом классе:
protected function checkProductStock($product, $id_order_state)
{
$update_quantity = true;
if (!StockAvailable::dependsOnStock($product['product_id']))
{
StockAvailable::updateQuantity($product['product_id'], $product['product_attribute_id'], -(int)$product['product_quantity']);
}
Product::updateDefaultAttribute($product['product_id']);
}
Этот код не был проверен.
Я советую вам сделать это в переопределение:
Создать новый файл в /overrides/classes/order/OrderHistory.php
ведьму содержит эти два метода и изменить определение класса к class OrderHistory extends OrderHistoryCore {
, вам придется удалить /cache/class_index.php
после добавления этого файла ,
Вот почему я не использую готовые элементы, но ... Причина, по которой это не уменьшается, заключается в том, что запас не проверяется, когда статус изменен на «отправлен» (или что-то еще). Почему? Вам нужно найти код, который изменяет статус и добавляет туда чек, - хотя то, что вы сделали бы, если бы акции были недействительными, немного озадачивает - предположительно предотвратит изменение статуса, но если вы уже отправляете его ... – Mike