Информацию нашел здесь: kegla.net/showthread.php?t=11
Пункт 1 решил удалил списание товара, пунк два убил в админке модуль заказов. Но мне достаточно пункта 1
Задача: не уменьшать количество товара на складе при оформлении заказа. Не добавлять продажу (т.к. её ещё реально нет) Уменьшать количество и добавлять продажи только после подтверждения заказа.
При отмене заказа - не увеличивать количество товара, т.к. отмена означает что подтверждения ещё не было. Если отмена после подтверждения - то это уже возврат!
1. Файл administrator/components/com_virtuemart/classes/ps_checkout.php
найти и удалить или закоментировать:
PHP код:
// Update Stock Level and Product Sales, decrease - no matter if in stock or not!
$q = "UPDATE #__{vm}_product ";
$q .= "SET product_in_stock = product_in_stock - ".(int)$cart[$i]["quantity"];
$q .= " WHERE product_id = '" . $cart[$i]["product_id"]. "'";
$db->query($q);
$q = "UPDATE #__{vm}_product ";
$q .= "SET product_sales= product_sales + ".(int)$cart[$i]["quantity"];
$q .= " WHERE product_id='".$cart[$i]["product_id"]."'";
$db->query($q);
// Update stock of parent product, if all child products are sold, thanks Ragnar Brynjulfsson
if ($dboi->f("product_parent_id") != 0) {
$q = "SELECT COUNT(product_id) ";
$q .= "FROM #__{vm}_product ";
$q .= "WHERE product_parent_id = ".$dboi->f("product_parent_id");
$q .= " AND product_in_stock > 0";
$db->query($q);
$db->next_record();
if (!$db->f("COUNT(product_id)")) {
$q = "UPDATE #__{vm}_product ";
$q .= "SET product_in_stock = 0 ";
$q .= "WHERE product_id = ".$dboi->f("product_parent_id")." LIMIT 1";
$db->query($q);
}
}
2. В файле administrator/components/com_virtuemart/classes/ps_order.php
найти
PHP код:
if( $curr_order_status=="P" && $d["order_status"]=="C") {
заменить на:
PHP код:
// ZloiZmei
if( strtoupper($d["order_status"])=="C" && $curr_order_status != $d["order_status"] ) {
// Get the order items and update the stock level
// to the number before the order was placed
$q = "SELECT product_id, product_quantity FROM #__{vm}_order_item WHERE order_id='".$db->getEscaped($d["order_id"])."'";
$db->query( $q );
$dbu = new ps_DB;
require_once( CLASSPATH.'ps_product.php');
// Now update each ordered product
while( $db->next_record() ) {
if( ENABLE_DOWNLOADS == '1' && ps_product::is_downloadable($db->f("product_id")) && VM_DOWNLOADABLE_PRODUCTS_KEEP_STOCKLEVEL == '1') {
$q = "UPDATE #__{vm}_product
SET product_sales=product_sales+".$db->f("product_quantity")."
WHERE product_id=".$db->f("product_id");
$dbu->query( $q );
}
else {
$q = "UPDATE #__{vm}_product
SET product_in_stock=product_in_stock-".$db->f("product_quantity").",
product_sales=product_sales+".$db->f("product_quantity")."
WHERE product_id=".$db->f("product_id");
$dbu->query( $q );
}
}
}
// ZloiZmei if( (strtoupper($d["order_status"]) == "X" || strtoupper($d["order_status"])=="R")
if( strtoupper($d["order_status"])=="R"