Избегайте уменьшения количества продукта, когда статус заказа по-прежнему «Обрабатывается»

Как избежать уменьшения количества товара, когда оно все еще находится в «Обработке», и обновления, когда заказ был отправлен или доставлен?

Я редактировал эту часть кода в orderdetail.php и добавь это $id_order_state != Configuration::get('PS_OS_PREPARATION') в заявлении if. Да, количество не уменьшается при обработке, но при отправке оно также не уменьшается. Пожалуйста, помогите, я застрял здесь.

protected function checkProductStock($product, $id_order_state)
{
if ($id_order_state != Configuration::get('PS_OS_CANCELED') && $id_order_state != Configuration::get('PS_OS_ERROR') && $id_order_state != Configuration::get('PS_OS_PREPARATION')) {
$update_quantity = true;
if (!StockAvailable::dependsOnStock($product['id_product'])) {
$update_quantity = StockAvailable::updateQuantity($product['id_product'], $product['id_product_attribute'], -(int)$product['cart_quantity']);
}

if ($update_quantity) {
$product['stock_quantity'] -= $product['cart_quantity'];
}

if ($product['stock_quantity'] < 0 && Configuration::get('PS_STOCK_MANAGEMENT')) {
$this->outOfStock = true;
}
Product::updateDefaultAttribute($product['id_product']);
}
}

2

Решение

Объект OrderDetail создается только один раз для каждого Заказа и не будет обновляться после этого даже при изменении состояния Заказа. Поэтому, когда ваш объект OrderDetail создан, с вашей модификацией он не будет обновлять запас, потому что у него нет нужного состояния. И когда вы позже измените состояние заказа метод checkProductStock больше никогда не будет звонить

Вы можете создать собственный модуль, подключенный actionOrderStatusPostUpdate (ведьма срабатывает внутри changeIdOrderState() метод класса OrderHistory(), В вашем модуле вы скопируете checkProductStock() метод и вызовите его из ловушки, если состояние «отправлено».


РЕДАКТИРОВАТЬ

Если вы хотите добавить его непосредственно в ядро:

редактировать 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 после добавления этого файла.

0

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

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

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