Не уменьшать количество товара при заказе virtuemart

Информацию нашел здесь: 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
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" 

Добавить комментарий